System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 6e4f357e3a2e10099bb06ea7c0aeba9db223be31:


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 23 69 66 20  ng System;..#if 
0160: 44 45 42 55 47 0d 0a 20 20 75 73 69 6e 67 20 53  DEBUG..  using S
0170: 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63  ystem.Diagnostic
0180: 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 75 73  s;..#endif..  us
0190: 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74 69  ing System.Runti
01a0: 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69 63  me.InteropServic
01b0: 65 73 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73  es;..  using Sys
01c0: 74 65 6d 2e 54 65 78 74 3b 0d 0a 0d 0a 23 69 66  tem.Text;....#if
01d0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
01e0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 5b  CTFRAMEWORK..  [
01f0: 55 6e 6d 61 6e 61 67 65 64 46 75 6e 63 74 69 6f  UnmanagedFunctio
0200: 6e 50 6f 69 6e 74 65 72 28 43 61 6c 6c 69 6e 67  nPointer(Calling
0210: 43 6f 6e 76 65 6e 74 69 6f 6e 2e 43 64 65 63 6c  Convention.Cdecl
0220: 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 69 6e  )]..#endif..  in
0230: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
0240: 76 6f 69 64 20 53 51 4c 69 74 65 4c 6f 67 43 61  void SQLiteLogCa
0250: 6c 6c 62 61 63 6b 28 49 6e 74 50 74 72 20 70 75  llback(IntPtr pu
0260: 73 65 72 2c 20 69 6e 74 20 65 72 72 5f 63 6f 64  ser, int err_cod
0270: 65 2c 20 49 6e 74 50 74 72 20 6d 65 73 73 61 67  e, IntPtr messag
0280: 65 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75  e);....  /// <su
0290: 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68  mmary>..  /// Th
02a0: 69 73 20 63 6c 61 73 73 20 69 6d 70 6c 65 6d 65  is class impleme
02b0: 6e 74 73 20 53 51 4c 69 74 65 42 61 73 65 20 63  nts SQLiteBase c
02c0: 6f 6d 70 6c 65 74 65 6c 79 2c 20 61 6e 64 20 69  ompletely, and i
02d0: 73 20 74 68 65 20 67 75 74 73 20 6f 66 20 74 68  s the guts of th
02e0: 65 20 63 6f 64 65 20 74 68 61 74 20 69 6e 74 65  e code that inte
02f0: 72 6f 70 27 73 20 53 51 4c 69 74 65 20 77 69 74  rop's SQLite wit
0300: 68 20 2e 4e 45 54 0d 0a 20 20 2f 2f 2f 20 3c 2f  h .NET..  /// </
0310: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 69 6e 74 65  summary>..  inte
0320: 72 6e 61 6c 20 63 6c 61 73 73 20 53 51 4c 69 74  rnal class SQLit
0330: 65 33 20 3a 20 53 51 4c 69 74 65 42 61 73 65 0d  e3 : SQLiteBase.
0340: 0a 20 20 7b 0d 0a 20 20 20 20 70 72 69 76 61 74  .  {..    privat
0350: 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  e static object 
0360: 73 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f  syncRoot = new o
0370: 62 6a 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  bject();....    
0380: 2f 2f 0d 0a 20 20 20 20 2f 2f 20 4e 4f 54 45 3a  //..    // NOTE:
0390: 20 54 68 69 73 20 69 73 20 74 68 65 20 70 75 62   This is the pub
03a0: 6c 69 63 20 6b 65 79 20 66 6f 72 20 74 68 65 20  lic key for the 
03b0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
03c0: 74 65 20 61 73 73 65 6d 62 6c 79 2e 20 20 49 66  te assembly.  If
03d0: 20 79 6f 75 20 63 68 61 6e 67 65 20 74 68 65 0d   you change the.
03e0: 0a 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53 4e  .    //       SN
03f0: 4b 20 66 69 6c 65 2c 20 79 6f 75 20 77 69 6c 6c  K file, you will
0400: 20 6e 65 65 64 20 74 6f 20 63 68 61 6e 67 65 20   need to change 
0410: 74 68 69 73 20 61 73 20 77 65 6c 6c 2e 0d 0a 20  this as well... 
0420: 20 20 20 2f 2f 0d 0a 20 20 20 20 69 6e 74 65 72     //..    inter
0430: 6e 61 6c 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  nal const string
0440: 20 50 75 62 6c 69 63 4b 65 79 20 3d 0d 0a 20 20   PublicKey =..  
0450: 20 20 20 20 20 20 22 30 30 32 34 30 30 30 30 30        "002400000
0460: 34 38 30 30 30 30 30 39 34 30 30 30 30 30 30 30  4800000940000000
0470: 36 30 32 30 30 30 30 30 30 32 34 30 30 30 30 35  6020000002400005
0480: 32 35 33 34 31 33 31 30 30 30 34 30 30 30 30 30  2534131000400000
0490: 31 30 30 30 31 30 30 30 35 61 32 38 38 64 65 35  100010005a288de5
04a0: 36 38 37 63 34 65 31 22 20 2b 0d 0a 20 20 20 20  687c4e1" +..    
04b0: 20 20 20 20 22 62 36 32 31 64 64 66 66 35 64 38      "b621ddff5d8
04c0: 34 34 37 32 37 34 31 38 39 35 36 39 39 37 66 34  44727418956997f4
04d0: 37 35 65 62 38 32 39 34 32 39 65 34 31 31 61 66  75eb829429e411af
04e0: 66 33 65 39 33 66 39 37 62 37 30 64 65 36 39 38  f3e93f97b70de698
04f0: 62 39 37 32 36 34 30 39 32 35 62 64 64 34 34 32  b972640925bdd442
0500: 38 30 64 66 30 22 20 2b 0d 0a 20 20 20 20 20 20  80df0" +..      
0510: 20 20 22 61 32 35 61 38 34 33 32 36 36 39 37 33    "a25a843266973
0520: 37 30 34 31 33 37 63 62 62 30 65 37 34 34 31 63  704137cbb0e7441c
0530: 31 66 65 37 63 61 65 34 65 32 34 34 30 61 65 39  1fe7cae4e2440ae9
0540: 31 61 62 38 63 64 65 33 39 33 33 66 65 62 63 62  1ab8cde3933febcb
0550: 31 61 63 34 38 64 64 33 33 62 34 30 65 31 33 63  1ac48dd33b40e13c
0560: 34 32 31 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  421" +..        
0570: 22 64 38 32 31 35 63 31 38 61 34 33 34 39 61 34  "d8215c18a4349a4
0580: 33 36 64 64 34 39 39 65 33 63 33 38 35 63 63 36  36dd499e3c385cc6
0590: 38 33 30 31 35 66 38 38 36 66 36 63 31 30 62 64  83015f886f6c10bd
05a0: 39 30 31 31 35 65 62 32 62 64 36 31 62 36 37 37  90115eb2bd61b677
05b0: 35 30 38 33 39 65 33 61 31 39 39 34 31 64 63 39  50839e3a19941dc9
05c0: 63 22 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  c";....#if !PLAT
05d0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
05e0: 45 57 4f 52 4b 0d 0a 20 20 20 20 69 6e 74 65 72  EWORK..    inter
05f0: 6e 61 6c 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  nal const string
0600: 20 44 65 73 69 67 6e 65 72 56 65 72 73 69 6f 6e   DesignerVersion
0610: 20 3d 20 22 31 2e 30 2e 38 30 2e 30 22 3b 0d 0a   = "1.0.80.0";..
0620: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f  #endif....    //
0630: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0640: 20 2f 2f 2f 20 54 68 65 20 6f 70 61 71 75 65 20   /// The opaque 
0650: 70 6f 69 6e 74 65 72 20 72 65 74 75 72 6e 65 64  pointer returned
0660: 20 74 6f 20 75 73 20 62 79 20 74 68 65 20 73 71   to us by the sq
0670: 6c 69 74 65 20 70 72 6f 76 69 64 65 72 0d 0a 20  lite provider.. 
0680: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0690: 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  >..    protected
06a0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
06b0: 6e 48 61 6e 64 6c 65 20 5f 73 71 6c 3b 0d 0a 20  nHandle _sql;.. 
06c0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 72     protected str
06d0: 69 6e 67 20 5f 66 69 6c 65 4e 61 6d 65 3b 0d 0a  ing _fileName;..
06e0: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 62 6f      protected bo
06f0: 6f 6c 20 5f 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20  ol _usePool;..  
0700: 20 20 70 72 6f 74 65 63 74 65 64 20 69 6e 74 20    protected int 
0710: 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 3b 0d 0a 0d  _poolVersion;...
0720: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
0730: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
0740: 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f  .    private boo
0750: 6c 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d  l _buildingSchem
0760: 61 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  a;..#endif..    
0770: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0780: 20 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d     /// The user-
0790: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
07a0: 73 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20  s registered on 
07b0: 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  this connection.
07c0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
07d0: 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  ry>..    protect
07e0: 65 64 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ed SQLiteFunctio
07f0: 6e 5b 5d 20 5f 66 75 6e 63 74 69 6f 6e 73 41 72  n[] _functionsAr
0800: 72 61 79 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ray;....    inte
0810: 72 6e 61 6c 20 53 51 4c 69 74 65 33 28 53 51 4c  rnal SQLite3(SQL
0820: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66  iteDateFormats f
0830: 6d 74 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64  mt, DateTimeKind
0840: 20 6b 69 6e 64 29 0d 0a 20 20 20 20 20 20 3a 20   kind)..      : 
0850: 62 61 73 65 28 66 6d 74 2c 20 6b 69 6e 64 29 0d  base(fmt, kind).
0860: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 7d 0d 0a 0d  .    {..    }...
0870: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
0880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
08e0: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
08f0: 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72  "Pattern" Member
0900: 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  s..    private b
0910: 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20  ool disposed;.. 
0920: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
0930: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20  CheckDisposed() 
0940: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
0950: 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e   {..#if THROW_ON
0960: 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20  _DISPOSED..     
0970: 20 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29     if (disposed)
0980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
0990: 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69  row new ObjectDi
09a0: 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28  sposedException(
09b0: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2e  typeof(SQLite3).
09c0: 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  Name);..#endif..
09d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
09e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
09f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a00: 2f 2f 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 0d 0a 0d 0a  ////////////....
0a40: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76      protected ov
0a50: 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70  erride void Disp
0a60: 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69  ose(bool disposi
0a70: 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ng)..    {..    
0a80: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
0a90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
0aa0: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
0ab0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
0ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0ad0: 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d  /if (disposing).
0ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0af0: 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   //{..          
0b00: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
0b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0b40: 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f    //    // dispo
0b50: 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75  se managed resou
0b60: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0b80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ba0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
0bb0: 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d            //}...
0bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0bd0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bf0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
0c00: 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65           // rele
0c10: 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65  ase unmanaged re
0c20: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
0c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0c40: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c60: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
0c70: 20 20 20 20 20 20 20 20 20 20 20 43 6c 6f 73 65             Close
0c80: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
0c90: 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
0ca0: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
0cb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
0cc0: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
0cd0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ly..        {.. 
0ce0: 20 20 20 20 20 20 20 20 20 20 20 62 61 73 65 2e             base.
0cf0: 44 69 73 70 6f 73 65 28 64 69 73 70 6f 73 69 6e  Dispose(disposin
0d00: 67 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  g);..        }..
0d10: 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
0d20: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
0d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0d90: 20 20 20 20 2f 2f 20 49 74 20 69 73 6e 27 74 20      // It isn't 
0da0: 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63 6c 65  necessary to cle
0db0: 61 6e 75 70 20 61 6e 79 20 66 75 6e 63 74 69 6f  anup any functio
0dc0: 6e 73 20 77 65 27 76 65 20 72 65 67 69 73 74 65  ns we've registe
0dd0: 72 65 64 2e 20 20 49 66 20 74 68 65 20 63 6f 6e  red.  If the con
0de0: 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 20  nection..    // 
0df0: 67 6f 65 73 20 74 6f 20 74 68 65 20 70 6f 6f 6c  goes to the pool
0e00: 20 61 6e 64 20 69 73 20 72 65 73 75 72 72 65 63   and is resurrec
0e10: 74 65 64 20 6c 61 74 65 72 2c 20 72 65 2d 72 65  ted later, re-re
0e20: 67 69 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f  gistered functio
0e30: 6e 73 20 77 69 6c 6c 20 6f 76 65 72 77 72 69 74  ns will overwrit
0e40: 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f 20 70 72  e the..    // pr
0e50: 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73  evious functions
0e60: 2e 20 20 54 68 65 20 53 51 4c 69 74 65 46 75 6e  .  The SQLiteFun
0e70: 63 74 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c  ctionCookieHandl
0e80: 65 20 77 69 6c 6c 20 74 61 6b 65 20 63 61 72 65  e will take care
0e90: 20 6f 66 20 66 72 65 65 69 6e 67 20 75 6e 6d 61   of freeing unma
0ea0: 6e 61 67 65 64 0d 0a 20 20 20 20 2f 2f 20 72 65  naged..    // re
0eb0: 73 6f 75 72 63 65 73 20 62 65 6c 6f 6e 67 69 6e  sources belongin
0ec0: 67 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  g to the previou
0ed0: 73 6c 79 2d 72 65 67 69 73 74 65 72 65 64 20 66  sly-registered f
0ee0: 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 69  unctions...    i
0ef0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
0f00: 20 76 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20   void Close().. 
0f10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
0f20: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql != null).. 
0f30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0f40: 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d    if (_usePool).
0f50: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
0f60: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
0f70: 74 65 42 61 73 65 2e 52 65 73 65 74 43 6f 6e 6e  teBase.ResetConn
0f80: 65 63 74 69 6f 6e 28 5f 73 71 6c 29 3b 0d 0a 20  ection(_sql);.. 
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
0fa0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f  iteConnectionPoo
0fb0: 6c 2e 41 64 64 28 5f 66 69 6c 65 4e 61 6d 65 2c  l.Add(_fileName,
0fc0: 20 5f 73 71 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73   _sql, _poolVers
0fd0: 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion);..         
0fe0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c   }..          el
0ff0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  se..          {.
1000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
1010: 73 71 6c 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  sql.Dispose();..
1020: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1030: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75         _sql = nu
1040: 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ll;..      }..  
1050: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
1060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
10c0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
10d0: 69 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28  ide void Cancel(
10e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
10f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1100: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 74 65  ods.sqlite3_inte
1110: 72 72 75 70 74 28 5f 73 71 6c 29 3b 0d 0a 20 20  rrupt(_sql);..  
1120: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1130: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
1140: 69 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20  ing Version..   
1150: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
1160: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1170: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e 53  return SQLite3.S
1180: 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  QLiteVersion;.. 
1190: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
11a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
11b0: 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69  atic string SQLi
11c0: 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b  teVersion..    {
11d0: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
11e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
11f0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
1200: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
1210: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69  thods.sqlite3_li
1220: 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b  bversion(), -1);
1230: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1240: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
1250: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 53   static string S
1260: 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a 20  QLiteSourceId.. 
1270: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
1280: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1290: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
12a0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
12b0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
12c0: 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d 31  3_sourceid(), -1
12d0: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
12e0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
12f0: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
1300: 20 41 75 74 6f 43 6f 6d 6d 69 74 0d 0a 20 20 20   AutoCommit..   
1310: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
1320: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1330: 72 65 74 75 72 6e 20 49 73 41 75 74 6f 63 6f 6d  return IsAutocom
1340: 6d 69 74 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  mit(_sql);..    
1350: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
1360: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1370: 69 64 65 20 6c 6f 6e 67 20 4c 61 73 74 49 6e 73  ide long LastIns
1380: 65 72 74 52 6f 77 49 64 0d 0a 20 20 20 20 7b 0d  ertRowId..    {.
1390: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
13a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
13b0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
13c0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13d0: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
13e0: 64 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20  d(_sql);..      
13f0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
1400: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1410: 65 20 69 6e 74 20 43 68 61 6e 67 65 73 0d 0a 20  e int Changes.. 
1420: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
1430: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1440: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
1450: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1460: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 5f 73 71  ite3_changes(_sq
1470: 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  l);..      }..  
1480: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1490: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
14a0: 67 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20  g MemoryUsed..  
14b0: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
14c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14d0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
14e0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
14f0: 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 28  te3_memory_used(
1500: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
1510: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
1520: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
1530: 20 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72   MemoryHighwater
1540: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
1550: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
1560: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
1570: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1580: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68  sqlite3_memory_h
1590: 69 67 68 77 61 74 65 72 28 30 29 3b 0d 0a 20 20  ighwater(0);..  
15a0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
15b0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
15c0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64  >..    /// Shutd
15d0: 6f 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65  own the SQLite e
15e0: 6e 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74  ngine so that it
15f0: 20 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65   can be restarte
1600: 64 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74  d with different
1610: 20 63 6f 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e   config options.
1620: 0d 0a 20 20 20 20 2f 2f 2f 20 57 65 20 64 65 70  ..    /// We dep
1630: 65 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74  end on auto init
1640: 69 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65  ialization to re
1650: 63 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  cover...    /// 
1660: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1670: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
1680: 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f  urns a result co
1690: 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  de</returns>..  
16a0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
16b0: 69 64 65 20 69 6e 74 20 53 68 75 74 64 6f 77 6e  ide int Shutdown
16c0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
16d0: 20 20 20 69 6e 74 20 72 63 20 3d 20 55 6e 73 61     int rc = Unsa
16e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
16f0: 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e  sqlite3_shutdown
1700: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ();..        ret
1710: 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a  urn rc;..    }..
1720: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1730: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4f  verride bool IsO
1740: 70 65 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  pen()..    {..  
1750: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f 73        return (_s
1760: 71 6c 20 21 3d 20 6e 75 6c 6c 29 3b 0d 0a 20 20  ql != null);..  
1770: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1780: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
1790: 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73 74  d Open(string st
17a0: 72 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 69 74  rFilename, SQLit
17b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
17c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73   connectionFlags
17d0: 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67  , SQLiteOpenFlag
17e0: 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73 2c  sEnum openFlags,
17f0: 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a 65   int maxPoolSize
1800: 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d  , bool usePool).
1810: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
1820: 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20   (_sql != null) 
1830: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
1840: 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65 50   _usePool = useP
1850: 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  ool;..      if (
1860: 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20  usePool)..      
1870: 7b 0d 0a 20 20 20 20 20 20 20 20 5f 66 69 6c 65  {..        _file
1880: 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e 61  Name = strFilena
1890: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 5f 73 71  me;..        _sq
18a0: 6c 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  l = SQLiteConnec
18b0: 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28  tionPool.Remove(
18c0: 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78  strFilename, max
18d0: 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70  PoolSize, out _p
18e0: 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 20 20  oolVersion);..  
18f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
1900: 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29  f (_sql == null)
1910: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
1920: 20 20 20 49 6e 74 50 74 72 20 64 62 3b 0d 0a 0d     IntPtr db;...
1930: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
1940: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 69  NDARD..        i
1950: 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nt n = UnsafeNat
1960: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1970: 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28  e3_open_interop(
1980: 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61  ToUTF8(strFilena
1990: 6d 65 29 2c 20 28 69 6e 74 29 6f 70 65 6e 46 6c  me), (int)openFl
19a0: 61 67 73 2c 20 6f 75 74 20 64 62 29 3b 0d 0a 23  ags, out db);..#
19b0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 69 6e  else..        in
19c0: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
19d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
19e0: 33 5f 6f 70 65 6e 5f 76 32 28 54 6f 55 54 46 38  3_open_v2(ToUTF8
19f0: 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f  (strFilename), o
1a00: 75 74 20 64 62 2c 20 28 69 6e 74 29 6f 70 65 6e  ut db, (int)open
1a10: 46 6c 61 67 73 2c 20 49 6e 74 50 74 72 2e 5a 65  Flags, IntPtr.Ze
1a20: 72 6f 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  ro);..#endif....
1a30: 23 69 66 20 44 45 42 55 47 20 26 26 20 21 4e 45  #if DEBUG && !NE
1a40: 54 5f 43 4f 4d 50 41 43 54 5f 32 30 0d 0a 20 20  T_COMPACT_20..  
1a50: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
1a60: 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72  eLine(String.For
1a70: 6d 61 74 28 22 4f 70 65 6e 3a 20 7b 30 7d 22 2c  mat("Open: {0}",
1a80: 20 64 62 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a   db));..#endif..
1a90: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
1aa0: 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  > 0) throw new S
1ab0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
1ac0: 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20  , null);....    
1ad0: 20 20 20 20 5f 73 71 6c 20 3d 20 64 62 3b 0d 0a      _sql = db;..
1ae0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 2f        }..      /
1af0: 2f 20 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73  / Bind functions
1b00: 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63 74   to this connect
1b10: 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70 72 65  ion.  If any pre
1b20: 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 20  vious functions 
1b30: 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  of the same name
1b40: 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65 72 65 20  ..      // were 
1b50: 61 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c 20 74  already bound, t
1b60: 68 65 6e 20 74 68 65 20 6e 65 77 20 62 69 6e 64  hen the new bind
1b70: 69 6e 67 73 20 72 65 70 6c 61 63 65 20 74 68 65  ings replace the
1b80: 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 5f 66 75   old...      _fu
1b90: 6e 63 74 69 6f 6e 73 41 72 72 61 79 20 3d 20 53  nctionsArray = S
1ba0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69  QLiteFunction.Bi
1bb0: 6e 64 46 75 6e 63 74 69 6f 6e 73 28 74 68 69 73  ndFunctions(this
1bc0: 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  , connectionFlag
1bd0: 73 29 3b 0d 0a 20 20 20 20 20 20 53 65 74 54 69  s);..      SetTi
1be0: 6d 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20 7d  meout(0);..    }
1bf0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
1c00: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
1c10: 6c 65 61 72 50 6f 6f 6c 28 29 0d 0a 20 20 20 20  learPool()..    
1c20: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43  {..      SQLiteC
1c30: 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c  onnectionPool.Cl
1c40: 65 61 72 50 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d  earPool(_fileNam
1c50: 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
1c60: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1c70: 69 64 65 20 76 6f 69 64 20 53 65 74 54 69 6d 65  ide void SetTime
1c80: 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74  out(int nTimeout
1c90: 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  MS)..    {..    
1ca0: 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65    int n = Unsafe
1cb0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1cc0: 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
1cd0: 75 74 28 5f 73 71 6c 2c 20 6e 54 69 6d 65 6f 75  ut(_sql, nTimeou
1ce0: 74 4d 53 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  tMS);..      if 
1cf0: 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65  (n > 0) throw ne
1d00: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
1d10: 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45  n(n, SQLiteLastE
1d20: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
1d30: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1d40: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74  override bool St
1d50: 65 70 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ep(SQLiteStateme
1d60: 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d  nt stmt)..    {.
1d70: 0a 20 20 20 20 20 20 69 6e 74 20 6e 3b 0d 0a 20  .      int n;.. 
1d80: 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20       Random rnd 
1d90: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75  = null;..      u
1da0: 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20  int starttick = 
1db0: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
1dc0: 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 20 20  t.TickCount;..  
1dd0: 20 20 20 20 75 69 6e 74 20 74 69 6d 65 6f 75 74      uint timeout
1de0: 20 3d 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f   = (uint)(stmt._
1df0: 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64  command._command
1e00: 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 3b  Timeout * 1000);
1e10: 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20  ....      while 
1e20: 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d  (true)..      {.
1e30: 0a 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  .        n = Uns
1e40: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1e50: 2e 73 71 6c 69 74 65 33 5f 73 74 65 70 28 73 74  .sqlite3_step(st
1e60: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29  mt._sqlite_stmt)
1e70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
1e80: 28 6e 20 3d 3d 20 31 30 30 29 20 72 65 74 75 72  (n == 100) retur
1e90: 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
1ea0: 20 69 66 20 28 6e 20 3d 3d 20 31 30 31 29 20 72   if (n == 101) r
1eb0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
1ec0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20          if (n > 
1ed0: 30 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  0)..        {.. 
1ee0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 3b 0d           int r;.
1ef0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ...          // 
1f00: 41 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  An error occurre
1f10: 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65  d, attempt to re
1f20: 73 65 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e  set the statemen
1f30: 74 2e 20 20 49 66 20 74 68 65 20 72 65 73 65 74  t.  If the reset
1f40: 20 77 6f 72 6b 65 64 20 62 65 63 61 75 73 65 20   worked because 
1f50: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  the..          /
1f60: 2f 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  / schema has cha
1f70: 6e 67 65 64 2c 20 72 65 2d 74 72 79 20 74 68 65  nged, re-try the
1f80: 20 73 74 65 70 20 61 67 61 69 6e 2e 20 20 49 66   step again.  If
1f90: 20 69 74 20 65 72 72 6f 72 65 64 20 6f 75 72 20   it errored our 
1fa0: 62 65 63 61 75 73 65 20 74 68 65 20 64 61 74 61  because the data
1fb0: 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  base..          
1fc0: 2f 2f 20 69 73 20 6c 6f 63 6b 65 64 2c 20 74 68  // is locked, th
1fd0: 65 6e 20 6b 65 65 70 20 72 65 74 72 79 69 6e 67  en keep retrying
1fe0: 20 75 6e 74 69 6c 20 74 68 65 20 63 6f 6d 6d 61   until the comma
1ff0: 6e 64 20 74 69 6d 65 6f 75 74 20 6f 63 63 75 72  nd timeout occur
2000: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 72 20  s...          r 
2010: 3d 20 52 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a  = Reset(stmt);..
2020: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
2030: 72 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  r == 0)..       
2040: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
2050: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
2060: 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  , SQLiteLastErro
2070: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r());....       
2080: 20 20 20 65 6c 73 65 20 69 66 20 28 28 72 20 3d     else if ((r =
2090: 3d 20 36 20 7c 7c 20 72 20 3d 3d 20 35 29 20 26  = 6 || r == 5) &
20a0: 26 20 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20  & stmt._command 
20b0: 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 53 51 4c 49  != null) // SQLI
20c0: 54 45 5f 4c 4f 43 4b 45 44 20 7c 7c 20 53 51 4c  TE_LOCKED || SQL
20d0: 49 54 45 5f 42 55 53 59 0d 0a 20 20 20 20 20 20  ITE_BUSY..      
20e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20f0: 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e     // Keep tryin
2100: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  g..            i
2110: 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20  f (rnd == null) 
2120: 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20 77 65  // First time we
2130: 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  've encountered 
2140: 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20  the lock..      
2150: 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65          rnd = ne
2160: 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20  w Random();.... 
2170: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66             // If
2180: 20 77 65 27 76 65 20 65 78 63 65 65 64 65 64 20   we've exceeded 
2190: 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69  the command's ti
21a0: 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61  meout, give up a
21b0: 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f  nd throw an erro
21c0: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  r..            i
21d0: 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e  f ((uint)Environ
21e0: 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d  ment.TickCount -
21f0: 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d   starttick > tim
2200: 65 6f 75 74 29 0d 0a 20 20 20 20 20 20 20 20 20  eout)..         
2210: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2220: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
2230: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 2c  LiteException(r,
2240: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
2250: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
2260: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2270: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
2280: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2290: 20 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73 65      // Otherwise
22a0: 20 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61 6e   sleep for a ran
22b0: 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69  dom amount of ti
22c0: 6d 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a  me up to 150ms..
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
22e0: 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54  stem.Threading.T
22f0: 68 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e  hread.Sleep(rnd.
2300: 4e 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a  Next(1, 150));..
2310: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2320: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2330: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
2340: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
2350: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
2360: 6e 74 20 52 65 73 65 74 28 53 51 4c 69 74 65 53  nt Reset(SQLiteS
2370: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a  tatement stmt)..
2380: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
2390: 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49   n;....#if !SQLI
23a0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
23b0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
23c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
23d0: 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f 70  e3_reset_interop
23e0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
23f0: 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  mt);..#else..   
2400: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
2410: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2420: 65 33 5f 72 65 73 65 74 28 73 74 6d 74 2e 5f 73  e3_reset(stmt._s
2430: 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65  qlite_stmt);..#e
2440: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  ndif....      //
2450: 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63   If the schema c
2460: 68 61 6e 67 65 64 2c 20 74 72 79 20 61 6e 64 20  hanged, try and 
2470: 72 65 2d 70 72 65 70 61 72 65 20 69 74 0d 0a 20  re-prepare it.. 
2480: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 31 37       if (n == 17
2490: 29 20 2f 2f 20 53 51 4c 49 54 45 5f 53 43 48 45  ) // SQLITE_SCHE
24a0: 4d 41 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  MA..      {..   
24b0: 20 20 20 20 20 2f 2f 20 52 65 63 72 65 61 74 65       // Recreate
24c0: 20 61 20 64 75 6d 6d 79 20 73 74 61 74 65 6d 65   a dummy stateme
24d0: 6e 74 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  nt..        stri
24e0: 6e 67 20 73 74 72 3b 0d 0a 20 20 20 20 20 20 20  ng str;..       
24f0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 53 74   using (SQLiteSt
2500: 61 74 65 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72  atement tmp = Pr
2510: 65 70 61 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74  epare(null, stmt
2520: 2e 5f 73 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20  ._sqlStatement, 
2530: 6e 75 6c 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d  null, (uint)(stm
2540: 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d  t._command._comm
2550: 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30  andTimeout * 100
2560: 30 29 2c 20 6f 75 74 20 73 74 72 29 29 0d 0a 20  0), out str)).. 
2570: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2580: 20 20 20 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20      // Finalize 
2590: 74 68 65 20 65 78 69 73 74 69 6e 67 20 73 74 61  the existing sta
25a0: 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  tement..        
25b0: 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73    stmt._sqlite_s
25c0: 74 6d 74 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  tmt.Dispose();..
25d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61            // Rea
25e0: 73 73 69 67 6e 20 61 20 6e 65 77 20 73 74 61 74  ssign a new stat
25f0: 65 6d 65 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f  ement pointer to
2600: 20 74 68 65 20 6f 6c 64 20 73 74 61 74 65 6d 65   the old stateme
2610: 6e 74 20 61 6e 64 20 63 6c 65 61 72 20 74 68 65  nt and clear the
2620: 20 74 65 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a   temporary one..
2630: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f            stmt._
2640: 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 74 6d  sqlite_stmt = tm
2650: 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  p._sqlite_stmt;.
2660: 0a 20 20 20 20 20 20 20 20 20 20 74 6d 70 2e 5f  .          tmp._
2670: 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 6e 75  sqlite_stmt = nu
2680: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
2690: 20 2f 2f 20 52 65 61 70 70 6c 79 20 70 61 72 61   // Reapply para
26a0: 6d 65 74 65 72 73 0d 0a 20 20 20 20 20 20 20 20  meters..        
26b0: 20 20 73 74 6d 74 2e 42 69 6e 64 50 61 72 61 6d    stmt.BindParam
26c0: 65 74 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20  eters();..      
26d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74    }..        ret
26e0: 75 72 6e 20 2d 31 3b 20 2f 2f 20 52 65 73 65 74  urn -1; // Reset
26f0: 20 77 61 73 20 4f 4b 2c 20 77 69 74 68 20 73 63   was OK, with sc
2700: 68 65 6d 61 20 63 68 61 6e 67 65 0d 0a 20 20 20  hema change..   
2710: 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65     }..      else
2720: 20 69 66 20 28 6e 20 3d 3d 20 36 20 7c 7c 20 6e   if (n == 6 || n
2730: 20 3d 3d 20 35 29 20 2f 2f 20 53 51 4c 49 54 45   == 5) // SQLITE
2740: 5f 4c 4f 43 4b 45 44 20 7c 7c 20 53 51 4c 49 54  _LOCKED || SQLIT
2750: 45 5f 42 55 53 59 0d 0a 20 20 20 20 20 20 20 20  E_BUSY..        
2760: 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20  return n;....   
2770: 20 20 20 69 66 20 28 6e 20 3e 20 30 29 0d 0a 20     if (n > 0).. 
2780: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
2790: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
27a0: 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72  (n, SQLiteLastEr
27b0: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
27c0: 20 72 65 74 75 72 6e 20 30 3b 20 2f 2f 20 57 65   return 0; // We
27d0: 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73 63   reset OK, no sc
27e0: 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20 20  hema changes..  
27f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2800: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
2810: 69 6e 67 20 53 51 4c 69 74 65 4c 61 73 74 45 72  ing SQLiteLastEr
2820: 72 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ror()..    {..  
2830: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
2840: 65 42 61 73 65 2e 53 51 4c 69 74 65 4c 61 73 74  eBase.SQLiteLast
2850: 45 72 72 6f 72 28 5f 73 71 6c 29 3b 0d 0a 20 20  Error(_sql);..  
2860: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2870: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
2880: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72 65  iteStatement Pre
2890: 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65  pare(SQLiteConne
28a0: 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e  ction cnn, strin
28b0: 67 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74 65  g strSql, SQLite
28c0: 53 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69 6f  Statement previo
28d0: 75 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75 74  us, uint timeout
28e0: 4d 53 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 73  MS, out string s
28f0: 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20 20 7b  trRemain)..    {
2900: 0d 0a 20 20 20 20 20 20 69 66 20 28 21 53 74 72  ..      if (!Str
2910: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
2920: 79 28 73 74 72 53 71 6c 29 29 0d 0a 20 20 20 20  y(strSql))..    
2930: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d    {..        //.
2940: 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
2950: 3a 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  : SQLite does no
2960: 74 20 73 75 70 70 6f 72 74 20 74 68 65 20 63 6f  t support the co
2970: 6e 63 65 70 74 20 6f 66 20 73 65 70 61 72 61 74  ncept of separat
2980: 65 20 73 63 68 65 6d 61 73 0d 0a 20 20 20 20 20  e schemas..     
2990: 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 20 6f     //       in o
29a0: 6e 65 20 64 61 74 61 62 61 73 65 3b 20 74 68 65  ne database; the
29b0: 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65 20 74  refore, remove t
29c0: 68 65 20 62 61 73 65 20 73 63 68 65 6d 61 20 6e  he base schema n
29d0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ame..        // 
29e0: 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 73 6d        used to sm
29f0: 6f 6f 74 68 20 69 6e 74 65 67 72 61 74 69 6f 6e  ooth integration
2a00: 20 77 69 74 68 20 74 68 65 20 62 61 73 65 20 2e   with the base .
2a10: 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d 0a 20  NET Framework.. 
2a20: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2a30: 64 61 74 61 20 63 6c 61 73 73 65 73 2e 0d 0a 20  data classes... 
2a40: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2a50: 20 20 20 73 74 72 69 6e 67 20 62 61 73 65 53 63     string baseSc
2a60: 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e 6e 20  hemaName = (cnn 
2a70: 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f  != null) ? cnn._
2a80: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3a  baseSchemaName :
2a90: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
2aa0: 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
2ab0: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61 73 65  NullOrEmpty(base
2ac0: 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a 20 20  SchemaName))..  
2ad0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ae0: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53     strSql = strS
2af0: 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20  ql.Replace(..   
2b00: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
2b10: 67 2e 46 6f 72 6d 61 74 28 22 5b 7b 30 7d 5d 2e  g.Format("[{0}].
2b20: 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  ", baseSchemaNam
2b30: 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  e), String.Empty
2b40: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2b50: 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e  strSql = strSql.
2b60: 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20  Replace(..      
2b70: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
2b80: 6f 72 6d 61 74 28 22 7b 30 7d 2e 22 2c 20 62 61  ormat("{0}.", ba
2b90: 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53  seSchemaName), S
2ba0: 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20  tring.Empty);.. 
2bb0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2bc0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  }....      SQLit
2bd0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
2be0: 20 66 6c 61 67 73 20 3d 0d 0a 20 20 20 20 20 20   flags =..      
2bf0: 20 20 20 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c      (cnn != null
2c00: 29 20 3f 20 63 6e 6e 2e 46 6c 61 67 73 20 3a 20  ) ? cnn.Flags : 
2c10: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2c20: 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 3b 0d 0a  Flags.Default;..
2c30: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
2c40: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
2c50: 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66 6c 61  ..      if ((fla
2c60: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
2c70: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72  ctionFlags.LogPr
2c80: 65 70 61 72 65 29 20 3d 3d 20 53 51 4c 69 74 65  epare) == SQLite
2c90: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
2ca0: 4c 6f 67 50 72 65 70 61 72 65 29 0d 0a 20 20 20  LogPrepare)..   
2cb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2cc0: 69 66 20 28 28 73 74 72 53 71 6c 20 3d 3d 20 6e  if ((strSql == n
2cd0: 75 6c 6c 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e  ull) || (strSql.
2ce0: 4c 65 6e 67 74 68 20 3d 3d 20 30 29 20 7c 7c 20  Length == 0) || 
2cf0: 28 73 74 72 53 71 6c 2e 54 72 69 6d 28 29 2e 4c  (strSql.Trim().L
2d00: 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a 20 20  ength == 0))..  
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
2d20: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
2d30: 28 30 2c 20 22 50 72 65 70 61 72 69 6e 67 20 7b  (0, "Preparing {
2d40: 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b  <nothing>}...");
2d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
2d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d70: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
2d80: 73 61 67 65 28 30 2c 20 53 74 72 69 6e 67 2e 46  sage(0, String.F
2d90: 6f 72 6d 61 74 28 22 50 72 65 70 61 72 69 6e 67  ormat("Preparing
2da0: 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74   {{{0}}}...", st
2db0: 72 53 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20 7d  rSql));..      }
2dc0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
2dd0: 20 20 49 6e 74 50 74 72 20 73 74 6d 74 20 3d 20    IntPtr stmt = 
2de0: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
2df0: 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d      IntPtr ptr =
2e00: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
2e10: 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
2e20: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  ;..      int n =
2e30: 20 31 37 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20   17;..      int 
2e40: 72 65 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20  retries = 0;..  
2e50: 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54      byte[] b = T
2e60: 6f 55 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a  oUTF8(strSql);..
2e70: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
2e80: 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  edefs = null;.. 
2e90: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
2ea0: 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b  ment cmd = null;
2eb0: 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72  ..      Random r
2ec0: 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  nd = null;..    
2ed0: 20 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b    uint starttick
2ee0: 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e   = (uint)Environ
2ef0: 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d  ment.TickCount;.
2f00: 0a 0d 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c  ...      GCHandl
2f10: 65 20 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e  e handle = GCHan
2f20: 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48  dle.Alloc(b, GCH
2f30: 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64  andleType.Pinned
2f40: 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  );..      IntPtr
2f50: 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41   psql = handle.A
2f60: 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63  ddrOfPinnedObjec
2f70: 74 28 29 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d  t();..      try.
2f80: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2f90: 20 20 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20 31    while ((n == 1
2fa0: 37 20 7c 7c 20 6e 20 3d 3d 20 36 20 7c 7c 20 6e  7 || n == 6 || n
2fb0: 20 3d 3d 20 35 29 20 26 26 20 72 65 74 72 69 65   == 5) && retrie
2fc0: 73 20 3c 20 33 29 0d 0a 20 20 20 20 20 20 20 20  s < 3)..        
2fd0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
2fe0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
2ff0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
3000: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
3010: 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72  e3_prepare_inter
3020: 6f 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62  op(_sql, psql, b
3030: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74  .Length - 1, out
3040: 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 2c 20   stmt, out ptr, 
3050: 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  out len);..#else
3060: 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20  ..          n = 
3070: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
3080: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70  ods.sqlite3_prep
3090: 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20  are(_sql, psql, 
30a0: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75  b.Length - 1, ou
30b0: 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 29  t stmt, out ptr)
30c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e  ;..          len
30d0: 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a   = -1;..#endif..
30e0: 0d 0a 23 69 66 20 44 45 42 55 47 20 26 26 20 21  ..#if DEBUG && !
30f0: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 0d 0a  NET_COMPACT_20..
3100: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
3110: 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67  WriteLine(String
3120: 2e 46 6f 72 6d 61 74 28 22 50 72 65 70 61 72 65  .Format("Prepare
3130: 3a 20 7b 30 7d 22 2c 20 73 74 6d 74 29 29 3b 0d  : {0}", stmt));.
3140: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
3150: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 31 37       if (n == 17
3160: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
3170: 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20  etries++;..     
3180: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
3190: 3d 3d 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20  == 1)..         
31a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31b0: 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61  if (String.Compa
31c0: 72 65 28 53 51 4c 69 74 65 4c 61 73 74 45 72 72  re(SQLiteLastErr
31d0: 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c 22 54 59  or(), "near \"TY
31e0: 50 45 53 5c 22 3a 20 73 79 6e 74 61 78 20 65 72  PES\": syntax er
31f0: 72 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70  ror", StringComp
3200: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
3210: 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d  noreCase) == 0).
3220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
3230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
3240: 74 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 49  t pos = strSql.I
3250: 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20 20  ndexOf(';');..  
3260: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3270: 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20 3d  pos == -1) pos =
3280: 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d   strSql.Length -
3290: 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   1;....         
32a0: 20 20 20 20 20 74 79 70 65 64 65 66 73 20 3d 20       typedefs = 
32b0: 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67  strSql.Substring
32c0: 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a 20  (0, pos + 1);.. 
32d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
32e0: 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75 62  Sql = strSql.Sub
32f0: 73 74 72 69 6e 67 28 70 6f 73 20 2b 20 31 29 3b  string(pos + 1);
3300: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3310: 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22    strRemain = ""
3320: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3330: 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d     while (cmd ==
3340: 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e   null && strSql.
3350: 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20  Length > 0)..   
3360: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d                cm
3380: 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c  d = Prepare(cnn,
3390: 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75   strSql, previou
33a0: 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75  s, timeoutMS, ou
33b0: 74 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20  t strRemain);.. 
33c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
33d0: 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69  trSql = strRemai
33e0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
33f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
3400: 20 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d 20       if (cmd != 
3410: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3420: 20 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54 79         cmd.SetTy
3430: 70 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d 0a  pes(typedefs);..
3440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3450: 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20  return cmd;..   
3460: 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20           }..#if 
3470: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
3480: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
3490: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
34a0: 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61  (_buildingSchema
34b0: 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72   == false && Str
34c0: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 53 51 4c 69  ing.Compare(SQLi
34d0: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 30  teLastError(), 0
34e0: 2c 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  , "no such table
34f0: 3a 20 54 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20  : TEMP.SCHEMA", 
3500: 30 2c 20 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d  0, 26, StringCom
3510: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
3520: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
3530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
3540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
3550: 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a  trRemain = "";..
3560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 62                _b
3570: 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20  uildingSchema = 
3580: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
3590: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
35a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35b0: 20 20 20 20 20 20 20 20 20 20 20 49 53 51 4c 69             ISQLi
35c0: 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f  teSchemaExtensio
35d0: 6e 73 20 65 78 74 20 3d 20 28 28 49 53 65 72 76  ns ext = ((IServ
35e0: 69 63 65 50 72 6f 76 69 64 65 72 29 53 51 4c 69  iceProvider)SQLi
35f0: 74 65 46 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e  teFactory.Instan
3600: 63 65 29 2e 47 65 74 53 65 72 76 69 63 65 28 74  ce).GetService(t
3610: 79 70 65 6f 66 28 49 53 51 4c 69 74 65 53 63 68  ypeof(ISQLiteSch
3620: 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 29 29 20  emaExtensions)) 
3630: 61 73 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61  as ISQLiteSchema
3640: 45 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20  Extensions;.... 
3650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3660: 66 20 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d  f (ext != null).
3670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3680: 20 20 20 65 78 74 2e 42 75 69 6c 64 54 65 6d 70     ext.BuildTemp
3690: 53 63 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a  Schema(cnn);....
36a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b0: 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75  while (cmd == nu
36c0: 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e  ll && strSql.Len
36d0: 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
36e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
3700: 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e  md = Prepare(cnn
3710: 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f  , strSql, previo
3720: 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f  us, timeoutMS, o
3730: 75 74 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a  ut strRemain);..
3740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3750: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65    strSql = strRe
3760: 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  main;..         
3770: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3780: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3790: 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20  rn cmd;..       
37a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
37b0: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
37c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
37d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37e0: 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d    _buildingSchem
37f0: 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  a = false;..    
3800: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3810: 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64           }..#end
3820: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  if..          }.
3830: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
3840: 69 66 20 28 6e 20 3d 3d 20 36 20 7c 7c 20 6e 20  if (n == 6 || n 
3850: 3d 3d 20 35 29 20 2f 2f 20 4c 6f 63 6b 65 64 20  == 5) // Locked 
3860: 2d 2d 20 64 65 6c 61 79 20 61 20 73 6d 61 6c 6c  -- delay a small
3870: 20 61 6d 6f 75 6e 74 20 62 65 66 6f 72 65 20 72   amount before r
3880: 65 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20  etrying..       
3890: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
38a0: 20 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67    // Keep trying
38b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
38c0: 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f   (rnd == null) /
38d0: 2f 20 46 69 72 73 74 20 74 69 6d 65 20 77 65 27  / First time we'
38e0: 76 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74  ve encountered t
38f0: 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20  he lock..       
3900: 20 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77         rnd = new
3910: 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20   Random();....  
3920: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20            // If 
3930: 77 65 27 76 65 20 65 78 63 65 65 64 65 64 20 74  we've exceeded t
3940: 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d  he command's tim
3950: 65 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e  eout, give up an
3960: 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72  d throw an error
3970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
3980: 20 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d   ((uint)Environm
3990: 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20  ent.TickCount - 
39a0: 73 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65  starttick > time
39b0: 6f 75 74 4d 53 29 0d 0a 20 20 20 20 20 20 20 20  outMS)..        
39c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
39d0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
39e0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
39f0: 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  , SQLiteLastErro
3a00: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
3a10: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
3a20: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
3a30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3a40: 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73       // Otherwis
3a50: 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61  e sleep for a ra
3a60: 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74  ndom amount of t
3a70: 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d  ime up to 150ms.
3a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
3a90: 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e  ystem.Threading.
3aa0: 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64  Thread.Sleep(rnd
3ab0: 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d  .Next(1, 150));.
3ac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3ad0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3ae0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3af0: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
3b00: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
3b10: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
3b20: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
3b30: 0a 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61  .        strRema
3b40: 69 6e 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  in = UTF8ToStrin
3b50: 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a  g(ptr, len);....
3b60: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74          if (stmt
3b70: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
3b80: 20 63 6d 64 20 3d 20 6e 65 77 20 53 51 4c 69 74   cmd = new SQLit
3b90: 65 53 74 61 74 65 6d 65 6e 74 28 74 68 69 73 2c  eStatement(this,
3ba0: 20 66 6c 61 67 73 2c 20 73 74 6d 74 2c 20 73 74   flags, stmt, st
3bb0: 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30  rSql.Substring(0
3bc0: 2c 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  , strSql.Length 
3bd0: 2d 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67  - strRemain.Leng
3be0: 74 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d  th), previous);.
3bf0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
3c00: 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d  n cmd;..      }.
3c10: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
3c20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3c30: 20 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d   handle.Free();.
3c40: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
3c50: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
3c60: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
3c70: 4b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  K..    protected
3c80: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
3c90: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
3ca0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
3cb0: 65 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  e, int index).. 
3cc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
3cd0: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
3ce0: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
3cf0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
3d00: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 30 2c 20 53  .LogMessage(0, S
3d10: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
3d20: 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64             "Bind
3d30: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30  ing statement {0
3d40: 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20  } paramter #{1} 
3d50: 61 73 20 4e 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20 20  as NULL...",..  
3d60: 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65            handle
3d70: 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 29 29 3b  IntPtr, index));
3d80: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
3d90: 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20  rotected static 
3da0: 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c  void LogBind(SQL
3db0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
3dc0: 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69  le handle, int i
3dd0: 6e 64 65 78 2c 20 56 61 6c 75 65 54 79 70 65 20  ndex, ValueType 
3de0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
3df0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
3e00: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
3e10: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
3e20: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
3e30: 73 61 67 65 28 30 2c 20 53 74 72 69 6e 67 2e 46  sage(0, String.F
3e40: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
3e50: 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61      "Binding sta
3e60: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
3e70: 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65  ter #{1} as type
3e80: 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20   {2} with value 
3e90: 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20  {{{3}}}...",..  
3ea0: 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65            handle
3eb0: 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 76  IntPtr, index, v
3ec0: 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 2c 20  alue.GetType(), 
3ed0: 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d  value));..    }.
3ee0: 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ...    private s
3ef0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f 72  tatic string For
3f00: 6d 61 74 44 61 74 65 54 69 6d 65 28 44 61 74 65  matDateTime(Date
3f10: 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  Time value)..   
3f20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69   {..        Stri
3f30: 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74  ngBuilder result
3f40: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
3f50: 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  lder();....     
3f60: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
3f70: 28 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28  (value.ToString(
3f80: 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d  "yyyy-MM-ddTHH:m
3f90: 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 29 29  m:ss.FFFFFFFK"))
3fa0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c  ;..        resul
3fb0: 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a  t.Append(' ');..
3fc0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
3fd0: 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b 69 6e 64  ppend(value.Kind
3fe0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
3ff0: 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d  lt.Append(' ');.
4000: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
4010: 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 69 63  Append(value.Tic
4020: 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ks);....        
4030: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f  return result.To
4040: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d  String();..    }
4050: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
4060: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
4070: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
4080: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
4090: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 44  le, int index, D
40a0: 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a  ateTime value)..
40b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
40c0: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
40d0: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
40e0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
40f0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 30 2c 20  g.LogMessage(0, 
4100: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
4110: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
4120: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
4130: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
4140: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
4150: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
4160: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
4170: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
4180: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61  index, typeof(Da
4190: 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44  teTime), FormatD
41a0: 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29  ateTime(value)))
41b0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
41c0: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
41d0: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
41e0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
41f0: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
4200: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
4210: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
4220: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
4230: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
4240: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
4250: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
4260: 67 65 28 30 2c 20 53 74 72 69 6e 67 2e 46 6f 72  ge(0, String.For
4270: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
4280: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
4290: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
42a0: 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b  r #{1} as type {
42b0: 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b  2} with value {{
42c0: 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20  {3}}}...",..    
42d0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
42e0: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70  tPtr, index, typ
42f0: 65 6f 66 28 53 74 72 69 6e 67 29 2c 20 28 76 61  eof(String), (va
4300: 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76  lue != null) ? v
4310: 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29  alue : "<null>")
4320: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
4330: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
4340: 73 74 72 69 6e 67 20 54 6f 48 65 78 61 64 65 63  string ToHexadec
4350: 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20  imalString(..   
4360: 20 20 20 20 20 62 79 74 65 5b 5d 20 61 72 72 61       byte[] arra
4370: 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  y..        )..  
4380: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
4390: 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d  (array == null).
43a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
43b0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
43c0: 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
43d0: 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  er result = new 
43e0: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 61 72  StringBuilder(ar
43f0: 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b  ray.Length * 2);
4400: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ....        int 
4410: 6c 65 6e 67 74 68 20 3d 20 61 72 72 61 79 2e 4c  length = array.L
4420: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
4430: 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
4440: 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65   = 0; index < le
4450: 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a  ngth; index++)..
4460: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
4470: 6c 74 2e 41 70 70 65 6e 64 28 61 72 72 61 79 5b  lt.Append(array[
4480: 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28  index].ToString(
4490: 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  "x2"));....     
44a0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
44b0: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
44c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
44d0: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
44e0: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
44f0: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
4500: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
4510: 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d  , byte[] value).
4520: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4530: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
4540: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
4550: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
4560: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 30 2c  og.LogMessage(0,
4570: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
4580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69  .            "Bi
4590: 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  nding statement 
45a0: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
45b0: 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69  } as type {2} wi
45c0: 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d  th value {{{3}}}
45d0: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
45e0: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
45f0: 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 42   index, typeof(B
4600: 79 74 65 5b 5d 29 2c 20 28 76 61 6c 75 65 20 21  yte[]), (value !
4610: 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 48 65 78 61  = null) ? ToHexa
4620: 64 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 76 61  decimalString(va
4630: 6c 75 65 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29  lue) : "<null>")
4640: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69  );..    }..#endi
4650: 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  f....    interna
4660: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
4670: 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69  Bind_Double(SQLi
4680: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
4690: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
46a0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
46b0: 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65  nt index, double
46c0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
46d0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
46e0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
46f0: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
4700: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
4710: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
4720: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
4730: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
4740: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
4750: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
4760: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
4770: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
4780: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
4790: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
47a0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
47b0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
47c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
47d0: 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  int n = UnsafeNa
47e0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
47f0: 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28  te3_bind_double(
4800: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
4810: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
4820: 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55         int n = U
4830: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4840: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
4850: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68  double_interop(h
4860: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
4870: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  f value);..#endi
4880: 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  f..        if (n
4890: 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20   > 0) throw new 
48a0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
48b0: 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72  n, SQLiteLastErr
48c0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
48d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
48e0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
48f0: 5f 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61  _Int32(SQLiteSta
4900: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
4910: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
4920: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
4930: 64 65 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d  dex, int value).
4940: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4950: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
4960: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
4970: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
4980: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
4990: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
49a0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
49b0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
49c0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
49d0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
49e0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
49f0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
4a00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4a10: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
4a20: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
4a30: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
4a40: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
4a50: 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  int n = UnsafeNa
4a60: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4a70: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e  te3_bind_int(han
4a80: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
4a90: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e);..        if 
4aa0: 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65  (n > 0) throw ne
4ab0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
4ac0: 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45  n(n, SQLiteLastE
4ad0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
4ae0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4af0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
4b00: 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74 65  nd_UInt32(SQLite
4b10: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
4b20: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
4b30: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
4b40: 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76 61 6c   index, uint val
4b50: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
4b60: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
4b70: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
4b80: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
4b90: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
4ba0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
4bb0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
4bc0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
4bd0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
4be0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
4bf0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
4c00: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
4c10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4c20: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
4c30: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
4c40: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
4c50: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
4c60: 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61      int n = Unsa
4c70: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4c80: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e  sqlite3_bind_uin
4c90: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
4ca0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
4cb0: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
4cc0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
4cd0: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
4ce0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
4cf0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4d00: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
4d10: 69 64 20 42 69 6e 64 5f 49 6e 74 36 34 28 53 51  id Bind_Int64(SQ
4d20: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
4d30: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
4d40: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
4d50: 20 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67   int index, long
4d60: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
4d70: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
4d80: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
4d90: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
4da0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
4db0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
4dc0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
4dd0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
4de0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
4df0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
4e00: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
4e10: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
4e20: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
4e30: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
4e40: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
4e50: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
4e60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4e70: 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  int n = UnsafeNa
4e80: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4e90: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68  te3_bind_int64(h
4ea0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
4eb0: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
4ec0: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
4ed0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4ee0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
4ef0: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
4f00: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
4f10: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
4f20: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e  .        if (n >
4f30: 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51   0) throw new SQ
4f40: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
4f50: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
4f60: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
4f70: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
4f80: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55  ride void Bind_U
4f90: 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74  Int64(SQLiteStat
4fa0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
4fb0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
4fc0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
4fd0: 65 78 2c 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29  ex, ulong value)
4fe0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4ff0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
5000: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
5010: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
5020: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
5030: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
5040: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
5050: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
5060: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5070: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
5080: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
5090: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
50a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
50b0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
50c0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
50d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
50e0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  .        int n =
50f0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5100: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
5110: 64 5f 75 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c  d_uint64(handle,
5120: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
5130: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
5140: 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  int n = UnsafeNa
5150: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5160: 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 5f  te3_bind_uint64_
5170: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
5180: 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
5190: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
51a0: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74      if (n > 0) t
51b0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
51c0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
51d0: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
51e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
51f0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5200: 76 6f 69 64 20 42 69 6e 64 5f 54 65 78 74 28 53  void Bind_Text(S
5210: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
5220: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
5230: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
5240: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72  , int index, str
5250: 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
5260: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
5270: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
5280: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
5290: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
52a0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
52b0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
52c0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
52d0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
52e0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
52f0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
5300: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
5310: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
5320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
5330: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
5340: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
5350: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
5360: 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b  ...        byte[
5370: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c  ] b = ToUTF8(val
5380: 75 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  ue);....#if !PLA
5390: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
53a0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
53b0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
53c0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
53d0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
53e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
53f0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
5400: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5410: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
5420: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b  ndle, index, b);
5430: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
5440: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  dif....        i
5450: 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nt n = UnsafeNat
5460: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5470: 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61 6e  e3_bind_text(han
5480: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62  dle, index, b, b
5490: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e  .Length - 1, (In
54a0: 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20  tPtr)(-1));..   
54b0: 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20       if (n > 0) 
54c0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
54d0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c  Exception(n, SQL
54e0: 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  iteLastError());
54f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
5500: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
5510: 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65 54   void Bind_DateT
5520: 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ime(SQLiteStatem
5530: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
5540: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
5550: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
5560: 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29 0d 0a  , DateTime dt)..
5570: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
5580: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
5590: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
55a0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
55b0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
55c0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
55d0: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
55e0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
55f0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
5600: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
5610: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5620: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
5630: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5640: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
5650: 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d 0a 20  , index, dt);.. 
5660: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
5670: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74  ....        swit
5680: 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72  ch (_datetimeFor
5690: 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  mat)..        {.
56a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
56b0: 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e SQLiteDateForm
56c0: 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20  ats.Ticks:..    
56d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
56e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
56f0: 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20     long value = 
5700: 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23 69 66  dt.Ticks;....#if
5710: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
5720: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
5730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5740: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
5750: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
5760: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
5770: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5780: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
5790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
57b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
57c0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
57d0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
5800: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
5810: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
5820: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5830: 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c  bind_int64(handl
5840: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
5850: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
5860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
5870: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
5880: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5890: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74  3_bind_int64_int
58a0: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
58b0: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
58c0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
58d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
58e0: 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65  (n > 0) throw ne
58f0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
5900: 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45  n(n, SQLiteLastE
5910: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
5920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
5930: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
5940: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5950: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
5960: 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69  DateFormats.Juli
5970: 61 6e 44 61 79 3a 0d 0a 20 20 20 20 20 20 20 20  anDay:..        
5980: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
59a0: 6f 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f  ouble value = To
59b0: 4a 75 6c 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a  JulianDay(dt);..
59c0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
59d0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
59e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
59f0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
5a00: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
5a10: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
5a20: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
5a30: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
5a40: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
5a50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a70: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
5a80: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
5a90: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5aa0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ac0: 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e   int n = UnsafeN
5ad0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5ae0: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
5af0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
5b00: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
5b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b20: 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61      int n = Unsa
5b30: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5b40: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
5b50: 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  ble_interop(hand
5b60: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
5b70: 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b90: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74      if (n > 0) t
5ba0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
5bb0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
5bc0: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
5bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5be0: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
5bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
5c00: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
5c10: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
5c20: 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a 0d 0a 20  ts.UnixEpoch:.. 
5c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
5c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5c50: 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65        long value
5c60: 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74   = Convert.ToInt
5c70: 36 34 28 64 74 2e 53 75 62 74 72 61 63 74 28 55  64(dt.Subtract(U
5c80: 6e 69 78 45 70 6f 63 68 29 2e 54 6f 74 61 6c 53  nixEpoch).TotalS
5c90: 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 23 69 66 20  econds);....#if 
5ca0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
5cb0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5cd0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
5ce0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
5cf0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
5d00: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5d10: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
5d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
5d50: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
5d60: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
5d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5d90: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
5da0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
5db0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
5dc0: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
5dd0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
5de0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
5df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
5e00: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
5e10: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5e20: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
5e30: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
5e40: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
5e50: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
5e60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5e70: 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77  n > 0) throw new
5e80: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
5e90: 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72  (n, SQLiteLastEr
5ea0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
5eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
5ec0: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
5ed0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5ee0: 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20      default:..  
5ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
5f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5f10: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
5f20: 54 6f 55 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 23  ToUTF8(dt);....#
5f30: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
5f40: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
5f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f60: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
5f70: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5f80: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
5f90: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
5fa0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
5fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5fc0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fe0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
5ff0: 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20   index, b);..   
6000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6010: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6030: 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65    int n = Unsafe
6040: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6050: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
6060: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
6070: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
6080: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
6090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60a0: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74      if (n > 0) t
60b0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
60c0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
60d0: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
60e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
60f0: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
6100: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6110: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
6120: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
6130: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
6140: 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53  ind_Blob(SQLiteS
6150: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
6160: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6170: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
6180: 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62 6c  index, byte[] bl
6190: 6f 62 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a  obData)..    {..
61a0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
61b0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
61c0: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
61d0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
61e0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
61f0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
6200: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
6210: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
6220: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
6230: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
6240: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
6250: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
6260: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
6270: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
6280: 2c 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20 20  , blobData);..  
6290: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
62a0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  ...        int n
62b0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
62c0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
62d0: 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c  ind_blob(handle,
62e0: 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61   index, blobData
62f0: 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74  , blobData.Lengt
6300: 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
6310: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
6320: 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20   > 0) throw new 
6330: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
6340: 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72  n, SQLiteLastErr
6350: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
6360: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6370: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
6380: 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74  _Null(SQLiteStat
6390: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
63a0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
63b0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
63c0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
63d0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
63e0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
63f0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
6400: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
6410: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
6420: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
6430: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
6440: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6450: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
6460: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6470: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
6480: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6490: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
64a0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a  andle, index);..
64b0: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
64c0: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  f....        int
64d0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
64e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
64f0: 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c  _bind_null(handl
6500: 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  e, index);..    
6510: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74      if (n > 0) t
6520: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
6530: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
6540: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
6550: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
6560: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
6570: 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f  int Bind_ParamCo
6580: 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  unt(SQLiteStatem
6590: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
65a0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
65b0: 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20  flags)..    {.. 
65c0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
65d0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
65e0: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
65f0: 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20  te_stmt;..      
6600: 20 20 69 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e    int value = Un
6610: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6620: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  s.sqlite3_bind_p
6630: 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68  arameter_count(h
6640: 61 6e 64 6c 65 29 3b 0d 0a 0d 0a 23 69 66 20 21  andle);....#if !
6650: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
6660: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
6670: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
6680: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6690: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
66a0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
66b0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
66c0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
66d0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
66e0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
66f0: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
6700: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
6710: 4c 6f 67 4d 65 73 73 61 67 65 28 30 2c 20 53 74  LogMessage(0, St
6720: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
6730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
6740: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
6750: 61 6d 74 65 72 20 63 6f 75 6e 74 20 69 73 20 7b  amter count is {
6760: 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  1}.",..         
6770: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
6780: 50 74 72 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20  Ptr, value));.. 
6790: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
67a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
67b0: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d  rn value;..    }
67c0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
67d0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
67e0: 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28   Bind_ParamName(
67f0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
6800: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
6810: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
6820: 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  s, int index).. 
6830: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
6840: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
6850: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
6860: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
6870: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
6880: 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  name;....#if !SQ
6890: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
68a0: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d         int len;.
68b0: 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20  .        name = 
68c0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
68d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
68e0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
68f0: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e 74  rameter_name_int
6900: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
6910: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
6920: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
6930: 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54      name = UTF8T
6940: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
6950: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6960: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
6970: 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c 65 2c 20  er_name(handle, 
6980: 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
6990: 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  ndif....#if !PLA
69a0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
69b0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
69c0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
69d0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
69e0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
69f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6a00: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
6a10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6a20: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
6a30: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
6a40: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
6a50: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
6a60: 4d 65 73 73 61 67 65 28 30 2c 20 53 74 72 69 6e  Message(0, Strin
6a70: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
6a80: 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74             "Stat
6a90: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
6aa0: 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20  er #{1} name is 
6ab0: 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20  {{{2}}}.",..    
6ac0: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
6ad0: 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c  leIntPtr, index,
6ae0: 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20   name));..      
6af0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
6b00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 61         return na
6b10: 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  me;..    }....  
6b20: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
6b30: 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72  ide int Bind_Par
6b40: 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74  amIndex(SQLiteSt
6b50: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
6b60: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6b70: 61 67 73 20 66 6c 61 67 73 2c 20 73 74 72 69 6e  ags flags, strin
6b80: 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20  g paramName)..  
6b90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
6ba0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
6bb0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
6bc0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
6bd0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
6be0: 78 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  x = UnsafeNative
6bf0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6c00: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
6c10: 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20 54 6f 55  ndex(handle, ToU
6c20: 54 46 38 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b  TF8(paramName));
6c30: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
6c40: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
6c50: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
6c60: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
6c70: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
6c80: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
6c90: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6ca0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
6cb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6cc0: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
6cd0: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
6ce0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
6cf0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
6d00: 61 67 65 28 30 2c 20 53 74 72 69 6e 67 2e 46 6f  age(0, String.Fo
6d10: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
6d20: 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e         "Statemen
6d30: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 69  t {0} paramter i
6d40: 6e 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b  ndex of name {{{
6d50: 31 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d  1}}} is #{2}.",.
6d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6d70: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70   handleIntPtr, p
6d80: 61 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29  aramName, index)
6d90: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
6da0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
6db0: 20 72 65 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a   return index;..
6dc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
6dd0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
6de0: 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53  nt ColumnCount(S
6df0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
6e00: 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tmt)..    {..   
6e10: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
6e20: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6e30: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
6e40: 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  nt(stmt._sqlite_
6e50: 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  stmt);..    }...
6e60: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6e70: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
6e80: 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53  lumnName(SQLiteS
6e90: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
6ea0: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
6eb0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
6ec0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
6ed0: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65  t len;..      re
6ee0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
6ef0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
6f00: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
6f10: 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  lumn_name_intero
6f20: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
6f30: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
6f40: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
6f50: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
6f60: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
6f70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6f80: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
6f90: 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _name(stmt._sqli
6fa0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
6fb0: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
6fc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
6fd0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79  rnal override Ty
6fe0: 70 65 41 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d  peAffinity Colum
6ff0: 6e 41 66 66 69 6e 69 74 79 28 53 51 4c 69 74 65  nAffinity(SQLite
7000: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
7010: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
7020: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
7030: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7040: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
7050: 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f 73 71  mn_type(stmt._sq
7060: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
7070: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
7080: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
7090: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
70a0: 54 79 70 65 28 53 51 4c 69 74 65 53 74 61 74 65  Type(SQLiteState
70b0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
70c0: 6e 64 65 78 2c 20 6f 75 74 20 54 79 70 65 41 66  ndex, out TypeAf
70d0: 66 69 6e 69 74 79 20 6e 41 66 66 69 6e 69 74 79  finity nAffinity
70e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
70f0: 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53  int len;..#if !S
7100: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
7110: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
7120: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7130: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
7140: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74  umn_decltype_int
7150: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
7160: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
7170: 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ut len);..#else.
7180: 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b  .      len = -1;
7190: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
71a0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
71b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
71c0: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73  olumn_decltype(s
71d0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
71e0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69  , index);..#endi
71f0: 66 0d 0a 20 20 20 20 20 20 6e 41 66 66 69 6e 69  f..      nAffini
7200: 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e  ty = ColumnAffin
7210: 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ity(stmt, index)
7220: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70  ;....      if (p
7230: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
7240: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
7250: 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20  ring(p, len);.. 
7260: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
7270: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69   {..        stri
7280: 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54  ng[] ar = stmt.T
7290: 79 70 65 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d  ypeDefinitions;.
72a0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72 20  .        if (ar 
72b0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
72c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69    {..          i
72d0: 66 20 28 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65  f (index < ar.Le
72e0: 6e 67 74 68 20 26 26 20 61 72 5b 69 6e 64 65 78  ngth && ar[index
72f0: 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  ] != null)..    
7300: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61          return a
7310: 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20  r[index];..     
7320: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65     }..        re
7330: 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74  turn String.Empt
7340: 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  y;....        //
7350: 73 77 69 74 63 68 20 28 6e 41 66 66 69 6e 69 74  switch (nAffinit
7360: 79 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7b 0d  y)..        //{.
7370: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73  .        //  cas
7380: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49  e TypeAffinity.I
7390: 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 2f  nt64:..        /
73a0: 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42 49 47  /    return "BIG
73b0: 49 4e 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f  INT";..        /
73c0: 2f 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69  /  case TypeAffi
73d0: 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20  nity.Double:..  
73e0: 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75        //    retu
73f0: 72 6e 20 22 44 4f 55 42 4c 45 22 3b 0d 0a 20 20  rn "DOUBLE";..  
7400: 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54        //  case T
7410: 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62  ypeAffinity.Blob
7420: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  :..        //   
7430: 20 72 65 74 75 72 6e 20 22 42 4c 4f 42 22 3b 0d   return "BLOB";.
7440: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 64 65 66  .        //  def
7450: 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f  ault:..        /
7460: 2f 20 20 20 20 72 65 74 75 72 6e 20 22 54 45 58  /    return "TEX
7470: 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7d  T";..        //}
7480: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
7490: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
74a0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
74b0: 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69 74 65  lumnIndex(SQLite
74c0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
74d0: 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d  string columnNam
74e0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
74f0: 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43   int x = ColumnC
7500: 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20  ount(stmt);.... 
7510: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20       for (int n 
7520: 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29  = 0; n < x; n++)
7530: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
7540: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
7550: 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65  mpare(columnName
7560: 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d  , ColumnName(stm
7570: 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d  t, n), StringCom
7580: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
7590: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
75a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
75b0: 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  rn n;..      }..
75c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b        return -1;
75d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
75e0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
75f0: 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72   string ColumnOr
7600: 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74  iginalName(SQLit
7610: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
7620: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
7630: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
7640: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
7650: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
7660: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
7670: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
7680: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7690: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
76a0: 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  me_interop(stmt.
76b0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
76c0: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
76d0: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
76e0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
76f0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
7700: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7710: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
7720: 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _name(stmt._sqli
7730: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
7740: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
7750: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
7760: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
7770: 72 69 6e 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62  ring ColumnDatab
7780: 61 73 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  aseName(SQLiteSt
7790: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
77a0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
77b0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
77c0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
77d0: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
77e0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
77f0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
7800: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
7810: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
7820: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
7830: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
7840: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
7850: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
7860: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
7870: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
7880: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
7890: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
78a0: 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c  e_name(stmt._sql
78b0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
78c0: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
78d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
78e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
78f0: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c  tring ColumnTabl
7900: 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eName(SQLiteStat
7910: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
7920: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
7930: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
7940: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
7950: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
7960: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
7970: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7980: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
7990: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74  n_table_name_int
79a0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
79b0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
79c0: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
79d0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
79e0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
79f0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
7a00: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
7a10: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73  umn_table_name(s
7a20: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
7a30: 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
7a40: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
7a50: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
7a60: 65 72 72 69 64 65 20 76 6f 69 64 20 43 6f 6c 75  erride void Colu
7a70: 6d 6e 4d 65 74 61 44 61 74 61 28 73 74 72 69 6e  mnMetaData(strin
7a80: 67 20 64 61 74 61 42 61 73 65 2c 20 73 74 72 69  g dataBase, stri
7a90: 6e 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e 67  ng table, string
7aa0: 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 73 74 72   column, out str
7ab0: 69 6e 67 20 64 61 74 61 54 79 70 65 2c 20 6f 75  ing dataType, ou
7ac0: 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65  t string collate
7ad0: 53 65 71 75 65 6e 63 65 2c 20 6f 75 74 20 62 6f  Sequence, out bo
7ae0: 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20  ol notNull, out 
7af0: 62 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c  bool primaryKey,
7b00: 20 6f 75 74 20 62 6f 6f 6c 20 61 75 74 6f 49 6e   out bool autoIn
7b10: 63 72 65 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d  crement)..    {.
7b20: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 61  .      IntPtr da
7b30: 74 61 54 79 70 65 50 74 72 3b 0d 0a 20 20 20 20  taTypePtr;..    
7b40: 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71    IntPtr collSeq
7b50: 50 74 72 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  Ptr;..      int 
7b60: 6e 6e 6f 74 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20  nnotNull;..     
7b70: 20 69 6e 74 20 6e 70 72 69 6d 61 72 79 4b 65 79   int nprimaryKey
7b80: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 61 75  ;..      int nau
7b90: 74 6f 49 6e 63 3b 0d 0a 20 20 20 20 20 20 69 6e  toInc;..      in
7ba0: 74 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  t n;..      int 
7bb0: 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e  dtLen;..      in
7bc0: 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20  t csLen;....#if 
7bd0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
7be0: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
7bf0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7c00: 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f  sqlite3_table_co
7c10: 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e  lumn_metadata_in
7c20: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
7c30: 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f  F8(dataBase), To
7c40: 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55  UTF8(table), ToU
7c50: 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74  TF8(column), out
7c60: 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75   dataTypePtr, ou
7c70: 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75  t collSeqPtr, ou
7c80: 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20  t nnotNull, out 
7c90: 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74  nprimaryKey, out
7ca0: 20 6e 61 75 74 6f 49 6e 63 2c 20 6f 75 74 20 64   nautoInc, out d
7cb0: 74 4c 65 6e 2c 20 6f 75 74 20 63 73 4c 65 6e 29  tLen, out csLen)
7cc0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
7cd0: 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20  dtLen = -1;..   
7ce0: 20 20 20 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a     csLen = -1;..
7cf0: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
7d00: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7d10: 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f  sqlite3_table_co
7d20: 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73  lumn_metadata(_s
7d30: 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42  ql, ToUTF8(dataB
7d40: 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62  ase), ToUTF8(tab
7d50: 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75  le), ToUTF8(colu
7d60: 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70  mn), out dataTyp
7d70: 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65  ePtr, out collSe
7d80: 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75  qPtr, out nnotNu
7d90: 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79  ll, out nprimary
7da0: 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e  Key, out nautoIn
7db0: 63 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  c);..#endif..   
7dc0: 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68     if (n > 0) th
7dd0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
7de0: 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74  ception(n, SQLit
7df0: 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  eLastError());..
7e00: 0d 0a 20 20 20 20 20 20 64 61 74 61 54 79 70 65  ..      dataType
7e10: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
7e20: 64 61 74 61 54 79 70 65 50 74 72 2c 20 64 74 4c  dataTypePtr, dtL
7e30: 65 6e 29 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c  en);..      coll
7e40: 61 74 65 53 65 71 75 65 6e 63 65 20 3d 20 55 54  ateSequence = UT
7e50: 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53  F8ToString(collS
7e60: 65 71 50 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a  eqPtr, csLen);..
7e70: 0d 0a 20 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20  ..      notNull 
7e80: 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31  = (nnotNull == 1
7e90: 29 3b 0d 0a 20 20 20 20 20 20 70 72 69 6d 61 72  );..      primar
7ea0: 79 4b 65 79 20 3d 20 28 6e 70 72 69 6d 61 72 79  yKey = (nprimary
7eb0: 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  Key == 1);..    
7ec0: 20 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20    autoIncrement 
7ed0: 3d 20 28 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31  = (nautoInc == 1
7ee0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
7ef0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
7f00: 64 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75  de double GetDou
7f10: 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
7f20: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
7f30: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
7f40: 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b     double value;
7f50: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
7f60: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
7f70: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
7f80: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7f90: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
7fa0: 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f  mn_double(stmt._
7fb0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
7fc0: 65 78 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ex);..#else..   
7fd0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
7fe0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
7ff0: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74  olumn_double_int
8000: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
8010: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
8020: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ut value);..#end
8030: 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  if..      return
8040: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
8050: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
8060: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 49  verride int GetI
8070: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
8080: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
8090: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
80a0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
80b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
80c0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
80d0: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
80e0: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
80f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
8100: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
8110: 67 20 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74  g GetInt64(SQLit
8120: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
8130: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
8140: 20 7b 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76   {..      long v
8150: 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54  alue;..#if !PLAT
8160: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
8170: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c  EWORK..      val
8180: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
8190: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
81a0: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74  _column_int64(st
81b0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
81c0: 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 73 65 0d   index);..#else.
81d0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
81e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
81f0: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f  e3_column_int64_
8200: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
8210: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
8220: 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23  , out value);..#
8230: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74  endif..      ret
8240: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
8250: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
8260: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
8270: 67 20 47 65 74 54 65 78 74 28 53 51 4c 69 74 65  g GetText(SQLite
8280: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
8290: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
82a0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
82b0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
82c0: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
82d0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
82e0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
82f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
8300: 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72  olumn_text_inter
8310: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
8320: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74  stmt, index, out
8330: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
8340: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
8350: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
8360: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8370: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
8380: 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c  n_text(stmt._sql
8390: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
83a0: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
83b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
83c0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 44  ernal override D
83d0: 61 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54  ateTime GetDateT
83e0: 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ime(SQLiteStatem
83f0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
8400: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
8410: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
8420: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
8430: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
8440: 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66  ToDateTime(Unsaf
8450: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
8460: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
8470: 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  xt_interop(stmt.
8480: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
8490: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
84a0: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
84b0: 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
84c0: 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76  Time(UnsafeNativ
84d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
84e0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d  _column_text(stm
84f0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
8500: 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
8510: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
8520: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
8530: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74  ride long GetByt
8540: 65 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  es(SQLiteStateme
8550: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
8560: 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66  ex, int nDataOff
8570: 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73  set, byte[] bDes
8580: 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
8590: 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  nt nLength)..   
85a0: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c   {..      int nl
85b0: 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  en = UnsafeNativ
85c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
85d0: 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74  _column_bytes(st
85e0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
85f0: 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
8600: 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69    // If no desti
8610: 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72  nation buffer, r
8620: 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e  eturn the size n
8630: 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66  eeded...      if
8640: 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29   (bDest == null)
8650: 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d   return nlen;...
8660: 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
8670: 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
8680: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
8690: 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44  ed + nStart > bD
86a0: 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70  est.Length) nCop
86b0: 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67  ied = bDest.Leng
86c0: 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20  th - nStart;..  
86d0: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
86e0: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20  + nDataOffset > 
86f0: 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20  nlen) nCopied = 
8700: 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73  nlen - nDataOffs
8710: 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  et;....      if 
8720: 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20  (nCopied > 0).. 
8730: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8740: 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
8750: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8760: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
8770: 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74  blob(stmt._sqlit
8780: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
8790: 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68  ...        Marsh
87a0: 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29  al.Copy((IntPtr)
87b0: 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b  (ptr.ToInt64() +
87c0: 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62   nDataOffset), b
87d0: 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43  Dest, nStart, nC
87e0: 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d  opied);..      }
87f0: 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
8800: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e      {..        n
8810: 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20  Copied = 0;..   
8820: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
8830: 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
8840: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
8850: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
8860: 6e 67 20 47 65 74 43 68 61 72 73 28 53 51 4c 69  ng GetChars(SQLi
8870: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
8880: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
8890: 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63 68   nDataOffset, ch
88a0: 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20  ar[] bDest, int 
88b0: 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e  nStart, int nLen
88c0: 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
88d0: 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20     int nlen;..  
88e0: 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20      int nCopied 
88f0: 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  = nLength;....  
8900: 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d      string str =
8910: 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69   GetText(stmt, i
8920: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e 6c  ndex);..      nl
8930: 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68 3b  en = str.Length;
8940: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44  ....      if (bD
8950: 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74  est == null) ret
8960: 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20  urn nlen;....   
8970: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
8980: 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e   nStart > bDest.
8990: 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20  Length) nCopied 
89a0: 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d  = bDest.Length -
89b0: 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20   nStart;..      
89c0: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44  if (nCopied + nD
89d0: 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e  ataOffset > nlen
89e0: 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e  ) nCopied = nlen
89f0: 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d   - nDataOffset;.
8a00: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
8a10: 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20  pied > 0)..     
8a20: 20 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e 44     str.CopyTo(nD
8a30: 61 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73 74  ataOffset, bDest
8a40: 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65  , nStart, nCopie
8a50: 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20  d);..      else 
8a60: 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a  nCopied = 0;....
8a70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
8a80: 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
8a90: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
8aa0: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75 6c  rride bool IsNul
8ab0: 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  l(SQLiteStatemen
8ac0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
8ad0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
8ae0: 20 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e 41   return (ColumnA
8af0: 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e  ffinity(stmt, in
8b00: 64 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66 69  dex) == TypeAffi
8b10: 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20  nity.Null);..   
8b20: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8b30: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
8b40: 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49  AggregateCount(I
8b50: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a  ntPtr context)..
8b60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
8b70: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
8b80: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8b90: 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28  aggregate_count(
8ba0: 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d  context);..    }
8bb0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
8bc0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
8bd0: 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73 74  reateFunction(st
8be0: 72 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f 6e  ring strFunction
8bf0: 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f  , int nArgs, boo
8c00: 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53  l needCollSeq, S
8c10: 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75  QLiteCallback fu
8c20: 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61  nc, SQLiteCallba
8c30: 63 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c  ck funcstep, SQL
8c40: 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b  iteFinalCallback
8c50: 20 66 75 6e 63 66 69 6e 61 6c 29 0d 0a 20 20 20   funcfinal)..   
8c60: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 3b   {..      int n;
8c70: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
8c80: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
8c90: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
8ca0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8cb0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
8cc0: 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f  interop(_sql, To
8cd0: 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e  UTF8(strFunction
8ce0: 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74  ), nArgs, 4, Int
8cf0: 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20  Ptr.Zero, func, 
8d00: 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69  funcstep, funcfi
8d10: 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65  nal, (needCollSe
8d20: 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a  q == true) ? 1 :
8d30: 20 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28   0);..      if (
8d40: 6e 20 3d 3d 20 30 29 20 6e 20 3d 20 55 6e 73 61  n == 0) n = Unsa
8d50: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8d60: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
8d70: 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28  unction_interop(
8d80: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
8d90: 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
8da0: 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 1, IntPtr.Zero
8db0: 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
8dc0: 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65  , funcfinal, (ne
8dd0: 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75  edCollSeq == tru
8de0: 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65  e) ? 1 : 0);..#e
8df0: 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  lse..      n = U
8e00: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8e10: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
8e20: 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c  e_function(_sql,
8e30: 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74   ToUTF8(strFunct
8e40: 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20  ion), nArgs, 4, 
8e50: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
8e60: 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e  c, funcstep, fun
8e70: 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20  cfinal);..      
8e80: 69 66 20 28 6e 20 3d 3d 20 30 29 20 6e 20 3d 20  if (n == 0) n = 
8e90: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8ea0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
8eb0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c  te_function(_sql
8ec0: 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
8ed0: 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c  tion), nArgs, 1,
8ee0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
8ef0: 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
8f00: 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69  ncfinal);..#endi
8f10: 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e  f..      if (n >
8f20: 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51   0) throw new SQ
8f30: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
8f40: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
8f50: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
8f60: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
8f70: 72 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65  ride void Create
8f80: 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67  Collation(string
8f90: 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53   strCollation, S
8fa0: 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66  QLiteCollation f
8fb0: 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61  unc, SQLiteColla
8fc0: 74 69 6f 6e 20 66 75 6e 63 31 36 29 0d 0a 20 20  tion func16)..  
8fd0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
8fe0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
8ff0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
9000: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
9010: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
9020: 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49  Collation), 2, I
9030: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
9040: 31 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  16);..      if (
9050: 6e 20 3d 3d 20 30 29 20 6e 20 3d 20 55 6e 73 61  n == 0) n = Unsa
9060: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9070: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
9080: 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  ollation(_sql, T
9090: 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69  oUTF8(strCollati
90a0: 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  on), 1, IntPtr.Z
90b0: 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20  ero, func);..   
90c0: 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68     if (n > 0) th
90d0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
90e0: 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74  ception(n, SQLit
90f0: 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  eLastError());..
9100: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
9110: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
9120: 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74  nt ContextCollat
9130: 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69  eCompare(Collati
9140: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65  onEncodingEnum e
9150: 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65  nc, IntPtr conte
9160: 78 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20 73  xt, string s1, s
9170: 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b  tring s2)..    {
9180: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
9190: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79  ANDARD..      by
91a0: 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20  te[] b1;..      
91b0: 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20  byte[] b2;..    
91c0: 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e    System.Text.En
91d0: 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72  coding converter
91e0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
91f0: 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a    switch (enc)..
9200: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9210: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
9220: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38  ncodingEnum.UTF8
9230: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
9240: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
9250: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54  Text.Encoding.UT
9260: 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  F8;..          b
9270: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
9280: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
9290: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c  odingEnum.UTF16L
92a0: 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
92b0: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
92c0: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
92d0: 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
92e0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
92f0: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
9300: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
9310: 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16BE:..        
9320: 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
9330: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
9340: 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63  ng.BigEndianUnic
9350: 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
9360: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d  break;..      }.
9370: 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f  ...      b1 = co
9380: 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
9390: 28 73 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20  (s1);..      b2 
93a0: 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
93b0: 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20 20  ytes(s2);....   
93c0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
93d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
93e0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f  lite3_context_co
93f0: 6c 6c 63 6f 6d 70 61 72 65 28 63 6f 6e 74 65 78  llcompare(contex
9400: 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68  t, b1, b1.Length
9410: 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29  , b2, b2.Length)
9420: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
9430: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
9440: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
9450: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
9460: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
9470: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
9480: 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43   ContextCollateC
9490: 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e  ompare(Collation
94a0: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63  EncodingEnum enc
94b0: 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  , IntPtr context
94c0: 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61  , char[] c1, cha
94d0: 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a  r[] c2)..    {..
94e0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
94f0: 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65  DARD..      byte
9500: 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79  [] b1;..      by
9510: 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20  te[] b2;..      
9520: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
9530: 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d  ding converter =
9540: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
9550: 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20  switch (enc)..  
9560: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
9570: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
9580: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d  odingEnum.UTF8:.
9590: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
95a0: 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
95b0: 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38  xt.Encoding.UTF8
95c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
95d0: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
95e0: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
95f0: 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a  ingEnum.UTF16LE:
9600: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
9610: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
9620: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69  ext.Encoding.Uni
9630: 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
9640: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
9650: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
9660: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
9670: 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6BE:..          
9680: 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
9690: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
96a0: 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64  .BigEndianUnicod
96b0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  e;..          br
96c0: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  eak;..      }...
96d0: 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76  .      b1 = conv
96e0: 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 63  erter.GetBytes(c
96f0: 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20  1);..      b2 = 
9700: 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
9710: 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 20  es(c2);....     
9720: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
9730: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9740: 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c  te3_context_coll
9750: 63 6f 6d 70 61 72 65 28 63 6f 6e 74 65 78 74 2c  compare(context,
9760: 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20   b1, b1.Length, 
9770: 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d  b2, b2.Length);.
9780: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
9790: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
97a0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
97b0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
97c0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
97d0: 6c 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 61  l override Colla
97e0: 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65 74  tionSequence Get
97f0: 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  CollationSequenc
9800: 65 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  e(SQLiteFunction
9810: 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f   func, IntPtr co
9820: 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 23  ntext)..    {..#
9830: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
9840: 41 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61  ARD..      Colla
9850: 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 73 65 71  tionSequence seq
9860: 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f 6e   = new Collation
9870: 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20 20  Sequence();..   
9880: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
9890: 20 20 20 69 6e 74 20 74 79 70 65 3b 0d 0a 20 20     int type;..  
98a0: 20 20 20 20 69 6e 74 20 65 6e 63 3b 0d 0a 20 20      int enc;..  
98b0: 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55      IntPtr p = U
98c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
98d0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ds.sqlite3_conte
98e0: 78 74 5f 63 6f 6c 6c 73 65 71 28 63 6f 6e 74 65  xt_collseq(conte
98f0: 78 74 2c 20 6f 75 74 20 74 79 70 65 2c 20 6f 75  xt, out type, ou
9900: 74 20 65 6e 63 2c 20 6f 75 74 20 6c 65 6e 29 3b  t enc, out len);
9910: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20  ....      if (p 
9920: 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d  != null) seq.Nam
9930: 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
9940: 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20  (p, len);..     
9950: 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c   seq.Type = (Col
9960: 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74  lationTypeEnum)t
9970: 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e  ype;..      seq.
9980: 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20  _func = func;.. 
9990: 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e       seq.Encodin
99a0: 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e  g = (CollationEn
99b0: 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d  codingEnum)enc;.
99c0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
99d0: 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  seq;..#else..   
99e0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
99f0: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
9a00: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
9a10: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9a20: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9a30: 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c  long GetParamVal
9a40: 75 65 42 79 74 65 73 28 49 6e 74 50 74 72 20 70  ueBytes(IntPtr p
9a50: 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65  , int nDataOffse
9a60: 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c  t, byte[] bDest,
9a70: 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74   int nStart, int
9a80: 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b   nLength)..    {
9a90: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e  ..      int nlen
9aa0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
9ab0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
9ac0: 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a  alue_bytes(p);..
9ad0: 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f  ..      // If no
9ae0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66   destination buf
9af0: 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20  fer, return the 
9b00: 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20  size needed...  
9b10: 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d      if (bDest ==
9b20: 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c   null) return nl
9b30: 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74  en;....      int
9b40: 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
9b50: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
9b60: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72  (nCopied + nStar
9b70: 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  t > bDest.Length
9b80: 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73  ) nCopied = bDes
9b90: 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72  t.Length - nStar
9ba0: 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  t;..      if (nC
9bb0: 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66  opied + nDataOff
9bc0: 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70  set > nlen) nCop
9bd0: 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61  ied = nlen - nDa
9be0: 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
9bf0: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e     if (nCopied >
9c00: 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   0)..      {..  
9c10: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
9c20: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
9c30: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
9c40: 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d  alue_blob(p);...
9c50: 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c  .        Marshal
9c60: 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70  .Copy((IntPtr)(p
9c70: 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e  tr.ToInt64() + n
9c80: 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65  DataOffset), bDe
9c90: 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70  st, nStart, nCop
9ca0: 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ied);..      }..
9cb0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
9cc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f    {..        nCo
9cd0: 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  pied = 0;..     
9ce0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
9cf0: 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20  rn nCopied;..   
9d00: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9d10: 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62  al override doub
9d20: 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  le GetParamValue
9d30: 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74  Double(IntPtr pt
9d40: 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
9d50: 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a   double value;..
9d60: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
9d70: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
9d80: 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e        value = Un
9d90: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9da0: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
9db0: 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65  double(ptr);..#e
9dc0: 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  lse..      Unsaf
9dd0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9de0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
9df0: 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c  ble_interop(ptr,
9e00: 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65   out value);..#e
9e10: 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75  ndif..      retu
9e20: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d  rn value;..    }
9e30: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
9e40: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
9e50: 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32  tParamValueInt32
9e60: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
9e70: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
9e80: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
9e90: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
9ea0: 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20  lue_int(ptr);.. 
9eb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
9ec0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
9ed0: 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  ng GetParamValue
9ee0: 49 6e 74 36 34 28 49 6e 74 50 74 72 20 70 74 72  Int64(IntPtr ptr
9ef0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9f00: 49 6e 74 36 34 20 76 61 6c 75 65 3b 0d 0a 23 69  Int64 value;..#i
9f10: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
9f20: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
9f30: 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61      value = Unsa
9f40: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9f50: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
9f60: 74 36 34 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65  t64(ptr);..#else
9f70: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
9f80: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9f90: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f  te3_value_int64_
9fa0: 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74  interop(ptr, out
9fb0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
9fc0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
9fd0: 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alue;..    }....
9fe0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9ff0: 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
a000: 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49  ParamValueText(I
a010: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
a020: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
a030: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
a040: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
a050: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
a060: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
a070: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
a080: 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f  alue_text_intero
a090: 70 28 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29 2c  p(ptr, out len),
a0a0: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
a0b0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
a0c0: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
a0d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a0e0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
a0f0: 70 74 72 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  ptr), -1);..#end
a100: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
a110: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a120: 64 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20  de TypeAffinity 
a130: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70  GetParamValueTyp
a140: 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  e(IntPtr ptr).. 
a150: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
a160: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
a170: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
a180: 61 6c 75 65 5f 74 79 70 65 28 70 74 72 29 3b 0d  alue_type(ptr);.
a190: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
a1a0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
a1b0: 76 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28  void ReturnBlob(
a1c0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
a1d0: 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20  byte[] value).. 
a1e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
a1f0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a200: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62  sqlite3_result_b
a210: 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c  lob(context, val
a220: 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68  ue, value.Length
a230: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
a240: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a250: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a260: 20 76 6f 69 64 20 52 65 74 75 72 6e 44 6f 75 62   void ReturnDoub
a270: 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  le(IntPtr contex
a280: 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29  t, double value)
a290: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c  ..    {..#if !PL
a2a0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
a2b0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55  AMEWORK..      U
a2c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a2d0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
a2e0: 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74  t_double(context
a2f0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  , value);..#else
a300: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
a310: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a320: 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c  te3_result_doubl
a330: 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78  e_interop(contex
a340: 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  t, ref value);..
a350: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
a360: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
a370: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
a380: 72 6e 45 72 72 6f 72 28 49 6e 74 50 74 72 20 63  rnError(IntPtr c
a390: 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76  ontext, string v
a3a0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
a3b0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
a3c0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a3d0: 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e  result_error(con
a3e0: 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c  text, ToUTF8(val
a3f0: 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74  ue), value.Lengt
a400: 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  h);..    }....  
a410: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a420: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49  ide void ReturnI
a430: 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e 74  nt32(IntPtr cont
a440: 65 78 74 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d  ext, int value).
a450: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
a460: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a470: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
a480: 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 76 61  _int(context, va
a490: 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lue);..    }....
a4a0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
a4b0: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
a4c0: 6e 49 6e 74 36 34 28 49 6e 74 50 74 72 20 63 6f  nInt64(IntPtr co
a4d0: 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75  ntext, long valu
a4e0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
a4f0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
a500: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
a510: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a520: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
a530: 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78  ult_int64(contex
a540: 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  t, value);..#els
a550: 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  e..      UnsafeN
a560: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a570: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36  ite3_result_int6
a580: 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78  4_interop(contex
a590: 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  t, ref value);..
a5a0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
a5b0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
a5c0: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
a5d0: 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f  rnNull(IntPtr co
a5e0: 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ntext)..    {.. 
a5f0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
a600: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a610: 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e  _result_null(con
a620: 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  text);..    }...
a630: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
a640: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
a650: 72 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f  rnText(IntPtr co
a660: 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61  ntext, string va
a670: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
a680: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
a690: 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20  UTF8(value);..  
a6a0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
a6b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a6c0: 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74  result_text(cont
a6d0: 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75  ext, ToUTF8(valu
a6e0: 65 29 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31  e), b.Length - 1
a6f0: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
a700: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a710: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a720: 20 49 6e 74 50 74 72 20 41 67 67 72 65 67 61 74   IntPtr Aggregat
a730: 65 43 6f 6e 74 65 78 74 28 49 6e 74 50 74 72 20  eContext(IntPtr 
a740: 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d  context)..    {.
a750: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
a760: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a770: 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  s.sqlite3_aggreg
a780: 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74  ate_context(cont
a790: 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d  ext, 1);..    }.
a7a0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c  ...    /// Enabl
a7b0: 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65  es or disabled e
a7c0: 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63  xtended result c
a7d0: 6f 64 65 73 20 72 65 74 75 72 6e 65 64 20 62 79  odes returned by
a7e0: 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74   SQLite..    int
a7f0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
a800: 6f 69 64 20 53 65 74 45 78 74 65 6e 64 65 64 52  oid SetExtendedR
a810: 65 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20  esultCodes(bool 
a820: 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a  bOnOff)..    {..
a830: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
a840: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a850: 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c  3_extended_resul
a860: 74 5f 63 6f 64 65 73 28 5f 73 71 6c 2c 20 28 62  t_codes(_sql, (b
a870: 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29  OnOff ? -1 : 0))
a880: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f  ;..    }..    //
a890: 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20  / Gets the last 
a8a0: 53 51 4c 69 74 65 20 65 72 72 6f 72 20 63 6f 64  SQLite error cod
a8b0: 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  e..    internal 
a8c0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52 65 73  override int Res
a8d0: 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b  ultCode()..    {
a8e0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
a8f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a900: 64 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  ds.sqlite3_errco
a910: 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d  de(_sql);..    }
a920: 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74  ..    /// Gets t
a930: 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65  he last SQLite e
a940: 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f  xtended error co
a950: 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  de..    internal
a960: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 45 78   override int Ex
a970: 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65  tendedResultCode
a980: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
a990: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
a9a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a9b0: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72  te3_extended_err
a9c0: 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  code(_sql);..   
a9d0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64   }....    /// Ad
a9e0: 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20  d a log message 
a9f0: 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73  via the SQLite s
aa00: 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72  qlite3_log inter
aa10: 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72  face...    inter
aa20: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
aa30: 64 20 4c 6f 67 4d 65 73 73 61 67 65 28 69 6e 74  d LogMessage(int
aa40: 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e   iErrCode, strin
aa50: 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20  g zMessage)..   
aa60: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
aa70: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
aa80: 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f  lite3_log(iErrCo
aa90: 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73 73  de, ToUTF8(zMess
aaa0: 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  age));..    }...
aab0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
aac0: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 50  erride void SetP
aad0: 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70  assword(byte[] p
aae0: 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20  asswordBytes).. 
aaf0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
ab00: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
ab10: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ab20: 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f  key(_sql, passwo
ab30: 72 64 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72  rdBytes, passwor
ab40: 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d  dBytes.Length);.
ab50: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30  .      if (n > 0
ab60: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
ab70: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53  teException(n, S
ab80: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
ab90: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
aba0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
abb0: 64 65 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61  de void ChangePa
abc0: 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65  ssword(byte[] ne
abd0: 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d  wPasswordBytes).
abe0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
abf0: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
ac00: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ac10: 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65  3_rekey(_sql, ne
ac20: 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20  wPasswordBytes, 
ac30: 28 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65  (newPasswordByte
ac40: 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a  s == null) ? 0 :
ac50: 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65   newPasswordByte
ac60: 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20  s.Length);..    
ac70: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
ac80: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
ac90: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
aca0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
acb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
acc0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
acd0: 69 64 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b  id SetUpdateHook
ace0: 28 53 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c  (SQLiteUpdateCal
acf0: 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
ad00: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
ad10: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ad20: 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f  lite3_update_hoo
ad30: 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e  k(_sql, func, In
ad40: 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
ad50: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
ad60: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
ad70: 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53   SetCommitHook(S
ad80: 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62  QLiteCommitCallb
ad90: 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
ada0: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
adb0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
adc0: 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28  te3_commit_hook(
add0: 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
ade0: 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
adf0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ae00: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
ae10: 65 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  etTraceCallback(
ae20: 53 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62  SQLiteTraceCallb
ae30: 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
ae40: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
ae50: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
ae60: 74 65 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20  te3_trace(_sql, 
ae70: 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
ae80: 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
ae90: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
aea0: 69 64 65 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c  ide void SetRoll
aeb0: 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52  backHook(SQLiteR
aec0: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20  ollbackCallback 
aed0: 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
aee0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
aef0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
af00: 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73  rollback_hook(_s
af10: 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
af20: 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
af30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
af40: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c  ry>..    /// All
af50: 6f 77 73 20 74 68 65 20 73 65 74 74 69 6e 67 20  ows the setting 
af60: 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c  of a logging cal
af70: 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79  lback invoked by
af80: 20 53 51 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a   SQLite when a..
af90: 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e      /// log even
afa0: 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20  t occurs.  Only 
afb0: 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79  one callback may
afc0: 20 62 65 20 73 65 74 2e 20 20 49 66 20 4e 55 4c   be set.  If NUL
afd0: 4c 20 69 73 20 70 61 73 73 65 64 2c 0d 0a 20 20  L is passed,..  
afe0: 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e    /// the loggin
aff0: 67 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e  g callback is un
b000: 72 65 67 69 73 74 65 72 65 64 2e 0d 0a 20 20 20  registered...   
b010: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
b020: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
b030: 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65 20  name="func">The 
b040: 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f  callback functio
b050: 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61  n to invoke.</pa
b060: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
b070: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
b080: 20 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65   result code</re
b090: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
b0a0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
b0b0: 74 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b  t SetLogCallback
b0c0: 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61  (SQLiteLogCallba
b0d0: 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
b0e0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 63 20  .        int rc 
b0f0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
b100: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
b110: 6e 66 69 67 28 0d 0a 20 20 20 20 20 20 20 20 20  nfig(..         
b120: 20 20 20 28 69 6e 74 29 53 51 4c 69 74 65 43 6f     (int)SQLiteCo
b130: 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  nfigOpsEnum.SQLI
b140: 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66  TE_CONFIG_LOG, f
b150: 75 6e 63 2c 20 28 49 6e 74 50 74 72 29 30 29 3b  unc, (IntPtr)0);
b160: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
b170: 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  rn rc;..    }...
b180: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
b190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
b1f0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
b200: 2f 2f 20 43 72 65 61 74 65 73 20 61 20 6e 65 77  // Creates a new
b210: 20 53 51 4c 69 74 65 20 62 61 63 6b 75 70 20 6f   SQLite backup o
b220: 62 6a 65 63 74 20 62 61 73 65 64 20 6f 6e 20 74  bject based on t
b230: 68 65 20 70 72 6f 76 69 64 65 64 20 64 65 73 74  he provided dest
b240: 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f  ination..    ///
b250: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
b260: 74 69 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72 63  tion.  The sourc
b270: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
b280: 63 74 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65  ction is the one
b290: 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69  ..    /// associ
b2a0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f  ated with this o
b2b0: 62 6a 65 63 74 2e 20 20 54 68 65 20 73 6f 75 72  bject.  The sour
b2c0: 63 65 20 61 6e 64 20 64 65 73 74 69 6e 61 74 69  ce and destinati
b2d0: 6f 6e 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  on database..   
b2e0: 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73   /// connections
b2f0: 20 63 61 6e 6e 6f 74 20 62 65 20 74 68 65 20 73   cannot be the s
b300: 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ame...    /// </
b310: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
b320: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
b330: 65 73 74 43 6e 6e 22 3e 54 68 65 20 64 65 73 74  estCnn">The dest
b340: 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
b350: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61   connection.</pa
b360: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
b370: 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e  aram name="destN
b380: 61 6d 65 22 3e 54 68 65 20 64 65 73 74 69 6e 61  ame">The destina
b390: 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 6e 61  tion database na
b3a0: 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  me.</param>..   
b3b0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
b3c0: 3d 22 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68  ="sourceName">Th
b3d0: 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
b3e0: 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d  e name.</param>.
b3f0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
b400: 73 3e 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61  s>The newly crea
b410: 74 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ted backup objec
b420: 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  t.</returns>..  
b430: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b440: 69 64 65 20 53 51 4c 69 74 65 42 61 63 6b 75 70  ide SQLiteBackup
b450: 20 49 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b 75   InitializeBacku
b460: 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
b470: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73  teConnection des
b480: 74 43 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73  tCnn,..        s
b490: 74 72 69 6e 67 20 64 65 73 74 4e 61 6d 65 2c 0d  tring destName,.
b4a0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
b4b0: 73 6f 75 72 63 65 4e 61 6d 65 0d 0a 20 20 20 20  sourceName..    
b4c0: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
b4d0: 20 20 20 20 20 20 69 66 20 28 64 65 73 74 43 6e        if (destCn
b4e0: 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
b4f0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
b500: 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
b510: 63 65 70 74 69 6f 6e 28 22 64 65 73 74 43 6e 6e  ception("destCnn
b520: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
b530: 66 20 28 64 65 73 74 4e 61 6d 65 20 3d 3d 20 6e  f (destName == n
b540: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
b550: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
b560: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
b570: 6e 28 22 64 65 73 74 4e 61 6d 65 22 29 3b 0d 0a  n("destName");..
b580: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f  ..        if (so
b590: 75 72 63 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  urceName == null
b5a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
b5b0: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
b5c0: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
b5d0: 73 6f 75 72 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d  sourceName");...
b5e0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 33  .        SQLite3
b5f0: 20 64 65 73 74 53 71 6c 69 74 65 33 20 3d 20 64   destSqlite3 = d
b600: 65 73 74 43 6e 6e 2e 5f 73 71 6c 20 61 73 20 53  estCnn._sql as S
b610: 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20 20 20 20 20  QLite3;....     
b620: 20 20 20 69 66 20 28 64 65 73 74 53 71 6c 69 74     if (destSqlit
b630: 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  e3 == null)..   
b640: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
b650: 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
b660: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
b670: 20 20 20 20 20 20 20 22 44 65 73 74 69 6e 61 74         "Destinat
b680: 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ion connection h
b690: 61 73 20 6e 6f 20 77 72 61 70 70 65 72 2e 22 2c  as no wrapper.",
b6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b6b0: 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d    "destCnn");...
b6c0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
b6d0: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
b6e0: 64 65 73 74 48 61 6e 64 6c 65 20 3d 20 64 65 73  destHandle = des
b6f0: 74 53 71 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a  tSqlite3._sql;..
b700: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
b710: 73 74 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c  stHandle == null
b720: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
b730: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
b740: 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  tException(..   
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
b760: 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63  stination connec
b770: 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
b780: 6c 69 64 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20  lid handle.",.. 
b790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
b7a0: 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20  destCnn");....  
b7b0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
b7c0: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 73 6f 75  ectionHandle sou
b7d0: 72 63 65 48 61 6e 64 6c 65 20 3d 20 5f 73 71 6c  rceHandle = _sql
b7e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
b7f0: 28 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 3d  (sourceHandle ==
b800: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
b810: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
b820: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
b830: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
b840: 20 20 20 20 20 20 20 20 20 20 22 53 6f 75 72 63            "Sourc
b850: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  e connection has
b860: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
b870: 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
b880: 20 20 62 79 74 65 5b 5d 20 7a 44 65 73 74 4e 61    byte[] zDestNa
b890: 6d 65 20 3d 20 54 6f 55 54 46 38 28 64 65 73 74  me = ToUTF8(dest
b8a0: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
b8b0: 62 79 74 65 5b 5d 20 7a 53 6f 75 72 63 65 4e 61  byte[] zSourceNa
b8c0: 6d 65 20 3d 20 54 6f 55 54 46 38 28 73 6f 75 72  me = ToUTF8(sour
b8d0: 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  ceName);....    
b8e0: 20 20 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75      IntPtr backu
b8f0: 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
b900: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b910: 62 61 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20  backup_init(..  
b920: 20 20 20 20 20 20 20 20 20 20 64 65 73 74 48 61            destHa
b930: 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c  ndle, zDestName,
b940: 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 20 7a   sourceHandle, z
b950: 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  SourceName);....
b960: 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b          if (back
b970: 75 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  up == IntPtr.Zer
b980: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
b990: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
b9a0: 45 78 63 65 70 74 69 6f 6e 28 52 65 73 75 6c 74  Exception(Result
b9b0: 43 6f 64 65 28 29 2c 20 53 51 4c 69 74 65 4c 61  Code(), SQLiteLa
b9c0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
b9d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
b9e0: 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70 28 0d  w SQLiteBackup(.
b9f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
ba00: 73 2c 20 62 61 63 6b 75 70 2c 20 64 65 73 74 48  s, backup, destH
ba10: 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65  andle, zDestName
ba20: 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 20  , sourceHandle, 
ba30: 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20  zSourceName);.. 
ba40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
ba50: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
ba60: 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f 20  // Copies up to 
ba70: 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68 65  N pages from the
ba80: 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
ba90: 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74   to the destinat
baa0: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74  ion..    /// dat
bab0: 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
bac0: 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
bad0: 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ied backup objec
bae0: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
baf0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
bb00: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
bb10: 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
bb20: 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f  object to use.</
bb30: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
bb40: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61  <param name="nPa
bb50: 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ge">..    /// Th
bb60: 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
bb70: 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74  s to copy, negat
bb80: 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20  ive to copy all 
bb90: 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e  remaining pages.
bba0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
bbb0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
bbc0: 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e  am name="retry">
bbd0: 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f  ..    /// Set to
bbe0: 20 74 72 75 65 20 69 66 20 74 68 65 20 6f 70 65   true if the ope
bbf0: 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  ration needs to 
bc00: 62 65 20 72 65 74 72 69 65 64 20 64 75 65 20 74  be retried due t
bc10: 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  o database..    
bc20: 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75  /// locking issu
bc30: 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 73  es; otherwise, s
bc40: 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20  et to false...  
bc50: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
bc60: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
bc70: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20  >..    /// True 
bc80: 69 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f 72  if there are mor
bc90: 65 20 70 61 67 65 73 20 74 6f 20 62 65 20 63 6f  e pages to be co
bca0: 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68 65  pied, false othe
bcb0: 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  rwise...    /// 
bcc0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
bcd0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
bce0: 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75  e bool StepBacku
bcf0: 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
bd00: 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 2c  teBackup backup,
bd10: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50  ..        int nP
bd20: 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f 75  age,..        ou
bd30: 74 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20  t bool retry..  
bd40: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
bd50: 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20          retry = 
bd60: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
bd70: 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
bd80: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
bd90: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
bda0: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
bdb0: 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
bdc0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
bdd0: 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
bde0: 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
bdf0: 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
be00: 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
be10: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
be20: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
be30: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
be40: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
be60: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
be70: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
be80: 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
be90: 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65    int n = Unsafe
bea0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
beb0: 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65  lite3_backup_ste
bec0: 70 28 68 61 6e 64 6c 65 2c 20 6e 50 61 67 65 29  p(handle, nPage)
bed0: 3b 0d 0a 20 20 20 20 20 20 20 20 62 61 63 6b 75  ;..        backu
bee0: 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 20 3d 20  p._stepResult = 
bef0: 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65  n; /* NOTE: Save
bf00: 20 66 6f 72 20 75 73 65 20 62 79 20 46 69 6e 69   for use by Fini
bf10: 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a  shBackup. */....
bf20: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
bf30: 20 28 69 6e 74 29 53 51 4c 69 74 65 45 72 72 6f   (int)SQLiteErro
bf40: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
bf50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bf60: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
bf70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
bf80: 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
bf90: 20 28 69 6e 74 29 53 51 4c 69 74 65 45 72 72 6f   (int)SQLiteErro
bfa0: 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20  rCode.Busy)..   
bfb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
bfc0: 20 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65      retry = true
bfd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
bfe0: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
bff0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c000: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 28 69  else if (n == (i
c010: 6e 74 29 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  nt)SQLiteErrorCo
c020: 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20  de.Locked)..    
c030: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c040: 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b     retry = true;
c050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
c060: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
c070: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
c080: 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 28 69 6e  lse if (n == (in
c090: 74 29 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  t)SQLiteErrorCod
c0a0: 65 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20  e.Done)..       
c0b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c0c0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
c0d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c0e0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
c0f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
c100: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
c110: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
c120: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
c130: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
c140: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
c150: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
c160: 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  Returns the numb
c170: 65 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61  er of pages rema
c180: 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69  ining to be copi
c190: 65 64 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72  ed from the sour
c1a0: 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61  ce..    /// data
c1b0: 62 61 73 65 20 74 6f 20 74 68 65 20 64 65 73 74  base to the dest
c1c0: 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
c1d0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
c1e0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a   the specified..
c1f0: 20 20 20 20 2f 2f 2f 20 62 61 63 6b 75 70 20 6f      /// backup o
c200: 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bject...    /// 
c210: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
c220: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
c230: 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63  "backup">The bac
c240: 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68  kup object to ch
c250: 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  eck.</param>..  
c260: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
c270: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
c280: 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20  es remaining to 
c290: 62 65 20 63 6f 70 69 65 64 2e 3c 2f 72 65 74 75  be copied.</retu
c2a0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
c2b0: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
c2c0: 52 65 6d 61 69 6e 69 6e 67 42 61 63 6b 75 70 28  RemainingBackup(
c2d0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
c2e0: 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20  Backup backup.. 
c2f0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
c300: 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63  .        if (bac
c310: 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  kup == null)..  
c320: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
c330: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
c340: 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75  Exception("backu
c350: 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p");....        
c360: 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
c370: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b  le handle = back
c380: 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75  up._sqlite_backu
c390: 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  p;....        if
c3a0: 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c   (handle == null
c3b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
c3c0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
c3d0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
c3e0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
c3f0: 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
c400: 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
c410: 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
c420: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
c430: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c440: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
c450: 75 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e  up_remaining(han
c460: 64 6c 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  dle);..    }....
c470: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
c480: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
c490: 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns the total num
c4a0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
c4b0: 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
c4c0: 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  ase associated..
c4d0: 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65      /// with the
c4e0: 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75   specified backu
c4f0: 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f  p object...    /
c500: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
c510: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
c520: 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
c530: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
c540: 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d   check.</param>.
c550: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
c560: 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s>The total numb
c570: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
c580: 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
c590: 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  se.</returns>.. 
c5a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c5b0: 72 69 64 65 20 69 6e 74 20 50 61 67 65 43 6f 75  ride int PageCou
c5c0: 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  ntBackup(..     
c5d0: 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
c5e0: 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20  backup..        
c5f0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
c600: 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
c610: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
c620: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
c630: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
c640: 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
c650: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
c660: 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
c670: 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
c680: 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
c690: 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
c6a0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
c6b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
c6c0: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
c6d0: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
c6f0: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
c700: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
c710: 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
c720: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
c730: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
c740: 69 74 65 33 5f 62 61 63 6b 75 70 5f 70 61 67 65  ite3_backup_page
c750: 63 6f 75 6e 74 28 68 61 6e 64 6c 65 29 3b 0d 0a  count(handle);..
c760: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
c770: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
c780: 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20 74 68 65  /// Destroys the
c790: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2c 20   backup object, 
c7a0: 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61 6e 79  rolling back any
c7b0: 20 62 61 63 6b 75 70 20 74 68 61 74 20 6d 61 79   backup that may
c7c0: 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20   be in..    /// 
c7d0: 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20 2f 2f  progess...    //
c7e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
c7f0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
c800: 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62  e="backup">The b
c810: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20  ackup object to 
c820: 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61 6d 3e  destroy.</param>
c830: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
c840: 76 65 72 72 69 64 65 20 76 6f 69 64 20 46 69 6e  verride void Fin
c850: 69 73 68 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  ishBackup(..    
c860: 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
c870: 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20   backup..       
c880: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
c890: 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
c8a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
c8b0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
c8c0: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
c8d0: 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
c8e0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
c8f0: 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
c900: 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
c910: 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
c920: 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
c930: 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
c940: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
c950: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
c960: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
c970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
c980: 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
c990: 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
c9a0: 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
c9b0: 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66     int n = Unsaf
c9c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c9d0: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69  qlite3_backup_fi
c9e0: 6e 69 73 68 28 68 61 6e 64 6c 65 29 3b 0d 0a 20  nish(handle);.. 
c9f0: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 53 65         handle.Se
ca00: 74 48 61 6e 64 6c 65 41 73 49 6e 76 61 6c 69 64  tHandleAsInvalid
ca10: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
ca20: 66 20 28 28 6e 20 3e 20 30 29 20 26 26 20 28 6e  f ((n > 0) && (n
ca30: 20 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70   != backup._step
ca40: 52 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20  Result))..      
ca50: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
ca60: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
ca70: 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72  n, SQLiteLastErr
ca80: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
ca90: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
caa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
caf0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
cb00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
cb10: 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66  // Determines if
cb20: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
cb30: 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65   library has bee
cb40: 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  n initialized fo
cb50: 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63  r the..    /// c
cb60: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
cb70: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
cb80: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
cb90: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
cba0: 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61  A boolean indica
cbb0: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
cbc0: 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  not the SQLite c
cbd0: 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ore library has 
cbe0: 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e  been..    /// in
cbf0: 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68  itialized for th
cc00: 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
cc10: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  s...    /// </re
cc20: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
cc30: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
cc40: 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65 64  ol IsInitialized
cc50: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
cc60: 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63     return Static
cc70: 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b  IsInitialized();
cc80: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
cc90: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
cca0: 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73    /// Determines
ccb0: 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   if the SQLite c
ccc0: 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ore library has 
ccd0: 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
cce0: 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f   for the..    //
ccf0: 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  / current proces
cd00: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
cd10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
cd20: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
cd30: 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  // A boolean ind
cd40: 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20  icating whether 
cd50: 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74  or not the SQLit
cd60: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68  e core library h
cd70: 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f  as been..    ///
cd80: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72   initialized for
cd90: 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
cda0: 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cess...    /// <
cdb0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
cdc0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62  nternal static b
cdd0: 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69 74  ool StaticIsInit
cde0: 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b  ialized()..    {
cdf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
ce00: 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a        // BUGFIX:
ce10: 20 50 72 65 76 65 6e 74 20 72 61 63 65 73 20 77   Prevent races w
ce20: 69 74 68 20 6f 74 68 65 72 20 74 68 72 65 61 64  ith other thread
ce30: 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69 72  s for this entir
ce40: 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20  e block, due..  
ce50: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
ce60: 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e 61   to the try/fina
ce70: 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20 20  lly semantics.  
ce80: 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39 30  See ticket [7290
ce90: 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20  5c9a77]...      
cea0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f    //..        lo
ceb0: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20  ck (syncRoot).. 
cec0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50         {..#if !P
ced0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
cee0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
cef0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
cf00: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
cf10: 61 76 65 20 74 68 65 20 73 74 61 74 65 20 6f 66  ave the state of
cf20: 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61   the logging cla
cf30: 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73 74  ss and then rest
cf40: 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20  ore it..        
cf50: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66 74      //       aft
cf60: 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20 74  er we are done t
cf70: 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20  o avoid logging 
cf80: 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20 65  too many false e
cf90: 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  rrors...        
cfa0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
cfb0: 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e      bool savedEn
cfc0: 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f  abled = SQLiteLo
cfd0: 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20  g.Enabled;..    
cfe0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
cff0: 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73  g.Enabled = fals
d000: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
d010: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
d020: 20 20 20 7b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20     {..#endif..  
d030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
d040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d050: 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
d060: 6d 65 74 68 6f 64 20 5b 61 62 5d 75 73 65 73 20  method [ab]uses 
d070: 74 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51  the fact that SQ
d080: 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  Lite will always
d090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d0a0: 20 20 2f 2f 20 20 20 20 20 20 20 72 65 74 75 72    //       retur
d0b0: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 66  n SQLITE_ERROR f
d0c0: 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63  or any unknown c
d0d0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
d0e0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
d0f0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 2a 75       //       *u
d100: 6e 6c 65 73 73 2a 20 74 68 65 20 53 51 4c 69 74  nless* the SQLit
d110: 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c  e library has al
d120: 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69  ready been initi
d130: 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20  alized...       
d140: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
d150: 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 20 69    In that case i
d160: 74 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 72 65  t will always re
d170: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
d180: 53 45 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  SE...           
d190: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
d1a0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 63 20           int rc 
d1b0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
d1c0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
d1d0: 6e 66 69 67 28 0d 0a 20 20 20 20 20 20 20 20 20  nfig(..         
d1e0: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
d1f0: 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
d200: 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
d210: 47 5f 4e 4f 4e 45 2c 20 6e 75 6c 6c 2c 20 28 49  G_NONE, null, (I
d220: 6e 74 50 74 72 29 30 29 3b 0d 0a 0d 0a 20 20 20  ntPtr)0);....   
d230: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
d240: 75 72 6e 20 28 72 63 20 3d 3d 20 2f 2a 20 53 51  urn (rc == /* SQ
d250: 4c 49 54 45 5f 4d 49 53 55 53 45 20 2a 2f 20 32  LITE_MISUSE */ 2
d260: 31 29 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  1);..#if !PLATFO
d270: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
d280: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
d290: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
d2a0: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
d2b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d2c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
d2d0: 67 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61 76 65  g.Enabled = save
d2e0: 64 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20  dEnabled;..     
d2f0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
d300: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
d310: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
d320: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
d330: 20 48 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e   Helper function
d340: 20 74 6f 20 72 65 74 72 69 65 76 65 20 61 20 63   to retrieve a c
d350: 6f 6c 75 6d 6e 20 6f 66 20 64 61 74 61 20 66 72  olumn of data fr
d360: 6f 6d 20 61 6e 20 61 63 74 69 76 65 20 73 74 61  om an active sta
d370: 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f  tement...    ///
d380: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d390: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
d3a0: 3d 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74  ="stmt">The stat
d3b0: 65 6d 65 6e 74 20 62 65 69 6e 67 20 73 74 65 70  ement being step
d3c0: 28 29 27 64 20 74 68 72 6f 75 67 68 3c 2f 70 61  ()'d through</pa
d3d0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
d3e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78  aram name="index
d3f0: 22 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64  ">The column ind
d400: 65 78 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  ex to retrieve</
d410: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
d420: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70  <param name="typ
d430: 22 3e 54 68 65 20 74 79 70 65 20 6f 66 20 64 61  ">The type of da
d440: 74 61 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ta contained in 
d450: 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  the column.  If 
d460: 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74  Uninitialized, t
d470: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c  his function wil
d480: 6c 20 72 65 74 72 69 65 76 65 20 74 68 65 20 64  l retrieve the d
d490: 61 74 61 74 79 70 65 20 69 6e 66 6f 72 6d 61 74  atatype informat
d4a0: 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ion.</param>..  
d4b0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
d4c0: 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 61 20  eturns the data 
d4d0: 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72  in the column</r
d4e0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
d4f0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f  ernal override o
d500: 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 53  bject GetValue(S
d510: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
d520: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
d530: 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 29 0d  SQLiteType typ).
d540: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
d550: 20 28 49 73 4e 75 6c 6c 28 73 74 6d 74 2c 20 69   (IsNull(stmt, i
d560: 6e 64 65 78 29 29 20 72 65 74 75 72 6e 20 44 42  ndex)) return DB
d570: 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20  Null.Value;..   
d580: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20     TypeAffinity 
d590: 61 66 66 20 3d 20 74 79 70 2e 41 66 66 69 6e 69  aff = typ.Affini
d5a0: 74 79 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 20  ty;..      Type 
d5b0: 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  t = null;....   
d5c0: 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20     if (typ.Type 
d5d0: 21 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74  != DbType.Object
d5e0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
d5f0: 20 20 20 20 74 20 3d 20 53 51 4c 69 74 65 43 6f      t = SQLiteCo
d600: 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65  nvert.SQLiteType
d610: 54 6f 54 79 70 65 28 74 79 70 29 3b 0d 0a 20 20  ToType(typ);..  
d620: 20 20 20 20 20 20 61 66 66 20 3d 20 54 79 70 65        aff = Type
d630: 54 6f 41 66 66 69 6e 69 74 79 28 74 29 3b 0d 0a  ToAffinity(t);..
d640: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d650: 20 73 77 69 74 63 68 20 28 61 66 66 29 0d 0a 20   switch (aff).. 
d660: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d670: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
d680: 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20  y.Blob:..       
d690: 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20     if (typ.Type 
d6a0: 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26  == DbType.Guid &
d6b0: 26 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d  & typ.Affinity =
d6c0: 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54  = TypeAffinity.T
d6d0: 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ext)..          
d6e0: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
d6f0: 64 28 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  d(GetText(stmt, 
d700: 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20  index));....    
d710: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28 69        int n = (i
d720: 6e 74 29 47 65 74 42 79 74 65 73 28 73 74 6d 74  nt)GetBytes(stmt
d730: 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c  , index, 0, null
d740: 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20  , 0, 0);..      
d750: 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e      byte[] b = n
d760: 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20  ew byte[n];..   
d770: 20 20 20 20 20 20 20 47 65 74 42 79 74 65 73 28         GetBytes(
d780: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20  stmt, index, 0, 
d790: 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20  b, 0, n);....   
d7a0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54         if (typ.T
d7b0: 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75  ype == DbType.Gu
d7c0: 69 64 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a  id && n == 16)..
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
d7e0: 72 6e 20 6e 65 77 20 47 75 69 64 28 62 29 3b 0d  rn new Guid(b);.
d7f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
d800: 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20 20  urn b;..        
d810: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
d820: 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20  y.DateTime:..   
d830: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
d840: 74 44 61 74 65 54 69 6d 65 28 73 74 6d 74 2c 20  tDateTime(stmt, 
d850: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
d860: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
d870: 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20  ty.Double:..    
d880: 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e        if (t == n
d890: 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 44  ull) return GetD
d8a0: 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65  ouble(stmt, inde
d8b0: 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65  x);..          e
d8c0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
d8d0: 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
d8e0: 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 44 6f  ChangeType(GetDo
d8f0: 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  uble(stmt, index
d900: 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  ), t, null);..  
d910: 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
d920: 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a  ffinity.Int64:..
d930: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
d940: 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
d950: 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
d960: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
d970: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
d980: 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65      return Conve
d990: 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65  rt.ChangeType(Ge
d9a0: 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
d9b0: 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a  ex), t, null);..
d9c0: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a          default:
d9d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
d9e0: 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c  rn GetText(stmt,
d9f0: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
da00: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
da10: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
da20: 65 20 69 6e 74 20 47 65 74 43 75 72 73 6f 72 46  e int GetCursorF
da30: 6f 72 54 61 62 6c 65 28 53 51 4c 69 74 65 53 74  orTable(SQLiteSt
da40: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
da50: 74 20 64 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61  t db, int rootPa
da60: 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ge)..    {..#if 
da70: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
da80: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
da90: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
daa0: 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  ds.sqlite3_table
dab0: 5f 63 75 72 73 6f 72 28 73 74 6d 74 2e 5f 73 71  _cursor(stmt._sq
dac0: 6c 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72  lite_stmt, db, r
dad0: 6f 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65  ootPage);..#else
dae0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d  ..      return -
daf0: 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  1;..#endif..    
db00: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
db10: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
db20: 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f  GetRowIdForCurso
db30: 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  r(SQLiteStatemen
db40: 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73  t stmt, int curs
db50: 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  or)..    {..#if 
db60: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
db70: 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77  ..      long row
db80: 69 64 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72  id;..      int r
db90: 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
dba0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
dbb0: 63 75 72 73 6f 72 5f 72 6f 77 69 64 28 73 74 6d  cursor_rowid(stm
dbc0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
dbd0: 63 75 72 73 6f 72 2c 20 6f 75 74 20 72 6f 77 69  cursor, out rowi
dbe0: 64 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72  d);..      if (r
dbf0: 63 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 72  c == 0) return r
dc00: 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  owid;....      r
dc10: 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d  eturn 0;..#else.
dc20: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
dc30: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
dc40: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
dc50: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 47 65  override void Ge
dc60: 74 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65  tIndexColumnExte
dc70: 6e 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20  ndedInfo(string 
dc80: 64 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67  database, string
dc90: 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63   index, string c
dca0: 6f 6c 75 6d 6e 2c 20 6f 75 74 20 69 6e 74 20 73  olumn, out int s
dcb0: 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20 69 6e 74  ortMode, out int
dcc0: 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 73 74   onError, out st
dcd0: 72 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65  ring collationSe
dce0: 71 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a  quence)..    {..
dcf0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
dd00: 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50  DARD..      IntP
dd10: 74 72 20 63 6f 6c 6c 3b 0d 0a 20 20 20 20 20 20  tr coll;..      
dd20: 69 6e 74 20 63 6f 6c 6c 6c 65 6e 3b 0d 0a 20 20  int colllen;..  
dd30: 20 20 20 20 69 6e 74 20 72 63 3b 0d 0a 0d 0a 20      int rc;.... 
dd40: 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65       rc = Unsafe
dd50: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
dd60: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75  lite3_index_colu
dd70: 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28  mn_info_interop(
dd80: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74  _sql, ToUTF8(dat
dd90: 61 62 61 73 65 29 2c 20 54 6f 55 54 46 38 28 69  abase), ToUTF8(i
dda0: 6e 64 65 78 29 2c 20 54 6f 55 54 46 38 28 63 6f  ndex), ToUTF8(co
ddb0: 6c 75 6d 6e 29 2c 20 6f 75 74 20 73 6f 72 74 4d  lumn), out sortM
ddc0: 6f 64 65 2c 20 6f 75 74 20 6f 6e 45 72 72 6f 72  ode, out onError
ddd0: 2c 20 6f 75 74 20 63 6f 6c 6c 2c 20 6f 75 74 20  , out coll, out 
dde0: 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20  colllen);..     
ddf0: 20 69 66 20 28 72 63 20 21 3d 20 30 29 20 74 68   if (rc != 0) th
de00: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
de10: 63 65 70 74 69 6f 6e 28 72 63 2c 20 22 22 29 3b  ception(rc, "");
de20: 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74  ....      collat
de30: 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54  ionSequence = UT
de40: 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c  F8ToString(coll,
de50: 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73   colllen);..#els
de60: 65 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64  e..      sortMod
de70: 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e  e = 0;..      on
de80: 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20  Error = 2;..    
de90: 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65    collationSeque
dea0: 6e 63 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d  nce = "BINARY";.
deb0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
dec0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ded0: 76 65 72 72 69 64 65 20 69 6e 74 20 46 69 6c 65  verride int File
dee0: 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a  Control(string z
def0: 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20  DbName, int op, 
df00: 49 6e 74 50 74 72 20 70 41 72 67 29 0d 0a 20 20  IntPtr pArg)..  
df10: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
df20: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
df30: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 69  thods.sqlite3_fi
df40: 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c  le_control(_sql,
df50: 20 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c   (zDbName != nul
df60: 6c 29 20 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e  l) ? ToUTF8(zDbN
df70: 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c  ame) : null, op,
df80: 20 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a   pArg);..    }..
df90: 20 20 7d 0d 0a 7d 0d 0a                            }..}..