System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 73efaebf5ca0632f29f43d7258caccaba1a47e14:


0000: ef bb bf 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a  ************.. *
0040: 20 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74   ADO.NET 2.0 Dat
0050: 61 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53  a Provider for S
0060: 51 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e  QLite Version 3.
0070: 58 0d 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79  X.. * Written by
0080: 20 52 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20   Robert Simpson 
0090: 28 72 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73  (robert@blackcas
00a0: 74 6c 65 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a  tlesoft.com).. *
00b0: 20 0d 0a 20 2a 20 52 65 6c 65 61 73 65 64 20 74   .. * Released t
00c0: 6f 20 74 68 65 20 70 75 62 6c 69 63 20 64 6f 6d  o the public dom
00d0: 61 69 6e 2c 20 75 73 65 20 61 74 20 79 6f 75 72  ain, use at your
00e0: 20 6f 77 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a   own risk!.. ***
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70  *****/....namesp
0130: 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ace System.Data.
0140: 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69  SQLite..{..  usi
0150: 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73  ng System;..  us
0160: 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74 69  ing System.Runti
0170: 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69 63  me.InteropServic
0180: 65 73 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  es;....#if !PLAT
0190: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
01a0: 45 57 4f 52 4b 0d 0a 20 20 5b 55 6e 6d 61 6e 61  EWORK..  [Unmana
01b0: 67 65 64 46 75 6e 63 74 69 6f 6e 50 6f 69 6e 74  gedFunctionPoint
01c0: 65 72 28 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e  er(CallingConven
01d0: 74 69 6f 6e 2e 43 64 65 63 6c 29 5d 0d 0a 23 65  tion.Cdecl)]..#e
01e0: 6e 64 69 66 0d 0a 20 20 69 6e 74 65 72 6e 61 6c  ndif..  internal
01f0: 20 64 65 6c 65 67 61 74 65 20 76 6f 69 64 20 53   delegate void S
0200: 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b  QLiteLogCallback
0210: 28 49 6e 74 50 74 72 20 70 75 73 65 72 2c 20 69  (IntPtr puser, i
0220: 6e 74 20 65 72 72 5f 63 6f 64 65 2c 20 49 6e 74  nt err_code, Int
0230: 50 74 72 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d  Ptr message);...
0240: 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e  .  /// <summary>
0250: 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61  ..  /// This cla
0260: 73 73 20 69 6d 70 6c 65 6d 65 6e 74 73 20 53 51  ss implements SQ
0270: 4c 69 74 65 42 61 73 65 20 63 6f 6d 70 6c 65 74  LiteBase complet
0280: 65 6c 79 2c 20 61 6e 64 20 69 73 20 74 68 65 20  ely, and is the 
0290: 67 75 74 73 20 6f 66 20 74 68 65 20 63 6f 64 65  guts of the code
02a0: 20 74 68 61 74 20 69 6e 74 65 72 6f 70 27 73 20   that interop's 
02b0: 53 51 4c 69 74 65 20 77 69 74 68 20 2e 4e 45 54  SQLite with .NET
02c0: 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
02d0: 79 3e 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63  y>..  internal c
02e0: 6c 61 73 73 20 53 51 4c 69 74 65 33 20 3a 20 53  lass SQLite3 : S
02f0: 51 4c 69 74 65 42 61 73 65 0d 0a 20 20 7b 0d 0a  QLiteBase..  {..
0300: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
0310: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
0320: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6e      internal con
0330: 73 74 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e  st string Design
0340: 65 72 56 65 72 73 69 6f 6e 20 3d 20 22 31 2e 30  erVersion = "1.0
0350: 2e 37 35 2e 30 22 3b 0d 0a 23 65 6e 64 69 66 0d  .75.0";..#endif.
0360: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
0370: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
0380: 65 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65 72  e opaque pointer
0390: 20 72 65 74 75 72 6e 65 64 20 74 6f 20 75 73 20   returned to us 
03a0: 62 79 20 74 68 65 20 73 71 6c 69 74 65 20 70 72  by the sqlite pr
03b0: 6f 76 69 64 65 72 0d 0a 20 20 20 20 2f 2f 2f 20  ovider..    /// 
03c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
03d0: 70 72 6f 74 65 63 74 65 64 20 53 51 4c 69 74 65  protected SQLite
03e0: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
03f0: 20 5f 73 71 6c 3b 0d 0a 20 20 20 20 70 72 6f 74   _sql;..    prot
0400: 65 63 74 65 64 20 73 74 72 69 6e 67 20 5f 66 69  ected string _fi
0410: 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 70 72 6f  leName;..    pro
0420: 74 65 63 74 65 64 20 62 6f 6f 6c 20 5f 75 73 65  tected bool _use
0430: 50 6f 6f 6c 3b 0d 0a 20 20 20 20 70 72 6f 74 65  Pool;..    prote
0440: 63 74 65 64 20 69 6e 74 20 5f 70 6f 6f 6c 56 65  cted int _poolVe
0450: 72 73 69 6f 6e 3b 0d 0a 0d 0a 23 69 66 20 21 50  rsion;....#if !P
0460: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
0470: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 70 72  RAMEWORK..    pr
0480: 69 76 61 74 65 20 62 6f 6f 6c 20 5f 62 75 69 6c  ivate bool _buil
0490: 64 69 6e 67 53 63 68 65 6d 61 3b 0d 0a 23 65 6e  dingSchema;..#en
04a0: 64 69 66 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  dif..    /// <su
04b0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
04c0: 54 68 65 20 75 73 65 72 2d 64 65 66 69 6e 65 64  The user-defined
04d0: 20 66 75 6e 63 74 69 6f 6e 73 20 72 65 67 69 73   functions regis
04e0: 74 65 72 65 64 20 6f 6e 20 74 68 69 73 20 63 6f  tered on this co
04f0: 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f  nnection..    //
0500: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0510: 20 20 70 72 6f 74 65 63 74 65 64 20 53 51 4c 69    protected SQLi
0520: 74 65 46 75 6e 63 74 69 6f 6e 5b 5d 20 5f 66 75  teFunction[] _fu
0530: 6e 63 74 69 6f 6e 73 41 72 72 61 79 3b 0d 0a 0d  nctionsArray;...
0540: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51  .    internal SQ
0550: 4c 69 74 65 33 28 53 51 4c 69 74 65 44 61 74 65  Lite3(SQLiteDate
0560: 46 6f 72 6d 61 74 73 20 66 6d 74 29 0d 0a 20 20  Formats fmt)..  
0570: 20 20 20 20 3a 20 62 61 73 65 28 66 6d 74 29 0d      : base(fmt).
0580: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 7d 0d 0a 0d  .    {..    }...
0590: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f  .    protected o
05a0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73  verride void Dis
05b0: 70 6f 73 65 28 62 6f 6f 6c 20 62 44 69 73 70 6f  pose(bool bDispo
05c0: 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sing)..    {..  
05d0: 20 20 20 20 69 66 20 28 62 44 69 73 70 6f 73 69      if (bDisposi
05e0: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 43 6c 6f  ng)..        Clo
05f0: 73 65 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  se();..    }....
0600: 20 20 20 20 2f 2f 20 49 74 20 69 73 6e 27 74 20      // It isn't 
0610: 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63 6c 65  necessary to cle
0620: 61 6e 75 70 20 61 6e 79 20 66 75 6e 63 74 69 6f  anup any functio
0630: 6e 73 20 77 65 27 76 65 20 72 65 67 69 73 74 65  ns we've registe
0640: 72 65 64 2e 20 20 49 66 20 74 68 65 20 63 6f 6e  red.  If the con
0650: 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 20  nection..    // 
0660: 67 6f 65 73 20 74 6f 20 74 68 65 20 70 6f 6f 6c  goes to the pool
0670: 20 61 6e 64 20 69 73 20 72 65 73 75 72 72 65 63   and is resurrec
0680: 74 65 64 20 6c 61 74 65 72 2c 20 72 65 2d 72 65  ted later, re-re
0690: 67 69 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f  gistered functio
06a0: 6e 73 20 77 69 6c 6c 20 6f 76 65 72 77 72 69 74  ns will overwrit
06b0: 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f 20 70 72  e the..    // pr
06c0: 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73  evious functions
06d0: 2e 20 20 54 68 65 20 53 51 4c 69 74 65 46 75 6e  .  The SQLiteFun
06e0: 63 74 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c  ctionCookieHandl
06f0: 65 20 77 69 6c 6c 20 74 61 6b 65 20 63 61 72 65  e will take care
0700: 20 6f 66 20 66 72 65 65 69 6e 67 20 75 6e 6d 61   of freeing unma
0710: 6e 61 67 65 64 0d 0a 20 20 20 20 2f 2f 20 72 65  naged..    // re
0720: 73 6f 75 72 63 65 73 20 62 65 6c 6f 6e 67 69 6e  sources belongin
0730: 67 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  g to the previou
0740: 73 6c 79 2d 72 65 67 69 73 74 65 72 65 64 20 66  sly-registered f
0750: 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 69  unctions...    i
0760: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
0770: 20 76 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20   void Close().. 
0780: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
0790: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql != null).. 
07a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
07b0: 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20  if (_usePool).. 
07c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
07d0: 20 20 20 20 53 51 4c 69 74 65 42 61 73 65 2e 52      SQLiteBase.R
07e0: 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f  esetConnection(_
07f0: 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  sql);..         
0800: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
0810: 6e 50 6f 6f 6c 2e 41 64 64 28 5f 66 69 6c 65 4e  nPool.Add(_fileN
0820: 61 6d 65 2c 20 5f 73 71 6c 2c 20 5f 70 6f 6f 6c  ame, _sql, _pool
0830: 56 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20  Version);..     
0840: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
0850: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73  se..          _s
0860: 71 6c 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20  ql.Dispose();.. 
0870: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
0880: 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  _sql = null;..  
0890: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
08a0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
08b0: 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20 20  d Cancel()..    
08c0: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
08d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
08e0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 5f  ite3_interrupt(_
08f0: 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sql);..    }....
0900: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
0910: 72 72 69 64 65 20 73 74 72 69 6e 67 20 56 65 72  rride string Ver
0920: 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  sion..    {..   
0930: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
0940: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
0950: 53 51 4c 69 74 65 33 2e 53 51 4c 69 74 65 56 65  SQLite3.SQLiteVe
0960: 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d  rsion;..      }.
0970: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
0980: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74  ternal static st
0990: 72 69 6e 67 20 53 51 4c 69 74 65 56 65 72 73 69  ring SQLiteVersi
09a0: 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  on..    {..     
09b0: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
09c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54         return UT
09d0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
09e0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
09f0: 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
0a00: 6e 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20  n(), -1);..     
0a10: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
0a20: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
0a30: 64 65 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d  de bool AutoComm
0a40: 69 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  it..    {..     
0a50: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
0a60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 73         return Is
0a70: 41 75 74 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 29  Autocommit(_sql)
0a80: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
0a90: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
0aa0: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
0ab0: 68 61 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20  hanges..    {.. 
0ac0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
0ad0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
0ae0: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
0af0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68  thods.sqlite3_ch
0b00: 61 6e 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 20 20  anges(_sql);..  
0b10: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
0b20: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0b30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64  >..    /// Shutd
0b40: 6f 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65  own the SQLite e
0b50: 6e 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74  ngine so that it
0b60: 20 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65   can be restarte
0b70: 64 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74  d with different
0b80: 20 63 6f 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e   config options.
0b90: 0d 0a 20 20 20 20 2f 2f 2f 20 57 65 20 64 65 70  ..    /// We dep
0ba0: 65 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74  end on auto init
0bb0: 69 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65  ialization to re
0bc0: 63 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  cover...    /// 
0bd0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0be0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
0bf0: 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f  urns a result co
0c00: 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  de</returns>..  
0c10: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
0c20: 69 64 65 20 69 6e 74 20 53 68 75 74 64 6f 77 6e  ide int Shutdown
0c30: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
0c40: 20 20 20 69 6e 74 20 72 63 20 3d 20 55 6e 73 61     int rc = Unsa
0c50: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
0c60: 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e  sqlite3_shutdown
0c70: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ();..        ret
0c80: 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a  urn rc;..    }..
0c90: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
0ca0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4f  verride bool IsO
0cb0: 70 65 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  pen()..    {..  
0cc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f 73        return (_s
0cd0: 71 6c 20 21 3d 20 6e 75 6c 6c 29 3b 0d 0a 20 20  ql != null);..  
0ce0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
0cf0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
0d00: 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73 74  d Open(string st
0d10: 72 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 69 74  rFilename, SQLit
0d20: 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20 66  eOpenFlagsEnum f
0d30: 6c 61 67 73 2c 20 69 6e 74 20 6d 61 78 50 6f 6f  lags, int maxPoo
0d40: 6c 53 69 7a 65 2c 20 62 6f 6f 6c 20 75 73 65 50  lSize, bool useP
0d50: 6f 6f 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ool)..    {..   
0d60: 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e     if (_sql != n
0d70: 75 6c 6c 29 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a  ull) return;....
0d80: 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d        _usePool =
0d90: 20 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20   usePool;..     
0da0: 20 69 66 20 28 75 73 65 50 6f 6f 6c 29 0d 0a 20   if (usePool).. 
0db0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0dc0: 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 73 74 72 46  _fileName = strF
0dd0: 69 6c 65 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ilename;..      
0de0: 20 20 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65 43    _sql = SQLiteC
0df0: 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65  onnectionPool.Re
0e00: 6d 6f 76 65 28 73 74 72 46 69 6c 65 6e 61 6d 65  move(strFilename
0e10: 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f  , maxPoolSize, o
0e20: 75 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29  ut _poolVersion)
0e30: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
0e40: 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20      if (_sql == 
0e50: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  null)..      {..
0e60: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 64          IntPtr d
0e70: 62 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  b;....#if !SQLIT
0e80: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
0e90: 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61      int n = Unsa
0ea0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
0eb0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74  sqlite3_open_int
0ec0: 65 72 6f 70 28 54 6f 55 54 46 38 28 73 74 72 46  erop(ToUTF8(strF
0ed0: 69 6c 65 6e 61 6d 65 29 2c 20 28 69 6e 74 29 66  ilename), (int)f
0ee0: 6c 61 67 73 2c 20 6f 75 74 20 64 62 29 3b 0d 0a  lags, out db);..
0ef0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 69  #else..        i
0f00: 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nt n = UnsafeNat
0f10: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
0f20: 65 33 5f 6f 70 65 6e 5f 76 32 28 54 6f 55 54 46  e3_open_v2(ToUTF
0f30: 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20  8(strFilename), 
0f40: 6f 75 74 20 64 62 2c 20 28 69 6e 74 29 66 6c 61  out db, (int)fla
0f50: 67 73 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  gs, IntPtr.Zero)
0f60: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
0f70: 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68     if (n > 0) th
0f80: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
0f90: 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29  ception(n, null)
0fa0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 73 71  ;....        _sq
0fb0: 6c 20 3d 20 64 62 3b 0d 0a 20 20 20 20 20 20 7d  l = db;..      }
0fc0: 0d 0a 20 20 20 20 20 20 2f 2f 20 42 69 6e 64 20  ..      // Bind 
0fd0: 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20 74 68 69  functions to thi
0fe0: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49  s connection.  I
0ff0: 66 20 61 6e 79 20 70 72 65 76 69 6f 75 73 20 66  f any previous f
1000: 75 6e 63 74 69 6f 6e 73 20 6f 66 20 74 68 65 20  unctions of the 
1010: 73 61 6d 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20  same name..     
1020: 20 2f 2f 20 77 65 72 65 20 61 6c 72 65 61 64 79   // were already
1030: 20 62 6f 75 6e 64 2c 20 74 68 65 6e 20 74 68 65   bound, then the
1040: 20 6e 65 77 20 62 69 6e 64 69 6e 67 73 20 72 65   new bindings re
1050: 70 6c 61 63 65 20 74 68 65 20 6f 6c 64 2e 0d 0a  place the old...
1060: 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73        _functions
1070: 41 72 72 61 79 20 3d 20 53 51 4c 69 74 65 46 75  Array = SQLiteFu
1080: 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74  nction.BindFunct
1090: 69 6f 6e 73 28 74 68 69 73 29 3b 0d 0a 20 20 20  ions(this);..   
10a0: 20 20 20 53 65 74 54 69 6d 65 6f 75 74 28 30 29     SetTimeout(0)
10b0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
10c0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10d0: 65 20 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c  e void ClearPool
10e0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
10f0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
1100: 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28  nPool.ClearPool(
1110: 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  _fileName);..   
1120: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
1130: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
1140: 20 53 65 74 54 69 6d 65 6f 75 74 28 69 6e 74 20   SetTimeout(int 
1150: 6e 54 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20  nTimeoutMS)..   
1160: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20   {..      int n 
1170: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
1180: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 75  thods.sqlite3_bu
1190: 73 79 5f 74 69 6d 65 6f 75 74 28 5f 73 71 6c 2c  sy_timeout(_sql,
11a0: 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20   nTimeoutMS);.. 
11b0: 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20       if (n > 0) 
11c0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
11d0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c  Exception(n, SQL
11e0: 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  iteLastError());
11f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1200: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1210: 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69 74   bool Step(SQLit
1220: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29  eStatement stmt)
1230: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
1240: 6e 74 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e  nt n;..      Ran
1250: 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d  dom rnd = null;.
1260: 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72  .      uint star
1270: 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e  ttick = (uint)En
1280: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
1290: 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74  unt;..      uint
12a0: 20 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74   timeout = (uint
12b0: 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e  )(stmt._command.
12c0: 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20  _commandTimeout 
12d0: 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20  * 1000);....    
12e0: 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d 0a    while (true)..
12f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1300: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
1310: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1320: 5f 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69  _step(stmt._sqli
1330: 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20  te_stmt);....   
1340: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 31 30       if (n == 10
1350: 30 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d  0) return true;.
1360: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d  .        if (n =
1370: 3d 20 31 30 31 29 20 72 65 74 75 72 6e 20 66 61  = 101) return fa
1380: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1390: 69 66 20 28 6e 20 3e 20 30 29 0d 0a 20 20 20 20  if (n > 0)..    
13a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13b0: 20 69 6e 74 20 72 3b 0d 0a 0d 0a 20 20 20 20 20   int r;....     
13c0: 20 20 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72       // An error
13d0: 20 6f 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d   occurred, attem
13e0: 70 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20  pt to reset the 
13f0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74  statement.  If t
1400: 68 65 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20  he reset worked 
1410: 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20  because the..   
1420: 20 20 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61         // schema
1430: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65   has changed, re
1440: 2d 74 72 79 20 74 68 65 20 73 74 65 70 20 61 67  -try the step ag
1450: 61 69 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f  ain.  If it erro
1460: 72 65 64 20 6f 75 72 20 62 65 63 61 75 73 65 20  red our because 
1470: 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20  the database..  
1480: 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f          // is lo
1490: 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20  cked, then keep 
14a0: 72 65 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74  retrying until t
14b0: 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f  he command timeo
14c0: 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20  ut occurs...    
14d0: 20 20 20 20 20 20 72 20 3d 20 52 65 73 65 74 28        r = Reset(
14e0: 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  stmt);....      
14f0: 20 20 20 20 69 66 20 28 72 20 3d 3d 20 30 29 0d      if (r == 0).
1500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
1510: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
1520: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
1530: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
1540: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
1550: 69 66 20 28 28 72 20 3d 3d 20 36 20 7c 7c 20 72  if ((r == 6 || r
1560: 20 3d 3d 20 35 29 20 26 26 20 73 74 6d 74 2e 5f   == 5) && stmt._
1570: 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29  command != null)
1580: 20 2f 2f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   // SQLITE_LOCKE
1590: 44 20 7c 7c 20 53 51 4c 49 54 45 5f 42 55 53 59  D || SQLITE_BUSY
15a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
15b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65             // Ke
15c0: 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20  ep trying..     
15d0: 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d         if (rnd =
15e0: 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74  = null) // First
15f0: 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f   time we've enco
1600: 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b  untered the lock
1610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1620: 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d  rnd = new Random
1630: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1640: 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65     // If we've e
1650: 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d  xceeded the comm
1660: 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67  and's timeout, g
1670: 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77  ive up and throw
1680: 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20   an error..     
1690: 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74         if ((uint
16a0: 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63  )Environment.Tic
16b0: 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69  kCount - startti
16c0: 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a 20  ck > timeout).. 
16d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
16f0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
1700: 70 74 69 6f 6e 28 72 2c 20 53 51 4c 69 74 65 4c  ption(r, SQLiteL
1710: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
1720: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1730: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
1740: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f              // O
1760: 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66  therwise sleep f
1770: 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75  or a random amou
1780: 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f  nt of time up to
1790: 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20   150ms..        
17a0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72        System.Thr
17b0: 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c  eading.Thread.Sl
17c0: 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20  eep(rnd.Next(1, 
17d0: 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  150));..        
17e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
17f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
1800: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1810: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1820: 65 72 72 69 64 65 20 69 6e 74 20 52 65 73 65 74  erride int Reset
1830: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
1840: 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20   stmt)..    {.. 
1850: 20 20 20 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23       int n;....#
1860: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
1870: 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ARD..      n = U
1880: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1890: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ds.sqlite3_reset
18a0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
18b0: 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65  qlite_stmt);..#e
18c0: 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  lse..      n = U
18d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
18e0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ds.sqlite3_reset
18f0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
1900: 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  mt);..#endif....
1910: 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20        // If the 
1920: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 64 2c 20  schema changed, 
1930: 74 72 79 20 61 6e 64 20 72 65 2d 70 72 65 70 61  try and re-prepa
1940: 72 65 20 69 74 0d 0a 20 20 20 20 20 20 69 66 20  re it..      if 
1950: 28 6e 20 3d 3d 20 31 37 29 20 2f 2f 20 53 51 4c  (n == 17) // SQL
1960: 49 54 45 5f 53 43 48 45 4d 41 0d 0a 20 20 20 20  ITE_SCHEMA..    
1970: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20    {..        // 
1980: 52 65 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79  Recreate a dummy
1990: 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20   statement..    
19a0: 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 3b 0d      string str;.
19b0: 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28  .        using (
19c0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
19d0: 74 6d 70 20 3d 20 50 72 65 70 61 72 65 28 6e 75  tmp = Prepare(nu
19e0: 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61  ll, stmt._sqlSta
19f0: 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75  tement, null, (u
1a00: 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61  int)(stmt._comma
1a10: 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f  nd._commandTimeo
1a20: 75 74 20 2a 20 31 30 30 30 29 2c 20 6f 75 74 20  ut * 1000), out 
1a30: 73 74 72 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  str))..        {
1a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46  ..          // F
1a50: 69 6e 61 6c 69 7a 65 20 74 68 65 20 65 78 69 73  inalize the exis
1a60: 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a  ting statement..
1a70: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f            stmt._
1a80: 73 71 6c 69 74 65 5f 73 74 6d 74 2e 44 69 73 70  sqlite_stmt.Disp
1a90: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
1aa0: 20 20 2f 2f 20 52 65 61 73 73 69 67 6e 20 61 20    // Reassign a 
1ab0: 6e 65 77 20 73 74 61 74 65 6d 65 6e 74 20 70 6f  new statement po
1ac0: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6f 6c 64  inter to the old
1ad0: 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 63   statement and c
1ae0: 6c 65 61 72 20 74 68 65 20 74 65 6d 70 6f 72 61  lear the tempora
1af0: 72 79 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20  ry one..        
1b00: 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73    stmt._sqlite_s
1b10: 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74  tmt = tmp._sqlit
1b20: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
1b30: 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73     tmp._sqlite_s
1b40: 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  tmt = null;.... 
1b50: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70           // Reap
1b60: 70 6c 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a  ply parameters..
1b70: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42            stmt.B
1b80: 69 6e 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b  indParameters();
1b90: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1ba0: 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 20       return -1; 
1bb0: 2f 2f 20 52 65 73 65 74 20 77 61 73 20 4f 4b 2c  // Reset was OK,
1bc0: 20 77 69 74 68 20 73 63 68 65 6d 61 20 63 68 61   with schema cha
1bd0: 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  nge..      }..  
1be0: 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
1bf0: 3d 20 36 20 7c 7c 20 6e 20 3d 3d 20 35 29 20 2f  = 6 || n == 5) /
1c00: 2f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  / SQLITE_LOCKED 
1c10: 7c 7c 20 53 51 4c 49 54 45 5f 42 55 53 59 0d 0a  || SQLITE_BUSY..
1c20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
1c30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
1c40: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 74   > 0)..        t
1c50: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
1c60: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
1c70: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
1c80: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
1c90: 30 3b 20 2f 2f 20 57 65 20 72 65 73 65 74 20 4f  0; // We reset O
1ca0: 4b 2c 20 6e 6f 20 73 63 68 65 6d 61 20 63 68 61  K, no schema cha
1cb0: 6e 67 65 73 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  nges..    }.... 
1cc0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
1cd0: 72 69 64 65 20 73 74 72 69 6e 67 20 53 51 4c 69  ride string SQLi
1ce0: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 0d 0a 20  teLastError().. 
1cf0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
1d00: 72 6e 20 53 51 4c 69 74 65 42 61 73 65 2e 53 51  rn SQLiteBase.SQ
1d10: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 5f 73  LiteLastError(_s
1d20: 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ql);..    }.... 
1d30: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
1d40: 72 69 64 65 20 53 51 4c 69 74 65 53 74 61 74 65  ride SQLiteState
1d50: 6d 65 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c  ment Prepare(SQL
1d60: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e  iteConnection cn
1d70: 6e 2c 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c  n, string strSql
1d80: 2c 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  , SQLiteStatemen
1d90: 74 20 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74  t previous, uint
1da0: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20   timeoutMS, out 
1db0: 73 74 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e  string strRemain
1dc0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1dd0: 49 6e 74 50 74 72 20 73 74 6d 74 20 3d 20 49 6e  IntPtr stmt = In
1de0: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
1df0: 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 49    IntPtr ptr = I
1e00: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
1e10: 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d     int len = 0;.
1e20: 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 31  .      int n = 1
1e30: 37 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 65  7;..      int re
1e40: 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20  tries = 0;..    
1e50: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
1e60: 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20  TF8(strSql);..  
1e70: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 64      string typed
1e80: 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  efs = null;..   
1e90: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
1ea0: 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a  nt cmd = null;..
1eb0: 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64        Random rnd
1ec0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
1ed0: 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d  uint starttick =
1ee0: 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65   (uint)Environme
1ef0: 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d  nt.TickCount;...
1f00: 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c 65 20  .      GCHandle 
1f10: 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c  handle = GCHandl
1f20: 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e  e.Alloc(b, GCHan
1f30: 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b  dleType.Pinned);
1f40: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
1f50: 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64  sql = handle.Add
1f60: 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28  rOfPinnedObject(
1f70: 29 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20  );..      try.. 
1f80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f90: 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20 31 37 20  while ((n == 17 
1fa0: 7c 7c 20 6e 20 3d 3d 20 36 20 7c 7c 20 6e 20 3d  || n == 6 || n =
1fb0: 3d 20 35 29 20 26 26 20 72 65 74 72 69 65 73 20  = 5) && retries 
1fc0: 3c 20 33 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  < 3)..        {.
1fd0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
1fe0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
1ff0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
2000: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2010: 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70  _prepare_interop
2020: 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c  (_sql, psql, b.L
2030: 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73  ength - 1, out s
2040: 74 6d 74 2c 20 6f 75 74 20 70 74 72 2c 20 6f 75  tmt, out ptr, ou
2050: 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  t len);..#else..
2060: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
2070: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2080: 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  s.sqlite3_prepar
2090: 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e  e(_sql, psql, b.
20a0: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20  Length - 1, out 
20b0: 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 29 3b 0d  stmt, out ptr);.
20c0: 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d  .          len =
20d0: 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a   -1;..#endif....
20e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
20f0: 3d 3d 20 31 37 29 0d 0a 20 20 20 20 20 20 20 20  == 17)..        
2100: 20 20 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a      retries++;..
2110: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
2120: 66 20 28 6e 20 3d 3d 20 31 29 0d 0a 20 20 20 20  f (n == 1)..    
2130: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2140: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
2150: 43 6f 6d 70 61 72 65 28 53 51 4c 69 74 65 4c 61  Compare(SQLiteLa
2160: 73 74 45 72 72 6f 72 28 29 2c 20 22 6e 65 61 72  stError(), "near
2170: 20 5c 22 54 59 50 45 53 5c 22 3a 20 73 79 6e 74   \"TYPES\": synt
2180: 61 78 20 65 72 72 6f 72 22 2c 20 53 74 72 69 6e  ax error", Strin
2190: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
21a0: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
21b0: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
21c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21d0: 20 20 20 69 6e 74 20 70 6f 73 20 3d 20 73 74 72     int pos = str
21e0: 53 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27 29  Sql.IndexOf(';')
21f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2200: 20 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29 20   if (pos == -1) 
2210: 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65 6e  pos = strSql.Len
2220: 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20  gth - 1;....    
2230: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 64 65            typede
2240: 66 73 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73  fs = strSql.Subs
2250: 74 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20 31  tring(0, pos + 1
2260: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2270: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
2280: 6c 2e 53 75 62 73 74 72 69 6e 67 28 70 6f 73 20  l.Substring(pos 
2290: 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  + 1);....       
22a0: 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e         strRemain
22b0: 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20 20 20 20   = "";....      
22c0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 63          while (c
22d0: 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74  md == null && st
22e0: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29  rSql.Length > 0)
22f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2300: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2310: 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65     cmd = Prepare
2320: 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72  (cnn, strSql, pr
2330: 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d  evious, timeoutM
2340: 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61 69 6e  S, out strRemain
2350: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2360: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
2370: 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20  Remain;..       
2380: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2390: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6d            if (cm
23a0: 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  d != null)..    
23b0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e              cmd.
23c0: 53 65 74 54 79 70 65 73 28 74 79 70 65 64 65 66  SetTypes(typedef
23d0: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  s);....         
23e0: 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b       return cmd;
23f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2400: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
2410: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
2420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
2430: 65 20 69 66 20 28 5f 62 75 69 6c 64 69 6e 67 53  e if (_buildingS
2440: 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65 20 26  chema == false &
2450: 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65  & String.Compare
2460: 28 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72  (SQLiteLastError
2470: 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68 20  (), 0, "no such 
2480: 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48 45  table: TEMP.SCHE
2490: 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72 69  MA", 0, 26, Stri
24a0: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
24b0: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
24c0: 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
24d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24e0: 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20      strRemain = 
24f0: 22 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "";..           
2500: 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65     _buildingSche
2510: 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ma = true;..    
2520: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
2530: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2550: 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74  ISQLiteSchemaExt
2560: 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20 28 28  ensions ext = ((
2570: 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65 72  IServiceProvider
2580: 29 53 51 4c 69 74 65 46 61 63 74 6f 72 79 2e 49  )SQLiteFactory.I
2590: 6e 73 74 61 6e 63 65 29 2e 47 65 74 53 65 72 76  nstance).GetServ
25a0: 69 63 65 28 74 79 70 65 6f 66 28 49 53 51 4c 69  ice(typeof(ISQLi
25b0: 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f  teSchemaExtensio
25c0: 6e 73 29 29 20 61 73 20 49 53 51 4c 69 74 65 53  ns)) as ISQLiteS
25d0: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 3b  chemaExtensions;
25e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25f0: 20 20 20 20 69 66 20 28 65 78 74 20 21 3d 20 6e      if (ext != n
2600: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2610: 20 20 20 20 20 20 20 20 65 78 74 2e 42 75 69 6c          ext.Buil
2620: 64 54 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e 29  dTempSchema(cnn)
2630: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2640: 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20       while (cmd 
2650: 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71  == null && strSq
2660: 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20  l.Length > 0).. 
2670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2690: 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72      cmd = Prepar
26a0: 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70  e(cnn, strSql, p
26b0: 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74  revious, timeout
26c0: 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61 69  MS, out strRemai
26d0: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
26e0: 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20         strSql = 
26f0: 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20  strRemain;..    
2700: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2720: 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20   return cmd;..  
2730: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2740: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e               fin
2750: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
2760: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2770: 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67         _building
2780: 53 63 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b 0d  Schema = false;.
2790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
27a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27b0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
27c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
27d0: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 36 20  else if (n == 6 
27e0: 7c 7c 20 6e 20 3d 3d 20 35 29 20 2f 2f 20 4c 6f  || n == 5) // Lo
27f0: 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61 20  cked -- delay a 
2800: 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65 66  small amount bef
2810: 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20 20  ore retrying..  
2820: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2830: 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74         // Keep t
2840: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
2850: 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75     if (rnd == nu
2860: 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d  ll) // First tim
2870: 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65  e we've encounte
2880: 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20  red the lock..  
2890: 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20              rnd 
28a0: 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d  = new Random();.
28b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
28c0: 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65  / If we've excee
28d0: 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27  ded the command'
28e0: 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20  s timeout, give 
28f0: 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20  up and throw an 
2900: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
2910: 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76     if ((uint)Env
2920: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
2930: 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e  nt - starttick >
2940: 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20   timeoutMS)..   
2950: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2960: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
2970: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
2980: 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73  ion(n, SQLiteLas
2990: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
29a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
29b0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
29c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68            // Oth
29e0: 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72  erwise sleep for
29f0: 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74   a random amount
2a00: 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31   of time up to 1
2a10: 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20  50ms..          
2a20: 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61      System.Threa
2a30: 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65  ding.Thread.Slee
2a40: 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35  p(rnd.Next(1, 15
2a50: 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  0));..          
2a60: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
2a70: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2a80: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30         if (n > 0
2a90: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
2aa0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53  teException(n, S
2ab0: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
2ac0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74  );....        st
2ad0: 72 52 65 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f  rRemain = UTF8To
2ae0: 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29  String(ptr, len)
2af0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
2b00: 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e  (stmt != IntPtr.
2b10: 5a 65 72 6f 29 20 63 6d 64 20 3d 20 6e 65 77 20  Zero) cmd = new 
2b20: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 28  SQLiteStatement(
2b30: 74 68 69 73 2c 20 73 74 6d 74 2c 20 73 74 72 53  this, stmt, strS
2b40: 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20  ql.Substring(0, 
2b50: 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20  strSql.Length - 
2b60: 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74 68  strRemain.Length
2b70: 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a 0d  ), previous);...
2b80: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2b90: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  cmd;..      }.. 
2ba0: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
2bb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 68      {..        h
2bc0: 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a 20  andle.Free();.. 
2bd0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2be0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
2bf0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
2c00: 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74  _Double(SQLiteSt
2c10: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
2c20: 74 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20  t index, double 
2c30: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  value)..    {..#
2c40: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
2c50: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
2c60: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73       int n = Uns
2c70: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2c80: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f  .sqlite3_bind_do
2c90: 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  uble(stmt._sqlit
2ca0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 76  e_stmt, index, v
2cb0: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
2cc0: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73       int n = Uns
2cd0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2ce0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f  .sqlite3_bind_do
2cf0: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  uble_interop(stm
2d00: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
2d10: 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
2d20: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
2d30: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
2d40: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
2d50: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
2d60: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
2d70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2d80: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
2d90: 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28 53 51  id Bind_Int32(SQ
2da0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2db0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69  mt, int index, i
2dc0: 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  nt value)..    {
2dd0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20  ..      int n = 
2de0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2df0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
2e00: 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  _int(stmt._sqlit
2e10: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 76  e_stmt, index, v
2e20: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 69 66  alue);..      if
2e30: 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e   (n > 0) throw n
2e40: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
2e50: 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74  on(n, SQLiteLast
2e60: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
2e70: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2e80: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
2e90: 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65  ind_Int64(SQLite
2ea0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
2eb0: 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20  int index, long 
2ec0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  value)..    {..#
2ed0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
2ee0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
2ef0: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73       int n = Uns
2f00: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2f10: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
2f20: 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  t64(stmt._sqlite
2f30: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 76 61  _stmt, index, va
2f40: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
2f50: 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61      int n = Unsa
2f60: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2f70: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
2f80: 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  64_interop(stmt.
2f90: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
2fa0: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
2fb0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2fc0: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
2fd0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2fe0: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
2ff0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
3000: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3010: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
3020: 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69 74   Bind_Text(SQLit
3030: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
3040: 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69   int index, stri
3050: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
3060: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
3070: 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29   = ToUTF8(value)
3080: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  ;..      int n =
3090: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
30a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
30b0: 64 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c  d_text(stmt._sql
30c0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
30d0: 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31   b, b.Length - 1
30e0: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
30f0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20  ..      if (n > 
3100: 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  0) throw new SQL
3110: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
3120: 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28  SQLiteLastError(
3130: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
3140: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3150: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61  ide void Bind_Da
3160: 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61  teTime(SQLiteSta
3170: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
3180: 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65   index, DateTime
3190: 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20   dt)..    {..   
31a0: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
31b0: 55 54 46 38 28 64 74 29 3b 0d 0a 20 20 20 20 20  UTF8(dt);..     
31c0: 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e   int n = UnsafeN
31d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
31e0: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 73  ite3_bind_text(s
31f0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
3200: 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65  , index, b, b.Le
3210: 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74  ngth - 1, (IntPt
3220: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  r)(-1));..      
3230: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
3240: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
3250: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
3260: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
3270: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3280: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
3290: 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74   Bind_Blob(SQLit
32a0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
32b0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65   int index, byte
32c0: 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d 0a 20 20  [] blobData)..  
32d0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
32e0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
32f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
3300: 69 6e 64 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f 73  ind_blob(stmt._s
3310: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
3320: 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62 6c 6f  x, blobData, blo
3330: 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20 28 49  bData.Length, (I
3340: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
3350: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74      if (n > 0) t
3360: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
3370: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
3380: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
3390: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
33a0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
33b0: 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53  void Bind_Null(S
33c0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
33d0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
33e0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
33f0: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
3400: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3410: 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 73 74 6d 74  3_bind_null(stmt
3420: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
3430: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 69 66  ndex);..      if
3440: 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e   (n > 0) throw n
3450: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
3460: 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74  on(n, SQLiteLast
3470: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
3480: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
3490: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42 69   override int Bi
34a0: 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28 53 51  nd_ParamCount(SQ
34b0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
34c0: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
34d0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
34e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
34f0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
3500: 74 65 72 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f  ter_count(stmt._
3510: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20  sqlite_stmt);.. 
3520: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3530: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
3540: 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e  ring Bind_ParamN
3550: 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
3560: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
3570: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
3580: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
3590: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
35a0: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
35b0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
35c0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
35d0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
35e0: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e 74  rameter_name_int
35f0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
3600: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
3610: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
3620: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
3630: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
3640: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
3650: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
3660: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
3670: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
3680: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  mt, index), -1);
3690: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
36a0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
36b0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e  override int Bin
36c0: 64 5f 50 61 72 61 6d 49 6e 64 65 78 28 53 51 4c  d_ParamIndex(SQL
36d0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
36e0: 74 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d 4e  t, string paramN
36f0: 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
3700: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
3710: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
3720: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
3730: 65 74 65 72 5f 69 6e 64 65 78 28 73 74 6d 74 2e  eter_index(stmt.
3740: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 54 6f  _sqlite_stmt, To
3750: 55 54 46 38 28 70 61 72 61 6d 4e 61 6d 65 29 29  UTF8(paramName))
3760: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
3770: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
3780: 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e  e int ColumnCoun
3790: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
37a0: 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a  t stmt)..    {..
37b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
37c0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
37d0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
37e0: 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69  count(stmt._sqli
37f0: 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d  te_stmt);..    }
3800: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
3810: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
3820: 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c 69   ColumnName(SQLi
3830: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
3840: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
3850: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
3860: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
3870: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
3880: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
3890: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
38a0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
38b0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74  _column_name_int
38c0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
38d0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
38e0: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
38f0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
3900: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
3910: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
3920: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
3930: 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  umn_name(stmt._s
3940: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
3950: 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
3960: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
3970: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
3980: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 43 6f   TypeAffinity Co
3990: 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51 4c  lumnAffinity(SQL
39a0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
39b0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
39c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
39d0: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
39e0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
39f0: 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e  olumn_type(stmt.
3a00: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
3a10: 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  dex);..    }....
3a20: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3a30: 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
3a40: 75 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53 74  umnType(SQLiteSt
3a50: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
3a60: 74 20 69 6e 64 65 78 2c 20 6f 75 74 20 54 79 70  t index, out Typ
3a70: 65 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69 6e  eAffinity nAffin
3a80: 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ity)..    {..   
3a90: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66     int len;..#if
3aa0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
3ab0: 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  D..      IntPtr 
3ac0: 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
3ad0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3ae0: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f  column_decltype_
3af0: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
3b00: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
3b10: 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c  , out len);..#el
3b20: 73 65 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20  se..      len = 
3b30: 2d 31 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  -1;..      IntPt
3b40: 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  r p = UnsafeNati
3b50: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3b60: 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
3b70: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
3b80: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
3b90: 6e 64 69 66 0d 0a 20 20 20 20 20 20 6e 41 66 66  ndif..      nAff
3ba0: 69 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66  inity = ColumnAf
3bb0: 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
3bc0: 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ex);....      if
3bd0: 20 28 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65   (p != IntPtr.Ze
3be0: 72 6f 29 20 72 65 74 75 72 6e 20 55 54 46 38 54  ro) return UTF8T
3bf0: 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b  oString(p, len);
3c00: 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
3c10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73      {..        s
3c20: 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d  tring[] ar = stm
3c30: 74 2e 54 79 70 65 44 65 66 69 6e 69 74 69 6f 6e  t.TypeDefinition
3c40: 73 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  s;..        if (
3c50: 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ar != null)..   
3c60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3c70: 20 20 69 66 20 28 69 6e 64 65 78 20 3c 20 61 72    if (index < ar
3c80: 2e 4c 65 6e 67 74 68 20 26 26 20 61 72 5b 69 6e  .Length && ar[in
3c90: 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  dex] != null).. 
3ca0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3cb0: 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  n ar[index];..  
3cc0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3cd0: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45   return String.E
3ce0: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
3cf0: 20 2f 2f 73 77 69 74 63 68 20 28 6e 41 66 66 69   //switch (nAffi
3d00: 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 2f  nity)..        /
3d10: 2f 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  /{..        //  
3d20: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
3d30: 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20  y.Int64:..      
3d40: 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22    //    return "
3d50: 42 49 47 49 4e 54 22 3b 0d 0a 20 20 20 20 20 20  BIGINT";..      
3d60: 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41    //  case TypeA
3d70: 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d  ffinity.Double:.
3d80: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72  .        //    r
3d90: 65 74 75 72 6e 20 22 44 4f 55 42 4c 45 22 3b 0d  eturn "DOUBLE";.
3da0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73  .        //  cas
3db0: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42  e TypeAffinity.B
3dc0: 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lob:..        //
3dd0: 20 20 20 20 72 65 74 75 72 6e 20 22 42 4c 4f 42      return "BLOB
3de0: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ";..        //  
3df0: 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20  default:..      
3e00: 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22    //    return "
3e10: 54 45 58 54 22 3b 0d 0a 20 20 20 20 20 20 20 20  TEXT";..        
3e20: 2f 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  //}..      }..  
3e30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
3e40: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
3e50: 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c   ColumnIndex(SQL
3e60: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
3e70: 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e  t, string column
3e80: 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Name)..    {..  
3e90: 20 20 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75      int x = Colu
3ea0: 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a  mnCount(stmt);..
3eb0: 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74  ..      for (int
3ec0: 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e   n = 0; n < x; n
3ed0: 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ++)..      {..  
3ee0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
3ef0: 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e  .Compare(columnN
3f00: 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28  ame, ColumnName(
3f10: 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67  stmt, n), String
3f20: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
3f30: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
3f40: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72   0)..          r
3f50: 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20  eturn n;..      
3f60: 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  }..      return 
3f70: 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  -1;..    }....  
3f80: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3f90: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
3fa0: 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51  nOriginalName(SQ
3fb0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
3fc0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
3fd0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
3fe0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
3ff0: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
4000: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
4010: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
4020: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
4030: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
4040: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
4050: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
4060: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
4070: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
4080: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
4090: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
40a0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
40b0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
40c0: 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  gin_name(stmt._s
40d0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
40e0: 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
40f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
4100: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
4110: 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 44 61   string ColumnDa
4120: 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c 69 74  tabaseName(SQLit
4130: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
4140: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
4150: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
4160: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
4170: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
4180: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
4190: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
41a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
41b0: 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
41c0: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  name_interop(stm
41d0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
41e0: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c  index, out len),
41f0: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
4200: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
4210: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
4220: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
4230: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61  ite3_column_data
4240: 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f  base_name(stmt._
4250: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
4260: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
4270: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
4280: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
4290: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54  e string ColumnT
42a0: 61 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74 65 53  ableName(SQLiteS
42b0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
42c0: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
42d0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
42e0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
42f0: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65  t len;..      re
4300: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
4310: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
4320: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
4330: 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f  lumn_table_name_
4340: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
4350: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
4360: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
4370: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
4380: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
4390: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
43a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
43b0: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
43c0: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
43d0: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
43e0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
43f0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
4400: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
4410: 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73 74  olumnMetaData(st
4420: 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20 73  ring dataBase, s
4430: 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74 72  tring table, str
4440: 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20  ing column, out 
4450: 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65 2c  string dataType,
4460: 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c   out string coll
4470: 61 74 65 53 65 71 75 65 6e 63 65 2c 20 6f 75 74  ateSequence, out
4480: 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 6f   bool notNull, o
4490: 75 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79 4b  ut bool primaryK
44a0: 65 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61 75 74  ey, out bool aut
44b0: 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20 20  oIncrement)..   
44c0: 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72   {..      IntPtr
44d0: 20 64 61 74 61 54 79 70 65 50 74 72 3b 0d 0a 20   dataTypePtr;.. 
44e0: 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c       IntPtr coll
44f0: 53 65 71 50 74 72 3b 0d 0a 20 20 20 20 20 20 69  SeqPtr;..      i
4500: 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 3b 0d 0a 20 20  nt nnotNull;..  
4510: 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72 79      int nprimary
4520: 4b 65 79 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  Key;..      int 
4530: 6e 61 75 74 6f 49 6e 63 3b 0d 0a 20 20 20 20 20  nautoInc;..     
4540: 20 69 6e 74 20 6e 3b 0d 0a 20 20 20 20 20 20 69   int n;..      i
4550: 6e 74 20 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20  nt dtLen;..     
4560: 20 69 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23   int csLen;....#
4570: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
4580: 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ARD..      n = U
4590: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
45a0: 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  ds.sqlite3_table
45b0: 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
45c0: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54  _interop(_sql, T
45d0: 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29 2c  oUTF8(dataBase),
45e0: 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20   ToUTF8(table), 
45f0: 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20  ToUTF8(column), 
4600: 6f 75 74 20 64 61 74 61 54 79 70 65 50 74 72 2c  out dataTypePtr,
4610: 20 6f 75 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c   out collSeqPtr,
4620: 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f   out nnotNull, o
4630: 75 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20  ut nprimaryKey, 
4640: 6f 75 74 20 6e 61 75 74 6f 49 6e 63 2c 20 6f 75  out nautoInc, ou
4650: 74 20 64 74 4c 65 6e 2c 20 6f 75 74 20 63 73 4c  t dtLen, out csL
4660: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
4670: 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a     dtLen = -1;..
4680: 20 20 20 20 20 20 63 73 4c 65 6e 20 3d 20 2d 31        csLen = -1
4690: 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ;....      n = U
46a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
46b0: 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  ds.sqlite3_table
46c0: 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
46d0: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61  (_sql, ToUTF8(da
46e0: 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28  taBase), ToUTF8(
46f0: 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63  table), ToUTF8(c
4700: 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61  olumn), out data
4710: 54 79 70 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c  TypePtr, out col
4720: 6c 53 65 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f  lSeqPtr, out nno
4730: 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d  tNull, out nprim
4740: 61 72 79 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74  aryKey, out naut
4750: 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  oInc);..#endif..
4760: 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29        if (n > 0)
4770: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
4780: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51  eException(n, SQ
4790: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
47a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61 74 61 54  ;....      dataT
47b0: 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ype = UTF8ToStri
47c0: 6e 67 28 64 61 74 61 54 79 70 65 50 74 72 2c 20  ng(dataTypePtr, 
47d0: 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 63  dtLen);..      c
47e0: 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 20 3d  ollateSequence =
47f0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f   UTF8ToString(co
4800: 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c 65 6e 29  llSeqPtr, csLen)
4810: 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f 74 4e 75  ;....      notNu
4820: 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d  ll = (nnotNull =
4830: 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 70 72 69  = 1);..      pri
4840: 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70 72 69 6d  maryKey = (nprim
4850: 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a 20  aryKey == 1);.. 
4860: 20 20 20 20 20 61 75 74 6f 49 6e 63 72 65 6d 65       autoIncreme
4870: 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e 63 20 3d  nt = (nautoInc =
4880: 3d 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  = 1);..    }....
4890: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
48a0: 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74  rride double Get
48b0: 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61  Double(SQLiteSta
48c0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
48d0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
48e0: 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c        double val
48f0: 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ue;..#if !PLATFO
4900: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
4910: 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65  ORK..      value
4920: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
4930: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
4940: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d  olumn_double(stm
4950: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
4960: 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 73 65 0d 0a  index);..#else..
4970: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
4980: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4990: 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f  3_column_double_
49a0: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
49b0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
49c0: 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23  , out value);..#
49d0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74  endif..      ret
49e0: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
49f0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
4a00: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  l override int G
4a10: 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  etInt32(SQLiteSt
4a20: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
4a30: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
4a40: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
4a50: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4a60: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
4a70: 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  _int(stmt._sqlit
4a80: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
4a90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
4aa0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
4ab0: 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 53 51  long GetInt64(SQ
4ac0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
4ad0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
4ae0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c 6f 6e      {..      lon
4af0: 67 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  g value;..#if !P
4b00: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
4b10: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
4b20: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
4b30: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4b40: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  te3_column_int64
4b50: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
4b60: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c  mt, index);..#el
4b70: 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  se..      Unsafe
4b80: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4b90: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
4ba0: 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  64_interop(stmt.
4bb0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
4bc0: 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b  dex, out value);
4bd0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
4be0: 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20  return value;.. 
4bf0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4c00: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
4c10: 72 69 6e 67 20 47 65 74 54 65 78 74 28 53 51 4c  ring GetText(SQL
4c20: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
4c30: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
4c40: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
4c50: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
4c60: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
4c70: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
4c80: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
4c90: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4ca0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e  3_column_text_in
4cb0: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
4cc0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
4cd0: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
4ce0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
4cf0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
4d00: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
4d10: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
4d20: 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f  lumn_text(stmt._
4d30: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
4d40: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
4d50: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
4d60: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
4d70: 65 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61  e DateTime GetDa
4d80: 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61  teTime(SQLiteSta
4d90: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
4da0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
4db0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
4dc0: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
4dd0: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  len;..      retu
4de0: 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e  rn ToDateTime(Un
4df0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4e00: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
4e10: 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74  _text_interop(st
4e20: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
4e30: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
4e40: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
4e50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
4e60: 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61  ateTime(UnsafeNa
4e70: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4e80: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
4e90: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
4ea0: 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  t, index), -1);.
4eb0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
4ec0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4ed0: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
4ee0: 42 79 74 65 73 28 53 51 4c 69 74 65 53 74 61 74  Bytes(SQLiteStat
4ef0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
4f00: 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61  index, int nData
4f10: 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62  Offset, byte[] b
4f20: 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74  Dest, int nStart
4f30: 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a  , int nLength)..
4f40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
4f50: 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61   nlen = UnsafeNa
4f60: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4f70: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
4f80: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
4f90: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
4fa0: 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65       // If no de
4fb0: 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72  stination buffer
4fc0: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a  , return the siz
4fd0: 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20  e needed...     
4fe0: 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75   if (bDest == nu
4ff0: 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b  ll) return nlen;
5000: 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43  ....      int nC
5010: 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b  opied = nLength;
5020: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
5030: 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e  opied + nStart >
5040: 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e   bDest.Length) n
5050: 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c  Copied = bDest.L
5060: 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d  ength - nStart;.
5070: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
5080: 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74  ed + nDataOffset
5090: 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64   > nlen) nCopied
50a0: 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f   = nlen - nDataO
50b0: 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ffset;....      
50c0: 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29  if (nCopied > 0)
50d0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
50e0: 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20     IntPtr ptr = 
50f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5100: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
5110: 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71  mn_blob(stmt._sq
5120: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
5130: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61  );....        Ma
5140: 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50  rshal.Copy((IntP
5150: 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28  tr)(ptr.ToInt64(
5160: 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29  ) + nDataOffset)
5170: 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c  , bDest, nStart,
5180: 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20   nCopied);..    
5190: 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d    }..      else.
51a0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
51b0: 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a    nCopied = 0;..
51c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
51d0: 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b   return nCopied;
51e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
51f0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
5200: 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53   long GetChars(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 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
5230: 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
5240: 20 63 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69   char[] bDest, i
5250: 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
5260: 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  Length)..    {..
5270: 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d        int nlen;.
5280: 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
5290: 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
52a0: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74  .      string st
52b0: 72 20 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74  r = GetText(stmt
52c0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
52d0: 20 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67   nlen = str.Leng
52e0: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
52f0: 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20  (bDest == null) 
5300: 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a  return nlen;....
5310: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
5320: 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65  d + nStart > bDe
5330: 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69  st.Length) nCopi
5340: 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74  ed = bDest.Lengt
5350: 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20  h - nStart;..   
5360: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
5370: 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e   nDataOffset > n
5380: 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e  len) nCopied = n
5390: 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65  len - nDataOffse
53a0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
53b0: 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20  nCopied > 0)..  
53c0: 20 20 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f        str.CopyTo
53d0: 28 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44  (nDataOffset, bD
53e0: 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f  est, nStart, nCo
53f0: 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  pied);..      el
5400: 73 65 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d  se nCopied = 0;.
5410: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
5420: 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d  nCopied;..    }.
5430: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
5440: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
5450: 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65  Null(SQLiteState
5460: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
5470: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
5480: 20 20 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75      return (Colu
5490: 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c  mnAffinity(stmt,
54a0: 20 69 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41   index) == TypeA
54b0: 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a  ffinity.Null);..
54c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
54d0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
54e0: 6e 74 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e  nt AggregateCoun
54f0: 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  t(IntPtr context
5500: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5510: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
5520: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5530: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75  e3_aggregate_cou
5540: 6e 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  nt(context);..  
5550: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
5560: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
5570: 64 20 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e  d CreateFunction
5580: 28 73 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74  (string strFunct
5590: 69 6f 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20  ion, int nArgs, 
55a0: 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71  bool needCollSeq
55b0: 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b  , SQLiteCallback
55c0: 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c   func, SQLiteCal
55d0: 6c 62 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20  lback funcstep, 
55e0: 53 51 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62  SQLiteFinalCallb
55f0: 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c 29 0d 0a  ack funcfinal)..
5600: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
5610: 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49   n;....#if !SQLI
5620: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
5630: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
5640: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5650: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
5660: 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  on_interop(_sql,
5670: 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74   ToUTF8(strFunct
5680: 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20  ion), nArgs, 4, 
5690: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
56a0: 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e  c, funcstep, fun
56b0: 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c  cfinal, (needCol
56c0: 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20  lSeq == true) ? 
56d0: 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20 69  1 : 0);..      i
56e0: 66 20 28 6e 20 3d 3d 20 30 29 20 6e 20 3d 20 55  f (n == 0) n = U
56f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
5700: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
5710: 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72  e_function_inter
5720: 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
5730: 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
5740: 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 1, IntPtr.Z
5750: 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
5760: 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20  tep, funcfinal, 
5770: 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20  (needCollSeq == 
5780: 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d  true) ? 1 : 0);.
5790: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20  .#else..      n 
57a0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
57b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
57c0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73  eate_function(_s
57d0: 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75  ql, ToUTF8(strFu
57e0: 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20  nction), nArgs, 
57f0: 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  4, IntPtr.Zero, 
5800: 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20  func, funcstep, 
5810: 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20  funcfinal);..   
5820: 20 20 20 69 66 20 28 6e 20 3d 3d 20 30 29 20 6e     if (n == 0) n
5830: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
5840: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
5850: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f  reate_function(_
5860: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
5870: 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
5880: 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
5890: 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
58a0: 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23 65   funcfinal);..#e
58b0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28  ndif..      if (
58c0: 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77  n > 0) throw new
58d0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
58e0: 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72  (n, SQLiteLastEr
58f0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
5900: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
5910: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 72 65  verride void Cre
5920: 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72  ateCollation(str
5930: 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e  ing strCollation
5940: 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f  , SQLiteCollatio
5950: 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f  n func, SQLiteCo
5960: 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 29 0d  llation func16).
5970: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
5980: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
5990: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
59a0: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
59b0: 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  on(_sql, ToUTF8(
59c0: 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32  strCollation), 2
59d0: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
59e0: 75 6e 63 31 36 29 3b 0d 0a 20 20 20 20 20 20 69  unc16);..      i
59f0: 66 20 28 6e 20 3d 3d 20 30 29 20 6e 20 3d 20 55  f (n == 0) n = U
5a00: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
5a10: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
5a20: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c  e_collation(_sql
5a30: 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c  , ToUTF8(strColl
5a40: 61 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74  ation), 1, IntPt
5a50: 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a  r.Zero, func);..
5a60: 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29        if (n > 0)
5a70: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
5a80: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51  eException(n, SQ
5a90: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
5aa0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5ab0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
5ac0: 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c  e int ContextCol
5ad0: 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c  lateCompare(Coll
5ae0: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
5af0: 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f  m enc, IntPtr co
5b00: 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31  ntext, string s1
5b10: 2c 20 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20  , string s2)..  
5b20: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
5b30: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
5b40: 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20   byte[] b1;..   
5b50: 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20     byte[] b2;.. 
5b60: 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74       System.Text
5b70: 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72  .Encoding conver
5b80: 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ter = null;.... 
5b90: 20 20 20 20 20 73 77 69 74 63 68 20 28 65 6e 63       switch (enc
5ba0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
5bb0: 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
5bc0: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
5bd0: 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8:..          
5be0: 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
5bf0: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
5c00: 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20  .UTF8;..        
5c10: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
5c20: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
5c30: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
5c40: 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20  16LE:..         
5c50: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
5c60: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
5c70: 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20  g.Unicode;..    
5c80: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
5c90: 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61        case Colla
5ca0: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
5cb0: 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20  .UTF16BE:..     
5cc0: 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
5cd0: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
5ce0: 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55  oding.BigEndianU
5cf0: 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
5d00: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
5d10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d   }....      b1 =
5d20: 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79   converter.GetBy
5d30: 74 65 73 28 73 31 29 3b 0d 0a 20 20 20 20 20 20  tes(s1);..      
5d40: 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47  b2 = converter.G
5d50: 65 74 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a  etBytes(s2);....
5d60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
5d70: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5d80: 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  .sqlite3_context
5d90: 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 28 63 6f 6e  _collcompare(con
5da0: 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e  text, b1, b1.Len
5db0: 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67  gth, b2, b2.Leng
5dc0: 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  th);..#else..   
5dd0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
5de0: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
5df0: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
5e00: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5e10: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5e20: 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61  int ContextColla
5e30: 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74  teCompare(Collat
5e40: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20  ionEncodingEnum 
5e50: 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  enc, IntPtr cont
5e60: 65 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20  ext, char[] c1, 
5e70: 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20  char[] c2)..    
5e80: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
5e90: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62  TANDARD..      b
5ea0: 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20  yte[] b1;..     
5eb0: 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20   byte[] b2;..   
5ec0: 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45     System.Text.E
5ed0: 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65  ncoding converte
5ee0: 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
5ef0: 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d     switch (enc).
5f00: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
5f10: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
5f20: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
5f30: 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  8:..          co
5f40: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
5f50: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
5f60: 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8;..          
5f70: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
5f80: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
5f90: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
5fa0: 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  LE:..          c
5fb0: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
5fc0: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
5fd0: 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
5fe0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
5ff0: 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
6000: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
6010: 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20  TF16BE:..       
6020: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
6030: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
6040: 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69  ing.BigEndianUni
6050: 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
6060: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d   break;..      }
6070: 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63  ....      b1 = c
6080: 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
6090: 73 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32  s(c1);..      b2
60a0: 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74   = converter.Get
60b0: 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20  Bytes(c2);....  
60c0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
60d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
60e0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
60f0: 6f 6c 6c 63 6f 6d 70 61 72 65 28 63 6f 6e 74 65  ollcompare(conte
6100: 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74  xt, b1, b1.Lengt
6110: 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68  h, b2, b2.Length
6120: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
6130: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
6140: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
6150: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
6160: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
6170: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 43 6f  rnal override Co
6180: 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
6190: 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  GetCollationSequ
61a0: 65 6e 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74  ence(SQLiteFunct
61b0: 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ion func, IntPtr
61c0: 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
61d0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
61e0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 43 6f  ANDARD..      Co
61f0: 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
6200: 73 65 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74  seq = new Collat
6210: 69 6f 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a  ionSequence();..
6220: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
6230: 20 20 20 20 20 20 69 6e 74 20 74 79 70 65 3b 0d        int type;.
6240: 0a 20 20 20 20 20 20 69 6e 74 20 65 6e 63 3b 0d  .      int enc;.
6250: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20  .      IntPtr p 
6260: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6270: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
6280: 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71 28 63 6f  ntext_collseq(co
6290: 6e 74 65 78 74 2c 20 6f 75 74 20 74 79 70 65 2c  ntext, out type,
62a0: 20 6f 75 74 20 65 6e 63 2c 20 6f 75 74 20 6c 65   out enc, out le
62b0: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  n);....      if 
62c0: 28 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e  (p != null) seq.
62d0: 4e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72  Name = UTF8ToStr
62e0: 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20  ing(p, len);..  
62f0: 20 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20 28      seq.Type = (
6300: 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75  CollationTypeEnu
6310: 6d 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 73  m)type;..      s
6320: 65 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b  eq._func = func;
6330: 0d 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f  ..      seq.Enco
6340: 64 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f  ding = (Collatio
6350: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e  nEncodingEnum)en
6360: 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  c;....      retu
6370: 72 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a  rn seq;..#else..
6380: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
6390: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
63a0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
63b0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
63c0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
63d0: 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d  de long GetParam
63e0: 56 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74  ValueBytes(IntPt
63f0: 72 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  r p, int nDataOf
6400: 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65  fset, byte[] bDe
6410: 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
6420: 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20  int nLength)..  
6430: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
6440: 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  len = UnsafeNati
6450: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6460: 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 29  3_value_bytes(p)
6470: 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66  ;....      // If
6480: 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20   no destination 
6490: 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74  buffer, return t
64a0: 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d  he size needed..
64b0: 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74  .      if (bDest
64c0: 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
64d0: 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20   nlen;....      
64e0: 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c  int nCopied = nL
64f0: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
6500: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53  if (nCopied + nS
6510: 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e  tart > bDest.Len
6520: 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62  gth) nCopied = b
6530: 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53  Dest.Length - nS
6540: 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20  tart;..      if 
6550: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61  (nCopied + nData
6560: 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e  Offset > nlen) n
6570: 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20  Copied = nlen - 
6580: 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a  nDataOffset;....
6590: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
65a0: 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d  d > 0)..      {.
65b0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
65c0: 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ptr = UnsafeNati
65d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
65e0: 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b  3_value_blob(p);
65f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73  ....        Mars
6600: 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72  hal.Copy((IntPtr
6610: 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20  )(ptr.ToInt64() 
6620: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20  + nDataOffset), 
6630: 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e  bDest, nStart, n
6640: 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20  Copied);..      
6650: 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  }..      else.. 
6660: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6670: 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20  nCopied = 0;..  
6680: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
6690: 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a  eturn nCopied;..
66a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
66b0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64  ernal override d
66c0: 6f 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61  ouble GetParamVa
66d0: 6c 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72  lueDouble(IntPtr
66e0: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   ptr)..    {..  
66f0: 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65      double value
6700: 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ;..#if !PLATFORM
6710: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
6720: 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d  K..      value =
6730: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6740: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
6750: 75 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d  ue_double(ptr);.
6760: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e  .#else..      Un
6770: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6780: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
6790: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70  double_interop(p
67a0: 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d  tr, out value);.
67b0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72  .#endif..      r
67c0: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
67d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
67e0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
67f0: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e   GetParamValueIn
6800: 74 33 32 28 49 6e 74 50 74 72 20 70 74 72 29 0d  t32(IntPtr ptr).
6810: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
6820: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
6830: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6840: 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b  _value_int(ptr);
6850: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
6860: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
6870: 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61   long GetParamVa
6880: 6c 75 65 49 6e 74 36 34 28 49 6e 74 50 74 72 20  lueInt64(IntPtr 
6890: 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
68a0: 20 20 20 49 6e 74 36 34 20 76 61 6c 75 65 3b 0d     Int64 value;.
68b0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
68c0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
68d0: 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
68e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
68f0: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
6900: 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23 65  _int64(ptr);..#e
6910: 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  lse..      Unsaf
6920: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6930: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
6940: 36 34 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20  64_interop(ptr, 
6950: 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  out value);..#en
6960: 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72  dif..      retur
6970: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
6980: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
6990: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
69a0: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65 78  GetParamValueTex
69b0: 74 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  t(IntPtr ptr).. 
69c0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
69d0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
69e0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
69f0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
6a00: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
6a10: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6a20: 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74  3_value_text_int
6a30: 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 6c 65  erop(ptr, out le
6a40: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
6a50: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
6a60: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
6a70: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6a80: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
6a90: 78 74 28 70 74 72 29 2c 20 2d 31 29 3b 0d 0a 23  xt(ptr), -1);..#
6aa0: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
6ab0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
6ac0: 72 72 69 64 65 20 54 79 70 65 41 66 66 69 6e 69  rride TypeAffini
6ad0: 74 79 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  ty GetParamValue
6ae0: 54 79 70 65 28 49 6e 74 50 74 72 20 70 74 72 29  Type(IntPtr ptr)
6af0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
6b00: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
6b10: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6b20: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 74 72  3_value_type(ptr
6b30: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6b40: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
6b50: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 42 6c  de void ReturnBl
6b60: 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  ob(IntPtr contex
6b70: 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29  t, byte[] value)
6b80: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
6b90: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6ba0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
6bb0: 74 5f 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20  t_blob(context, 
6bc0: 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e  value, value.Len
6bd0: 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  gth, (IntPtr)(-1
6be0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
6bf0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
6c00: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 44  ide void ReturnD
6c10: 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e  ouble(IntPtr con
6c20: 74 65 78 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c  text, double val
6c30: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ue)..    {..#if 
6c40: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
6c50: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
6c60: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
6c70: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
6c80: 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74  sult_double(cont
6c90: 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  ext, value);..#e
6ca0: 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  lse..      Unsaf
6cb0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6cc0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
6cd0: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  uble_interop(con
6ce0: 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29  text, ref value)
6cf0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
6d00: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
6d10: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
6d20: 65 74 75 72 6e 45 72 72 6f 72 28 49 6e 74 50 74  eturnError(IntPt
6d30: 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e  r context, strin
6d40: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
6d50: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
6d60: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
6d70: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
6d80: 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28  context, ToUTF8(
6d90: 76 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65  value), value.Le
6da0: 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ngth);..    }...
6db0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6dc0: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
6dd0: 72 6e 49 6e 74 33 32 28 49 6e 74 50 74 72 20 63  rnInt32(IntPtr c
6de0: 6f 6e 74 65 78 74 2c 20 69 6e 74 20 76 61 6c 75  ontext, int valu
6df0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
6e00: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6e10: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
6e20: 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c  ult_int(context,
6e30: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d   value);..    }.
6e40: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
6e50: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
6e60: 74 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72  turnInt64(IntPtr
6e70: 20 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76   context, long v
6e80: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  alue)..    {..#i
6e90: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
6ea0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
6eb0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
6ec0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6ed0: 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e  result_int64(con
6ee0: 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  text, value);..#
6ef0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61  else..      Unsa
6f00: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6f10: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
6f20: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  nt64_interop(con
6f30: 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29  text, ref value)
6f40: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
6f50: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
6f60: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
6f70: 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72  eturnNull(IntPtr
6f80: 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
6f90: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
6fa0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6fb0: 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28  te3_result_null(
6fc0: 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d  context);..    }
6fd0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
6fe0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
6ff0: 65 74 75 72 6e 54 65 78 74 28 49 6e 74 50 74 72  eturnText(IntPtr
7000: 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67   context, string
7010: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
7020: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d        byte[] b =
7030: 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d   ToUTF8(value);.
7040: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
7050: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7060: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63  e3_result_text(c
7070: 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76  ontext, ToUTF8(v
7080: 61 6c 75 65 29 2c 20 62 2e 4c 65 6e 67 74 68 20  alue), b.Length 
7090: 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  - 1, (IntPtr)(-1
70a0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
70b0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
70c0: 69 64 65 20 49 6e 74 50 74 72 20 41 67 67 72 65  ide IntPtr Aggre
70d0: 67 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50  gateContext(IntP
70e0: 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20  tr context)..   
70f0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
7100: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7110: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67  hods.sqlite3_agg
7120: 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63  regate_context(c
7130: 6f 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20  ontext, 1);..   
7140: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e   }....    /// En
7150: 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65  ables or disable
7160: 64 20 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c  d extended resul
7170: 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65 64  t codes returned
7180: 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20 20   by SQLite..    
7190: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
71a0: 65 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e 64  e void SetExtend
71b0: 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62 6f  edResultCodes(bo
71c0: 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20  ol bOnOff)..    
71d0: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
71e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
71f0: 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65  ite3_extended_re
7200: 73 75 6c 74 5f 63 6f 64 65 73 28 5f 73 71 6c 2c  sult_codes(_sql,
7210: 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20   (bOnOff ? -1 : 
7220: 30 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  0));..    }..   
7230: 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61   /// Gets the la
7240: 73 74 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20  st SQLite error 
7250: 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e  code..    intern
7260: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
7270: 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20  ResultCode()..  
7280: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
7290: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
72a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 72  thods.sqlite3_er
72b0: 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20  rcode(_sql);..  
72c0: 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74    }..    /// Get
72d0: 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74  s the last SQLit
72e0: 65 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72  e extended error
72f0: 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72   code..    inter
7300: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
7310: 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43   ExtendedResultC
7320: 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ode()..    {..  
7330: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
7340: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7350: 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
7360: 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a  errcode(_sql);..
7370: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
7380: 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61   Add a log messa
7390: 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69 74  ge via the SQLit
73a0: 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e  e sqlite3_log in
73b0: 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e  terface...    in
73c0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
73d0: 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65 28  void LogMessage(
73e0: 69 6e 74 20 69 45 72 72 43 6f 64 65 2c 20 73 74  int iErrCode, st
73f0: 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a  ring zMessage)..
7400: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
7410: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7420: 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72  .sqlite3_log(iEr
7430: 72 43 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d  rCode, ToUTF8(zM
7440: 65 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d  essage));..    }
7450: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
7460: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
7470: 65 74 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b  etPassword(byte[
7480: 5d 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 29  ] passwordBytes)
7490: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
74a0: 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nt n = UnsafeNat
74b0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
74c0: 65 33 5f 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73  e3_key(_sql, pas
74d0: 73 77 6f 72 64 42 79 74 65 73 2c 20 70 61 73 73  swordBytes, pass
74e0: 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68  wordBytes.Length
74f0: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
7500: 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  > 0) throw new S
7510: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
7520: 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  , SQLiteLastErro
7530: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
7540: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
7550: 72 72 69 64 65 20 76 6f 69 64 20 43 68 61 6e 67  rride void Chang
7560: 65 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d  ePassword(byte[]
7570: 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65   newPasswordByte
7580: 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
7590: 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e   int n = UnsafeN
75a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
75b0: 69 74 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c  ite3_rekey(_sql,
75c0: 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65   newPasswordByte
75d0: 73 2c 20 28 6e 65 77 50 61 73 73 77 6f 72 64 42  s, (newPasswordB
75e0: 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20  ytes == null) ? 
75f0: 30 20 3a 20 6e 65 77 50 61 73 73 77 6f 72 64 42  0 : newPasswordB
7600: 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20  ytes.Length);.. 
7610: 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20       if (n > 0) 
7620: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
7630: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c  Exception(n, SQL
7640: 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  iteLastError());
7650: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
7660: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
7670: 20 76 6f 69 64 20 53 65 74 55 70 64 61 74 65 48   void SetUpdateH
7680: 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61 74 65  ook(SQLiteUpdate
7690: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
76a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
76b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
76c0: 2e 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f  .sqlite3_update_
76d0: 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  hook(_sql, func,
76e0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
76f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
7700: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
7710: 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f  oid SetCommitHoo
7720: 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61  k(SQLiteCommitCa
7730: 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
7740: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
7750: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7760: 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f  qlite3_commit_ho
7770: 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ok(_sql, func, I
7780: 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
7790: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
77a0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
77b0: 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61  d SetTraceCallba
77c0: 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65 43 61  ck(SQLiteTraceCa
77d0: 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
77e0: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
77f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7800: 71 6c 69 74 65 33 5f 74 72 61 63 65 28 5f 73 71  qlite3_trace(_sq
7810: 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
7820: 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
7830: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
7840: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 52  erride void SetR
7850: 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69  ollbackHook(SQLi
7860: 74 65 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  teRollbackCallba
7870: 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
7880: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
7890: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
78a0: 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b  e3_rollback_hook
78b0: 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
78c0: 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
78d0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
78e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
78f0: 41 6c 6c 6f 77 73 20 74 68 65 20 73 65 74 74 69  Allows the setti
7900: 6e 67 20 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20  ng of a logging 
7910: 63 61 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64  callback invoked
7920: 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 20   by SQLite when 
7930: 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65  a..    /// log e
7940: 76 65 6e 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e  vent occurs.  On
7950: 6c 79 20 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20  ly one callback 
7960: 6d 61 79 20 62 65 20 73 65 74 2e 20 20 49 66 20  may be set.  If 
7970: 4e 55 4c 4c 20 69 73 20 70 61 73 73 65 64 2c 0d  NULL is passed,.
7980: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67  .    /// the log
7990: 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 73  ging callback is
79a0: 20 75 6e 72 65 67 69 73 74 65 72 65 64 2e 0d 0a   unregistered...
79b0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
79c0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
79d0: 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54  am name="func">T
79e0: 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  he callback func
79f0: 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c  tion to invoke.<
7a00: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
7a10: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
7a20: 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c  s a result code<
7a30: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
7a40: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
7a50: 20 69 6e 74 20 53 65 74 4c 6f 67 43 61 6c 6c 62   int SetLogCallb
7a60: 61 63 6b 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c  ack(SQLiteLogCal
7a70: 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
7a80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20   {..        int 
7a90: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
7aa0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7ab0: 5f 63 6f 6e 66 69 67 28 28 69 6e 74 29 53 51 4c  _config((int)SQL
7ac0: 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d  iteConfigOpsEnum
7ad0: 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c  .SQLITE_CONFIG_L
7ae0: 4f 47 2c 20 66 75 6e 63 2c 20 28 49 6e 74 50 74  OG, func, (IntPt
7af0: 72 29 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  r)0);..        r
7b00: 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d  eturn rc;..    }
7b10: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
7b20: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48  mary>..    /// H
7b30: 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74  elper function t
7b40: 6f 20 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c  o retrieve a col
7b50: 75 6d 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d  umn of data from
7b60: 20 61 6e 20 61 63 74 69 76 65 20 73 74 61 74 65   an active state
7b70: 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ment...    /// <
7b80: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
7b90: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
7ba0: 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d  stmt">The statem
7bb0: 65 6e 74 20 62 65 69 6e 67 20 73 74 65 70 28 29  ent being step()
7bc0: 27 64 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61  'd through</para
7bd0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
7be0: 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e  am name="index">
7bf0: 54 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  The column index
7c00: 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
7c10: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
7c20: 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e  aram name="typ">
7c30: 54 68 65 20 74 79 70 65 20 6f 66 20 64 61 74 61  The type of data
7c40: 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
7c50: 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e  e column.  If Un
7c60: 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 69  initialized, thi
7c70: 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20  s function will 
7c80: 72 65 74 72 69 65 76 65 20 74 68 65 20 64 61 74  retrieve the dat
7c90: 61 74 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f  atype informatio
7ca0: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
7cb0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
7cc0: 75 72 6e 73 20 74 68 65 20 64 61 74 61 20 69 6e  urns the data in
7cd0: 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74   the column</ret
7ce0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
7cf0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a  nal override obj
7d00: 65 63 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c  ect GetValue(SQL
7d10: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
7d20: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 53 51  t, int index, SQ
7d30: 4c 69 74 65 54 79 70 65 20 74 79 70 29 0d 0a 20  LiteType typ).. 
7d40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
7d50: 49 73 4e 75 6c 6c 28 73 74 6d 74 2c 20 69 6e 64  IsNull(stmt, ind
7d60: 65 78 29 29 20 72 65 74 75 72 6e 20 44 42 4e 75  ex)) return DBNu
7d70: 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ll.Value;..     
7d80: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66   TypeAffinity af
7d90: 66 20 3d 20 74 79 70 2e 41 66 66 69 6e 69 74 79  f = typ.Affinity
7da0: 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 20 74 20  ;..      Type t 
7db0: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
7dc0: 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 21 3d   if (typ.Type !=
7dd0: 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d   DbType.Object).
7de0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
7df0: 20 20 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76    t = SQLiteConv
7e00: 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f  ert.SQLiteTypeTo
7e10: 54 79 70 65 28 74 79 70 29 3b 0d 0a 20 20 20 20  Type(typ);..    
7e20: 20 20 20 20 61 66 66 20 3d 20 54 79 70 65 54 6f      aff = TypeTo
7e30: 41 66 66 69 6e 69 74 79 28 74 29 3b 0d 0a 20 20  Affinity(t);..  
7e40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73      }....      s
7e50: 77 69 74 63 68 20 28 61 66 66 29 0d 0a 20 20 20  witch (aff)..   
7e60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61     {..        ca
7e70: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
7e80: 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20  Blob:..         
7e90: 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d   if (typ.Type ==
7ea0: 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20   DbType.Guid && 
7eb0: 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20  typ.Affinity == 
7ec0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78  TypeAffinity.Tex
7ed0: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
7ee0: 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28  return new Guid(
7ef0: 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
7f00: 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dex));....      
7f10: 20 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74      int n = (int
7f20: 29 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20  )GetBytes(stmt, 
7f30: 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20  index, 0, null, 
7f40: 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20 20  0, 0);..        
7f50: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e 65 77    byte[] b = new
7f60: 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20   byte[n];..     
7f70: 20 20 20 20 20 47 65 74 42 79 74 65 73 28 73 74       GetBytes(st
7f80: 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62 2c  mt, index, 0, b,
7f90: 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20   0, n);....     
7fa0: 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70       if (typ.Typ
7fb0: 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64  e == DbType.Guid
7fc0: 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a 20 20   && n == 16)..  
7fd0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7fe0: 20 6e 65 77 20 47 75 69 64 28 62 29 3b 0d 0a 0d   new Guid(b);...
7ff0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
8000: 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  n b;..        ca
8010: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
8020: 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20 20 20  DateTime:..     
8030: 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 44       return GetD
8040: 61 74 65 54 69 6d 65 28 73 74 6d 74 2c 20 69 6e  ateTime(stmt, in
8050: 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 63  dex);..        c
8060: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
8070: 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20  .Double:..      
8080: 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c      if (t == nul
8090: 6c 29 20 72 65 74 75 72 6e 20 47 65 74 44 6f 75  l) return GetDou
80a0: 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ble(stmt, index)
80b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  ;..          els
80c0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  e..            r
80d0: 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68  eturn Convert.Ch
80e0: 61 6e 67 65 54 79 70 65 28 47 65 74 44 6f 75 62  angeType(GetDoub
80f0: 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  le(stmt, index),
8100: 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20   t, null);..    
8110: 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
8120: 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20  inity.Int64:..  
8130: 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
8140: 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65   null) return Ge
8150: 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
8160: 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
8170: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
8180: 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
8190: 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 49  .ChangeType(GetI
81a0: 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
81b0: 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  ), t, null);..  
81c0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a        default:..
81d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
81e0: 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69   GetText(stmt, i
81f0: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ndex);..      }.
8200: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
8210: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
8220: 69 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72  int GetCursorFor
8230: 54 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74  Table(SQLiteStat
8240: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
8250: 64 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65  db, int rootPage
8260: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
8270: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
8280: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
8290: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
82a0: 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63  .sqlite3_table_c
82b0: 75 72 73 6f 72 28 73 74 6d 74 2e 5f 73 71 6c 69  ursor(stmt._sqli
82c0: 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f 6f  te_stmt, db, roo
82d0: 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  tPage);..#else..
82e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b        return -1;
82f0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
8300: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8310: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
8320: 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f 72 28  tRowIdForCursor(
8330: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
8340: 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f 72  stmt, int cursor
8350: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
8360: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
8370: 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69 64        long rowid
8380: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 63 20  ;..      int rc 
8390: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
83a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 75  thods.sqlite3_cu
83b0: 72 73 6f 72 5f 72 6f 77 69 64 28 73 74 6d 74 2e  rsor_rowid(stmt.
83c0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75  _sqlite_stmt, cu
83d0: 72 73 6f 72 2c 20 6f 75 74 20 72 6f 77 69 64 29  rsor, out rowid)
83e0: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20  ;..      if (rc 
83f0: 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 72 6f 77  == 0) return row
8400: 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  id;....      ret
8410: 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20  urn 0;..#else.. 
8420: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
8430: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
8440: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
8450: 65 72 72 69 64 65 20 76 6f 69 64 20 47 65 74 49  erride void GetI
8460: 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64  ndexColumnExtend
8470: 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64 61  edInfo(string da
8480: 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20 69  tabase, string i
8490: 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c  ndex, string col
84a0: 75 6d 6e 2c 20 6f 75 74 20 69 6e 74 20 73 6f 72  umn, out int sor
84b0: 74 4d 6f 64 65 2c 20 6f 75 74 20 69 6e 74 20 6f  tMode, out int o
84c0: 6e 45 72 72 6f 72 2c 20 6f 75 74 20 73 74 72 69  nError, out stri
84d0: 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  ng collationSequ
84e0: 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ence)..    {..#i
84f0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
8500: 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  RD..      IntPtr
8510: 20 63 6f 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e   coll;..      in
8520: 74 20 63 6f 6c 6c 6c 65 6e 3b 0d 0a 20 20 20 20  t colllen;..    
8530: 20 20 69 6e 74 20 72 63 3b 0d 0a 0d 0a 20 20 20    int rc;....   
8540: 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61     rc = UnsafeNa
8550: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
8560: 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e  te3_index_column
8570: 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73  _info_interop(_s
8580: 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 62  ql, ToUTF8(datab
8590: 61 73 65 29 2c 20 54 6f 55 54 46 38 28 69 6e 64  ase), ToUTF8(ind
85a0: 65 78 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75  ex), ToUTF8(colu
85b0: 6d 6e 29 2c 20 6f 75 74 20 73 6f 72 74 4d 6f 64  mn), out sortMod
85c0: 65 2c 20 6f 75 74 20 6f 6e 45 72 72 6f 72 2c 20  e, out onError, 
85d0: 6f 75 74 20 63 6f 6c 6c 2c 20 6f 75 74 20 63 6f  out coll, out co
85e0: 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69  lllen);..      i
85f0: 66 20 28 72 63 20 21 3d 20 30 29 20 74 68 72 6f  f (rc != 0) thro
8600: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
8610: 70 74 69 6f 6e 28 72 63 2c 20 22 22 29 3b 0d 0a  ption(rc, "");..
8620: 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f  ..      collatio
8630: 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38  nSequence = UTF8
8640: 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c 20 63  ToString(coll, c
8650: 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  olllen);..#else.
8660: 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64 65 20  .      sortMode 
8670: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e 45 72  = 0;..      onEr
8680: 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20 20 20  ror = 2;..      
8690: 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
86a0: 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d 0a 23  e = "BINARY";..#
86b0: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
86c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
86d0: 72 72 69 64 65 20 69 6e 74 20 46 69 6c 65 43 6f  rride int FileCo
86e0: 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62  ntrol(string zDb
86f0: 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e  Name, int op, In
8700: 74 50 74 72 20 70 41 72 67 29 0d 0a 20 20 20 20  tPtr pArg)..    
8710: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
8720: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8730: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65  ods.sqlite3_file
8740: 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28  _control(_sql, (
8750: 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  zDbName != null)
8760: 20 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d   ? ToUTF8(zDbNam
8770: 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70  e) : null, op, p
8780: 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  Arg);..    }..  
8790: 7d 0d 0a 7d 0d 0a                                }..}..