System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 7a937ff03d81f10010a8a1ff99c14e2872266a32:


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 44 61 74 61 3b  ing System.Data;
0170: 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ..  using System
0180: 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72 6f 70  .Runtime.Interop
0190: 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75 73 69  Services;..  usi
01a0: 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63  ng System.Collec
01b0: 74 69 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a  tions.Generic;..
01c0: 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79  ..  /// <summary
01d0: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 69 6e  >..  /// This in
01e0: 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 70 72 6f  ternal class pro
01f0: 76 69 64 65 73 20 74 68 65 20 66 6f 75 6e 64 61  vides the founda
0200: 74 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 73  tion of SQLite s
0210: 75 70 70 6f 72 74 2e 20 20 49 74 20 64 65 66 69  upport.  It defi
0220: 6e 65 73 20 61 6c 6c 20 74 68 65 20 61 62 73 74  nes all the abst
0230: 72 61 63 74 20 6d 65 6d 62 65 72 73 20 6e 65 65  ract members nee
0240: 64 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  ded to implement
0250: 0d 0a 20 20 2f 2f 2f 20 61 20 53 51 4c 69 74 65  ..  /// a SQLite
0260: 20 64 61 74 61 20 70 72 6f 76 69 64 65 72 2c 20   data provider, 
0270: 61 6e 64 20 69 6e 68 65 72 69 74 73 20 66 72 6f  and inherits fro
0280: 6d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 20  m SQLiteConvert 
0290: 77 68 69 63 68 20 61 6c 6c 6f 77 73 20 66 6f 72  which allows for
02a0: 20 73 69 6d 70 6c 65 20 74 72 61 6e 73 6c 61 74   simple translat
02b0: 69 6f 6e 73 20 6f 66 20 73 74 72 69 6e 67 20 74  ions of string t
02c0: 6f 20 61 6e 64 20 66 72 6f 6d 20 53 51 4c 69 74  o and from SQLit
02d0: 65 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  e...  /// </summ
02e0: 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72 6e 61 6c  ary>..  internal
02f0: 20 61 62 73 74 72 61 63 74 20 63 6c 61 73 73 20   abstract class 
0300: 53 51 4c 69 74 65 42 61 73 65 20 3a 20 53 51 4c  SQLiteBase : SQL
0310: 69 74 65 43 6f 6e 76 65 72 74 2c 20 49 44 69 73  iteConvert, IDis
0320: 70 6f 73 61 62 6c 65 0d 0a 20 20 7b 0d 0a 20 20  posable..  {..  
0330: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
0340: 65 42 61 73 65 28 53 51 4c 69 74 65 44 61 74 65  eBase(SQLiteDate
0350: 46 6f 72 6d 61 74 73 20 66 6d 74 29 0d 0a 20 20  Formats fmt)..  
0360: 20 20 20 20 3a 20 62 61 73 65 28 66 6d 74 29 20      : base(fmt) 
0370: 7b 20 7d 0d 0a 0d 0a 20 20 20 20 73 74 61 74 69  { }....    stati
0380: 63 20 69 6e 74 65 72 6e 61 6c 20 6f 62 6a 65 63  c internal objec
0390: 74 20 5f 6c 6f 63 6b 20 3d 20 6e 65 77 20 6f 62  t _lock = new ob
03a0: 6a 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f  ject();....    /
03b0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
03c0: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 61 20    /// Returns a 
03d0: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
03e0: 69 6e 67 20 74 68 65 20 61 63 74 69 76 65 20 76  ing the active v
03f0: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
0400: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0410: 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ary>..    intern
0420: 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69  al abstract stri
0430: 6e 67 20 56 65 72 73 69 6f 6e 20 7b 20 67 65 74  ng Version { get
0440: 3b 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ; }..    /// <su
0450: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0460: 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  Returns the numb
0470: 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 74 68  er of changes th
0480: 65 20 6c 61 73 74 20 65 78 65 63 75 74 69 6e 67  e last executing
0490: 20 69 6e 73 65 72 74 2f 75 70 64 61 74 65 20 63   insert/update c
04a0: 61 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  aused...    /// 
04b0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
04c0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
04d0: 74 20 69 6e 74 20 43 68 61 6e 67 65 73 20 7b 20  t int Changes { 
04e0: 67 65 74 3b 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20  get; }..    /// 
04f0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0500: 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20  // Shutdown the 
0510: 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f  SQLite engine so
0520: 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
0530: 72 65 73 74 61 72 74 65 64 20 77 69 74 68 20 64  restarted with d
0540: 69 66 66 65 72 65 6e 74 20 63 6f 6e 66 69 67 20  ifferent config 
0550: 6f 70 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f  options...    //
0560: 2f 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61  / We depend on a
0570: 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  uto initializati
0580: 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a  on to recover...
0590: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
05a0: 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  y>..    internal
05b0: 20 61 62 73 74 72 61 63 74 20 69 6e 74 20 53 68   abstract int Sh
05c0: 75 74 64 6f 77 6e 28 29 3b 0d 0a 20 20 20 20 2f  utdown();..    /
05d0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
05e0: 20 20 2f 2f 2f 20 4f 70 65 6e 73 20 61 20 64 61    /// Opens a da
05f0: 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f  tabase...    ///
0600: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0610: 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a   /// <remarks>..
0620: 20 20 20 20 2f 2f 2f 20 49 6d 70 6c 65 6d 65 6e      /// Implemen
0630: 74 65 72 73 20 73 68 6f 75 6c 64 20 63 61 6c 6c  ters should call
0640: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e   SQLiteFunction.
0650: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 29 20  BindFunctions() 
0660: 61 6e 64 20 73 61 76 65 20 74 68 65 20 61 72 72  and save the arr
0670: 61 79 20 61 66 74 65 72 20 6f 70 65 6e 69 6e 67  ay after opening
0680: 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20   a connection.. 
0690: 20 20 20 2f 2f 2f 20 74 6f 20 62 69 6e 64 20 61     /// to bind a
06a0: 6c 6c 20 61 74 74 72 69 62 75 74 65 64 20 75 73  ll attributed us
06b0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
06c0: 69 6f 6e 73 20 61 6e 64 20 63 6f 6c 6c 61 74 69  ions and collati
06d0: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 74 6f 20  ng sequences to 
06e0: 74 68 65 20 6e 65 77 20 63 6f 6e 6e 65 63 74 69  the new connecti
06f0: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  on...    /// </r
0700: 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f  emarks>..    ///
0710: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74   <param name="st
0720: 72 46 69 6c 65 6e 61 6d 65 22 3e 54 68 65 20 66  rFilename">The f
0730: 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  ilename of the d
0740: 61 74 61 62 61 73 65 20 74 6f 20 6f 70 65 6e 2e  atabase to open.
0750: 20 20 53 51 4c 69 74 65 20 61 75 74 6f 6d 61 74    SQLite automat
0760: 69 63 61 6c 6c 79 20 63 72 65 61 74 65 73 20 69  ically creates i
0770: 74 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20  t if it doesn't 
0780: 65 78 69 73 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  exist.</param>..
0790: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
07a0: 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20  ame="flags">The 
07b0: 6f 70 65 6e 20 66 6c 61 67 73 20 74 6f 20 75 73  open flags to us
07c0: 65 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20  e when creating 
07d0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 3c 2f  the connection</
07e0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
07f0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 61 78  <param name="max
0800: 50 6f 6f 6c 53 69 7a 65 22 3e 54 68 65 20 6d 61  PoolSize">The ma
0810: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 74 68  ximum size of th
0820: 65 20 70 6f 6f 6c 20 66 6f 72 20 74 68 65 20 67  e pool for the g
0830: 69 76 65 6e 20 66 69 6c 65 6e 61 6d 65 3c 2f 70  iven filename</p
0840: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
0850: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 75 73 65 50  param name="useP
0860: 6f 6f 6c 22 3e 49 66 20 74 72 75 65 2c 20 74 68  ool">If true, th
0870: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63 61 6e  e connection can
0880: 20 62 65 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20   be pulled from 
0890: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  the connection p
08a0: 6f 6f 6c 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ool</param>..   
08b0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
08c0: 63 74 20 76 6f 69 64 20 4f 70 65 6e 28 73 74 72  ct void Open(str
08d0: 69 6e 67 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c  ing strFilename,
08e0: 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73   SQLiteOpenFlags
08f0: 45 6e 75 6d 20 66 6c 61 67 73 2c 20 69 6e 74 20  Enum flags, int 
0900: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f  maxPoolSize, boo
0910: 6c 20 75 73 65 50 6f 6f 6c 29 3b 0d 0a 20 20 20  l usePool);..   
0920: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0930: 20 20 20 20 2f 2f 2f 20 43 6c 6f 73 65 73 20 74      /// Closes t
0940: 68 65 20 63 75 72 72 65 6e 74 6c 79 2d 6f 70 65  he currently-ope
0950: 6e 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20  n database...   
0960: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0970: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b  .    /// <remark
0980: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 66 74 65  s>..    /// Afte
0990: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  r the database h
09a0: 61 73 20 62 65 65 6e 20 63 6c 6f 73 65 64 20 69  as been closed i
09b0: 6d 70 6c 65 6d 65 74 65 72 73 20 73 68 6f 75 6c  mplemeters shoul
09c0: 64 20 63 61 6c 6c 20 53 51 4c 69 74 65 46 75 6e  d call SQLiteFun
09d0: 63 74 69 6f 6e 2e 55 6e 62 69 6e 64 46 75 6e 63  ction.UnbindFunc
09e0: 74 69 6f 6e 73 28 29 20 74 6f 20 64 65 61 6c 6c  tions() to deall
09f0: 6f 63 61 74 65 20 61 6c 6c 20 69 6e 74 65 72 6f  ocate all intero
0a00: 70 20 61 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20  p allocated..   
0a10: 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 61 73 73 6f   /// memory asso
0a20: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
0a30: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
0a40: 63 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6c 6c 61  ctions and colla
0a50: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 74  ting sequences t
0a60: 69 65 64 20 74 6f 20 74 68 65 20 63 6c 6f 73 65  ied to the close
0a70: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  d connection... 
0a80: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
0a90: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0aa0: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 43 6c  abstract void Cl
0ab0: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20  ose();..    /// 
0ac0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0ad0: 2f 2f 20 53 65 74 73 20 74 68 65 20 62 75 73 79  // Sets the busy
0ae0: 20 74 69 6d 65 6f 75 74 20 6f 6e 20 74 68 65 20   timeout on the 
0af0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 53 51 4c  connection.  SQL
0b00: 69 74 65 43 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20  iteCommand will 
0b10: 63 61 6c 6c 20 74 68 69 73 20 62 65 66 6f 72 65  call this before
0b20: 20 65 78 65 63 75 74 69 6e 67 20 61 6e 79 20 63   executing any c
0b30: 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f  ommand...    ///
0b40: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0b50: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0b60: 3d 22 6e 54 69 6d 65 6f 75 74 4d 53 22 3e 54 68  ="nTimeoutMS">Th
0b70: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c  e number of mill
0b80: 69 73 65 63 6f 6e 64 73 20 74 6f 20 77 61 69 74  iseconds to wait
0b90: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
0ba0: 67 20 53 51 4c 49 54 45 5f 42 55 53 59 3c 2f 70  g SQLITE_BUSY</p
0bb0: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
0bc0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
0bd0: 64 20 53 65 74 54 69 6d 65 6f 75 74 28 69 6e 74  d SetTimeout(int
0be0: 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20   nTimeoutMS);.. 
0bf0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0c00: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
0c10: 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68  s the text of th
0c20: 65 20 6c 61 73 74 20 65 72 72 6f 72 20 69 73 73  e last error iss
0c30: 75 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20  ued by SQLite.. 
0c40: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0c50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
0c60: 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  rns></returns>..
0c70: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
0c80: 74 72 61 63 74 20 73 74 72 69 6e 67 20 53 51 4c  tract string SQL
0c90: 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d  iteLastError();.
0ca0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
0cb0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 57 68  ary>..    /// Wh
0cc0: 65 6e 20 70 6f 6f 6c 69 6e 67 20 69 73 20 65 6e  en pooling is en
0cd0: 61 62 6c 65 64 2c 20 66 6f 72 63 65 20 74 68 69  abled, force thi
0ce0: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  s connection to 
0cf0: 62 65 20 64 69 73 70 6f 73 65 64 20 72 61 74 68  be disposed rath
0d00: 65 72 20 74 68 61 6e 20 72 65 74 75 72 6e 65 64  er than returned
0d10: 20 74 6f 20 74 68 65 20 70 6f 6f 6c 0d 0a 20 20   to the pool..  
0d20: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0d30: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
0d40: 62 73 74 72 61 63 74 20 76 6f 69 64 20 43 6c 65  bstract void Cle
0d50: 61 72 50 6f 6f 6c 28 29 3b 0d 0a 0d 0a 20 20 20  arPool();....   
0d60: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0d70: 20 20 20 20 2f 2f 2f 20 50 72 65 70 61 72 65 73      /// Prepares
0d80: 20 61 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74   a SQL statement
0d90: 20 66 6f 72 20 65 78 65 63 75 74 69 6f 6e 2e 0d   for execution..
0da0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0db0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
0dc0: 72 61 6d 20 6e 61 6d 65 3d 22 63 6e 6e 22 3e 54  ram name="cnn">T
0dd0: 68 65 20 73 6f 75 72 63 65 20 63 6f 6e 6e 65 63  he source connec
0de0: 74 69 6f 6e 20 70 72 65 70 61 72 69 6e 67 20 74  tion preparing t
0df0: 68 65 20 63 6f 6d 6d 61 6e 64 2e 20 20 43 61 6e  he command.  Can
0e00: 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 61 6e 79   be null for any
0e10: 20 63 61 6c 6c 65 72 20 65 78 63 65 70 74 20 4c   caller except L
0e20: 49 4e 51 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  INQ</param>..   
0e30: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0e40: 3d 22 73 74 72 53 71 6c 22 3e 54 68 65 20 53 51  ="strSql">The SQ
0e50: 4c 20 63 6f 6d 6d 61 6e 64 20 74 65 78 74 20 74  L command text t
0e60: 6f 20 70 72 65 70 61 72 65 3c 2f 70 61 72 61 6d  o prepare</param
0e70: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0e80: 6d 20 6e 61 6d 65 3d 22 70 72 65 76 69 6f 75 73  m name="previous
0e90: 22 3e 54 68 65 20 70 72 65 76 69 6f 75 73 20 73  ">The previous s
0ea0: 74 61 74 65 6d 65 6e 74 20 69 6e 20 61 20 6d 75  tatement in a mu
0eb0: 6c 74 69 2d 73 74 61 74 65 6d 65 6e 74 20 63 6f  lti-statement co
0ec0: 6d 6d 61 6e 64 2c 20 6f 72 20 6e 75 6c 6c 20 69  mmand, or null i
0ed0: 66 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 73 74  f no previous st
0ee0: 61 74 65 6d 65 6e 74 20 65 78 69 73 74 73 3c 2f  atement exists</
0ef0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
0f00: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 69 6d  <param name="tim
0f10: 65 6f 75 74 4d 53 22 3e 54 68 65 20 74 69 6d 65  eoutMS">The time
0f20: 6f 75 74 20 74 6f 20 77 61 69 74 20 62 65 66 6f  out to wait befo
0f30: 72 65 20 61 62 6f 72 74 69 6e 67 20 74 68 65 20  re aborting the 
0f40: 70 72 65 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d  prepare</param>.
0f50: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0f60: 6e 61 6d 65 3d 22 73 74 72 52 65 6d 61 69 6e 22  name="strRemain"
0f70: 3e 54 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f  >The remainder o
0f80: 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
0f90: 74 68 61 74 20 77 61 73 20 6e 6f 74 20 70 72 6f  that was not pro
0fa0: 63 65 73 73 65 64 2e 20 20 45 61 63 68 20 63 61  cessed.  Each ca
0fb0: 6c 6c 20 74 6f 20 70 72 65 70 61 72 65 20 70 61  ll to prepare pa
0fc0: 72 73 65 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f  rses the..    //
0fd0: 2f 20 53 51 4c 20 75 70 20 74 6f 20 74 6f 20 65  / SQL up to to e
0fe0: 69 74 68 65 72 20 74 68 65 20 65 6e 64 20 6f 66  ither the end of
0ff0: 20 74 68 65 20 74 65 78 74 20 6f 72 20 74 6f 20   the text or to 
1000: 74 68 65 20 66 69 72 73 74 20 73 65 6d 69 2d 63  the first semi-c
1010: 6f 6c 6f 6e 20 64 65 6c 69 6d 69 74 65 72 2e 20  olon delimiter. 
1020: 20 54 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 74   The remaining t
1030: 65 78 74 20 69 73 20 72 65 74 75 72 6e 65 64 0d  ext is returned.
1040: 0a 20 20 20 20 2f 2f 2f 20 68 65 72 65 20 66 6f  .    /// here fo
1050: 72 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 63  r a subsequent c
1060: 61 6c 6c 20 74 6f 20 50 72 65 70 61 72 65 28 29  all to Prepare()
1070: 20 75 6e 74 69 6c 20 61 6c 6c 20 74 68 65 20 74   until all the t
1080: 65 78 74 20 68 61 73 20 62 65 65 6e 20 70 72 6f  ext has been pro
1090: 63 65 73 73 65 64 2e 3c 2f 70 61 72 61 6d 3e 0d  cessed.</param>.
10a0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
10b0: 73 3e 52 65 74 75 72 6e 73 20 61 6e 20 69 6e 69  s>Returns an ini
10c0: 74 69 61 6c 69 7a 65 64 20 53 51 4c 69 74 65 53  tialized SQLiteS
10d0: 74 61 74 65 6d 65 6e 74 2e 3c 2f 72 65 74 75 72  tatement.</retur
10e0: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
10f0: 6c 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74  l abstract SQLit
1100: 65 53 74 61 74 65 6d 65 6e 74 20 50 72 65 70 61  eStatement Prepa
1110: 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  re(SQLiteConnect
1120: 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67 20  ion cnn, string 
1130: 73 74 72 53 71 6c 2c 20 53 51 4c 69 74 65 53 74  strSql, SQLiteSt
1140: 61 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73  atement previous
1150: 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d 53  , uint timeoutMS
1160: 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 73 74 72  , out string str
1170: 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 2f 2f  Remain);..    //
1180: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1190: 20 2f 2f 2f 20 53 74 65 70 73 20 74 68 72 6f 75   /// Steps throu
11a0: 67 68 20 61 20 70 72 65 70 61 72 65 64 20 73 74  gh a prepared st
11b0: 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f  atement...    //
11c0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
11d0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
11e0: 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 53 51 4c  e="stmt">The SQL
11f0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6f 20  iteStatement to 
1200: 73 74 65 70 20 74 68 72 6f 75 67 68 3c 2f 70 61  step through</pa
1210: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
1220: 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20 61  eturns>True if a
1230: 20 72 6f 77 20 77 61 73 20 72 65 74 75 72 6e 65   row was returne
1240: 64 2c 20 46 61 6c 73 65 20 69 66 20 6e 6f 74 2e  d, False if not.
1250: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1260: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
1270: 74 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69  t bool Step(SQLi
1280: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
1290: 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  );..    /// <sum
12a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
12b0: 65 73 65 74 73 20 61 20 70 72 65 70 61 72 65 64  esets a prepared
12c0: 20 73 74 61 74 65 6d 65 6e 74 20 73 6f 20 69 74   statement so it
12d0: 20 63 61 6e 20 62 65 20 65 78 65 63 75 74 65 64   can be executed
12e0: 20 61 67 61 69 6e 2e 20 20 49 66 20 74 68 65 20   again.  If the 
12f0: 65 72 72 6f 72 20 72 65 74 75 72 6e 65 64 20 69  error returned i
1300: 73 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2c  s SQLITE_SCHEMA,
1310: 20 0d 0a 20 20 20 20 2f 2f 2f 20 74 72 61 6e 73   ..    /// trans
1320: 70 61 72 65 6e 74 6c 79 20 61 74 74 65 6d 70 74  parently attempt
1330: 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65 20   to rebuild the 
1340: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  SQL statement an
1350: 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72  d throw an error
1360: 20 69 66 20 74 68 61 74 20 77 61 73 20 6e 6f 74   if that was not
1370: 20 70 6f 73 73 69 62 6c 65 2e 0d 0a 20 20 20 20   possible...    
1380: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1390: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
13a0: 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 73  ame="stmt">The s
13b0: 74 61 74 65 6d 65 6e 74 20 74 6f 20 72 65 73 65  tatement to rese
13c0: 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  t</param>..    /
13d0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
13e0: 72 6e 73 20 2d 31 20 69 66 20 74 68 65 20 73 63  rns -1 if the sc
13f0: 68 65 6d 61 20 63 68 61 6e 67 65 64 20 77 68 69  hema changed whi
1400: 6c 65 20 72 65 73 65 74 74 69 6e 67 2c 20 30 20  le resetting, 0 
1410: 69 66 20 74 68 65 20 72 65 73 65 74 20 77 61 73  if the reset was
1420: 20 73 75 63 65 73 73 66 75 6c 20 6f 72 20 36 20   sucessful or 6 
1430: 28 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 29 20  (SQLITE_LOCKED) 
1440: 69 66 20 74 68 65 20 72 65 73 65 74 20 66 61 69  if the reset fai
1450: 6c 65 64 20 64 75 65 20 74 6f 20 61 20 6c 6f 63  led due to a loc
1460: 6b 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  k</returns>..   
1470: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
1480: 63 74 20 69 6e 74 20 52 65 73 65 74 28 53 51 4c  ct int Reset(SQL
1490: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
14a0: 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  t);..    interna
14b0: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
14c0: 43 61 6e 63 65 6c 28 29 3b 0d 0a 0d 0a 20 20 20  Cancel();....   
14d0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
14e0: 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 44 6f 75  ct void Bind_Dou
14f0: 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
1500: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
1510: 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75  dex, double valu
1520: 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  e);..    interna
1530: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
1540: 42 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74  Bind_Int32(SQLit
1550: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
1560: 20 69 6e 74 20 69 6e 64 65 78 2c 20 49 6e 74 33   int index, Int3
1570: 32 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69  2 value);..    i
1580: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1590: 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74 36 34   void Bind_Int64
15a0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
15b0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
15c0: 2c 20 49 6e 74 36 34 20 76 61 6c 75 65 29 3b 0d  , Int64 value);.
15d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
15e0: 73 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64  stract void Bind
15f0: 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74  _Text(SQLiteStat
1600: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
1610: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
1620: 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  lue);..    inter
1630: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
1640: 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69  d Bind_Blob(SQLi
1650: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
1660: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74  , int index, byt
1670: 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a  e[] blobData);..
1680: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
1690: 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64 5f  tract void Bind_
16a0: 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53  DateTime(SQLiteS
16b0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
16c0: 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69  nt index, DateTi
16d0: 6d 65 20 64 74 29 3b 0d 0a 20 20 20 20 69 6e 74  me dt);..    int
16e0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
16f0: 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53 51  oid Bind_Null(SQ
1700: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
1710: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d  mt, int index);.
1720: 0a 0d 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 69 6e 74 20 42 69 6e  abstract int Bin
1740: 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c  d_ParamCount(SQL
1750: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
1760: 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  t);..    interna
1770: 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69 6e  l abstract strin
1780: 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65  g Bind_ParamName
1790: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
17a0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
17b0: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
17c0: 20 61 62 73 74 72 61 63 74 20 69 6e 74 20 42 69   abstract int Bi
17d0: 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78 28 53 51  nd_ParamIndex(SQ
17e0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
17f0: 6d 74 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d  mt, string param
1800: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e  Name);....    in
1810: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
1820: 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28  int ColumnCount(
1830: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
1840: 73 74 6d 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65  stmt);..    inte
1850: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74  rnal abstract st
1860: 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28  ring ColumnName(
1870: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
1880: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
1890: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
18a0: 61 62 73 74 72 61 63 74 20 54 79 70 65 41 66 66  abstract TypeAff
18b0: 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69  inity ColumnAffi
18c0: 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61 74 65  nity(SQLiteState
18d0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
18e0: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65  ndex);..    inte
18f0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74  rnal abstract st
1900: 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28  ring ColumnType(
1910: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
1920: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
1930: 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e 69 74   out TypeAffinit
1940: 79 20 6e 41 66 66 69 6e 69 74 79 29 3b 0d 0a 20  y nAffinity);.. 
1950: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
1960: 72 61 63 74 20 69 6e 74 20 43 6f 6c 75 6d 6e 49  ract int ColumnI
1970: 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74 65  ndex(SQLiteState
1980: 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72 69 6e  ment stmt, strin
1990: 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0d 0a  g columnName);..
19a0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
19b0: 74 72 61 63 74 20 73 74 72 69 6e 67 20 43 6f 6c  tract string Col
19c0: 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28  umnOriginalName(
19d0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
19e0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
19f0: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
1a00: 61 62 73 74 72 61 63 74 20 73 74 72 69 6e 67 20  abstract string 
1a10: 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61  ColumnDatabaseNa
1a20: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
1a30: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
1a40: 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ex);..    intern
1a50: 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69  al abstract stri
1a60: 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61  ng ColumnTableNa
1a70: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
1a80: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
1a90: 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ex);..    intern
1aa0: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
1ab0: 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28   ColumnMetaData(
1ac0: 73 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c  string dataBase,
1ad0: 20 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73   string table, s
1ae0: 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75  tring column, ou
1af0: 74 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70  t string dataTyp
1b00: 65 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f  e, out string co
1b10: 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 6f  llateSequence, o
1b20: 75 74 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c  ut bool notNull,
1b30: 20 6f 75 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72   out bool primar
1b40: 79 4b 65 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61  yKey, out bool a
1b50: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 3b 0d 0a  utoIncrement);..
1b60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
1b70: 74 72 61 63 74 20 76 6f 69 64 20 47 65 74 49 6e  tract void GetIn
1b80: 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65  dexColumnExtende
1b90: 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64 61 74  dInfo(string dat
1ba0: 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20 69 6e  abase, string in
1bb0: 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75  dex, string colu
1bc0: 6d 6e 2c 20 6f 75 74 20 69 6e 74 20 73 6f 72 74  mn, out int sort
1bd0: 4d 6f 64 65 2c 20 6f 75 74 20 69 6e 74 20 6f 6e  Mode, out int on
1be0: 45 72 72 6f 72 2c 20 6f 75 74 20 73 74 72 69 6e  Error, out strin
1bf0: 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  g collationSeque
1c00: 6e 63 65 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74  nce);....    int
1c10: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 64  ernal abstract d
1c20: 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28  ouble GetDouble(
1c30: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
1c40: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
1c50: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
1c60: 61 62 73 74 72 61 63 74 20 49 6e 74 33 32 20 47  abstract Int32 G
1c70: 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  etInt32(SQLiteSt
1c80: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
1c90: 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69  t index);..    i
1ca0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1cb0: 20 49 6e 74 36 34 20 47 65 74 49 6e 74 36 34 28   Int64 GetInt64(
1cc0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
1cd0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
1ce0: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
1cf0: 61 62 73 74 72 61 63 74 20 73 74 72 69 6e 67 20  abstract string 
1d00: 47 65 74 54 65 78 74 28 53 51 4c 69 74 65 53 74  GetText(SQLiteSt
1d10: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
1d20: 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69  t index);..    i
1d30: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1d40: 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28 53   long GetBytes(S
1d50: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
1d60: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
1d70: 69 6e 74 20 6e 44 61 74 61 6f 66 66 73 65 74 2c  int nDataoffset,
1d80: 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69   byte[] bDest, i
1d90: 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
1da0: 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 69 6e  Length);..    in
1db0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
1dc0: 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53 51  long GetChars(SQ
1dd0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
1de0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69  mt, int index, i
1df0: 6e 74 20 6e 44 61 74 61 6f 66 66 73 65 74 2c 20  nt nDataoffset, 
1e00: 63 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e  char[] bDest, in
1e10: 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c  t nStart, int nL
1e20: 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 69 6e 74  ength);..    int
1e30: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 44  ernal abstract D
1e40: 61 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54  ateTime GetDateT
1e50: 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ime(SQLiteStatem
1e60: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
1e70: 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  dex);..    inter
1e80: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 62 6f 6f  nal abstract boo
1e90: 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65 53  l IsNull(SQLiteS
1ea0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
1eb0: 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20  nt index);....  
1ec0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
1ed0: 61 63 74 20 76 6f 69 64 20 43 72 65 61 74 65 43  act void CreateC
1ee0: 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20  ollation(string 
1ef0: 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51  strCollation, SQ
1f00: 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75  LiteCollation fu
1f10: 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74  nc, SQLiteCollat
1f20: 69 6f 6e 20 66 75 6e 63 31 36 29 3b 0d 0a 20 20  ion func16);..  
1f30: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
1f40: 61 63 74 20 76 6f 69 64 20 43 72 65 61 74 65 46  act void CreateF
1f50: 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73  unction(string s
1f60: 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20  trFunction, int 
1f70: 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64  nArgs, bool need
1f80: 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43  CollSeq, SQLiteC
1f90: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51  allback func, SQ
1fa0: 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  LiteCallback fun
1fb0: 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e  cstep, SQLiteFin
1fc0: 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66  alCallback funcf
1fd0: 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 69 6e 74 65  inal);..    inte
1fe0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 43 6f  rnal abstract Co
1ff0: 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
2000: 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  GetCollationSequ
2010: 65 6e 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74  ence(SQLiteFunct
2020: 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ion func, IntPtr
2030: 20 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20   context);..    
2040: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
2050: 74 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c  t int ContextCol
2060: 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c  lateCompare(Coll
2070: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
2080: 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f  m enc, IntPtr co
2090: 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31  ntext, string s1
20a0: 2c 20 73 74 72 69 6e 67 20 73 32 29 3b 0d 0a 20  , string s2);.. 
20b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
20c0: 72 61 63 74 20 69 6e 74 20 43 6f 6e 74 65 78 74  ract int Context
20d0: 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43  CollateCompare(C
20e0: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
20f0: 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72  Enum enc, IntPtr
2100: 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b 5d   context, char[]
2110: 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32 29 3b   c1, char[] c2);
2120: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2130: 20 61 62 73 74 72 61 63 74 20 69 6e 74 20 41 67   abstract int Ag
2140: 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49 6e 74  gregateCount(Int
2150: 50 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d 0a 20  Ptr context);.. 
2160: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
2170: 72 61 63 74 20 49 6e 74 50 74 72 20 41 67 67 72  ract IntPtr Aggr
2180: 65 67 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74  egateContext(Int
2190: 50 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d 0a 0d  Ptr context);...
21a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
21b0: 73 74 72 61 63 74 20 6c 6f 6e 67 20 47 65 74 50  stract long GetP
21c0: 61 72 61 6d 56 61 6c 75 65 42 79 74 65 73 28 49  aramValueBytes(I
21d0: 6e 74 50 74 72 20 70 74 72 2c 20 69 6e 74 20 6e  ntPtr ptr, int n
21e0: 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65  DataOffset, byte
21f0: 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53  [] bDest, int nS
2200: 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74  tart, int nLengt
2210: 68 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  h);..    interna
2220: 6c 20 61 62 73 74 72 61 63 74 20 64 6f 75 62 6c  l abstract doubl
2230: 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 44  e GetParamValueD
2240: 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74 72  ouble(IntPtr ptr
2250: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
2260: 20 61 62 73 74 72 61 63 74 20 69 6e 74 20 47 65   abstract int Ge
2270: 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32  tParamValueInt32
2280: 28 49 6e 74 50 74 72 20 70 74 72 29 3b 0d 0a 20  (IntPtr ptr);.. 
2290: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
22a0: 72 61 63 74 20 49 6e 74 36 34 20 47 65 74 50 61  ract Int64 GetPa
22b0: 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 49 6e  ramValueInt64(In
22c0: 74 50 74 72 20 70 74 72 29 3b 0d 0a 20 20 20 20  tPtr ptr);..    
22d0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
22e0: 74 20 73 74 72 69 6e 67 20 47 65 74 50 61 72 61  t string GetPara
22f0: 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74 50 74  mValueText(IntPt
2300: 72 20 70 74 72 29 3b 0d 0a 20 20 20 20 69 6e 74  r ptr);..    int
2310: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 54  ernal abstract T
2320: 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74 50  ypeAffinity GetP
2330: 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49 6e  aramValueType(In
2340: 74 50 74 72 20 70 74 72 29 3b 0d 0a 0d 0a 20 20  tPtr ptr);....  
2350: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
2360: 61 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e 42  act void ReturnB
2370: 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  lob(IntPtr conte
2380: 78 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65  xt, byte[] value
2390: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
23a0: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 52   abstract void R
23b0: 65 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50  eturnDouble(IntP
23c0: 74 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62  tr context, doub
23d0: 6c 65 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  le value);..    
23e0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
23f0: 74 20 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72  t void ReturnErr
2400: 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  or(IntPtr contex
2410: 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  t, string value)
2420: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
2430: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 52 65  abstract void Re
2440: 74 75 72 6e 49 6e 74 33 32 28 49 6e 74 50 74 72  turnInt32(IntPtr
2450: 20 63 6f 6e 74 65 78 74 2c 20 49 6e 74 33 32 20   context, Int32 
2460: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74  value);..    int
2470: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
2480: 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28  oid ReturnInt64(
2490: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
24a0: 49 6e 74 36 34 20 76 61 6c 75 65 29 3b 0d 0a 20  Int64 value);.. 
24b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
24c0: 72 61 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e  ract void Return
24d0: 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74  Null(IntPtr cont
24e0: 65 78 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  ext);..    inter
24f0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
2500: 64 20 52 65 74 75 72 6e 54 65 78 74 28 49 6e 74  d ReturnText(Int
2510: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72  Ptr context, str
2520: 69 6e 67 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20  ing value);.... 
2530: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2540: 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65  ..    /// Enable
2550: 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78  s or disabled ex
2560: 74 65 6e 65 64 20 72 65 73 75 6c 74 20 63 6f 64  tened result cod
2570: 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 53  es returned by S
2580: 51 4c 69 74 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  QLite..    /// <
2590: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
25a0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
25b0: 62 4f 6e 4f 66 66 22 3e 74 72 75 65 20 74 6f 20  bOnOff">true to 
25c0: 65 6e 61 62 6c 65 20 65 78 74 65 6e 64 65 64 20  enable extended 
25d0: 72 65 73 75 6c 74 20 63 6f 64 65 73 2c 20 66 61  result codes, fa
25e0: 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e 3c  lse to disable.<
25f0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
2600: 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75   <returns></retu
2610: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
2620: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
2630: 20 53 65 74 45 78 74 65 6e 64 65 64 52 65 73 75   SetExtendedResu
2640: 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f 6e  ltCodes(bool bOn
2650: 4f 66 66 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  Off);..    /// <
2660: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2670: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75  / Returns the nu
2680: 6d 65 72 69 63 20 72 65 73 75 6c 74 20 63 6f 64  meric result cod
2690: 65 20 66 6f 72 20 74 68 65 20 6d 6f 73 74 20 72  e for the most r
26a0: 65 63 65 6e 74 20 66 61 69 6c 65 64 20 53 51 4c  ecent failed SQL
26b0: 69 74 65 20 41 50 49 20 63 61 6c 6c 20 0d 0a 20  ite API call .. 
26c0: 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65     /// associate
26d0: 64 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62  d with the datab
26e0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
26f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2700: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
2710: 65 74 75 72 6e 73 3e 52 65 73 75 6c 74 20 63 6f  eturns>Result co
2720: 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  de</returns>..  
2730: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
2740: 61 63 74 20 69 6e 74 20 52 65 73 75 6c 74 43 6f  act int ResultCo
2750: 64 65 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  de();..    /// <
2760: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2770: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 65 78  / Returns the ex
2780: 74 65 6e 64 65 64 20 6e 75 6d 65 72 69 63 20 72  tended numeric r
2790: 65 73 75 6c 74 20 63 6f 64 65 20 66 6f 72 20 74  esult code for t
27a0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 66  he most recent f
27b0: 61 69 6c 65 64 20 53 51 4c 69 74 65 20 41 50 49  ailed SQLite API
27c0: 20 63 61 6c 6c 20 0d 0a 20 20 20 20 2f 2f 2f 20   call ..    /// 
27d0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
27e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
27f0: 6e 65 63 74 69 6f 6e 2e 20 0d 0a 20 20 20 20 2f  nection. ..    /
2800: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2810: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2820: 45 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20  Extended result 
2830: 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  code</returns>..
2840: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2850: 74 72 61 63 74 20 69 6e 74 20 45 78 74 65 6e 64  tract int Extend
2860: 65 64 52 65 73 75 6c 74 43 6f 64 65 28 29 3b 0d  edResultCode();.
2870: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2880: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 64  ary>..    /// Ad
2890: 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20  d a log message 
28a0: 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73  via the SQLite s
28b0: 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72  qlite3_log inter
28c0: 66 61 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  face...    /// <
28d0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
28e0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
28f0: 69 45 72 72 43 6f 64 65 22 3e 45 72 72 6f 72 20  iErrCode">Error 
2900: 63 6f 64 65 20 74 6f 20 62 65 20 6c 6f 67 67 65  code to be logge
2910: 64 20 77 69 74 68 20 74 68 65 20 6d 65 73 73 61  d with the messa
2920: 67 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ge.</param>..   
2930: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2940: 3d 22 7a 4d 65 73 73 61 67 65 22 3e 53 74 72 69  ="zMessage">Stri
2950: 6e 67 20 74 6f 20 62 65 20 6c 6f 67 67 65 64 2e  ng to be logged.
2960: 20 20 55 6e 6c 69 6b 65 20 74 68 65 20 53 51 4c    Unlike the SQL
2970: 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ite sqlite3_log(
2980: 29 20 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 74 65  ) ..    /// inte
2990: 72 66 61 63 65 2c 20 74 68 69 73 20 73 68 6f 75  rface, this shou
29a0: 6c 64 20 62 65 20 70 72 65 2d 66 6f 72 6d 61 74  ld be pre-format
29b0: 74 65 64 2e 20 20 43 6f 6e 73 69 64 65 72 20 75  ted.  Consider u
29c0: 73 69 6e 67 20 74 68 65 20 0d 0a 20 20 20 20 2f  sing the ..    /
29d0: 2f 2f 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  // String.Format
29e0: 28 29 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 61  () function.</pa
29f0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
2a00: 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73  eturns></returns
2a10: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
2a20: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 4c 6f  abstract void Lo
2a30: 67 4d 65 73 73 61 67 65 28 69 6e 74 20 69 45 72  gMessage(int iEr
2a40: 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d  rCode, string zM
2a50: 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20  essage);....    
2a60: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
2a70: 74 20 76 6f 69 64 20 53 65 74 50 61 73 73 77 6f  t void SetPasswo
2a80: 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77 6f  rd(byte[] passwo
2a90: 72 64 42 79 74 65 73 29 3b 0d 0a 20 20 20 20 69  rdBytes);..    i
2aa0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
2ab0: 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73   void ChangePass
2ac0: 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50  word(byte[] newP
2ad0: 61 73 73 77 6f 72 64 42 79 74 65 73 29 3b 0d 0a  asswordBytes);..
2ae0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2af0: 62 73 74 72 61 63 74 20 76 6f 69 64 20 53 65 74  bstract void Set
2b00: 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c 69 74  UpdateHook(SQLit
2b10: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
2b20: 66 75 6e 63 29 3b 0d 0a 20 20 20 20 69 6e 74 65  func);..    inte
2b30: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
2b40: 69 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b  id SetCommitHook
2b50: 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c  (SQLiteCommitCal
2b60: 6c 62 61 63 6b 20 66 75 6e 63 29 3b 0d 0a 20 20  lback func);..  
2b70: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
2b80: 61 63 74 20 76 6f 69 64 20 53 65 74 54 72 61 63  act void SetTrac
2b90: 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65  eCallback(SQLite
2ba0: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 66 75  TraceCallback fu
2bb0: 6e 63 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  nc);..    intern
2bc0: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
2bd0: 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b   SetRollbackHook
2be0: 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43  (SQLiteRollbackC
2bf0: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 3b 0d 0a  allback func);..
2c00: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2c10: 74 72 61 63 74 20 69 6e 74 20 53 65 74 4c 6f 67  tract int SetLog
2c20: 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c  Callback(SQLiteL
2c30: 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ogCallback func)
2c40: 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ;....    interna
2c50: 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20 47  l abstract int G
2c60: 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65  etCursorForTable
2c70: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
2c80: 20 73 74 6d 74 2c 20 69 6e 74 20 64 61 74 61 62   stmt, int datab
2c90: 61 73 65 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67  ase, int rootPag
2ca0: 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  e);..    interna
2cb0: 6c 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20  l abstract long 
2cc0: 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f  GetRowIdForCurso
2cd0: 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  r(SQLiteStatemen
2ce0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73  t stmt, int curs
2cf0: 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  or);....    inte
2d00: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 6f 62  rnal abstract ob
2d10: 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 53 51  ject GetValue(SQ
2d20: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2d30: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 53  mt, int index, S
2d40: 51 4c 69 74 65 54 79 70 65 20 74 79 70 29 3b 0d  QLiteType typ);.
2d50: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2d60: 61 62 73 74 72 61 63 74 20 62 6f 6f 6c 20 41 75  abstract bool Au
2d70: 74 6f 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d  toCommit..    {.
2d80: 0a 20 20 20 20 20 20 67 65 74 3b 0d 0a 20 20 20  .      get;..   
2d90: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63   }....    protec
2da0: 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64  ted virtual void
2db0: 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 62 44   Dispose(bool bD
2dc0: 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b  isposing)..    {
2dd0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
2de0: 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f  ublic void Dispo
2df0: 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  se()..    {..   
2e00: 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29     Dispose(true)
2e10: 3b 0d 0a 20 20 20 20 20 20 47 43 2e 53 75 70 70  ;..      GC.Supp
2e20: 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69  ressFinalize(thi
2e30: 73 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  s);..    }....  
2e40: 20 20 2f 2f 20 54 68 65 73 65 20 73 74 61 74 69    // These stati
2e50: 63 73 20 61 72 65 20 68 65 72 65 20 66 6f 72 20  cs are here for 
2e60: 6c 61 63 6b 20 6f 66 20 61 20 62 65 74 74 65 72  lack of a better
2e70: 20 70 6c 61 63 65 20 74 6f 20 70 75 74 20 74 68   place to put th
2e80: 65 6d 2e 0d 0a 20 20 20 20 2f 2f 20 54 68 65 79  em...    // They
2e90: 20 65 78 69 73 74 20 68 65 72 65 20 62 65 63 61   exist here beca
2ea0: 75 73 65 20 74 68 65 79 20 61 72 65 20 63 61 6c  use they are cal
2eb0: 6c 65 64 20 64 75 72 69 6e 67 20 74 68 65 20 66  led during the f
2ec0: 69 6e 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 0d 0a  inalization of..
2ed0: 20 20 20 20 2f 2f 20 61 20 53 51 4c 69 74 65 53      // a SQLiteS
2ee0: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20  tatementHandle, 
2ef0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2f00: 48 61 6e 64 6c 65 2c 20 61 6e 64 20 53 51 4c 69  Handle, and SQLi
2f10: 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65  teFunctionCookie
2f20: 48 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 2f 2f 20  Handle...    // 
2f30: 54 68 65 72 65 66 6f 72 65 20 74 68 65 73 65 20  Therefore these 
2f40: 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 74  functions have t
2f50: 6f 20 62 65 20 73 74 61 74 69 63 2c 20 61 6e 64  o be static, and
2f60: 20 68 61 76 65 20 74 6f 20 62 65 20 6c 6f 77 2d   have to be low-
2f70: 6c 65 76 65 6c 2e 0d 0a 0d 0a 20 20 20 20 69 6e  level.....    in
2f80: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74  ternal static st
2f90: 72 69 6e 67 20 53 51 4c 69 74 65 4c 61 73 74 45  ring SQLiteLastE
2fa0: 72 72 6f 72 28 53 51 4c 69 74 65 43 6f 6e 6e 65  rror(SQLiteConne
2fb0: 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64 62 29 0d  ctionHandle db).
2fc0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
2fd0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
2fe0: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
2ff0: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
3000: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
3010: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3020: 74 65 33 5f 65 72 72 6d 73 67 5f 69 6e 74 65 72  te3_errmsg_inter
3030: 6f 70 28 64 62 2c 20 6f 75 74 20 6c 65 6e 29 2c  op(db, out len),
3040: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
3050: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
3060: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
3070: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
3080: 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c  ite3_errmsg(db),
3090: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
30a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
30b0: 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64  rnal static void
30c0: 20 46 69 6e 61 6c 69 7a 65 53 74 61 74 65 6d 65   FinalizeStateme
30d0: 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nt(SQLiteStateme
30e0: 6e 74 48 61 6e 64 6c 65 20 73 74 6d 74 29 0d 0a  ntHandle stmt)..
30f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c 6f 63      {..      loc
3100: 6b 20 28 5f 6c 6f 63 6b 29 0d 0a 20 20 20 20 20  k (_lock)..     
3110: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
3120: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
3130: 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65    int n = Unsafe
3140: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
3150: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 5f 69  lite3_finalize_i
3160: 6e 74 65 72 6f 70 28 73 74 6d 74 29 3b 0d 0a 23  nterop(stmt);..#
3170: 65 6c 73 65 0d 0a 20 20 20 20 20 20 69 6e 74 20  else..      int 
3180: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
3190: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
31a0: 66 69 6e 61 6c 69 7a 65 28 73 74 6d 74 29 3b 0d  finalize(stmt);.
31b0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
31c0: 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f   if (n > 0) thro
31d0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
31e0: 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d  ption(n, null);.
31f0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
3200: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
3210: 73 74 61 74 69 63 20 76 6f 69 64 20 43 6c 6f 73  static void Clos
3220: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 53 51 4c 69  eConnection(SQLi
3230: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
3240: 6c 65 20 64 62 29 0d 0a 20 20 20 20 7b 0d 0a 20  le db)..    {.. 
3250: 20 20 20 20 20 6c 6f 63 6b 20 28 5f 6c 6f 63 6b       lock (_lock
3260: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  )..      {..#if 
3270: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
3280: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20  ..        int n 
3290: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
32a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6c  thods.sqlite3_cl
32b0: 6f 73 65 5f 69 6e 74 65 72 6f 70 28 64 62 29 3b  ose_interop(db);
32c0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 52  ..#else..      R
32d0: 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  esetConnection(d
32e0: 62 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  b);..      int n
32f0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
3300: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
3310: 6c 6f 73 65 28 64 62 29 3b 0d 0a 23 65 6e 64 69  lose(db);..#endi
3320: 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  f..        if (n
3330: 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20   > 0) throw new 
3340: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
3350: 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72  n, SQLiteLastErr
3360: 6f 72 28 64 62 29 29 3b 0d 0a 20 20 20 20 20 20  or(db));..      
3370: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
3380: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
3390: 76 6f 69 64 20 52 65 73 65 74 43 6f 6e 6e 65 63  void ResetConnec
33a0: 74 69 6f 6e 28 53 51 4c 69 74 65 43 6f 6e 6e 65  tion(SQLiteConne
33b0: 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64 62 29 0d  ctionHandle db).
33c0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c 6f  .    {..      lo
33d0: 63 6b 20 28 5f 6c 6f 63 6b 29 0d 0a 20 20 20 20  ck (_lock)..    
33e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
33f0: 50 74 72 20 73 74 6d 74 20 3d 20 49 6e 74 50 74  Ptr stmt = IntPt
3400: 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
3410: 20 69 6e 74 20 6e 3b 0d 0a 20 20 20 20 20 20 20   int n;..       
3420: 20 64 6f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   do..        {..
3430: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d            stmt =
3440: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
3450: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6e 65 78  hods.sqlite3_nex
3460: 74 5f 73 74 6d 74 28 64 62 2c 20 73 74 6d 74 29  t_stmt(db, stmt)
3470: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
3480: 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e  (stmt != IntPtr.
3490: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
34a0: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
34b0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
34c0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
34d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
34e0: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
34f0: 72 6f 70 28 73 74 6d 74 29 3b 0d 0a 23 65 6c 73  rop(stmt);..#els
3500: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  e..            n
3510: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
3520: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
3530: 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 23 65 6e  eset(stmt);..#en
3540: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  dif..          }
3550: 0d 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c  ..        } whil
3560: 65 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74  e (stmt != IntPt
3570: 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20  r.Zero);....    
3580: 20 20 20 20 69 66 20 28 49 73 41 75 74 6f 63 6f      if (IsAutoco
3590: 6d 6d 69 74 28 64 62 29 20 3d 3d 20 66 61 6c 73  mmit(db) == fals
35a0: 65 29 20 2f 2f 20 61 20 74 72 61 6e 73 61 63 74  e) // a transact
35b0: 69 6f 6e 20 69 73 20 70 65 6e 64 69 6e 67 20 6f  ion is pending o
35c0: 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  n the connection
35d0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
35e0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
35f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
3600: 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20  qlite3_exec(db, 
3610: 54 6f 55 54 46 38 28 22 52 4f 4c 4c 42 41 43 4b  ToUTF8("ROLLBACK
3620: 22 29 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c  "), IntPtr.Zero,
3630: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 6f 75   IntPtr.Zero, ou
3640: 74 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20  t stmt);..      
3650: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74      if (n > 0) t
3660: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
3670: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
3680: 74 65 4c 61 73 74 45 72 72 6f 72 28 64 62 29 29  teLastError(db))
3690: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
36a0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
36b0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
36c0: 74 69 63 20 62 6f 6f 6c 20 49 73 41 75 74 6f 63  tic bool IsAutoc
36d0: 6f 6d 6d 69 74 28 53 51 4c 69 74 65 43 6f 6e 6e  ommit(SQLiteConn
36e0: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 68 64 6c  ectionHandle hdl
36f0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3700: 72 65 74 75 72 6e 20 28 55 6e 73 61 66 65 4e 61  return (UnsafeNa
3710: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3720: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
3730: 69 74 28 68 64 6c 29 20 3d 3d 20 31 29 3b 0d 0a  it(hdl) == 1);..
3740: 20 20 20 20 7d 0d 0a 0d 0a 20 20 7d 0d 0a 0d 0a      }....  }....
3750: 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e 74 65 72    internal inter
3760: 66 61 63 65 20 49 53 51 4c 69 74 65 53 63 68 65  face ISQLiteSche
3770: 6d 61 45 78 74 65 6e 73 69 6f 6e 73 0d 0a 20 20  maExtensions..  
3780: 7b 0d 0a 20 20 20 20 76 6f 69 64 20 42 75 69 6c  {..    void Buil
3790: 64 54 65 6d 70 53 63 68 65 6d 61 28 53 51 4c 69  dTempSchema(SQLi
37a0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e  teConnection cnn
37b0: 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 5b 46 6c  );..  }....  [Fl
37c0: 61 67 73 5d 0d 0a 20 20 69 6e 74 65 72 6e 61 6c  ags]..  internal
37d0: 20 65 6e 75 6d 20 53 51 4c 69 74 65 4f 70 65 6e   enum SQLiteOpen
37e0: 46 6c 61 67 73 45 6e 75 6d 0d 0a 20 20 7b 0d 0a  FlagsEnum..  {..
37f0: 20 20 20 20 4e 6f 6e 65 20 3d 20 30 2c 0d 0a 20      None = 0,.. 
3800: 20 20 20 52 65 61 64 4f 6e 6c 79 20 3d 20 30 78     ReadOnly = 0x
3810: 30 31 2c 0d 0a 20 20 20 20 52 65 61 64 57 72 69  01,..    ReadWri
3820: 74 65 20 3d 20 30 78 30 32 2c 0d 0a 20 20 20 20  te = 0x02,..    
3830: 43 72 65 61 74 65 20 3d 20 30 78 30 34 2c 0d 0a  Create = 0x04,..
3840: 20 20 20 20 53 68 61 72 65 64 43 61 63 68 65 20      SharedCache 
3850: 3d 20 30 78 30 31 30 30 30 30 30 30 2c 0d 0a 20  = 0x01000000,.. 
3860: 20 20 20 44 65 66 61 75 6c 74 20 3d 20 30 78 30     Default = 0x0
3870: 36 2c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 20  6,..  }....  // 
3880: 54 68 65 73 65 20 61 72 65 20 74 68 65 20 6f 70  These are the op
3890: 74 69 6f 6e 73 20 74 6f 20 74 68 65 20 69 6e 74  tions to the int
38a0: 65 72 6e 61 6c 20 73 71 6c 69 74 65 33 5f 63 6f  ernal sqlite3_co
38b0: 6e 66 69 67 20 63 61 6c 6c 2e 0d 0a 20 20 69 6e  nfig call...  in
38c0: 74 65 72 6e 61 6c 20 65 6e 75 6d 20 53 51 4c 69  ternal enum SQLi
38d0: 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 0d  teConfigOpsEnum.
38e0: 0a 20 20 7b 0d 0a 20 20 20 20 53 51 4c 49 54 45  .  {..    SQLITE
38f0: 5f 43 4f 4e 46 49 47 5f 53 49 4e 47 4c 45 54 48  _CONFIG_SINGLETH
3900: 52 45 41 44 20 3d 20 31 2c 20 2f 2f 20 6e 69 6c  READ = 1, // nil
3910: 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f   ..    SQLITE_CO
3920: 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52 45 41 44  NFIG_MULTITHREAD
3930: 20 3d 20 32 2c 20 2f 2f 20 6e 69 6c 20 0d 0a 20   = 2, // nil .. 
3940: 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47     SQLITE_CONFIG
3950: 5f 53 45 52 49 41 4c 49 5a 45 44 20 3d 20 33 2c  _SERIALIZED = 3,
3960: 20 2f 2f 20 6e 69 6c 20 0d 0a 20 20 20 20 53 51   // nil ..    SQ
3970: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 41 4c 4c  LITE_CONFIG_MALL
3980: 4f 43 20 3d 20 34 2c 20 2f 2f 20 73 71 6c 69 74  OC = 4, // sqlit
3990: 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 2a 20  e3_mem_methods* 
39a0: 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e  ..    SQLITE_CON
39b0: 46 49 47 5f 47 45 54 4d 41 4c 4c 4f 43 20 3d 20  FIG_GETMALLOC = 
39c0: 35 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 65  5, // sqlite3_me
39d0: 6d 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a 20 20 20  m_methods* ..   
39e0: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53   SQLITE_CONFIG_S
39f0: 43 52 41 54 43 48 20 3d 20 36 2c 20 2f 2f 20 76  CRATCH = 6, // v
3a00: 6f 69 64 2a 2c 20 69 6e 74 20 73 7a 2c 20 69 6e  oid*, int sz, in
3a10: 74 20 4e 20 0d 0a 20 20 20 20 53 51 4c 49 54 45  t N ..    SQLITE
3a20: 5f 43 4f 4e 46 49 47 5f 50 41 47 45 43 41 43 48  _CONFIG_PAGECACH
3a30: 45 20 3d 20 37 2c 20 2f 2f 20 76 6f 69 64 2a 2c  E = 7, // void*,
3a40: 20 69 6e 74 20 73 7a 2c 20 69 6e 74 20 4e 20 0d   int sz, int N .
3a50: 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46  .    SQLITE_CONF
3a60: 49 47 5f 48 45 41 50 20 3d 20 38 2c 20 2f 2f 20  IG_HEAP = 8, // 
3a70: 76 6f 69 64 2a 2c 20 69 6e 74 20 6e 42 79 74 65  void*, int nByte
3a80: 2c 20 69 6e 74 20 6d 69 6e 20 0d 0a 20 20 20 20  , int min ..    
3a90: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45  SQLITE_CONFIG_ME
3aa0: 4d 53 54 41 54 55 53 20 3d 20 39 2c 20 2f 2f 20  MSTATUS = 9, // 
3ab0: 62 6f 6f 6c 65 61 6e 20 0d 0a 20 20 20 20 53 51  boolean ..    SQ
3ac0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 55 54 45  LITE_CONFIG_MUTE
3ad0: 58 20 3d 20 31 30 2c 20 2f 2f 20 73 71 6c 69 74  X = 10, // sqlit
3ae0: 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
3af0: 2a 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43  * ..    SQLITE_C
3b00: 4f 4e 46 49 47 5f 47 45 54 4d 55 54 45 58 20 3d  ONFIG_GETMUTEX =
3b10: 20 31 31 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f   11, // sqlite3_
3b20: 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 2a 20 0d  mutex_methods* .
3b30: 0a 20 20 20 20 2f 2f 20 70 72 65 76 69 6f 75 73  .    // previous
3b40: 6c 79 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ly SQLITE_CONFIG
3b50: 5f 43 48 55 4e 4b 41 4c 4c 4f 43 20 31 32 20 77  _CHUNKALLOC 12 w
3b60: 68 69 63 68 20 69 73 20 6e 6f 77 20 75 6e 75 73  hich is now unus
3b70: 65 64 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43  ed..    SQLITE_C
3b80: 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44 45 20  ONFIG_LOOKASIDE 
3b90: 3d 20 31 33 2c 20 2f 2f 20 69 6e 74 20 69 6e 74  = 13, // int int
3ba0: 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f   ..    SQLITE_CO
3bb0: 4e 46 49 47 5f 50 43 41 43 48 45 20 3d 20 31 34  NFIG_PCACHE = 14
3bc0: 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f 70 63 61  , // sqlite3_pca
3bd0: 63 68 65 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a 20  che_methods* .. 
3be0: 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47     SQLITE_CONFIG
3bf0: 5f 47 45 54 50 43 41 43 48 45 20 3d 20 31 35 2c  _GETPCACHE = 15,
3c00: 20 2f 2f 20 73 71 6c 69 74 65 33 5f 70 63 61 63   // sqlite3_pcac
3c10: 68 65 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a 20 20  he_methods* ..  
3c20: 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f    SQLITE_CONFIG_
3c30: 4c 4f 47 20 3d 20 31 36 2c 20 2f 2f 20 78 46 75  LOG = 16, // xFu
3c40: 6e 63 2c 20 76 6f 69 64 2a 20 0d 0a 20 20 7d 0d  nc, void* ..  }.
3c50: 0a 0d 0a 7d 0d 0a                                ...}..