System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 92f24bbe7b104388b28445b202b3b9e70a8fc1e7:


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 36 2e 30 22 3b 0d 0a 23 65 6e 64 69 66 0d  .76.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 6c 6f 6e 67 20  l override long 
0ab0: 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 0d  LastInsertRowId.
0ac0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
0ad0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
0ae0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
0af0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
0b00: 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
0b10: 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c 29 3b 0d  rt_rowid(_sql);.
0b20: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
0b30: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
0b40: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 68 61  override int Cha
0b50: 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nges..    {..   
0b60: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
0b70: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
0b80: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
0b90: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e  ods.sqlite3_chan
0ba0: 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ges(_sql);..    
0bb0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
0bc0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0bd0: 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77  .    /// Shutdow
0be0: 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67  n the SQLite eng
0bf0: 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63  ine so that it c
0c00: 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20  an be restarted 
0c10: 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 63  with different c
0c20: 6f 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e 0d 0a  onfig options...
0c30: 20 20 20 20 2f 2f 2f 20 57 65 20 64 65 70 65 6e      /// We depen
0c40: 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61  d on auto initia
0c50: 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f  lization to reco
0c60: 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ver...    /// </
0c70: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0c80: 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
0c90: 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64 65  ns a result code
0ca0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
0cb0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
0cc0: 65 20 69 6e 74 20 53 68 75 74 64 6f 77 6e 28 29  e int Shutdown()
0cd0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
0ce0: 20 69 6e 74 20 72 63 20 3d 20 55 6e 73 61 66 65   int rc = Unsafe
0cf0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
0d00: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29  lite3_shutdown()
0d10: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
0d20: 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n rc;..    }....
0d30: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
0d40: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4f 70 65  rride bool IsOpe
0d50: 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  n()..    {..    
0d60: 20 20 20 20 72 65 74 75 72 6e 20 28 5f 73 71 6c      return (_sql
0d70: 20 21 3d 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20   != null);..    
0d80: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
0d90: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
0da0: 4f 70 65 6e 28 73 74 72 69 6e 67 20 73 74 72 46  Open(string strF
0db0: 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 69 74 65 4f  ilename, SQLiteO
0dc0: 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20 66 6c 61  penFlagsEnum fla
0dd0: 67 73 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53  gs, int maxPoolS
0de0: 69 7a 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f  ize, bool usePoo
0df0: 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  l)..    {..     
0e00: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
0e10: 6c 29 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20  l) return;....  
0e20: 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 75      _usePool = u
0e30: 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 69  sePool;..      i
0e40: 66 20 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20  f (usePool)..   
0e50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 66     {..        _f
0e60: 69 6c 65 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c  ileName = strFil
0e70: 65 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  ename;..        
0e80: 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65 43 6f 6e  _sql = SQLiteCon
0e90: 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f  nectionPool.Remo
0ea0: 76 65 28 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20  ve(strFilename, 
0eb0: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74  maxPoolSize, out
0ec0: 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d   _poolVersion);.
0ed0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
0ee0: 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
0ef0: 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ll)..      {..  
0f00: 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 62 3b        IntPtr db;
0f10: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
0f20: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
0f30: 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65    int n = Unsafe
0f40: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
0f50: 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72  lite3_open_inter
0f60: 6f 70 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c  op(ToUTF8(strFil
0f70: 65 6e 61 6d 65 29 2c 20 28 69 6e 74 29 66 6c 61  ename), (int)fla
0f80: 67 73 2c 20 6f 75 74 20 64 62 29 3b 0d 0a 23 65  gs, out db);..#e
0f90: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  lse..        int
0fa0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
0fb0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
0fc0: 5f 6f 70 65 6e 5f 76 32 28 54 6f 55 54 46 38 28  _open_v2(ToUTF8(
0fd0: 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f 75  strFilename), ou
0fe0: 74 20 64 62 2c 20 28 69 6e 74 29 66 6c 61 67 73  t db, (int)flags
0ff0: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
1000: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
1010: 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f   if (n > 0) thro
1020: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
1030: 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d  ption(n, null);.
1040: 0a 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c 20  ...        _sql 
1050: 3d 20 64 62 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  = db;..      }..
1060: 20 20 20 20 20 20 2f 2f 20 42 69 6e 64 20 66 75        // Bind fu
1070: 6e 63 74 69 6f 6e 73 20 74 6f 20 74 68 69 73 20  nctions to this 
1080: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20  connection.  If 
1090: 61 6e 79 20 70 72 65 76 69 6f 75 73 20 66 75 6e  any previous fun
10a0: 63 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 73 61  ctions of the sa
10b0: 6d 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 2f  me name..      /
10c0: 2f 20 77 65 72 65 20 61 6c 72 65 61 64 79 20 62  / were already b
10d0: 6f 75 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 6e  ound, then the n
10e0: 65 77 20 62 69 6e 64 69 6e 67 73 20 72 65 70 6c  ew bindings repl
10f0: 61 63 65 20 74 68 65 20 6f 6c 64 2e 0d 0a 20 20  ace the old...  
1100: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 41 72      _functionsAr
1110: 72 61 79 20 3d 20 53 51 4c 69 74 65 46 75 6e 63  ray = SQLiteFunc
1120: 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f  tion.BindFunctio
1130: 6e 73 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20  ns(this);..     
1140: 20 53 65 74 54 69 6d 65 6f 75 74 28 30 29 3b 0d   SetTimeout(0);.
1150: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
1160: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1170: 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29  void ClearPool()
1180: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
1190: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50  QLiteConnectionP
11a0: 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f 66  ool.ClearPool(_f
11b0: 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d  ileName);..    }
11c0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
11d0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
11e0: 65 74 54 69 6d 65 6f 75 74 28 69 6e 74 20 6e 54  etTimeout(int nT
11f0: 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 7b  imeoutMS)..    {
1200: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20  ..      int n = 
1210: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1220: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 75 73 79  ods.sqlite3_busy
1230: 5f 74 69 6d 65 6f 75 74 28 5f 73 71 6c 2c 20 6e  _timeout(_sql, n
1240: 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20 20 20  TimeoutMS);..   
1250: 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68     if (n > 0) th
1260: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
1270: 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74  ception(n, SQLit
1280: 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  eLastError());..
1290: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
12a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
12b0: 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69 74 65 53  ool Step(SQLiteS
12c0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a  tatement stmt)..
12d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
12e0: 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f   n;..      Rando
12f0: 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  m rnd = null;.. 
1300: 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74       uint startt
1310: 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69  ick = (uint)Envi
1320: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
1330: 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 74  t;..      uint t
1340: 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74 29 28  imeout = (uint)(
1350: 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63  stmt._command._c
1360: 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20  ommandTimeout * 
1370: 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  1000);....      
1380: 77 68 69 6c 65 20 28 74 72 75 65 29 0d 0a 20 20  while (true)..  
1390: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e      {..        n
13a0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
13b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73  ethods.sqlite3_s
13c0: 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tep(stmt._sqlite
13d0: 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  _stmt);....     
13e0: 20 20 20 69 66 20 28 6e 20 3d 3d 20 31 30 30 29     if (n == 100)
13f0: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
1400: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
1410: 31 30 31 29 20 72 65 74 75 72 6e 20 66 61 6c 73  101) return fals
1420: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
1430: 20 28 6e 20 3e 20 30 29 0d 0a 20 20 20 20 20 20   (n > 0)..      
1440: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69    {..          i
1450: 6e 74 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt r;....       
1460: 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f     // An error o
1470: 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d 70 74  ccurred, attempt
1480: 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 73 74   to reset the st
1490: 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65  atement.  If the
14a0: 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20 62 65   reset worked be
14b0: 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20  cause the..     
14c0: 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61 20 68       // schema h
14d0: 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65 2d 74  as changed, re-t
14e0: 72 79 20 74 68 65 20 73 74 65 70 20 61 67 61 69  ry the step agai
14f0: 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f 72 65  n.  If it errore
1500: 64 20 6f 75 72 20 62 65 63 61 75 73 65 20 74 68  d our because th
1510: 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  e database..    
1520: 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b        // is lock
1530: 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20 72 65  ed, then keep re
1540: 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74 68 65  trying until the
1550: 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74   command timeout
1560: 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20   occurs...      
1570: 20 20 20 20 72 20 3d 20 52 65 73 65 74 28 73 74      r = Reset(st
1580: 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  mt);....        
1590: 20 20 69 66 20 28 72 20 3d 3d 20 30 29 0d 0a 20    if (r == 0).. 
15a0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
15b0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
15c0: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
15d0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
15e0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
15f0: 20 28 28 72 20 3d 3d 20 36 20 7c 7c 20 72 20 3d   ((r == 6 || r =
1600: 3d 20 35 29 20 26 26 20 73 74 6d 74 2e 5f 63 6f  = 5) && stmt._co
1610: 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 20 2f  mmand != null) /
1620: 2f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  / SQLITE_LOCKED 
1630: 7c 7c 20 53 51 4c 49 54 45 5f 42 55 53 59 0d 0a  || SQLITE_BUSY..
1640: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1650: 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70           // Keep
1660: 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20   trying..       
1670: 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20       if (rnd == 
1680: 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74  null) // First t
1690: 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e  ime we've encoun
16a0: 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a  tered the lock..
16b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e                rn
16c0: 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29  d = new Random()
16d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16e0: 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63   // If we've exc
16f0: 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e  eeded the comman
1700: 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76  d's timeout, giv
1710: 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61  e up and throw a
1720: 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  n error..       
1730: 20 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45       if ((uint)E
1740: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43  nvironment.TickC
1750: 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b  ount - starttick
1760: 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a 20 20 20   > timeout)..   
1770: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1780: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1790: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
17a0: 69 6f 6e 28 72 2c 20 53 51 4c 69 74 65 4c 61 73  ion(r, SQLiteLas
17b0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
17c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17d0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
17e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68            // Oth
1800: 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72  erwise sleep for
1810: 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74   a random amount
1820: 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31   of time up to 1
1830: 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20  50ms..          
1840: 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61      System.Threa
1850: 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65  ding.Thread.Slee
1860: 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35  p(rnd.Next(1, 15
1870: 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  0));..          
1880: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
1890: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
18a0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
18b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
18c0: 72 69 64 65 20 69 6e 74 20 52 65 73 65 74 28 53  ride int Reset(S
18d0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
18e0: 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tmt)..    {..   
18f0: 20 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23 69 66     int n;....#if
1900: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
1910: 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  D..      n = Uns
1920: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1930: 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69  .sqlite3_reset_i
1940: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
1950: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73  ite_stmt);..#els
1960: 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  e..      n = Uns
1970: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1980: 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73  .sqlite3_reset(s
1990: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
19a0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
19b0: 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20 73 63      // If the sc
19c0: 68 65 6d 61 20 63 68 61 6e 67 65 64 2c 20 74 72  hema changed, tr
19d0: 79 20 61 6e 64 20 72 65 2d 70 72 65 70 61 72 65  y and re-prepare
19e0: 20 69 74 0d 0a 20 20 20 20 20 20 69 66 20 28 6e   it..      if (n
19f0: 20 3d 3d 20 31 37 29 20 2f 2f 20 53 51 4c 49 54   == 17) // SQLIT
1a00: 45 5f 53 43 48 45 4d 41 0d 0a 20 20 20 20 20 20  E_SCHEMA..      
1a10: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65  {..        // Re
1a20: 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73  create a dummy s
1a30: 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20  tatement..      
1a40: 20 20 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20    string str;.. 
1a50: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
1a60: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d  LiteStatement tm
1a70: 70 20 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c  p = Prepare(null
1a80: 2c 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65  , stmt._sqlState
1a90: 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e  ment, null, (uin
1aa0: 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  t)(stmt._command
1ab0: 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74  ._commandTimeout
1ac0: 20 2a 20 31 30 30 30 29 2c 20 6f 75 74 20 73 74   * 1000), out st
1ad0: 72 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  r))..        {..
1ae0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e            // Fin
1af0: 61 6c 69 7a 65 20 74 68 65 20 65 78 69 73 74 69  alize the existi
1b00: 6e 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20  ng statement..  
1b10: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71          stmt._sq
1b20: 6c 69 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73  lite_stmt.Dispos
1b30: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
1b40: 2f 2f 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65  // Reassign a ne
1b50: 77 20 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e  w statement poin
1b60: 74 65 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73  ter to the old s
1b70: 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65  tatement and cle
1b80: 61 72 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  ar the temporary
1b90: 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20   one..          
1ba0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
1bb0: 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f  t = tmp._sqlite_
1bc0: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  stmt;..         
1bd0: 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d   tmp._sqlite_stm
1be0: 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  t = null;....   
1bf0: 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c         // Reappl
1c00: 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20  y parameters..  
1c10: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e          stmt.Bin
1c20: 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a  dParameters();..
1c30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1c40: 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 20 2f 2f     return -1; //
1c50: 20 52 65 73 65 74 20 77 61 73 20 4f 4b 2c 20 77   Reset was OK, w
1c60: 69 74 68 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ith schema chang
1c70: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  e..      }..    
1c80: 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
1c90: 36 20 7c 7c 20 6e 20 3d 3d 20 35 29 20 2f 2f 20  6 || n == 5) // 
1ca0: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 7c 7c  SQLITE_LOCKED ||
1cb0: 20 53 51 4c 49 54 45 5f 42 55 53 59 0d 0a 20 20   SQLITE_BUSY..  
1cc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d        return n;.
1cd0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e  ...      if (n >
1ce0: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72   0)..        thr
1cf0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
1d00: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
1d10: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
1d20: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
1d30: 20 2f 2f 20 57 65 20 72 65 73 65 74 20 4f 4b 2c   // We reset OK,
1d40: 20 6e 6f 20 73 63 68 65 6d 61 20 63 68 61 6e 67   no schema chang
1d50: 65 73 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  es..    }....   
1d60: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1d70: 64 65 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65  de string SQLite
1d80: 4c 61 73 74 45 72 72 6f 72 28 29 0d 0a 20 20 20  LastError()..   
1d90: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
1da0: 20 53 51 4c 69 74 65 42 61 73 65 2e 53 51 4c 69   SQLiteBase.SQLi
1db0: 74 65 4c 61 73 74 45 72 72 6f 72 28 5f 73 71 6c  teLastError(_sql
1dc0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
1dd0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1de0: 64 65 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65  de SQLiteStateme
1df0: 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c 69 74  nt Prepare(SQLit
1e00: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c  eConnection cnn,
1e10: 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 20   string strSql, 
1e20: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
1e30: 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74 20 74  previous, uint t
1e40: 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74  imeoutMS, out st
1e50: 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e 29 0d  ring strRemain).
1e60: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
1e70: 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
1e80: 4f 72 45 6d 70 74 79 28 73 74 72 53 71 6c 29 29  OrEmpty(strSql))
1e90: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
1ea0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
1eb0: 2f 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65 20 64  / NOTE: SQLite d
1ec0: 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  oes not support 
1ed0: 74 68 65 20 63 6f 6e 63 65 70 74 20 6f 66 20 73  the concept of s
1ee0: 65 70 61 72 61 74 65 20 73 63 68 65 6d 61 73 0d  eparate schemas.
1ef0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
1f00: 20 20 69 6e 20 6f 6e 65 20 64 61 74 61 62 61 73    in one databas
1f10: 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65  e; therefore, re
1f20: 6d 6f 76 65 20 74 68 65 20 62 61 73 65 20 73 63  move the base sc
1f30: 68 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20 20 20  hema name..     
1f40: 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73 65 64     //       used
1f50: 20 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74 65 67   to smooth integ
1f60: 72 61 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20  ration with the 
1f70: 62 61 73 65 20 2e 4e 45 54 20 46 72 61 6d 65 77  base .NET Framew
1f80: 6f 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ork..        // 
1f90: 20 20 20 20 20 20 64 61 74 61 20 63 6c 61 73 73        data class
1fa0: 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  es...        //.
1fb0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
1fc0: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d  baseSchemaName =
1fd0: 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f   (cnn != null) ?
1fe0: 20 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61   cnn._baseSchema
1ff0: 4e 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a  Name : null;....
2000: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
2010: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
2020: 79 28 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  y(baseSchemaName
2030: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
2040: 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20           strSql 
2050: 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65  = strSql.Replace
2060: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2070: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
2080: 5b 7b 30 7d 5d 2e 22 2c 20 62 61 73 65 53 63 68  [{0}].", baseSch
2090: 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67  emaName), String
20a0: 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20  .Empty);....    
20b0: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
20c0: 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a  trSql.Replace(..
20d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
20e0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
20f0: 2e 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61  .", baseSchemaNa
2100: 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74  me), String.Empt
2110: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  y);..        }..
2120: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2130: 20 49 6e 74 50 74 72 20 73 74 6d 74 20 3d 20 49   IntPtr stmt = I
2140: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
2150: 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20     IntPtr ptr = 
2160: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
2170: 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
2180: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20  ..      int n = 
2190: 31 37 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72  17;..      int r
21a0: 65 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20 20  etries = 0;..   
21b0: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
21c0: 55 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20  UTF8(strSql);.. 
21d0: 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
21e0: 64 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  defs = null;..  
21f0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
2200: 65 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d  ent cmd = null;.
2210: 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e  .      Random rn
2220: 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  d = null;..     
2230: 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20   uint starttick 
2240: 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d  = (uint)Environm
2250: 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a  ent.TickCount;..
2260: 0d 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c 65  ..      GCHandle
2270: 20 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64   handle = GCHand
2280: 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61  le.Alloc(b, GCHa
2290: 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64 29  ndleType.Pinned)
22a0: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
22b0: 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64  psql = handle.Ad
22c0: 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74  drOfPinnedObject
22d0: 28 29 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a  ();..      try..
22e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22f0: 20 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20 31 37   while ((n == 17
2300: 20 7c 7c 20 6e 20 3d 3d 20 36 20 7c 7c 20 6e 20   || n == 6 || n 
2310: 3d 3d 20 35 29 20 26 26 20 72 65 74 72 69 65 73  == 5) && retries
2320: 20 3c 20 33 29 0d 0a 20 20 20 20 20 20 20 20 7b   < 3)..        {
2330: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
2340: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
2350: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
2360: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2370: 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f  3_prepare_intero
2380: 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e  p(_sql, psql, b.
2390: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20  Length - 1, out 
23a0: 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 2c 20 6f  stmt, out ptr, o
23b0: 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ut len);..#else.
23c0: 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55  .          n = U
23d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
23e0: 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61  ds.sqlite3_prepa
23f0: 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62  re(_sql, psql, b
2400: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74  .Length - 1, out
2410: 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 29 3b   stmt, out ptr);
2420: 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20  ..          len 
2430: 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  = -1;..#endif...
2440: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e  .          if (n
2450: 20 3d 3d 20 31 37 29 0d 0a 20 20 20 20 20 20 20   == 17)..       
2460: 20 20 20 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d       retries++;.
2470: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
2480: 69 66 20 28 6e 20 3d 3d 20 31 29 0d 0a 20 20 20  if (n == 1)..   
2490: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24a0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
24b0: 2e 43 6f 6d 70 61 72 65 28 53 51 4c 69 74 65 4c  .Compare(SQLiteL
24c0: 61 73 74 45 72 72 6f 72 28 29 2c 20 22 6e 65 61  astError(), "nea
24d0: 72 20 5c 22 54 59 50 45 53 5c 22 3a 20 73 79 6e  r \"TYPES\": syn
24e0: 74 61 78 20 65 72 72 6f 72 22 2c 20 53 74 72 69  tax error", Stri
24f0: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
2500: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
2510: 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
2520: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2530: 20 20 20 20 69 6e 74 20 70 6f 73 20 3d 20 73 74      int pos = st
2540: 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27  rSql.IndexOf(';'
2550: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2560: 20 20 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29    if (pos == -1)
2570: 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65   pos = strSql.Le
2580: 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20  ngth - 1;....   
2590: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 64             typed
25a0: 65 66 73 20 3d 20 73 74 72 53 71 6c 2e 53 75 62  efs = strSql.Sub
25b0: 73 74 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20  string(0, pos + 
25c0: 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  1);..           
25d0: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53     strSql = strS
25e0: 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 70 6f 73  ql.Substring(pos
25f0: 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   + 1);....      
2600: 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69          strRemai
2610: 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20 20 20  n = "";....     
2620: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
2630: 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73  cmd == null && s
2640: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30  trSql.Length > 0
2650: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2660: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2670: 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72      cmd = Prepar
2680: 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70  e(cnn, strSql, p
2690: 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74  revious, timeout
26a0: 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61 69  MS, out strRemai
26b0: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
26c0: 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74       strSql = st
26d0: 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20  rRemain;..      
26e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
2700: 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  md != null)..   
2710: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
2720: 2e 53 65 74 54 79 70 65 73 28 74 79 70 65 64 65  .SetTypes(typede
2730: 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  fs);....        
2740: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64        return cmd
2750: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2760: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
2770: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
2780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
2790: 73 65 20 69 66 20 28 5f 62 75 69 6c 64 69 6e 67  se if (_building
27a0: 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65 20  Schema == false 
27b0: 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  && String.Compar
27c0: 65 28 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  e(SQLiteLastErro
27d0: 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68  r(), 0, "no such
27e0: 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48   table: TEMP.SCH
27f0: 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72  EMA", 0, 26, Str
2800: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
2810: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
2820: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
2830: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2840: 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d       strRemain =
2850: 20 22 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   "";..          
2860: 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68      _buildingSch
2870: 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ema = true;..   
2880: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
28a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28b0: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
28c0: 74 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20 28  tensions ext = (
28d0: 28 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65  (IServiceProvide
28e0: 72 29 53 51 4c 69 74 65 46 61 63 74 6f 72 79 2e  r)SQLiteFactory.
28f0: 49 6e 73 74 61 6e 63 65 29 2e 47 65 74 53 65 72  Instance).GetSer
2900: 76 69 63 65 28 74 79 70 65 6f 66 28 49 53 51 4c  vice(typeof(ISQL
2910: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
2920: 6f 6e 73 29 29 20 61 73 20 49 53 51 4c 69 74 65  ons)) as ISQLite
2930: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
2940: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2950: 20 20 20 20 20 69 66 20 28 65 78 74 20 21 3d 20       if (ext != 
2960: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2970: 20 20 20 20 20 20 20 20 20 65 78 74 2e 42 75 69           ext.Bui
2980: 6c 64 54 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e  ldTempSchema(cnn
2990: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
29a0: 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64        while (cmd
29b0: 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53   == null && strS
29c0: 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  ql.Length > 0)..
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29f0: 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61       cmd = Prepa
2a00: 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20  re(cnn, strSql, 
2a10: 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75  previous, timeou
2a20: 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61  tMS, out strRema
2a30: 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
2a40: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
2a50: 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20   strRemain;..   
2a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a80: 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20    return cmd;.. 
2a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
2ab0: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
2ac0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ad0: 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e          _buildin
2ae0: 67 53 63 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b  gSchema = false;
2af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b00: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2b10: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2b20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2b30: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 36   else if (n == 6
2b40: 20 7c 7c 20 6e 20 3d 3d 20 35 29 20 2f 2f 20 4c   || n == 5) // L
2b50: 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61  ocked -- delay a
2b60: 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65   small amount be
2b70: 66 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20  fore retrying.. 
2b80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b90: 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20          // Keep 
2ba0: 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  trying..        
2bb0: 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e      if (rnd == n
2bc0: 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69  ull) // First ti
2bd0: 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74  me we've encount
2be0: 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20  ered the lock.. 
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64               rnd
2c00: 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b   = new Random();
2c10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c20: 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65  // If we've exce
2c30: 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64  eded the command
2c40: 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65  's timeout, give
2c50: 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e   up and throw an
2c60: 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
2c70: 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e      if ((uint)En
2c80: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
2c90: 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20  unt - starttick 
2ca0: 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20  > timeoutMS)..  
2cb0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2cc0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
2cd0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2ce0: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
2cf0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
2d00: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2d10: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
2d20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d30: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74             // Ot
2d40: 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f  herwise sleep fo
2d50: 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e  r a random amoun
2d60: 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20  t of time up to 
2d70: 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20  150ms..         
2d80: 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65       System.Thre
2d90: 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65  ading.Thread.Sle
2da0: 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31  ep(rnd.Next(1, 1
2db0: 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  50));..         
2dc0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2dd0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
2de0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20          if (n > 
2df0: 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  0) throw new SQL
2e00: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
2e10: 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28  SQLiteLastError(
2e20: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  ));....        s
2e30: 74 72 52 65 6d 61 69 6e 20 3d 20 55 54 46 38 54  trRemain = UTF8T
2e40: 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e  oString(ptr, len
2e50: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
2e60: 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72   (stmt != IntPtr
2e70: 2e 5a 65 72 6f 29 20 63 6d 64 20 3d 20 6e 65 77  .Zero) cmd = new
2e80: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
2e90: 28 74 68 69 73 2c 20 73 74 6d 74 2c 20 73 74 72  (this, stmt, str
2ea0: 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c  Sql.Substring(0,
2eb0: 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d   strSql.Length -
2ec0: 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74   strRemain.Lengt
2ed0: 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a  h), previous);..
2ee0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2ef0: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   cmd;..      }..
2f00: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
2f10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f20: 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a  handle.Free();..
2f30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2f40: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
2f50: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
2f60: 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53  d_Double(SQLiteS
2f70: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
2f80: 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65  nt index, double
2f90: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
2fa0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
2fb0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
2fc0: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
2fd0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2fe0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
2ff0: 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69  ouble(stmt._sqli
3000: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
3010: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
3020: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
3030: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3040: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
3050: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74  ouble_interop(st
3060: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
3070: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
3080: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
3090: 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68     if (n > 0) th
30a0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
30b0: 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74  ception(n, SQLit
30c0: 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  eLastError());..
30d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
30e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
30f0: 6f 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28 53  oid Bind_Int32(S
3100: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
3110: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
3120: 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  int value)..    
3130: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  {..      int n =
3140: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
3150: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
3160: 64 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69  d_int(stmt._sqli
3170: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
3180: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 69  value);..      i
3190: 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20  f (n > 0) throw 
31a0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
31b0: 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73  ion(n, SQLiteLas
31c0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
31d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
31e0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
31f0: 42 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74  Bind_Int64(SQLit
3200: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
3210: 20 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67   int index, long
3220: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
3230: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
3240: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
3250: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
3260: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3270: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
3280: 6e 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74  nt64(stmt._sqlit
3290: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 76  e_stmt, index, v
32a0: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
32b0: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73       int n = Uns
32c0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
32d0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
32e0: 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  t64_interop(stmt
32f0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
3300: 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29  ndex, ref value)
3310: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
3320: 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f   if (n > 0) thro
3330: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
3340: 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c  ption(n, SQLiteL
3350: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
3360: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
3370: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
3380: 64 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69  d Bind_Text(SQLi
3390: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
33a0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72  , int index, str
33b0: 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
33c0: 7b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  {..      byte[] 
33d0: 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65  b = ToUTF8(value
33e0: 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20  );..      int n 
33f0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
3400: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
3410: 6e 64 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71  nd_text(stmt._sq
3420: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
3430: 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  , b, b.Length - 
3440: 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  1, (IntPtr)(-1))
3450: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e  ;..      if (n >
3460: 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51   0) throw new SQ
3470: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
3480: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
3490: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
34a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
34b0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44  ride void Bind_D
34c0: 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74  ateTime(SQLiteSt
34d0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
34e0: 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d  t index, DateTim
34f0: 65 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  e dt)..    {..  
3500: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 5f 64        switch (_d
3510: 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d 0a  atetimeFormat)..
3520: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3530: 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
3540: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69  teDateFormats.Ti
3550: 63 6b 73 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  cks:..          
3560: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
3580: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
3590: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
35a0: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 73 74 6d 74  _bind_int64(stmt
35b0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
35c0: 6e 64 65 78 2c 20 64 74 2e 54 69 63 6b 73 29 3b  ndex, dt.Ticks);
35d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35e0: 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29        if (n > 0)
35f0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
3600: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51  eException(n, SQ
3610: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
3620: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3630: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
3640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
3650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
3660: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
3670: 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d  mats.JulianDay:.
3680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3690: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36a0: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20          int n = 
36b0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
36c0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
36d0: 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71  _double(stmt._sq
36e0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
36f0: 2c 20 54 6f 4a 75 6c 69 61 6e 44 61 79 28 64 74  , ToJulianDay(dt
3700: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
3710: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e           if (n >
3720: 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51   0) throw new SQ
3730: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
3740: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
3750: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
3760: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
3770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3780: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
3790: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
37a0: 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63  Formats.UnixEpoc
37b0: 68 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h:..            
37c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37d0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
37e0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
37f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
3800: 69 6e 64 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f  ind_int64(stmt._
3810: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
3820: 65 78 2c 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e  ex, Convert.ToIn
3830: 74 36 34 28 64 74 2e 53 75 62 74 72 61 63 74 28  t64(dt.Subtract(
3840: 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f 74 61 6c  UnixEpoch).Total
3850: 53 65 63 6f 6e 64 73 29 29 3b 0d 0a 20 20 20 20  Seconds));..    
3860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3870: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
3880: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
3890: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
38a0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38c0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
38d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
38e0: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a          default:
38f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3900: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3910: 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
3920: 62 20 3d 20 54 6f 55 54 46 38 28 64 74 29 3b 0d  b = ToUTF8(dt);.
3930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3940: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73       int n = Uns
3950: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
3960: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65  .sqlite3_bind_te
3970: 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  xt(stmt._sqlite_
3980: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 62 2c 20  stmt, index, b, 
3990: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49  b.Length - 1, (I
39a0: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39c0: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
39d0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
39e0: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
39f0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
3a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a10: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
3a20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
3a30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3a40: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
3a50: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
3a60: 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53 74 61  d_Blob(SQLiteSta
3a70: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
3a80: 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62   index, byte[] b
3a90: 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d  lobData)..    {.
3aa0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55  .      int n = U
3ab0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3ac0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
3ad0: 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74  blob(stmt._sqlit
3ae0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 62  e_stmt, index, b
3af0: 6c 6f 62 44 61 74 61 2c 20 62 6c 6f 62 44 61 74  lobData, blobDat
3b00: 61 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74  a.Length, (IntPt
3b10: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  r)(-1));..      
3b20: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
3b30: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
3b40: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
3b50: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
3b60: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3b70: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
3b80: 20 42 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74   Bind_Null(SQLit
3b90: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
3ba0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
3bb0: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20   {..      int n 
3bc0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
3bd0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
3be0: 6e 64 5f 6e 75 6c 6c 28 73 74 6d 74 2e 5f 73 71  nd_null(stmt._sq
3bf0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
3c00: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
3c10: 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  > 0) throw new S
3c20: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
3c30: 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  , SQLiteLastErro
3c40: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
3c50: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3c60: 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50  rride int Bind_P
3c70: 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65  aramCount(SQLite
3c80: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d  Statement stmt).
3c90: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
3ca0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
3cb0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
3cc0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
3cd0: 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69  count(stmt._sqli
3ce0: 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d  te_stmt);..    }
3cf0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
3d00: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
3d10: 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28   Bind_ParamName(
3d20: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
3d30: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
3d40: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
3d50: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
3d60: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
3d70: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
3d80: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
3d90: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
3da0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
3db0: 74 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ter_name_interop
3dc0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
3dd0: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
3de0: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
3df0: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
3e00: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
3e10: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
3e20: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
3e30: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 73 74 6d  rameter_name(stm
3e40: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
3e50: 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
3e60: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
3e70: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
3e80: 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61  ride int Bind_Pa
3e90: 72 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65 53  ramIndex(SQLiteS
3ea0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73  tatement stmt, s
3eb0: 74 72 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29  tring paramName)
3ec0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
3ed0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
3ee0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3ef0: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
3f00: 5f 69 6e 64 65 78 28 73 74 6d 74 2e 5f 73 71 6c  _index(stmt._sql
3f10: 69 74 65 5f 73 74 6d 74 2c 20 54 6f 55 54 46 38  ite_stmt, ToUTF8
3f20: 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a 20  (paramName));.. 
3f30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3f40: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
3f50: 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51  t ColumnCount(SQ
3f60: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
3f70: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
3f80: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
3f90: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
3fa0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
3fb0: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
3fc0: 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  tmt);..    }....
3fd0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3fe0: 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
3ff0: 75 6d 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  umnName(SQLiteSt
4000: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
4010: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
4020: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
4030: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
4040: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
4050: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
4060: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
4070: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
4080: 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  umn_name_interop
4090: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
40a0: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
40b0: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
40c0: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
40d0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
40e0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
40f0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
4100: 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  name(stmt._sqlit
4110: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e_stmt, index), 
4120: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
4130: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4140: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70  nal override Typ
4150: 65 41 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e  eAffinity Column
4160: 41 66 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53  Affinity(SQLiteS
4170: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
4180: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
4190: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
41a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
41b0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
41c0: 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c  n_type(stmt._sql
41d0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
41e0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
41f0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
4200: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54  e string ColumnT
4210: 79 70 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ype(SQLiteStatem
4220: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
4230: 64 65 78 2c 20 6f 75 74 20 54 79 70 65 41 66 66  dex, out TypeAff
4240: 69 6e 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29  inity nAffinity)
4250: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
4260: 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51  nt len;..#if !SQ
4270: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
4280: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
4290: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
42a0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
42b0: 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74 65  mn_decltype_inte
42c0: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
42d0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
42e0: 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  t len);..#else..
42f0: 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d        len = -1;.
4300: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20  .      IntPtr p 
4310: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = 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 64 65 63 6c 74 79 70 65 28 73 74  lumn_decltype(st
4340: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
4350: 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66   index);..#endif
4360: 0d 0a 20 20 20 20 20 20 6e 41 66 66 69 6e 69 74  ..      nAffinit
4370: 79 20 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  y = ColumnAffini
4380: 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  ty(stmt, index);
4390: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20  ....      if (p 
43a0: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20  != IntPtr.Zero) 
43b0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
43c0: 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20  ing(p, len);..  
43d0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
43e0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  {..        strin
43f0: 67 5b 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54 79  g[] ar = stmt.Ty
4400: 70 65 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a  peDefinitions;..
4410: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 20 21          if (ar !
4420: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
4430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
4440: 20 28 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e   (index < ar.Len
4450: 67 74 68 20 26 26 20 61 72 5b 69 6e 64 65 78 5d  gth && ar[index]
4460: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
4470: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72         return ar
4480: 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20  [index];..      
4490: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74    }..        ret
44a0: 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  urn String.Empty
44b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 73  ;....        //s
44c0: 77 69 74 63 68 20 28 6e 41 66 66 69 6e 69 74 79  witch (nAffinity
44d0: 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a  )..        //{..
44e0: 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65          //  case
44f0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
4500: 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t64:..        //
4510: 20 20 20 20 72 65 74 75 72 6e 20 22 42 49 47 49      return "BIGI
4520: 4e 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  NT";..        //
4530: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
4540: 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20  ity.Double:..   
4550: 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72       //    retur
4560: 6e 20 22 44 4f 55 42 4c 45 22 3b 0d 0a 20 20 20  n "DOUBLE";..   
4570: 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79       //  case Ty
4580: 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a  peAffinity.Blob:
4590: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
45a0: 72 65 74 75 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a  return "BLOB";..
45b0: 20 20 20 20 20 20 20 20 2f 2f 20 20 64 65 66 61          //  defa
45c0: 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ult:..        //
45d0: 20 20 20 20 72 65 74 75 72 6e 20 22 54 45 58 54      return "TEXT
45e0: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7d 0d  ";..        //}.
45f0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
4600: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4610: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c  override int Col
4620: 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53  umnIndex(SQLiteS
4630: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73  tatement stmt, s
4640: 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65  tring columnName
4650: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
4660: 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f  int x = ColumnCo
4670: 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20  unt(stmt);....  
4680: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d      for (int n =
4690: 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d   0; n < x; n++).
46a0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
46b0: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d    if (String.Com
46c0: 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c  pare(columnName,
46d0: 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74   ColumnName(stmt
46e0: 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70  , n), StringComp
46f0: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
4700: 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d  noreCase) == 0).
4710: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
4720: 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  n n;..      }.. 
4730: 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d       return -1;.
4740: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
4750: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
4760: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69  string ColumnOri
4770: 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65  ginalName(SQLite
4780: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
4790: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
47a0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
47b0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
47c0: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
47d0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
47e0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
47f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
4800: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
4810: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
4820: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
4830: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
4840: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
4850: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
4860: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
4870: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4880: 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
4890: 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  name(stmt._sqlit
48a0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e_stmt, index), 
48b0: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
48c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
48d0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
48e0: 69 6e 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61  ing ColumnDataba
48f0: 73 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  seName(SQLiteSta
4900: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
4910: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
4920: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
4930: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
4940: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  len;..      retu
4950: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
4960: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4970: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
4980: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
4990: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
49a0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
49b0: 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e  x, out len), len
49c0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
49d0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
49e0: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
49f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
4a00: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
4a10: 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _name(stmt._sqli
4a20: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
4a30: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
4a40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4a50: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
4a60: 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65  ring ColumnTable
4a70: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
4a80: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
4a90: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
4aa0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
4ab0: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
4ac0: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
4ad0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
4ae0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4af0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
4b00: 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65  _table_name_inte
4b10: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
4b20: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
4b30: 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  t len), len);..#
4b40: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
4b50: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
4b60: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4b70: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
4b80: 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74  mn_table_name(st
4b90: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
4ba0: 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
4bb0: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
4bc0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
4bd0: 72 72 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d  rride void Colum
4be0: 6e 4d 65 74 61 44 61 74 61 28 73 74 72 69 6e 67  nMetaData(string
4bf0: 20 64 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e   dataBase, strin
4c00: 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20  g table, string 
4c10: 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 73 74 72 69  column, out stri
4c20: 6e 67 20 64 61 74 61 54 79 70 65 2c 20 6f 75 74  ng dataType, out
4c30: 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53   string collateS
4c40: 65 71 75 65 6e 63 65 2c 20 6f 75 74 20 62 6f 6f  equence, out boo
4c50: 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62  l notNull, out b
4c60: 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20  ool primaryKey, 
4c70: 6f 75 74 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63  out bool autoInc
4c80: 72 65 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a  rement)..    {..
4c90: 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 61 74        IntPtr dat
4ca0: 61 54 79 70 65 50 74 72 3b 0d 0a 20 20 20 20 20  aTypePtr;..     
4cb0: 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71 50   IntPtr collSeqP
4cc0: 74 72 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  tr;..      int n
4cd0: 6e 6f 74 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  notNull;..      
4ce0: 69 6e 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 3b  int nprimaryKey;
4cf0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 61 75 74  ..      int naut
4d00: 6f 49 6e 63 3b 0d 0a 20 20 20 20 20 20 69 6e 74  oInc;..      int
4d10: 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 64   n;..      int d
4d20: 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  tLen;..      int
4d30: 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21   csLen;....#if !
4d40: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
4d50: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
4d60: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4d70: 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c  qlite3_table_col
4d80: 75 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74  umn_metadata_int
4d90: 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
4da0: 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55  8(dataBase), ToU
4db0: 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54  TF8(table), ToUT
4dc0: 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20  F8(column), out 
4dd0: 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75 74  dataTypePtr, out
4de0: 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74   collSeqPtr, out
4df0: 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e   nnotNull, out n
4e00: 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20  primaryKey, out 
4e10: 6e 61 75 74 6f 49 6e 63 2c 20 6f 75 74 20 64 74  nautoInc, out dt
4e20: 4c 65 6e 2c 20 6f 75 74 20 63 73 4c 65 6e 29 3b  Len, out csLen);
4e30: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 64  ..#else..      d
4e40: 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20  tLen = -1;..    
4e50: 20 20 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d    csLen = -1;...
4e60: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
4e70: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4e80: 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c  qlite3_table_col
4e90: 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73 71  umn_metadata(_sq
4ea0: 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42 61  l, ToUTF8(dataBa
4eb0: 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c  se), ToUTF8(tabl
4ec0: 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d  e), ToUTF8(colum
4ed0: 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70 65  n), out dataType
4ee0: 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71  Ptr, out collSeq
4ef0: 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c  Ptr, out nnotNul
4f00: 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b  l, out nprimaryK
4f10: 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63  ey, out nautoInc
4f20: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
4f30: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
4f40: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
4f50: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
4f60: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
4f70: 0a 20 20 20 20 20 20 64 61 74 61 54 79 70 65 20  .      dataType 
4f80: 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 64  = UTF8ToString(d
4f90: 61 74 61 54 79 70 65 50 74 72 2c 20 64 74 4c 65  ataTypePtr, dtLe
4fa0: 6e 29 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61  n);..      colla
4fb0: 74 65 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46  teSequence = UTF
4fc0: 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53 65  8ToString(collSe
4fd0: 71 50 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d  qPtr, csLen);...
4fe0: 0a 20 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d  .      notNull =
4ff0: 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29   (nnotNull == 1)
5000: 3b 0d 0a 20 20 20 20 20 20 70 72 69 6d 61 72 79  ;..      primary
5010: 4b 65 79 20 3d 20 28 6e 70 72 69 6d 61 72 79 4b  Key = (nprimaryK
5020: 65 79 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20  ey == 1);..     
5030: 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d   autoIncrement =
5040: 20 28 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31 29   (nautoInc == 1)
5050: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5060: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
5070: 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62  e double GetDoub
5080: 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  le(SQLiteStateme
5090: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
50a0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
50b0: 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d    double value;.
50c0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
50d0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
50e0: 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
50f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
5100: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
5110: 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73  n_double(stmt._s
5120: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
5130: 78 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  x);..#else..    
5140: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
5150: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
5160: 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  lumn_double_inte
5170: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
5180: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
5190: 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  t value);..#endi
51a0: 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  f..      return 
51b0: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  value;..    }...
51c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
51d0: 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 49 6e  erride int GetIn
51e0: 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t32(SQLiteStatem
51f0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
5200: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
5210: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
5220: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
5230: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
5240: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
5250: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
5260: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
5270: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
5280: 20 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65   GetInt64(SQLite
5290: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
52a0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
52b0: 7b 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76 61  {..      long va
52c0: 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46  lue;..#if !PLATF
52d0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
52e0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75  WORK..      valu
52f0: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
5300: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5310: 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d  column_int64(stm
5320: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
5330: 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 73 65 0d 0a  index);..#else..
5340: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
5350: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5360: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69  3_column_int64_i
5370: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
5380: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
5390: 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65   out value);..#e
53a0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75  ndif..      retu
53b0: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d  rn value;..    }
53c0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
53d0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
53e0: 20 47 65 74 54 65 78 74 28 53 51 4c 69 74 65 53   GetText(SQLiteS
53f0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
5400: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
5410: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
5420: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
5430: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65  t len;..      re
5440: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
5450: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
5460: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
5470: 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f  lumn_text_intero
5480: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
5490: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
54a0: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
54b0: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
54c0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
54d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
54e0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
54f0: 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69  _text(stmt._sqli
5500: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
5510: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
5520: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
5530: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 44 61  rnal override Da
5540: 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54 69  teTime GetDateTi
5550: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
5560: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
5570: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
5580: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
5590: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
55a0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  ..      return T
55b0: 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65  oDateTime(Unsafe
55c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
55d0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
55e0: 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  t_interop(stmt._
55f0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
5600: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
5610: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
5620: 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
5630: 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ime(UnsafeNative
5640: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5650: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74  column_text(stmt
5660: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
5670: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
5680: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
5690: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
56a0: 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65  ide long GetByte
56b0: 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  s(SQLiteStatemen
56c0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
56d0: 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73  x, int nDataOffs
56e0: 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74  et, byte[] bDest
56f0: 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
5700: 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  t nLength)..    
5710: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65  {..      int nle
5720: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
5730: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5740: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
5750: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
5760: 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
5770: 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e   // If no destin
5780: 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65  ation buffer, re
5790: 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65  turn the size ne
57a0: 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20  eded...      if 
57b0: 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20  (bDest == null) 
57c0: 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a  return nlen;....
57d0: 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65        int nCopie
57e0: 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  d = nLength;....
57f0: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
5800: 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65  d + nStart > bDe
5810: 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69  st.Length) nCopi
5820: 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74  ed = bDest.Lengt
5830: 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20  h - nStart;..   
5840: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
5850: 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e   nDataOffset > n
5860: 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e  len) nCopied = n
5870: 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65  len - nDataOffse
5880: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
5890: 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20  nCopied > 0)..  
58a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
58b0: 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61  ntPtr ptr = Unsa
58c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
58d0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
58e0: 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  lob(stmt._sqlite
58f0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
5900: 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61  ..        Marsha
5910: 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28  l.Copy((IntPtr)(
5920: 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20  ptr.ToInt64() + 
5930: 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44  nDataOffset), bD
5940: 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f  est, nStart, nCo
5950: 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  pied);..      }.
5960: 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20  .      else..   
5970: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43     {..        nC
5980: 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  opied = 0;..    
5990: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
59a0: 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20  urn nCopied;..  
59b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
59c0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
59d0: 67 20 47 65 74 43 68 61 72 73 28 53 51 4c 69 74  g GetChars(SQLit
59e0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
59f0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20   int index, int 
5a00: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63 68 61  nDataOffset, cha
5a10: 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  r[] bDest, int n
5a20: 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
5a30: 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
5a40: 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20    int nlen;..   
5a50: 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d     int nCopied =
5a60: 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20   nLength;....   
5a70: 20 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20     string str = 
5a80: 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
5a90: 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e 6c 65  dex);..      nle
5aa0: 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68 3b 0d  n = str.Length;.
5ab0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65  ...      if (bDe
5ac0: 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  st == null) retu
5ad0: 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20  rn nlen;....    
5ae0: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
5af0: 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c  nStart > bDest.L
5b00: 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d  ength) nCopied =
5b10: 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20   bDest.Length - 
5b20: 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69  nStart;..      i
5b30: 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61  f (nCopied + nDa
5b40: 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29  taOffset > nlen)
5b50: 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20   nCopied = nlen 
5b60: 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a  - nDataOffset;..
5b70: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
5b80: 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  ied > 0)..      
5b90: 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e 44 61    str.CopyTo(nDa
5ba0: 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73 74 2c  taOffset, bDest,
5bb0: 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64   nStart, nCopied
5bc0: 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 6e  );..      else n
5bd0: 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20  Copied = 0;.... 
5be0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70       return nCop
5bf0: 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ied;..    }.... 
5c00: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
5c10: 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c  ride bool IsNull
5c20: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
5c30: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
5c40: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5c50: 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e 41 66  return (ColumnAf
5c60: 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
5c70: 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ex) == TypeAffin
5c80: 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20  ity.Null);..    
5c90: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
5ca0: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 41  l override int A
5cb0: 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49 6e  ggregateCount(In
5cc0: 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20  tPtr context).. 
5cd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
5ce0: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
5cf0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61  ethods.sqlite3_a
5d00: 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 63  ggregate_count(c
5d10: 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d  ontext);..    }.
5d20: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
5d30: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 72  override void Cr
5d40: 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73 74 72  eateFunction(str
5d50: 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c  ing strFunction,
5d60: 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c   int nArgs, bool
5d70: 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51   needCollSeq, SQ
5d80: 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  LiteCallback fun
5d90: 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63  c, SQLiteCallbac
5da0: 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 69  k funcstep, SQLi
5db0: 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20  teFinalCallback 
5dc0: 66 75 6e 63 66 69 6e 61 6c 29 0d 0a 20 20 20 20  funcfinal)..    
5dd0: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 3b 0d  {..      int n;.
5de0: 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
5df0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e  TANDARD..      n
5e00: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
5e10: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
5e20: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69  reate_function_i
5e30: 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55  nterop(_sql, ToU
5e40: 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
5e50: 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50  , nArgs, 4, IntP
5e60: 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
5e70: 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
5e80: 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71  al, (needCollSeq
5e90: 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20   == true) ? 1 : 
5ea0: 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  0);..      if (n
5eb0: 20 3d 3d 20 30 29 20 6e 20 3d 20 55 6e 73 61 66   == 0) n = Unsaf
5ec0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5ed0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
5ee0: 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f  nction_interop(_
5ef0: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
5f00: 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
5f10: 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
5f20: 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
5f30: 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65   funcfinal, (nee
5f40: 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65  dCollSeq == true
5f50: 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c  ) ? 1 : 0);..#el
5f60: 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e  se..      n = Un
5f70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5f80: 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
5f90: 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20  _function(_sql, 
5fa0: 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
5fb0: 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49  on), nArgs, 4, I
5fc0: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
5fd0: 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
5fe0: 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69  final);..      i
5ff0: 66 20 28 6e 20 3d 3d 20 30 29 20 6e 20 3d 20 55  f (n == 0) n = U
6000: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6010: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
6020: 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c  e_function(_sql,
6030: 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74   ToUTF8(strFunct
6040: 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20  ion), nArgs, 1, 
6050: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
6060: 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e  c, funcstep, fun
6070: 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66  cfinal);..#endif
6080: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20  ..      if (n > 
6090: 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  0) throw new SQL
60a0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
60b0: 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28  SQLiteLastError(
60c0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
60d0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
60e0: 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 43  ide void CreateC
60f0: 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20  ollation(string 
6100: 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51  strCollation, SQ
6110: 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75  LiteCollation fu
6120: 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74  nc, SQLiteCollat
6130: 69 6f 6e 20 66 75 6e 63 31 36 29 0d 0a 20 20 20  ion func16)..   
6140: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20   {..      int n 
6150: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6160: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
6170: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f  eate_collation(_
6180: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43  sql, ToUTF8(strC
6190: 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e  ollation), 2, In
61a0: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31  tPtr.Zero, func1
61b0: 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  6);..      if (n
61c0: 20 3d 3d 20 30 29 20 6e 20 3d 20 55 6e 73 61 66   == 0) n = Unsaf
61d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
61e0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
61f0: 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  llation(_sql, To
6200: 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f  UTF8(strCollatio
6210: 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65  n), 1, IntPtr.Ze
6220: 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20  ro, func);..    
6230: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
6240: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
6250: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
6260: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
6270: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
6280: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
6290: 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65  t ContextCollate
62a0: 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f  Compare(Collatio
62b0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e  nEncodingEnum en
62c0: 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  c, IntPtr contex
62d0: 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20 73 74  t, string s1, st
62e0: 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d  ring s2)..    {.
62f0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
6300: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74  NDARD..      byt
6310: 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62  e[] b1;..      b
6320: 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20  yte[] b2;..     
6330: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
6340: 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20  oding converter 
6350: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
6360: 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20   switch (enc).. 
6370: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6380: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
6390: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a  codingEnum.UTF8:
63a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
63b0: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
63c0: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46  ext.Encoding.UTF
63d0: 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  8;..          br
63e0: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
63f0: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
6400: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45  dingEnum.UTF16LE
6410: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
6420: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
6430: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e  Text.Encoding.Un
6440: 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
6450: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
6460: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
6470: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
6480: 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20  16BE:..         
6490: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
64a0: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
64b0: 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f  g.BigEndianUnico
64c0: 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
64d0: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  reak;..      }..
64e0: 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e  ..      b1 = con
64f0: 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
6500: 73 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d  s1);..      b2 =
6510: 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79   converter.GetBy
6520: 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20  tes(s2);....    
6530: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
6540: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6550: 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
6560: 6c 63 6f 6d 70 61 72 65 28 63 6f 6e 74 65 78 74  lcompare(context
6570: 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c  , b1, b1.Length,
6580: 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b   b2, b2.Length);
6590: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
65a0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
65b0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
65c0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
65d0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
65e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
65f0: 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f  ContextCollateCo
6600: 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45  mpare(CollationE
6610: 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c  ncodingEnum enc,
6620: 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c   IntPtr context,
6630: 20 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61 72   char[] c1, char
6640: 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 23  [] c2)..    {..#
6650: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
6660: 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b  ARD..      byte[
6670: 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74  ] b1;..      byt
6680: 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53  e[] b2;..      S
6690: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
66a0: 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20  ing converter = 
66b0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73  null;....      s
66c0: 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20  witch (enc)..   
66d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61     {..        ca
66e0: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
66f0: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a  dingEnum.UTF8:..
6700: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
6710: 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
6720: 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b  t.Encoding.UTF8;
6730: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
6740: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
6750: 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
6760: 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d  ngEnum.UTF16LE:.
6770: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
6780: 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
6790: 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63  xt.Encoding.Unic
67a0: 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
67b0: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
67c0: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
67d0: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
67e0: 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  BE:..          c
67f0: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
6800: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
6810: 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65  BigEndianUnicode
6820: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
6830: 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ak;..      }....
6840: 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65        b1 = conve
6850: 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 31  rter.GetBytes(c1
6860: 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63  );..      b2 = c
6870: 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
6880: 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  s(c2);....      
6890: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
68a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
68b0: 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63  e3_context_collc
68c0: 6f 6d 70 61 72 65 28 63 6f 6e 74 65 78 74 2c 20  ompare(context, 
68d0: 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62  b1, b1.Length, b
68e0: 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a  2, b2.Length);..
68f0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
6900: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
6910: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
6920: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
6930: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
6940: 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 61 74   override Collat
6950: 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65 74 43  ionSequence GetC
6960: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
6970: 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20  (SQLiteFunction 
6980: 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e  func, IntPtr con
6990: 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  text)..    {..#i
69a0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
69b0: 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74  RD..      Collat
69c0: 69 6f 6e 53 65 71 75 65 6e 63 65 20 73 65 71 20  ionSequence seq 
69d0: 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53  = new CollationS
69e0: 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20  equence();..    
69f0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
6a00: 20 20 69 6e 74 20 74 79 70 65 3b 0d 0a 20 20 20    int type;..   
6a10: 20 20 20 69 6e 74 20 65 6e 63 3b 0d 0a 20 20 20     int enc;..   
6a20: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
6a30: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6a40: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
6a50: 74 5f 63 6f 6c 6c 73 65 71 28 63 6f 6e 74 65 78  t_collseq(contex
6a60: 74 2c 20 6f 75 74 20 74 79 70 65 2c 20 6f 75 74  t, out type, out
6a70: 20 65 6e 63 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d   enc, out len);.
6a80: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 21  ...      if (p !
6a90: 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d 65  = null) seq.Name
6aa0: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
6ab0: 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20  p, len);..      
6ac0: 73 65 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c 6c  seq.Type = (Coll
6ad0: 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74 79  ationTypeEnum)ty
6ae0: 70 65 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 5f  pe;..      seq._
6af0: 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20 20  func = func;..  
6b00: 20 20 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e 67      seq.Encoding
6b10: 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63   = (CollationEnc
6b20: 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a  odingEnum)enc;..
6b30: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 73  ..      return s
6b40: 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  eq;..#else..    
6b50: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
6b60: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
6b70: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
6b80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
6b90: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
6ba0: 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ong GetParamValu
6bb0: 65 42 79 74 65 73 28 49 6e 74 50 74 72 20 70 2c  eBytes(IntPtr p,
6bc0: 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74   int nDataOffset
6bd0: 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20  , byte[] bDest, 
6be0: 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20  int nStart, int 
6bf0: 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d  nLength)..    {.
6c00: 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20  .      int nlen 
6c10: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6c20: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
6c30: 6c 75 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a 0d  lue_bytes(p);...
6c40: 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20  .      // If no 
6c50: 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66  destination buff
6c60: 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73  er, return the s
6c70: 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20  ize needed...   
6c80: 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20     if (bDest == 
6c90: 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65  null) return nle
6ca0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20  n;....      int 
6cb0: 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74  nCopied = nLengt
6cc0: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  h;....      if (
6cd0: 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74  nCopied + nStart
6ce0: 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29   > bDest.Length)
6cf0: 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74   nCopied = bDest
6d00: 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74  .Length - nStart
6d10: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ;..      if (nCo
6d20: 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73  pied + nDataOffs
6d30: 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69  et > nlen) nCopi
6d40: 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74  ed = nlen - nDat
6d50: 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20  aOffset;....    
6d60: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20    if (nCopied > 
6d70: 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  0)..      {..   
6d80: 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20       IntPtr ptr 
6d90: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6da0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
6db0: 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a  lue_blob(p);....
6dc0: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
6dd0: 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74  Copy((IntPtr)(pt
6de0: 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44  r.ToInt64() + nD
6df0: 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73  ataOffset), bDes
6e00: 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
6e10: 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ed);..      }.. 
6e20: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
6e30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70   {..        nCop
6e40: 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ied = 0;..      
6e50: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
6e60: 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20  n nCopied;..    
6e70: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
6e80: 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c  l override doubl
6e90: 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 44  e GetParamValueD
6ea0: 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74 72  ouble(IntPtr ptr
6eb0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6ec0: 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23  double value;..#
6ed0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
6ee0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
6ef0: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73       value = Uns
6f00: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6f10: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64  .sqlite3_value_d
6f20: 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c  ouble(ptr);..#el
6f30: 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  se..      Unsafe
6f40: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6f50: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
6f60: 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20  le_interop(ptr, 
6f70: 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  out value);..#en
6f80: 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72  dif..      retur
6f90: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
6fa0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
6fb0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74  override int Get
6fc0: 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32 28  ParamValueInt32(
6fd0: 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
6fe0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
6ff0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7000: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
7010: 75 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20  ue_int(ptr);..  
7020: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
7030: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
7040: 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49  g GetParamValueI
7050: 6e 74 36 34 28 49 6e 74 50 74 72 20 70 74 72 29  nt64(IntPtr ptr)
7060: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49  ..    {..      I
7070: 6e 74 36 34 20 76 61 6c 75 65 3b 0d 0a 23 69 66  nt64 value;..#if
7080: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
7090: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
70a0: 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66     value = Unsaf
70b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
70c0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
70d0: 36 34 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d  64(ptr);..#else.
70e0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
70f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7100: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69  e3_value_int64_i
7110: 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20  nterop(ptr, out 
7120: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
7130: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61  .      return va
7140: 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lue;..    }.... 
7150: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
7160: 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 50  ride string GetP
7170: 61 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49 6e  aramValueText(In
7180: 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
7190: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
71a0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
71b0: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65  t len;..      re
71c0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
71d0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
71e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
71f0: 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70  lue_text_interop
7200: 28 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29 2c 20  (ptr, out len), 
7210: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
7220: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
7230: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
7240: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7250: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70  te3_value_text(p
7260: 74 72 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  tr), -1);..#endi
7270: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
7280: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7290: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 47  e TypeAffinity G
72a0: 65 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65  etParamValueType
72b0: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
72c0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
72d0: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
72e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
72f0: 6c 75 65 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a  lue_type(ptr);..
7300: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
7310: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
7320: 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49  oid ReturnBlob(I
7330: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62  ntPtr context, b
7340: 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20  yte[] value)..  
7350: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
7360: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7370: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c  qlite3_result_bl
7380: 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75  ob(context, valu
7390: 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c  e, value.Length,
73a0: 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
73b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    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 52 65 74 75 72 6e 44 6f 75 62 6c  void ReturnDoubl
73e0: 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  e(IntPtr context
73f0: 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d  , double value).
7400: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41  .    {..#if !PLA
7410: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
7420: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e  MEWORK..      Un
7430: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7440: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
7450: 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c  _double(context,
7460: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
7470: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
7480: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7490: 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65  e3_result_double
74a0: 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
74b0: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
74c0: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
74d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
74e0: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
74f0: 6e 45 72 72 6f 72 28 49 6e 74 50 74 72 20 63 6f  nError(IntPtr co
7500: 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61  ntext, string va
7510: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
7520: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
7530: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
7540: 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74  esult_error(cont
7550: 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75  ext, ToUTF8(valu
7560: 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68  e), value.Length
7570: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
7580: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
7590: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e  de void ReturnIn
75a0: 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  t32(IntPtr conte
75b0: 78 74 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a  xt, int value)..
75c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
75d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
75e0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
75f0: 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c  int(context, val
7600: 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ue);..    }.... 
7610: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
7620: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
7630: 49 6e 74 36 34 28 49 6e 74 50 74 72 20 63 6f 6e  Int64(IntPtr con
7640: 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75 65  text, long value
7650: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  )..    {..#if !P
7660: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
7670: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
7680: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7690: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
76a0: 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74  lt_int64(context
76b0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  , value);..#else
76c0: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
76d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
76e0: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
76f0: 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
7700: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
7710: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
7720: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
7730: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
7740: 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e  nNull(IntPtr con
7750: 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  text)..    {..  
7760: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
7770: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7780: 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74  result_null(cont
7790: 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ext);..    }....
77a0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
77b0: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
77c0: 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e  nText(IntPtr con
77d0: 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c  text, string val
77e0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
77f0: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
7800: 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20  TF8(value);..   
7810: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
7820: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
7830: 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65  esult_text(conte
7840: 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65  xt, ToUTF8(value
7850: 29 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  ), b.Length - 1,
7860: 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
7870: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
7880: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
7890: 49 6e 74 50 74 72 20 41 67 67 72 65 67 61 74 65  IntPtr Aggregate
78a0: 43 6f 6e 74 65 78 74 28 49 6e 74 50 74 72 20 63  Context(IntPtr c
78b0: 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
78c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
78d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
78e0: 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61  .sqlite3_aggrega
78f0: 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65  te_context(conte
7900: 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a  xt, 1);..    }..
7910: 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65  ..    /// Enable
7920: 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78  s or disabled ex
7930: 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f  tended result co
7940: 64 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  des returned by 
7950: 53 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74 65  SQLite..    inte
7960: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
7970: 69 64 20 53 65 74 45 78 74 65 6e 64 65 64 52 65  id SetExtendedRe
7980: 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62  sultCodes(bool b
7990: 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20  OnOff)..    {.. 
79a0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
79b0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
79c0: 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74  _extended_result
79d0: 5f 63 6f 64 65 73 28 5f 73 71 6c 2c 20 28 62 4f  _codes(_sql, (bO
79e0: 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b  nOff ? -1 : 0));
79f0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f  ..    }..    ///
7a00: 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20 53   Gets the last S
7a10: 51 4c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65  QLite error code
7a20: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
7a30: 76 65 72 72 69 64 65 20 69 6e 74 20 52 65 73 75  verride int Resu
7a40: 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d  ltCode()..    {.
7a50: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
7a60: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7a70: 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  s.sqlite3_errcod
7a80: 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  e(_sql);..    }.
7a90: 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68  .    /// Gets th
7aa0: 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 78  e last SQLite ex
7ab0: 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64  tended error cod
7ac0: 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  e..    internal 
7ad0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 45 78 74  override int Ext
7ae0: 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28  endedResultCode(
7af0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7b00: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
7b10: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7b20: 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
7b30: 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ode(_sql);..    
7b40: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64  }....    /// Add
7b50: 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76   a log message v
7b60: 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73 71  ia the SQLite sq
7b70: 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66  lite3_log interf
7b80: 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ace...    intern
7b90: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
7ba0: 20 4c 6f 67 4d 65 73 73 61 67 65 28 69 6e 74 20   LogMessage(int 
7bb0: 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67  iErrCode, string
7bc0: 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20   zMessage)..    
7bd0: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
7be0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7bf0: 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64  ite3_log(iErrCod
7c00: 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73 73 61  e, ToUTF8(zMessa
7c10: 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ge));..    }....
7c20: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
7c30: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 50 61  rride void SetPa
7c40: 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61  ssword(byte[] pa
7c50: 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20  sswordBytes)..  
7c60: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
7c70: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7c80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b  ethods.sqlite3_k
7c90: 65 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72  ey(_sql, passwor
7ca0: 64 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72 64  dBytes, password
7cb0: 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  Bytes.Length);..
7cc0: 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29        if (n > 0)
7cd0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
7ce0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51  eException(n, SQ
7cf0: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
7d00: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7d10: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7d20: 65 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73  e void ChangePas
7d30: 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77  sword(byte[] new
7d40: 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a  PasswordBytes)..
7d50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
7d60: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
7d70: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7d80: 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77  _rekey(_sql, new
7d90: 50 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20 28  PasswordBytes, (
7da0: 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73  newPasswordBytes
7db0: 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20   == null) ? 0 : 
7dc0: 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73  newPasswordBytes
7dd0: 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20  .Length);..     
7de0: 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f   if (n > 0) thro
7df0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
7e00: 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c  ption(n, SQLiteL
7e10: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
7e20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
7e30: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
7e40: 64 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28  d SetUpdateHook(
7e50: 53 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c  SQLiteUpdateCall
7e60: 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
7e70: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
7e80: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7e90: 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b  ite3_update_hook
7ea0: 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
7eb0: 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
7ec0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7ed0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
7ee0: 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51  SetCommitHook(SQ
7ef0: 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  LiteCommitCallba
7f00: 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
7f10: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
7f20: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7f30: 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f  e3_commit_hook(_
7f40: 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
7f50: 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
7f60: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
7f70: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
7f80: 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53  tTraceCallback(S
7f90: 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61  QLiteTraceCallba
7fa0: 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
7fb0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
7fc0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7fd0: 65 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66  e3_trace(_sql, f
7fe0: 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
7ff0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
8000: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8010: 64 65 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62  de void SetRollb
8020: 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f  ackHook(SQLiteRo
8030: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66  llbackCallback f
8040: 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
8050: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
8060: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
8070: 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71  ollback_hook(_sq
8080: 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
8090: 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
80a0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
80b0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f  y>..    /// Allo
80c0: 77 73 20 74 68 65 20 73 65 74 74 69 6e 67 20 6f  ws the setting o
80d0: 66 20 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c  f a logging call
80e0: 62 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20  back invoked by 
80f0: 53 51 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a 20  SQLite when a.. 
8100: 20 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74     /// log event
8110: 20 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f   occurs.  Only o
8120: 6e 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20  ne callback may 
8130: 62 65 20 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c  be set.  If NULL
8140: 20 69 73 20 70 61 73 73 65 64 2c 0d 0a 20 20 20   is passed,..   
8150: 20 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67   /// the logging
8160: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72   callback is unr
8170: 65 67 69 73 74 65 72 65 64 2e 0d 0a 20 20 20 20  egistered...    
8180: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
8190: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
81a0: 61 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65 20 63  ame="func">The c
81b0: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
81c0: 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72   to invoke.</par
81d0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
81e0: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20  turns>Returns a 
81f0: 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74  result code</ret
8200: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
8210: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
8220: 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28   SetLogCallback(
8230: 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63  SQLiteLogCallbac
8240: 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
8250: 20 20 20 20 20 20 20 20 69 6e 74 20 72 63 20 3d          int rc =
8260: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
8270: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
8280: 66 69 67 28 28 69 6e 74 29 53 51 4c 69 74 65 43  fig((int)SQLiteC
8290: 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c  onfigOpsEnum.SQL
82a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20  ITE_CONFIG_LOG, 
82b0: 66 75 6e 63 2c 20 28 49 6e 74 50 74 72 29 30 29  func, (IntPtr)0)
82c0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
82d0: 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n rc;..    }....
82e0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
82f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65  >..    /// Helpe
8300: 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65  r function to re
8310: 74 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20  trieve a column 
8320: 6f 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20  of data from an 
8330: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
8340: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
8350: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
8360: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74  param name="stmt
8370: 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  ">The statement 
8380: 62 65 69 6e 67 20 73 74 65 70 28 29 27 64 20 74  being step()'d t
8390: 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a  hrough</param>..
83a0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
83b0: 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20  ame="index">The 
83c0: 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20  column index to 
83d0: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
83e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
83f0: 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20   name="typ">The 
8400: 74 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e  type of data con
8410: 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f  tained in the co
8420: 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74  lumn.  If Uninit
8430: 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75  ialized, this fu
8440: 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72  nction will retr
8450: 69 65 76 65 20 74 68 65 20 64 61 74 61 74 79 70  ieve the datatyp
8460: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  e information.</
8470: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
8480: 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73  <returns>Returns
8490: 20 74 68 65 20 64 61 74 61 20 69 6e 20 74 68 65   the data in the
84a0: 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73   column</returns
84b0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
84c0: 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20  override object 
84d0: 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53  GetValue(SQLiteS
84e0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
84f0: 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65  nt index, SQLite
8500: 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b  Type typ)..    {
8510: 0d 0a 20 20 20 20 20 20 69 66 20 28 49 73 4e 75  ..      if (IsNu
8520: 6c 6c 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  ll(stmt, index))
8530: 20 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56   return DBNull.V
8540: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70  alue;..      Typ
8550: 65 41 66 66 69 6e 69 74 79 20 61 66 66 20 3d 20  eAffinity aff = 
8560: 74 79 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20  typ.Affinity;.. 
8570: 20 20 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75       Type t = nu
8580: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ll;....      if 
8590: 28 74 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54  (typ.Type != DbT
85a0: 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20  ype.Object)..   
85b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20     {..        t 
85c0: 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  = SQLiteConvert.
85d0: 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65  SQLiteTypeToType
85e0: 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
85f0: 61 66 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69  aff = TypeToAffi
8600: 6e 69 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20  nity(t);..      
8610: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63  }....      switc
8620: 68 20 28 61 66 66 29 0d 0a 20 20 20 20 20 20 7b  h (aff)..      {
8630: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
8640: 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62  ypeAffinity.Blob
8650: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  :..          if 
8660: 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54  (typ.Type == DbT
8670: 79 70 65 2e 47 75 69 64 20 26 26 20 74 79 70 2e  ype.Guid && typ.
8680: 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65  Affinity == Type
8690: 41 66 66 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a  Affinity.Text)..
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
86b0: 72 6e 20 6e 65 77 20 47 75 69 64 28 47 65 74 54  rn new Guid(GetT
86c0: 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
86d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
86e0: 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 47 65 74  int n = (int)Get
86f0: 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65  Bytes(stmt, inde
8700: 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30  x, 0, null, 0, 0
8710: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 79  );..          by
8720: 74 65 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79 74  te[] b = new byt
8730: 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20  e[n];..         
8740: 20 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20   GetBytes(stmt, 
8750: 69 6e 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20  index, 0, b, 0, 
8760: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
8770: 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d   if (typ.Type ==
8780: 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20   DbType.Guid && 
8790: 6e 20 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20 20  n == 16)..      
87a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
87b0: 20 47 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20   Guid(b);....   
87c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 3b         return b;
87d0: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
87e0: 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65  ypeAffinity.Date
87f0: 54 69 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  Time:..         
8800: 20 72 65 74 75 72 6e 20 47 65 74 44 61 74 65 54   return GetDateT
8810: 69 6d 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ime(stmt, index)
8820: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
8830: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
8840: 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ble:..          
8850: 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72  if (t == null) r
8860: 65 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28  eturn GetDouble(
8870: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
8880: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
8890: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
88a0: 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65  n Convert.Change
88b0: 54 79 70 65 28 47 65 74 44 6f 75 62 6c 65 28 73  Type(GetDouble(s
88c0: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20  tmt, index), t, 
88d0: 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
88e0: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
88f0: 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20  y.Int64:..      
8900: 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c      if (t == nul
8910: 6c 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74  l) return GetInt
8920: 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  64(stmt, index);
8930: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
8940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
8950: 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61  turn Convert.Cha
8960: 6e 67 65 54 79 70 65 28 47 65 74 49 6e 74 36 34  ngeType(GetInt64
8970: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74  (stmt, index), t
8980: 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
8990: 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20    default:..    
89a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
89b0: 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
89c0: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
89d0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
89e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
89f0: 47 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c  GetCursorForTabl
8a00: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
8a10: 74 20 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20  t stmt, int db, 
8a20: 69 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20  int rootPage).. 
8a30: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
8a40: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
8a50: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
8a60: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8a70: 69 74 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f  ite3_table_curso
8a80: 72 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  r(stmt._sqlite_s
8a90: 74 6d 74 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67  tmt, db, rootPag
8aa0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
8ab0: 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65    return -1;..#e
8ac0: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
8ad0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
8ae0: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77  ride long GetRow
8af0: 49 64 46 6f 72 43 75 72 73 6f 72 28 53 51 4c 69  IdForCursor(SQLi
8b00: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
8b10: 2c 20 69 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20  , int cursor).. 
8b20: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
8b30: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
8b40: 20 20 6c 6f 6e 67 20 72 6f 77 69 64 3b 0d 0a 20    long rowid;.. 
8b50: 20 20 20 20 20 69 6e 74 20 72 63 20 3d 20 55 6e       int rc = Un
8b60: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8b70: 73 2e 73 71 6c 69 74 65 33 5f 63 75 72 73 6f 72  s.sqlite3_cursor
8b80: 5f 72 6f 77 69 64 28 73 74 6d 74 2e 5f 73 71 6c  _rowid(stmt._sql
8b90: 69 74 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72  ite_stmt, cursor
8ba0: 2c 20 6f 75 74 20 72 6f 77 69 64 29 3b 0d 0a 20  , out rowid);.. 
8bb0: 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 30       if (rc == 0
8bc0: 29 20 72 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d  ) return rowid;.
8bd0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
8be0: 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  0;..#else..     
8bf0: 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64   return 0;..#end
8c00: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
8c10: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8c20: 64 65 20 76 6f 69 64 20 47 65 74 49 6e 64 65 78  de void GetIndex
8c30: 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e  ColumnExtendedIn
8c40: 66 6f 28 73 74 72 69 6e 67 20 64 61 74 61 62 61  fo(string databa
8c50: 73 65 2c 20 73 74 72 69 6e 67 20 69 6e 64 65 78  se, string index
8c60: 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c  , string column,
8c70: 20 6f 75 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64   out int sortMod
8c80: 65 2c 20 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72  e, out int onErr
8c90: 6f 72 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63  or, out string c
8ca0: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
8cb0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
8cc0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
8cd0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c        IntPtr col
8ce0: 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 6f  l;..      int co
8cf0: 6c 6c 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e  lllen;..      in
8d00: 74 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  t rc;....      r
8d10: 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
8d20: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8d30: 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66  index_column_inf
8d40: 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  o_interop(_sql, 
8d50: 54 6f 55 54 46 38 28 64 61 74 61 62 61 73 65 29  ToUTF8(database)
8d60: 2c 20 54 6f 55 54 46 38 28 69 6e 64 65 78 29 2c  , ToUTF8(index),
8d70: 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c   ToUTF8(column),
8d80: 20 6f 75 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f   out sortMode, o
8d90: 75 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20  ut onError, out 
8da0: 63 6f 6c 6c 2c 20 6f 75 74 20 63 6f 6c 6c 6c 65  coll, out collle
8db0: 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72  n);..      if (r
8dc0: 63 20 21 3d 20 30 29 20 74 68 72 6f 77 20 6e 65  c != 0) throw ne
8dd0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
8de0: 6e 28 72 63 2c 20 22 22 29 3b 0d 0a 0d 0a 20 20  n(rc, "");....  
8df0: 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71      collationSeq
8e00: 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74  uence = UTF8ToSt
8e10: 72 69 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c  ring(coll, colll
8e20: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
8e30: 20 20 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b     sortMode = 0;
8e40: 0d 0a 20 20 20 20 20 20 6f 6e 45 72 72 6f 72 20  ..      onError 
8e50: 3d 20 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c  = 2;..      coll
8e60: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20  ationSequence = 
8e70: 22 42 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69  "BINARY";..#endi
8e80: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
8e90: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
8ea0: 65 20 69 6e 74 20 46 69 6c 65 43 6f 6e 74 72 6f  e int FileContro
8eb0: 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d 65  l(string zDbName
8ec0: 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74 72  , int op, IntPtr
8ed0: 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a 20   pArg)..    {.. 
8ee0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
8ef0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8f00: 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
8f10: 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62 4e  trol(_sql, (zDbN
8f20: 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54  ame != null) ? T
8f30: 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29 20 3a  oUTF8(zDbName) :
8f40: 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67 29   null, op, pArg)
8f50: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d  ;..    }..  }..}
8f60: 0d 0a                                            ..