System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact ae02eee5a356c8d81cf0ccc5a9fe58954a540801:


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 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  ;..  using Syste
0160: 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65  m.Collections.Ge
0170: 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e 67 20 53  neric;.  using S
0180: 79 73 74 65 6d 2e 44 61 74 61 3b 0a 20 20 75 73  ystem.Data;.  us
0190: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
01a0: 43 6f 6d 6d 6f 6e 3b 0a 20 20 75 73 69 6e 67 20  Common;.  using 
01b0: 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61  System.Globaliza
01c0: 74 69 6f 6e 3b 0a 0a 20 20 2f 2f 2f 20 3c 73 75  tion;..  /// <su
01d0: 6d 6d 61 72 79 3e 0a 20 20 2f 2f 2f 20 53 51 4c  mmary>.  /// SQL
01e0: 69 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ite implementati
01f0: 6f 6e 20 6f 66 20 44 62 44 61 74 61 52 65 61 64  on of DbDataRead
0200: 65 72 2e 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  er..  /// </summ
0210: 61 72 79 3e 0a 20 20 70 75 62 6c 69 63 20 73 65  ary>.  public se
0220: 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74  aled class SQLit
0230: 65 44 61 74 61 52 65 61 64 65 72 20 3a 20 44 62  eDataReader : Db
0240: 44 61 74 61 52 65 61 64 65 72 0a 20 20 7b 0d 0a  DataReader.  {..
0250: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0260: 3e 0a 20 20 20 20 2f 2f 2f 20 55 6e 64 65 72 6c  >.    /// Underl
0270: 79 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 74 68 69  ying command thi
0280: 73 20 72 65 61 64 65 72 20 69 73 20 61 74 74 61  s reader is atta
0290: 63 68 65 64 20 74 6f 0a 20 20 20 20 2f 2f 2f 20  ched to.    /// 
02a0: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70  </summary>.    p
02b0: 72 69 76 61 74 65 20 53 51 4c 69 74 65 43 6f 6d  rivate SQLiteCom
02c0: 6d 61 6e 64 20 5f 63 6f 6d 6d 61 6e 64 3b 0a 20  mand _command;. 
02d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
02e0: 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 20 6f  .    /// Index o
02f0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  f the current st
0300: 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 63  atement in the c
0310: 6f 6d 6d 61 6e 64 20 62 65 69 6e 67 20 70 72 6f  ommand being pro
0320: 63 65 73 73 65 64 0a 20 20 20 20 2f 2f 2f 20 3c  cessed.    /// <
0330: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72  /summary>.    pr
0340: 69 76 61 74 65 20 69 6e 74 20 5f 61 63 74 69 76  ivate int _activ
0350: 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 3b  eStatementIndex;
0360: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0370: 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65  y>.    /// Curre
0380: 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  nt statement bei
0390: 6e 67 20 52 65 61 64 28 29 0a 20 20 20 20 2f 2f  ng Read().    //
03a0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
03b0: 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 53   private SQLiteS
03c0: 74 61 74 65 6d 65 6e 74 20 5f 61 63 74 69 76 65  tatement _active
03d0: 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 2f  Statement;.    /
03e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
03f0: 20 2f 2f 2f 20 53 74 61 74 65 20 6f 66 20 74 68   /// State of th
0400: 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
0410: 65 6e 74 20 62 65 69 6e 67 20 70 72 6f 63 65 73  ent being proces
0420: 73 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 2d 31 20  sed..    /// -1 
0430: 3d 20 46 69 72 73 74 20 53 74 65 70 28 29 20 65  = First Step() e
0440: 78 65 63 75 74 65 64 2c 20 73 6f 20 74 68 65 20  xecuted, so the 
0450: 66 69 72 73 74 20 52 65 61 64 28 29 20 77 69 6c  first Read() wil
0460: 6c 20 62 65 20 69 67 6e 6f 72 65 64 0a 20 20 20  l be ignored.   
0470: 20 2f 2f 2f 20 20 30 20 3d 20 41 63 74 69 76 65   ///  0 = Active
0480: 6c 79 20 72 65 61 64 69 6e 67 0a 20 20 20 20 2f  ly reading.    /
0490: 2f 2f 20 20 31 20 3d 20 46 69 6e 69 73 68 65 64  //  1 = Finished
04a0: 20 72 65 61 64 69 6e 67 0a 20 20 20 20 2f 2f 2f   reading.    ///
04b0: 20 20 32 20 3d 20 4e 6f 6e 2d 72 6f 77 2d 72 65    2 = Non-row-re
04c0: 74 75 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e  turning statemen
04d0: 74 2c 20 6e 6f 20 72 65 63 6f 72 64 73 0a 20 20  t, no records.  
04e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
04f0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
0500: 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65 3b 0a   _readingState;.
0510: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0520: 3e 0a 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72  >.    /// Number
0530: 20 6f 66 20 72 65 63 6f 72 64 73 20 61 66 66 65   of records affe
0540: 63 74 65 64 20 62 79 20 74 68 65 20 69 6e 73 65  cted by the inse
0550: 72 74 2f 75 70 64 61 74 65 20 73 74 61 74 65 6d  rt/update statem
0560: 65 6e 74 73 20 65 78 65 63 75 74 65 64 20 6f 6e  ents executed on
0570: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 20 20 20   the command.   
0580: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
0590: 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20      private int 
05a0: 5f 72 6f 77 73 41 66 66 65 63 74 65 64 3b 0a 20  _rowsAffected;. 
05b0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
05c0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 75 6e 74 20 6f  .    /// Count o
05d0: 66 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d 6e  f fields (column
05e0: 73 29 20 69 6e 20 74 68 65 20 72 6f 77 2d 72 65  s) in the row-re
05f0: 74 75 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e  turning statemen
0600: 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
0610: 67 20 70 72 6f 63 65 73 73 65 64 0a 20 20 20 20  g processed.    
0620: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
0630: 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 5f     private int _
0640: 66 69 65 6c 64 43 6f 75 6e 74 3b 0a 20 20 20 20  fieldCount;.    
0650: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
0660: 20 20 2f 2f 2f 20 44 61 74 61 74 79 70 65 73 20    /// Datatypes 
0670: 6f 66 20 61 63 74 69 76 65 20 66 69 65 6c 64 73  of active fields
0680: 20 28 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74 68   (columns) in th
0690: 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
06a0: 65 6e 74 2c 20 75 73 65 64 20 66 6f 72 20 74 79  ent, used for ty
06b0: 70 65 2d 72 65 73 74 72 69 63 74 69 6e 67 20 64  pe-restricting d
06c0: 61 74 61 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ata.    /// </su
06d0: 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61  mmary>.    priva
06e0: 74 65 20 53 51 4c 69 74 65 54 79 70 65 5b 5d 20  te SQLiteType[] 
06f0: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 3b  _fieldTypeArray;
0700: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0710: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ry>.    /// The 
0720: 62 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20  behavior of the 
0730: 64 61 74 61 72 65 61 64 65 72 0a 20 20 20 20 2f  datareader.    /
0740: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
0750: 20 20 70 72 69 76 61 74 65 20 43 6f 6d 6d 61 6e    private Comman
0760: 64 42 65 68 61 76 69 6f 72 20 5f 63 6f 6d 6d 61  dBehavior _comma
0770: 6e 64 42 65 68 61 76 69 6f 72 3b 0a 0a 20 20 20  ndBehavior;..   
0780: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
0790: 20 20 20 2f 2f 2f 20 49 66 20 73 65 74 2c 20 74     /// If set, t
07a0: 68 65 6e 20 64 69 73 70 6f 73 65 20 6f 66 20 74  hen dispose of t
07b0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6f 62 6a 65 63  he command objec
07c0: 74 20 77 68 65 6e 20 74 68 65 20 72 65 61 64 65  t when the reade
07d0: 72 20 69 73 20 66 69 6e 69 73 68 65 64 0a 20 20  r is finished.  
07e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
07f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 62 6f  .    internal bo
0800: 6f 6c 20 5f 64 69 73 70 6f 73 65 43 6f 6d 6d 61  ol _disposeComma
0810: 6e 64 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  nd;....    /// <
0820: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0830: 2f 20 49 66 20 73 65 74 2c 20 74 68 65 6e 20 72  / If set, then r
0840: 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f  aise an exceptio
0850: 6e 20 77 68 65 6e 20 74 68 65 20 6f 62 6a 65 63  n when the objec
0860: 74 20 69 73 20 61 63 63 65 73 73 65 64 20 61 66  t is accessed af
0870: 74 65 72 20 62 65 69 6e 67 20 64 69 73 70 6f 73  ter being dispos
0880: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ed...    /// </s
0890: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74  ummary>..    int
08a0: 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 74 68 72 6f  ernal bool _thro
08b0: 77 4f 6e 44 69 73 70 6f 73 65 64 3b 0d 0a 0d 0a  wOnDisposed;....
08c0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
08d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73 65  >..    /// If se
08e0: 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 62 6a 65  t, then the obje
08f0: 63 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ct is currently 
0900: 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d  being disposed..
0910: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0920: 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
0930: 6c 20 62 6f 6f 6c 20 5f 64 69 73 70 6f 73 69 6e  l bool _disposin
0940: 67 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  g;..    /// <sum
0950: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 41 6e  mary>.    /// An
0960: 20 61 72 72 61 79 20 6f 66 20 72 6f 77 69 64 27   array of rowid'
0970: 73 20 66 6f 72 20 74 68 65 20 61 63 74 69 76 65  s for the active
0980: 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 43 6f   statement if Co
0990: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 4b 65  mmandBehavior.Ke
09a0: 79 49 6e 66 6f 20 69 73 20 73 70 65 63 69 66 69  yInfo is specifi
09b0: 65 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ed.    /// </sum
09c0: 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74  mary>.    privat
09d0: 65 20 53 51 4c 69 74 65 4b 65 79 52 65 61 64 65  e SQLiteKeyReade
09e0: 72 20 5f 6b 65 79 49 6e 66 6f 3b 0a 0a 20 20 20  r _keyInfo;..   
09f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0a00: 20 20 20 20 2f 2f 2f 20 4d 61 74 63 68 65 73 20      /// Matches 
0a10: 74 68 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  the version of t
0a20: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  he connection...
0a30: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0a40: 79 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  y>.    internal 
0a50: 6c 6f 6e 67 20 5f 76 65 72 73 69 6f 6e 3b 0d 0a  long _version;..
0a60: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0a70: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
0a80: 20 22 73 74 75 62 22 20 28 69 2e 65 2e 20 70 6c   "stub" (i.e. pl
0a90: 61 63 65 68 6f 6c 64 65 72 29 20 62 61 73 65 20  aceholder) base 
0aa0: 73 63 68 65 6d 61 20 6e 61 6d 65 20 74 6f 20 75  schema name to u
0ab0: 73 65 20 77 68 65 6e 20 72 65 74 75 72 6e 69 6e  se when returnin
0ac0: 67 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6c 75 6d  g..    /// colum
0ad0: 6e 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  n schema informa
0ae0: 74 69 6f 6e 2e 20 20 4d 61 74 63 68 65 73 20 74  tion.  Matches t
0af0: 68 65 20 62 61 73 65 20 73 63 68 65 6d 61 20 6e  he base schema n
0b00: 61 6d 65 20 75 73 65 64 20 62 79 20 74 68 65 0d  ame used by the.
0b10: 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61  .    /// associa
0b20: 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  ted connection..
0b30: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0b40: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
0b50: 20 73 74 72 69 6e 67 20 5f 62 61 73 65 53 63 68   string _baseSch
0b60: 65 6d 61 4e 61 6d 65 3b 0a 0a 20 20 20 20 2f 2f  emaName;..    //
0b70: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
0b80: 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e  /// Internal con
0b90: 73 74 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61  structor, initia
0ba0: 6c 69 7a 65 73 20 74 68 65 20 64 61 74 61 72 65  lizes the datare
0bb0: 61 64 65 72 20 61 6e 64 20 73 65 74 73 20 75 70  ader and sets up
0bc0: 20 74 6f 20 62 65 67 69 6e 20 65 78 65 63 75 74   to begin execut
0bd0: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a 20  ing statements. 
0be0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0bf0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
0c00: 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65 20   name="cmd">The 
0c10: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74 68  SQLiteCommand th
0c20: 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20 69  is data reader i
0c30: 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0a 20 20  s for</param>.  
0c40: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0c50: 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20 65  e="behave">The e
0c60: 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72  xpected behavior
0c70: 20 6f 66 20 74 68 65 20 64 61 74 61 20 72 65 61   of the data rea
0c80: 64 65 72 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  der</param>.    
0c90: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 44  internal SQLiteD
0ca0: 61 74 61 52 65 61 64 65 72 28 53 51 4c 69 74 65  ataReader(SQLite
0cb0: 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43 6f 6d  Command cmd, Com
0cc0: 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 62 65 68  mandBehavior beh
0cd0: 61 76 65 29 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ave).    {..    
0ce0: 20 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73    _throwOnDispos
0cf0: 65 64 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20  ed = true;.     
0d00: 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 63 6d 64 3b   _command = cmd;
0d10: 0a 20 20 20 20 20 20 5f 76 65 72 73 69 6f 6e 20  .      _version 
0d20: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
0d30: 63 74 69 6f 6e 2e 5f 76 65 72 73 69 6f 6e 3b 0d  ction._version;.
0d40: 0a 20 20 20 20 20 20 5f 62 61 73 65 53 63 68 65  .      _baseSche
0d50: 6d 61 4e 61 6d 65 20 3d 20 5f 63 6f 6d 6d 61 6e  maName = _comman
0d60: 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 62 61  d.Connection._ba
0d70: 73 65 53 63 68 65 6d 61 4e 61 6d 65 3b 0a 0a 20  seSchemaName;.. 
0d80: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 42 65 68       _commandBeh
0d90: 61 76 69 6f 72 20 3d 20 62 65 68 61 76 65 3b 0a  avior = behave;.
0da0: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
0db0: 74 65 6d 65 6e 74 49 6e 64 65 78 20 3d 20 2d 31  tementIndex = -1
0dc0: 3b 0a 20 20 20 20 20 20 5f 72 6f 77 73 41 66 66  ;.      _rowsAff
0dd0: 65 63 74 65 64 20 3d 20 2d 31 3b 0a 0a 20 20 20  ected = -1;..   
0de0: 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64 20     if (_command 
0df0: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  != null).       
0e00: 20 4e 65 78 74 52 65 73 75 6c 74 28 29 3b 0a 20   NextResult();. 
0e10: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e     }..    intern
0e20: 61 6c 20 76 6f 69 64 20 43 61 6e 63 65 6c 28 29  al void Cancel()
0e30: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 76 65  .    {.      _ve
0e40: 72 73 69 6f 6e 20 3d 20 30 3b 0a 20 20 20 20 7d  rsion = 0;.    }
0e50: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0e60: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44  mary>..    /// D
0e70: 69 73 70 6f 73 65 20 6f 66 20 61 6c 6c 20 72 65  ispose of all re
0e80: 73 6f 75 72 63 65 73 20 75 73 65 64 20 62 79 20  sources used by 
0e90: 74 68 69 73 20 64 61 74 61 72 65 61 64 65 72 2e  this datareader.
0ea0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0eb0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
0ec0: 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f  aram name="dispo
0ed0: 73 69 6e 67 22 3e 3c 2f 70 61 72 61 6d 3e 0d 0a  sing"></param>..
0ee0: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76      protected ov
0ef0: 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70  erride void Disp
0f00: 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69  ose(bool disposi
0f10: 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ng)..    {..    
0f20: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
0f30: 2f 2f 20 4e 4f 54 45 3a 20 46 69 78 20 66 6f 72  // NOTE: Fix for
0f40: 20 74 69 63 6b 65 74 20 5b 65 31 62 32 65 30 66   ticket [e1b2e0f
0f50: 37 36 39 5d 2c 20 64 6f 20 4e 4f 54 20 74 68 72  769], do NOT thr
0f60: 6f 77 20 65 78 63 65 70 74 69 6f 6e 73 20 77 68  ow exceptions wh
0f70: 69 6c 65 20 77 65 0d 0a 20 20 20 20 20 20 20 20  ile we..        
0f80: 2f 2f 20 20 20 20 20 20 20 61 72 65 20 62 65 69  //       are bei
0f90: 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  ng disposed...  
0fa0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
0fb0: 20 20 5f 64 69 73 70 6f 73 69 6e 67 20 3d 20 74    _disposing = t
0fc0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 5f 74  rue;..        _t
0fd0: 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 20 3d  hrowOnDisposed =
0fe0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
0ff0: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
1000: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 20 20 20  disposing);..   
1010: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
1020: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6c  mary>.    /// Cl
1030: 6f 73 65 73 20 74 68 65 20 64 61 74 61 72 65 61  oses the datarea
1040: 64 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79  der, potentially
1050: 20 63 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e   closing the con
1060: 6e 65 63 74 69 6f 6e 20 61 73 20 77 65 6c 6c 20  nection as well 
1070: 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69  if CommandBehavi
1080: 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69  or.CloseConnecti
1090: 6f 6e 20 77 61 73 20 73 70 65 63 69 66 69 65 64  on was specified
10a0: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
10b0: 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  ary>.    public 
10c0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c  override void Cl
10d0: 6f 73 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  ose().    {.    
10e0: 20 20 74 72 79 0a 20 20 20 20 20 20 7b 0a 20 20    try.      {.  
10f0: 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61        if (_comma
1100: 6e 64 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  nd != null).    
1110: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
1120: 74 72 79 0a 20 20 20 20 20 20 20 20 20 20 7b 0a  try.          {.
1130: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0a              try.
1140: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
1150: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4d              // M
1160: 61 6b 65 20 73 75 72 65 20 77 65 27 76 65 20 6e  ake sure we've n
1170: 6f 74 20 62 65 65 6e 20 63 61 6e 63 65 6c 65 64  ot been canceled
1180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1190: 66 20 28 5f 76 65 72 73 69 6f 6e 20 21 3d 20 30  f (_version != 0
11a0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
11b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
11c0: 20 20 74 72 79 0a 20 20 20 20 20 20 20 20 20 20    try.          
11d0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
11e0: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
11f0: 28 4e 65 78 74 52 65 73 75 6c 74 28 29 29 0a 20  (NextResult()). 
1200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1210: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1220: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1230: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1240: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 28 53           catch(S
1250: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 29 0a  QLiteException).
1260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1270: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
1280: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
1290: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
12a0: 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6c 65 61 72    _command.Clear
12b0: 44 61 74 61 52 65 61 64 65 72 28 29 3b 0a 20 20  DataReader();.  
12c0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
12d0: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0a          finally.
12e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
12f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49              // I
1300: 66 20 74 68 65 20 64 61 74 61 72 65 61 64 65 72  f the datareader
1310: 27 73 20 62 65 68 61 76 69 6f 72 20 69 6e 63 6c  's behavior incl
1320: 75 64 65 73 20 63 6c 6f 73 69 6e 67 20 74 68 65  udes closing the
1330: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65   connection, the
1340: 6e 20 64 6f 20 73 6f 20 68 65 72 65 2e 0a 20 20  n do so here..  
1350: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1360: 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  (_commandBehavio
1370: 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76  r & CommandBehav
1380: 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74  ior.CloseConnect
1390: 69 6f 6e 29 20 21 3d 20 30 20 26 26 20 5f 63 6f  ion) != 0 && _co
13a0: 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
13b0: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
13c0: 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61            _comma
13d0: 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c  nd.Connection.Cl
13e0: 6f 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20 20  ose();.         
13f0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
1400: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c  .          final
1410: 6c 79 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20  ly.          {. 
1420: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
1430: 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 29 0a  disposeCommand).
1440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63                _c
1450: 6f 6d 6d 61 6e 64 2e 44 69 73 70 6f 73 65 28 29  ommand.Dispose()
1460: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
1470: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
1480: 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 6e 75 6c 6c   _command = null
1490: 3b 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69 76  ;.        _activ
14a0: 65 53 74 61 74 65 6d 65 6e 74 20 3d 20 6e 75 6c  eStatement = nul
14b0: 6c 3b 0a 20 20 20 20 20 20 20 20 5f 66 69 65 6c  l;.        _fiel
14c0: 64 54 79 70 65 41 72 72 61 79 20 3d 20 6e 75 6c  dTypeArray = nul
14d0: 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  l;.      }.     
14e0: 20 66 69 6e 61 6c 6c 79 0a 20 20 20 20 20 20 7b   finally.      {
14f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 6b 65  .        if (_ke
1500: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20  yInfo != null). 
1510: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
1520: 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 44 69 73 70     _keyInfo.Disp
1530: 6f 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20 20  ose();.         
1540: 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 75 6c 6c   _keyInfo = null
1550: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1560: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f    }.    }..    /
1570: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
1580: 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20 65 72   /// Throw an er
1590: 72 6f 72 20 69 66 20 74 68 65 20 64 61 74 61 72  ror if the datar
15a0: 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64 0a  eader is closed.
15b0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
15c0: 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 76  y>.    private v
15d0: 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73 65 64 28  oid CheckClosed(
15e0: 29 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ).    {..      i
15f0: 66 20 28 21 5f 74 68 72 6f 77 4f 6e 44 69 73 70  f (!_throwOnDisp
1600: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 72  osed)..        r
1610: 65 74 75 72 6e 3b 0a 0a 20 20 20 20 20 20 69 66  eturn;..      if
1620: 20 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d 20 6e 75   (_command == nu
1630: 6c 6c 29 0a 20 20 20 20 20 20 20 20 74 68 72 6f  ll).        thro
1640: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
1650: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
1660: 22 44 61 74 61 52 65 61 64 65 72 20 68 61 73 20  "DataReader has 
1670: 62 65 65 6e 20 63 6c 6f 73 65 64 22 29 3b 0a 0a  been closed");..
1680: 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73 69        if (_versi
1690: 6f 6e 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20  on == 0).       
16a0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
16b0: 65 45 78 63 65 70 74 69 6f 6e 28 28 69 6e 74 29  eException((int)
16c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
16d0: 41 62 6f 72 74 2c 20 22 45 78 65 63 75 74 69 6f  Abort, "Executio
16e0: 6e 20 77 61 73 20 61 62 6f 72 74 65 64 20 62 79  n was aborted by
16f0: 20 74 68 65 20 75 73 65 72 22 29 3b 0a 0a 20 20   the user");..  
1700: 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64      if (_command
1710: 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 53 74 61 74  .Connection.Stat
1720: 65 20 21 3d 20 43 6f 6e 6e 65 63 74 69 6f 6e 53  e != ConnectionS
1730: 74 61 74 65 2e 4f 70 65 6e 20 7c 7c 20 5f 63 6f  tate.Open || _co
1740: 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
1750: 2e 5f 76 65 72 73 69 6f 6e 20 21 3d 20 5f 76 65  ._version != _ve
1760: 72 73 69 6f 6e 29 0a 20 20 20 20 20 20 20 20 74  rsion).        t
1770: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
1780: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
1790: 6f 6e 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 77  on("Connection w
17a0: 61 73 20 63 6c 6f 73 65 64 2c 20 73 74 61 74 65  as closed, state
17b0: 6d 65 6e 74 20 77 61 73 20 74 65 72 6d 69 6e 61  ment was termina
17c0: 74 65 64 22 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ted");.    }..  
17d0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
17e0: 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e      /// Throw an
17f0: 20 65 72 72 6f 72 20 69 66 20 61 20 72 6f 77 20   error if a row 
1800: 69 73 20 6e 6f 74 20 6c 6f 61 64 65 64 0a 20 20  is not loaded.  
1810: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1820: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
1830: 64 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77 28  d CheckValidRow(
1840: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66  ).    {.      if
1850: 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20   (_readingState 
1860: 21 3d 20 30 29 0a 20 20 20 20 20 20 20 20 74 68  != 0).        th
1870: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
1880: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
1890: 6e 28 22 4e 6f 20 63 75 72 72 65 6e 74 20 72 6f  n("No current ro
18a0: 77 22 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  w");.    }..    
18b0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
18c0: 20 20 2f 2f 2f 20 45 6e 75 6d 65 72 61 74 6f 72    /// Enumerator
18d0: 20 73 75 70 70 6f 72 74 0a 20 20 20 20 2f 2f 2f   support.    ///
18e0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
18f0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
1900: 75 72 6e 73 20 61 20 44 62 45 6e 75 6d 65 72 61  urns a DbEnumera
1910: 74 6f 72 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74  tor object.</ret
1920: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
1930: 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 65 63   override Collec
1940: 74 69 6f 6e 73 2e 49 45 6e 75 6d 65 72 61 74 6f  tions.IEnumerato
1950: 72 20 47 65 74 45 6e 75 6d 65 72 61 74 6f 72 28  r GetEnumerator(
1960: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
1970: 74 75 72 6e 20 6e 65 77 20 44 62 45 6e 75 6d 65  turn new DbEnume
1980: 72 61 74 6f 72 28 74 68 69 73 2c 20 28 28 5f 63  rator(this, ((_c
1990: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26  ommandBehavior &
19a0: 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72   CommandBehavior
19b0: 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  .CloseConnection
19c0: 29 20 3d 3d 20 43 6f 6d 6d 61 6e 64 42 65 68 61  ) == CommandBeha
19d0: 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63  vior.CloseConnec
19e0: 74 69 6f 6e 29 29 3b 0a 20 20 20 20 7d 0a 0a 20  tion));.    }.. 
19f0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1a00: 0a 20 20 20 20 2f 2f 2f 20 4e 6f 74 20 69 6d 70  .    /// Not imp
1a10: 6c 65 6d 65 6e 74 65 64 2e 20 20 52 65 74 75 72  lemented.  Retur
1a20: 6e 73 20 30 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ns 0.    /// </s
1a30: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75 62 6c  ummary>.    publ
1a40: 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  ic override int 
1a50: 44 65 70 74 68 0a 20 20 20 20 7b 0a 20 20 20 20  Depth.    {.    
1a60: 20 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20    get.      {.  
1a70: 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65        CheckClose
1a80: 64 28 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74  d();.        ret
1a90: 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  urn 0;.      }. 
1aa0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
1ab0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
1ac0: 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  Returns the numb
1ad0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1ae0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73   the current res
1af0: 75 6c 74 73 65 74 0a 20 20 20 20 2f 2f 2f 20 3c  ultset.    /// <
1b00: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75  /summary>.    pu
1b10: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e  blic override in
1b20: 74 20 46 69 65 6c 64 43 6f 75 6e 74 0a 20 20 20  t FieldCount.   
1b30: 20 7b 0a 20 20 20 20 20 20 67 65 74 0a 20 20 20   {.      get.   
1b40: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 43 68 65     {.        Che
1b50: 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20  ckClosed();.    
1b60: 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f      if (_keyInfo
1b70: 20 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   == null).      
1b80: 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69 65 6c      return _fiel
1b90: 64 43 6f 75 6e 74 3b 0a 0a 20 20 20 20 20 20 20  dCount;..       
1ba0: 20 72 65 74 75 72 6e 20 5f 66 69 65 6c 64 43 6f   return _fieldCo
1bb0: 75 6e 74 20 2b 20 5f 6b 65 79 49 6e 66 6f 2e 43  unt + _keyInfo.C
1bc0: 6f 75 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ount;.      }.  
1bd0: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
1be0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
1bf0: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
1c00: 72 20 6f 66 20 76 69 73 69 62 6c 65 20 66 69 65  r of visible fie
1c10: 6c 73 64 20 69 6e 20 74 68 65 20 63 75 72 72 65  lsd in the curre
1c20: 6e 74 20 72 65 73 75 6c 74 73 65 74 0a 20 20 20  nt resultset.   
1c30: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
1c40: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
1c50: 69 64 65 20 69 6e 74 20 56 69 73 69 62 6c 65 46  ide int VisibleF
1c60: 69 65 6c 64 43 6f 75 6e 74 0a 20 20 20 20 7b 0a  ieldCount.    {.
1c70: 20 20 20 20 20 20 67 65 74 0a 20 20 20 20 20 20        get.      
1c80: 7b 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 43  {.        CheckC
1c90: 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20 20  losed();.       
1ca0: 20 72 65 74 75 72 6e 20 5f 66 69 65 6c 64 43 6f   return _fieldCo
1cb0: 75 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  unt;.      }.   
1cc0: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
1cd0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 53 51  mary>.    /// SQ
1ce0: 4c 69 74 65 20 69 73 20 69 6e 68 65 72 65 6e 74  Lite is inherent
1cf0: 6c 79 20 75 6e 2d 74 79 70 65 64 2e 20 20 41 6c  ly un-typed.  Al
1d00: 6c 20 64 61 74 61 74 79 70 65 73 20 69 6e 20 53  l datatypes in S
1d10: 51 4c 69 74 65 20 61 72 65 20 6e 61 74 69 76 65  QLite are native
1d20: 6c 79 20 73 74 72 69 6e 67 73 2e 20 20 54 68 65  ly strings.  The
1d30: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74   definition of t
1d40: 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20  he columns of a 
1d50: 74 61 62 6c 65 0a 20 20 20 20 2f 2f 2f 20 61 6e  table.    /// an
1d60: 64 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  d the affinity o
1d70: 66 20 72 65 74 75 72 6e 65 64 20 74 79 70 65 73  f returned types
1d80: 20 61 72 65 20 61 6c 6c 20 77 65 20 68 61 76 65   are all we have
1d90: 20 74 6f 20 67 6f 20 6f 6e 20 74 6f 20 74 79 70   to go on to typ
1da0: 65 2d 72 65 73 74 72 69 63 74 20 64 61 74 61 20  e-restrict data 
1db0: 69 6e 20 74 68 65 20 72 65 61 64 65 72 2e 0a 20  in the reader.. 
1dc0: 20 20 20 2f 2f 2f 20 0a 20 20 20 20 2f 2f 2f 20     /// .    /// 
1dd0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61 74  This function at
1de0: 74 65 6d 70 74 73 20 74 6f 20 76 65 72 69 66 79  tempts to verify
1df0: 20 74 68 61 74 20 74 68 65 20 74 79 70 65 20 6f   that the type o
1e00: 66 20 64 61 74 61 20 62 65 69 6e 67 20 72 65 71  f data being req
1e10: 75 65 73 74 65 64 20 6f 66 20 61 20 63 6f 6c 75  uested of a colu
1e20: 6d 6e 20 6d 61 74 63 68 65 73 20 74 68 65 20 64  mn matches the d
1e30: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 63  atatype of the c
1e40: 6f 6c 75 6d 6e 2e 20 20 49 6e 0a 20 20 20 20 2f  olumn.  In.    /
1e50: 2f 2f 20 74 68 65 20 63 61 73 65 20 6f 66 20 63  // the case of c
1e60: 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20  olumns that are 
1e70: 6e 6f 74 20 62 61 63 6b 65 64 20 69 6e 74 6f 20  not backed into 
1e80: 61 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  a table definiti
1e90: 6f 6e 2c 20 77 65 20 61 74 74 65 6d 70 74 20 74  on, we attempt t
1ea0: 6f 20 6d 61 74 63 68 20 75 70 20 74 68 65 20 61  o match up the a
1eb0: 66 66 69 6e 69 74 79 20 6f 66 20 61 20 63 6f 6c  ffinity of a col
1ec0: 75 6d 6e 20 28 69 6e 74 2c 20 64 6f 75 62 6c 65  umn (int, double
1ed0: 2c 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  , string or blob
1ee0: 29 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 61 20 73  ).    /// to a s
1ef0: 65 74 20 6f 66 20 6b 6e 6f 77 6e 20 74 79 70 65  et of known type
1f00: 73 20 74 68 61 74 20 63 6c 6f 73 65 6c 79 20 6d  s that closely m
1f10: 61 74 63 68 20 74 68 61 74 20 61 66 66 69 6e 69  atch that affini
1f20: 74 79 2e 20 20 49 74 27 73 20 6e 6f 74 20 61 6e  ty.  It's not an
1f30: 20 65 78 61 63 74 20 73 63 69 65 6e 63 65 2c 20   exact science, 
1f40: 62 75 74 20 69 74 73 20 74 68 65 20 62 65 73 74  but its the best
1f50: 20 77 65 20 63 61 6e 20 64 6f 2e 0a 20 20 20 20   we can do..    
1f60: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
1f70: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
1f80: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 75  .    /// This fu
1f90: 6e 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  nction throws an
1fa0: 20 49 6e 76 61 6c 69 64 54 79 70 65 43 61 73 74   InvalidTypeCast
1fb0: 28 29 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20  () exception if 
1fc0: 74 68 65 20 72 65 71 75 65 73 74 65 64 20 74 79  the requested ty
1fd0: 70 65 20 64 6f 65 73 6e 27 74 20 6d 61 74 63 68  pe doesn't match
1fe0: 20 74 68 65 20 63 6f 6c 75 6d 6e 27 73 20 64 65   the column's de
1ff0: 66 69 6e 69 74 69 6f 6e 20 6f 72 20 61 66 66 69  finition or affi
2000: 6e 69 74 79 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f  nity..    /// </
2010: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 2f 2f 2f  returns>.    ///
2020: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
2030: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
2040: 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 74 79 70 65  e column to type
2050: 2d 63 68 65 63 6b 3c 2f 70 61 72 61 6d 3e 0a 20  -check</param>. 
2060: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2070: 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70  me="typ">The typ
2080: 65 20 77 65 20 77 61 6e 74 20 74 6f 20 67 65 74  e we want to get
2090: 20 6f 75 74 20 6f 66 20 74 68 65 20 63 6f 6c 75   out of the colu
20a0: 6d 6e 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 70  mn</param>.    p
20b0: 72 69 76 61 74 65 20 54 79 70 65 41 66 66 69 6e  rivate TypeAffin
20c0: 69 74 79 20 56 65 72 69 66 79 54 79 70 65 28 69  ity VerifyType(i
20d0: 6e 74 20 69 2c 20 44 62 54 79 70 65 20 74 79 70  nt i, DbType typ
20e0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68  ).    {.      Ch
20f0: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20  eckClosed();.   
2100: 20 20 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77     CheckValidRow
2110: 28 29 3b 0a 20 20 20 20 20 20 54 79 70 65 41 66  ();.      TypeAf
2120: 66 69 6e 69 74 79 20 61 66 66 69 6e 69 74 79 20  finity affinity 
2130: 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  = GetSQLiteType(
2140: 69 29 2e 41 66 66 69 6e 69 74 79 3b 0a 0a 20 20  i).Affinity;..  
2150: 20 20 20 20 73 77 69 74 63 68 20 28 61 66 66 69      switch (affi
2160: 6e 69 74 79 29 0a 20 20 20 20 20 20 7b 0a 20 20  nity).      {.  
2170: 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
2180: 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0a 20  ffinity.Int64:. 
2190: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
21a0: 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74 31 36   == DbType.Int16
21b0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
21c0: 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  y;.          if 
21d0: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49  (typ == DbType.I
21e0: 6e 74 33 32 29 20 72 65 74 75 72 6e 20 61 66 66  nt32) return aff
21f0: 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20  inity;.         
2200: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
2210: 70 65 2e 49 6e 74 36 34 29 20 72 65 74 75 72 6e  pe.Int64) return
2220: 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20   affinity;.     
2230: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
2240: 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 20  DbType.Boolean) 
2250: 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b  return affinity;
2260: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
2270: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 79 74  yp == DbType.Byt
2280: 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  e) return affini
2290: 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  ty;.          if
22a0: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
22b0: 44 61 74 65 54 69 6d 65 29 20 72 65 74 75 72 6e  DateTime) return
22c0: 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20   affinity;.     
22d0: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
22e0: 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29 20 72  DbType.Single) r
22f0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a  eturn affinity;.
2300: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
2310: 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 6f 75 62  p == DbType.Doub
2320: 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  le) return affin
2330: 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69  ity;.          i
2340: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
2350: 2e 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e  .Decimal) return
2360: 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20   affinity;.     
2370: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2380: 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
2390: 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0a 20 20  inity.Double:.  
23a0: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
23b0: 3d 3d 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65  == DbType.Single
23c0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
23d0: 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  y;.          if 
23e0: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44  (typ == DbType.D
23f0: 6f 75 62 6c 65 29 20 72 65 74 75 72 6e 20 61 66  ouble) return af
2400: 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20  finity;.        
2410: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
2420: 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72 65 74  ype.Decimal) ret
2430: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20  urn affinity;.  
2440: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
2450: 3d 3d 20 44 62 54 79 70 65 2e 44 61 74 65 54 69  == DbType.DateTi
2460: 6d 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  me) return affin
2470: 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 62  ity;.          b
2480: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61  reak;.        ca
2490: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
24a0: 54 65 78 74 3a 0a 20 20 20 20 20 20 20 20 20 20  Text:.          
24b0: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
24c0: 65 2e 53 42 79 74 65 29 20 72 65 74 75 72 6e 20  e.SByte) return 
24d0: 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20  affinity;.      
24e0: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
24f0: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 20 72 65  bType.String) re
2500: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20  turn affinity;. 
2510: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
2520: 20 3d 3d 20 44 62 54 79 70 65 2e 53 42 79 74 65   == DbType.SByte
2530: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
2540: 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  y;.          if 
2550: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 47  (typ == DbType.G
2560: 75 69 64 29 20 72 65 74 75 72 6e 20 61 66 66 69  uid) return affi
2570: 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20  nity;.          
2580: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
2590: 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74 75  e.DateTime) retu
25a0: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20  rn affinity;.   
25b0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
25c0: 3d 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c  = DbType.Decimal
25d0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
25e0: 79 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  y;.          bre
25f0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
2600: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c   TypeAffinity.Bl
2610: 6f 62 3a 0a 20 20 20 20 20 20 20 20 20 20 69 66  ob:.          if
2620: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
2630: 47 75 69 64 29 20 72 65 74 75 72 6e 20 61 66 66  Guid) return aff
2640: 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20  inity;.         
2650: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
2660: 70 65 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72  pe.String) retur
2670: 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20  n affinity;.    
2680: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
2690: 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29 20   DbType.Binary) 
26a0: 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b  return affinity;
26b0: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
26c0: 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
26d0: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
26e0: 69 64 43 61 73 74 45 78 63 65 70 74 69 6f 6e 28  idCastException(
26f0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f  );.    }..    //
2700: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
2710: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
2720: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 62 6f  e column as a bo
2730: 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 20 20  olean value.    
2740: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
2750: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2760: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
2770: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
2780: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
2790: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
27a0: 72 6e 73 3e 62 6f 6f 6c 3c 2f 72 65 74 75 72 6e  rns>bool</return
27b0: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
27c0: 65 72 72 69 64 65 20 62 6f 6f 6c 20 47 65 74 42  erride bool GetB
27d0: 6f 6f 6c 65 61 6e 28 69 6e 74 20 69 29 0a 20 20  oolean(int i).  
27e0: 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28 69 20    {.      if (i 
27f0: 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43  >= VisibleFieldC
2800: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
2810: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
2820: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
2830: 6f 2e 47 65 74 42 6f 6f 6c 65 61 6e 28 69 20 2d  o.GetBoolean(i -
2840: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
2850: 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69  nt);..      Veri
2860: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
2870: 2e 42 6f 6f 6c 65 61 6e 29 3b 0a 20 20 20 20 20  .Boolean);.     
2880: 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
2890: 54 6f 42 6f 6f 6c 65 61 6e 28 47 65 74 56 61 6c  ToBoolean(GetVal
28a0: 75 65 28 69 29 2c 20 43 75 6c 74 75 72 65 49 6e  ue(i), CultureIn
28b0: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
28c0: 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  e);.    }..    /
28d0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
28e0: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
28f0: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73  he column as a s
2900: 69 6e 67 6c 65 20 62 79 74 65 20 76 61 6c 75 65  ingle byte value
2910: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2920: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
2930: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
2940: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
2950: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
2960: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
2970: 3c 72 65 74 75 72 6e 73 3e 62 79 74 65 3c 2f 72  <returns>byte</r
2980: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
2990: 69 63 20 6f 76 65 72 72 69 64 65 20 62 79 74 65  ic override byte
29a0: 20 47 65 74 42 79 74 65 28 69 6e 74 20 69 29 0a   GetByte(int i).
29b0: 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28      {.      if (
29c0: 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c  i >= VisibleFiel
29d0: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
29e0: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  fo != null).    
29f0: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
2a00: 6e 66 6f 2e 47 65 74 42 79 74 65 28 69 20 2d 20  nfo.GetByte(i - 
2a10: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
2a20: 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66  t);..      Verif
2a30: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
2a40: 42 79 74 65 29 3b 0a 20 20 20 20 20 20 72 65 74  Byte);.      ret
2a50: 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42 79  urn Convert.ToBy
2a60: 74 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  te(_activeStatem
2a70: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 33  ent._sql.GetInt3
2a80: 32 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  2(_activeStateme
2a90: 6e 74 2c 20 69 29 29 3b 0a 20 20 20 20 7d 0a 0a  nt, i));.    }..
2aa0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2ab0: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  >.    /// Retrie
2ac0: 76 65 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20  ves a column as 
2ad0: 61 6e 20 61 72 72 61 79 20 6f 66 20 62 79 74 65  an array of byte
2ae0: 73 20 28 62 6c 6f 62 29 0a 20 20 20 20 2f 2f 2f  s (blob).    ///
2af0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
2b00: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2b10: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
2b20: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72   the column to r
2b30: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a  etrieve</param>.
2b40: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2b50: 61 6d 65 3d 22 66 69 65 6c 64 4f 66 66 73 65 74  ame="fieldOffset
2b60: 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  ">The zero-based
2b70: 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20   index of where 
2b80: 74 6f 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67  to begin reading
2b90: 20 74 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d   the data</param
2ba0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
2bb0: 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 22 3e 54   name="buffer">T
2bc0: 68 65 20 62 75 66 66 65 72 20 74 6f 20 77 72 69  he buffer to wri
2bd0: 74 65 20 74 68 65 20 62 79 74 65 73 20 69 6e 74  te the bytes int
2be0: 6f 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  o</param>.    //
2bf0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
2c00: 75 66 66 65 72 6f 66 66 73 65 74 22 3e 54 68 65  ufferoffset">The
2c10: 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65   zero-based inde
2c20: 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65  x of where to be
2c30: 67 69 6e 20 77 72 69 74 69 6e 67 20 69 6e 74 6f  gin writing into
2c40: 20 74 68 65 20 61 72 72 61 79 3c 2f 70 61 72 61   the array</para
2c50: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  m>.    /// <para
2c60: 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e  m name="length">
2c70: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  The number of by
2c80: 74 65 73 20 74 6f 20 72 65 74 72 69 65 76 65 3c  tes to retrieve<
2c90: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
2ca0: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 61 63 74  <returns>The act
2cb0: 75 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  ual number of by
2cc0: 74 65 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f  tes written into
2cd0: 20 74 68 65 20 61 72 72 61 79 3c 2f 72 65 74 75   the array</retu
2ce0: 72 6e 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  rns>.    /// <re
2cf0: 6d 61 72 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20 54  marks>.    /// T
2d00: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
2d10: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
2d20: 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 70  in the column, p
2d30: 61 73 73 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65  ass a null value
2d40: 20 66 6f 72 20 74 68 65 20 62 75 66 66 65 72 2e   for the buffer.
2d50: 20 20 54 68 65 20 74 6f 74 61 6c 20 6c 65 6e 67    The total leng
2d60: 74 68 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72  th will be retur
2d70: 6e 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ned..    /// </r
2d80: 65 6d 61 72 6b 73 3e 0a 20 20 20 20 70 75 62 6c  emarks>.    publ
2d90: 69 63 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  ic override long
2da0: 20 47 65 74 42 79 74 65 73 28 69 6e 74 20 69 2c   GetBytes(int i,
2db0: 20 6c 6f 6e 67 20 66 69 65 6c 64 4f 66 66 73 65   long fieldOffse
2dc0: 74 2c 20 62 79 74 65 5b 5d 20 62 75 66 66 65 72  t, byte[] buffer
2dd0: 2c 20 69 6e 74 20 62 75 66 66 65 72 6f 66 66 73  , int bufferoffs
2de0: 65 74 2c 20 69 6e 74 20 6c 65 6e 67 74 68 29 0a  et, int length).
2df0: 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28      {.      if (
2e00: 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c  i >= VisibleFiel
2e10: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
2e20: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  fo != null).    
2e30: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
2e40: 6e 66 6f 2e 47 65 74 42 79 74 65 73 28 69 20 2d  nfo.GetBytes(i -
2e50: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
2e60: 6e 74 2c 20 66 69 65 6c 64 4f 66 66 73 65 74 2c  nt, fieldOffset,
2e70: 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f   buffer, buffero
2e80: 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0a  ffset, length);.
2e90: 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70  .      VerifyTyp
2ea0: 65 28 69 2c 20 44 62 54 79 70 65 2e 42 69 6e 61  e(i, DbType.Bina
2eb0: 72 79 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  ry);.      retur
2ec0: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
2ed0: 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65 73  nt._sql.GetBytes
2ee0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
2ef0: 74 2c 20 69 2c 20 28 69 6e 74 29 66 69 65 6c 64  t, i, (int)field
2f00: 4f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c 20  Offset, buffer, 
2f10: 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65  bufferoffset, le
2f20: 6e 67 74 68 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ngth);.    }..  
2f30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
2f40: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
2f50: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
2f60: 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
2f70: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2f80: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
2f90: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
2fa0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
2fb0: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
2fc0: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
2fd0: 3c 72 65 74 75 72 6e 73 3e 63 68 61 72 3c 2f 72  <returns>char</r
2fe0: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
2ff0: 69 63 20 6f 76 65 72 72 69 64 65 20 63 68 61 72  ic override char
3000: 20 47 65 74 43 68 61 72 28 69 6e 74 20 69 29 0a   GetChar(int i).
3010: 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28      {.      if (
3020: 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c  i >= VisibleFiel
3030: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
3040: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  fo != null).    
3050: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
3060: 6e 66 6f 2e 47 65 74 43 68 61 72 28 69 20 2d 20  nfo.GetChar(i - 
3070: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
3080: 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66  t);..      Verif
3090: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
30a0: 53 42 79 74 65 29 3b 0a 20 20 20 20 20 20 72 65  SByte);.      re
30b0: 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 43  turn Convert.ToC
30c0: 68 61 72 28 5f 61 63 74 69 76 65 53 74 61 74 65  har(_activeState
30d0: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74  ment._sql.GetInt
30e0: 33 32 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  32(_activeStatem
30f0: 65 6e 74 2c 20 69 29 29 3b 0a 20 20 20 20 7d 0a  ent, i));.    }.
3100: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3110: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  y>.    /// Retri
3120: 65 76 65 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73  eves a column as
3130: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 63 68 61   an array of cha
3140: 72 73 20 28 62 6c 6f 62 29 0a 20 20 20 20 2f 2f  rs (blob).    //
3150: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
3160: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3170: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
3180: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
3190: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
31a0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
31b0: 6e 61 6d 65 3d 22 66 69 65 6c 64 6f 66 66 73 65  name="fieldoffse
31c0: 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65  t">The zero-base
31d0: 64 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65  d index of where
31e0: 20 74 6f 20 62 65 67 69 6e 20 72 65 61 64 69 6e   to begin readin
31f0: 67 20 74 68 65 20 64 61 74 61 3c 2f 70 61 72 61  g the data</para
3200: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  m>.    /// <para
3210: 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 22 3e  m name="buffer">
3220: 54 68 65 20 62 75 66 66 65 72 20 74 6f 20 77 72  The buffer to wr
3230: 69 74 65 20 74 68 65 20 63 68 61 72 61 63 74 65  ite the characte
3240: 72 73 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e 0a  rs into</param>.
3250: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
3260: 61 6d 65 3d 22 62 75 66 66 65 72 6f 66 66 73 65  ame="bufferoffse
3270: 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65  t">The zero-base
3280: 64 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65  d index of where
3290: 20 74 6f 20 62 65 67 69 6e 20 77 72 69 74 69 6e   to begin writin
32a0: 67 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79  g into the array
32b0: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
32c0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65   <param name="le
32d0: 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d 62 65 72  ngth">The number
32e0: 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72 65 74   of bytes to ret
32f0: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  rieve</param>.  
3300: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
3310: 68 65 20 61 63 74 75 61 6c 20 6e 75 6d 62 65 72  he actual number
3320: 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 77   of characters w
3330: 72 69 74 74 65 6e 20 69 6e 74 6f 20 74 68 65 20  ritten into the 
3340: 61 72 72 61 79 3c 2f 72 65 74 75 72 6e 73 3e 0a  array</returns>.
3350: 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73      /// <remarks
3360: 3e 0a 20 20 20 20 2f 2f 2f 20 54 6f 20 64 65 74  >.    /// To det
3370: 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
3380: 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
3390: 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 70  in the column, p
33a0: 61 73 73 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65  ass a null value
33b0: 20 66 6f 72 20 74 68 65 20 62 75 66 66 65 72 2e   for the buffer.
33c0: 20 20 54 68 65 20 74 6f 74 61 6c 20 6c 65 6e 67    The total leng
33d0: 74 68 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72  th will be retur
33e0: 6e 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ned..    /// </r
33f0: 65 6d 61 72 6b 73 3e 0a 20 20 20 20 70 75 62 6c  emarks>.    publ
3400: 69 63 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  ic override long
3410: 20 47 65 74 43 68 61 72 73 28 69 6e 74 20 69 2c   GetChars(int i,
3420: 20 6c 6f 6e 67 20 66 69 65 6c 64 6f 66 66 73 65   long fieldoffse
3430: 74 2c 20 63 68 61 72 5b 5d 20 62 75 66 66 65 72  t, char[] buffer
3440: 2c 20 69 6e 74 20 62 75 66 66 65 72 6f 66 66 73  , int bufferoffs
3450: 65 74 2c 20 69 6e 74 20 6c 65 6e 67 74 68 29 0a  et, int length).
3460: 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28      {.      if (
3470: 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c  i >= VisibleFiel
3480: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
3490: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  fo != null).    
34a0: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
34b0: 6e 66 6f 2e 47 65 74 43 68 61 72 73 28 69 20 2d  nfo.GetChars(i -
34c0: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
34d0: 6e 74 2c 20 66 69 65 6c 64 6f 66 66 73 65 74 2c  nt, fieldoffset,
34e0: 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f   buffer, buffero
34f0: 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0a  ffset, length);.
3500: 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70  .      VerifyTyp
3510: 65 28 69 2c 20 44 62 54 79 70 65 2e 53 74 72 69  e(i, DbType.Stri
3520: 6e 67 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  ng);.      retur
3530: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
3540: 6e 74 2e 5f 73 71 6c 2e 47 65 74 43 68 61 72 73  nt._sql.GetChars
3550: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
3560: 74 2c 20 69 2c 20 28 69 6e 74 29 66 69 65 6c 64  t, i, (int)field
3570: 6f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c 20  offset, buffer, 
3580: 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65  bufferoffset, le
3590: 6e 67 74 68 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ngth);.    }..  
35a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
35b0: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
35c0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
35d0: 65 20 62 61 63 6b 2d 65 6e 64 20 64 61 74 61 74  e back-end datat
35e0: 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ype of the colum
35f0: 6e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  n.    /// </summ
3600: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
3610: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
3620: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
3630: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
3640: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
3650: 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67   <returns>string
3660: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
3670: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73  ublic override s
3680: 74 72 69 6e 67 20 47 65 74 44 61 74 61 54 79 70  tring GetDataTyp
3690: 65 4e 61 6d 65 28 69 6e 74 20 69 29 0a 20 20 20  eName(int i).   
36a0: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e   {.      if (i >
36b0: 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  = VisibleFieldCo
36c0: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
36d0: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  != null).       
36e0: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
36f0: 2e 47 65 74 44 61 74 61 54 79 70 65 4e 61 6d 65  .GetDataTypeName
3700: 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c  (i - VisibleFiel
3710: 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20  dCount);..      
3720: 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 20 3d  SQLiteType typ =
3730: 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 69   GetSQLiteType(i
3740: 29 3b 0a 20 20 20 20 20 20 69 66 20 28 74 79 70  );.      if (typ
3750: 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e  .Type == DbType.
3760: 4f 62 6a 65 63 74 29 20 72 65 74 75 72 6e 20 53  Object) return S
3770: 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c  QLiteConvert.SQL
3780: 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74 79  iteTypeToType(ty
3790: 70 29 2e 4e 61 6d 65 3b 0a 20 20 20 20 20 20 72  p).Name;.      r
37a0: 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61  eturn _activeSta
37b0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75  tement._sql.Colu
37c0: 6d 6e 54 79 70 65 28 5f 61 63 74 69 76 65 53 74  mnType(_activeSt
37d0: 61 74 65 6d 65 6e 74 2c 20 69 2c 20 6f 75 74 20  atement, i, out 
37e0: 74 79 70 2e 41 66 66 69 6e 69 74 79 29 3b 0a 20  typ.Affinity);. 
37f0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
3800: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
3810: 52 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c  Retrieve the col
3820: 75 6d 6e 20 61 73 20 61 20 64 61 74 65 2f 74 69  umn as a date/ti
3830: 6d 65 20 76 61 6c 75 65 0a 20 20 20 20 2f 2f 2f  me value.    ///
3840: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
3850: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
3860: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
3870: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72   the column to r
3880: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a  etrieve</param>.
3890: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
38a0: 3e 44 61 74 65 54 69 6d 65 3c 2f 72 65 74 75 72  >DateTime</retur
38b0: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
38c0: 76 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65  verride DateTime
38d0: 20 47 65 74 44 61 74 65 54 69 6d 65 28 69 6e 74   GetDateTime(int
38e0: 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20   i).    {.      
38f0: 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65  if (i >= Visible
3900: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
3910: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a  eyInfo != null).
3920: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
3930: 6b 65 79 49 6e 66 6f 2e 47 65 74 44 61 74 65 54  keyInfo.GetDateT
3940: 69 6d 65 28 69 20 2d 20 56 69 73 69 62 6c 65 46  ime(i - VisibleF
3950: 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20  ieldCount);..   
3960: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
3970: 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65   DbType.DateTime
3980: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
3990: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
39a0: 2e 5f 73 71 6c 2e 47 65 74 44 61 74 65 54 69 6d  ._sql.GetDateTim
39b0: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
39c0: 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20  nt, i);.    }.. 
39d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
39e0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
39f0: 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  e the column as 
3a00: 61 20 64 65 63 69 6d 61 6c 20 76 61 6c 75 65 0a  a decimal value.
3a10: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
3a20: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
3a30: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
3a40: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
3a50: 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  mn to retrieve</
3a60: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
3a70: 72 65 74 75 72 6e 73 3e 64 65 63 69 6d 61 6c 3c  returns>decimal<
3a80: 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75  /returns>.    pu
3a90: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64 65  blic override de
3aa0: 63 69 6d 61 6c 20 47 65 74 44 65 63 69 6d 61 6c  cimal GetDecimal
3ab0: 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20  (int i).    {.  
3ac0: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73      if (i >= Vis
3ad0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
3ae0: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
3af0: 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74 75  ll).        retu
3b00: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44  rn _keyInfo.GetD
3b10: 65 63 69 6d 61 6c 28 69 20 2d 20 56 69 73 69 62  ecimal(i - Visib
3b20: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a  leFieldCount);..
3b30: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
3b40: 28 69 2c 20 44 62 54 79 70 65 2e 44 65 63 69 6d  (i, DbType.Decim
3b50: 61 6c 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  al);.      retur
3b60: 6e 20 44 65 63 69 6d 61 6c 2e 50 61 72 73 65 28  n Decimal.Parse(
3b70: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
3b80: 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61  ._sql.GetText(_a
3b90: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
3ba0: 69 29 2c 20 4e 75 6d 62 65 72 53 74 79 6c 65 73  i), NumberStyles
3bb0: 2e 41 6c 6c 6f 77 44 65 63 69 6d 61 6c 50 6f 69  .AllowDecimalPoi
3bc0: 6e 74 20 7c 20 4e 75 6d 62 65 72 53 74 79 6c 65  nt | NumberStyle
3bd0: 73 2e 41 6c 6c 6f 77 45 78 70 6f 6e 65 6e 74 20  s.AllowExponent 
3be0: 7c 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41  | NumberStyles.A
3bf0: 6c 6c 6f 77 4c 65 61 64 69 6e 67 53 69 67 6e 2c  llowLeadingSign,
3c00: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76   CultureInfo.Inv
3c10: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0a  ariantCulture);.
3c20: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
3c30: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
3c40: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
3c50: 75 6d 6e 20 61 73 20 61 20 64 6f 75 62 6c 65 0a  umn as a double.
3c60: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
3c70: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
3c80: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
3c90: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
3ca0: 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  mn to retrieve</
3cb0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
3cc0: 72 65 74 75 72 6e 73 3e 64 6f 75 62 6c 65 3c 2f  returns>double</
3cd0: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
3ce0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64 6f 75  lic override dou
3cf0: 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 69 6e  ble GetDouble(in
3d00: 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  t i).    {.     
3d10: 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c   if (i >= Visibl
3d20: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
3d30: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
3d40: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3d50: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 6f 75 62  _keyInfo.GetDoub
3d60: 6c 65 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69  le(i - VisibleFi
3d70: 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20  eldCount);..    
3d80: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
3d90: 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b 0a  DbType.Double);.
3da0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
3db0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
3dc0: 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f 61 63  ql.GetDouble(_ac
3dd0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
3de0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f  );.    }..    //
3df0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
3e00: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
3e10: 2e 4e 45 54 20 74 79 70 65 20 6f 66 20 61 20 67  .NET type of a g
3e20: 69 76 65 6e 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  iven column.    
3e30: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
3e40: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3e50: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
3e60: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
3e70: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
3e80: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
3e90: 72 6e 73 3e 54 79 70 65 3c 2f 72 65 74 75 72 6e  rns>Type</return
3ea0: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
3eb0: 65 72 72 69 64 65 20 54 79 70 65 20 47 65 74 46  erride Type GetF
3ec0: 69 65 6c 64 54 79 70 65 28 69 6e 74 20 69 29 0a  ieldType(int i).
3ed0: 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28      {.      if (
3ee0: 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c  i >= VisibleFiel
3ef0: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
3f00: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  fo != null).    
3f10: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
3f20: 6e 66 6f 2e 47 65 74 46 69 65 6c 64 54 79 70 65  nfo.GetFieldType
3f30: 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c  (i - VisibleFiel
3f40: 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20  dCount);..      
3f50: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 43 6f 6e  return SQLiteCon
3f60: 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54  vert.SQLiteTypeT
3f70: 6f 54 79 70 65 28 47 65 74 53 51 4c 69 74 65 54  oType(GetSQLiteT
3f80: 79 70 65 28 69 29 29 3b 0a 20 20 20 20 7d 0a 0a  ype(i));.    }..
3f90: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
3fa0: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  >.    /// Return
3fb0: 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  s a column as a 
3fc0: 66 6c 6f 61 74 20 76 61 6c 75 65 0a 20 20 20 20  float value.    
3fd0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
3fe0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3ff0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
4000: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
4010: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
4020: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
4030: 72 6e 73 3e 66 6c 6f 61 74 3c 2f 72 65 74 75 72  rns>float</retur
4040: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
4050: 76 65 72 72 69 64 65 20 66 6c 6f 61 74 20 47 65  verride float Ge
4060: 74 46 6c 6f 61 74 28 69 6e 74 20 69 29 0a 20 20  tFloat(int i).  
4070: 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28 69 20    {.      if (i 
4080: 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43  >= VisibleFieldC
4090: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
40a0: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
40b0: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
40c0: 6f 2e 47 65 74 46 6c 6f 61 74 28 69 20 2d 20 56  o.GetFloat(i - V
40d0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
40e0: 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66 79  );..      Verify
40f0: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53  Type(i, DbType.S
4100: 69 6e 67 6c 65 29 3b 0a 20 20 20 20 20 20 72 65  ingle);.      re
4110: 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 53  turn Convert.ToS
4120: 69 6e 67 6c 65 28 5f 61 63 74 69 76 65 53 74 61  ingle(_activeSta
4130: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44  tement._sql.GetD
4140: 6f 75 62 6c 65 28 5f 61 63 74 69 76 65 53 74 61  ouble(_activeSta
4150: 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20 20  tement, i));.   
4160: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
4170: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65  mary>.    /// Re
4180: 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e  turns the column
4190: 20 61 73 20 61 20 47 75 69 64 0a 20 20 20 20 2f   as a Guid.    /
41a0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
41b0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
41c0: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
41d0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
41e0: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
41f0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
4200: 6e 73 3e 47 75 69 64 3c 2f 72 65 74 75 72 6e 73  ns>Guid</returns
4210: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
4220: 72 72 69 64 65 20 47 75 69 64 20 47 65 74 47 75  rride Guid GetGu
4230: 69 64 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a  id(int i).    {.
4240: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56        if (i >= V
4250: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
4260: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
4270: 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65  null).        re
4280: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
4290: 74 47 75 69 64 28 69 20 2d 20 56 69 73 69 62 6c  tGuid(i - Visibl
42a0: 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20  eFieldCount);.. 
42b0: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
42c0: 79 20 61 66 66 69 6e 69 74 79 20 3d 20 56 65 72  y affinity = Ver
42d0: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
42e0: 65 2e 47 75 69 64 29 3b 0a 20 20 20 20 20 20 69  e.Guid);.      i
42f0: 66 20 28 61 66 66 69 6e 69 74 79 20 3d 3d 20 54  f (affinity == T
4300: 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62  ypeAffinity.Blob
4310: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
4320: 20 20 62 79 74 65 5b 5d 20 62 75 66 66 65 72 20    byte[] buffer 
4330: 3d 20 6e 65 77 20 62 79 74 65 5b 31 36 5d 3b 0a  = new byte[16];.
4340: 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
4350: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
4360: 74 42 79 74 65 73 28 5f 61 63 74 69 76 65 53 74  tBytes(_activeSt
4370: 61 74 65 6d 65 6e 74 2c 20 69 2c 20 30 2c 20 62  atement, i, 0, b
4380: 75 66 66 65 72 2c 20 30 2c 20 31 36 29 3b 0a 20  uffer, 0, 16);. 
4390: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
43a0: 77 20 47 75 69 64 28 62 75 66 66 65 72 29 3b 0a  w Guid(buffer);.
43b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 65 6c        }.      el
43c0: 73 65 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  se.        retur
43d0: 6e 20 6e 65 77 20 47 75 69 64 28 5f 61 63 74 69  n new Guid(_acti
43e0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
43f0: 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65  .GetText(_active
4400: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a  Statement, i));.
4410: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
4420: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
4430: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
4440: 75 6d 6e 20 61 73 20 61 20 73 68 6f 72 74 0a 20  umn as a short. 
4450: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
4460: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
4470: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
4480: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
4490: 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  n to retrieve</p
44a0: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
44b0: 65 74 75 72 6e 73 3e 49 6e 74 31 36 3c 2f 72 65  eturns>Int16</re
44c0: 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69  turns>.    publi
44d0: 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 31 36  c override Int16
44e0: 20 47 65 74 49 6e 74 31 36 28 69 6e 74 20 69 29   GetInt16(int i)
44f0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20  .    {.      if 
4500: 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65  (i >= VisibleFie
4510: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
4520: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
4530: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
4540: 49 6e 66 6f 2e 47 65 74 49 6e 74 31 36 28 69 20  Info.GetInt16(i 
4550: 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  - VisibleFieldCo
4560: 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72  unt);..      Ver
4570: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
4580: 65 2e 49 6e 74 31 36 29 3b 0a 20 20 20 20 20 20  e.Int16);.      
4590: 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54  return Convert.T
45a0: 6f 49 6e 74 31 36 28 5f 61 63 74 69 76 65 53 74  oInt16(_activeSt
45b0: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
45c0: 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74 61  Int32(_activeSta
45d0: 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20 20  tement, i));.   
45e0: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
45f0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65  mary>.    /// Re
4600: 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75  trieves the colu
4610: 6d 6e 20 61 73 20 61 6e 20 69 6e 74 0a 20 20 20  mn as an int.   
4620: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
4630: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
4640: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
4650: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  x of the column 
4660: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
4670: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
4680: 75 72 6e 73 3e 49 6e 74 33 32 3c 2f 72 65 74 75  urns>Int32</retu
4690: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
46a0: 6f 76 65 72 72 69 64 65 20 49 6e 74 33 32 20 47  override Int32 G
46b0: 65 74 49 6e 74 33 32 28 69 6e 74 20 69 29 0a 20  etInt32(int i). 
46c0: 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28 69     {.      if (i
46d0: 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64   >= VisibleField
46e0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
46f0: 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  o != null).     
4700: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
4710: 66 6f 2e 47 65 74 49 6e 74 33 32 28 69 20 2d 20  fo.GetInt32(i - 
4720: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
4730: 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66  t);..      Verif
4740: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
4750: 49 6e 74 33 32 29 3b 0a 20 20 20 20 20 20 72 65  Int32);.      re
4760: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
4770: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e  ement._sql.GetIn
4780: 74 33 32 28 5f 61 63 74 69 76 65 53 74 61 74 65  t32(_activeState
4790: 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a  ment, i);.    }.
47a0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
47b0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  y>.    /// Retri
47c0: 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  eves the column 
47d0: 61 73 20 61 20 6c 6f 6e 67 0a 20 20 20 20 2f 2f  as a long.    //
47e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
47f0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4800: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
4810: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
4820: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
4830: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
4840: 73 3e 49 6e 74 36 34 3c 2f 72 65 74 75 72 6e 73  s>Int64</returns
4850: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
4860: 72 72 69 64 65 20 49 6e 74 36 34 20 47 65 74 49  rride Int64 GetI
4870: 6e 74 36 34 28 69 6e 74 20 69 29 0a 20 20 20 20  nt64(int i).    
4880: 7b 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d  {.      if (i >=
4890: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
48a0: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
48b0: 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20  = null).        
48c0: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
48d0: 47 65 74 49 6e 74 36 34 28 69 20 2d 20 56 69 73  GetInt64(i - Vis
48e0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
48f0: 0a 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79  ..      VerifyTy
4900: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 49 6e 74  pe(i, DbType.Int
4910: 36 34 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  64);.      retur
4920: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
4930: 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 36 34  nt._sql.GetInt64
4940: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
4950: 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  t, i);.    }..  
4960: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
4970: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
4980: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
4990: 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2f 2f 2f  e column.    ///
49a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
49b0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
49c0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
49d0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72   the column to r
49e0: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a  etrieve</param>.
49f0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
4a00: 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73  >string</returns
4a10: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
4a20: 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
4a30: 4e 61 6d 65 28 69 6e 74 20 69 29 0a 20 20 20 20  Name(int i).    
4a40: 7b 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d  {.      if (i >=
4a50: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
4a60: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
4a70: 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20  = null).        
4a80: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
4a90: 47 65 74 4e 61 6d 65 28 69 20 2d 20 56 69 73 69  GetName(i - Visi
4aa0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a  bleFieldCount);.
4ab0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61  .      return _a
4ac0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
4ad0: 73 71 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f  sql.ColumnName(_
4ae0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
4af0: 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   i);.    }..    
4b00: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
4b10: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
4b20: 74 68 65 20 69 20 6f 66 20 61 20 63 6f 6c 75 6d  the i of a colum
4b30: 6e 2c 20 67 69 76 65 6e 20 69 74 73 20 6e 61 6d  n, given its nam
4b40: 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  e.    /// </summ
4b50: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
4b60: 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e  ram name="name">
4b70: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
4b80: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
4b90: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
4ba0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
4bb0: 69 6e 74 20 69 20 6f 66 20 74 68 65 20 63 6f 6c  int i of the col
4bc0: 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  umn</returns>.  
4bd0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
4be0: 65 20 69 6e 74 20 47 65 74 4f 72 64 69 6e 61 6c  e int GetOrdinal
4bf0: 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0a 20 20  (string name).  
4c00: 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43    {.      CheckC
4c10: 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20 69  losed();.      i
4c20: 6e 74 20 72 20 3d 20 5f 61 63 74 69 76 65 53 74  nt r = _activeSt
4c30: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c  atement._sql.Col
4c40: 75 6d 6e 49 6e 64 65 78 28 5f 61 63 74 69 76 65  umnIndex(_active
4c50: 53 74 61 74 65 6d 65 6e 74 2c 20 6e 61 6d 65 29  Statement, name)
4c60: 3b 0a 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d  ;.      if (r ==
4c70: 20 2d 31 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20   -1 && _keyInfo 
4c80: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 7b  != null).      {
4c90: 0a 20 20 20 20 20 20 20 20 72 20 3d 20 5f 6b 65  .        r = _ke
4ca0: 79 49 6e 66 6f 2e 47 65 74 4f 72 64 69 6e 61 6c  yInfo.GetOrdinal
4cb0: 28 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  (name);.        
4cc0: 69 66 20 28 72 20 3e 20 2d 31 29 20 72 20 2b 3d  if (r > -1) r +=
4cd0: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
4ce0: 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  nt;.      }..   
4cf0: 20 20 20 72 65 74 75 72 6e 20 72 3b 0a 20 20 20     return r;.   
4d00: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
4d10: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 53 63  mary>.    /// Sc
4d20: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
4d30: 20 69 6e 20 53 51 4c 69 74 65 20 69 73 20 64 69   in SQLite is di
4d40: 66 66 69 63 75 6c 74 20 74 6f 20 6d 61 70 20 69  fficult to map i
4d50: 6e 74 6f 20 2e 4e 45 54 20 63 6f 6e 76 65 6e 74  nto .NET convent
4d60: 69 6f 6e 73 2c 20 73 6f 20 61 20 6c 6f 74 20 6f  ions, so a lot o
4d70: 66 20 77 6f 72 6b 20 6d 75 73 74 20 62 65 20 64  f work must be d
4d80: 6f 6e 65 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 67  one.    /// to g
4d90: 61 74 68 65 72 20 74 68 65 20 6e 65 63 65 73 73  ather the necess
4da0: 61 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ary information 
4db0: 73 6f 20 69 74 20 63 61 6e 20 62 65 20 72 65 70  so it can be rep
4dc0: 72 65 73 65 6e 74 65 64 20 69 6e 20 61 6e 20 41  resented in an A
4dd0: 44 4f 2e 4e 45 54 20 6d 61 6e 6e 65 72 2e 0a 20  DO.NET manner.. 
4de0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
4df0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
4e00: 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 44 61 74  ns>Returns a Dat
4e10: 61 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  aTable containin
4e20: 67 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66  g the schema inf
4e30: 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65  ormation for the
4e40: 20 61 63 74 69 76 65 20 53 45 4c 45 43 54 20 73   active SELECT s
4e50: 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70  tatement being p
4e60: 72 6f 63 65 73 73 65 64 2e 3c 2f 72 65 74 75 72  rocessed.</retur
4e70: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
4e80: 76 65 72 72 69 64 65 20 44 61 74 61 54 61 62 6c  verride DataTabl
4e90: 65 20 47 65 74 53 63 68 65 6d 61 54 61 62 6c 65  e GetSchemaTable
4ea0: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72  ().    {.      r
4eb0: 65 74 75 72 6e 20 47 65 74 53 63 68 65 6d 61 54  eturn GetSchemaT
4ec0: 61 62 6c 65 28 74 72 75 65 2c 20 66 61 6c 73 65  able(true, false
4ed0: 29 3b 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  );.    }....    
4ee0: 70 72 69 76 61 74 65 20 63 6c 61 73 73 20 43 6f  private class Co
4ef0: 6c 75 6d 6e 50 61 72 65 6e 74 20 3a 20 49 45 71  lumnParent : IEq
4f00: 75 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 43  ualityComparer<C
4f10: 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 0d 0a 20 20  olumnParent>..  
4f20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
4f30: 6c 69 63 20 73 74 72 69 6e 67 20 44 61 74 61 62  lic string Datab
4f40: 61 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  aseName;..      
4f50: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
4f60: 54 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  TableName;..    
4f70: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
4f80: 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 0d  g ColumnName;...
4f90: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
4fa0: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 29 0d 0a  ColumnParent()..
4fb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4fc0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
4fd0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
4fe0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
4ff0: 69 63 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28  ic ColumnParent(
5000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
5010: 72 69 6e 67 20 64 61 74 61 62 61 73 65 4e 61 6d  ring databaseNam
5020: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
5030: 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65  string tableName
5040: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
5050: 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65  tring columnName
5060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
5070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74  .            : t
5080: 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  his()..        {
5090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
50a0: 69 73 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 20  is.DatabaseName 
50b0: 3d 20 64 61 74 61 62 61 73 65 4e 61 6d 65 3b 0d  = databaseName;.
50c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
50d0: 73 2e 54 61 62 6c 65 4e 61 6d 65 20 3d 20 74 61  s.TableName = ta
50e0: 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  bleName;..      
50f0: 20 20 20 20 20 20 74 68 69 73 2e 43 6f 6c 75 6d        this.Colum
5100: 6e 4e 61 6d 65 20 3d 20 63 6f 6c 75 6d 6e 4e 61  nName = columnNa
5110: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  me;..        }..
5120: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
5130: 6e 20 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61  n IEqualityCompa
5140: 72 65 72 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  rer<ColumnParent
5150: 3e 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  > Members..     
5160: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 45     public bool E
5170: 71 75 61 6c 73 28 43 6f 6c 75 6d 6e 50 61 72 65  quals(ColumnPare
5180: 6e 74 20 78 2c 20 43 6f 6c 75 6d 6e 50 61 72 65  nt x, ColumnPare
5190: 6e 74 20 79 29 0d 0a 20 20 20 20 20 20 20 20 7b  nt y)..        {
51a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
51b0: 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29 20 26 26   ((x == null) &&
51c0: 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20   (y == null)).. 
51d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
51e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
51f0: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
5200: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5210: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
5220: 28 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28  (x == null) || (
5230: 79 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  y == null))..   
5240: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5250: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5260: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
5270: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5280: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
5290: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
52a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
52b0: 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 78 2e  String.Equals(x.
52c0: 44 61 74 61 62 61 73 65 4e 61 6d 65 2c 20 79 2e  DatabaseName, y.
52d0: 44 61 74 61 62 61 73 65 4e 61 6d 65 2c 0d 0a 20  DatabaseName,.. 
52e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52f0: 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d         StringCom
5300: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
5310: 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20  gnoreCase))..   
5320: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
5330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5340: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
5350: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5360: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
5370: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
5380: 69 6e 67 2e 45 71 75 61 6c 73 28 78 2e 54 61 62  ing.Equals(x.Tab
5390: 6c 65 4e 61 6d 65 2c 20 79 2e 54 61 62 6c 65 4e  leName, y.TableN
53a0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
53b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
53c0: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
53d0: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
53e0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
53f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5400: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5410: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
5420: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5440: 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
5450: 73 28 78 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20  s(x.ColumnName, 
5460: 79 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 0d 0a 20  y.ColumnName,.. 
5470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5480: 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d         StringCom
5490: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
54a0: 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20  gnoreCase))..   
54b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
54c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54d0: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
54e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
54f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
5500: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
5510: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
5520: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
5530: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
5540: 20 69 6e 74 20 47 65 74 48 61 73 68 43 6f 64 65   int GetHashCode
5550: 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6f 62  (ColumnParent ob
5560: 6a 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  j)..        {.. 
5570: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 72             int r
5580: 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  esult = 0;....  
5590: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6f            if ((o
55a0: 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28  bj != null) && (
55b0: 6f 62 6a 2e 44 61 74 61 62 61 73 65 4e 61 6d 65  obj.DatabaseName
55c0: 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   != null))..    
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
55e0: 6c 74 20 5e 3d 20 6f 62 6a 2e 44 61 74 61 62 61  lt ^= obj.Databa
55f0: 73 65 4e 61 6d 65 2e 47 65 74 48 61 73 68 43 6f  seName.GetHashCo
5600: 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de();....       
5610: 20 20 20 20 20 69 66 20 28 28 6f 62 6a 20 21 3d       if ((obj !=
5620: 20 6e 75 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 54   null) && (obj.T
5630: 61 62 6c 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  ableName != null
5640: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
5650: 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62      result ^= ob
5660: 6a 2e 54 61 62 6c 65 4e 61 6d 65 2e 47 65 74 48  j.TableName.GetH
5670: 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20  ashCode();....  
5680: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6f            if ((o
5690: 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28  bj != null) && (
56a0: 6f 62 6a 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 20 21  obj.ColumnName !
56b0: 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
56c0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
56d0: 20 5e 3d 20 6f 62 6a 2e 43 6f 6c 75 6d 6e 4e 61   ^= obj.ColumnNa
56e0: 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28 29  me.GetHashCode()
56f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5700: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
5710: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5720: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
5730: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
5740: 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
5750: 20 47 65 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c   GetStatementCol
5760: 75 6d 6e 50 61 72 65 6e 74 73 28 0d 0a 20 20 20  umnParents(..   
5770: 20 20 20 20 20 53 51 4c 69 74 65 42 61 73 65 20       SQLiteBase 
5780: 73 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20 53 51  sql,..        SQ
5790: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
57a0: 6d 74 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  mt,..        int
57b0: 20 66 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a 20 20   fieldCount,..  
57c0: 20 20 20 20 20 20 72 65 66 20 44 69 63 74 69 6f        ref Dictio
57d0: 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e  nary<ColumnParen
57e0: 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20 70 61  t, List<int>> pa
57f0: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 0d 0a  rentToColumns,..
5800: 20 20 20 20 20 20 20 20 72 65 66 20 44 69 63 74          ref Dict
5810: 69 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75  ionary<int, Colu
5820: 6d 6e 50 61 72 65 6e 74 3e 20 63 6f 6c 75 6d 6e  mnParent> column
5830: 54 6f 50 61 72 65 6e 74 0d 0a 20 20 20 20 20 20  ToParent..      
5840: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
5850: 20 20 20 20 69 66 20 28 70 61 72 65 6e 74 54 6f      if (parentTo
5860: 43 6f 6c 75 6d 6e 73 20 3d 3d 20 6e 75 6c 6c 29  Columns == null)
5870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61  ..            pa
5880: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 20  rentToColumns = 
5890: 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 43  new Dictionary<C
58a0: 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73  olumnParent, Lis
58b0: 74 3c 69 6e 74 3e 3e 28 0d 0a 20 20 20 20 20 20  t<int>>(..      
58c0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f            new Co
58d0: 6c 75 6d 6e 50 61 72 65 6e 74 28 29 29 3b 0d 0a  lumnParent());..
58e0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 6f  ..        if (co
58f0: 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 3d 20  lumnToParent == 
5900: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
5910: 20 20 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e     columnToParen
5920: 74 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  t = new Dictiona
5930: 72 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61  ry<int, ColumnPa
5940: 72 65 6e 74 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20  rent>();....    
5950: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d      for (int n =
5960: 20 30 3b 20 6e 20 3c 20 66 69 65 6c 64 43 6f 75   0; n < fieldCou
5970: 6e 74 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20  nt; n++)..      
5980: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5990: 20 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65   string database
59a0: 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d  Name = sql.Colum
59b0: 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28 73 74  nDatabaseName(st
59c0: 6d 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20  mt, n);..       
59d0: 20 20 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c       string tabl
59e0: 65 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75  eName = sql.Colu
59f0: 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 73 74 6d 74  mnTableName(stmt
5a00: 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  , n);..         
5a10: 20 20 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e     string column
5a20: 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d  Name = sql.Colum
5a30: 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 73 74  nOriginalName(st
5a40: 6d 74 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  mt, n);....     
5a50: 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 50 61 72         ColumnPar
5a60: 65 6e 74 20 6b 65 79 20 3d 20 6e 65 77 20 43 6f  ent key = new Co
5a70: 6c 75 6d 6e 50 61 72 65 6e 74 28 64 61 74 61 62  lumnParent(datab
5a80: 61 73 65 4e 61 6d 65 2c 20 74 61 62 6c 65 4e 61  aseName, tableNa
5a90: 6d 65 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  me, null);..    
5aa0: 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 50 61          ColumnPa
5ab0: 72 65 6e 74 20 76 61 6c 75 65 20 3d 20 6e 65 77  rent value = new
5ac0: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 64 61   ColumnParent(da
5ad0: 74 61 62 61 73 65 4e 61 6d 65 2c 20 74 61 62 6c  tabaseName, tabl
5ae0: 65 4e 61 6d 65 2c 20 63 6f 6c 75 6d 6e 4e 61 6d  eName, columnNam
5af0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
5b00: 20 20 20 69 66 20 28 21 70 61 72 65 6e 74 54 6f     if (!parentTo
5b10: 43 6f 6c 75 6d 6e 73 2e 43 6f 6e 74 61 69 6e 73  Columns.Contains
5b20: 4b 65 79 28 6b 65 79 29 29 0d 0a 20 20 20 20 20  Key(key))..     
5b30: 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65 6e             paren
5b40: 74 54 6f 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 6b  tToColumns.Add(k
5b50: 65 79 2c 20 6e 65 77 20 4c 69 73 74 3c 69 6e 74  ey, new List<int
5b60: 3e 28 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 6e 20  >(new int[] { n 
5b70: 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }));..          
5b80: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
5b90: 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 54 6f          parentTo
5ba0: 43 6f 6c 75 6d 6e 73 5b 6b 65 79 5d 2e 41 64 64  Columns[key].Add
5bb0: 28 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  (n);....        
5bc0: 20 20 20 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65      columnToPare
5bd0: 6e 74 2e 41 64 64 28 6e 2c 20 76 61 6c 75 65 29  nt.Add(n, value)
5be0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
5bf0: 20 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61    }..    interna
5c00: 6c 20 44 61 74 61 54 61 62 6c 65 20 47 65 74 53  l DataTable GetS
5c10: 63 68 65 6d 61 54 61 62 6c 65 28 62 6f 6f 6c 20  chemaTable(bool 
5c20: 77 61 6e 74 55 6e 69 71 75 65 49 6e 66 6f 2c 20  wantUniqueInfo, 
5c30: 62 6f 6f 6c 20 77 61 6e 74 44 65 66 61 75 6c 74  bool wantDefault
5c40: 56 61 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20 20  Value).    {.   
5c50: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
5c60: 3b 0d 0a 0d 0a 20 20 20 20 20 2f 2f 0d 0a 20 20  ;....     //..  
5c70: 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 57 65     // BUGFIX: We
5c80: 20 6e 65 65 64 20 74 6f 20 71 75 69 63 6b 6c 79   need to quickly
5c90: 20 73 63 61 6e 20 61 6c 6c 20 74 68 65 20 66 69   scan all the fi
5ca0: 65 6c 64 73 20 69 6e 20 74 68 65 20 63 75 72 72  elds in the curr
5cb0: 65 6e 74 0d 0a 20 20 20 20 20 2f 2f 20 20 20 20  ent..     //    
5cc0: 20 20 20 20 20 22 72 65 73 75 6c 74 20 73 65 74       "result set
5cd0: 22 20 74 6f 20 73 65 65 20 68 6f 77 20 6d 61 6e  " to see how man
5ce0: 79 20 64 69 73 74 69 6e 63 74 20 74 61 62 6c 65  y distinct table
5cf0: 73 20 61 72 65 20 61 63 74 75 61 6c 6c 79 0d 0a  s are actually..
5d00: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
5d10: 69 6e 76 6f 6c 76 65 64 2e 20 20 54 68 69 73 20  involved.  This 
5d20: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e  information is n
5d30: 65 63 65 73 73 61 72 79 20 73 6f 20 74 68 61 74  ecessary so that
5d40: 20 73 6f 6d 65 0d 0a 20 20 20 20 20 2f 2f 20 20   some..     //  
5d50: 20 20 20 20 20 20 20 69 6e 74 65 6c 6c 69 67 65         intellige
5d60: 6e 74 20 64 65 63 69 73 69 6f 6e 73 20 63 61 6e  nt decisions can
5d70: 20 62 65 20 6d 61 64 65 20 77 68 65 6e 20 63 6f   be made when co
5d80: 6e 73 74 72 75 63 74 69 6e 67 20 74 68 65 0d 0a  nstructing the..
5d90: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
5da0: 6d 65 74 61 64 61 74 61 20 62 65 6c 6f 77 2e 20  metadata below. 
5db0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 77 65   For example, we
5dc0: 20 6e 65 65 64 20 74 6f 20 62 65 20 76 65 72 79   need to be very
5dd0: 20 63 61 72 65 66 75 6c 0d 0a 20 20 20 20 20 2f   careful..     /
5de0: 2f 20 20 20 20 20 20 20 20 20 61 62 6f 75 74 20  /         about 
5df0: 66 6c 61 67 67 69 6e 67 20 61 20 70 61 72 74 69  flagging a parti
5e00: 63 75 6c 61 72 20 63 6f 6c 75 6d 6e 20 61 73 20  cular column as 
5e10: 22 75 6e 69 71 75 65 22 20 6a 75 73 74 0d 0a 20  "unique" just.. 
5e20: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 62      //         b
5e30: 65 63 61 75 73 65 20 69 74 20 77 61 73 20 69 6e  ecause it was in
5e40: 20 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 75 6e   its original un
5e50: 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73  derlying databas
5e60: 65 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 2f 2f  e table..     //
5e70: 20 20 20 20 20 20 20 20 20 69 66 20 74 68 65 72           if ther
5e80: 65 20 61 72 65 20 6e 6f 77 20 6d 75 6c 74 69 70  e are now multip
5e90: 6c 65 20 74 61 62 6c 65 73 20 69 6e 76 6f 6c 76  le tables involv
5ea0: 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ed in the..     
5eb0: 2f 2f 20 20 20 20 20 20 20 20 20 22 72 65 73 75  //         "resu
5ec0: 6c 74 20 73 65 74 22 2e 20 20 53 65 65 20 74 69  lt set".  See ti
5ed0: 63 6b 65 74 20 5b 37 65 33 66 61 39 33 37 34 34  cket [7e3fa93744
5ee0: 5d 20 66 6f 72 20 6d 6f 72 65 20 64 65 74 61 69  ] for more detai
5ef0: 6c 65 64 0d 0a 20 20 20 20 20 2f 2f 20 20 20 20  led..     //    
5f00: 20 20 20 20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e       information
5f10: 2e 0d 0a 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20  ...     //..    
5f20: 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c    Dictionary<Col
5f30: 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c  umnParent, List<
5f40: 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54 6f 43 6f  int>> parentToCo
5f50: 6c 75 6d 6e 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  lumns = null;.. 
5f60: 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79 3c       Dictionary<
5f70: 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e  int, ColumnParen
5f80: 74 3e 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e  t> columnToParen
5f90: 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  t = null;....   
5fa0: 20 20 20 47 65 74 53 74 61 74 65 6d 65 6e 74 43     GetStatementC
5fb0: 6f 6c 75 6d 6e 50 61 72 65 6e 74 73 28 0a 20 20  olumnParents(.  
5fc0: 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64          _command
5fd0: 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c  .Connection._sql
5fe0: 2c 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  , _activeStateme
5ff0: 6e 74 2c 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c  nt, _fieldCount,
6000: 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20 70  .          ref p
6010: 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 20  arentToColumns, 
6020: 72 65 66 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65  ref columnToPare
6030: 6e 74 29 3b 0a 0a 20 20 20 20 20 20 44 61 74 61  nt);..      Data
6040: 54 61 62 6c 65 20 74 62 6c 20 3d 20 6e 65 77 20  Table tbl = new 
6050: 44 61 74 61 54 61 62 6c 65 28 22 53 63 68 65 6d  DataTable("Schem
6060: 61 54 61 62 6c 65 22 29 3b 0a 20 20 20 20 20 20  aTable");.      
6070: 44 61 74 61 54 61 62 6c 65 20 74 62 6c 49 6e 64  DataTable tblInd
6080: 65 78 65 73 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20  exes = null;.   
6090: 20 20 20 44 61 74 61 54 61 62 6c 65 20 74 62 6c     DataTable tbl
60a0: 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 3b 0a 20 20  IndexColumns;.  
60b0: 20 20 20 20 44 61 74 61 52 6f 77 20 72 6f 77 3b      DataRow row;
60c0: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65  .      string te
60d0: 6d 70 3b 0a 20 20 20 20 20 20 73 74 72 69 6e 67  mp;.      string
60e0: 20 73 74 72 43 61 74 61 6c 6f 67 20 3d 20 22 22   strCatalog = ""
60f0: 3b 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73  ;.      string s
6100: 74 72 54 61 62 6c 65 20 3d 20 22 22 3b 0a 20 20  trTable = "";.  
6110: 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 43 6f      string strCo
6120: 6c 75 6d 6e 20 3d 20 22 22 3b 0a 0a 20 20 20 20  lumn = "";..    
6130: 20 20 74 62 6c 2e 4c 6f 63 61 6c 65 20 3d 20 43    tbl.Locale = C
6140: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
6150: 69 61 6e 74 43 75 6c 74 75 72 65 3b 0a 20 20 20  iantCulture;.   
6160: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
6170: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
6180: 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  lumn.ColumnName,
6190: 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29   typeof(String))
61a0: 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ;.      tbl.Colu
61b0: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
61c0: 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
61d0: 4f 72 64 69 6e 61 6c 2c 20 74 79 70 65 6f 66 28  Ordinal, typeof(
61e0: 69 6e 74 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  int));.      tbl
61f0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
6200: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43  emaTableColumn.C
6210: 6f 6c 75 6d 6e 53 69 7a 65 2c 20 74 79 70 65 6f  olumnSize, typeo
6220: 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 20 20 74  f(int));.      t
6230: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
6240: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
6250: 2e 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f  .NumericPrecisio
6260: 6e 2c 20 74 79 70 65 6f 66 28 73 68 6f 72 74 29  n, typeof(short)
6270: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
6280: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
6290: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72  ableColumn.Numer
62a0: 69 63 53 63 61 6c 65 2c 20 74 79 70 65 6f 66 28  icScale, typeof(
62b0: 73 68 6f 72 74 29 29 3b 0a 20 20 20 20 20 20 74  short));.      t
62c0: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
62d0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
62e0: 2e 49 73 55 6e 69 71 75 65 2c 20 74 79 70 65 6f  .IsUnique, typeo
62f0: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20  f(Boolean));.   
6300: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
6310: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
6320: 6c 75 6d 6e 2e 49 73 4b 65 79 2c 20 74 79 70 65  lumn.IsKey, type
6330: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20  of(Boolean));.  
6340: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
6350: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
6360: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61  ptionalColumn.Ba
6370: 73 65 53 65 72 76 65 72 4e 61 6d 65 2c 20 74 79  seServerName, ty
6380: 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0a 20  peof(string));. 
6390: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
63a0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
63b0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42  OptionalColumn.B
63c0: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 20  aseCatalogName, 
63d0: 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b  typeof(String));
63e0: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
63f0: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
6400: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c  leColumn.BaseCol
6410: 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28  umnName, typeof(
6420: 53 74 72 69 6e 67 29 29 3b 0a 20 20 20 20 20 20  String));.      
6430: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
6440: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
6450: 6e 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  n.BaseSchemaName
6460: 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29  , typeof(String)
6470: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
6480: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
6490: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
64a0: 61 62 6c 65 4e 61 6d 65 2c 20 74 79 70 65 6f 66  ableName, typeof
64b0: 28 53 74 72 69 6e 67 29 29 3b 0a 20 20 20 20 20  (String));.     
64c0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
64d0: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
64e0: 6d 6e 2e 44 61 74 61 54 79 70 65 2c 20 74 79 70  mn.DataType, typ
64f0: 65 6f 66 28 54 79 70 65 29 29 3b 0a 20 20 20 20  eof(Type));.    
6500: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
6510: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
6520: 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 2c  umn.AllowDBNull,
6530: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
6540: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
6550: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
6560: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69  ableColumn.Provi
6570: 64 65 72 54 79 70 65 2c 20 74 79 70 65 6f 66 28  derType, typeof(
6580: 69 6e 74 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  int));.      tbl
6590: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
65a0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49  emaTableColumn.I
65b0: 73 41 6c 69 61 73 65 64 2c 20 74 79 70 65 6f 66  sAliased, typeof
65c0: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20  (Boolean));.    
65d0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
65e0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
65f0: 75 6d 6e 2e 49 73 45 78 70 72 65 73 73 69 6f 6e  umn.IsExpression
6600: 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e  , typeof(Boolean
6610: 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  ));.      tbl.Co
6620: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
6630: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
6640: 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d  umn.IsAutoIncrem
6650: 65 6e 74 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  ent, typeof(Bool
6660: 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  ean));.      tbl
6670: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
6680: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
6690: 43 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56 65 72 73  Column.IsRowVers
66a0: 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  ion, typeof(Bool
66b0: 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  ean));.      tbl
66c0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
66d0: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
66e0: 43 6f 6c 75 6d 6e 2e 49 73 48 69 64 64 65 6e 2c  Column.IsHidden,
66f0: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
6700: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
6710: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
6720: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e  ableColumn.IsLon
6730: 67 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  g, typeof(Boolea
6740: 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  n));.      tbl.C
6750: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
6760: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
6770: 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 2c  lumn.IsReadOnly,
6780: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
6790: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
67a0: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
67b0: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
67c0: 6d 6e 2e 50 72 6f 76 69 64 65 72 53 70 65 63 69  mn.ProviderSpeci
67d0: 66 69 63 44 61 74 61 54 79 70 65 2c 20 74 79 70  ficDataType, typ
67e0: 65 6f 66 28 54 79 70 65 29 29 3b 0a 20 20 20 20  eof(Type));.    
67f0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
6800: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
6810: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61  ionalColumn.Defa
6820: 75 6c 74 56 61 6c 75 65 2c 20 74 79 70 65 6f 66  ultValue, typeof
6830: 28 6f 62 6a 65 63 74 29 29 3b 0a 20 20 20 20 20  (object));.     
6840: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
6850: 28 22 44 61 74 61 54 79 70 65 4e 61 6d 65 22 2c  ("DataTypeName",
6860: 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29   typeof(string))
6870: 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ;.      tbl.Colu
6880: 6d 6e 73 2e 41 64 64 28 22 43 6f 6c 6c 61 74 69  mns.Add("Collati
6890: 6f 6e 54 79 70 65 22 2c 20 74 79 70 65 6f 66 28  onType", typeof(
68a0: 73 74 72 69 6e 67 29 29 3b 0a 20 20 20 20 20 20  string));.      
68b0: 74 62 6c 2e 42 65 67 69 6e 4c 6f 61 64 44 61 74  tbl.BeginLoadDat
68c0: 61 28 29 3b 0a 0a 20 20 20 20 20 20 66 6f 72 20  a();..      for 
68d0: 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20  (int n = 0; n < 
68e0: 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b  _fieldCount; n++
68f0: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
6900: 20 20 72 6f 77 20 3d 20 74 62 6c 2e 4e 65 77 52    row = tbl.NewR
6910: 6f 77 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 44  ow();..        D
6920: 62 54 79 70 65 20 74 79 70 20 3d 20 47 65 74 53  bType typ = GetS
6930: 51 4c 69 74 65 54 79 70 65 28 6e 29 2e 54 79 70  QLiteType(n).Typ
6940: 65 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 44  e;..        // D
6950: 65 66 61 75 6c 74 20 73 65 74 74 69 6e 67 73 20  efault settings 
6960: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20  for the column. 
6970: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
6980: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c  aTableColumn.Col
6990: 75 6d 6e 4e 61 6d 65 5d 20 3d 20 47 65 74 4e 61  umnName] = GetNa
69a0: 6d 65 28 6e 29 3b 0a 20 20 20 20 20 20 20 20 72  me(n);.        r
69b0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
69c0: 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e  lumn.ColumnOrdin
69d0: 61 6c 5d 20 3d 20 6e 3b 0a 20 20 20 20 20 20 20  al] = n;.       
69e0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
69f0: 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a  Column.ColumnSiz
6a00: 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65  e] = SQLiteConve
6a10: 72 74 2e 44 62 54 79 70 65 54 6f 43 6f 6c 75 6d  rt.DbTypeToColum
6a20: 6e 53 69 7a 65 28 74 79 70 29 3b 0a 20 20 20 20  nSize(typ);.    
6a30: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
6a40: 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69  bleColumn.Numeri
6a50: 63 50 72 65 63 69 73 69 6f 6e 5d 20 3d 20 53 51  cPrecision] = SQ
6a60: 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44 62 54 79  LiteConvert.DbTy
6a70: 70 65 54 6f 4e 75 6d 65 72 69 63 50 72 65 63 69  peToNumericPreci
6a80: 73 69 6f 6e 28 74 79 70 29 3b 0a 20 20 20 20 20  sion(typ);.     
6a90: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
6aa0: 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63  leColumn.Numeric
6ab0: 53 63 61 6c 65 5d 20 3d 20 53 51 4c 69 74 65 43  Scale] = SQLiteC
6ac0: 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f 4e  onvert.DbTypeToN
6ad0: 75 6d 65 72 69 63 53 63 61 6c 65 28 74 79 70 29  umericScale(typ)
6ae0: 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ;.        row[Sc
6af0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
6b00: 50 72 6f 76 69 64 65 72 54 79 70 65 5d 20 3d 20  ProviderType] = 
6b10: 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 6e 29  GetSQLiteType(n)
6b20: 2e 54 79 70 65 3b 0a 20 20 20 20 20 20 20 20 72  .Type;.        r
6b30: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
6b40: 6c 75 6d 6e 2e 49 73 4c 6f 6e 67 5d 20 3d 20 66  lumn.IsLong] = f
6b50: 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 72 6f  alse;.        ro
6b60: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
6b70: 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d  umn.AllowDBNull]
6b80: 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20   = true;.       
6b90: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
6ba0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
6bb0: 73 52 65 61 64 4f 6e 6c 79 5d 20 3d 20 66 61 6c  sReadOnly] = fal
6bc0: 73 65 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  se;.        row[
6bd0: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
6be0: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56  nalColumn.IsRowV
6bf0: 65 72 73 69 6f 6e 5d 20 3d 20 66 61 6c 73 65 3b  ersion] = false;
6c00: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
6c10: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49  emaTableColumn.I
6c20: 73 55 6e 69 71 75 65 5d 20 3d 20 66 61 6c 73 65  sUnique] = false
6c30: 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ;.        row[Sc
6c40: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
6c50: 49 73 4b 65 79 5d 20 3d 20 66 61 6c 73 65 3b 0a  IsKey] = false;.
6c60: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
6c70: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
6c80: 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72  olumn.IsAutoIncr
6c90: 65 6d 65 6e 74 5d 20 3d 20 66 61 6c 73 65 3b 0a  ement] = false;.
6ca0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
6cb0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61  maTableColumn.Da
6cc0: 74 61 54 79 70 65 5d 20 3d 20 47 65 74 46 69 65  taType] = GetFie
6cd0: 6c 64 54 79 70 65 28 6e 29 3b 0a 20 20 20 20 20  ldType(n);.     
6ce0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
6cf0: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
6d00: 2e 49 73 48 69 64 64 65 6e 5d 20 3d 20 66 61 6c  .IsHidden] = fal
6d10: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77  se;..        row
6d20: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
6d30: 6d 6e 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d  mn.BaseSchemaNam
6d40: 65 5d 20 3d 20 5f 62 61 73 65 53 63 68 65 6d 61  e] = _baseSchema
6d50: 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
6d60: 20 73 74 72 43 6f 6c 75 6d 6e 20 3d 20 63 6f 6c   strColumn = col
6d70: 75 6d 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 43  umnToParent[n].C
6d80: 6f 6c 75 6d 6e 4e 61 6d 65 3b 0a 20 20 20 20 20  olumnName;.     
6d90: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
6da0: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43  NullOrEmpty(strC
6db0: 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29  olumn) == false)
6dc0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
6dd0: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d  Column.BaseColum
6de0: 6e 4e 61 6d 65 5d 20 3d 20 73 74 72 43 6f 6c 75  nName] = strColu
6df0: 6d 6e 3b 0a 0a 20 20 20 20 20 20 20 20 72 6f 77  mn;..        row
6e00: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
6e10: 6d 6e 2e 49 73 45 78 70 72 65 73 73 69 6f 6e 5d  mn.IsExpression]
6e20: 20 3d 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   = String.IsNull
6e30: 4f 72 45 6d 70 74 79 28 73 74 72 43 6f 6c 75 6d  OrEmpty(strColum
6e40: 6e 29 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  n);.        row[
6e50: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
6e60: 6e 2e 49 73 41 6c 69 61 73 65 64 5d 20 3d 20 28  n.IsAliased] = (
6e70: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47  String.Compare(G
6e80: 65 74 4e 61 6d 65 28 6e 29 2c 20 73 74 72 43 6f  etName(n), strCo
6e90: 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70  lumn, StringComp
6ea0: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
6eb0: 6e 6f 72 65 43 61 73 65 29 20 21 3d 20 30 29 3b  noreCase) != 0);
6ec0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65 6d 70  ....        temp
6ed0: 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e   = columnToParen
6ee0: 74 5b 6e 5d 2e 54 61 62 6c 65 4e 61 6d 65 3b 0a  t[n].TableName;.
6ef0: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
6f00: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
6f10: 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c 73 65 29  (temp) == false)
6f20: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
6f30: 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65  Column.BaseTable
6f40: 4e 61 6d 65 5d 20 3d 20 74 65 6d 70 3b 0d 0a 0d  Name] = temp;...
6f50: 0a 20 20 20 20 20 20 20 20 74 65 6d 70 20 3d 20  .        temp = 
6f60: 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 5b 6e  columnToParent[n
6f70: 5d 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 3b 0a  ].DatabaseName;.
6f80: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
6f90: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
6fa0: 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c 73 65 29  (temp) == false)
6fb0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
6fc0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42  OptionalColumn.B
6fd0: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20  aseCatalogName] 
6fe0: 3d 20 74 65 6d 70 3b 0a 0a 20 20 20 20 20 20 20  = temp;..       
6ff0: 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65   string dataType
7000: 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20   = null;.       
7010: 20 2f 2f 20 49 66 20 77 65 20 68 61 76 65 20 61   // If we have a
7020: 20 74 61 62 6c 65 2d 62 6f 75 6e 64 20 63 6f 6c   table-bound col
7030: 75 6d 6e 2c 20 65 78 74 72 61 63 74 20 74 68 65  umn, extract the
7040: 20 65 78 74 72 61 20 69 6e 66 6f 72 6d 61 74 69   extra informati
7050: 6f 6e 20 66 72 6f 6d 20 69 74 0a 20 20 20 20 20  on from it.     
7060: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
7070: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43  NullOrEmpty(strC
7080: 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29  olumn) == false)
7090: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
70a0: 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6c 6c       string coll
70b0: 53 65 71 3b 0a 20 20 20 20 20 20 20 20 20 20 62  Seq;.          b
70c0: 6f 6f 6c 20 62 4e 6f 74 4e 75 6c 6c 3b 0a 20 20  ool bNotNull;.  
70d0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 62 50 72          bool bPr
70e0: 69 6d 61 72 79 4b 65 79 3b 0a 20 20 20 20 20 20  imaryKey;.      
70f0: 20 20 20 20 62 6f 6f 6c 20 62 41 75 74 6f 49 6e      bool bAutoIn
7100: 63 72 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 20  crement;.       
7110: 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 53 69     string[] arSi
7120: 7a 65 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 2f  ze;..          /
7130: 2f 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e  / Get the column
7140: 20 6d 65 74 61 20 64 61 74 61 0a 20 20 20 20 20   meta data.     
7150: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f       _command.Co
7160: 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2e 43 6f  nnection._sql.Co
7170: 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 0a 20 20  lumnMetaData(.  
7180: 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e            (strin
7190: 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  g)row[SchemaTabl
71a0: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
71b0: 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d  BaseCatalogName]
71c0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73  ,.            (s
71d0: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
71e0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
71f0: 54 61 62 6c 65 4e 61 6d 65 5d 2c 0a 20 20 20 20  TableName],.    
7200: 20 20 20 20 20 20 20 20 73 74 72 43 6f 6c 75 6d          strColum
7210: 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  n,.            o
7220: 75 74 20 64 61 74 61 54 79 70 65 2c 20 6f 75 74  ut dataType, out
7230: 20 63 6f 6c 6c 53 65 71 2c 20 6f 75 74 20 62 4e   collSeq, out bN
7240: 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62 50 72 69  otNull, out bPri
7250: 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 62 41 75  maryKey, out bAu
7260: 74 6f 49 6e 63 72 65 6d 65 6e 74 29 3b 0a 0a 20  toIncrement);.. 
7270: 20 20 20 20 20 20 20 20 20 69 66 20 28 62 4e 6f           if (bNo
7280: 74 4e 75 6c 6c 20 7c 7c 20 62 50 72 69 6d 61 72  tNull || bPrimar
7290: 79 4b 65 79 29 20 72 6f 77 5b 53 63 68 65 6d 61  yKey) row[Schema
72a0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f  TableColumn.Allo
72b0: 77 44 42 4e 75 6c 6c 5d 20 3d 20 66 61 6c 73 65  wDBNull] = false
72c0: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 72 6f 77  ;..          row
72d0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
72e0: 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20 62 50 72 69  mn.IsKey] = bPri
72f0: 6d 61 72 79 4b 65 79 3b 0a 20 20 20 20 20 20 20  maryKey;.       
7300: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
7310: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
7320: 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74  .IsAutoIncrement
7330: 5d 20 3d 20 62 41 75 74 6f 49 6e 63 72 65 6d 65  ] = bAutoIncreme
7340: 6e 74 3b 0a 20 20 20 20 20 20 20 20 20 20 72 6f  nt;.          ro
7350: 77 5b 22 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65  w["CollationType
7360: 22 5d 20 3d 20 63 6f 6c 6c 53 65 71 3b 0a 0a 20  "] = collSeq;.. 
7370: 20 20 20 20 20 20 20 20 20 2f 2f 20 46 6f 72 20           // For 
7380: 74 79 70 65 73 20 6c 69 6b 65 20 76 61 72 63 68  types like varch
7390: 61 72 28 35 30 29 20 61 6e 64 20 73 75 63 68 2c  ar(50) and such,
73a0: 20 65 78 74 72 61 63 74 20 74 68 65 20 73 69 7a   extract the siz
73b0: 65 0a 20 20 20 20 20 20 20 20 20 20 61 72 53 69  e.          arSi
73c0: 7a 65 20 3d 20 64 61 74 61 54 79 70 65 2e 53 70  ze = dataType.Sp
73d0: 6c 69 74 28 27 28 27 29 3b 0a 20 20 20 20 20 20  lit('(');.      
73e0: 20 20 20 20 69 66 20 28 61 72 53 69 7a 65 2e 4c      if (arSize.L
73f0: 65 6e 67 74 68 20 3e 20 31 29 0a 20 20 20 20 20  ength > 1).     
7400: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
7410: 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 61 72     dataType = ar
7420: 53 69 7a 65 5b 30 5d 3b 0a 20 20 20 20 20 20 20  Size[0];.       
7430: 20 20 20 20 20 61 72 53 69 7a 65 20 3d 20 61 72       arSize = ar
7440: 53 69 7a 65 5b 31 5d 2e 53 70 6c 69 74 28 27 29  Size[1].Split(')
7450: 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ');.            
7460: 69 66 20 28 61 72 53 69 7a 65 2e 4c 65 6e 67 74  if (arSize.Lengt
7470: 68 20 3e 20 31 29 0a 20 20 20 20 20 20 20 20 20  h > 1).         
7480: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
7490: 20 20 20 61 72 53 69 7a 65 20 3d 20 61 72 53 69     arSize = arSi
74a0: 7a 65 5b 30 5d 2e 53 70 6c 69 74 28 27 2c 27 2c  ze[0].Split(',',
74b0: 20 27 2e 27 29 3b 0a 20 20 20 20 20 20 20 20 20   '.');.         
74c0: 20 20 20 20 20 69 66 20 28 47 65 74 53 51 4c 69       if (GetSQLi
74d0: 74 65 54 79 70 65 28 6e 29 2e 54 79 70 65 20 3d  teType(n).Type =
74e0: 3d 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 20  = DbType.String 
74f0: 7c 7c 20 47 65 74 53 51 4c 69 74 65 54 79 70 65  || GetSQLiteType
7500: 28 6e 29 2e 54 79 70 65 20 3d 3d 20 44 62 54 79  (n).Type == DbTy
7510: 70 65 2e 42 69 6e 61 72 79 29 0a 20 20 20 20 20  pe.Binary).     
7520: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
7530: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
7540: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
7550: 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20 43  .ColumnSize] = C
7560: 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 61  onvert.ToInt32(a
7570: 72 53 69 7a 65 5b 30 5d 2c 20 43 75 6c 74 75 72  rSize[0], Cultur
7580: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
7590: 75 6c 74 75 72 65 29 3b 0a 20 20 20 20 20 20 20  ulture);.       
75a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
75b0: 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20         else.    
75c0: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
75d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
75e0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
75f0: 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69  n.NumericPrecisi
7600: 6f 6e 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f  on] = Convert.To
7610: 49 6e 74 33 32 28 61 72 53 69 7a 65 5b 30 5d 2c  Int32(arSize[0],
7620: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76   CultureInfo.Inv
7630: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0a  ariantCulture);.
7640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7650: 69 66 20 28 61 72 53 69 7a 65 2e 4c 65 6e 67 74  if (arSize.Lengt
7660: 68 20 3e 20 31 29 0a 20 20 20 20 20 20 20 20 20  h > 1).         
7670: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
7680: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e  emaTableColumn.N
7690: 75 6d 65 72 69 63 53 63 61 6c 65 5d 20 3d 20 43  umericScale] = C
76a0: 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 61  onvert.ToInt32(a
76b0: 72 53 69 7a 65 5b 31 5d 2c 20 43 75 6c 74 75 72  rSize[1], Cultur
76c0: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
76d0: 75 6c 74 75 72 65 29 3b 0a 20 20 20 20 20 20 20  ulture);.       
76e0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
76f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
7700: 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 69 66   }..          if
7710: 20 28 77 61 6e 74 44 65 66 61 75 6c 74 56 61 6c   (wantDefaultVal
7720: 75 65 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a  ue).          {.
7730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44              // D
7740: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 64 65 66  etermine the def
7750: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74  ault value for t
7760: 68 65 20 63 6f 6c 75 6d 6e 2c 20 77 68 69 63 68  he column, which
7770: 20 73 75 63 6b 73 20 62 65 63 61 75 73 65 20 77   sucks because w
7780: 65 20 68 61 76 65 20 74 6f 20 71 75 65 72 79 20  e have to query 
7790: 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65  the schema for e
77a0: 61 63 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  ach column.     
77b0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
77c0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 54  LiteCommand cmdT
77d0: 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  able = new SQLit
77e0: 65 43 6f 6d 6d 61 6e 64 28 53 74 72 69 6e 67 2e  eCommand(String.
77f0: 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e  Format(CultureIn
7800: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
7810: 75 72 65 2c 20 22 50 52 41 47 4d 41 20 5b 7b 30  ure, "PRAGMA [{0
7820: 7d 5d 2e 54 41 42 4c 45 5f 49 4e 46 4f 28 5b 7b  }].TABLE_INFO([{
7830: 31 7d 5d 29 22 2c 0a 20 20 20 20 20 20 20 20 20  1}])",.         
7840: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
7850: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
7860: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
7870: 6d 65 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20  me],.           
7880: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
7890: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62  leColumn.BaseTab
78a0: 6c 65 4e 61 6d 65 5d 0a 20 20 20 20 20 20 20 20  leName].        
78b0: 20 20 20 20 20 20 29 2c 20 5f 63 6f 6d 6d 61 6e        ), _comman
78c0: 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 29 29 0a 20  d.Connection)). 
78d0: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
78e0: 20 28 44 62 44 61 74 61 52 65 61 64 65 72 20 72   (DbDataReader r
78f0: 64 54 61 62 6c 65 20 3d 20 63 6d 64 54 61 62 6c  dTable = cmdTabl
7900: 65 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28  e.ExecuteReader(
7910: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )).            {
7920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  .              /
7930: 2f 20 46 69 6e 64 20 74 68 65 20 6d 61 74 63 68  / Find the match
7940: 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  ing column.     
7950: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
7960: 72 64 54 61 62 6c 65 2e 52 65 61 64 28 29 29 0a  rdTable.Read()).
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a                {.
7980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7990: 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61  if (String.Compa
79a0: 72 65 28 28 73 74 72 69 6e 67 29 72 6f 77 5b 53  re((string)row[S
79b0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
79c0: 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d  .BaseColumnName]
79d0: 2c 20 72 64 54 61 62 6c 65 2e 47 65 74 53 74 72  , rdTable.GetStr
79e0: 69 6e 67 28 31 29 2c 20 53 74 72 69 6e 67 43 6f  ing(1), StringCo
79f0: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
7a00: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
7a10: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
7a20: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
7a30: 20 20 20 20 20 20 69 66 20 28 72 64 54 61 62 6c        if (rdTabl
7a40: 65 2e 49 73 44 42 4e 75 6c 6c 28 34 29 20 3d 3d  e.IsDBNull(4) ==
7a50: 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20   false).        
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
7a70: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
7a80: 6e 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c  nalColumn.Defaul
7a90: 74 56 61 6c 75 65 5d 20 3d 20 72 64 54 61 62 6c  tValue] = rdTabl
7aa0: 65 5b 34 5d 3b 0a 0a 20 20 20 20 20 20 20 20 20  e[4];..         
7ab0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ad0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
7ae0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
7af0: 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20            }..   
7b00: 20 20 20 20 20 20 20 2f 2f 20 44 65 74 65 72 6d         // Determ
7b10: 69 6e 65 20 49 73 55 6e 69 71 75 65 20 70 72 6f  ine IsUnique pro
7b20: 70 65 72 6c 79 2c 20 77 68 69 63 68 20 69 73 20  perly, which is 
7b30: 61 20 70 61 69 6e 20 69 6e 20 74 68 65 20 62 75  a pain in the bu
7b40: 74 74 21 0a 20 20 20 20 20 20 20 20 20 20 69 66  tt!.          if
7b50: 20 28 77 61 6e 74 55 6e 69 71 75 65 49 6e 66 6f   (wantUniqueInfo
7b60: 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  ).          {.  
7b70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 73            if ((s
7b80: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
7b90: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
7ba0: 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e  umn.BaseCatalogN
7bb0: 61 6d 65 5d 20 21 3d 20 73 74 72 43 61 74 61 6c  ame] != strCatal
7bc0: 6f 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  og.             
7bd0: 20 7c 7c 20 28 73 74 72 69 6e 67 29 72 6f 77 5b   || (string)row[
7be0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
7bf0: 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d  n.BaseTableName]
7c00: 20 21 3d 20 73 74 72 54 61 62 6c 65 29 0a 20 20   != strTable).  
7c10: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
7c20: 20 20 20 20 20 20 20 20 20 20 73 74 72 43 61 74            strCat
7c30: 61 6c 6f 67 20 3d 20 28 73 74 72 69 6e 67 29 72  alog = (string)r
7c40: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
7c50: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73  tionalColumn.Bas
7c60: 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 3b 0a 20  eCatalogName];. 
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
7c80: 54 61 62 6c 65 20 3d 20 28 73 74 72 69 6e 67 29  Table = (string)
7c90: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
7ca0: 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e  olumn.BaseTableN
7cb0: 61 6d 65 5d 3b 0a 0a 20 20 20 20 20 20 20 20 20  ame];..         
7cc0: 20 20 20 20 20 74 62 6c 49 6e 64 65 78 65 73 20       tblIndexes 
7cd0: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
7ce0: 63 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28  ction.GetSchema(
7cf0: 22 49 6e 64 65 78 65 73 22 2c 20 6e 65 77 20 73  "Indexes", new s
7d00: 74 72 69 6e 67 5b 5d 20 7b 0a 20 20 20 20 20 20  tring[] {.      
7d10: 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e            (strin
7d20: 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  g)row[SchemaTabl
7d30: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
7d40: 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d  BaseCatalogName]
7d50: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
7d60: 20 20 6e 75 6c 6c 2c 0a 20 20 20 20 20 20 20 20    null,.        
7d70: 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29          (string)
7d80: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
7d90: 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e  olumn.BaseTableN
7da0: 61 6d 65 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  ame],.          
7db0: 20 20 20 20 20 20 6e 75 6c 6c 20 7d 29 3b 0a 20        null });. 
7dc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20             }..  
7dd0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
7de0: 68 20 28 44 61 74 61 52 6f 77 20 72 6f 77 49 6e  h (DataRow rowIn
7df0: 64 65 78 65 73 20 69 6e 20 74 62 6c 49 6e 64 65  dexes in tblInde
7e00: 78 65 73 2e 52 6f 77 73 29 0a 20 20 20 20 20 20  xes.Rows).      
7e10: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
7e20: 20 20 20 20 20 20 74 62 6c 49 6e 64 65 78 43 6f        tblIndexCo
7e30: 6c 75 6d 6e 73 20 3d 20 5f 63 6f 6d 6d 61 6e 64  lumns = _command
7e40: 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53  .Connection.GetS
7e50: 63 68 65 6d 61 28 22 49 6e 64 65 78 43 6f 6c 75  chema("IndexColu
7e60: 6d 6e 73 22 2c 20 6e 65 77 20 73 74 72 69 6e 67  mns", new string
7e70: 5b 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  [] {.           
7e80: 20 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77       (string)row
7e90: 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  [SchemaTableOpti
7ea0: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  onalColumn.BaseC
7eb0: 61 74 61 6c 6f 67 4e 61 6d 65 5d 2c 0a 20 20 20  atalogName],.   
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
7ed0: 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  l,.             
7ee0: 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53     (string)row[S
7ef0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
7f00: 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 2c  .BaseTableName],
7f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7f20: 20 28 73 74 72 69 6e 67 29 72 6f 77 49 6e 64 65   (string)rowInde
7f30: 78 65 73 5b 22 49 4e 44 45 58 5f 4e 41 4d 45 22  xes["INDEX_NAME"
7f40: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ],.             
7f50: 20 20 20 6e 75 6c 6c 0a 20 20 20 20 20 20 20 20     null.        
7f60: 20 20 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20          });.    
7f70: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
7f80: 68 20 28 44 61 74 61 52 6f 77 20 72 6f 77 43 6f  h (DataRow rowCo
7f90: 6c 75 6d 6e 49 6e 64 65 78 20 69 6e 20 74 62 6c  lumnIndex in tbl
7fa0: 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77  IndexColumns.Row
7fb0: 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s).             
7fc0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
7fd0: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
7fe0: 6d 70 61 72 65 28 28 73 74 72 69 6e 67 29 72 6f  mpare((string)ro
7ff0: 77 43 6f 6c 75 6d 6e 49 6e 64 65 78 5b 22 43 4f  wColumnIndex["CO
8000: 4c 55 4d 4e 5f 4e 41 4d 45 22 5d 2c 20 73 74 72  LUMN_NAME"], str
8010: 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43 6f  Column, StringCo
8020: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
8030: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
8040: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
8050: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8060: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
8070: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
8080: 42 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 75 72  BUGFIX: Make sur
8090: 65 20 74 68 61 74 20 77 65 20 6f 6e 6c 79 20 66  e that we only f
80a0: 6c 61 67 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20  lag this column 
80b0: 61 73 20 22 75 6e 69 71 75 65 22 0d 0a 20 20 20  as "unique"..   
80c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
80d0: 2f 20 20 20 20 20 20 20 20 20 69 66 20 77 65 20  /         if we 
80e0: 61 72 65 20 6e 6f 74 20 70 72 6f 63 65 73 73 69  are not processi
80f0: 6e 67 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 20  ng of some kind 
8100: 6f 66 20 6d 75 6c 74 69 2d 74 61 62 6c 65 0d 0a  of multi-table..
8110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8120: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 63 6f 6e    //         con
8130: 73 74 72 75 63 74 20 28 69 2e 65 2e 20 61 20 6a  struct (i.e. a j
8140: 6f 69 6e 29 20 62 65 63 61 75 73 65 20 69 6e 20  oin) because in 
8150: 74 68 61 74 20 63 61 73 65 20 77 65 20 6d 75 73  that case we mus
8160: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
8170: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
8180: 61 6c 6c 6f 77 20 64 75 70 6c 69 63 61 74 65 20  allow duplicate 
8190: 76 61 6c 75 65 73 20 28 72 65 66 65 72 20 74 6f  values (refer to
81a0: 20 74 69 63 6b 65 74 20 5b 37 65 33 66 61 39 33   ticket [7e3fa93
81b0: 37 34 34 5d 29 2e 0d 0a 20 20 20 20 20 20 20 20  744])...        
81c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81e0: 69 66 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75  if (parentToColu
81f0: 6d 6e 73 2e 43 6f 75 6e 74 20 3d 3d 20 31 20 26  mns.Count == 1 &
8200: 26 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e  & tblIndexColumn
8210: 73 2e 52 6f 77 73 2e 43 6f 75 6e 74 20 3d 3d 20  s.Rows.Count == 
8220: 31 20 26 26 20 28 62 6f 6f 6c 29 72 6f 77 5b 53  1 && (bool)row[S
8230: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
8240: 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 3d  .AllowDBNull] ==
8250: 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 20   false)..       
8260: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
8270: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
8280: 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 20 3d 20 72  mn.IsUnique] = r
8290: 6f 77 49 6e 64 65 78 65 73 5b 22 55 4e 49 51 55  owIndexes["UNIQU
82a0: 45 22 5d 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  E"];..          
82b0: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 69 74          // If it
82c0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  s an integer pri
82d0: 6d 61 72 79 20 6b 65 79 20 61 6e 64 20 74 68 65  mary key and the
82e0: 20 6f 6e 6c 79 20 70 72 69 6d 61 72 79 20 6b 65   only primary ke
82f0: 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20  y in the table, 
8300: 74 68 65 6e 20 69 74 73 20 61 20 72 6f 77 69 64  then its a rowid
8310: 20 61 6c 69 61 73 20 61 6e 64 20 69 73 20 61 75   alias and is au
8320: 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 20 20 20 20  toincrement.    
8330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8340: 20 4e 4f 54 45 3a 20 20 43 75 72 72 65 6e 74 6c   NOTE:  Currentl
8350: 79 20 63 6f 6d 6d 65 6e 74 65 64 20 6f 75 74 20  y commented out 
8360: 62 65 63 61 75 73 65 20 74 68 69 73 20 69 73 20  because this is 
8370: 6e 6f 74 20 61 6c 77 61 79 73 20 74 68 65 20 64  not always the d
8380: 65 73 69 72 65 64 20 62 65 68 61 76 69 6f 72 2e  esired behavior.
8390: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61    For example, a
83a0: 20 31 3a 31 20 72 65 6c 61 74 69 6f 6e 73 68 69   1:1 relationshi
83b0: 70 20 77 69 74 68 0a 20 20 20 20 20 20 20 20 20  p with.         
83c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
83d0: 20 20 20 61 6e 6f 74 68 65 72 20 74 61 62 6c 65     another table
83e0: 2c 20 77 68 65 72 65 20 74 68 65 20 6f 74 68 65  , where the othe
83f0: 72 20 74 61 62 6c 65 20 69 73 20 61 75 74 6f 69  r table is autoi
8400: 6e 63 72 65 6d 65 6e 74 2c 20 62 75 74 20 74 68  ncrement, but th
8410: 69 73 20 6f 6e 65 20 69 73 20 6e 6f 74 2c 20 61  is one is not, a
8420: 6e 64 20 75 73 65 73 20 74 68 65 20 72 6f 77 69  nd uses the rowi
8430: 64 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72  d from the other
8440: 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8450: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 49 74      //        It
8460: 20 69 73 20 73 61 66 65 72 20 74 6f 20 6f 6e 6c   is safer to onl
8470: 79 20 73 65 74 20 41 75 74 6f 69 6e 63 72 65 6d  y set Autoincrem
8480: 65 6e 74 20 6f 6e 20 74 61 62 6c 65 73 20 77 68  ent on tables wh
8490: 65 72 65 20 77 65 27 72 65 20 53 55 52 45 20 74  ere we're SURE t
84a0: 68 65 20 75 73 65 72 20 73 70 65 63 69 66 69 65  he user specifie
84b0: 64 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2c  d AUTOINCREMENT,
84c0: 20 65 76 65 6e 20 69 66 20 69 74 73 20 61 20 72   even if its a r
84d0: 6f 77 69 64 20 63 6f 6c 75 6d 6e 2e 0a 0a 20 20  owid column...  
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84f0: 69 66 20 28 74 62 6c 49 6e 64 65 78 43 6f 6c 75  if (tblIndexColu
8500: 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74 20 3d  mns.Rows.Count =
8510: 3d 20 31 20 26 26 20 28 62 6f 6f 6c 29 72 6f 77  = 1 && (bool)row
8520: 49 6e 64 65 78 65 73 5b 22 50 52 49 4d 41 52 59  Indexes["PRIMARY
8530: 5f 4b 45 59 22 5d 20 3d 3d 20 74 72 75 65 20 26  _KEY"] == true &
8540: 26 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  & String.IsNullO
8550: 72 45 6d 70 74 79 28 64 61 74 61 54 79 70 65 29  rEmpty(dataType)
8560: 20 3d 3d 20 66 61 6c 73 65 20 26 26 0a 20 20 20   == false &&.   
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8580: 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28   String.Compare(
8590: 64 61 74 61 54 79 70 65 2c 20 22 69 6e 74 65 67  dataType, "integ
85a0: 65 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  er", StringCompa
85b0: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
85c0: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0a 20  oreCase) == 0). 
85d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85e0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
85f0: 20 20 20 20 20 20 20 2f 2f 20 20 72 6f 77 5b 53         //  row[S
8600: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
8610: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49  alColumn.IsAutoI
8620: 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 74 72 75 65  ncrement] = true
8630: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
8640: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20      }..         
8650: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
8660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8670: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
8680: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
8690: 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20            }..   
86a0: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
86b0: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
86c0: 64 61 74 61 54 79 70 65 29 29 0a 20 20 20 20 20  dataType)).     
86d0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
86e0: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20     TypeAffinity 
86f0: 61 66 66 69 6e 3b 0a 20 20 20 20 20 20 20 20 20  affin;.         
8700: 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 5f 61     dataType = _a
8710: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
8720: 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 5f  sql.ColumnType(_
8730: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
8740: 20 6e 2c 20 6f 75 74 20 61 66 66 69 6e 29 3b 0a   n, out affin);.
8750: 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20            }..   
8760: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
8770: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
8780: 64 61 74 61 54 79 70 65 29 20 3d 3d 20 66 61 6c  dataType) == fal
8790: 73 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  se).            
87a0: 72 6f 77 5b 22 44 61 74 61 54 79 70 65 4e 61 6d  row["DataTypeNam
87b0: 65 22 5d 20 3d 20 64 61 74 61 54 79 70 65 3b 0a  e"] = dataType;.
87c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
87d0: 20 20 74 62 6c 2e 52 6f 77 73 2e 41 64 64 28 72    tbl.Rows.Add(r
87e0: 6f 77 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ow);.      }..  
87f0: 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f      if (_keyInfo
8800: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
8810: 20 20 5f 6b 65 79 49 6e 66 6f 2e 41 70 70 65 6e    _keyInfo.Appen
8820: 64 53 63 68 65 6d 61 54 61 62 6c 65 28 74 62 6c  dSchemaTable(tbl
8830: 29 3b 0a 0a 20 20 20 20 20 20 74 62 6c 2e 41 63  );..      tbl.Ac
8840: 63 65 70 74 43 68 61 6e 67 65 73 28 29 3b 0a 20  ceptChanges();. 
8850: 20 20 20 20 20 74 62 6c 2e 45 6e 64 4c 6f 61 64       tbl.EndLoad
8860: 44 61 74 61 28 29 3b 0a 0a 20 20 20 20 20 20 72  Data();..      r
8870: 65 74 75 72 6e 20 74 62 6c 3b 0a 20 20 20 20 7d  eturn tbl;.    }
8880: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
8890: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  ry>.    /// Retr
88a0: 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  ieves the column
88b0: 20 61 73 20 61 20 73 74 72 69 6e 67 0a 20 20 20   as a string.   
88c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
88d0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
88e0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
88f0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  x of the column 
8900: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
8910: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
8920: 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74  urns>string</ret
8930: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
8940: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
8950: 20 47 65 74 53 74 72 69 6e 67 28 69 6e 74 20 69   GetString(int i
8960: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66  ).    {.      if
8970: 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69   (i >= VisibleFi
8980: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
8990: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20  Info != null).  
89a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
89b0: 79 49 6e 66 6f 2e 47 65 74 53 74 72 69 6e 67 28  yInfo.GetString(
89c0: 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64  i - VisibleField
89d0: 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56  Count);..      V
89e0: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
89f0: 79 70 65 2e 53 74 72 69 6e 67 29 3b 0a 20 20 20  ype.String);.   
8a00: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
8a10: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
8a20: 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65 53  GetText(_activeS
8a30: 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20  tatement, i);.  
8a40: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
8a50: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
8a60: 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c  etrieves the col
8a70: 75 6d 6e 20 61 73 20 61 6e 20 6f 62 6a 65 63 74  umn as an object
8a80: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
8a90: 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  o the underlying
8aa0: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
8ab0: 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2f 2f 2f 20   column.    /// 
8ac0: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
8ad0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
8ae0: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
8af0: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
8b00: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20  trieve</param>. 
8b10: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
8b20: 6f 62 6a 65 63 74 3c 2f 72 65 74 75 72 6e 73 3e  object</returns>
8b30: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
8b40: 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56  ride object GetV
8b50: 61 6c 75 65 28 69 6e 74 20 69 29 0a 20 20 20 20  alue(int i).    
8b60: 7b 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d  {.      if (i >=
8b70: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
8b80: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
8b90: 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20  = null).        
8ba0: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
8bb0: 47 65 74 56 61 6c 75 65 28 69 20 2d 20 56 69 73  GetValue(i - Vis
8bc0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
8bd0: 0a 0a 20 20 20 20 20 20 53 51 4c 69 74 65 54 79  ..      SQLiteTy
8be0: 70 65 20 74 79 70 20 3d 20 47 65 74 53 51 4c 69  pe typ = GetSQLi
8bf0: 74 65 54 79 70 65 28 69 29 3b 0a 0a 20 20 20 20  teType(i);..    
8c00: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
8c10: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
8c20: 65 74 56 61 6c 75 65 28 5f 61 63 74 69 76 65 53  etValue(_activeS
8c30: 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 74 79 70  tatement, i, typ
8c40: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f  );.    }..    //
8c50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
8c60: 2f 2f 2f 20 52 65 74 72 65 69 76 65 73 20 74 68  /// Retreives th
8c70: 65 20 76 61 6c 75 65 73 20 6f 66 20 6d 75 6c 74  e values of mult
8c80: 69 70 6c 65 20 63 6f 6c 75 6d 6e 73 2c 20 75 70  iple columns, up
8c90: 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66 20   to the size of 
8ca0: 74 68 65 20 73 75 70 70 6c 69 65 64 20 61 72 72  the supplied arr
8cb0: 61 79 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ay.    /// </sum
8cc0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
8cd0: 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65  aram name="value
8ce0: 73 22 3e 54 68 65 20 61 72 72 61 79 20 74 6f 20  s">The array to 
8cf0: 66 69 6c 6c 20 77 69 74 68 20 76 61 6c 75 65 73  fill with values
8d00: 20 66 72 6f 6d 20 74 68 65 20 63 6f 6c 75 6d 6e   from the column
8d10: 73 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  s in the current
8d20: 20 72 65 73 75 6c 74 73 65 74 3c 2f 70 61 72 61   resultset</para
8d30: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
8d40: 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f  rns>The number o
8d50: 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74 72 69 65  f columns retrie
8d60: 76 65 64 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  ved</returns>.  
8d70: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
8d80: 65 20 69 6e 74 20 47 65 74 56 61 6c 75 65 73 28  e int GetValues(
8d90: 6f 62 6a 65 63 74 5b 5d 20 76 61 6c 75 65 73 29  object[] values)
8da0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 6e 74  .    {.      int
8db0: 20 6e 4d 61 78 20 3d 20 46 69 65 6c 64 43 6f 75   nMax = FieldCou
8dc0: 6e 74 3b 0a 20 20 20 20 20 20 69 66 20 28 76 61  nt;.      if (va
8dd0: 6c 75 65 73 2e 4c 65 6e 67 74 68 20 3c 20 6e 4d  lues.Length < nM
8de0: 61 78 29 20 6e 4d 61 78 20 3d 20 76 61 6c 75 65  ax) nMax = value
8df0: 73 2e 4c 65 6e 67 74 68 3b 0a 0a 20 20 20 20 20  s.Length;..     
8e00: 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b   for (int n = 0;
8e10: 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0a   n < nMax; n++).
8e20: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
8e30: 76 61 6c 75 65 73 5b 6e 5d 20 3d 20 47 65 74 56  values[n] = GetV
8e40: 61 6c 75 65 28 6e 29 3b 0a 20 20 20 20 20 20 7d  alue(n);.      }
8e50: 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ..      return n
8e60: 4d 61 78 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  Max;.    }..    
8e70: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
8e80: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72    /// Returns Tr
8e90: 75 65 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  ue if the result
8ea0: 73 65 74 20 68 61 73 20 72 6f 77 73 20 74 68 61  set has rows tha
8eb0: 74 20 63 61 6e 20 62 65 20 66 65 74 63 68 65 64  t can be fetched
8ec0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
8ed0: 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ry>.    public o
8ee0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 48 61 73  verride bool Has
8ef0: 52 6f 77 73 0a 20 20 20 20 7b 0a 20 20 20 20 20  Rows.    {.     
8f00: 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20   get.      {.   
8f10: 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64       CheckClosed
8f20: 28 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  ();.        retu
8f30: 72 6e 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74  rn (_readingStat
8f40: 65 20 21 3d 20 31 29 3b 0a 20 20 20 20 20 20 7d  e != 1);.      }
8f50: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
8f60: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
8f70: 2f 20 52 65 74 75 72 6e 73 20 54 72 75 65 20 69  / Returns True i
8f80: 66 20 74 68 65 20 64 61 74 61 20 72 65 61 64 65  f the data reade
8f90: 72 20 69 73 20 63 6c 6f 73 65 64 0a 20 20 20 20  r is closed.    
8fa0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
8fb0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
8fc0: 64 65 20 62 6f 6f 6c 20 49 73 43 6c 6f 73 65 64  de bool IsClosed
8fd0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74  .    {.      get
8fe0: 20 7b 20 72 65 74 75 72 6e 20 28 5f 63 6f 6d 6d   { return (_comm
8ff0: 61 6e 64 20 3d 3d 20 6e 75 6c 6c 29 3b 20 7d 0a  and == null); }.
9000: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
9010: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
9020: 20 52 65 74 75 72 6e 73 20 54 72 75 65 20 69 66   Returns True if
9030: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
9040: 6f 6c 75 6d 6e 20 69 73 20 6e 75 6c 6c 0a 20 20  olumn is null.  
9050: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9060: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
9070: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
9080: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
9090: 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
90a0: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
90b0: 74 75 72 6e 73 3e 54 72 75 65 20 6f 72 20 46 61  turns>True or Fa
90c0: 6c 73 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  lse</returns>.  
90d0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
90e0: 65 20 62 6f 6f 6c 20 49 73 44 42 4e 75 6c 6c 28  e bool IsDBNull(
90f0: 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20  int i).    {.   
9100: 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69     if (i >= Visi
9110: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
9120: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
9130: 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  l).        retur
9140: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 49 73 44 42 4e  n _keyInfo.IsDBN
9150: 75 6c 6c 28 69 20 2d 20 56 69 73 69 62 6c 65 46  ull(i - VisibleF
9160: 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20  ieldCount);..   
9170: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
9180: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
9190: 49 73 4e 75 6c 6c 28 5f 61 63 74 69 76 65 53 74  IsNull(_activeSt
91a0: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20  atement, i);.   
91b0: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
91c0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 4d 6f  mary>.    /// Mo
91d0: 76 65 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ves to the next 
91e0: 72 65 73 75 6c 74 73 65 74 20 69 6e 20 6d 75 6c  resultset in mul
91f0: 74 69 70 6c 65 20 72 6f 77 2d 72 65 74 75 72 6e  tiple row-return
9200: 69 6e 67 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e  ing SQL command.
9210: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
9220: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  ry>.    /// <ret
9230: 75 72 6e 73 3e 54 72 75 65 20 69 66 20 74 68 65  urns>True if the
9240: 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 75 63   command was suc
9250: 63 65 73 73 66 75 6c 20 61 6e 64 20 61 20 6e 65  cessful and a ne
9260: 77 20 72 65 73 75 6c 74 73 65 74 20 69 73 20 61  w resultset is a
9270: 76 61 69 6c 61 62 6c 65 2c 20 46 61 6c 73 65 20  vailable, False 
9280: 6f 74 68 65 72 77 69 73 65 2e 3c 2f 72 65 74 75  otherwise.</retu
9290: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
92a0: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 4e 65  override bool Ne
92b0: 78 74 52 65 73 75 6c 74 28 29 0a 20 20 20 20 7b  xtResult().    {
92c0: 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73  .      CheckClos
92d0: 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 53 51 4c  ed();..      SQL
92e0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
92f0: 74 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  t = null;.      
9300: 69 6e 74 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0a  int fieldCount;.
9310: 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 74 72  .      while (tr
9320: 75 65 29 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ue).      {..   
9330: 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d 3d       if (stmt ==
9340: 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76 65   null && _active
9350: 53 74 61 74 65 6d 65 6e 74 20 21 3d 20 6e 75 6c  Statement != nul
9360: 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74 61 74  l && _activeStat
9370: 65 6d 65 6e 74 2e 5f 73 71 6c 20 21 3d 20 6e 75  ement._sql != nu
9380: 6c 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74 61  ll && _activeSta
9390: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4f 70  tement._sql.IsOp
93a0: 65 6e 28 29 29 0a 20 20 20 20 20 20 20 20 7b 0a  en()).        {.
93b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 73            // Res
93c0: 65 74 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c  et the previousl
93d0: 79 2d 65 78 65 63 75 74 65 64 20 73 74 61 74 65  y-executed state
93e0: 6d 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20 5f  ment.          _
93f0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
9400: 5f 73 71 6c 2e 52 65 73 65 74 28 5f 61 63 74 69  _sql.Reset(_acti
9410: 76 65 53 74 61 74 65 6d 65 6e 74 29 3b 0a 0a 20  veStatement);.. 
9420: 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77           // If w
9430: 65 27 72 65 20 6f 6e 6c 79 20 73 75 70 70 6f 73  e're only suppos
9440: 65 64 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73  ed to return a s
9450: 69 6e 67 6c 65 20 72 6f 77 73 65 74 2c 20 73 74  ingle rowset, st
9460: 65 70 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 72  ep through all r
9470: 65 6d 61 69 6e 69 6e 67 20 73 74 61 74 65 6d 65  emaining stateme
9480: 6e 74 73 20 6f 6e 63 65 20 75 6e 74 69 6c 0a 20  nts once until. 
9490: 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68 65 79           // they
94a0: 20 61 72 65 20 61 6c 6c 20 64 6f 6e 65 20 61 6e   are all done an
94b0: 64 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 74  d return false t
94c0: 6f 20 69 6e 64 69 63 61 74 65 20 6e 6f 20 6d 6f  o indicate no mo
94d0: 72 65 20 72 65 73 75 6c 74 73 65 74 73 20 65 78  re resultsets ex
94e0: 69 73 74 2e 0a 20 20 20 20 20 20 20 20 20 20 69  ist..          i
94f0: 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61  f ((_commandBeha
9500: 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65  vior & CommandBe
9510: 68 61 76 69 6f 72 2e 53 69 6e 67 6c 65 52 65 73  havior.SingleRes
9520: 75 6c 74 29 20 21 3d 20 30 29 0a 20 20 20 20 20  ult) != 0).     
9530: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
9540: 20 20 20 66 6f 72 20 28 3b 20 3b 20 29 0a 20 20     for (; ; ).  
9550: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
9560: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d            stmt =
9570: 20 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61   _command.GetSta
9580: 74 65 6d 65 6e 74 28 5f 61 63 74 69 76 65 53 74  tement(_activeSt
9590: 61 74 65 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31  atementIndex + 1
95a0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
95b0: 20 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c   if (stmt == nul
95c0: 6c 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  l) break;.      
95d0: 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
95e0: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b  tatementIndex++;
95f0: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9600: 73 74 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28 73  stmt._sql.Step(s
9610: 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  tmt);.          
9620: 20 20 20 20 69 66 20 28 73 74 6d 74 2e 5f 73 71      if (stmt._sq
9630: 6c 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74  l.ColumnCount(st
9640: 6d 74 29 20 3d 3d 20 30 29 0a 20 20 20 20 20 20  mt) == 0).      
9650: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
9660: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 72            if (_r
9670: 6f 77 73 41 66 66 65 63 74 65 64 20 3d 3d 20 2d  owsAffected == -
9680: 31 29 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64  1) _rowsAffected
9690: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
96a0: 20 20 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63        _rowsAffec
96b0: 74 65 64 20 2b 3d 20 73 74 6d 74 2e 5f 73 71 6c  ted += stmt._sql
96c0: 2e 43 68 61 6e 67 65 73 3b 0a 20 20 20 20 20 20  .Changes;.      
96d0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
96e0: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71          stmt._sq
96f0: 6c 2e 52 65 73 65 74 28 73 74 6d 74 29 3b 20 2f  l.Reset(stmt); /
9700: 2f 20 47 6f 74 74 61 20 72 65 73 65 74 20 61 66  / Gotta reset af
9710: 74 65 72 20 65 76 65 72 79 20 73 74 65 70 20 74  ter every step t
9720: 6f 20 72 65 6c 65 61 73 65 20 61 6e 79 20 6c 6f  o release any lo
9730: 63 6b 73 20 61 6e 64 20 73 75 63 68 21 0a 20 20  cks and such!.  
9740: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
9750: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
9760: 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20  alse;.          
9770: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  }.        }..   
9780: 20 20 20 20 20 2f 2f 20 47 65 74 20 74 68 65 20       // Get the 
9790: 6e 65 78 74 20 73 74 61 74 65 6d 65 6e 74 20 74  next statement t
97a0: 6f 20 65 78 65 63 75 74 65 0a 20 20 20 20 20 20  o execute.      
97b0: 20 20 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e    stmt = _comman
97c0: 64 2e 47 65 74 53 74 61 74 65 6d 65 6e 74 28 5f  d.GetStatement(_
97d0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49  activeStatementI
97e0: 6e 64 65 78 20 2b 20 31 29 3b 0a 0a 20 20 20 20  ndex + 1);..    
97f0: 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20      // If we've 
9800: 72 65 61 63 68 65 64 20 74 68 65 20 65 6e 64 20  reached the end 
9810: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
9820: 73 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2c  s, return false,
9830: 20 6e 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74 73   no more results
9840: 65 74 73 0a 20 20 20 20 20 20 20 20 69 66 20 28  ets.        if (
9850: 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c 29 0a 20 20  stmt == null).  
9860: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
9870: 61 6c 73 65 3b 0a 0a 20 20 20 20 20 20 20 20 2f  alse;..        /
9880: 2f 20 49 66 20 77 65 20 77 65 72 65 20 6f 6e 20  / If we were on 
9890: 61 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74  a current result
98a0: 73 65 74 2c 20 73 65 74 20 74 68 65 20 73 74 61  set, set the sta
98b0: 74 65 20 74 6f 20 22 64 6f 6e 65 20 72 65 61 64  te to "done read
98c0: 69 6e 67 22 20 66 6f 72 20 69 74 0a 20 20 20 20  ing" for it.    
98d0: 20 20 20 20 69 66 20 28 5f 72 65 61 64 69 6e 67      if (_reading
98e0: 53 74 61 74 65 20 3c 20 31 29 0a 20 20 20 20 20  State < 1).     
98f0: 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61       _readingSta
9900: 74 65 20 3d 20 31 3b 0a 0a 20 20 20 20 20 20 20  te = 1;..       
9910: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
9920: 74 49 6e 64 65 78 2b 2b 3b 0a 0a 20 20 20 20 20  tIndex++;..     
9930: 20 20 20 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20     fieldCount = 
9940: 73 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  stmt._sql.Column
9950: 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0a 0a 20 20  Count(stmt);..  
9960: 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20        // If the 
9970: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74  statement is not
9980: 20 61 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d   a select statem
9990: 65 6e 74 20 6f 72 20 77 65 27 72 65 20 6e 6f 74  ent or we're not
99a0: 20 72 65 74 72 69 65 76 69 6e 67 20 73 63 68 65   retrieving sche
99b0: 6d 61 20 6f 6e 6c 79 2c 20 74 68 65 6e 20 70 65  ma only, then pe
99c0: 72 66 6f 72 6d 20 74 68 65 20 69 6e 69 74 69 61  rform the initia
99d0: 6c 20 73 74 65 70 0a 20 20 20 20 20 20 20 20 69  l step.        i
99e0: 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61  f ((_commandBeha
99f0: 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65  vior & CommandBe
9a00: 68 61 76 69 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c  havior.SchemaOnl
9a10: 79 29 20 3d 3d 20 30 20 7c 7c 20 66 69 65 6c 64  y) == 0 || field
9a20: 43 6f 75 6e 74 20 3d 3d 20 30 29 0a 20 20 20 20  Count == 0).    
9a30: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
9a40: 69 66 20 28 73 74 6d 74 2e 5f 73 71 6c 2e 53 74  if (stmt._sql.St
9a50: 65 70 28 73 74 6d 74 29 29 0a 20 20 20 20 20 20  ep(stmt)).      
9a60: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
9a70: 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20    _readingState 
9a80: 3d 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 20 20  = -1;.          
9a90: 7d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  }.          else
9aa0: 20 69 66 20 28 66 69 65 6c 64 43 6f 75 6e 74 20   if (fieldCount 
9ab0: 3d 3d 20 30 29 20 2f 2f 20 4e 6f 20 72 6f 77 73  == 0) // No rows
9ac0: 20 72 65 74 75 72 6e 65 64 2c 20 69 66 20 66 69   returned, if fi
9ad0: 65 6c 64 43 6f 75 6e 74 20 69 73 20 7a 65 72 6f  eldCount is zero
9ae0: 2c 20 73 6b 69 70 20 74 6f 20 74 68 65 20 6e 65  , skip to the ne
9af0: 78 74 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 20  xt statement.   
9b00: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
9b10: 20 20 20 20 20 69 66 20 28 5f 72 6f 77 73 41 66       if (_rowsAf
9b20: 66 65 63 74 65 64 20 3d 3d 20 2d 31 29 20 5f 72  fected == -1) _r
9b30: 6f 77 73 41 66 66 65 63 74 65 64 20 3d 20 30 3b  owsAffected = 0;
9b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 6f  .            _ro
9b50: 77 73 41 66 66 65 63 74 65 64 20 2b 3d 20 73 74  wsAffected += st
9b60: 6d 74 2e 5f 73 71 6c 2e 43 68 61 6e 67 65 73 3b  mt._sql.Changes;
9b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d  .            stm
9b80: 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28 73 74 6d  t._sql.Reset(stm
9b90: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t);.            
9ba0: 63 6f 6e 74 69 6e 75 65 3b 20 2f 2f 20 53 6b 69  continue; // Ski
9bb0: 70 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 61  p this command a
9bc0: 6e 64 20 6d 6f 76 65 20 74 6f 20 74 68 65 20 6e  nd move to the n
9bd0: 65 78 74 2c 20 69 74 20 77 61 73 20 6e 6f 74 20  ext, it was not 
9be0: 61 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  a row-returning 
9bf0: 72 65 73 75 6c 74 73 65 74 0a 20 20 20 20 20 20  resultset.      
9c00: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
9c10: 65 6c 73 65 20 2f 2f 20 4e 6f 20 72 6f 77 73 2c  else // No rows,
9c20: 20 66 69 65 6c 64 43 6f 75 6e 74 20 69 73 20 6e   fieldCount is n
9c30: 6f 6e 2d 7a 65 72 6f 20 73 6f 20 73 74 6f 70 20  on-zero so stop 
9c40: 68 65 72 65 0a 20 20 20 20 20 20 20 20 20 20 7b  here.          {
9c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 65  .            _re
9c60: 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 20  adingState = 1; 
9c70: 2f 2f 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20  // This command 
9c80: 72 65 74 75 72 6e 65 64 20 63 6f 6c 75 6d 6e 73  returned columns
9c90: 20 62 75 74 20 6e 6f 20 72 6f 77 73 2c 20 73 6f   but no rows, so
9ca0: 20 72 65 74 75 72 6e 20 74 72 75 65 2c 20 62 75   return true, bu
9cb0: 74 20 48 61 73 52 6f 77 73 20 3d 20 66 61 6c 73  t HasRows = fals
9cc0: 65 20 61 6e 64 20 52 65 61 64 28 29 20 72 65 74  e and Read() ret
9cd0: 75 72 6e 73 20 66 61 6c 73 65 0a 20 20 20 20 20  urns false.     
9ce0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
9cf0: 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 41 68 68  ..        // Ahh
9d00: 2c 20 77 65 20 66 6f 75 6e 64 20 61 20 72 6f 77  , we found a row
9d10: 2d 72 65 74 75 72 6e 69 6e 67 20 72 65 73 75 6c  -returning resul
9d20: 74 73 65 74 20 65 6c 69 67 69 62 6c 65 20 74 6f  tset eligible to
9d30: 20 62 65 20 72 65 74 75 72 6e 65 64 21 0a 20 20   be returned!.  
9d40: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
9d50: 74 65 6d 65 6e 74 20 3d 20 73 74 6d 74 3b 0a 20  tement = stmt;. 
9d60: 20 20 20 20 20 20 20 5f 66 69 65 6c 64 43 6f 75         _fieldCou
9d70: 6e 74 20 3d 20 66 69 65 6c 64 43 6f 75 6e 74 3b  nt = fieldCount;
9d80: 0a 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 54  .        _fieldT
9d90: 79 70 65 41 72 72 61 79 20 3d 20 6e 75 6c 6c 3b  ypeArray = null;
9da0: 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
9db0: 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20  commandBehavior 
9dc0: 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  & CommandBehavio
9dd0: 72 2e 4b 65 79 49 6e 66 6f 29 20 21 3d 20 30 29  r.KeyInfo) != 0)
9de0: 0a 20 20 20 20 20 20 20 20 20 20 4c 6f 61 64 4b  .          LoadK
9df0: 65 79 49 6e 66 6f 28 29 3b 0a 0a 20 20 20 20 20  eyInfo();..     
9e00: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a     return true;.
9e10: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
9e20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
9e30: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
9e40: 65 73 20 74 68 65 20 53 51 4c 69 74 65 54 79 70  es the SQLiteTyp
9e50: 65 20 66 6f 72 20 61 20 67 69 76 65 6e 20 63 6f  e for a given co
9e60: 6c 75 6d 6e 2c 20 61 6e 64 20 63 61 63 68 65 73  lumn, and caches
9e70: 20 69 74 20 74 6f 20 61 76 6f 69 64 20 72 65 70   it to avoid rep
9e80: 65 74 65 74 69 76 65 20 69 6e 74 65 72 6f 70 20  etetive interop 
9e90: 63 61 6c 6c 73 2e 0a 20 20 20 20 2f 2f 2f 20 3c  calls..    /// <
9ea0: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
9eb0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
9ec0: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
9ed0: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
9ee0: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  rieve</param>.  
9ef0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41    /// <returns>A
9f00: 20 53 51 4c 69 74 65 54 79 70 65 20 73 74 72 75   SQLiteType stru
9f10: 63 74 75 72 65 3c 2f 72 65 74 75 72 6e 73 3e 0a  cture</returns>.
9f20: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
9f30: 74 65 54 79 70 65 20 47 65 74 53 51 4c 69 74 65  teType GetSQLite
9f40: 54 79 70 65 28 69 6e 74 20 69 29 0a 20 20 20 20  Type(int i).    
9f50: 7b 0a 20 20 20 20 20 20 53 51 4c 69 74 65 54 79  {.      SQLiteTy
9f60: 70 65 20 74 79 70 3b 0a 0a 20 20 20 20 20 20 2f  pe typ;..      /
9f70: 2f 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  / Initialize the
9f80: 20 66 69 65 6c 64 20 74 79 70 65 73 20 61 72 72   field types arr
9f90: 61 79 20 69 66 20 6e 6f 74 20 61 6c 72 65 61 64  ay if not alread
9fa0: 79 20 69 6e 69 74 69 61 6c 69 7a 65 64 0a 20 20  y initialized.  
9fb0: 20 20 20 20 69 66 20 28 5f 66 69 65 6c 64 54 79      if (_fieldTy
9fc0: 70 65 41 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29  peArray == null)
9fd0: 0a 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 54  .        _fieldT
9fe0: 79 70 65 41 72 72 61 79 20 3d 20 6e 65 77 20 53  ypeArray = new S
9ff0: 51 4c 69 74 65 54 79 70 65 5b 56 69 73 69 62 6c  QLiteType[Visibl
a000: 65 46 69 65 6c 64 43 6f 75 6e 74 5d 3b 0a 0a 20  eFieldCount];.. 
a010: 20 20 20 20 20 2f 2f 20 49 6e 69 74 69 61 6c 69       // Initiali
a020: 7a 65 20 74 68 69 73 20 63 6f 6c 75 6d 6e 27 73  ze this column's
a030: 20 66 69 65 6c 64 20 74 79 70 65 20 69 6e 73 74   field type inst
a040: 61 6e 63 65 0a 20 20 20 20 20 20 69 66 20 28 5f  ance.      if (_
a050: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69  fieldTypeArray[i
a060: 5d 20 3d 3d 20 6e 75 6c 6c 29 20 5f 66 69 65 6c  ] == null) _fiel
a070: 64 54 79 70 65 41 72 72 61 79 5b 69 5d 20 3d 20  dTypeArray[i] = 
a080: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 28 29  new SQLiteType()
a090: 3b 0a 0a 20 20 20 20 20 20 74 79 70 20 3d 20 5f  ;..      typ = _
a0a0: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69  fieldTypeArray[i
a0b0: 5d 3b 0a 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ];..      // If 
a0c0: 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c  not initialized,
a0d0: 20 74 68 65 6e 20 66 65 74 63 68 20 74 68 65 20   then fetch the 
a0e0: 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 20  declared column 
a0f0: 64 61 74 61 74 79 70 65 20 61 6e 64 20 61 74 74  datatype and att
a100: 65 6d 70 74 20 74 6f 20 63 6f 6e 76 65 72 74 20  empt to convert 
a110: 69 74 20 0a 20 20 20 20 20 20 2f 2f 20 74 6f 20  it .      // to 
a120: 61 20 6b 6e 6f 77 6e 20 44 62 54 79 70 65 2e 0a  a known DbType..
a130: 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 41 66        if (typ.Af
a140: 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66  finity == TypeAf
a150: 66 69 6e 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c  finity.Uninitial
a160: 69 7a 65 64 29 0a 20 20 20 20 20 20 20 20 74 79  ized).        ty
a170: 70 2e 54 79 70 65 20 3d 20 53 51 4c 69 74 65 43  p.Type = SQLiteC
a180: 6f 6e 76 65 72 74 2e 54 79 70 65 4e 61 6d 65 54  onvert.TypeNameT
a190: 6f 44 62 54 79 70 65 28 5f 61 63 74 69 76 65 53  oDbType(_activeS
a1a0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f  tatement._sql.Co
a1b0: 6c 75 6d 6e 54 79 70 65 28 5f 61 63 74 69 76 65  lumnType(_active
a1c0: 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 6f 75  Statement, i, ou
a1d0: 74 20 74 79 70 2e 41 66 66 69 6e 69 74 79 29 29  t typ.Affinity))
a1e0: 3b 0a 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20  ;.      else.   
a1f0: 20 20 20 20 20 74 79 70 2e 41 66 66 69 6e 69 74       typ.Affinit
a200: 79 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65  y = _activeState
a210: 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
a220: 41 66 66 69 6e 69 74 79 28 5f 61 63 74 69 76 65  Affinity(_active
a230: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 0a  Statement, i);..
a240: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 79 70        return typ
a250: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
a260: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
a270: 2f 2f 20 52 65 61 64 73 20 74 68 65 20 6e 65 78  // Reads the nex
a280: 74 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 72  t row from the r
a290: 65 73 75 6c 74 73 65 74 0a 20 20 20 20 2f 2f 2f  esultset.    ///
a2a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
a2b0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75  /// <returns>Tru
a2c0: 65 20 69 66 20 61 20 6e 65 77 20 72 6f 77 20 77  e if a new row w
a2d0: 61 73 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  as successfully 
a2e0: 6c 6f 61 64 65 64 20 61 6e 64 20 69 73 20 72 65  loaded and is re
a2f0: 61 64 79 20 66 6f 72 20 70 72 6f 63 65 73 73 69  ady for processi
a300: 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  ng</returns>.   
a310: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
a320: 20 62 6f 6f 6c 20 52 65 61 64 28 29 0a 20 20 20   bool Read().   
a330: 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c   {.      CheckCl
a340: 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69  osed();..      i
a350: 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65  f (_readingState
a360: 20 3d 3d 20 2d 31 29 20 2f 2f 20 46 69 72 73 74   == -1) // First
a370: 20 73 74 65 70 20 77 61 73 20 61 6c 72 65 61 64   step was alread
a380: 79 20 64 6f 6e 65 20 61 74 20 74 68 65 20 4e 65  y done at the Ne
a390: 78 74 52 65 73 75 6c 74 28 29 20 6c 65 76 65 6c  xtResult() level
a3a0: 2c 20 73 6f 20 64 6f 6e 27 74 20 73 74 65 70 20  , so don't step 
a3b0: 61 67 61 69 6e 2c 20 6a 75 73 74 20 72 65 74 75  again, just retu
a3c0: 72 6e 20 74 72 75 65 2e 0a 20 20 20 20 20 20 7b  rn true..      {
a3d0: 0a 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e  .        _readin
a3e0: 67 53 74 61 74 65 20 3d 20 30 3b 0a 20 20 20 20  gState = 0;.    
a3f0: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
a400: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 65  .      }.      e
a410: 6c 73 65 20 69 66 20 28 5f 72 65 61 64 69 6e 67  lse if (_reading
a420: 53 74 61 74 65 20 3d 3d 20 30 29 20 2f 2f 20 41  State == 0) // A
a430: 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67 20  ctively reading 
a440: 72 6f 77 73 0a 20 20 20 20 20 20 7b 0a 20 20 20  rows.      {.   
a450: 20 20 20 20 20 2f 2f 20 44 6f 6e 27 74 20 72 65       // Don't re
a460: 61 64 20 61 20 6e 65 77 20 72 6f 77 20 69 66 20  ad a new row if 
a470: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 62 65 68 61  the command beha
a480: 76 69 6f 72 20 64 69 63 74 61 74 65 73 20 53 69  vior dictates Si
a490: 6e 67 6c 65 52 6f 77 2e 20 20 57 65 27 76 65 20  ngleRow.  We've 
a4a0: 61 6c 72 65 61 64 79 20 72 65 61 64 20 74 68 65  already read the
a4b0: 20 66 69 72 73 74 20 72 6f 77 2e 0a 20 20 20 20   first row..    
a4c0: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
a4d0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
a4e0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 69 6e 67  andBehavior.Sing
a4f0: 6c 65 52 6f 77 29 20 3d 3d 20 30 29 0a 20 20 20  leRow) == 0).   
a500: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
a510: 20 69 66 20 28 5f 61 63 74 69 76 65 53 74 61 74   if (_activeStat
a520: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 53 74 65 70 28  ement._sql.Step(
a530: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
a540: 29 20 3d 3d 20 74 72 75 65 29 0a 20 20 20 20 20  ) == true).     
a550: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
a560: 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20     if (_keyInfo 
a570: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  != null).       
a580: 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e         _keyInfo.
a590: 52 65 73 65 74 28 29 3b 0a 0a 20 20 20 20 20 20  Reset();..      
a5a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
a5b0: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  e;.          }. 
a5c0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
a5d0: 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20    _readingState 
a5e0: 3d 20 31 3b 20 2f 2f 20 46 69 6e 69 73 68 65 64  = 1; // Finished
a5f0: 20 72 65 61 64 69 6e 67 20 72 6f 77 73 0a 20 20   reading rows.  
a600: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 65 74      }..      ret
a610: 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 7d  urn false;.    }
a620: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
a630: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  ry>.    /// Retr
a640: 69 65 76 65 20 74 68 65 20 63 6f 75 6e 74 20 6f  ieve the count o
a650: 66 20 72 65 63 6f 72 64 73 20 61 66 66 65 63 74  f records affect
a660: 65 64 20 62 79 20 61 6e 20 75 70 64 61 74 65 2f  ed by an update/
a670: 69 6e 73 65 72 74 20 63 6f 6d 6d 61 6e 64 2e 20  insert command. 
a680: 20 4f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 63 65   Only valid once
a690: 20 74 68 65 20 64 61 74 61 20 72 65 61 64 65 72   the data reader
a6a0: 20 69 73 20 63 6c 6f 73 65 64 21 0a 20 20 20 20   is closed!.    
a6b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
a6c0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
a6d0: 64 65 20 69 6e 74 20 52 65 63 6f 72 64 73 41 66  de int RecordsAf
a6e0: 66 65 63 74 65 64 0a 20 20 20 20 7b 0a 20 20 20  fected.    {.   
a6f0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
a700: 28 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3c  (_rowsAffected <
a710: 20 30 29 20 3f 20 30 20 3a 20 5f 72 6f 77 73 41   0) ? 0 : _rowsA
a720: 66 66 65 63 74 65 64 3b 20 7d 0a 20 20 20 20 7d  ffected; }.    }
a730: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
a740: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65  ry>.    /// Inde
a750: 78 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20  xer to retrieve 
a760: 64 61 74 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75  data from a colu
a770: 6d 6e 20 67 69 76 65 6e 20 69 74 73 20 6e 61 6d  mn given its nam
a780: 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  e.    /// </summ
a790: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
a7a0: 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e  ram name="name">
a7b0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
a7c0: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
a7d0: 76 65 20 64 61 74 61 20 66 6f 72 3c 2f 70 61 72  ve data for</par
a7e0: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
a7f0: 75 72 6e 73 3e 54 68 65 20 76 61 6c 75 65 20 63  urns>The value c
a800: 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
a810: 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e  column</returns>
a820: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
a830: 72 69 64 65 20 6f 62 6a 65 63 74 20 74 68 69 73  ride object this
a840: 5b 73 74 72 69 6e 67 20 6e 61 6d 65 5d 0a 20 20  [string name].  
a850: 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20    {.      get { 
a860: 72 65 74 75 72 6e 20 47 65 74 56 61 6c 75 65 28  return GetValue(
a870: 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d 65 29  GetOrdinal(name)
a880: 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ); }.    }..    
a890: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
a8a0: 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72 20 74 6f    /// Indexer to
a8b0: 20 72 65 74 72 69 65 76 65 20 64 61 74 61 20 66   retrieve data f
a8c0: 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 67 69 76  rom a column giv
a8d0: 65 6e 20 69 74 73 20 69 0a 20 20 20 20 2f 2f 2f  en its i.    ///
a8e0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
a8f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
a900: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
a910: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72   the column to r
a920: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a  etrieve</param>.
a930: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
a940: 3e 54 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61  >The value conta
a950: 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75  ined in the colu
a960: 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  mn</returns>.   
a970: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
a980: 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 69 6e 74   object this[int
a990: 20 69 5d 0a 20 20 20 20 7b 0a 20 20 20 20 20 20   i].    {.      
a9a0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 47 65 74  get { return Get
a9b0: 56 61 6c 75 65 28 69 29 3b 20 7d 0a 20 20 20 20  Value(i); }.    
a9c0: 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 76  }..    private v
a9d0: 6f 69 64 20 4c 6f 61 64 4b 65 79 49 6e 66 6f 28  oid LoadKeyInfo(
a9e0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66  ).    {.      if
a9f0: 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75   (_keyInfo != nu
aa00: 6c 6c 29 0a 20 20 20 20 20 20 20 20 5f 6b 65 79  ll).        _key
aa10: 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b 0a  Info.Dispose();.
aa20: 0a 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 20  .      _keyInfo 
aa30: 3d 20 6e 65 77 20 53 51 4c 69 74 65 4b 65 79 52  = new SQLiteKeyR
aa40: 65 61 64 65 72 28 5f 63 6f 6d 6d 61 6e 64 2e 43  eader(_command.C
aa50: 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 69 73 2c  onnection, this,
aa60: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
aa70: 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  t);.    }.  }.}.