System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 370b33b880dddc5f651fdb7237f66512c4cf9351:


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 44 61 74 61 2e 43 6f 6d 6d 6f  ystem.Data.Commo
0180: 6e 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  n;.  using Syste
0190: 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65  m.Collections.Ge
01a0: 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e 67 20 53  neric;.  using S
01b0: 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74  ystem.Globalizat
01c0: 69 6f 6e 3b 0a 20 20 75 73 69 6e 67 20 53 79 73  ion;.  using Sys
01d0: 74 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0a  tem.Reflection;.
01e0: 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e  .  /// <summary>
01f0: 0a 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 69 6d  .  /// SQLite im
0200: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
0210: 44 62 44 61 74 61 52 65 61 64 65 72 2e 0a 20 20  DbDataReader..  
0220: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
0230: 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63   public sealed c
0240: 6c 61 73 73 20 53 51 4c 69 74 65 44 61 74 61 52  lass SQLiteDataR
0250: 65 61 64 65 72 20 3a 20 44 62 44 61 74 61 52 65  eader : DbDataRe
0260: 61 64 65 72 0a 20 20 7b 0a 20 20 20 20 2f 2f 2f  ader.  {.    ///
0270: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
0280: 2f 2f 20 55 6e 64 65 72 6c 79 69 6e 67 20 63 6f  // Underlying co
0290: 6d 6d 61 6e 64 20 74 68 69 73 20 72 65 61 64 65  mmand this reade
02a0: 72 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  r is attached to
02b0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
02c0: 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20  ry>.    private 
02d0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 20 20  SQLiteCommand   
02e0: 5f 63 6f 6d 6d 61 6e 64 3b 0a 20 20 20 20 2f 2f  _command;.    //
02f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
0300: 2f 2f 2f 20 49 6e 64 65 78 20 6f 66 20 74 68 65  /// Index of the
0310: 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65   current stateme
0320: 6e 74 20 69 6e 20 74 68 65 20 63 6f 6d 6d 61 6e  nt in the comman
0330: 64 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73 65  d being processe
0340: 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  d.    /// </summ
0350: 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65  ary>.    private
0360: 20 69 6e 74 20 20 20 20 20 20 20 20 20 20 20 20   int            
0370: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
0380: 74 49 6e 64 65 78 3b 0a 20 20 20 20 2f 2f 2f 20  tIndex;.    /// 
0390: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
03a0: 2f 20 43 75 72 72 65 6e 74 20 73 74 61 74 65 6d  / Current statem
03b0: 65 6e 74 20 62 65 69 6e 67 20 52 65 61 64 28 29  ent being Read()
03c0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
03d0: 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20  ry>.    private 
03e0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
03f0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
0400: 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ;.    /// <summa
0410: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 53 74 61 74  ry>.    /// Stat
0420: 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  e of the current
0430: 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
0440: 20 70 72 6f 63 65 73 73 65 64 2e 0a 20 20 20 20   processed..    
0450: 2f 2f 2f 20 2d 31 20 3d 20 46 69 72 73 74 20 53  /// -1 = First S
0460: 74 65 70 28 29 20 65 78 65 63 75 74 65 64 2c 20  tep() executed, 
0470: 73 6f 20 74 68 65 20 66 69 72 73 74 20 52 65 61  so the first Rea
0480: 64 28 29 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f  d() will be igno
0490: 72 65 64 0a 20 20 20 20 2f 2f 2f 20 20 30 20 3d  red.    ///  0 =
04a0: 20 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e   Actively readin
04b0: 67 0a 20 20 20 20 2f 2f 2f 20 20 31 20 3d 20 46  g.    ///  1 = F
04c0: 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 0a  inished reading.
04d0: 20 20 20 20 2f 2f 2f 20 20 32 20 3d 20 4e 6f 6e      ///  2 = Non
04e0: 2d 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 73  -row-returning s
04f0: 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 20 72 65 63  tatement, no rec
0500: 6f 72 64 73 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ords.    /// </s
0510: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76  ummary>.    priv
0520: 61 74 65 20 69 6e 74 20 20 20 20 20 20 20 20 20  ate int         
0530: 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74      _readingStat
0540: 65 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  e;.    /// <summ
0550: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 4e 75 6d  ary>.    /// Num
0560: 62 65 72 20 6f 66 20 72 65 63 6f 72 64 73 20 61  ber of records a
0570: 66 66 65 63 74 65 64 20 62 79 20 74 68 65 20 69  ffected by the i
0580: 6e 73 65 72 74 2f 75 70 64 61 74 65 20 73 74 61  nsert/update sta
0590: 74 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64  tements executed
05a0: 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a   on the command.
05b0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
05c0: 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 69  y>.    private i
05d0: 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  nt             _
05e0: 72 6f 77 73 41 66 66 65 63 74 65 64 3b 0a 20 20  rowsAffected;.  
05f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
0600: 20 20 20 20 2f 2f 2f 20 43 6f 75 6e 74 20 6f 66      /// Count of
0610: 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d 6e 73   fields (columns
0620: 29 20 69 6e 20 74 68 65 20 72 6f 77 2d 72 65 74  ) in the row-ret
0630: 75 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  urning statement
0640: 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
0650: 20 70 72 6f 63 65 73 73 65 64 0a 20 20 20 20 2f   processed.    /
0660: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
0670: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 20 20    private int   
0680: 20 20 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64            _field
0690: 43 6f 75 6e 74 3b 0a 20 20 20 20 2f 2f 2f 20 3c  Count;.    /// <
06a0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
06b0: 20 44 61 74 61 74 79 70 65 73 20 6f 66 20 61 63   Datatypes of ac
06c0: 74 69 76 65 20 66 69 65 6c 64 73 20 28 63 6f 6c  tive fields (col
06d0: 75 6d 6e 73 29 20 69 6e 20 74 68 65 20 63 75 72  umns) in the cur
06e0: 72 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 2c 20  rent statement, 
06f0: 75 73 65 64 20 66 6f 72 20 74 79 70 65 2d 72 65  used for type-re
0700: 73 74 72 69 63 74 69 6e 67 20 64 61 74 61 0a 20  stricting data. 
0710: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0720: 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 53 51  >.    private SQ
0730: 4c 69 74 65 54 79 70 65 5b 5d 20 20 20 20 5f 66  LiteType[]    _f
0740: 69 65 6c 64 54 79 70 65 41 72 72 61 79 3b 0a 0a  ieldTypeArray;..
0750: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0760: 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 62 65  >.    /// The be
0770: 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 64 61  havior of the da
0780: 74 61 72 65 61 64 65 72 0a 20 20 20 20 2f 2f 2f  tareader.    ///
0790: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
07a0: 70 72 69 76 61 74 65 20 43 6f 6d 6d 61 6e 64 42  private CommandB
07b0: 65 68 61 76 69 6f 72 20 5f 63 6f 6d 6d 61 6e 64  ehavior _command
07c0: 42 65 68 61 76 69 6f 72 3b 0a 0a 20 20 20 20 2f  Behavior;..    /
07d0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
07e0: 20 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f   /// Internal co
07f0: 6e 73 74 72 75 63 74 6f 72 2c 20 69 6e 69 74 69  nstructor, initi
0800: 61 6c 69 7a 65 73 20 74 68 65 20 64 61 74 61 72  alizes the datar
0810: 65 61 64 65 72 20 61 6e 64 20 73 65 74 73 20 75  eader and sets u
0820: 70 20 74 6f 20 62 65 67 69 6e 20 65 78 65 63 75  p to begin execu
0830: 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a  ting statements.
0840: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0850: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
0860: 6d 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65  m name="cmd">The
0870: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74   SQLiteCommand t
0880: 68 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20  his data reader 
0890: 69 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0a 20  is for</param>. 
08a0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
08b0: 6d 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20  me="behave">The 
08c0: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
08d0: 72 20 6f 66 20 74 68 65 20 64 61 74 61 20 72 65  r of the data re
08e0: 61 64 65 72 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  ader</param>.   
08f0: 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65   internal SQLite
0900: 44 61 74 61 52 65 61 64 65 72 28 53 51 4c 69 74  DataReader(SQLit
0910: 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43 6f  eCommand cmd, Co
0920: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 62 65  mmandBehavior be
0930: 68 61 76 65 29 0a 20 20 20 20 7b 0a 20 20 20 20  have).    {.    
0940: 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 63 6d 64    _command = cmd
0950: 3b 0a 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64  ;.      _command
0960: 42 65 68 61 76 69 6f 72 20 3d 20 62 65 68 61 76  Behavior = behav
0970: 65 3b 0a 20 20 20 20 20 20 49 6e 69 74 69 61 6c  e;.      Initial
0980: 69 7a 65 28 29 3b 0a 0a 20 20 20 20 20 20 69 66  ize();..      if
0990: 20 28 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75   (_command != nu
09a0: 6c 6c 29 0a 20 20 20 20 20 20 20 20 4e 65 78 74  ll).        Next
09b0: 52 65 73 75 6c 74 28 29 3b 0a 20 20 20 20 7d 0a  Result();.    }.
09c0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
09d0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 69 74 69  y>.    /// Initi
09e0: 61 6c 69 7a 65 73 20 61 6e 64 20 72 65 73 65 74  alizes and reset
09f0: 73 20 74 68 65 20 64 61 74 61 72 65 61 64 65 72  s the datareader
0a00: 27 73 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  's member variab
0a10: 6c 65 73 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  les.    /// </su
0a20: 6d 6d 61 72 79 3e 0a 20 20 20 20 69 6e 74 65 72  mmary>.    inter
0a30: 6e 61 6c 20 76 6f 69 64 20 49 6e 69 74 69 61 6c  nal void Initial
0a40: 69 7a 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  ize().    {.    
0a50: 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65    _activeStateme
0a60: 6e 74 49 6e 64 65 78 20 3d 20 2d 31 3b 0a 20 20  ntIndex = -1;.  
0a70: 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65      _activeState
0a80: 6d 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20  ment = null;.   
0a90: 20 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64     _rowsAffected
0aa0: 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 5f 66 69   = -1;.      _fi
0ab0: 65 6c 64 43 6f 75 6e 74 20 3d 20 2d 31 3b 0a 20  eldCount = -1;. 
0ac0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
0ad0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0ae0: 43 6c 6f 73 65 73 20 74 68 65 20 64 61 74 61 72  Closes the datar
0af0: 65 61 64 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c  eader, potential
0b00: 6c 79 20 63 6c 6f 73 69 6e 67 20 74 68 65 20 63  ly closing the c
0b10: 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 77 65 6c  onnection as wel
0b20: 6c 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61  l if CommandBeha
0b30: 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63  vior.CloseConnec
0b40: 74 69 6f 6e 20 77 61 73 20 73 70 65 63 69 66 69  tion was specifi
0b50: 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
0b60: 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69  mmary>.    publi
0b70: 63 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  c override void 
0b80: 43 6c 6f 73 65 28 29 0a 20 20 20 20 7b 0a 20 20  Close().    {.  
0b90: 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64      if (_command
0ba0: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
0bb0: 7b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20  {.        while 
0bc0: 28 4e 65 78 74 52 65 73 75 6c 74 28 29 29 0a 20  (NextResult()). 
0bd0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
0be0: 20 7d 0a 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d   }.        _comm
0bf0: 61 6e 64 2e 43 6c 65 61 72 44 61 74 61 52 65 61  and.ClearDataRea
0c00: 64 65 72 28 29 3b 0a 20 20 20 20 20 20 7d 0a 0a  der();.      }..
0c10: 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20        // If the 
0c20: 64 61 74 61 72 65 61 64 65 72 27 73 20 62 65 68  datareader's beh
0c30: 61 76 69 6f 72 20 69 6e 63 6c 75 64 65 73 20 63  avior includes c
0c40: 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65  losing the conne
0c50: 63 74 69 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73  ction, then do s
0c60: 6f 20 68 65 72 65 2e 0a 20 20 20 20 20 20 69 66  o here..      if
0c70: 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
0c80: 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
0c90: 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65  avior.CloseConne
0ca0: 63 74 69 6f 6e 29 20 21 3d 20 30 29 0a 20 20 20  ction) != 0).   
0cb0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f       _command.Co
0cc0: 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29  nnection.Close()
0cd0: 3b 0a 0a 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e  ;..      _comman
0ce0: 64 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  d = null;.      
0cf0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
0d00: 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 5f   = null;.      _
0d10: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d  fieldTypeArray =
0d20: 20 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 0a 20 20   null;.    }..  
0d30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
0d40: 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73      /// Disposes
0d50: 20 74 68 65 20 64 61 74 61 72 65 61 64 65 72 2e   the datareader.
0d60: 20 20 43 61 6c 6c 73 20 43 6c 6f 73 65 28 29 20    Calls Close() 
0d70: 74 6f 20 65 6e 73 75 72 65 20 65 76 65 72 79 74  to ensure everyt
0d80: 68 69 6e 67 20 69 73 20 63 6c 65 61 6e 65 64 20  hing is cleaned 
0d90: 75 70 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  up..    /// </su
0da0: 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 6f 74 65  mmary>.    prote
0db0: 63 74 65 64 20 6f 76 65 72 72 69 64 65 20 76 6f  cted override vo
0dc0: 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20  id Dispose(bool 
0dd0: 64 69 73 70 6f 73 69 6e 67 29 0a 20 20 20 20 7b  disposing).    {
0de0: 0a 20 20 20 20 20 20 43 6c 6f 73 65 28 29 3b 0a  .      Close();.
0df0: 20 20 20 20 20 20 62 61 73 65 2e 44 69 73 70 6f        base.Dispo
0e00: 73 65 28 64 69 73 70 6f 73 69 6e 67 29 3b 0a 20  se(disposing);. 
0e10: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
0e20: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0e30: 54 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 20 69  Throw an error i
0e40: 66 20 74 68 65 20 64 61 74 61 72 65 61 64 65 72  f the datareader
0e50: 20 69 73 20 63 6c 6f 73 65 64 0a 20 20 20 20 2f   is closed.    /
0e60: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
0e70: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
0e80: 68 65 63 6b 43 6c 6f 73 65 64 28 29 0a 20 20 20  heckClosed().   
0e90: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 5f 63 6f   {.      if (_co
0ea0: 6d 6d 61 6e 64 20 3d 3d 20 6e 75 6c 6c 29 0a 20  mmand == null). 
0eb0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
0ec0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
0ed0: 6e 45 78 63 65 70 74 69 6f 6e 28 22 44 61 74 61  nException("Data
0ee0: 52 65 61 64 65 72 20 68 61 73 20 62 65 65 6e 20  Reader has been 
0ef0: 63 6c 6f 73 65 64 22 29 3b 0a 20 20 20 20 7d 0a  closed");.    }.
0f00: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0f10: 79 3e 0a 20 20 20 20 2f 2f 2f 20 45 6e 75 6d 65  y>.    /// Enume
0f20: 72 61 74 6f 72 20 73 75 70 70 6f 72 74 0a 20 20  rator support.  
0f30: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0f40: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
0f50: 73 3e 52 65 74 75 72 6e 73 20 61 20 44 62 45 6e  s>Returns a DbEn
0f60: 75 6d 65 72 61 74 6f 72 20 6f 62 6a 65 63 74 2e  umerator object.
0f70: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
0f80: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 43  ublic override C
0f90: 6f 6c 6c 65 63 74 69 6f 6e 73 2e 49 45 6e 75 6d  ollections.IEnum
0fa0: 65 72 61 74 6f 72 20 47 65 74 45 6e 75 6d 65 72  erator GetEnumer
0fb0: 61 74 6f 72 28 29 0a 20 20 20 20 7b 0a 20 20 20  ator().    {.   
0fc0: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 62     return new Db
0fd0: 45 6e 75 6d 65 72 61 74 6f 72 28 74 68 69 73 29  Enumerator(this)
0fe0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
0ff0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
1000: 2f 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74  // Not implement
1010: 65 64 2e 20 20 52 65 74 75 72 6e 73 20 30 0a 20  ed.  Returns 0. 
1020: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1030: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
1040: 72 72 69 64 65 20 69 6e 74 20 44 65 70 74 68 0a  rride int Depth.
1050: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a      {.      get.
1060: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1070: 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20  CheckClosed();. 
1080: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
1090: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
10a0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
10b0: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  >.    /// Return
10c0: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
10d0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 63  columns in the c
10e0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
10f0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1100: 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ry>.    public o
1110: 76 65 72 72 69 64 65 20 69 6e 74 20 46 69 65 6c  verride int Fiel
1120: 64 43 6f 75 6e 74 0a 20 20 20 20 7b 0a 20 20 20  dCount.    {.   
1130: 20 20 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20     get.      {. 
1140: 20 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73         CheckClos
1150: 65 64 28 29 3b 0a 20 20 20 20 20 20 20 20 72 65  ed();.        re
1160: 74 75 72 6e 20 5f 66 69 65 6c 64 43 6f 75 6e 74  turn _fieldCount
1170: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1180: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1190: 79 3e 0a 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74  y>.    /// SQLit
11a0: 65 20 69 73 20 69 6e 68 65 72 65 6e 74 6c 79 20  e is inherently 
11b0: 75 6e 2d 74 79 70 65 64 2e 20 20 41 6c 6c 20 64  un-typed.  All d
11c0: 61 74 61 74 79 70 65 73 20 69 6e 20 53 51 4c 69  atatypes in SQLi
11d0: 74 65 20 61 72 65 20 6e 61 74 69 76 65 6c 79 20  te are natively 
11e0: 73 74 72 69 6e 67 73 2e 20 20 54 68 65 20 64 65  strings.  The de
11f0: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 65 20  finition of the 
1200: 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61 62  columns of a tab
1210: 6c 65 0a 20 20 20 20 2f 2f 2f 20 61 6e 64 20 74  le.    /// and t
1220: 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 72  he affinity of r
1230: 65 74 75 72 6e 65 64 20 74 79 70 65 73 20 61 72  eturned types ar
1240: 65 20 61 6c 6c 20 77 65 20 68 61 76 65 20 74 6f  e all we have to
1250: 20 67 6f 20 6f 6e 20 74 6f 20 74 79 70 65 2d 72   go on to type-r
1260: 65 73 74 72 69 63 74 20 64 61 74 61 20 69 6e 20  estrict data in 
1270: 74 68 65 20 72 65 61 64 65 72 2e 0a 20 20 20 20  the reader..    
1280: 2f 2f 2f 20 0a 20 20 20 20 2f 2f 2f 20 54 68 69  /// .    /// Thi
1290: 73 20 66 75 6e 63 74 69 6f 6e 20 61 74 74 65 6d  s function attem
12a0: 70 74 73 20 74 6f 20 76 65 72 69 66 79 20 74 68  pts to verify th
12b0: 61 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 64  at the type of d
12c0: 61 74 61 20 62 65 69 6e 67 20 72 65 71 75 65 73  ata being reques
12d0: 74 65 64 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ted of a column 
12e0: 6d 61 74 63 68 65 73 20 74 68 65 20 64 61 74 61  matches the data
12f0: 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  type of the colu
1300: 6d 6e 2e 20 20 49 6e 0a 20 20 20 20 2f 2f 2f 20  mn.  In.    /// 
1310: 74 68 65 20 63 61 73 65 20 6f 66 20 63 6f 6c 75  the case of colu
1320: 6d 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  mns that are not
1330: 20 62 61 63 6b 65 64 20 69 6e 74 6f 20 61 20 74   backed into a t
1340: 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2c  able definition,
1350: 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 6d   we attempt to m
1360: 61 74 63 68 20 75 70 20 74 68 65 20 61 66 66 69  atch up the affi
1370: 6e 69 74 79 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  nity of a column
1380: 20 28 69 6e 74 2c 20 64 6f 75 62 6c 65 2c 20 73   (int, double, s
1390: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 29 0a 20  tring or blob). 
13a0: 20 20 20 2f 2f 2f 20 74 6f 20 61 20 73 65 74 20     /// to a set 
13b0: 6f 66 20 6b 6e 6f 77 6e 20 74 79 70 65 73 20 74  of known types t
13c0: 68 61 74 20 63 6c 6f 73 65 6c 79 20 6d 61 74 63  hat closely matc
13d0: 68 20 74 68 61 74 20 61 66 66 69 6e 69 74 79 2e  h that affinity.
13e0: 20 20 49 74 27 73 20 6e 6f 74 20 61 6e 20 65 78    It's not an ex
13f0: 61 63 74 20 73 63 69 65 6e 63 65 2c 20 62 75 74  act science, but
1400: 20 69 74 73 20 74 68 65 20 62 65 73 74 20 77 65   its the best we
1410: 20 63 61 6e 20 64 6f 2e 0a 20 20 20 20 2f 2f 2f   can do..    ///
1420: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
1430: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0a 20 20  /// <returns>.  
1440: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
1450: 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 49 6e  ion throws an In
1460: 76 61 6c 69 64 54 79 70 65 43 61 73 74 28 29 20  validTypeCast() 
1470: 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65  exception if the
1480: 20 72 65 71 75 65 73 74 65 64 20 74 79 70 65 20   requested type 
1490: 64 6f 65 73 6e 27 74 20 6d 61 74 63 68 20 74 68  doesn't match th
14a0: 65 20 63 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e  e column's defin
14b0: 69 74 69 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74  ition or affinit
14c0: 79 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  y..    /// </ret
14d0: 75 72 6e 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  urns>.    /// <p
14e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
14f0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
1500: 6f 6c 75 6d 6e 20 74 6f 20 74 79 70 65 2d 63 68  olumn to type-ch
1510: 65 63 6b 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  eck</param>.    
1520: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1530: 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20 77  "typ">The type w
1540: 65 20 77 61 6e 74 20 74 6f 20 67 65 74 20 6f 75  e want to get ou
1550: 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 3c  t of the column<
1560: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 70 72 69 76  /param>.    priv
1570: 61 74 65 20 76 6f 69 64 20 56 65 72 69 66 79 54  ate void VerifyT
1580: 79 70 65 28 69 6e 74 20 69 2c 20 44 62 54 79 70  ype(int i, DbTyp
1590: 65 20 74 79 70 29 0a 20 20 20 20 7b 0a 20 20 20  e typ).    {.   
15a0: 20 20 20 53 51 4c 69 74 65 54 79 70 65 20 74 20     SQLiteType t 
15b0: 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  = GetSQLiteType(
15c0: 69 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 74  i);..      if (t
15d0: 2e 54 79 70 65 20 3d 3d 20 74 79 70 29 20 72 65  .Type == typ) re
15e0: 74 75 72 6e 3b 0a 0a 20 20 20 20 20 20 69 66 20  turn;..      if 
15f0: 28 74 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70  (t.Type != DbTyp
1600: 65 2e 4f 62 6a 65 63 74 29 0a 20 20 20 20 20 20  e.Object).      
1610: 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20 43 6f 65  {.        // Coe
1620: 72 63 61 62 6c 65 20 74 79 70 65 2c 20 75 73 75  rcable type, usu
1630: 61 6c 6c 79 20 61 20 6c 69 74 65 72 61 6c 20 6f  ally a literal o
1640: 66 20 73 6f 6d 65 20 6b 69 6e 64 0a 20 20 20 20  f some kind.    
1650: 20 20 20 20 73 77 69 74 63 68 20 28 5f 66 69 65      switch (_fie
1660: 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d 2e 41  ldTypeArray[i].A
1670: 66 66 69 6e 69 74 79 29 0a 20 20 20 20 20 20 20  ffinity).       
1680: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 63 61 73   {.          cas
1690: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49  e TypeAffinity.I
16a0: 6e 74 36 34 3a 0a 20 20 20 20 20 20 20 20 20 20  nt64:.          
16b0: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
16c0: 79 70 65 2e 49 6e 74 31 36 29 20 72 65 74 75 72  ype.Int16) retur
16d0: 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  n;.            i
16e0: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
16f0: 2e 49 6e 74 33 32 29 20 72 65 74 75 72 6e 3b 0a  .Int32) return;.
1700: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1710: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e  typ == DbType.In
1720: 74 36 34 29 20 72 65 74 75 72 6e 3b 0a 20 20 20  t64) return;.   
1730: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
1740: 20 3d 3d 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65   == DbType.Boole
1750: 61 6e 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  an) return;.    
1760: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
1770: 3d 3d 20 44 62 54 79 70 65 2e 42 79 74 65 29 20  == DbType.Byte) 
1780: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
1790: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
17a0: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
17b0: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0a 20  finity.Double:. 
17c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
17d0: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 69 6e  yp == DbType.Sin
17e0: 67 6c 65 29 20 72 65 74 75 72 6e 3b 0a 20 20 20  gle) return;.   
17f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
1800: 20 3d 3d 20 44 62 54 79 70 65 2e 44 6f 75 62 6c   == DbType.Doubl
1810: 65 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  e) return;.     
1820: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
1830: 3d 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c  = DbType.Decimal
1840: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  ) return;.      
1850: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1860: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
1870: 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0a 20  Affinity.Text:. 
1880: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
1890: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 42 79  yp == DbType.SBy
18a0: 74 65 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  te) return;.    
18b0: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
18c0: 3d 3d 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67  == DbType.String
18d0: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  ) return;.      
18e0: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
18f0: 20 44 62 54 79 70 65 2e 53 42 79 74 65 29 20 72   DbType.SByte) r
1900: 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 20  eturn;.         
1910: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
1920: 54 79 70 65 2e 47 75 69 64 29 20 72 65 74 75 72  Type.Guid) retur
1930: 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  n;.            i
1940: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
1950: 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74 75 72  .DateTime) retur
1960: 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  n;.            b
1970: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  reak;.          
1980: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
1990: 79 2e 42 6c 6f 62 3a 0a 20 20 20 20 20 20 20 20  y.Blob:.        
19a0: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
19b0: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 20 72 65  bType.String) re
19c0: 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20  turn;.          
19d0: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
19e0: 79 70 65 2e 42 69 6e 61 72 79 29 20 72 65 74 75  ype.Binary) retu
19f0: 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  rn;.            
1a00: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
1a10: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1a20: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
1a30: 64 43 61 73 74 45 78 63 65 70 74 69 6f 6e 28 29  dCastException()
1a40: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
1a50: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
1a60: 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65  // Retrieves the
1a70: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 62 6f 6f   column as a boo
1a80: 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 20 20 2f  lean value.    /
1a90: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
1aa0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1ab0: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
1ac0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
1ad0: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
1ae0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
1af0: 6e 73 3e 62 6f 6f 6c 3c 2f 72 65 74 75 72 6e 73  ns>bool</returns
1b00: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
1b10: 72 72 69 64 65 20 62 6f 6f 6c 20 47 65 74 42 6f  rride bool GetBo
1b20: 6f 6c 65 61 6e 28 69 6e 74 20 69 29 0a 20 20 20  olean(int i).   
1b30: 20 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79 54   {.      VerifyT
1b40: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42 6f  ype(i, DbType.Bo
1b50: 6f 6c 65 61 6e 29 3b 0a 20 20 20 20 20 20 72 65  olean);.      re
1b60: 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42  turn Convert.ToB
1b70: 6f 6f 6c 65 61 6e 28 47 65 74 56 61 6c 75 65 28  oolean(GetValue(
1b80: 69 29 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  i), CultureInfo.
1b90: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 29 3b  CurrentCulture);
1ba0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
1bb0: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
1bc0: 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20  / Retrieves the 
1bd0: 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73 69 6e 67  column as a sing
1be0: 6c 65 20 62 79 74 65 20 76 61 6c 75 65 0a 20 20  le byte value.  
1bf0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1c00: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1c10: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
1c20: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
1c30: 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
1c40: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
1c50: 74 75 72 6e 73 3e 62 79 74 65 3c 2f 72 65 74 75  turns>byte</retu
1c60: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
1c70: 6f 76 65 72 72 69 64 65 20 62 79 74 65 20 47 65  override byte Ge
1c80: 74 42 79 74 65 28 69 6e 74 20 69 29 0a 20 20 20  tByte(int i).   
1c90: 20 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79 54   {.      VerifyT
1ca0: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42 79  ype(i, DbType.By
1cb0: 74 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  te);.      retur
1cc0: 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42 79 74 65  n Convert.ToByte
1cd0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
1ce0: 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28  t._sql.GetInt32(
1cf0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
1d00: 2c 20 69 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  , i));.    }..  
1d10: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
1d20: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
1d30: 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e  s a column as an
1d40: 20 61 72 72 61 79 20 6f 66 20 62 79 74 65 73 20   array of bytes 
1d50: 28 62 6c 6f 62 29 0a 20 20 20 20 2f 2f 2f 20 3c  (blob).    /// <
1d60: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
1d70: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
1d80: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
1d90: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
1da0: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  rieve</param>.  
1db0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1dc0: 65 3d 22 66 69 65 6c 64 4f 66 66 73 65 74 22 3e  e="fieldOffset">
1dd0: 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69  The zero-based i
1de0: 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f  ndex of where to
1df0: 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67 20 74   begin reading t
1e00: 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0a  he data</param>.
1e10: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1e20: 61 6d 65 3d 22 62 75 66 66 65 72 22 3e 54 68 65  ame="buffer">The
1e30: 20 62 75 66 66 65 72 20 74 6f 20 77 72 69 74 65   buffer to write
1e40: 20 74 68 65 20 62 79 74 65 73 20 69 6e 74 6f 3c   the bytes into<
1e50: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
1e60: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66  <param name="buf
1e70: 66 65 72 6f 66 66 73 65 74 22 3e 54 68 65 20 7a  feroffset">The z
1e80: 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20  ero-based index 
1e90: 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65 67 69  of where to begi
1ea0: 6e 20 77 72 69 74 69 6e 67 20 69 6e 74 6f 20 74  n writing into t
1eb0: 68 65 20 61 72 72 61 79 3c 2f 70 61 72 61 6d 3e  he array</param>
1ec0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1ed0: 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 54 68  name="length">Th
1ee0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
1ef0: 73 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  s to retrieve</p
1f00: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
1f10: 65 74 75 72 6e 73 3e 54 68 65 20 61 63 74 75 61  eturns>The actua
1f20: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
1f30: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 74  s written into t
1f40: 68 65 20 61 72 72 61 79 3c 2f 72 65 74 75 72 6e  he array</return
1f50: 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61  s>.    /// <rema
1f60: 72 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20 54 6f 20  rks>.    /// To 
1f70: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
1f80: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
1f90: 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 70 61 73   the column, pas
1fa0: 73 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20 66  s a null value f
1fb0: 6f 72 20 74 68 65 20 62 75 66 66 65 72 2e 20 20  or the buffer.  
1fc0: 54 68 65 20 74 6f 74 61 6c 20 6c 65 6e 67 74 68  The total length
1fd0: 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65   will be returne
1fe0: 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d  d..    /// </rem
1ff0: 61 72 6b 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  arks>.    public
2000: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
2010: 65 74 42 79 74 65 73 28 69 6e 74 20 69 2c 20 6c  etBytes(int i, l
2020: 6f 6e 67 20 66 69 65 6c 64 4f 66 66 73 65 74 2c  ong fieldOffset,
2030: 20 62 79 74 65 5b 5d 20 62 75 66 66 65 72 2c 20   byte[] buffer, 
2040: 69 6e 74 20 62 75 66 66 65 72 6f 66 66 73 65 74  int bufferoffset
2050: 2c 20 69 6e 74 20 6c 65 6e 67 74 68 29 0a 20 20  , int length).  
2060: 20 20 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79    {.      Verify
2070: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42  Type(i, DbType.B
2080: 69 6e 61 72 79 29 3b 0a 20 20 20 20 20 20 72 65  inary);.      re
2090: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
20a0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79  ement._sql.GetBy
20b0: 74 65 73 28 5f 61 63 74 69 76 65 53 74 61 74 65  tes(_activeState
20c0: 6d 65 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69  ment, i, (int)fi
20d0: 65 6c 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65  eldOffset, buffe
20e0: 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c  r, bufferoffset,
20f0: 20 6c 65 6e 67 74 68 29 3b 0a 20 20 20 20 7d 0a   length);.    }.
2100: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
2110: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  y>.    /// Retur
2120: 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73  ns the column as
2130: 20 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63   a single charac
2140: 74 65 72 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ter.    /// </su
2150: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
2160: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
2170: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
2180: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
2190: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
21a0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 63 68 61 72  // <returns>char
21b0: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
21c0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 63  ublic override c
21d0: 68 61 72 20 47 65 74 43 68 61 72 28 69 6e 74 20  har GetChar(int 
21e0: 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 56  i).    {.      V
21f0: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
2200: 79 70 65 2e 53 42 79 74 65 29 3b 0a 20 20 20 20  ype.SByte);.    
2210: 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
2220: 2e 54 6f 43 68 61 72 28 5f 61 63 74 69 76 65 53  .ToChar(_activeS
2230: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
2240: 74 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74  tInt32(_activeSt
2250: 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20  atement, i));.  
2260: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
2270: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
2280: 65 74 72 69 65 76 65 73 20 61 20 63 6f 6c 75 6d  etrieves a colum
2290: 6e 20 61 73 20 61 6e 20 61 72 72 61 79 20 6f 66  n as an array of
22a0: 20 63 68 61 72 73 20 28 62 6c 6f 62 29 0a 20 20   chars (blob).  
22b0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
22c0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
22d0: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
22e0: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
22f0: 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
2300: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ram>.    /// <pa
2310: 72 61 6d 20 6e 61 6d 65 3d 22 66 69 65 6c 64 6f  ram name="fieldo
2320: 66 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d  ffset">The zero-
2330: 62 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20 77  based index of w
2340: 68 65 72 65 20 74 6f 20 62 65 67 69 6e 20 72 65  here to begin re
2350: 61 64 69 6e 67 20 74 68 65 20 64 61 74 61 3c 2f  ading the data</
2360: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
2370: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66  param name="buff
2380: 65 72 22 3e 54 68 65 20 62 75 66 66 65 72 20 74  er">The buffer t
2390: 6f 20 77 72 69 74 65 20 74 68 65 20 63 68 61 72  o write the char
23a0: 61 63 74 65 72 73 20 69 6e 74 6f 3c 2f 70 61 72  acters into</par
23b0: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  am>.    /// <par
23c0: 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 6f  am name="buffero
23d0: 66 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d  ffset">The zero-
23e0: 62 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20 77  based index of w
23f0: 68 65 72 65 20 74 6f 20 62 65 67 69 6e 20 77 72  here to begin wr
2400: 69 74 69 6e 67 20 69 6e 74 6f 20 74 68 65 20 61  iting into the a
2410: 72 72 61 79 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  rray</param>.   
2420: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2430: 3d 22 6c 65 6e 67 74 68 22 3e 54 68 65 20 6e 75  ="length">The nu
2440: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f  mber of bytes to
2450: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
2460: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
2470: 6e 73 3e 54 68 65 20 61 63 74 75 61 6c 20 6e 75  ns>The actual nu
2480: 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
2490: 72 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  rs written into 
24a0: 74 68 65 20 61 72 72 61 79 3c 2f 72 65 74 75 72  the array</retur
24b0: 6e 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d  ns>.    /// <rem
24c0: 61 72 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20 54 6f  arks>.    /// To
24d0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
24e0: 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
24f0: 65 72 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ers in the colum
2500: 6e 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c 20 76  n, pass a null v
2510: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62 75 66  alue for the buf
2520: 66 65 72 2e 20 20 54 68 65 20 74 6f 74 61 6c 20  fer.  The total 
2530: 6c 65 6e 67 74 68 20 77 69 6c 6c 20 62 65 20 72  length will be r
2540: 65 74 75 72 6e 65 64 2e 0a 20 20 20 20 2f 2f 2f  eturned..    ///
2550: 20 3c 2f 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20   </remarks>.    
2560: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
2570: 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 69 6e  long GetChars(in
2580: 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65 6c 64 6f  t i, long fieldo
2590: 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62 75  ffset, char[] bu
25a0: 66 66 65 72 2c 20 69 6e 74 20 62 75 66 66 65 72  ffer, int buffer
25b0: 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c 65 6e 67  offset, int leng
25c0: 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  th).    {.      
25d0: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
25e0: 54 79 70 65 2e 53 74 72 69 6e 67 29 3b 0a 20 20  Type.String);.  
25f0: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
2600: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
2610: 2e 47 65 74 43 68 61 72 73 28 5f 61 63 74 69 76  .GetChars(_activ
2620: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 28  eStatement, i, (
2630: 69 6e 74 29 66 69 65 6c 64 6f 66 66 73 65 74 2c  int)fieldoffset,
2640: 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f   buffer, buffero
2650: 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0a  ffset, length);.
2660: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
2670: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
2680: 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20 6e   Retrieves the n
2690: 61 6d 65 20 6f 66 20 74 68 65 20 62 61 63 6b 2d  ame of the back-
26a0: 65 6e 64 20 64 61 74 61 74 79 70 65 20 6f 66 20  end datatype of 
26b0: 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2f  the column.    /
26c0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
26d0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
26e0: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
26f0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
2700: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
2710: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
2720: 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72  ns>string</retur
2730: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
2740: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
2750: 65 74 44 61 74 61 54 79 70 65 4e 61 6d 65 28 69  etDataTypeName(i
2760: 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20  nt i).    {.    
2770: 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b    CheckClosed();
2780: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70  .      SQLiteTyp
2790: 65 20 74 79 70 20 3d 20 47 65 74 53 51 4c 69 74  e typ = GetSQLit
27a0: 65 54 79 70 65 28 69 29 3b 0a 0a 20 20 20 20 20  eType(i);..     
27b0: 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d   if (typ.Type ==
27c0: 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 20   DbType.Object) 
27d0: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 43 6f 6e  return SQLiteCon
27e0: 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54  vert.SQLiteTypeT
27f0: 6f 54 79 70 65 28 74 79 70 29 2e 4e 61 6d 65 3b  oType(typ).Name;
2800: 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f  ..      return _
2810: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
2820: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28  _sql.ColumnType(
2830: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
2840: 2c 20 69 2c 20 6f 75 74 20 74 79 70 2e 41 66 66  , i, out typ.Aff
2850: 69 6e 69 74 79 29 3b 0a 20 20 20 20 7d 0a 0a 20  inity);.    }.. 
2860: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2870: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
2880: 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  e the column as 
2890: 61 20 64 61 74 65 2f 74 69 6d 65 20 76 61 6c 75  a date/time valu
28a0: 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  e.    /// </summ
28b0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
28c0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
28d0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
28e0: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
28f0: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
2900: 20 3c 72 65 74 75 72 6e 73 3e 44 61 74 65 54 69   <returns>DateTi
2910: 6d 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  me</returns>.   
2920: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
2930: 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61 74   DateTime GetDat
2940: 65 54 69 6d 65 28 69 6e 74 20 69 29 0a 20 20 20  eTime(int i).   
2950: 20 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79 54   {.      VerifyT
2960: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 44 61  ype(i, DbType.Da
2970: 74 65 54 69 6d 65 29 3b 0a 20 20 20 20 20 20 72  teTime);.      r
2980: 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61  eturn _activeSta
2990: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44  tement._sql.GetD
29a0: 61 74 65 54 69 6d 65 28 5f 61 63 74 69 76 65 53  ateTime(_activeS
29b0: 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20  tatement, i);.  
29c0: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
29d0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
29e0: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 75  etrieve the colu
29f0: 6d 6e 20 61 73 20 61 20 64 65 63 69 6d 61 6c 20  mn as a decimal 
2a00: 76 61 6c 75 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f  value.    /// </
2a10: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
2a20: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
2a30: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
2a40: 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72  e column to retr
2a50: 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  ieve</param>.   
2a60: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 64 65   /// <returns>de
2a70: 63 69 6d 61 6c 3c 2f 72 65 74 75 72 6e 73 3e 0a  cimal</returns>.
2a80: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
2a90: 69 64 65 20 64 65 63 69 6d 61 6c 20 47 65 74 44  ide decimal GetD
2aa0: 65 63 69 6d 61 6c 28 69 6e 74 20 69 29 0a 20 20  ecimal(int i).  
2ab0: 20 20 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79    {.      Verify
2ac0: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 44  Type(i, DbType.D
2ad0: 65 63 69 6d 61 6c 29 3b 0a 20 20 20 20 20 20 72  ecimal);.      r
2ae0: 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f  eturn Convert.To
2af0: 44 65 63 69 6d 61 6c 28 5f 61 63 74 69 76 65 53  Decimal(_activeS
2b00: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
2b10: 74 44 6f 75 62 6c 65 28 5f 61 63 74 69 76 65 53  tDouble(_activeS
2b20: 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20  tatement, i));. 
2b30: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
2b40: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
2b50: 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75  Returns the colu
2b60: 6d 6e 20 61 73 20 61 20 64 6f 75 62 6c 65 0a 20  mn as a double. 
2b70: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2b80: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
2b90: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
2ba0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
2bb0: 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  n to retrieve</p
2bc0: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
2bd0: 65 74 75 72 6e 73 3e 64 6f 75 62 6c 65 3c 2f 72  eturns>double</r
2be0: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
2bf0: 69 63 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62  ic override doub
2c00: 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 69 6e 74  le GetDouble(int
2c10: 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20   i).    {.      
2c20: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
2c30: 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b 0a 20 20  Type.Double);.  
2c40: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
2c50: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
2c60: 2e 47 65 74 44 6f 75 62 6c 65 28 5f 61 63 74 69  .GetDouble(_acti
2c70: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
2c80: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
2c90: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
2ca0: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 2e 4e  / Returns the .N
2cb0: 45 54 20 74 79 70 65 20 6f 66 20 61 20 67 69 76  ET type of a giv
2cc0: 65 6e 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2f 2f  en column.    //
2cd0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
2ce0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2cf0: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
2d00: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
2d10: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
2d20: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
2d30: 73 3e 54 79 70 65 3c 2f 72 65 74 75 72 6e 73 3e  s>Type</returns>
2d40: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
2d50: 72 69 64 65 20 54 79 70 65 20 47 65 74 46 69 65  ride Type GetFie
2d60: 6c 64 54 79 70 65 28 69 6e 74 20 69 29 0a 20 20  ldType(int i).  
2d70: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
2d80: 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53   SQLiteConvert.S
2d90: 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28  QLiteTypeToType(
2da0: 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 69 29  GetSQLiteType(i)
2db0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f  );.    }..    //
2dc0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
2dd0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 63 6f  /// Returns a co
2de0: 6c 75 6d 6e 20 61 73 20 61 20 66 6c 6f 61 74 20  lumn as a float 
2df0: 76 61 6c 75 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f  value.    /// </
2e00: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
2e10: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
2e20: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
2e30: 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72  e column to retr
2e40: 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  ieve</param>.   
2e50: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 66 6c   /// <returns>fl
2e60: 6f 61 74 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  oat</returns>.  
2e70: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
2e80: 65 20 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61 74  e float GetFloat
2e90: 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20  (int i).    {.  
2ea0: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
2eb0: 2c 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29  , DbType.Single)
2ec0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 43  ;.      return C
2ed0: 6f 6e 76 65 72 74 2e 54 6f 53 69 6e 67 6c 65 28  onvert.ToSingle(
2ee0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
2ef0: 2e 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28  ._sql.GetDouble(
2f00: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
2f10: 2c 20 69 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  , i));.    }..  
2f20: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
2f30: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
2f40: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
2f50: 47 75 69 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  Guid.    /// </s
2f60: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
2f70: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
2f80: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
2f90: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
2fa0: 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  eve</param>.    
2fb0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 47 75 69  /// <returns>Gui
2fc0: 64 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  d</returns>.    
2fd0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
2fe0: 47 75 69 64 20 47 65 74 47 75 69 64 28 69 6e 74  Guid GetGuid(int
2ff0: 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20   i).    {.      
3000: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
3010: 54 79 70 65 2e 47 75 69 64 29 3b 0a 20 20 20 20  Type.Guid);.    
3020: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
3030: 64 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  d(_activeStateme
3040: 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28  nt._sql.GetText(
3050: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
3060: 2c 20 69 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  , i));.    }..  
3070: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
3080: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
3090: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
30a0: 73 68 6f 72 74 0a 20 20 20 20 2f 2f 2f 20 3c 2f  short.    /// </
30b0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
30c0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
30d0: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
30e0: 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72  e column to retr
30f0: 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  ieve</param>.   
3100: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 49 6e   /// <returns>In
3110: 74 31 36 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  t16</returns>.  
3120: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
3130: 65 20 49 6e 74 31 36 20 47 65 74 49 6e 74 31 36  e Int16 GetInt16
3140: 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20  (int i).    {.  
3150: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
3160: 2c 20 44 62 54 79 70 65 2e 49 6e 74 31 36 29 3b  , DbType.Int16);
3170: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f  .      return Co
3180: 6e 76 65 72 74 2e 54 6f 49 6e 74 31 36 28 5f 61  nvert.ToInt16(_a
3190: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
31a0: 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63  sql.GetInt32(_ac
31b0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
31c0: 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ));.    }..    /
31d0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
31e0: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
31f0: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20  he column as an 
3200: 69 6e 74 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  int.    /// </su
3210: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
3220: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
3230: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
3240: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
3250: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
3260: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74 33  // <returns>Int3
3270: 32 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  2</returns>.    
3280: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
3290: 49 6e 74 33 32 20 47 65 74 49 6e 74 33 32 28 69  Int32 GetInt32(i
32a0: 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20  nt i).    {.    
32b0: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
32c0: 44 62 54 79 70 65 2e 49 6e 74 33 32 29 3b 0a 20  DbType.Int32);. 
32d0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
32e0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
32f0: 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74 69  l.GetInt32(_acti
3300: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
3310: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
3320: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
3330: 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20  / Retrieves the 
3340: 63 6f 6c 75 6d 6e 20 61 73 20 61 20 6c 6f 6e 67  column as a long
3350: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3360: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
3370: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
3380: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
3390: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
33a0: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
33b0: 3c 72 65 74 75 72 6e 73 3e 49 6e 74 36 34 3c 2f  <returns>Int64</
33c0: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
33d0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74  lic override Int
33e0: 36 34 20 47 65 74 49 6e 74 36 34 28 69 6e 74 20  64 GetInt64(int 
33f0: 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 56  i).    {.      V
3400: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
3410: 79 70 65 2e 49 6e 74 36 34 29 3b 0a 20 20 20 20  ype.Int64);.    
3420: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
3430: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
3440: 65 74 49 6e 74 36 34 28 5f 61 63 74 69 76 65 53  etInt64(_activeS
3450: 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20  tatement, i);.  
3460: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
3470: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
3480: 65 74 72 69 65 76 65 73 20 74 68 65 20 6e 61 6d  etrieves the nam
3490: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0a  e of the column.
34a0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
34b0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
34c0: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
34d0: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
34e0: 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  mn to retrieve</
34f0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
3500: 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f  returns>string</
3510: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
3520: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
3530: 69 6e 67 20 47 65 74 4e 61 6d 65 28 69 6e 74 20  ing GetName(int 
3540: 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43  i).    {.      C
3550: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20  heckClosed();.  
3560: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
3570: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
3580: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63 74  .ColumnName(_act
3590: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
35a0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
35b0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
35c0: 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65  // Retrieves the
35d0: 20 69 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 2c 20   i of a column, 
35e0: 67 69 76 65 6e 20 69 74 73 20 6e 61 6d 65 0a 20  given its name. 
35f0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3600: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
3610: 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 54 68 65   name="name">The
3620: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   name of the col
3630: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
3640: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
3650: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 69 6e 74  <returns>The int
3660: 20 69 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e   i of the column
3670: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
3680: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
3690: 6e 74 20 47 65 74 4f 72 64 69 6e 61 6c 28 73 74  nt GetOrdinal(st
36a0: 72 69 6e 67 20 6e 61 6d 65 29 0a 20 20 20 20 7b  ring name).    {
36b0: 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73  .      CheckClos
36c0: 65 64 28 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ed();.      retu
36d0: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
36e0: 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 49  ent._sql.ColumnI
36f0: 6e 64 65 78 28 5f 61 63 74 69 76 65 53 74 61 74  ndex(_activeStat
3700: 65 6d 65 6e 74 2c 20 6e 61 6d 65 29 3b 0a 20 20  ement, name);.  
3710: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
3720: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 53  mmary>.    /// S
3730: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
3740: 6e 20 69 6e 20 53 51 4c 69 74 65 20 69 73 20 61  n in SQLite is a
3750: 6e 20 69 66 66 79 2d 62 75 73 69 6e 65 73 73 2e  n iffy-business.
3760: 20 20 57 65 27 76 65 20 65 78 74 65 6e 64 65 64    We've extended
3770: 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69   the native SQLi
3780: 74 65 33 2e 44 4c 4c 20 74 6f 20 69 6e 63 6c 75  te3.DLL to inclu
3790: 64 65 20 61 20 73 70 65 63 69 61 6c 20 70 72 61  de a special pra
37a0: 67 6d 61 20 63 61 6c 6c 65 64 0a 20 20 20 20 2f  gma called.    /
37b0: 2f 2f 20 50 52 41 47 4d 41 20 72 65 61 6c 5f 63  // PRAGMA real_c
37c0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 0a 20 20 20 20  olumn_names.    
37d0: 2f 2f 2f 20 57 68 65 6e 20 65 6e 61 62 6c 65 64  /// When enabled
37e0: 2c 20 74 68 65 20 70 72 61 67 6d 61 20 63 61 75  , the pragma cau
37f0: 73 65 73 20 61 6c 6c 20 63 6f 6c 75 6d 6e 20 61  ses all column a
3800: 6c 69 61 73 65 73 20 74 6f 20 62 65 20 69 67 6e  liases to be ign
3810: 6f 72 65 64 2c 20 61 6e 64 20 74 68 65 20 66 75  ored, and the fu
3820: 6c 6c 20 44 61 74 61 62 61 73 65 2e 54 61 62 6c  ll Database.Tabl
3830: 65 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 20 74 6f 20  e.ColumnName to 
3840: 62 65 20 72 65 74 75 72 6e 65 64 20 66 6f 72 0a  be returned for.
3850: 20 20 20 20 2f 2f 2f 20 65 61 63 68 20 63 6f 6c      /// each col
3860: 75 6d 6e 20 6f 66 20 61 20 53 45 4c 45 43 54 20  umn of a SELECT 
3870: 73 74 61 74 65 6d 65 6e 74 2e 20 20 55 73 69 6e  statement.  Usin
3880: 67 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  g this informati
3890: 6f 6e 20 69 74 20 69 73 20 74 68 65 6e 20 70 6f  on it is then po
38a0: 73 73 69 62 6c 65 20 74 6f 20 71 75 65 72 79 20  ssible to query 
38b0: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 61 6e  each database an
38c0: 64 20 74 61 62 6c 65 20 66 6f 72 20 74 68 65 0a  d table for the.
38d0: 20 20 20 20 2f 2f 2f 20 6d 61 74 63 68 69 6e 67      /// matching
38e0: 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 61 73 73   column, and ass
38f0: 6f 63 69 61 74 65 20 69 74 20 77 69 74 68 20 74  ociate it with t
3900: 68 65 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  he active statem
3910: 65 6e 74 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ent..    /// </s
3920: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
3930: 3c 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20 2f 2f  <remarks>.    //
3940: 2f 20 54 68 65 20 63 75 72 72 65 6e 74 20 63 6f  / The current co
3950: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 6e  nnection is clon
3960: 65 64 20 66 6f 72 20 74 68 65 20 73 61 6b 65 20  ed for the sake 
3970: 6f 66 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  of executing thi
3980: 73 20 73 74 61 74 65 6d 65 6e 74 2c 20 73 6f 20  s statement, so 
3990: 61 73 20 74 6f 20 61 76 6f 69 64 20 61 6e 79 20  as to avoid any 
39a0: 70 6f 73 73 69 62 69 6c 69 74 79 20 6f 66 20 63  possibility of c
39b0: 6f 72 72 75 70 74 69 6e 67 20 74 68 65 0a 20 20  orrupting the.  
39c0: 20 20 2f 2f 2f 20 6f 72 69 67 69 6e 61 6c 20 63    /// original c
39d0: 6f 6e 6e 65 63 74 69 6f 6e 27 73 20 65 78 69 73  onnection's exis
39e0: 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 20  ting statements 
39f0: 6f 72 20 73 74 61 74 65 2e 20 20 41 6e 79 20 61  or state.  Any a
3a00: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
3a10: 73 20 61 72 65 20 72 65 2d 61 74 74 61 63 68 65  s are re-attache
3a20: 64 20 74 6f 20 74 68 65 20 6e 65 77 20 63 6f 6e  d to the new con
3a30: 6e 65 63 74 69 6f 6e 2e 0a 20 20 20 20 2f 2f 2f  nection..    ///
3a40: 20 3c 2f 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20   </remarks>.    
3a50: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
3a60: 75 72 6e 73 20 61 20 44 61 74 61 54 61 62 6c 65  urns a DataTable
3a70: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
3a80: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
3a90: 6f 6e 20 66 6f 72 20 74 68 65 20 61 63 74 69 76  on for the activ
3aa0: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
3ab0: 6e 74 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nt being process
3ac0: 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  ed.</returns>.  
3ad0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
3ae0: 65 20 44 61 74 61 54 61 62 6c 65 20 47 65 74 53  e DataTable GetS
3af0: 63 68 65 6d 61 54 61 62 6c 65 28 29 0a 20 20 20  chemaTable().   
3b00: 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c   {.      CheckCl
3b10: 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 44  osed();..      D
3b20: 61 74 61 54 61 62 6c 65 20 74 62 6c 20 3d 20 6e  ataTable tbl = n
3b30: 65 77 20 44 61 74 61 54 61 62 6c 65 28 22 53 63  ew DataTable("Sc
3b40: 68 65 6d 61 54 61 62 6c 65 22 29 3b 0a 20 20 20  hemaTable");.   
3b50: 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 4e 61     string[] arNa
3b60: 6d 65 3b 0a 20 20 20 20 20 20 73 74 72 69 6e 67  me;.      string
3b70: 20 73 74 72 54 61 62 6c 65 3b 0a 20 20 20 20 20   strTable;.     
3b80: 20 73 74 72 69 6e 67 20 73 74 72 43 61 74 61 6c   string strCatal
3b90: 6f 67 3b 0a 20 20 20 20 20 20 44 61 74 61 52 6f  og;.      DataRo
3ba0: 77 20 72 6f 77 3b 0a 0a 20 20 20 20 20 20 74 62  w row;..      tb
3bb0: 6c 2e 4c 6f 63 61 6c 65 20 3d 20 43 75 6c 74 75  l.Locale = Cultu
3bc0: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
3bd0: 43 75 6c 74 75 72 65 3b 0a 20 20 20 20 20 20 74  Culture;.      t
3be0: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
3bf0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
3c00: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70  .ColumnName, typ
3c10: 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0a 20 20  eof(String));.  
3c20: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
3c30: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
3c40: 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69  olumn.ColumnOrdi
3c50: 6e 61 6c 2c 20 74 79 70 65 6f 66 28 69 6e 74 29  nal, typeof(int)
3c60: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
3c70: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
3c80: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d  ableColumn.Colum
3c90: 6e 53 69 7a 65 2c 20 74 79 70 65 6f 66 28 69 6e  nSize, typeof(in
3ca0: 74 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  t));.      tbl.C
3cb0: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
3cc0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
3cd0: 65 72 69 63 50 72 65 63 69 73 69 6f 6e 2c 20 74  ericPrecision, t
3ce0: 79 70 65 6f 66 28 73 68 6f 72 74 29 29 3b 0a 20  ypeof(short));. 
3cf0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
3d00: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
3d10: 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63  Column.NumericSc
3d20: 61 6c 65 2c 20 74 79 70 65 6f 66 28 73 68 6f 72  ale, typeof(shor
3d30: 74 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  t));.      tbl.C
3d40: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
3d50: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55  aTableColumn.IsU
3d60: 6e 69 71 75 65 2c 20 74 79 70 65 6f 66 28 42 6f  nique, typeof(Bo
3d70: 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74  olean));.      t
3d80: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
3d90: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
3da0: 2e 49 73 4b 65 79 2c 20 74 79 70 65 6f 66 28 42  .IsKey, typeof(B
3db0: 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20  oolean));.      
3dc0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
3dd0: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
3de0: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 65  nalColumn.BaseSe
3df0: 72 76 65 72 4e 61 6d 65 2c 20 74 79 70 65 6f 66  rverName, typeof
3e00: 28 73 74 72 69 6e 67 29 29 3b 0a 20 20 20 20 20  (string));.     
3e10: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
3e20: 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  (SchemaTableOpti
3e30: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  onalColumn.BaseC
3e40: 61 74 61 6c 6f 67 4e 61 6d 65 2c 20 74 79 70 65  atalogName, type
3e50: 6f 66 28 53 74 72 69 6e 67 29 29 3b 0a 20 20 20  of(String));.   
3e60: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
3e70: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
3e80: 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e  lumn.BaseColumnN
3e90: 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69  ame, typeof(Stri
3ea0: 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  ng));.      tbl.
3eb0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
3ec0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
3ed0: 73 65 53 63 68 65 6d 61 4e 61 6d 65 2c 20 74 79  seSchemaName, ty
3ee0: 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0a 20  peof(String));. 
3ef0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
3f00: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
3f10: 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65  Column.BaseTable
3f20: 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72  Name, typeof(Str
3f30: 69 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  ing));.      tbl
3f40: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
3f50: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44  emaTableColumn.D
3f60: 61 74 61 54 79 70 65 2c 20 74 79 70 65 6f 66 28  ataType, typeof(
3f70: 54 79 70 65 29 29 3b 0a 20 20 20 20 20 20 74 62  Type));.      tb
3f80: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
3f90: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
3fa0: 41 6c 6c 6f 77 44 42 4e 75 6c 6c 2c 20 74 79 70  AllowDBNull, typ
3fb0: 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20  eof(Boolean));. 
3fc0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
3fd0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
3fe0: 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72 54  Column.ProviderT
3ff0: 79 70 65 2c 20 74 79 70 65 6f 66 28 69 6e 74 29  ype, typeof(int)
4000: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
4010: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
4020: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 41 6c 69  ableColumn.IsAli
4030: 61 73 65 64 2c 20 74 79 70 65 6f 66 28 42 6f 6f  ased, typeof(Boo
4040: 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62  lean));.      tb
4050: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
4060: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
4070: 49 73 45 78 70 72 65 73 73 69 6f 6e 2c 20 74 79  IsExpression, ty
4080: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a  peof(Boolean));.
4090: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
40a0: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
40b0: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
40c0: 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 2c  IsAutoIncrement,
40d0: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
40e0: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
40f0: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
4100: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
4110: 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e 2c  mn.IsRowVersion,
4120: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
4130: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
4140: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
4150: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
4160: 6d 6e 2e 49 73 48 69 64 64 65 6e 2c 20 74 79 70  mn.IsHidden, typ
4170: 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20  eof(Boolean));. 
4180: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
4190: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
41a0: 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e 67 2c 20 74  Column.IsLong, t
41b0: 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b  ypeof(Boolean));
41c0: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
41d0: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
41e0: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
41f0: 2e 49 73 52 65 61 64 4f 6e 6c 79 2c 20 74 79 70  .IsReadOnly, typ
4200: 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20  eof(Boolean));. 
4210: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
4220: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
4230: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 50  OptionalColumn.P
4240: 72 6f 76 69 64 65 72 53 70 65 63 69 66 69 63 44  roviderSpecificD
4250: 61 74 61 54 79 70 65 2c 20 74 79 70 65 6f 66 28  ataType, typeof(
4260: 54 79 70 65 29 29 3b 0a 20 20 20 20 20 20 74 62  Type));.      tb
4270: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
4280: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
4290: 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56  lColumn.DefaultV
42a0: 61 6c 75 65 2c 20 74 79 70 65 6f 66 28 6f 62 6a  alue, typeof(obj
42b0: 65 63 74 29 29 3b 0a 0a 20 20 20 20 20 20 74 62  ect));..      tb
42c0: 6c 2e 42 65 67 69 6e 4c 6f 61 64 44 61 74 61 28  l.BeginLoadData(
42d0: 29 3b 0a 0a 20 20 20 20 20 20 53 51 4c 69 74 65  );..      SQLite
42e0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 20 3d  Connection cnn =
42f0: 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   (SQLiteConnecti
4300: 6f 6e 29 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e  on)_command.Conn
4310: 65 63 74 69 6f 6e 3b 0a 0a 20 20 20 20 20 20 74  ection;..      t
4320: 72 79 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  ry.      {.     
4330: 20 20 20 63 6e 6e 2e 5f 73 71 6c 2e 53 65 74 52     cnn._sql.SetR
4340: 65 61 6c 43 6f 6c 4e 61 6d 65 73 28 74 72 75 65  ealColNames(true
4350: 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 43  );..        // C
4360: 72 65 61 74 65 20 61 20 6e 65 77 20 63 6f 6d 6d  reate a new comm
4370: 61 6e 64 20 62 61 73 65 64 20 6f 6e 20 74 68 65  and based on the
4380: 20 6f 72 69 67 69 6e 61 6c 2e 20 20 54 68 65 20   original.  The 
4390: 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20  only difference 
43a0: 62 65 69 6e 67 20 74 68 61 74 20 74 68 69 73 20  being that this 
43b0: 6e 65 77 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75  new command retu
43c0: 72 6e 73 0a 20 20 20 20 20 20 20 20 2f 2f 20 66  rns.        // f
43d0: 75 6c 6c 79 2d 71 75 61 6c 69 66 69 65 64 20 44  ully-qualified D
43e0: 61 74 61 62 61 73 65 2e 54 61 62 6c 65 2e 43 6f  atabase.Table.Co
43f0: 6c 75 6d 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  lumn column name
4400: 73 20 62 65 63 61 75 73 65 20 6f 66 20 74 68 65  s because of the
4410: 20 61 62 6f 76 65 20 70 72 61 67 6d 61 0a 20 20   above pragma.  
4420: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
4430: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 20 3d  iteCommand cmd =
4440: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 29   (SQLiteCommand)
4450: 5f 63 6f 6d 6d 61 6e 64 2e 43 6c 6f 6e 65 28 29  _command.Clone()
4460: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
4470: 20 20 20 20 20 20 75 73 69 6e 67 20 28 44 62 44        using (DbD
4480: 61 74 61 52 65 61 64 65 72 20 72 64 20 3d 20 63  ataReader rd = c
4490: 6d 64 2e 45 78 65 63 75 74 65 52 65 61 64 65 72  md.ExecuteReader
44a0: 28 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72  (CommandBehavior
44b0: 2e 53 63 68 65 6d 61 4f 6e 6c 79 29 29 0a 20 20  .SchemaOnly)).  
44c0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
44d0: 20 20 20 20 20 20 2f 2f 20 4e 6f 20 6e 65 65 64        // No need
44e0: 20 74 6f 20 52 65 61 64 28 29 20 66 72 6f 6d 20   to Read() from 
44f0: 74 68 69 73 20 72 65 61 64 65 72 2c 20 77 65 20  this reader, we 
4500: 6a 75 73 74 20 77 61 6e 74 20 74 68 65 20 63 6f  just want the co
4510: 6c 75 6d 6e 20 6e 61 6d 65 73 0a 20 20 20 20 20  lumn names.     
4520: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
4530: 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 66 69 65 6c  n = 0; n < _fiel
4540: 64 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0a 20 20 20  dCount; n++).   
4550: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
4560: 20 20 20 20 20 20 20 20 20 73 74 72 54 61 62 6c           strTabl
4570: 65 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20  e = "";.        
4580: 20 20 20 20 20 20 73 74 72 43 61 74 61 6c 6f 67        strCatalog
4590: 20 3d 20 22 6d 61 69 6e 22 3b 0a 0a 20 20 20 20   = "main";..    
45a0: 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 3d 20            row = 
45b0: 74 62 6c 2e 4e 65 77 52 6f 77 28 29 3b 0a 0a 20  tbl.NewRow();.. 
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
45d0: 44 65 66 61 75 6c 74 20 73 65 74 74 69 6e 67 73  Default settings
45e0: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 0a   for the column.
45f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
4600: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
4610: 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20  umn.ColumnName] 
4620: 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0a 20 20  = GetName(n);.  
4630: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
4640: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
4650: 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 5d  n.ColumnOrdinal]
4660: 20 3d 20 6e 3b 0a 20 20 20 20 20 20 20 20 20 20   = n;.          
4670: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
4680: 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
4690: 53 69 7a 65 5d 20 3d 20 30 3b 0a 20 20 20 20 20  Size] = 0;.     
46a0: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
46b0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e  emaTableColumn.N
46c0: 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e 5d  umericPrecision]
46d0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
46e0: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
46f0: 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69  bleColumn.Numeri
4700: 63 53 63 61 6c 65 5d 20 3d 20 30 3b 0a 20 20 20  cScale] = 0;.   
4710: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
4720: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
4730: 2e 50 72 6f 76 69 64 65 72 54 79 70 65 5d 20 3d  .ProviderType] =
4740: 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 6e   GetSQLiteType(n
4750: 29 2e 54 79 70 65 3b 0a 20 20 20 20 20 20 20 20  ).Type;.        
4760: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
4770: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f  TableColumn.IsLo
4780: 6e 67 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20  ng] = false;.   
4790: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
47a0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
47b0: 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 20  .AllowDBNull] = 
47c0: 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  true;.          
47d0: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
47e0: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
47f0: 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 5d 20 3d 20  n.IsReadOnly] = 
4800: 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 20  false;.         
4810: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
4820: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
4830: 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e 5d  mn.IsRowVersion]
4840: 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20   = false;.      
4850: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
4860: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
4870: 55 6e 69 71 75 65 5d 20 3d 20 66 61 6c 73 65 3b  Unique] = false;
4880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
4890: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
48a0: 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20 66 61  lumn.IsKey] = fa
48b0: 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20  lse;.           
48c0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
48d0: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
48e0: 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74  .IsAutoIncrement
48f0: 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20  ] = false;.     
4900: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
4910: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
4920: 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c  Column.IsReadOnl
4930: 79 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20  y] = false;.    
4940: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
4950: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
4960: 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20  BaseColumnName] 
4970: 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0a 0a 20  = GetName(n);.. 
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4990: 54 72 79 20 61 6e 64 20 65 78 74 72 61 63 74 20  Try and extract 
49a0: 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 74 61  the database, ta
49b0: 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 20 66  ble and column f
49c0: 72 6f 6d 20 74 68 65 20 64 61 74 61 72 65 61 64  rom the dataread
49d0: 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
49e0: 20 61 72 4e 61 6d 65 20 3d 20 72 64 2e 47 65 74   arName = rd.Get
49f0: 4e 61 6d 65 28 6e 29 2e 53 70 6c 69 74 28 27 2e  Name(n).Split('.
4a00: 27 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20  ');..           
4a10: 20 20 20 69 66 20 28 61 72 4e 61 6d 65 2e 4c 65     if (arName.Le
4a20: 6e 67 74 68 20 3e 20 31 29 0a 20 20 20 20 20 20  ngth > 1).      
4a30: 20 20 20 20 20 20 20 20 20 20 73 74 72 54 61 62            strTab
4a40: 6c 65 20 3d 20 61 72 4e 61 6d 65 5b 61 72 4e 61  le = arName[arNa
4a50: 6d 65 2e 4c 65 6e 67 74 68 20 2d 20 32 5d 3b 0a  me.Length - 2];.
4a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
4a70: 66 20 28 61 72 4e 61 6d 65 2e 4c 65 6e 67 74 68  f (arName.Length
4a80: 20 3e 20 32 29 0a 20 20 20 20 20 20 20 20 20 20   > 2).          
4a90: 20 20 20 20 20 20 73 74 72 43 61 74 61 6c 6f 67        strCatalog
4aa0: 20 3d 20 61 72 4e 61 6d 65 5b 61 72 4e 61 6d 65   = arName[arName
4ab0: 2e 4c 65 6e 67 74 68 20 2d 20 33 5d 3b 0a 0a 20  .Length - 3];.. 
4ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4ad0: 49 66 20 77 65 20 68 61 76 65 20 61 20 74 61 62  If we have a tab
4ae0: 6c 65 2d 62 6f 75 6e 64 20 63 6f 6c 75 6d 6e 2c  le-bound column,
4af0: 20 65 78 74 72 61 63 74 20 74 68 65 20 65 78 74   extract the ext
4b00: 72 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ra information f
4b10: 72 6f 6d 20 69 74 0a 20 20 20 20 20 20 20 20 20  rom it.         
4b20: 20 20 20 20 20 69 66 20 28 61 72 4e 61 6d 65 2e       if (arName.
4b30: 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20 20 20 20  Length > 1).    
4b40: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
4b50: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
4b60: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
4b70: 20 63 6d 64 54 61 62 6c 65 20 3d 20 6e 65 77 20   cmdTable = new 
4b80: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 53 74  SQLiteCommand(St
4b90: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74  ring.Format(Cult
4ba0: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
4bb0: 74 43 75 6c 74 75 72 65 2c 20 22 50 52 41 47 4d  tCulture, "PRAGM
4bc0: 41 20 5b 7b 31 7d 5d 2e 54 41 42 4c 45 5f 49 4e  A [{1}].TABLE_IN
4bd0: 46 4f 28 5b 7b 30 7d 5d 29 22 2c 20 73 74 72 54  FO([{0}])", strT
4be0: 61 62 6c 65 2c 20 73 74 72 43 61 74 61 6c 6f 67  able, strCatalog
4bf0: 29 2c 20 63 6e 6e 29 29 0a 20 20 20 20 20 20 20  ), cnn)).       
4c00: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
4c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4c20: 28 61 72 4e 61 6d 65 2e 4c 65 6e 67 74 68 20 3c  (arName.Length <
4c30: 20 33 29 20 73 74 72 43 61 74 61 6c 6f 67 20 3d   3) strCatalog =
4c40: 20 22 6d 61 69 6e 22 3b 0a 0a 20 20 20 20 20 20   "main";..      
4c50: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
4c60: 67 20 28 44 62 44 61 74 61 52 65 61 64 65 72 20  g (DbDataReader 
4c70: 72 64 54 61 62 6c 65 20 3d 20 63 6d 64 54 61 62  rdTable = cmdTab
4c80: 6c 65 2e 45 78 65 63 75 74 65 52 65 61 64 65 72  le.ExecuteReader
4c90: 28 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()).            
4ca0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
4cb0: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
4cc0: 65 20 28 72 64 54 61 62 6c 65 2e 52 65 61 64 28  e (rdTable.Read(
4cd0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
4ce0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4d00: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
4d10: 65 28 61 72 4e 61 6d 65 5b 61 72 4e 61 6d 65 2e  e(arName[arName.
4d20: 4c 65 6e 67 74 68 20 2d 20 31 5d 2c 20 72 64 54  Length - 1], rdT
4d30: 61 62 6c 65 2e 47 65 74 53 74 72 69 6e 67 28 31  able.GetString(1
4d40: 29 2c 20 74 72 75 65 2c 20 43 75 6c 74 75 72 65  ), true, Culture
4d50: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
4d60: 6c 74 75 72 65 29 20 3d 3d 20 30 29 0a 20 20 20  lture) == 0).   
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d80: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
4da0: 69 6e 67 20 73 74 72 54 79 70 65 20 3d 20 72 64  ing strType = rd
4db0: 54 61 62 6c 65 2e 47 65 74 53 74 72 69 6e 67 28  Table.GetString(
4dc0: 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  2);.            
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
4de0: 6e 67 5b 5d 20 61 72 53 69 7a 65 20 3d 20 73 74  ng[] arSize = st
4df0: 72 54 79 70 65 2e 53 70 6c 69 74 28 27 28 27 29  rType.Split('(')
4e00: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
4e10: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
4e20: 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29  Size.Length > 1)
4e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4e40: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e60: 20 20 20 20 20 73 74 72 54 79 70 65 20 3d 20 61       strType = a
4e70: 72 53 69 7a 65 5b 30 5d 3b 0a 20 20 20 20 20 20  rSize[0];.      
4e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e90: 20 20 20 20 61 72 53 69 7a 65 20 3d 20 61 72 53      arSize = arS
4ea0: 69 7a 65 5b 31 5d 2e 53 70 6c 69 74 28 27 29 27  ize[1].Split(')'
4eb0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
4ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4ed0: 28 61 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e  (arSize.Length >
4ee0: 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   1).            
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f00: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
4f10: 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65  olumn.ColumnSize
4f20: 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e  ] = Convert.ToIn
4f30: 74 33 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20 43  t32(arSize[0], C
4f40: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
4f50: 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20 20  iantCulture);.  
4f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f70: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
4f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f90: 20 62 6f 6f 6c 20 62 4e 6f 74 4e 75 6c 6c 20 3d   bool bNotNull =
4fa0: 20 72 64 54 61 62 6c 65 2e 47 65 74 42 6f 6f 6c   rdTable.GetBool
4fb0: 65 61 6e 28 33 29 3b 0a 20 20 20 20 20 20 20 20  ean(3);.        
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fd0: 62 6f 6f 6c 20 62 50 72 69 6d 61 72 79 4b 65 79  bool bPrimaryKey
4fe0: 20 3d 20 72 64 54 61 62 6c 65 2e 47 65 74 42 6f   = rdTable.GetBo
4ff0: 6f 6c 65 61 6e 28 35 29 3b 0a 0a 20 20 20 20 20  olean(5);..     
5000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5010: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
5020: 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74 61 54 79 70  leColumn.DataTyp
5030: 65 5d 20 3d 20 47 65 74 46 69 65 6c 64 54 79 70  e] = GetFieldTyp
5040: 65 28 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(n);.          
5050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
5060: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
5070: 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d  umn.BaseTableNam
5080: 65 5d 20 3d 20 73 74 72 54 61 62 6c 65 3b 0a 20  e] = strTable;. 
5090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50a0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
50b0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
50c0: 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20 3d 20 72  eColumnName] = r
50d0: 64 54 61 62 6c 65 2e 47 65 74 53 74 72 69 6e 67  dTable.GetString
50e0: 28 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (1);.           
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
5100: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
5110: 45 6d 70 74 79 28 73 74 72 43 61 74 61 6c 6f 67  Empty(strCatalog
5120: 29 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20  ) == false).    
5130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5140: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
5150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5160: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
5170: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61  ptionalColumn.Ba
5180: 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20 3d  seCatalogName] =
5190: 20 73 74 72 43 61 74 61 6c 6f 67 3b 0a 20 20 20   strCatalog;.   
51a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51b0: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
51c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51d0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
51e0: 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c  olumn.AllowDBNul
51f0: 6c 5d 20 3d 20 28 21 62 4e 6f 74 4e 75 6c 6c 20  l] = (!bNotNull 
5200: 26 26 20 21 62 50 72 69 6d 61 72 79 4b 65 79 29  && !bPrimaryKey)
5210: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
5220: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
5230: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
5240: 49 73 55 6e 69 71 75 65 5d 20 3d 20 62 50 72 69  IsUnique] = bPri
5250: 6d 61 72 79 4b 65 79 3b 0a 20 20 20 20 20 20 20  maryKey;.       
5260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5270: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
5280: 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20  Column.IsKey] = 
5290: 62 50 72 69 6d 61 72 79 4b 65 79 3b 0a 20 20 20  bPrimaryKey;.   
52a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52b0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
52c0: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
52d0: 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65  mn.IsAutoIncreme
52e0: 6e 74 5d 20 3d 20 62 50 72 69 6d 61 72 79 4b 65  nt] = bPrimaryKe
52f0: 79 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y;.             
5300: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
5310: 64 54 61 62 6c 65 2e 49 73 44 42 4e 75 6c 6c 28  dTable.IsDBNull(
5320: 34 29 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20  4) == false).   
5330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5340: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
5350: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
5360: 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56 61 6c 75  lumn.DefaultValu
5370: 65 5d 20 3d 20 72 64 54 61 62 6c 65 5b 34 5d 3b  e] = rdTable[4];
5380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5390: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
53c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
53d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53e0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
53f0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
5400: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
5410: 20 20 74 62 6c 2e 52 6f 77 73 2e 41 64 64 28 72    tbl.Rows.Add(r
5420: 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ow);.           
5430: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20   }.          }. 
5440: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
5450: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0a 20  .      finally. 
5460: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 63       {.        c
5470: 6e 6e 2e 5f 73 71 6c 2e 53 65 74 52 65 61 6c 43  nn._sql.SetRealC
5480: 6f 6c 4e 61 6d 65 73 28 66 61 6c 73 65 29 3b 0a  olNames(false);.
5490: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 74        }..      t
54a0: 62 6c 2e 41 63 63 65 70 74 43 68 61 6e 67 65 73  bl.AcceptChanges
54b0: 28 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 45 6e  ();.      tbl.En
54c0: 64 4c 6f 61 64 44 61 74 61 28 29 3b 0a 0a 20 20  dLoadData();..  
54d0: 20 20 20 20 72 65 74 75 72 6e 20 74 62 6c 3b 0a      return tbl;.
54e0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
54f0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
5500: 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63   Retrieves the c
5510: 6f 6c 75 6d 6e 20 61 73 20 61 20 73 74 72 69 6e  olumn as a strin
5520: 67 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  g.    /// </summ
5530: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
5540: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
5550: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
5560: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
5570: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
5580: 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67   <returns>string
5590: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
55a0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73  ublic override s
55b0: 74 72 69 6e 67 20 47 65 74 53 74 72 69 6e 67 28  tring GetString(
55c0: 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20  int i).    {.   
55d0: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
55e0: 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 3b   DbType.String);
55f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61  .      return _a
5600: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
5610: 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74  sql.GetText(_act
5620: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
5630: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
5640: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
5650: 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65  // Retrieves the
5660: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 6f 62   column as an ob
5670: 6a 65 63 74 20 63 6f 72 72 65 73 70 6f 6e 64 69  ject correspondi
5680: 6e 67 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c  ng to the underl
5690: 79 69 6e 67 20 64 61 74 61 74 79 70 65 20 6f 66  ying datatype of
56a0: 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20   the column.    
56b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
56c0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
56d0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
56e0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
56f0: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
5700: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
5710: 72 6e 73 3e 6f 62 6a 65 63 74 3c 2f 72 65 74 75  rns>object</retu
5720: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
5730: 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20  override object 
5740: 47 65 74 56 61 6c 75 65 28 69 6e 74 20 69 29 0a  GetValue(int i).
5750: 20 20 20 20 7b 0a 20 20 20 20 20 20 53 51 4c 69      {.      SQLi
5760: 74 65 54 79 70 65 20 74 79 70 20 3d 20 47 65 74  teType typ = Get
5770: 53 51 4c 69 74 65 54 79 70 65 28 69 29 3b 0a 0a  SQLiteType(i);..
5780: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
5790: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
57a0: 71 6c 2e 47 65 74 56 61 6c 75 65 28 5f 61 63 74  ql.GetValue(_act
57b0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c  iveStatement, i,
57c0: 20 72 65 66 20 74 79 70 29 3b 0a 20 20 20 20 7d   ref typ);.    }
57d0: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
57e0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  ry>.    /// Retr
57f0: 65 69 76 65 73 20 74 68 65 20 76 61 6c 75 65 73  eives the values
5800: 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6c   of multiple col
5810: 75 6d 6e 73 2c 20 75 70 20 74 6f 20 74 68 65 20  umns, up to the 
5820: 73 69 7a 65 20 6f 66 20 74 68 65 20 73 75 70 70  size of the supp
5830: 6c 69 65 64 20 61 72 72 61 79 0a 20 20 20 20 2f  lied array.    /
5840: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
5850: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5860: 65 3d 22 76 61 6c 75 65 73 22 3e 54 68 65 20 61  e="values">The a
5870: 72 72 61 79 20 74 6f 20 66 69 6c 6c 20 77 69 74  rray to fill wit
5880: 68 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 74 68  h values from th
5890: 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
58a0: 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73   current results
58b0: 65 74 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  et</param>.    /
58c0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
58d0: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
58e0: 73 20 72 65 74 72 69 65 76 65 64 3c 2f 72 65 74  s retrieved</ret
58f0: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
5900: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
5910: 74 56 61 6c 75 65 73 28 6f 62 6a 65 63 74 5b 5d  tValues(object[]
5920: 20 76 61 6c 75 65 73 29 0a 20 20 20 20 7b 0a 20   values).    {. 
5930: 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64       CheckClosed
5940: 28 29 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 4d  ();.      int nM
5950: 61 78 20 3d 20 5f 66 69 65 6c 64 43 6f 75 6e 74  ax = _fieldCount
5960: 3b 0a 20 20 20 20 20 20 69 66 20 28 76 61 6c 75  ;.      if (valu
5970: 65 73 2e 4c 65 6e 67 74 68 20 3c 20 6e 4d 61 78  es.Length < nMax
5980: 29 20 6e 4d 61 78 20 3d 20 76 61 6c 75 65 73 2e  ) nMax = values.
5990: 4c 65 6e 67 74 68 3b 0a 0a 20 20 20 20 20 20 66  Length;..      f
59a0: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
59b0: 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0a 20 20   < nMax; n++).  
59c0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 76 61      {.        va
59d0: 6c 75 65 73 2e 53 65 74 56 61 6c 75 65 28 47 65  lues.SetValue(Ge
59e0: 74 56 61 6c 75 65 28 6e 29 2c 20 6e 29 3b 0a 20  tValue(n), n);. 
59f0: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 65       }..      re
5a00: 74 75 72 6e 20 6e 4d 61 78 3b 0a 20 20 20 20 7d  turn nMax;.    }
5a10: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5a20: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  ry>.    /// Retu
5a30: 72 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20  rns True if the 
5a40: 72 65 73 75 6c 74 73 65 74 20 68 61 73 20 72 6f  resultset has ro
5a50: 77 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 66  ws that can be f
5a60: 65 74 63 68 65 64 0a 20 20 20 20 2f 2f 2f 20 3c  etched.    /// <
5a70: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75  /summary>.    pu
5a80: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f  blic override bo
5a90: 6f 6c 20 48 61 73 52 6f 77 73 0a 20 20 20 20 7b  ol HasRows.    {
5aa0: 0a 20 20 20 20 20 20 67 65 74 0a 20 20 20 20 20  .      get.     
5ab0: 20 7b 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b   {.        Check
5ac0: 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20  Closed();.      
5ad0: 20 20 72 65 74 75 72 6e 20 28 5f 72 65 61 64 69    return (_readi
5ae0: 6e 67 53 74 61 74 65 20 21 3d 20 32 29 3b 0a 20  ngState != 2);. 
5af0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
5b00: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
5b10: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
5b20: 54 72 75 65 20 69 66 20 74 68 65 20 64 61 74 61  True if the data
5b30: 20 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65   reader is close
5b40: 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  d.    /// </summ
5b50: 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  ary>.    public 
5b60: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
5b70: 43 6c 6f 73 65 64 0a 20 20 20 20 7b 0a 20 20 20  Closed.    {.   
5b80: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
5b90: 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d 20 6e 75 6c  (_command == nul
5ba0: 6c 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  l); }.    }..   
5bb0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
5bc0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54     /// Returns T
5bd0: 72 75 65 20 69 66 20 74 68 65 20 73 70 65 63 69  rue if the speci
5be0: 66 69 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e  fied column is n
5bf0: 75 6c 6c 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ull.    /// </su
5c00: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
5c10: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
5c20: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
5c30: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
5c40: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
5c50: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65  // <returns>True
5c60: 20 6f 72 20 46 61 6c 73 65 3c 2f 72 65 74 75 72   or False</retur
5c70: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
5c80: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 44  verride bool IsD
5c90: 42 4e 75 6c 6c 28 69 6e 74 20 69 29 0a 20 20 20  BNull(int i).   
5ca0: 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c   {.      CheckCl
5cb0: 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20 72 65  osed();.      re
5cc0: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
5cd0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4e 75 6c  ement._sql.IsNul
5ce0: 6c 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  l(_activeStateme
5cf0: 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20  nt, i);.    }.. 
5d00: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5d10: 0a 20 20 20 20 2f 2f 2f 20 4d 6f 76 65 73 20 74  .    /// Moves t
5d20: 6f 20 74 68 65 20 6e 65 78 74 20 72 65 73 75 6c  o the next resul
5d30: 74 73 65 74 20 69 6e 20 6d 75 6c 74 69 70 6c 65  tset in multiple
5d40: 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 53   row-returning S
5d50: 51 4c 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20 20 20  QL command..    
5d60: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
5d70: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
5d80: 54 72 75 65 20 69 66 20 74 68 65 20 63 6f 6d 6d  True if the comm
5d90: 61 6e 64 20 77 61 73 20 73 75 63 63 65 73 73 66  and was successf
5da0: 75 6c 20 61 6e 64 20 61 20 6e 65 77 20 72 65 73  ul and a new res
5db0: 75 6c 74 73 65 74 20 69 73 20 61 76 61 69 6c 61  ultset is availa
5dc0: 62 6c 65 2c 20 46 61 6c 73 65 20 6f 74 68 65 72  ble, False other
5dd0: 77 69 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a  wise.</returns>.
5de0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
5df0: 69 64 65 20 62 6f 6f 6c 20 4e 65 78 74 52 65 73  ide bool NextRes
5e00: 75 6c 74 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  ult().    {.    
5e10: 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b    CheckClosed();
5e20: 0a 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74  ..      SQLiteSt
5e30: 61 74 65 6d 65 6e 74 20 73 74 6d 74 3b 0a 20 20  atement stmt;.  
5e40: 20 20 20 20 69 6e 74 20 66 69 65 6c 64 43 6f 75      int fieldCou
5e50: 6e 74 3b 0a 0a 20 20 20 20 20 20 77 68 69 6c 65  nt;..      while
5e60: 20 28 74 72 75 65 29 0a 20 20 20 20 20 20 7b 0a   (true).      {.
5e70: 20 20 20 20 20 20 20 20 69 66 20 28 5f 61 63 74          if (_act
5e80: 69 76 65 53 74 61 74 65 6d 65 6e 74 20 21 3d 20  iveStatement != 
5e90: 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 7b 0a  null).        {.
5ea0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20            // If 
5eb0: 77 65 27 72 65 20 6f 6e 6c 79 20 73 75 70 70 6f  we're only suppo
5ec0: 73 65 64 20 74 6f 20 72 65 74 75 72 6e 20 61 20  sed to return a 
5ed0: 73 69 6e 67 6c 65 20 72 6f 77 73 65 74 2c 20 73  single rowset, s
5ee0: 74 65 70 20 74 68 72 6f 75 67 68 20 61 6c 6c 20  tep through all 
5ef0: 72 65 6d 61 69 6e 69 6e 67 20 73 74 61 74 65 6d  remaining statem
5f00: 65 6e 74 73 20 6f 6e 63 65 20 75 6e 74 69 6c 0a  ents once until.
5f10: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68 65            // the
5f20: 79 20 61 72 65 20 61 6c 6c 20 64 6f 6e 65 20 61  y are all done a
5f30: 6e 64 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20  nd return false 
5f40: 74 6f 20 69 6e 64 69 63 61 74 65 20 6e 6f 20 6d  to indicate no m
5f50: 6f 72 65 20 72 65 73 75 6c 74 73 65 74 73 20 65  ore resultsets e
5f60: 78 69 73 74 2e 0a 20 20 20 20 20 20 20 20 20 20  xist..          
5f70: 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68  if ((_commandBeh
5f80: 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42  avior & CommandB
5f90: 65 68 61 76 69 6f 72 2e 53 69 6e 67 6c 65 52 65  ehavior.SingleRe
5fa0: 73 75 6c 74 29 20 21 3d 20 30 29 0a 20 20 20 20  sult) != 0).    
5fb0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
5fc0: 20 20 20 20 2f 2f 20 52 65 73 65 74 20 74 68 65      // Reset the
5fd0: 20 70 72 65 76 69 6f 75 73 6c 79 2d 65 78 65 63   previously-exec
5fe0: 75 74 65 64 20 63 6f 6d 6d 61 6e 64 0a 20 20 20  uted command.   
5ff0: 20 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65           _active
6000: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 52  Statement._sql.R
6010: 65 73 65 74 28 5f 61 63 74 69 76 65 53 74 61 74  eset(_activeStat
6020: 65 6d 65 6e 74 29 3b 0a 0a 20 20 20 20 20 20 20  ement);..       
6030: 20 20 20 20 20 77 68 69 6c 65 20 28 5f 61 63 74       while (_act
6040: 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65  iveStatementInde
6050: 78 20 2b 20 31 20 21 3d 20 5f 63 6f 6d 6d 61 6e  x + 1 != _comman
6060: 64 2e 5f 73 74 61 74 65 6d 65 6e 74 4c 69 73 74  d._statementList
6070: 2e 4c 65 6e 67 74 68 29 0a 20 20 20 20 20 20 20  .Length).       
6080: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
6090: 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74       _activeStat
60a0: 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b 0a 20 20  ementIndex++;.  
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d 74              stmt
60c0: 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 5f 73 74 61   = _command._sta
60d0: 74 65 6d 65 6e 74 4c 69 73 74 5b 5f 61 63 74 69  tementList[_acti
60e0: 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78  veStatementIndex
60f0: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ];.             
6100: 20 73 74 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28   stmt._sql.Step(
6110: 73 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 20  stmt);.         
6120: 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 2e 52       stmt._sql.R
6130: 65 73 65 74 28 73 74 6d 74 29 3b 20 2f 2f 20 47  eset(stmt); // G
6140: 6f 74 74 61 20 72 65 73 65 74 20 61 66 74 65 72  otta reset after
6150: 20 65 76 65 72 79 20 73 74 65 70 20 74 6f 20 72   every step to r
6160: 65 6c 65 61 73 65 20 61 6e 79 20 6c 6f 63 6b 73  elease any locks
6170: 20 61 6e 64 20 73 75 63 68 21 0a 20 20 20 20 20   and such!.     
6180: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
6190: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
61a0: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 0a  e;.          }..
61b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 73            // Res
61c0: 65 74 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c  et the previousl
61d0: 79 2d 65 78 65 63 75 74 65 64 20 63 6f 6d 6d 61  y-executed comma
61e0: 6e 64 0a 20 20 20 20 20 20 20 20 20 20 5f 61 63  nd.          _ac
61f0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
6200: 71 6c 2e 52 65 73 65 74 28 5f 61 63 74 69 76 65  ql.Reset(_active
6210: 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20  Statement);.    
6220: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
6230: 2f 20 49 66 20 77 65 27 76 65 20 72 65 61 63 68  / If we've reach
6240: 65 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  ed the end of th
6250: 65 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 72 65  e statements, re
6260: 74 75 72 6e 20 66 61 6c 73 65 2c 20 6e 6f 20 6d  turn false, no m
6270: 6f 72 65 20 72 65 73 75 6c 74 73 65 74 73 0a 20  ore resultsets. 
6280: 20 20 20 20 20 20 20 69 66 20 28 5f 61 63 74 69         if (_acti
6290: 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78  veStatementIndex
62a0: 20 2b 20 31 20 3d 3d 20 5f 63 6f 6d 6d 61 6e 64   + 1 == _command
62b0: 2e 5f 73 74 61 74 65 6d 65 6e 74 4c 69 73 74 2e  ._statementList.
62c0: 4c 65 6e 67 74 68 29 0a 20 20 20 20 20 20 20 20  Length).        
62d0: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a    return false;.
62e0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77  .        // If w
62f0: 65 20 77 65 72 65 20 6f 6e 20 61 20 72 65 73 75  e were on a resu
6300: 6c 74 73 65 74 2c 20 73 65 74 20 74 68 65 20 73  ltset, set the s
6310: 74 61 74 65 20 74 6f 20 22 64 6f 6e 65 20 72 65  tate to "done re
6320: 61 64 69 6e 67 22 20 66 6f 72 20 69 74 0a 20 20  ading" for it.  
6330: 20 20 20 20 20 20 69 66 20 28 5f 72 65 61 64 69        if (_readi
6340: 6e 67 53 74 61 74 65 20 3c 20 31 29 0a 20 20 20  ngState < 1).   
6350: 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53         _readingS
6360: 74 61 74 65 20 3d 20 31 3b 0a 0a 20 20 20 20 20  tate = 1;..     
6370: 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d     _activeStatem
6380: 65 6e 74 49 6e 64 65 78 2b 2b 3b 0a 0a 20 20 20  entIndex++;..   
6390: 20 20 20 20 20 73 74 6d 74 20 3d 20 5f 63 6f 6d       stmt = _com
63a0: 6d 61 6e 64 2e 5f 73 74 61 74 65 6d 65 6e 74 4c  mand._statementL
63b0: 69 73 74 5b 5f 61 63 74 69 76 65 53 74 61 74 65  ist[_activeState
63c0: 6d 65 6e 74 49 6e 64 65 78 5d 3b 0a 20 20 20 20  mentIndex];.    
63d0: 20 20 20 20 66 69 65 6c 64 43 6f 75 6e 74 20 3d      fieldCount =
63e0: 20 73 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d   stmt._sql.Colum
63f0: 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0a 0a 20  nCount(stmt);.. 
6400: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27         // If we'
6410: 72 65 20 74 6f 6c 64 20 74 6f 20 67 65 74 20 73  re told to get s
6420: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
6430: 6e 20 6f 6e 6c 79 2c 20 74 68 65 6e 20 64 6f 6e  n only, then don
6440: 27 74 20 70 65 72 66 6f 72 6d 20 61 6e 20 69 6e  't perform an in
6450: 69 74 69 61 6c 20 73 74 65 70 28 29 20 74 68 72  itial step() thr
6460: 6f 75 67 68 20 74 68 65 20 72 65 73 75 6c 74 73  ough the results
6470: 65 74 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  et.        if ((
6480: 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72  _commandBehavior
6490: 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69   & CommandBehavi
64a0: 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29 20 3d  or.SchemaOnly) =
64b0: 3d 20 30 20 7c 7c 20 66 69 65 6c 64 43 6f 75 6e  = 0 || fieldCoun
64c0: 74 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20  t == 0).        
64d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  {.          if (
64e0: 73 74 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28 73  stmt._sql.Step(s
64f0: 74 6d 74 29 29 0a 20 20 20 20 20 20 20 20 20 20  tmt)).          
6500: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 72  {.            _r
6510: 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 2d 31  eadingState = -1
6520: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
6530: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
6540: 28 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d 20 30  (fieldCount == 0
6550: 29 20 2f 2f 20 4e 6f 20 72 6f 77 73 20 72 65 74  ) // No rows ret
6560: 75 72 6e 65 64 2c 20 69 66 20 66 69 65 6c 64 43  urned, if fieldC
6570: 6f 75 6e 74 20 69 73 20 7a 65 72 6f 2c 20 73 6b  ount is zero, sk
6580: 69 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73  ip to the next s
6590: 74 61 74 65 6d 65 6e 74 0a 20 20 20 20 20 20 20  tatement.       
65a0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
65b0: 20 73 74 6d 74 2e 5f 73 71 6c 2e 52 65 73 65 74   stmt._sql.Reset
65c0: 28 73 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20  (stmt);.        
65d0: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 20 2f 2f      continue; //
65e0: 20 53 6b 69 70 20 74 68 69 73 20 63 6f 6d 6d 61   Skip this comma
65f0: 6e 64 20 61 6e 64 20 6d 6f 76 65 20 74 6f 20 74  nd and move to t
6600: 68 65 20 6e 65 78 74 2c 20 69 74 20 77 61 73 20  he next, it was 
6610: 6e 6f 74 20 61 20 72 6f 77 2d 72 65 74 75 72 6e  not a row-return
6620: 69 6e 67 20 72 65 73 75 6c 74 73 65 74 0a 20 20  ing resultset.  
6630: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
6640: 20 20 20 20 65 6c 73 65 20 2f 2f 20 4e 6f 20 72      else // No r
6650: 6f 77 73 2c 20 66 69 65 6c 64 43 6f 75 6e 74 20  ows, fieldCount 
6660: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 73 6f 20 73  is non-zero so s
6670: 74 6f 70 20 68 65 72 65 0a 20 20 20 20 20 20 20  top here.       
6680: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
6690: 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d   _readingState =
66a0: 20 31 3b 20 2f 2f 20 54 68 69 73 20 63 6f 6d 6d   1; // This comm
66b0: 61 6e 64 20 72 65 74 75 72 6e 65 64 20 63 6f 6c  and returned col
66c0: 75 6d 6e 73 20 62 75 74 20 6e 6f 20 72 6f 77 73  umns but no rows
66d0: 2c 20 73 6f 20 72 65 74 75 72 6e 20 74 72 75 65  , so return true
66e0: 2c 20 62 75 74 20 48 61 73 52 6f 77 73 20 3d 20  , but HasRows = 
66f0: 66 61 6c 73 65 20 61 6e 64 20 52 65 61 64 28 29  false and Read()
6700: 20 72 65 74 75 72 6e 73 20 66 61 6c 73 65 0a 20   returns false. 
6710: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
6720: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2f     }..        //
6730: 20 41 68 68 2c 20 77 65 20 66 6f 75 6e 64 20 61   Ahh, we found a
6740: 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 72   row-returning r
6750: 65 73 75 6c 74 73 65 74 20 65 6c 69 67 69 62 6c  esultset eligibl
6760: 65 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64  e to be returned
6770: 21 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69 76  !.        _activ
6780: 65 53 74 61 74 65 6d 65 6e 74 20 3d 20 73 74 6d  eStatement = stm
6790: 74 3b 0a 20 20 20 20 20 20 20 20 5f 66 69 65 6c  t;.        _fiel
67a0: 64 43 6f 75 6e 74 20 3d 20 66 69 65 6c 64 43 6f  dCount = fieldCo
67b0: 75 6e 74 3b 0a 20 20 20 20 20 20 20 20 5f 66 69  unt;.        _fi
67c0: 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d 20 6e  eldTypeArray = n
67d0: 75 6c 6c 3b 0a 0a 20 20 20 20 20 20 20 20 72 65  ull;..        re
67e0: 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 20  turn true;.     
67f0: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f   }.    }..    //
6800: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
6810: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
6820: 65 20 53 51 4c 69 74 65 54 79 70 65 20 66 6f 72  e SQLiteType for
6830: 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 2c   a given column,
6840: 20 61 6e 64 20 63 61 63 68 65 73 20 69 74 20 74   and caches it t
6850: 6f 20 61 76 6f 69 64 20 72 65 70 65 74 65 74 69  o avoid repeteti
6860: 76 65 20 69 6e 74 65 72 6f 70 20 63 61 6c 6c 73  ve interop calls
6870: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6880: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
6890: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
68a0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
68b0: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
68c0: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
68d0: 20 3c 72 65 74 75 72 6e 73 3e 41 20 53 51 4c 69   <returns>A SQLi
68e0: 74 65 54 79 70 65 20 73 74 72 75 63 74 75 72 65  teType structure
68f0: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
6900: 72 69 76 61 74 65 20 53 51 4c 69 74 65 54 79 70  rivate SQLiteTyp
6910: 65 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  e GetSQLiteType(
6920: 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20  int i).    {.   
6930: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
6940: 3b 0a 20 20 20 20 20 20 69 66 20 28 5f 66 69 65  ;.      if (_fie
6950: 6c 64 54 79 70 65 41 72 72 61 79 20 3d 3d 20 6e  ldTypeArray == n
6960: 75 6c 6c 29 20 5f 66 69 65 6c 64 54 79 70 65 41  ull) _fieldTypeA
6970: 72 72 61 79 20 3d 20 6e 65 77 20 53 51 4c 69 74  rray = new SQLit
6980: 65 54 79 70 65 5b 5f 66 69 65 6c 64 43 6f 75 6e  eType[_fieldCoun
6990: 74 5d 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 5f  t];..      if (_
69a0: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69  fieldTypeArray[i
69b0: 5d 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 30 29  ].Affinity == 0)
69c0: 0a 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 54  .        _fieldT
69d0: 79 70 65 41 72 72 61 79 5b 69 5d 2e 54 79 70 65  ypeArray[i].Type
69e0: 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74   = SQLiteConvert
69f0: 2e 54 79 70 65 4e 61 6d 65 54 6f 44 62 54 79 70  .TypeNameToDbTyp
6a00: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
6a10: 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79  nt._sql.ColumnTy
6a20: 70 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  pe(_activeStatem
6a30: 65 6e 74 2c 20 69 2c 20 6f 75 74 20 5f 66 69 65  ent, i, out _fie
6a40: 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d 2e 41  ldTypeArray[i].A
6a50: 66 66 69 6e 69 74 79 29 29 3b 0a 20 20 20 20 20  ffinity));.     
6a60: 20 72 65 74 75 72 6e 20 5f 66 69 65 6c 64 54 79   return _fieldTy
6a70: 70 65 41 72 72 61 79 5b 69 5d 3b 0a 20 20 20 20  peArray[i];.    
6a80: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
6a90: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 61  ary>.    /// Rea
6aa0: 64 73 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20  ds the next row 
6ab0: 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 73  from the results
6ac0: 65 74 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  et.    /// </sum
6ad0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  mary>.    /// <r
6ae0: 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20 61  eturns>True if a
6af0: 20 6e 65 77 20 72 6f 77 20 77 61 73 20 73 75 63   new row was suc
6b00: 63 65 73 73 66 75 6c 6c 79 20 6c 6f 61 64 65 64  cessfully loaded
6b10: 20 61 6e 64 20 69 73 20 72 65 61 64 79 20 66 6f   and is ready fo
6b20: 72 20 70 72 6f 63 65 73 73 69 6e 67 3c 2f 72 65  r processing</re
6b30: 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69  turns>.    publi
6b40: 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  c override bool 
6b50: 52 65 61 64 28 29 0a 20 20 20 20 7b 0a 20 20 20  Read().    {.   
6b60: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
6b70: 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 5f 72 65  ;..      if (_re
6b80: 61 64 69 6e 67 53 74 61 74 65 20 3d 3d 20 2d 31  adingState == -1
6b90: 29 20 2f 2f 20 46 69 72 73 74 20 73 74 65 70 20  ) // First step 
6ba0: 77 61 73 20 61 6c 72 65 61 64 79 20 64 6f 6e 65  was already done
6bb0: 20 61 74 20 74 68 65 20 4e 65 78 74 52 65 73 75   at the NextResu
6bc0: 6c 74 28 29 20 6c 65 76 65 6c 2c 20 73 6f 20 64  lt() level, so d
6bd0: 6f 6e 27 74 20 73 74 65 70 20 61 67 61 69 6e 2c  on't step again,
6be0: 20 6a 75 73 74 20 72 65 74 75 72 6e 20 74 72 75   just return tru
6bf0: 65 2e 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  e..      {.     
6c00: 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65     _readingState
6c10: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 65   = 0;.        re
6c20: 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 20  turn true;.     
6c30: 20 7d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66   }.      else if
6c40: 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20   (_readingState 
6c50: 3d 3d 20 30 29 20 2f 2f 20 41 63 74 69 76 65 6c  == 0) // Activel
6c60: 79 20 72 65 61 64 69 6e 67 20 72 6f 77 73 0a 20  y reading rows. 
6c70: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69       {.        i
6c80: 66 20 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  f (_activeStatem
6c90: 65 6e 74 2e 5f 73 71 6c 2e 53 74 65 70 28 5f 61  ent._sql.Step(_a
6ca0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 29 20  ctiveStatement) 
6cb0: 3d 3d 20 74 72 75 65 29 0a 20 20 20 20 20 20 20  == true).       
6cc0: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a     return true;.
6cd0: 0a 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e  .        _readin
6ce0: 67 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f 20 46  gState = 1; // F
6cf0: 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 20  inished reading 
6d00: 72 6f 77 73 0a 20 20 20 20 20 20 7d 0a 0a 20 20  rows.      }..  
6d10: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
6d20: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
6d30: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
6d40: 2f 2f 20 52 65 74 72 69 65 76 65 20 74 68 65 20  // Retrieve the 
6d50: 63 6f 75 6e 74 20 6f 66 20 72 65 63 6f 72 64 73  count of records
6d60: 20 61 66 66 65 63 74 65 64 20 62 79 20 61 6e 20   affected by an 
6d70: 75 70 64 61 74 65 2f 69 6e 73 65 72 74 20 63 6f  update/insert co
6d80: 6d 6d 61 6e 64 2e 20 20 4f 6e 6c 79 20 76 61 6c  mmand.  Only val
6d90: 69 64 20 6f 6e 63 65 20 74 68 65 20 64 61 74 61  id once the data
6da0: 20 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65   reader is close
6db0: 64 21 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  d!.    /// </sum
6dc0: 6d 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63  mary>.    public
6dd0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52 65   override int Re
6de0: 63 6f 72 64 73 41 66 66 65 63 74 65 64 0a 20 20  cordsAffected.  
6df0: 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20    {.      get { 
6e00: 72 65 74 75 72 6e 20 5f 72 6f 77 73 41 66 66 65  return _rowsAffe
6e10: 63 74 65 64 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20  cted; }.    }.. 
6e20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6e30: 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72  .    /// Indexer
6e40: 20 74 6f 20 72 65 74 72 69 65 76 65 20 64 61 74   to retrieve dat
6e50: 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20  a from a column 
6e60: 67 69 76 65 6e 20 69 74 73 20 6e 61 6d 65 0a 20  given its name. 
6e70: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
6e80: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
6e90: 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 54 68 65   name="name">The
6ea0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   name of the col
6eb0: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 20  umn to retrieve 
6ec0: 64 61 74 61 20 66 6f 72 3c 2f 70 61 72 61 6d 3e  data for</param>
6ed0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
6ee0: 73 3e 54 68 65 20 76 61 6c 75 65 20 63 6f 6e 74  s>The value cont
6ef0: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c  ained in the col
6f00: 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  umn</returns>.  
6f10: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
6f20: 65 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 73 74  e object this[st
6f30: 72 69 6e 67 20 6e 61 6d 65 5d 0a 20 20 20 20 7b  ring name].    {
6f40: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74  .      get { ret
6f50: 75 72 6e 20 47 65 74 56 61 6c 75 65 28 47 65 74  urn GetValue(Get
6f60: 4f 72 64 69 6e 61 6c 28 6e 61 6d 65 29 29 3b 20  Ordinal(name)); 
6f70: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  }.    }..    ///
6f80: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
6f90: 2f 2f 20 49 6e 64 65 78 65 72 20 74 6f 20 72 65  // Indexer to re
6fa0: 74 72 69 65 76 65 20 64 61 74 61 20 66 72 6f 6d  trieve data from
6fb0: 20 61 20 63 6f 6c 75 6d 6e 20 67 69 76 65 6e 20   a column given 
6fc0: 69 74 73 20 69 0a 20 20 20 20 2f 2f 2f 20 3c 2f  its i.    /// </
6fd0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
6fe0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
6ff0: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
7000: 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72  e column to retr
7010: 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  ieve</param>.   
7020: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
7030: 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65  e value containe
7040: 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c  d in the column<
7050: 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75  /returns>.    pu
7060: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62  blic override ob
7070: 6a 65 63 74 20 74 68 69 73 5b 69 6e 74 20 69 5d  ject this[int i]
7080: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74  .    {.      get
7090: 20 7b 20 72 65 74 75 72 6e 20 47 65 74 56 61 6c   { return GetVal
70a0: 75 65 28 69 29 3b 20 7d 0a 20 20 20 20 7d 0a 20  ue(i); }.    }. 
70b0: 20 7d 0a 7d 0a                                    }.}.