System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 464a64dd65d9907d27ab66d8defbad0ccab71940:


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 0a 20 2a 20  ************. * 
0040: 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61  ADO.NET 2.0 Data
0050: 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51   Provider for SQ
0060: 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58  Lite Version 3.X
0070: 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52  . * Written by R
0080: 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72  obert Simpson (r
0090: 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c  obert@blackcastl
00a0: 65 73 6f 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20  esoft.com). * . 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a   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: 2f 0a 0a 6e 61 6d 65 73 70 61 63 65 20 53 79 73  /..namespace Sys
0130: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0a  tem.Data.SQLite.
0140: 7b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  {.  using System
0150: 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ;.  using System
0160: 2e 44 61 74 61 3b 0a 20 20 75 73 69 6e 67 20 53  .Data;.  using S
0170: 79 73 74 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e  ystem.Runtime.In
0180: 74 65 72 6f 70 53 65 72 76 69 63 65 73 3b 0a 20  teropServices;. 
0190: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f   using System.Co
01a0: 6c 6c 65 63 74 69 6f 6e 73 2e 47 65 6e 65 72 69  llections.Generi
01b0: 63 3b 0a 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  c;..  /// <summa
01c0: 72 79 3e 0a 20 20 2f 2f 2f 20 54 68 69 73 20 69  ry>.  /// This i
01d0: 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 70 72  nternal class pr
01e0: 6f 76 69 64 65 73 20 74 68 65 20 66 6f 75 6e 64  ovides the found
01f0: 61 74 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20  ation of SQLite 
0200: 73 75 70 70 6f 72 74 2e 20 20 49 74 20 64 65 66  support.  It def
0210: 69 6e 65 73 20 61 6c 6c 20 74 68 65 20 61 62 73  ines all the abs
0220: 74 72 61 63 74 20 6d 65 6d 62 65 72 73 20 6e 65  tract members ne
0230: 65 64 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  eded to implemen
0240: 74 0a 20 20 2f 2f 2f 20 61 20 53 51 4c 69 74 65  t.  /// a SQLite
0250: 20 64 61 74 61 20 70 72 6f 76 69 64 65 72 2c 20   data provider, 
0260: 61 6e 64 20 69 6e 68 65 72 69 74 73 20 66 72 6f  and inherits fro
0270: 6d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 20  m SQLiteConvert 
0280: 77 68 69 63 68 20 61 6c 6c 6f 77 73 20 66 6f 72  which allows for
0290: 20 73 69 6d 70 6c 65 20 74 72 61 6e 73 6c 61 74   simple translat
02a0: 69 6f 6e 73 20 6f 66 20 73 74 72 69 6e 67 20 74  ions of string t
02b0: 6f 20 61 6e 64 20 66 72 6f 6d 20 53 51 4c 69 74  o and from SQLit
02c0: 65 2e 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  e..  /// </summa
02d0: 72 79 3e 0a 20 20 69 6e 74 65 72 6e 61 6c 20 61  ry>.  internal a
02e0: 62 73 74 72 61 63 74 20 63 6c 61 73 73 20 53 51  bstract class SQ
02f0: 4c 69 74 65 42 61 73 65 20 3a 20 53 51 4c 69 74  LiteBase : SQLit
0300: 65 43 6f 6e 76 65 72 74 2c 20 49 44 69 73 70 6f  eConvert, IDispo
0310: 73 61 62 6c 65 0a 20 20 7b 0a 20 20 20 20 69 6e  sable.  {.    in
0320: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 42 61 73  ternal SQLiteBas
0330: 65 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e(SQLiteDateForm
0340: 61 74 73 20 66 6d 74 29 0a 20 20 20 20 20 20 3a  ats fmt).      :
0350: 20 62 61 73 65 28 66 6d 74 29 20 7b 20 7d 0a 0a   base(fmt) { }..
0360: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0370: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  >.    /// Return
0380: 73 20 61 20 73 74 72 69 6e 67 20 72 65 70 72 65  s a string repre
0390: 73 65 6e 74 69 6e 67 20 74 68 65 20 61 63 74 69  senting the acti
03a0: 76 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51  ve version of SQ
03b0: 4c 69 74 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  Lite.    /// </s
03c0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 69 6e 74 65  ummary>.    inte
03d0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74  rnal abstract st
03e0: 72 69 6e 67 20 56 65 72 73 69 6f 6e 20 7b 20 67  ring Version { g
03f0: 65 74 3b 20 7d 0a 20 20 20 20 2f 2f 2f 20 3c 73  et; }.    /// <s
0400: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0410: 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  Returns the numb
0420: 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 74 68  er of changes th
0430: 65 20 6c 61 73 74 20 65 78 65 63 75 74 69 6e 67  e last executing
0440: 20 69 6e 73 65 72 74 2f 75 70 64 61 74 65 20 63   insert/update c
0450: 61 75 73 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c  aused..    /// <
0460: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 69 6e  /summary>.    in
0470: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
0480: 69 6e 74 20 43 68 61 6e 67 65 73 20 7b 20 67 65  int Changes { ge
0490: 74 3b 20 7d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  t; }.    /// <su
04a0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 4f  mmary>.    /// O
04b0: 70 65 6e 73 20 61 20 64 61 74 61 62 61 73 65 2e  pens a database.
04c0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
04d0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d  ry>.    /// <rem
04e0: 61 72 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20 49 6d  arks>.    /// Im
04f0: 70 6c 65 6d 65 6e 74 65 72 73 20 73 68 6f 75 6c  plementers shoul
0500: 64 20 63 61 6c 6c 20 53 51 4c 69 74 65 46 75 6e  d call SQLiteFun
0510: 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69  ction.BindFuncti
0520: 6f 6e 73 28 29 20 61 6e 64 20 73 61 76 65 20 74  ons() and save t
0530: 68 65 20 61 72 72 61 79 20 61 66 74 65 72 20 6f  he array after o
0540: 70 65 6e 69 6e 67 20 61 20 63 6f 6e 6e 65 63 74  pening a connect
0550: 69 6f 6e 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 62  ion.    /// to b
0560: 69 6e 64 20 61 6c 6c 20 61 74 74 72 69 62 75 74  ind all attribut
0570: 65 64 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20  ed user-defined 
0580: 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 20 63 6f  functions and co
0590: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
05a0: 73 20 74 6f 20 74 68 65 20 6e 65 77 20 63 6f 6e  s to the new con
05b0: 6e 65 63 74 69 6f 6e 2e 0a 20 20 20 20 2f 2f 2f  nection..    ///
05c0: 20 3c 2f 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20   </remarks>.    
05d0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
05e0: 22 73 74 72 46 69 6c 65 6e 61 6d 65 22 3e 54 68  "strFilename">Th
05f0: 65 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68  e filename of th
0600: 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 6f 70  e database to op
0610: 65 6e 2e 20 20 53 51 4c 69 74 65 20 61 75 74 6f  en.  SQLite auto
0620: 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
0630: 73 20 69 74 20 69 66 20 69 74 20 64 6f 65 73 6e  s it if it doesn
0640: 27 74 20 65 78 69 73 74 2e 3c 2f 70 61 72 61 6d  't exist.</param
0650: 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  >.    internal a
0660: 62 73 74 72 61 63 74 20 76 6f 69 64 20 4f 70 65  bstract void Ope
0670: 6e 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c 65  n(string strFile
0680: 6e 61 6d 65 29 3b 0a 20 20 20 20 2f 2f 2f 20 3c  name);.    /// <
0690: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
06a0: 20 43 6c 6f 73 65 73 20 74 68 65 20 63 75 72 72   Closes the curr
06b0: 65 6e 74 6c 79 2d 6f 70 65 6e 20 64 61 74 61 62  ently-open datab
06c0: 61 73 65 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ase..    /// </s
06d0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
06e0: 3c 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20 2f 2f  <remarks>.    //
06f0: 2f 20 41 66 74 65 72 20 74 68 65 20 64 61 74 61  / After the data
0700: 62 61 73 65 20 68 61 73 20 62 65 65 6e 20 63 6c  base has been cl
0710: 6f 73 65 64 20 69 6d 70 6c 65 6d 65 74 65 72 73  osed implemeters
0720: 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 53 51 4c   should call SQL
0730: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69  iteFunction.Unbi
0740: 6e 64 46 75 6e 63 74 69 6f 6e 73 28 29 20 74 6f  ndFunctions() to
0750: 20 64 65 61 6c 6c 6f 63 61 74 65 20 61 6c 6c 20   deallocate all 
0760: 69 6e 74 65 72 6f 70 20 61 6c 6c 6f 63 61 74 65  interop allocate
0770: 64 0a 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79  d.    /// memory
0780: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
0790: 20 74 68 65 20 75 73 65 72 2d 64 65 66 69 6e 65   the user-define
07a0: 64 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 20  d functions and 
07b0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
07c0: 63 65 73 20 74 69 65 64 20 74 6f 20 74 68 65 20  ces tied to the 
07d0: 63 6c 6f 73 65 64 20 63 6f 6e 6e 65 63 74 69 6f  closed connectio
07e0: 6e 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d  n..    /// </rem
07f0: 61 72 6b 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e  arks>.    intern
0800: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
0810: 20 43 6c 6f 73 65 28 29 3b 0a 20 20 20 20 2f 2f   Close();.    //
0820: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
0830: 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 62 75 73  /// Sets the bus
0840: 79 20 74 69 6d 65 6f 75 74 20 6f 6e 20 74 68 65  y timeout on the
0850: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 53 51   connection.  SQ
0860: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 77 69 6c 6c  LiteCommand will
0870: 20 63 61 6c 6c 20 74 68 69 73 20 62 65 66 6f 72   call this befor
0880: 65 20 65 78 65 63 75 74 69 6e 67 20 61 6e 79 20  e executing any 
0890: 63 6f 6d 6d 61 6e 64 2e 0a 20 20 20 20 2f 2f 2f  command..    ///
08a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
08b0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
08c0: 22 6e 54 69 6d 65 6f 75 74 4d 53 22 3e 54 68 65  "nTimeoutMS">The
08d0: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69   number of milli
08e0: 73 65 63 6f 6e 64 73 20 74 6f 20 77 61 69 74 20  seconds to wait 
08f0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
0900: 20 53 51 4c 49 54 45 5f 42 55 53 59 3c 2f 70 61   SQLITE_BUSY</pa
0910: 72 61 6d 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61  ram>.    interna
0920: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
0930: 53 65 74 54 69 6d 65 6f 75 74 28 69 6e 74 20 6e  SetTimeout(int n
0940: 54 69 6d 65 6f 75 74 4d 53 29 3b 0a 20 20 20 20  TimeoutMS);.    
0950: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
0960: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
0970: 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 6c 61  e text of the la
0980: 73 74 20 65 72 72 6f 72 20 69 73 73 75 65 64 20  st error issued 
0990: 62 79 20 53 51 4c 69 74 65 0a 20 20 20 20 2f 2f  by SQLite.    //
09a0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
09b0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f   /// <returns></
09c0: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 69 6e 74  returns>.    int
09d0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73  ernal abstract s
09e0: 74 72 69 6e 67 20 53 51 4c 69 74 65 4c 61 73 74  tring SQLiteLast
09f0: 45 72 72 6f 72 28 29 3b 0a 0a 20 20 20 20 2f 2f  Error();..    //
0a00: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
0a10: 2f 2f 2f 20 50 72 65 70 61 72 65 73 20 61 20 53  /// Prepares a S
0a20: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72  QL statement for
0a30: 20 65 78 65 63 75 74 69 6f 6e 2e 0a 20 20 20 20   execution..    
0a40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
0a50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0a60: 6d 65 3d 22 73 74 72 53 71 6c 22 3e 54 68 65 20  me="strSql">The 
0a70: 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 74 65 78 74  SQL command text
0a80: 20 74 6f 20 70 72 65 70 61 72 65 3c 2f 70 61 72   to prepare</par
0a90: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  am>.    /// <par
0aa0: 61 6d 20 6e 61 6d 65 3d 22 70 72 65 76 69 6f 75  am name="previou
0ab0: 73 22 3e 54 68 65 20 70 72 65 76 69 6f 75 73 20  s">The previous 
0ac0: 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 61 20 6d  statement in a m
0ad0: 75 6c 74 69 2d 73 74 61 74 65 6d 65 6e 74 20 63  ulti-statement c
0ae0: 6f 6d 6d 61 6e 64 2c 20 6f 72 20 6e 75 6c 6c 20  ommand, or null 
0af0: 69 66 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 73  if no previous s
0b00: 74 61 74 65 6d 65 6e 74 20 65 78 69 73 74 73 3c  tatement exists<
0b10: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
0b20: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72  <param name="str
0b30: 52 65 6d 61 69 6e 22 3e 54 68 65 20 72 65 6d 61  Remain">The rema
0b40: 69 6e 64 65 72 20 6f 66 20 74 68 65 20 73 74 61  inder of the sta
0b50: 74 65 6d 65 6e 74 20 74 68 61 74 20 77 61 73 20  tement that was 
0b60: 6e 6f 74 20 70 72 6f 63 65 73 73 65 64 2e 20 20  not processed.  
0b70: 45 61 63 68 20 63 61 6c 6c 20 74 6f 20 70 72 65  Each call to pre
0b80: 70 61 72 65 20 70 61 72 73 65 73 20 74 68 65 0a  pare parses the.
0b90: 20 20 20 20 2f 2f 2f 20 53 51 4c 20 75 70 20 74      /// SQL up t
0ba0: 6f 20 74 6f 20 65 69 74 68 65 72 20 74 68 65 20  o to either the 
0bb0: 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20  end of the text 
0bc0: 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  or to the first 
0bd0: 73 65 6d 69 2d 63 6f 6c 6f 6e 20 64 65 6c 69 6d  semi-colon delim
0be0: 69 74 65 72 2e 20 20 54 68 65 20 72 65 6d 61 69  iter.  The remai
0bf0: 6e 69 6e 67 20 74 65 78 74 20 69 73 20 72 65 74  ning text is ret
0c00: 75 72 6e 65 64 0a 20 20 20 20 2f 2f 2f 20 68 65  urned.    /// he
0c10: 72 65 20 66 6f 72 20 61 20 73 75 62 73 65 71 75  re for a subsequ
0c20: 65 6e 74 20 63 61 6c 6c 20 74 6f 20 50 72 65 70  ent call to Prep
0c30: 61 72 65 28 29 20 75 6e 74 69 6c 20 61 6c 6c 20  are() until all 
0c40: 74 68 65 20 74 65 78 74 20 68 61 73 20 62 65 65  the text has bee
0c50: 6e 20 70 72 6f 63 65 73 73 65 64 2e 3c 2f 70 61  n processed.</pa
0c60: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
0c70: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 6e  turns>Returns an
0c80: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 53 51 4c   initialized SQL
0c90: 69 74 65 53 74 61 74 65 6d 65 6e 74 2e 3c 2f 72  iteStatement.</r
0ca0: 65 74 75 72 6e 73 3e 0a 20 20 20 20 69 6e 74 65  eturns>.    inte
0cb0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53 51  rnal abstract SQ
0cc0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72  LiteStatement Pr
0cd0: 65 70 61 72 65 28 73 74 72 69 6e 67 20 73 74 72  epare(string str
0ce0: 53 71 6c 2c 20 53 51 4c 69 74 65 53 74 61 74 65  Sql, SQLiteState
0cf0: 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 2c 20 6f  ment previous, o
0d00: 75 74 20 73 74 72 69 6e 67 20 73 74 72 52 65 6d  ut string strRem
0d10: 61 69 6e 29 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73  ain);.    /// <s
0d20: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0d30: 53 74 65 70 73 20 74 68 72 6f 75 67 68 20 61 20  Steps through a 
0d40: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
0d50: 6e 74 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  nt..    /// </su
0d60: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
0d70: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74  param name="stmt
0d80: 22 3e 54 68 65 20 53 51 4c 69 74 65 53 74 61 74  ">The SQLiteStat
0d90: 65 6d 65 6e 74 20 74 6f 20 73 74 65 70 20 74 68  ement to step th
0da0: 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0a 20 20  rough</param>.  
0db0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
0dc0: 72 75 65 20 69 66 20 61 20 72 6f 77 20 77 61 73  rue if a row was
0dd0: 20 72 65 74 75 72 6e 65 64 2c 20 46 61 6c 73 65   returned, False
0de0: 20 69 66 20 6e 6f 74 2e 3c 2f 72 65 74 75 72 6e   if not.</return
0df0: 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  s>.    internal 
0e00: 61 62 73 74 72 61 63 74 20 62 6f 6f 6c 20 53 74  abstract bool St
0e10: 65 70 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ep(SQLiteStateme
0e20: 6e 74 20 73 74 6d 74 29 3b 0a 20 20 20 20 2f 2f  nt stmt);.    //
0e30: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
0e40: 2f 2f 2f 20 52 65 73 65 74 73 20 61 20 70 72 65  /// Resets a pre
0e50: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
0e60: 73 6f 20 69 74 20 63 61 6e 20 62 65 20 65 78 65  so it can be exe
0e70: 63 75 74 65 64 20 61 67 61 69 6e 2e 20 20 49 66  cuted again.  If
0e80: 20 74 68 65 20 65 72 72 6f 72 20 72 65 74 75 72   the error retur
0e90: 6e 65 64 20 69 73 20 53 51 4c 49 54 45 5f 53 43  ned is SQLITE_SC
0ea0: 48 45 4d 41 2c 20 0a 20 20 20 20 2f 2f 2f 20 74  HEMA, .    /// t
0eb0: 72 61 6e 73 70 61 72 65 6e 74 6c 79 20 61 74 74  ransparently att
0ec0: 65 6d 70 74 20 74 6f 20 72 65 62 75 69 6c 64 20  empt to rebuild 
0ed0: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
0ee0: 74 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65  t and throw an e
0ef0: 72 72 6f 72 20 69 66 20 74 68 61 74 20 77 61 73  rror if that was
0f00: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 0a 20   not possible.. 
0f10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0f20: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
0f30: 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65   name="stmt">The
0f40: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 72 65   statement to re
0f50: 73 65 74 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  set</param>.    
0f60: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
0f70: 75 72 6e 73 20 2d 31 20 69 66 20 74 68 65 20 73  urns -1 if the s
0f80: 63 68 65 6d 61 20 63 68 61 6e 67 65 64 20 77 68  chema changed wh
0f90: 69 6c 65 20 72 65 73 65 74 74 69 6e 67 2c 20 30  ile resetting, 0
0fa0: 20 69 66 20 74 68 65 20 72 65 73 65 74 20 77 61   if the reset wa
0fb0: 73 20 73 75 63 65 73 73 66 75 6c 20 6f 72 20 36  s sucessful or 6
0fc0: 20 28 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 29   (SQLITE_LOCKED)
0fd0: 20 69 66 20 74 68 65 20 72 65 73 65 74 20 66 61   if the reset fa
0fe0: 69 6c 65 64 20 64 75 65 20 74 6f 20 61 20 6c 6f  iled due to a lo
0ff0: 63 6b 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  ck</returns>.   
1000: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
1010: 63 74 20 69 6e 74 20 52 65 73 65 74 28 53 51 4c  ct int Reset(SQL
1020: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
1030: 74 29 3b 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61  t);..    interna
1040: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
1050: 43 61 6e 63 65 6c 28 29 3b 0a 0a 20 20 20 20 69  Cancel();..    i
1060: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1070: 20 76 6f 69 64 20 42 69 6e 64 5f 44 6f 75 62 6c   void Bind_Doubl
1080: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
1090: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
10a0: 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29  x, double value)
10b0: 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ;.    internal a
10c0: 62 73 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e  bstract void Bin
10d0: 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  d_Int32(SQLiteSt
10e0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
10f0: 74 20 69 6e 64 65 78 2c 20 49 6e 74 33 32 20 76  t index, Int32 v
1100: 61 6c 75 65 29 3b 0a 20 20 20 20 69 6e 74 65 72  alue);.    inter
1110: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
1120: 64 20 42 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c  d Bind_Int64(SQL
1130: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
1140: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 49 6e  t, int index, In
1150: 74 36 34 20 76 61 6c 75 65 29 3b 0a 20 20 20 20  t64 value);.    
1160: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
1170: 74 20 76 6f 69 64 20 42 69 6e 64 5f 54 65 78 74  t void Bind_Text
1180: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
1190: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
11a0: 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 3b  , string value);
11b0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
11c0: 73 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64  stract void Bind
11d0: 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53 74 61 74  _Blob(SQLiteStat
11e0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
11f0: 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62 6c  index, byte[] bl
1200: 6f 62 44 61 74 61 29 3b 0a 20 20 20 20 69 6e 74  obData);.    int
1210: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
1220: 6f 69 64 20 42 69 6e 64 5f 44 61 74 65 54 69 6d  oid Bind_DateTim
1230: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
1240: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
1250: 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29 3b  x, DateTime dt);
1260: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
1270: 73 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64  stract void Bind
1280: 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74  _Null(SQLiteStat
1290: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
12a0: 69 6e 64 65 78 29 3b 0a 0a 20 20 20 20 69 6e 74  index);..    int
12b0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69  ernal abstract i
12c0: 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75  nt Bind_ParamCou
12d0: 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nt(SQLiteStateme
12e0: 6e 74 20 73 74 6d 74 29 3b 0a 20 20 20 20 69 6e  nt stmt);.    in
12f0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
1300: 73 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61  string Bind_Para
1310: 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  mName(SQLiteStat
1320: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
1330: 69 6e 64 65 78 29 3b 0a 20 20 20 20 69 6e 74 65  index);.    inte
1340: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e  rnal abstract in
1350: 74 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65  t Bind_ParamInde
1360: 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  x(SQLiteStatemen
1370: 74 20 73 74 6d 74 2c 20 73 74 72 69 6e 67 20 70  t stmt, string p
1380: 61 72 61 6d 4e 61 6d 65 29 3b 0a 0a 20 20 20 20  aramName);..    
1390: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
13a0: 74 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e  t int ColumnCoun
13b0: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
13c0: 74 20 73 74 6d 74 29 3b 0a 20 20 20 20 69 6e 74  t stmt);.    int
13d0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73  ernal abstract s
13e0: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65  tring ColumnName
13f0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
1400: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
1410: 29 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  );.    internal 
1420: 61 62 73 74 72 61 63 74 20 54 79 70 65 41 66 66  abstract TypeAff
1430: 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69  inity ColumnAffi
1440: 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61 74 65  nity(SQLiteState
1450: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
1460: 6e 64 65 78 29 3b 0a 20 20 20 20 69 6e 74 65 72  ndex);.    inter
1470: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72  nal abstract str
1480: 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28 53  ing ColumnType(S
1490: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
14a0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
14b0: 6f 75 74 20 54 79 70 65 41 66 66 69 6e 69 74 79  out TypeAffinity
14c0: 20 6e 41 66 66 69 6e 69 74 79 29 3b 0a 20 20 20   nAffinity);.   
14d0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
14e0: 63 74 20 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64  ct int ColumnInd
14f0: 65 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ex(SQLiteStateme
1500: 6e 74 20 73 74 6d 74 2c 20 73 74 72 69 6e 67 20  nt stmt, string 
1510: 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0a 20 20 20  columnName);.   
1520: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
1530: 63 74 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  ct string Column
1540: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c  OriginalName(SQL
1550: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
1560: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0a 20  t, int index);. 
1570: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
1580: 72 61 63 74 20 73 74 72 69 6e 67 20 43 6f 6c 75  ract string Colu
1590: 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28 53  mnDatabaseName(S
15a0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
15b0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b  tmt, int index);
15c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
15d0: 73 74 72 61 63 74 20 73 74 72 69 6e 67 20 43 6f  stract string Co
15e0: 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 53 51  lumnTableName(SQ
15f0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
1600: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0a  mt, int index);.
1610: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
1620: 74 72 61 63 74 20 76 6f 69 64 20 43 6f 6c 75 6d  tract void Colum
1630: 6e 4d 65 74 61 44 61 74 61 28 73 74 72 69 6e 67  nMetaData(string
1640: 20 64 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e   dataBase, strin
1650: 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20  g table, string 
1660: 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 73 74 72 69  column, out stri
1670: 6e 67 20 64 61 74 61 54 79 70 65 2c 20 6f 75 74  ng dataType, out
1680: 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53   string collateS
1690: 65 71 75 65 6e 63 65 2c 20 6f 75 74 20 62 6f 6f  equence, out boo
16a0: 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62  l notNull, out b
16b0: 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20  ool primaryKey, 
16c0: 6f 75 74 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63  out bool autoInc
16d0: 72 65 6d 65 6e 74 29 3b 0a 0a 20 20 20 20 69 6e  rement);..    in
16e0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
16f0: 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65  double GetDouble
1700: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
1710: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
1720: 29 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  );.    internal 
1730: 61 62 73 74 72 61 63 74 20 49 6e 74 33 32 20 47  abstract Int32 G
1740: 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  etInt32(SQLiteSt
1750: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
1760: 74 20 69 6e 64 65 78 29 3b 0a 20 20 20 20 69 6e  t index);.    in
1770: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
1780: 49 6e 74 36 34 20 47 65 74 49 6e 74 36 34 28 53  Int64 GetInt64(S
1790: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
17a0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b  tmt, int index);
17b0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
17c0: 73 74 72 61 63 74 20 73 74 72 69 6e 67 20 47 65  stract string Ge
17d0: 74 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74  tText(SQLiteStat
17e0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
17f0: 69 6e 64 65 78 29 3b 0a 20 20 20 20 69 6e 74 65  index);.    inte
1800: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 6c 6f  rnal abstract lo
1810: 6e 67 20 47 65 74 42 79 74 65 73 28 53 51 4c 69  ng GetBytes(SQLi
1820: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
1830: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
1840: 20 6e 44 61 74 61 6f 66 66 73 65 74 2c 20 62 79   nDataoffset, by
1850: 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20  te[] bDest, int 
1860: 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e  nStart, int nLen
1870: 67 74 68 29 3b 0a 20 20 20 20 69 6e 74 65 72 6e  gth);.    intern
1880: 61 6c 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67  al abstract long
1890: 20 47 65 74 43 68 61 72 73 28 53 51 4c 69 74 65   GetChars(SQLite
18a0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
18b0: 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e  int index, int n
18c0: 44 61 74 61 6f 66 66 73 65 74 2c 20 63 68 61 72  Dataoffset, char
18d0: 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53  [] bDest, int nS
18e0: 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74  tart, int nLengt
18f0: 68 29 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  h);.    internal
1900: 20 61 62 73 74 72 61 63 74 20 44 61 74 65 54 69   abstract DateTi
1910: 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65 28 53  me GetDateTime(S
1920: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
1930: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b  tmt, int index);
1940: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
1950: 73 74 72 61 63 74 20 62 6f 6f 6c 20 49 73 4e 75  stract bool IsNu
1960: 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ll(SQLiteStateme
1970: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
1980: 65 78 29 3b 0a 0a 20 20 20 20 69 6e 74 65 72 6e  ex);..    intern
1990: 61 6c 20 61 62 73 74 72 61 63 74 20 49 6e 74 50  al abstract IntP
19a0: 74 72 20 43 72 65 61 74 65 43 6f 6c 6c 61 74 69  tr CreateCollati
19b0: 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 43 6f 6c  on(string strCol
19c0: 6c 61 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f  lation, SQLiteCo
19d0: 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 29 3b 0a 20  llation func);. 
19e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
19f0: 72 61 63 74 20 49 6e 74 50 74 72 20 43 72 65 61  ract IntPtr Crea
1a00: 74 65 46 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e  teFunction(strin
1a10: 67 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69  g strFunction, i
1a20: 6e 74 20 6e 41 72 67 73 2c 20 53 51 4c 69 74 65  nt nArgs, SQLite
1a30: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53  Callback func, S
1a40: 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75  QLiteCallback fu
1a50: 6e 63 73 74 65 70 2c 20 53 51 4c 69 74 65 43 61  ncstep, SQLiteCa
1a60: 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c  llback funcfinal
1a70: 29 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  );.    internal 
1a80: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 46 72  abstract void Fr
1a90: 65 65 46 75 6e 63 74 69 6f 6e 28 49 6e 74 50 74  eeFunction(IntPt
1aa0: 72 20 63 6f 6f 6b 69 65 29 3b 0a 0a 20 20 20 20  r cookie);..    
1ab0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
1ac0: 74 20 69 6e 74 20 41 67 67 72 65 67 61 74 65 43  t int AggregateC
1ad0: 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  ount(IntPtr cont
1ae0: 65 78 74 29 3b 0a 20 20 20 20 69 6e 74 65 72 6e  ext);.    intern
1af0: 61 6c 20 61 62 73 74 72 61 63 74 20 49 6e 74 50  al abstract IntP
1b00: 74 72 20 41 67 67 72 65 67 61 74 65 43 6f 6e 74  tr AggregateCont
1b10: 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ext(IntPtr conte
1b20: 78 74 29 3b 0a 0a 20 20 20 20 69 6e 74 65 72 6e  xt);..    intern
1b30: 61 6c 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67  al abstract long
1b40: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79   GetParamValueBy
1b50: 74 65 73 28 49 6e 74 50 74 72 20 70 74 72 2c 20  tes(IntPtr ptr, 
1b60: 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
1b70: 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69   byte[] bDest, i
1b80: 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
1b90: 4c 65 6e 67 74 68 29 3b 0a 20 20 20 20 69 6e 74  Length);.    int
1ba0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 64  ernal abstract d
1bb0: 6f 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61  ouble GetParamVa
1bc0: 6c 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72  lueDouble(IntPtr
1bd0: 20 70 74 72 29 3b 0a 20 20 20 20 69 6e 74 65 72   ptr);.    inter
1be0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74  nal abstract int
1bf0: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e   GetParamValueIn
1c00: 74 33 32 28 49 6e 74 50 74 72 20 70 74 72 29 3b  t32(IntPtr ptr);
1c10: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
1c20: 73 74 72 61 63 74 20 49 6e 74 36 34 20 47 65 74  stract Int64 Get
1c30: 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28  ParamValueInt64(
1c40: 49 6e 74 50 74 72 20 70 74 72 29 3b 0a 20 20 20  IntPtr ptr);.   
1c50: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
1c60: 63 74 20 73 74 72 69 6e 67 20 47 65 74 50 61 72  ct string GetPar
1c70: 61 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74 50  amValueText(IntP
1c80: 74 72 20 70 74 72 29 3b 0a 20 20 20 20 69 6e 74  tr ptr);.    int
1c90: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 54  ernal abstract T
1ca0: 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74 50  ypeAffinity GetP
1cb0: 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49 6e  aramValueType(In
1cc0: 74 50 74 72 20 70 74 72 29 3b 0a 0a 20 20 20 20  tPtr ptr);..    
1cd0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
1ce0: 74 20 76 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f  t void ReturnBlo
1cf0: 62 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  b(IntPtr context
1d00: 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 3b  , byte[] value);
1d10: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
1d20: 73 74 72 61 63 74 20 76 6f 69 64 20 52 65 74 75  stract void Retu
1d30: 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20  rnDouble(IntPtr 
1d40: 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65 20  context, double 
1d50: 76 61 6c 75 65 29 3b 0a 20 20 20 20 69 6e 74 65  value);.    inte
1d60: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
1d70: 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72 28 49  id ReturnError(I
1d80: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73  ntPtr context, s
1d90: 74 72 69 6e 67 20 76 61 6c 75 65 29 3b 0a 20 20  tring value);.  
1da0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
1db0: 61 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e 49  act void ReturnI
1dc0: 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e 74  nt32(IntPtr cont
1dd0: 65 78 74 2c 20 49 6e 74 33 32 20 76 61 6c 75 65  ext, Int32 value
1de0: 29 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  );.    internal 
1df0: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 52 65  abstract void Re
1e00: 74 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72  turnInt64(IntPtr
1e10: 20 63 6f 6e 74 65 78 74 2c 20 49 6e 74 36 34 20   context, Int64 
1e20: 76 61 6c 75 65 29 3b 0a 20 20 20 20 69 6e 74 65  value);.    inte
1e30: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
1e40: 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e  id ReturnNull(In
1e50: 74 50 74 72 20 63 6f 6e 74 65 78 74 29 3b 0a 20  tPtr context);. 
1e60: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
1e70: 72 61 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e  ract void Return
1e80: 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  Text(IntPtr cont
1e90: 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  ext, string valu
1ea0: 65 29 3b 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61  e);..    interna
1eb0: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
1ec0: 53 65 74 50 61 73 73 77 6f 72 64 28 62 79 74 65  SetPassword(byte
1ed0: 5b 5d 20 70 61 73 73 77 6f 72 64 42 79 74 65 73  [] passwordBytes
1ee0: 29 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  );.    internal 
1ef0: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 43 68  abstract void Ch
1f00: 61 6e 67 65 50 61 73 73 77 6f 72 64 28 62 79 74  angePassword(byt
1f10: 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72 64 42  e[] newPasswordB
1f20: 79 74 65 73 29 3b 0a 0a 20 20 20 20 69 6e 74 65  ytes);..    inte
1f30: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
1f40: 69 64 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b  id SetUpdateHook
1f50: 28 53 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c  (SQLiteUpdateCal
1f60: 6c 62 61 63 6b 20 66 75 6e 63 29 3b 0a 20 20 20  lback func);.   
1f70: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
1f80: 63 74 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69  ct void SetCommi
1f90: 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d  tHook(SQLiteComm
1fa0: 69 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  itCallback func)
1fb0: 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ;.    internal a
1fc0: 62 73 74 72 61 63 74 20 76 6f 69 64 20 53 65 74  bstract void Set
1fd0: 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c  RollbackHook(SQL
1fe0: 69 74 65 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  iteRollbackCallb
1ff0: 61 63 6b 20 66 75 6e 63 29 3b 0a 0a 20 20 20 20  ack func);..    
2000: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
2010: 74 20 69 6e 74 20 47 65 74 43 75 72 73 6f 72 46  t int GetCursorF
2020: 6f 72 54 61 62 6c 65 28 53 51 4c 69 74 65 53 74  orTable(SQLiteSt
2030: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
2040: 74 20 64 61 74 61 62 61 73 65 2c 20 69 6e 74 20  t database, int 
2050: 72 6f 6f 74 50 61 67 65 29 3b 0a 20 20 20 20 69  rootPage);.    i
2060: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
2070: 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f   long GetRowIdFo
2080: 72 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74  rCursor(SQLiteSt
2090: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
20a0: 74 20 63 75 72 73 6f 72 29 3b 0a 0a 20 20 20 20  t cursor);..    
20b0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
20c0: 74 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75  t object GetValu
20d0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
20e0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
20f0: 78 2c 20 72 65 66 20 53 51 4c 69 74 65 54 79 70  x, ref SQLiteTyp
2100: 65 20 74 79 70 29 3b 0a 0a 20 20 20 20 70 72 6f  e typ);..    pro
2110: 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 76  tected virtual v
2120: 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c  oid Dispose(bool
2130: 20 62 44 69 73 70 6f 73 69 6e 67 29 0a 20 20 20   bDisposing).   
2140: 20 7b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75   {.    }..    pu
2150: 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73  blic void Dispos
2160: 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  e().    {.      
2170: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0a 20  Dispose(true);. 
2180: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e     }..    intern
2190: 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  al static string
21a0: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
21b0: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
21c0: 6e 48 61 6e 64 6c 65 20 64 62 29 0a 20 20 20 20  nHandle db).    
21d0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  {.      int len;
21e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
21f0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
2200: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
2210: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 5f 69 6e  qlite3_errmsg_in
2220: 74 65 72 6f 70 28 64 62 2c 20 6f 75 74 20 6c 65  terop(db, out le
2230: 6e 29 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 7d 0a  n), len);.    }.
2240: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
2250: 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69  atic string SQLi
2260: 74 65 4c 61 73 74 45 72 72 6f 72 28 53 51 4c 69  teLastError(SQLi
2270: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
2280: 65 20 73 74 6d 74 29 0a 20 20 20 20 7b 0a 20 20  e stmt).    {.  
2290: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 20      int len;.   
22a0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
22b0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
22c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
22d0: 65 33 5f 65 72 72 6d 73 67 5f 73 74 6d 74 5f 69  e3_errmsg_stmt_i
22e0: 6e 74 65 72 6f 70 28 73 74 6d 74 2c 20 6f 75 74  nterop(stmt, out
22f0: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0a 20 20 20   len), len);.   
2300: 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c   }..    internal
2310: 20 73 74 61 74 69 63 20 76 6f 69 64 20 46 69 6e   static void Fin
2320: 61 6c 69 7a 65 53 74 61 74 65 6d 65 6e 74 28 53  alizeStatement(S
2330: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
2340: 6e 64 6c 65 20 73 74 6d 74 29 0a 20 20 20 20 7b  ndle stmt).    {
2350: 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55  .      int n = U
2360: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2370: 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  ds.sqlite3_final
2380: 69 7a 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ize_interop(stmt
2390: 29 3b 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e  );.      if (n >
23a0: 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51   0) throw new SQ
23b0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
23c0: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
23d0: 28 73 74 6d 74 29 29 3b 0a 20 20 20 20 7d 0a 0a  (stmt));.    }..
23e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
23f0: 74 69 63 20 76 6f 69 64 20 43 6c 6f 73 65 28 53  tic void Close(S
2400: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
2410: 61 6e 64 6c 65 20 64 62 29 0a 20 20 20 20 7b 0a  andle db).    {.
2420: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
2430: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2440: 73 2e 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f  s.sqlite3_close_
2450: 69 6e 74 65 72 6f 70 28 64 62 29 3b 0a 20 20 20  interop(db);.   
2460: 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68     if (n > 0) th
2470: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
2480: 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74  ception(n, SQLit
2490: 65 4c 61 73 74 45 72 72 6f 72 28 64 62 29 29 3b  eLastError(db));
24a0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a           .    }.  }.}.