System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 010f9f2d41c0a14140487aab9253c019025fb11f:


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 43 6f 6c 6c 65 63 74 69 6f 6e  ystem.Collection
0190: 73 2e 53 70 65 63 69 61 6c 69 7a 65 64 3b 0a 20  s.Specialized;. 
01a0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
01b0: 74 61 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74  ta;.  using Syst
01c0: 65 6d 2e 44 61 74 61 2e 43 6f 6d 6d 6f 6e 3b 0a  em.Data.Common;.
01d0: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 47    using System.G
01e0: 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e 3b 0a 0a 20  lobalization;.. 
01f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
0200: 20 2f 2f 2f 20 53 51 4c 69 74 65 20 69 6d 70 6c   /// SQLite impl
0210: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 44 62  ementation of Db
0220: 44 61 74 61 52 65 61 64 65 72 2e 0a 20 20 2f 2f  DataReader..  //
0230: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 70  / </summary>.  p
0240: 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61  ublic sealed cla
0250: 73 73 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  ss SQLiteDataRea
0260: 64 65 72 20 3a 20 44 62 44 61 74 61 52 65 61 64  der : DbDataRead
0270: 65 72 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20  er.  {..    /// 
0280: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
0290: 2f 20 55 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d  / Underlying com
02a0: 6d 61 6e 64 20 74 68 69 73 20 72 65 61 64 65 72  mand this reader
02b0: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 0a   is attached to.
02c0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
02d0: 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 53  y>.    private S
02e0: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 5f 63 6f  QLiteCommand _co
02f0: 6d 6d 61 6e 64 3b 0a 20 20 20 20 2f 2f 2f 20 3c  mmand;.    /// <
0300: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
0310: 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20 63 75   Index of the cu
0320: 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20  rrent statement 
0330: 69 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 62  in the command b
0340: 65 69 6e 67 20 70 72 6f 63 65 73 73 65 64 0a 20  eing processed. 
0350: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0360: 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e  >.    private in
0370: 74 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  t _activeStateme
0380: 6e 74 49 6e 64 65 78 3b 0a 20 20 20 20 2f 2f 2f  ntIndex;.    ///
0390: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
03a0: 2f 2f 20 43 75 72 72 65 6e 74 20 73 74 61 74 65  // Current state
03b0: 6d 65 6e 74 20 62 65 69 6e 67 20 52 65 61 64 28  ment being Read(
03c0: 29 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ).    /// </summ
03d0: 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65  ary>.    private
03e0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
03f0: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
0400: 74 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  t;.    /// <summ
0410: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 53 74 61  ary>.    /// Sta
0420: 74 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  te of the curren
0430: 74 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  t statement bein
0440: 67 20 70 72 6f 63 65 73 73 65 64 2e 0a 20 20 20  g processed..   
0450: 20 2f 2f 2f 20 2d 31 20 3d 20 46 69 72 73 74 20   /// -1 = First 
0460: 53 74 65 70 28 29 20 65 78 65 63 75 74 65 64 2c  Step() executed,
0470: 20 73 6f 20 74 68 65 20 66 69 72 73 74 20 52 65   so the first Re
0480: 61 64 28 29 20 77 69 6c 6c 20 62 65 20 69 67 6e  ad() will be ign
0490: 6f 72 65 64 0a 20 20 20 20 2f 2f 2f 20 20 30 20  ored.    ///  0 
04a0: 3d 20 41 63 74 69 76 65 6c 79 20 72 65 61 64 69  = Actively readi
04b0: 6e 67 0a 20 20 20 20 2f 2f 2f 20 20 31 20 3d 20  ng.    ///  1 = 
04c0: 46 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67  Finished reading
04d0: 0a 20 20 20 20 2f 2f 2f 20 20 32 20 3d 20 4e 6f  .    ///  2 = No
04e0: 6e 2d 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  n-row-returning 
04f0: 73 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 20 72 65  statement, no re
0500: 63 6f 72 64 73 0a 20 20 20 20 2f 2f 2f 20 3c 2f  cords.    /// </
0510: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69  summary>.    pri
0520: 76 61 74 65 20 69 6e 74 20 5f 72 65 61 64 69 6e  vate int _readin
0530: 67 53 74 61 74 65 3b 0a 20 20 20 20 2f 2f 2f 20  gState;.    /// 
0540: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
0550: 2f 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 63 6f  / Number of reco
0560: 72 64 73 20 61 66 66 65 63 74 65 64 20 62 79 20  rds affected by 
0570: 74 68 65 20 69 6e 73 65 72 74 2f 75 70 64 61 74  the insert/updat
0580: 65 20 73 74 61 74 65 6d 65 6e 74 73 20 65 78 65  e statements exe
0590: 63 75 74 65 64 20 6f 6e 20 74 68 65 20 63 6f 6d  cuted on the com
05a0: 6d 61 6e 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  mand.    /// </s
05b0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76  ummary>.    priv
05c0: 61 74 65 20 69 6e 74 20 5f 72 6f 77 73 41 66 66  ate int _rowsAff
05d0: 65 63 74 65 64 3b 0a 20 20 20 20 2f 2f 2f 20 3c  ected;.    /// <
05e0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
05f0: 20 43 6f 75 6e 74 20 6f 66 20 66 69 65 6c 64 73   Count of fields
0600: 20 28 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74 68   (columns) in th
0610: 65 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  e row-returning 
0620: 73 74 61 74 65 6d 65 6e 74 20 63 75 72 72 65 6e  statement curren
0630: 74 6c 79 20 62 65 69 6e 67 20 70 72 6f 63 65 73  tly being proces
0640: 73 65 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  sed.    /// </su
0650: 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61  mmary>.    priva
0660: 74 65 20 69 6e 74 20 5f 66 69 65 6c 64 43 6f 75  te int _fieldCou
0670: 6e 74 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  nt;.    /// <sum
0680: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 44 61  mary>.    /// Da
0690: 74 61 74 79 70 65 73 20 6f 66 20 61 63 74 69 76  tatypes of activ
06a0: 65 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d 6e  e fields (column
06b0: 73 29 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  s) in the curren
06c0: 74 20 73 74 61 74 65 6d 65 6e 74 2c 20 75 73 65  t statement, use
06d0: 64 20 66 6f 72 20 74 79 70 65 2d 72 65 73 74 72  d for type-restr
06e0: 69 63 74 69 6e 67 20 64 61 74 61 0a 20 20 20 20  icting data.    
06f0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
0700: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0710: 65 54 79 70 65 5b 5d 20 5f 66 69 65 6c 64 54 79  eType[] _fieldTy
0720: 70 65 41 72 72 61 79 3b 0a 0a 20 20 20 20 2f 2f  peArray;..    //
0730: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
0740: 2f 2f 2f 20 54 68 65 20 62 65 68 61 76 69 6f 72  /// The behavior
0750: 20 6f 66 20 74 68 65 20 64 61 74 61 72 65 61 64   of the dataread
0760: 65 72 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  er.    /// </sum
0770: 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74  mary>.    privat
0780: 65 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  e CommandBehavio
0790: 72 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69  r _commandBehavi
07a0: 6f 72 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  or;..    /// <su
07b0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 49  mmary>.    /// I
07c0: 66 20 73 65 74 2c 20 74 68 65 6e 20 64 69 73 70  f set, then disp
07d0: 6f 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61  ose of the comma
07e0: 6e 64 20 6f 62 6a 65 63 74 20 77 68 65 6e 20 74  nd object when t
07f0: 68 65 20 72 65 61 64 65 72 20 69 73 20 66 69 6e  he reader is fin
0800: 69 73 68 65 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ished.    /// </
0810: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 69 6e 74  summary>.    int
0820: 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 64 69 73 70  ernal bool _disp
0830: 6f 73 65 43 6f 6d 6d 61 6e 64 3b 0d 0a 0d 0a 20  oseCommand;.... 
0840: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0850: 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73 65 74  ..    /// If set
0860: 2c 20 74 68 65 6e 20 72 61 69 73 65 20 61 6e 20  , then raise an 
0870: 65 78 63 65 70 74 69 6f 6e 20 77 68 65 6e 20 74  exception when t
0880: 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61 63 63  he object is acc
0890: 65 73 73 65 64 20 61 66 74 65 72 20 62 65 69 6e  essed after bein
08a0: 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20  g disposed...   
08b0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
08c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 62 6f  .    internal bo
08d0: 6f 6c 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f  ol _throwOnDispo
08e0: 73 65 64 3b 0d 0a 0a 20 20 20 20 2f 2f 2f 20 3c  sed;...    /// <
08f0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
0900: 20 41 6e 20 61 72 72 61 79 20 6f 66 20 72 6f 77   An array of row
0910: 69 64 27 73 20 66 6f 72 20 74 68 65 20 61 63 74  id's for the act
0920: 69 76 65 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ive statement if
0930: 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72   CommandBehavior
0940: 2e 4b 65 79 49 6e 66 6f 20 69 73 20 73 70 65 63  .KeyInfo is spec
0950: 69 66 69 65 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ified.    /// </
0960: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69  summary>.    pri
0970: 76 61 74 65 20 53 51 4c 69 74 65 4b 65 79 52 65  vate SQLiteKeyRe
0980: 61 64 65 72 20 5f 6b 65 79 49 6e 66 6f 3b 0a 0a  ader _keyInfo;..
0990: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
09a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d 61 74 63 68  >..    /// Match
09b0: 65 73 20 74 68 65 20 76 65 72 73 69 6f 6e 20 6f  es the version o
09c0: 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  f the connection
09d0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
09e0: 6d 61 72 79 3e 0a 20 20 20 20 69 6e 74 65 72 6e  mary>.    intern
09f0: 61 6c 20 6c 6f 6e 67 20 5f 76 65 72 73 69 6f 6e  al long _version
0a00: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
0a10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0a20: 54 68 65 20 22 73 74 75 62 22 20 28 69 2e 65 2e  The "stub" (i.e.
0a30: 20 70 6c 61 63 65 68 6f 6c 64 65 72 29 20 62 61   placeholder) ba
0a40: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 74  se schema name t
0a50: 6f 20 75 73 65 20 77 68 65 6e 20 72 65 74 75 72  o use when retur
0a60: 6e 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f  ning..    /// co
0a70: 6c 75 6d 6e 20 73 63 68 65 6d 61 20 69 6e 66 6f  lumn schema info
0a80: 72 6d 61 74 69 6f 6e 2e 20 20 4d 61 74 63 68 65  rmation.  Matche
0a90: 73 20 74 68 65 20 62 61 73 65 20 73 63 68 65 6d  s the base schem
0aa0: 61 20 6e 61 6d 65 20 75 73 65 64 20 62 79 20 74  a name used by t
0ab0: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f  he..    /// asso
0ac0: 63 69 61 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f  ciated connectio
0ad0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
0ae0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
0af0: 61 74 65 20 73 74 72 69 6e 67 20 5f 62 61 73 65  ate string _base
0b00: 53 63 68 65 6d 61 4e 61 6d 65 3b 0a 0a 20 20 20  SchemaName;..   
0b10: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
0b20: 20 20 20 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20     /// Internal 
0b30: 63 6f 6e 73 74 72 75 63 74 6f 72 2c 20 69 6e 69  constructor, ini
0b40: 74 69 61 6c 69 7a 65 73 20 74 68 65 20 64 61 74  tializes the dat
0b50: 61 72 65 61 64 65 72 20 61 6e 64 20 73 65 74 73  areader and sets
0b60: 20 75 70 20 74 6f 20 62 65 67 69 6e 20 65 78 65   up to begin exe
0b70: 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  cuting statement
0b80: 73 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  s.    /// </summ
0b90: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
0ba0: 72 61 6d 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54  ram name="cmd">T
0bb0: 68 65 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  he SQLiteCommand
0bc0: 20 74 68 69 73 20 64 61 74 61 20 72 65 61 64 65   this data reade
0bd0: 72 20 69 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e  r is for</param>
0be0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0bf0: 6e 61 6d 65 3d 22 62 65 68 61 76 65 22 3e 54 68  name="behave">Th
0c00: 65 20 65 78 70 65 63 74 65 64 20 62 65 68 61 76  e expected behav
0c10: 69 6f 72 20 6f 66 20 74 68 65 20 64 61 74 61 20  ior of the data 
0c20: 72 65 61 64 65 72 3c 2f 70 61 72 61 6d 3e 0a 20  reader</param>. 
0c30: 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69     internal SQLi
0c40: 74 65 44 61 74 61 52 65 61 64 65 72 28 53 51 4c  teDataReader(SQL
0c50: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20  iteCommand cmd, 
0c60: 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20  CommandBehavior 
0c70: 62 65 68 61 76 65 29 0a 20 20 20 20 7b 0d 0a 20  behave).    {.. 
0c80: 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69 73       _throwOnDis
0c90: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0a 20 20  posed = true;.  
0ca0: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 63      _command = c
0cb0: 6d 64 3b 0a 20 20 20 20 20 20 5f 76 65 72 73 69  md;.      _versi
0cc0: 6f 6e 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  on = _command.Co
0cd0: 6e 6e 65 63 74 69 6f 6e 2e 5f 76 65 72 73 69 6f  nnection._versio
0ce0: 6e 3b 0d 0a 20 20 20 20 20 20 5f 62 61 73 65 53  n;..      _baseS
0cf0: 63 68 65 6d 61 4e 61 6d 65 20 3d 20 5f 63 6f 6d  chemaName = _com
0d00: 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e  mand.Connection.
0d10: 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 3b  _baseSchemaName;
0d20: 0a 0a 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64  ..      _command
0d30: 42 65 68 61 76 69 6f 72 20 3d 20 62 65 68 61 76  Behavior = behav
0d40: 65 3b 0a 20 20 20 20 20 20 5f 61 63 74 69 76 65  e;.      _active
0d50: 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 20 3d  StatementIndex =
0d60: 20 2d 31 3b 0a 20 20 20 20 20 20 5f 72 6f 77 73   -1;.      _rows
0d70: 41 66 66 65 63 74 65 64 20 3d 20 2d 31 3b 0a 0a  Affected = -1;..
0d80: 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61        if (_comma
0d90: 6e 64 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  nd != null).    
0da0: 20 20 20 20 4e 65 78 74 52 65 73 75 6c 74 28 29      NextResult()
0db0: 3b 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ;.    }....    /
0dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0e20: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44  ..    #region ID
0e30: 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65  isposable "Patte
0e40: 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  rn" Members..   
0e50: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69   private bool di
0e60: 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 70 72 69  sposed;..    pri
0e70: 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44  vate void CheckD
0e80: 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72  isposed() /* thr
0e90: 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 23 69  ow */..    {..#i
0ea0: 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f  f THROW_ON_DISPO
0eb0: 53 45 44 0d 0a 20 20 20 20 20 20 20 20 69 66 20  SED..        if 
0ec0: 28 64 69 73 70 6f 73 65 64 20 26 26 20 5f 74 68  (disposed && _th
0ed0: 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29 0d 0a  rowOnDisposed)..
0ee0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
0ef0: 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70  w new ObjectDisp
0f00: 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79  osedException(ty
0f10: 70 65 6f 66 28 53 51 4c 69 74 65 44 61 74 61 52  peof(SQLiteDataR
0f20: 65 61 64 65 72 29 2e 4e 61 6d 65 29 3b 0d 0a 23  eader).Name);..#
0f30: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
0f40: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fa0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
0fb0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0fc0: 2f 20 44 69 73 70 6f 73 65 20 6f 66 20 61 6c 6c  / Dispose of all
0fd0: 20 72 65 73 6f 75 72 63 65 73 20 75 73 65 64 20   resources used 
0fe0: 62 79 20 74 68 69 73 20 64 61 74 61 72 65 61 64  by this dataread
0ff0: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  er...    /// </s
1000: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1010: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69   <param name="di
1020: 73 70 6f 73 69 6e 67 22 3e 3c 2f 70 61 72 61 6d  sposing"></param
1030: 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  >..    protected
1040: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44   override void D
1050: 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70  ispose(bool disp
1060: 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20  osing)..    {.. 
1070: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
1080: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1090: 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
10a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
10b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10c0: 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e    //if (disposin
10d0: 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g)..            
10e0: 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20      //{..       
10f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1120: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
1130: 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69       //    // di
1140: 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65  spose managed re
1150: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
1160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1170: 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f   //    /////////
1180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
11a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d               //}
11b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11c0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
11d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
11f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72              // r
1200: 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64  elease unmanaged
1210: 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e   resources here.
1220: 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1230: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1280: 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 78 20 66    // NOTE: Fix f
1290: 6f 72 20 74 69 63 6b 65 74 20 5b 65 31 62 32 65  or ticket [e1b2e
12a0: 30 66 37 36 39 5d 2c 20 64 6f 20 4e 4f 54 20 74  0f769], do NOT t
12b0: 68 72 6f 77 20 65 78 63 65 70 74 69 6f 6e 73 0d  hrow exceptions.
12c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d0: 20 2f 2f 20 20 20 20 20 20 20 77 68 69 6c 65 20   //       while 
12e0: 77 65 20 61 72 65 20 62 65 69 6e 67 20 64 69 73  we are being dis
12f0: 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  posed...        
1300: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1310: 20 20 20 20 20 20 20 20 20 20 20 20 5f 74 68 72              _thr
1320: 6f 77 4f 6e 44 69 73 70 6f 73 65 64 20 3d 20 66  owOnDisposed = f
1330: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1340: 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
1350: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1360: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1370: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
1380: 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ly..        {.. 
1390: 20 20 20 20 20 20 20 20 20 20 20 62 61 73 65 2e             base.
13a0: 44 69 73 70 6f 73 65 28 64 69 73 70 6f 73 69 6e  Dispose(disposin
13b0: 67 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  g);..        }..
13c0: 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
13d0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0a 20  ////////////... 
1440: 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f 69 64     internal void
1450: 20 43 61 6e 63 65 6c 28 29 0a 20 20 20 20 7b 0a   Cancel().    {.
1460: 20 20 20 20 20 20 5f 76 65 72 73 69 6f 6e 20 3d        _version =
1470: 20 30 3b 0a 20 20 20 20 7d 0d 0a 0a 20 20 20 20   0;.    }...    
1480: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
1490: 20 20 2f 2f 2f 20 43 6c 6f 73 65 73 20 74 68 65    /// Closes the
14a0: 20 64 61 74 61 72 65 61 64 65 72 2c 20 70 6f 74   datareader, pot
14b0: 65 6e 74 69 61 6c 6c 79 20 63 6c 6f 73 69 6e 67  entially closing
14c0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
14d0: 61 73 20 77 65 6c 6c 20 69 66 20 43 6f 6d 6d 61  as well if Comma
14e0: 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65  ndBehavior.Close
14f0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 73  Connection was s
1500: 70 65 63 69 66 69 65 64 2e 0a 20 20 20 20 2f 2f  pecified..    //
1510: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
1520: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
1530: 20 76 6f 69 64 20 43 6c 6f 73 65 28 29 0a 20 20   void Close().  
1540: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
1550: 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20  Disposed();..   
1560: 20 20 20 74 72 79 0a 20 20 20 20 20 20 7b 0a 20     try.      {. 
1570: 20 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d         if (_comm
1580: 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  and != null).   
1590: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
15a0: 20 74 72 79 0a 20 20 20 20 20 20 20 20 20 20 7b   try.          {
15b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
15c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20  .            {. 
15d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
15e0: 4d 61 6b 65 20 73 75 72 65 20 77 65 27 76 65 20  Make sure we've 
15f0: 6e 6f 74 20 62 65 65 6e 20 63 61 6e 63 65 6c 65  not been cancele
1600: 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
1610: 69 66 20 28 5f 76 65 72 73 69 6f 6e 20 21 3d 20  if (_version != 
1620: 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0).             
1630: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1640: 20 20 20 74 72 79 0a 20 20 20 20 20 20 20 20 20     try.         
1650: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
1660: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
1670: 20 28 4e 65 78 74 52 65 73 75 6c 74 28 29 29 0a   (NextResult()).
1680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1690: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
16a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
16b0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16c0: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 28            catch(
16d0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 29  SQLiteException)
16e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16f0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1700: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
1710: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
1720: 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6c 65 61     _command.Clea
1730: 72 44 61 74 61 52 65 61 64 65 72 28 29 3b 0a 20  rDataReader();. 
1740: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
1750: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
1760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20  .            {. 
1770: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1780: 49 66 20 74 68 65 20 64 61 74 61 72 65 61 64 65  If the datareade
1790: 72 27 73 20 62 65 68 61 76 69 6f 72 20 69 6e 63  r's behavior inc
17a0: 6c 75 64 65 73 20 63 6c 6f 73 69 6e 67 20 74 68  ludes closing th
17b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68  e connection, th
17c0: 65 6e 20 64 6f 20 73 6f 20 68 65 72 65 2e 0a 20  en do so here.. 
17d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17e0: 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69  ((_commandBehavi
17f0: 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61  or & CommandBeha
1800: 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63  vior.CloseConnec
1810: 74 69 6f 6e 29 20 21 3d 20 30 20 26 26 20 5f 63  tion) != 0 && _c
1820: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
1830: 6e 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  n != null).     
1840: 20 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d             _comm
1850: 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 43  and.Connection.C
1860: 6c 6f 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20  lose();.        
1870: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1880: 7d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6e 61  }.          fina
1890: 6c 6c 79 0a 20 20 20 20 20 20 20 20 20 20 7b 0a  lly.          {.
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18b0: 5f 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 29  _disposeCommand)
18c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
18d0: 63 6f 6d 6d 61 6e 64 2e 44 69 73 70 6f 73 65 28  command.Dispose(
18e0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
18f0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
1900: 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 6e 75 6c    _command = nul
1910: 6c 3b 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69  l;.        _acti
1920: 76 65 53 74 61 74 65 6d 65 6e 74 20 3d 20 6e 75  veStatement = nu
1930: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 5f 66 69 65  ll;.        _fie
1940: 6c 64 54 79 70 65 41 72 72 61 79 20 3d 20 6e 75  ldTypeArray = nu
1950: 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ll;.      }.    
1960: 20 20 66 69 6e 61 6c 6c 79 0a 20 20 20 20 20 20    finally.      
1970: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 6b  {.        if (_k
1980: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a  eyInfo != null).
1990: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
19a0: 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 44 69 73      _keyInfo.Dis
19b0: 70 6f 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20  pose();.        
19c0: 20 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 75 6c    _keyInfo = nul
19d0: 6c 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  l;.        }.   
19e0: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
19f0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
1a00: 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20 65    /// Throw an e
1a10: 72 72 6f 72 20 69 66 20 74 68 65 20 64 61 74 61  rror if the data
1a20: 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
1a30: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1a40: 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20  ry>.    private 
1a50: 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73 65 64  void CheckClosed
1a60: 28 29 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  ().    {..      
1a70: 69 66 20 28 21 5f 74 68 72 6f 77 4f 6e 44 69 73  if (!_throwOnDis
1a80: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
1a90: 72 65 74 75 72 6e 3b 0a 0a 20 20 20 20 20 20 69  return;..      i
1aa0: 66 20 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d 20 6e  f (_command == n
1ab0: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 74 68 72  ull).        thr
1ac0: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
1ad0: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
1ae0: 28 22 44 61 74 61 52 65 61 64 65 72 20 68 61 73  ("DataReader has
1af0: 20 62 65 65 6e 20 63 6c 6f 73 65 64 22 29 3b 0a   been closed");.
1b00: 0a 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73  .      if (_vers
1b10: 69 6f 6e 20 3d 3d 20 30 29 0a 20 20 20 20 20 20  ion == 0).      
1b20: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
1b30: 74 65 45 78 63 65 70 74 69 6f 6e 28 28 69 6e 74  teException((int
1b40: 29 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  )SQLiteErrorCode
1b50: 2e 41 62 6f 72 74 2c 20 22 45 78 65 63 75 74 69  .Abort, "Executi
1b60: 6f 6e 20 77 61 73 20 61 62 6f 72 74 65 64 20 62  on was aborted b
1b70: 79 20 74 68 65 20 75 73 65 72 22 29 3b 0a 0a 20  y the user");.. 
1b80: 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e       if (_comman
1b90: 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 53 74 61  d.Connection.Sta
1ba0: 74 65 20 21 3d 20 43 6f 6e 6e 65 63 74 69 6f 6e  te != Connection
1bb0: 53 74 61 74 65 2e 4f 70 65 6e 20 7c 7c 20 5f 63  State.Open || _c
1bc0: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
1bd0: 6e 2e 5f 76 65 72 73 69 6f 6e 20 21 3d 20 5f 76  n._version != _v
1be0: 65 72 73 69 6f 6e 29 0a 20 20 20 20 20 20 20 20  ersion).        
1bf0: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
1c00: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
1c10: 69 6f 6e 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 20  ion("Connection 
1c20: 77 61 73 20 63 6c 6f 73 65 64 2c 20 73 74 61 74  was closed, stat
1c30: 65 6d 65 6e 74 20 77 61 73 20 74 65 72 6d 69 6e  ement was termin
1c40: 61 74 65 64 22 29 3b 0a 20 20 20 20 7d 0a 0a 20  ated");.    }.. 
1c50: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1c60: 0a 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61  .    /// Throw a
1c70: 6e 20 65 72 72 6f 72 20 69 66 20 61 20 72 6f 77  n error if a row
1c80: 20 69 73 20 6e 6f 74 20 6c 6f 61 64 65 64 0a 20   is not loaded. 
1c90: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1ca0: 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  >.    private vo
1cb0: 69 64 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77  id CheckValidRow
1cc0: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69  ().    {.      i
1cd0: 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65  f (_readingState
1ce0: 20 21 3d 20 30 29 0a 20 20 20 20 20 20 20 20 74   != 0).        t
1cf0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
1d00: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
1d10: 6f 6e 28 22 4e 6f 20 63 75 72 72 65 6e 74 20 72  on("No current r
1d20: 6f 77 22 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ow");.    }..   
1d30: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
1d40: 20 20 20 2f 2f 2f 20 45 6e 75 6d 65 72 61 74 6f     /// Enumerato
1d50: 72 20 73 75 70 70 6f 72 74 0a 20 20 20 20 2f 2f  r support.    //
1d60: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
1d70: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
1d80: 74 75 72 6e 73 20 61 20 44 62 45 6e 75 6d 65 72  turns a DbEnumer
1d90: 61 74 6f 72 20 6f 62 6a 65 63 74 2e 3c 2f 72 65  ator object.</re
1da0: 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69  turns>.    publi
1db0: 63 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 65  c override Colle
1dc0: 63 74 69 6f 6e 73 2e 49 45 6e 75 6d 65 72 61 74  ctions.IEnumerat
1dd0: 6f 72 20 47 65 74 45 6e 75 6d 65 72 61 74 6f 72  or GetEnumerator
1de0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
1df0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
1e00: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ;.      return n
1e10: 65 77 20 44 62 45 6e 75 6d 65 72 61 74 6f 72 28  ew DbEnumerator(
1e20: 74 68 69 73 2c 20 28 28 5f 63 6f 6d 6d 61 6e 64  this, ((_command
1e30: 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61  Behavior & Comma
1e40: 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65  ndBehavior.Close
1e50: 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 3d 3d 20 43  Connection) == C
1e60: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 43  ommandBehavior.C
1e70: 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 29  loseConnection))
1e80: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
1e90: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
1ea0: 2f 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74  // Not implement
1eb0: 65 64 2e 20 20 52 65 74 75 72 6e 73 20 30 0a 20  ed.  Returns 0. 
1ec0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1ed0: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
1ee0: 72 72 69 64 65 20 69 6e 74 20 44 65 70 74 68 0a  rride int Depth.
1ef0: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a      {.      get.
1f00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f10: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
1f20: 3b 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 43  ;.        CheckC
1f30: 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20 20  losed();.       
1f40: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20   return 0;.     
1f50: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f   }.    }..    //
1f60: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
1f70: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
1f80: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1f90: 73 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  s in the current
1fa0: 20 72 65 73 75 6c 74 73 65 74 0a 20 20 20 20 2f   resultset.    /
1fb0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
1fc0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
1fd0: 65 20 69 6e 74 20 46 69 65 6c 64 43 6f 75 6e 74  e int FieldCount
1fe0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74  .    {.      get
1ff0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2000: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
2010: 29 3b 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  );.        Check
2020: 43 6c 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20  Closed();..     
2030: 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20     if (_keyInfo 
2040: 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  == null).       
2050: 20 20 20 72 65 74 75 72 6e 20 5f 66 69 65 6c 64     return _field
2060: 43 6f 75 6e 74 3b 0a 0a 20 20 20 20 20 20 20 20  Count;..        
2070: 72 65 74 75 72 6e 20 5f 66 69 65 6c 64 43 6f 75  return _fieldCou
2080: 6e 74 20 2b 20 5f 6b 65 79 49 6e 66 6f 2e 43 6f  nt + _keyInfo.Co
2090: 75 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  unt;.      }.   
20a0: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
20b0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65  mary>.    /// Re
20c0: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
20d0: 20 6f 66 20 76 69 73 69 62 6c 65 20 66 69 65 6c   of visible fiel
20e0: 64 73 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  ds in the curren
20f0: 74 20 72 65 73 75 6c 74 73 65 74 0a 20 20 20 20  t resultset.    
2100: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
2110: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
2120: 64 65 20 69 6e 74 20 56 69 73 69 62 6c 65 46 69  de int VisibleFi
2130: 65 6c 64 43 6f 75 6e 74 0a 20 20 20 20 7b 0a 20  eldCount.    {. 
2140: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
2150: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
2160: 44 69 73 70 6f 73 65 64 28 29 3b 0a 20 20 20 20  Disposed();.    
2170: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
2180: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
2190: 6e 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0a 20  n _fieldCount;. 
21a0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
21b0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
21c0: 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 69      /// SQLite i
21d0: 73 20 69 6e 68 65 72 65 6e 74 6c 79 20 75 6e 2d  s inherently un-
21e0: 74 79 70 65 64 2e 20 20 41 6c 6c 20 64 61 74 61  typed.  All data
21f0: 74 79 70 65 73 20 69 6e 20 53 51 4c 69 74 65 20  types in SQLite 
2200: 61 72 65 20 6e 61 74 69 76 65 6c 79 20 73 74 72  are natively str
2210: 69 6e 67 73 2e 20 20 54 68 65 20 64 65 66 69 6e  ings.  The defin
2220: 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6c  ition of the col
2230: 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 0a  umns of a table.
2240: 20 20 20 20 2f 2f 2f 20 61 6e 64 20 74 68 65 20      /// and the 
2250: 61 66 66 69 6e 69 74 79 20 6f 66 20 72 65 74 75  affinity of retu
2260: 72 6e 65 64 20 74 79 70 65 73 20 61 72 65 20 61  rned types are a
2270: 6c 6c 20 77 65 20 68 61 76 65 20 74 6f 20 67 6f  ll we have to go
2280: 20 6f 6e 20 74 6f 20 74 79 70 65 2d 72 65 73 74   on to type-rest
2290: 72 69 63 74 20 64 61 74 61 20 69 6e 20 74 68 65  rict data in the
22a0: 20 72 65 61 64 65 72 2e 0a 20 20 20 20 2f 2f 2f   reader..    ///
22b0: 20 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66   .    /// This f
22c0: 75 6e 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73  unction attempts
22d0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
22e0: 74 68 65 20 74 79 70 65 20 6f 66 20 64 61 74 61  the type of data
22f0: 20 62 65 69 6e 67 20 72 65 71 75 65 73 74 65 64   being requested
2300: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6d 61 74   of a column mat
2310: 63 68 65 73 20 74 68 65 20 64 61 74 61 74 79 70  ches the datatyp
2320: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  e of the column.
2330: 20 20 49 6e 0a 20 20 20 20 2f 2f 2f 20 74 68 65    In.    /// the
2340: 20 63 61 73 65 20 6f 66 20 63 6f 6c 75 6d 6e 73   case of columns
2350: 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 62 61   that are not ba
2360: 63 6b 65 64 20 69 6e 74 6f 20 61 20 74 61 62 6c  cked into a tabl
2370: 65 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 77 65  e definition, we
2380: 20 61 74 74 65 6d 70 74 20 74 6f 20 6d 61 74 63   attempt to matc
2390: 68 20 75 70 20 74 68 65 20 61 66 66 69 6e 69 74  h up the affinit
23a0: 79 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 28 69  y of a column (i
23b0: 6e 74 2c 20 64 6f 75 62 6c 65 2c 20 73 74 72 69  nt, double, stri
23c0: 6e 67 20 6f 72 20 62 6c 6f 62 29 0a 20 20 20 20  ng or blob).    
23d0: 2f 2f 2f 20 74 6f 20 61 20 73 65 74 20 6f 66 20  /// to a set of 
23e0: 6b 6e 6f 77 6e 20 74 79 70 65 73 20 74 68 61 74  known types that
23f0: 20 63 6c 6f 73 65 6c 79 20 6d 61 74 63 68 20 74   closely match t
2400: 68 61 74 20 61 66 66 69 6e 69 74 79 2e 20 20 49  hat affinity.  I
2410: 74 27 73 20 6e 6f 74 20 61 6e 20 65 78 61 63 74  t's not an exact
2420: 20 73 63 69 65 6e 63 65 2c 20 62 75 74 20 69 74   science, but it
2430: 73 20 74 68 65 20 62 65 73 74 20 77 65 20 63 61  s the best we ca
2440: 6e 20 64 6f 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f  n do..    /// </
2450: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
2460: 20 3c 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 2f   <returns>.    /
2470: 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  // This function
2480: 20 74 68 72 6f 77 73 20 61 6e 20 49 6e 76 61 6c   throws an Inval
2490: 69 64 54 79 70 65 43 61 73 74 28 29 20 65 78 63  idTypeCast() exc
24a0: 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 72 65  eption if the re
24b0: 71 75 65 73 74 65 64 20 74 79 70 65 20 64 6f 65  quested type doe
24c0: 73 6e 27 74 20 6d 61 74 63 68 20 74 68 65 20 63  sn't match the c
24d0: 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e 69 74 69  olumn's definiti
24e0: 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74 79 2e 0a  on or affinity..
24f0: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2500: 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  s>.    /// <para
2510: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
2520: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
2530: 6d 6e 20 74 6f 20 74 79 70 65 2d 63 68 65 63 6b  mn to type-check
2540: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
2550: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79   <param name="ty
2560: 70 22 3e 54 68 65 20 74 79 70 65 20 77 65 20 77  p">The type we w
2570: 61 6e 74 20 74 6f 20 67 65 74 20 6f 75 74 20 6f  ant to get out o
2580: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 70 61  f the column</pa
2590: 72 61 6d 3e 0a 20 20 20 20 70 72 69 76 61 74 65  ram>.    private
25a0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 56 65   TypeAffinity Ve
25b0: 72 69 66 79 54 79 70 65 28 69 6e 74 20 69 2c 20  rifyType(int i, 
25c0: 44 62 54 79 70 65 20 74 79 70 29 0a 20 20 20 20  DbType typ).    
25d0: 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c  {..      CheckCl
25e0: 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20 43 68  osed();.      Ch
25f0: 65 63 6b 56 61 6c 69 64 52 6f 77 28 29 3b 0a 0a  eckValidRow();..
2600: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
2610: 74 79 20 61 66 66 69 6e 69 74 79 20 3d 20 47 65  ty affinity = Ge
2620: 74 53 51 4c 69 74 65 54 79 70 65 28 69 29 2e 41  tSQLiteType(i).A
2630: 66 66 69 6e 69 74 79 3b 0a 0a 20 20 20 20 20 20  ffinity;..      
2640: 73 77 69 74 63 68 20 28 61 66 66 69 6e 69 74 79  switch (affinity
2650: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
2660: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
2670: 69 74 79 2e 49 6e 74 36 34 3a 0a 20 20 20 20 20  ity.Int64:.     
2680: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
2690: 44 62 54 79 70 65 2e 49 6e 74 31 36 29 20 72 65  DbType.Int16) re
26a0: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20  turn affinity;. 
26b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
26c0: 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74 33 32   == DbType.Int32
26d0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
26e0: 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  y;.          if 
26f0: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49  (typ == DbType.I
2700: 6e 74 36 34 29 20 72 65 74 75 72 6e 20 61 66 66  nt64) return aff
2710: 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20  inity;.         
2720: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
2730: 70 65 2e 42 6f 6f 6c 65 61 6e 29 20 72 65 74 75  pe.Boolean) retu
2740: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20  rn affinity;.   
2750: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
2760: 3d 20 44 62 54 79 70 65 2e 42 79 74 65 29 20 72  = DbType.Byte) r
2770: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a  eturn affinity;.
2780: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
2790: 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 61 74 65  p == DbType.Date
27a0: 54 69 6d 65 29 20 72 65 74 75 72 6e 20 61 66 66  Time) return aff
27b0: 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20  inity;.         
27c0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
27d0: 70 65 2e 53 69 6e 67 6c 65 29 20 72 65 74 75 72  pe.Single) retur
27e0: 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20  n affinity;.    
27f0: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
2800: 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 20   DbType.Double) 
2810: 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b  return affinity;
2820: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
2830: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 65 63  yp == DbType.Dec
2840: 69 6d 61 6c 29 20 72 65 74 75 72 6e 20 61 66 66  imal) return aff
2850: 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20  inity;.         
2860: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
2870: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
2880: 79 2e 44 6f 75 62 6c 65 3a 0a 20 20 20 20 20 20  y.Double:.      
2890: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
28a0: 62 54 79 70 65 2e 53 69 6e 67 6c 65 29 20 72 65  bType.Single) re
28b0: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20  turn affinity;. 
28c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
28d0: 20 3d 3d 20 44 62 54 79 70 65 2e 44 6f 75 62 6c   == DbType.Doubl
28e0: 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  e) return affini
28f0: 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  ty;.          if
2900: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
2910: 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e 20  Decimal) return 
2920: 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20  affinity;.      
2930: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
2940: 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29 20  bType.DateTime) 
2950: 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b  return affinity;
2960: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
2970: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ;.        case T
2980: 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74  ypeAffinity.Text
2990: 3a 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  :.          if (
29a0: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 42  typ == DbType.SB
29b0: 79 74 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  yte) return affi
29c0: 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20  nity;.          
29d0: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
29e0: 65 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e  e.String) return
29f0: 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20   affinity;.     
2a00: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
2a10: 44 62 54 79 70 65 2e 53 42 79 74 65 29 20 72 65  DbType.SByte) re
2a20: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20  turn affinity;. 
2a30: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
2a40: 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29   == DbType.Guid)
2a50: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
2a60: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ;.          if (
2a70: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 61  typ == DbType.Da
2a80: 74 65 54 69 6d 65 29 20 72 65 74 75 72 6e 20 61  teTime) return a
2a90: 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20  ffinity;.       
2aa0: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
2ab0: 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72 65  Type.Decimal) re
2ac0: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20  turn affinity;. 
2ad0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2ae0: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
2af0: 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0a  eAffinity.Blob:.
2b00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
2b10: 70 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64  p == DbType.Guid
2b20: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
2b30: 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  y;.          if 
2b40: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53  (typ == DbType.S
2b50: 74 72 69 6e 67 29 20 72 65 74 75 72 6e 20 61 66  tring) return af
2b60: 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20  finity;.        
2b70: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
2b80: 79 70 65 2e 42 69 6e 61 72 79 29 20 72 65 74 75  ype.Binary) retu
2b90: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20  rn affinity;.   
2ba0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2bb0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 74 68 72      }..      thr
2bc0: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 43 61  ow new InvalidCa
2bd0: 73 74 45 78 63 65 70 74 69 6f 6e 28 29 3b 0a 20  stException();. 
2be0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
2bf0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
2c00: 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f  Retrieves the co
2c10: 6c 75 6d 6e 20 61 73 20 61 20 62 6f 6f 6c 65 61  lumn as a boolea
2c20: 6e 20 76 61 6c 75 65 0a 20 20 20 20 2f 2f 2f 20  n value.    /// 
2c30: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
2c40: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2c50: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
2c60: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
2c70: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20  trieve</param>. 
2c80: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2c90: 62 6f 6f 6c 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  bool</returns>. 
2ca0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
2cb0: 64 65 20 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65  de bool GetBoole
2cc0: 61 6e 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  an(int i)..    {
2cd0: 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73  ..      CheckDis
2ce0: 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20  posed();..      
2cf0: 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65  if (i >= Visible
2d00: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
2d10: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a  eyInfo != null).
2d20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
2d30: 6b 65 79 49 6e 66 6f 2e 47 65 74 42 6f 6f 6c 65  keyInfo.GetBoole
2d40: 61 6e 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69  an(i - VisibleFi
2d50: 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20  eldCount);..    
2d60: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
2d70: 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 3b  DbType.Boolean);
2d80: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f  .      return Co
2d90: 6e 76 65 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28  nvert.ToBoolean(
2da0: 47 65 74 56 61 6c 75 65 28 69 29 2c 20 43 75 6c  GetValue(i), Cul
2db0: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
2dc0: 43 75 6c 74 75 72 65 29 3b 0a 20 20 20 20 7d 0a  Culture);.    }.
2dd0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
2de0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  y>.    /// Retri
2df0: 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  eves the column 
2e00: 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  as a single byte
2e10: 20 76 61 6c 75 65 0a 20 20 20 20 2f 2f 2f 20 3c   value.    /// <
2e20: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
2e30: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
2e40: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
2e50: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
2e60: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  rieve</param>.  
2e70: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62    /// <returns>b
2e80: 79 74 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  yte</returns>.  
2e90: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
2ea0: 65 20 62 79 74 65 20 47 65 74 42 79 74 65 28 69  e byte GetByte(i
2eb0: 6e 74 20 69 29 0a 20 20 20 20 7b 0d 0a 20 20 20  nt i).    {..   
2ec0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
2ed0: 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 69  ();..      if (i
2ee0: 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64   >= VisibleField
2ef0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
2f00: 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  o != null).     
2f10: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
2f20: 66 6f 2e 47 65 74 42 79 74 65 28 69 20 2d 20 56  fo.GetByte(i - V
2f30: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
2f40: 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66 79  );..      Verify
2f50: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42  Type(i, DbType.B
2f60: 79 74 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75  yte);.      retu
2f70: 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42 79 74  rn Convert.ToByt
2f80: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
2f90: 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32  nt._sql.GetInt32
2fa0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
2fb0: 74 2c 20 69 29 29 3b 0a 20 20 20 20 7d 0a 0a 20  t, i));.    }.. 
2fc0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2fd0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
2fe0: 65 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61  es a column as a
2ff0: 6e 20 61 72 72 61 79 20 6f 66 20 62 79 74 65 73  n array of bytes
3000: 20 28 62 6c 6f 62 29 0a 20 20 20 20 2f 2f 2f 20   (blob).    /// 
3010: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
3020: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3030: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
3040: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
3050: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20  trieve</param>. 
3060: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3070: 6d 65 3d 22 66 69 65 6c 64 4f 66 66 73 65 74 22  me="fieldOffset"
3080: 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20  >The zero-based 
3090: 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20 74  index of where t
30a0: 6f 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67 20  o begin reading 
30b0: 74 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d 3e  the data</param>
30c0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
30d0: 6e 61 6d 65 3d 22 62 75 66 66 65 72 22 3e 54 68  name="buffer">Th
30e0: 65 20 62 75 66 66 65 72 20 74 6f 20 77 72 69 74  e buffer to writ
30f0: 65 20 74 68 65 20 62 79 74 65 73 20 69 6e 74 6f  e the bytes into
3100: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
3110: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75   <param name="bu
3120: 66 66 65 72 6f 66 66 73 65 74 22 3e 54 68 65 20  fferoffset">The 
3130: 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78  zero-based index
3140: 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65 67   of where to beg
3150: 69 6e 20 77 72 69 74 69 6e 67 20 69 6e 74 6f 20  in writing into 
3160: 74 68 65 20 61 72 72 61 79 3c 2f 70 61 72 61 6d  the array</param
3170: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
3180: 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 54   name="length">T
3190: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
31a0: 65 73 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  es to retrieve</
31b0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
31c0: 72 65 74 75 72 6e 73 3e 54 68 65 20 61 63 74 75  returns>The actu
31d0: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
31e0: 65 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  es written into 
31f0: 74 68 65 20 61 72 72 61 79 3c 2f 72 65 74 75 72  the array</retur
3200: 6e 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d  ns>.    /// <rem
3210: 61 72 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20 54 6f  arks>.    /// To
3220: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
3230: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
3240: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 70 61  n the column, pa
3250: 73 73 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20  ss a null value 
3260: 66 6f 72 20 74 68 65 20 62 75 66 66 65 72 2e 20  for the buffer. 
3270: 20 54 68 65 20 74 6f 74 61 6c 20 6c 65 6e 67 74   The total lengt
3280: 68 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e  h will be return
3290: 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  ed..    /// </re
32a0: 6d 61 72 6b 73 3e 0a 20 20 20 20 70 75 62 6c 69  marks>.    publi
32b0: 63 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  c override long 
32c0: 47 65 74 42 79 74 65 73 28 69 6e 74 20 69 2c 20  GetBytes(int i, 
32d0: 6c 6f 6e 67 20 66 69 65 6c 64 4f 66 66 73 65 74  long fieldOffset
32e0: 2c 20 62 79 74 65 5b 5d 20 62 75 66 66 65 72 2c  , byte[] buffer,
32f0: 20 69 6e 74 20 62 75 66 66 65 72 6f 66 66 73 65   int bufferoffse
3300: 74 2c 20 69 6e 74 20 6c 65 6e 67 74 68 29 0a 20  t, int length). 
3310: 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63     {..      Chec
3320: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20  kDisposed();..  
3330: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73      if (i >= Vis
3340: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
3350: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
3360: 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74 75  ll).        retu
3370: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42  rn _keyInfo.GetB
3380: 79 74 65 73 28 69 20 2d 20 56 69 73 69 62 6c 65  ytes(i - Visible
3390: 46 69 65 6c 64 43 6f 75 6e 74 2c 20 66 69 65 6c  FieldCount, fiel
33a0: 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c  dOffset, buffer,
33b0: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c   bufferoffset, l
33c0: 65 6e 67 74 68 29 3b 0a 0a 20 20 20 20 20 20 56  ength);..      V
33d0: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
33e0: 79 70 65 2e 42 69 6e 61 72 79 29 3b 0a 20 20 20  ype.Binary);.   
33f0: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
3400: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
3410: 47 65 74 42 79 74 65 73 28 5f 61 63 74 69 76 65  GetBytes(_active
3420: 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 28 69  Statement, i, (i
3430: 6e 74 29 66 69 65 6c 64 4f 66 66 73 65 74 2c 20  nt)fieldOffset, 
3440: 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66  buffer, bufferof
3450: 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0a 20  fset, length);. 
3460: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
3470: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
3480: 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75  Returns the colu
3490: 6d 6e 20 61 73 20 61 20 73 69 6e 67 6c 65 20 63  mn as a single c
34a0: 68 61 72 61 63 74 65 72 0a 20 20 20 20 2f 2f 2f  haracter.    ///
34b0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
34c0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
34d0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
34e0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72   the column to r
34f0: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a  etrieve</param>.
3500: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
3510: 3e 63 68 61 72 3c 2f 72 65 74 75 72 6e 73 3e 0a  >char</returns>.
3520: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
3530: 69 64 65 20 63 68 61 72 20 47 65 74 43 68 61 72  ide char GetChar
3540: 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0d 0a 20  (int i).    {.. 
3550: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
3560: 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20  ed();..      if 
3570: 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65  (i >= VisibleFie
3580: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
3590: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
35a0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
35b0: 49 6e 66 6f 2e 47 65 74 43 68 61 72 28 69 20 2d  Info.GetChar(i -
35c0: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
35d0: 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69  nt);..      Veri
35e0: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
35f0: 2e 53 42 79 74 65 29 3b 0a 20 20 20 20 20 20 72  .SByte);.      r
3600: 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f  eturn Convert.To
3610: 43 68 61 72 28 5f 61 63 74 69 76 65 53 74 61 74  Char(_activeStat
3620: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e  ement._sql.GetIn
3630: 74 33 32 28 5f 61 63 74 69 76 65 53 74 61 74 65  t32(_activeState
3640: 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20 20 20 7d  ment, i));.    }
3650: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3660: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  ry>.    /// Retr
3670: 69 65 76 65 73 20 61 20 63 6f 6c 75 6d 6e 20 61  ieves a column a
3680: 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20 63 68  s an array of ch
3690: 61 72 73 20 28 62 6c 6f 62 29 0a 20 20 20 20 2f  ars (blob).    /
36a0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
36b0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
36c0: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
36d0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
36e0: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
36f0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
3700: 20 6e 61 6d 65 3d 22 66 69 65 6c 64 6f 66 66 73   name="fieldoffs
3710: 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73  et">The zero-bas
3720: 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72  ed index of wher
3730: 65 20 74 6f 20 62 65 67 69 6e 20 72 65 61 64 69  e to begin readi
3740: 6e 67 20 74 68 65 20 64 61 74 61 3c 2f 70 61 72  ng the data</par
3750: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  am>.    /// <par
3760: 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 22  am name="buffer"
3770: 3e 54 68 65 20 62 75 66 66 65 72 20 74 6f 20 77  >The buffer to w
3780: 72 69 74 65 20 74 68 65 20 63 68 61 72 61 63 74  rite the charact
3790: 65 72 73 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e  ers into</param>
37a0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
37b0: 6e 61 6d 65 3d 22 62 75 66 66 65 72 6f 66 66 73  name="bufferoffs
37c0: 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73  et">The zero-bas
37d0: 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72  ed index of wher
37e0: 65 20 74 6f 20 62 65 67 69 6e 20 77 72 69 74 69  e to begin writi
37f0: 6e 67 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61  ng into the arra
3800: 79 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  y</param>.    //
3810: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
3820: 65 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d 62 65  ength">The numbe
3830: 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72 65  r of bytes to re
3840: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20  trieve</param>. 
3850: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
3860: 54 68 65 20 61 63 74 75 61 6c 20 6e 75 6d 62 65  The actual numbe
3870: 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
3880: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 74 68 65  written into the
3890: 20 61 72 72 61 79 3c 2f 72 65 74 75 72 6e 73 3e   array</returns>
38a0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b  .    /// <remark
38b0: 73 3e 0a 20 20 20 20 2f 2f 2f 20 54 6f 20 64 65  s>.    /// To de
38c0: 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62  termine the numb
38d0: 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
38e0: 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20   in the column, 
38f0: 70 61 73 73 20 61 20 6e 75 6c 6c 20 76 61 6c 75  pass a null valu
3900: 65 20 66 6f 72 20 74 68 65 20 62 75 66 66 65 72  e for the buffer
3910: 2e 20 20 54 68 65 20 74 6f 74 61 6c 20 6c 65 6e  .  The total len
3920: 67 74 68 20 77 69 6c 6c 20 62 65 20 72 65 74 75  gth will be retu
3930: 72 6e 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f  rned..    /// </
3940: 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20 70 75 62  remarks>.    pub
3950: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  lic override lon
3960: 67 20 47 65 74 43 68 61 72 73 28 69 6e 74 20 69  g GetChars(int i
3970: 2c 20 6c 6f 6e 67 20 66 69 65 6c 64 6f 66 66 73  , long fieldoffs
3980: 65 74 2c 20 63 68 61 72 5b 5d 20 62 75 66 66 65  et, char[] buffe
3990: 72 2c 20 69 6e 74 20 62 75 66 66 65 72 6f 66 66  r, int bufferoff
39a0: 73 65 74 2c 20 69 6e 74 20 6c 65 6e 67 74 68 29  set, int length)
39b0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68  .    {..      Ch
39c0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a  eckDisposed();..
39d0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56        if (i >= V
39e0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
39f0: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
3a00: 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65  null).        re
3a10: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
3a20: 74 43 68 61 72 73 28 69 20 2d 20 56 69 73 69 62  tChars(i - Visib
3a30: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20 66 69  leFieldCount, fi
3a40: 65 6c 64 6f 66 66 73 65 74 2c 20 62 75 66 66 65  eldoffset, buffe
3a50: 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c  r, bufferoffset,
3a60: 20 6c 65 6e 67 74 68 29 3b 0a 0a 20 20 20 20 20   length);..     
3a70: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
3a80: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 3b 0a 20  bType.String);. 
3a90: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
3aa0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
3ab0: 6c 2e 47 65 74 43 68 61 72 73 28 5f 61 63 74 69  l.GetChars(_acti
3ac0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20  veStatement, i, 
3ad0: 28 69 6e 74 29 66 69 65 6c 64 6f 66 66 73 65 74  (int)fieldoffset
3ae0: 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72  , buffer, buffer
3af0: 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b  offset, length);
3b00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
3b10: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
3b20: 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20  / Retrieves the 
3b30: 6e 61 6d 65 20 6f 66 20 74 68 65 20 62 61 63 6b  name of the back
3b40: 2d 65 6e 64 20 64 61 74 61 74 79 70 65 20 6f 66  -end datatype of
3b50: 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20   the column.    
3b60: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
3b70: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3b80: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
3b90: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
3ba0: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
3bb0: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
3bc0: 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75  rns>string</retu
3bd0: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
3be0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
3bf0: 47 65 74 44 61 74 61 54 79 70 65 4e 61 6d 65 28  GetDataTypeName(
3c00: 69 6e 74 20 69 29 0a 20 20 20 20 7b 0d 0a 20 20  int i).    {..  
3c10: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
3c20: 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28  d();..      if (
3c30: 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c  i >= VisibleFiel
3c40: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
3c50: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  fo != null).    
3c60: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
3c70: 6e 66 6f 2e 47 65 74 44 61 74 61 54 79 70 65 4e  nfo.GetDataTypeN
3c80: 61 6d 65 28 69 20 2d 20 56 69 73 69 62 6c 65 46  ame(i - VisibleF
3c90: 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20  ieldCount);..   
3ca0: 20 20 20 53 51 4c 69 74 65 54 79 70 65 20 74 79     SQLiteType ty
3cb0: 70 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70  p = GetSQLiteTyp
3cc0: 65 28 69 29 3b 0a 20 20 20 20 20 20 69 66 20 28  e(i);.      if (
3cd0: 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79  typ.Type == DbTy
3ce0: 70 65 2e 4f 62 6a 65 63 74 29 20 72 65 74 75 72  pe.Object) retur
3cf0: 6e 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  n SQLiteConvert.
3d00: 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65  SQLiteTypeToType
3d10: 28 74 79 70 29 2e 4e 61 6d 65 3b 0a 20 20 20 20  (typ).Name;.    
3d20: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
3d30: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43  Statement._sql.C
3d40: 6f 6c 75 6d 6e 54 79 70 65 28 5f 61 63 74 69 76  olumnType(_activ
3d50: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 6f  eStatement, i, o
3d60: 75 74 20 74 79 70 2e 41 66 66 69 6e 69 74 79 29  ut typ.Affinity)
3d70: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
3d80: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
3d90: 2f 2f 20 52 65 74 72 69 65 76 65 20 74 68 65 20  // Retrieve the 
3da0: 63 6f 6c 75 6d 6e 20 61 73 20 61 20 64 61 74 65  column as a date
3db0: 2f 74 69 6d 65 20 76 61 6c 75 65 0a 20 20 20 20  /time value.    
3dc0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
3dd0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3de0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
3df0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
3e00: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
3e10: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
3e20: 72 6e 73 3e 44 61 74 65 54 69 6d 65 3c 2f 72 65  rns>DateTime</re
3e30: 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69  turns>.    publi
3e40: 63 20 6f 76 65 72 72 69 64 65 20 44 61 74 65 54  c override DateT
3e50: 69 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65 28  ime GetDateTime(
3e60: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
3e70: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
3e80: 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20  ed();..      if 
3e90: 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65  (i >= VisibleFie
3ea0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
3eb0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
3ec0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
3ed0: 49 6e 66 6f 2e 47 65 74 44 61 74 65 54 69 6d 65  Info.GetDateTime
3ee0: 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c  (i - VisibleFiel
3ef0: 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20  dCount);..      
3f00: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
3f10: 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29 3b 0a  Type.DateTime);.
3f20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
3f30: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
3f40: 71 6c 2e 47 65 74 44 61 74 65 54 69 6d 65 28 5f  ql.GetDateTime(_
3f50: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
3f60: 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   i);.    }..    
3f70: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
3f80: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 20 74    /// Retrieve t
3f90: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 64  he column as a d
3fa0: 65 63 69 6d 61 6c 20 76 61 6c 75 65 0a 20 20 20  ecimal value.   
3fb0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
3fc0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
3fd0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
3fe0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  x of the column 
3ff0: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
4000: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
4010: 75 72 6e 73 3e 64 65 63 69 6d 61 6c 3c 2f 72 65  urns>decimal</re
4020: 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69  turns>.    publi
4030: 63 20 6f 76 65 72 72 69 64 65 20 64 65 63 69 6d  c override decim
4040: 61 6c 20 47 65 74 44 65 63 69 6d 61 6c 28 69 6e  al GetDecimal(in
4050: 74 20 69 29 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t i).    {..    
4060: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
4070: 29 3b 0a 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 44 65 63 69 6d 61 6c 28 69 20 2d  o.GetDecimal(i -
40d0: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
40e0: 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69  nt);..      Veri
40f0: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
4100: 2e 44 65 63 69 6d 61 6c 29 3b 0a 20 20 20 20 20  .Decimal);.     
4110: 20 72 65 74 75 72 6e 20 44 65 63 69 6d 61 6c 2e   return Decimal.
4120: 50 61 72 73 65 28 5f 61 63 74 69 76 65 53 74 61  Parse(_activeSta
4130: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54  tement._sql.GetT
4140: 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ext(_activeState
4150: 6d 65 6e 74 2c 20 69 29 2c 20 4e 75 6d 62 65 72  ment, i), Number
4160: 53 74 79 6c 65 73 2e 41 6c 6c 6f 77 44 65 63 69  Styles.AllowDeci
4170: 6d 61 6c 50 6f 69 6e 74 20 7c 20 4e 75 6d 62 65  malPoint | Numbe
4180: 72 53 74 79 6c 65 73 2e 41 6c 6c 6f 77 45 78 70  rStyles.AllowExp
4190: 6f 6e 65 6e 74 20 7c 20 4e 75 6d 62 65 72 53 74  onent | NumberSt
41a0: 79 6c 65 73 2e 41 6c 6c 6f 77 4c 65 61 64 69 6e  yles.AllowLeadin
41b0: 67 53 69 67 6e 2c 20 43 75 6c 74 75 72 65 49 6e  gSign, CultureIn
41c0: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
41d0: 75 72 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ure);.    }..   
41e0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
41f0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
4200: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 64  he column as a d
4210: 6f 75 62 6c 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ouble.    /// </
4220: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
4230: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
4240: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
4250: 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72  e column to retr
4260: 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  ieve</param>.   
4270: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 64 6f   /// <returns>do
4280: 75 62 6c 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  uble</returns>. 
4290: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
42a0: 64 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75  de double GetDou
42b0: 62 6c 65 28 69 6e 74 20 69 29 0a 20 20 20 20 7b  ble(int i).    {
42c0: 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73  ..      CheckDis
42d0: 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20  posed();..      
42e0: 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65  if (i >= Visible
42f0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
4300: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a  eyInfo != null).
4310: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
4320: 6b 65 79 49 6e 66 6f 2e 47 65 74 44 6f 75 62 6c  keyInfo.GetDoubl
4330: 65 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65  e(i - VisibleFie
4340: 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20  ldCount);..     
4350: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
4360: 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b 0a 20  bType.Double);. 
4370: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
4380: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
4390: 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f 61 63 74  l.GetDouble(_act
43a0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
43b0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
43c0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
43d0: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 2e  // Returns the .
43e0: 4e 45 54 20 74 79 70 65 20 6f 66 20 61 20 67 69  NET type of a gi
43f0: 76 65 6e 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2f  ven column.    /
4400: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
4410: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4420: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
4430: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
4440: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
4450: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
4460: 6e 73 3e 54 79 70 65 3c 2f 72 65 74 75 72 6e 73  ns>Type</returns
4470: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
4480: 72 72 69 64 65 20 54 79 70 65 20 47 65 74 46 69  rride Type GetFi
4490: 65 6c 64 54 79 70 65 28 69 6e 74 20 69 29 0a 20  eldType(int i). 
44a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63     {..      Chec
44b0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20  kDisposed();..  
44c0: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73      if (i >= Vis
44d0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
44e0: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
44f0: 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74 75  ll).        retu
4500: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 46  rn _keyInfo.GetF
4510: 69 65 6c 64 54 79 70 65 28 69 20 2d 20 56 69 73  ieldType(i - Vis
4520: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
4530: 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ..      return S
4540: 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c  QLiteConvert.SQL
4550: 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 47 65  iteTypeToType(Ge
4560: 74 53 51 4c 69 74 65 54 79 70 65 28 69 29 29 3b  tSQLiteType(i));
4570: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
4580: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
4590: 2f 20 52 65 74 75 72 6e 73 20 61 20 63 6f 6c 75  / Returns a colu
45a0: 6d 6e 20 61 73 20 61 20 66 6c 6f 61 74 20 76 61  mn as a float va
45b0: 6c 75 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  lue.    /// </su
45c0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
45d0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
45e0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
45f0: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
4600: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
4610: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 66 6c 6f 61  // <returns>floa
4620: 74 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  t</returns>.    
4630: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
4640: 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61 74 28 69  float GetFloat(i
4650: 6e 74 20 69 29 0a 20 20 20 20 7b 0d 0a 20 20 20  nt i).    {..   
4660: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
4670: 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 69  ();..      if (i
4680: 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64   >= VisibleField
4690: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
46a0: 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  o != null).     
46b0: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
46c0: 66 6f 2e 47 65 74 46 6c 6f 61 74 28 69 20 2d 20  fo.GetFloat(i - 
46d0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
46e0: 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66  t);..      Verif
46f0: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
4700: 53 69 6e 67 6c 65 29 3b 0a 20 20 20 20 20 20 72  Single);.      r
4710: 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f  eturn Convert.To
4720: 53 69 6e 67 6c 65 28 5f 61 63 74 69 76 65 53 74  Single(_activeSt
4730: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
4740: 44 6f 75 62 6c 65 28 5f 61 63 74 69 76 65 53 74  Double(_activeSt
4750: 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20  atement, i));.  
4760: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
4770: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
4780: 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d  eturns the colum
4790: 6e 20 61 73 20 61 20 47 75 69 64 0a 20 20 20 20  n as a Guid.    
47a0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
47b0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
47c0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
47d0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
47e0: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
47f0: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
4800: 72 6e 73 3e 47 75 69 64 3c 2f 72 65 74 75 72 6e  rns>Guid</return
4810: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
4820: 65 72 72 69 64 65 20 47 75 69 64 20 47 65 74 47  erride Guid GetG
4830: 75 69 64 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  uid(int i)..    
4840: 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69  {..      CheckDi
4850: 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20  sposed();..     
4860: 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c   if (i >= Visibl
4870: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
4880: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
4890: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
48a0: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 47 75 69 64  _keyInfo.GetGuid
48b0: 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c  (i - VisibleFiel
48c0: 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20  dCount);..      
48d0: 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66  TypeAffinity aff
48e0: 69 6e 69 74 79 20 3d 20 56 65 72 69 66 79 54 79  inity = VerifyTy
48f0: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 47 75 69  pe(i, DbType.Gui
4900: 64 29 3b 0a 20 20 20 20 20 20 69 66 20 28 61 66  d);.      if (af
4910: 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66  finity == TypeAf
4920: 66 69 6e 69 74 79 2e 42 6c 6f 62 29 0a 20 20 20  finity.Blob).   
4930: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 62 79 74     {.        byt
4940: 65 5b 5d 20 62 75 66 66 65 72 20 3d 20 6e 65 77  e[] buffer = new
4950: 20 62 79 74 65 5b 31 36 5d 3b 0a 20 20 20 20 20   byte[16];.     
4960: 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d     _activeStatem
4970: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65  ent._sql.GetByte
4980: 73 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  s(_activeStateme
4990: 6e 74 2c 20 69 2c 20 30 2c 20 62 75 66 66 65 72  nt, i, 0, buffer
49a0: 2c 20 30 2c 20 31 36 29 3b 0a 20 20 20 20 20 20  , 0, 16);.      
49b0: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
49c0: 64 28 62 75 66 66 65 72 29 3b 0a 20 20 20 20 20  d(buffer);.     
49d0: 20 7d 0a 20 20 20 20 20 20 65 6c 73 65 0a 20 20   }.      else.  
49e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
49f0: 20 47 75 69 64 28 5f 61 63 74 69 76 65 53 74 61   Guid(_activeSta
4a00: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54  tement._sql.GetT
4a10: 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ext(_activeState
4a20: 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20 20 20 7d  ment, i));.    }
4a30: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
4a40: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  ry>.    /// Retu
4a50: 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  rns the column a
4a60: 73 20 61 20 73 68 6f 72 74 0a 20 20 20 20 2f 2f  s a short.    //
4a70: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
4a80: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4a90: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
4aa0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
4ab0: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
4ac0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
4ad0: 73 3e 49 6e 74 31 36 3c 2f 72 65 74 75 72 6e 73  s>Int16</returns
4ae0: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
4af0: 72 72 69 64 65 20 49 6e 74 31 36 20 47 65 74 49  rride Int16 GetI
4b00: 6e 74 31 36 28 69 6e 74 20 69 29 0d 0a 20 20 20  nt16(int i)..   
4b10: 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44   {..      CheckD
4b20: 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20  isposed();..    
4b30: 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62    if (i >= Visib
4b40: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
4b50: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
4b60: 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ).        return
4b70: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49 6e 74   _keyInfo.GetInt
4b80: 31 36 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69  16(i - VisibleFi
4b90: 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20  eldCount);..    
4ba0: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
4bb0: 44 62 54 79 70 65 2e 49 6e 74 31 36 29 3b 0a 20  DbType.Int16);. 
4bc0: 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
4bd0: 65 72 74 2e 54 6f 49 6e 74 31 36 28 5f 61 63 74  ert.ToInt16(_act
4be0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
4bf0: 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74 69  l.GetInt32(_acti
4c00: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29  veStatement, i))
4c10: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
4c20: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
4c30: 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65  // Retrieves the
4c40: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 69 6e   column as an in
4c50: 74 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  t.    /// </summ
4c60: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
4c70: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
4c80: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
4c90: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
4ca0: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
4cb0: 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74 33 32 3c   <returns>Int32<
4cc0: 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75  /returns>.    pu
4cd0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e  blic override In
4ce0: 74 33 32 20 47 65 74 49 6e 74 33 32 28 69 6e 74  t32 GetInt32(int
4cf0: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
4d00: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
4d10: 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 69 20  );..      if (i 
4d20: 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43  >= VisibleFieldC
4d30: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
4d40: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
4d50: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
4d60: 6f 2e 47 65 74 49 6e 74 33 32 28 69 20 2d 20 56  o.GetInt32(i - V
4d70: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
4d80: 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66 79  );..      Verify
4d90: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 49  Type(i, DbType.I
4da0: 6e 74 33 32 29 3b 0a 20 20 20 20 20 20 72 65 74  nt32);.      ret
4db0: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
4dc0: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74  ment._sql.GetInt
4dd0: 33 32 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  32(_activeStatem
4de0: 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a  ent, i);.    }..
4df0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
4e00: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  >.    /// Retrie
4e10: 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  ves the column a
4e20: 73 20 61 20 6c 6f 6e 67 0a 20 20 20 20 2f 2f 2f  s a long.    ///
4e30: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
4e40: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
4e50: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
4e60: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72   the column to r
4e70: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a  etrieve</param>.
4e80: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
4e90: 3e 49 6e 74 36 34 3c 2f 72 65 74 75 72 6e 73 3e  >Int64</returns>
4ea0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
4eb0: 72 69 64 65 20 49 6e 74 36 34 20 47 65 74 49 6e  ride Int64 GetIn
4ec0: 74 36 34 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  t64(int i)..    
4ed0: 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69  {..      CheckDi
4ee0: 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20  sposed();..     
4ef0: 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c   if (i >= Visibl
4f00: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
4f10: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
4f20: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4f30: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49 6e 74 36  _keyInfo.GetInt6
4f40: 34 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65  4(i - VisibleFie
4f50: 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20  ldCount);..     
4f60: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
4f70: 62 54 79 70 65 2e 49 6e 74 36 34 29 3b 0a 20 20  bType.Int64);.  
4f80: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
4f90: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
4fa0: 2e 47 65 74 49 6e 74 36 34 28 5f 61 63 74 69 76  .GetInt64(_activ
4fb0: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a  eStatement, i);.
4fc0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
4fd0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
4fe0: 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20 6e   Retrieves the n
4ff0: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ame of the colum
5000: 6e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  n.    /// </summ
5010: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
5020: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
5030: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
5040: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
5050: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
5060: 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67   <returns>string
5070: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
5080: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73  ublic override s
5090: 74 72 69 6e 67 20 47 65 74 4e 61 6d 65 28 69 6e  tring GetName(in
50a0: 74 20 69 29 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t i).    {..    
50b0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
50c0: 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 69 20  );..      if (i 
50d0: 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43  >= VisibleFieldC
50e0: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
50f0: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
5100: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
5110: 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 56 69  o.GetName(i - Vi
5120: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
5130: 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
5140: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
5150: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65  ._sql.ColumnName
5160: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
5170: 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  t, i);.    }..  
5180: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
5190: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
51a0: 73 20 74 68 65 20 69 20 6f 66 20 61 20 63 6f 6c  s the i of a col
51b0: 75 6d 6e 2c 20 67 69 76 65 6e 20 69 74 73 20 6e  umn, given its n
51c0: 61 6d 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ame.    /// </su
51d0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
51e0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65  param name="name
51f0: 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  ">The name of th
5200: 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72  e column to retr
5210: 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  ieve</param>.   
5220: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
5230: 65 20 69 6e 74 20 69 20 6f 66 20 74 68 65 20 63  e int i of the c
5240: 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0a  olumn</returns>.
5250: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
5260: 69 64 65 20 69 6e 74 20 47 65 74 4f 72 64 69 6e  ide int GetOrdin
5270: 61 6c 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0a  al(string name).
5280: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65      {..      Che
5290: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 20 20  ckDisposed();.  
52a0: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
52b0: 29 3b 0a 0a 20 20 20 20 20 20 69 6e 74 20 72 20  );..      int r 
52c0: 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  = _activeStateme
52d0: 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 49 6e  nt._sql.ColumnIn
52e0: 64 65 78 28 5f 61 63 74 69 76 65 53 74 61 74 65  dex(_activeState
52f0: 6d 65 6e 74 2c 20 6e 61 6d 65 29 3b 0a 20 20 20  ment, name);.   
5300: 20 20 20 69 66 20 28 72 20 3d 3d 20 2d 31 20 26     if (r == -1 &
5310: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
5320: 6c 6c 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  ll).      {.    
5330: 20 20 20 20 72 20 3d 20 5f 6b 65 79 49 6e 66 6f      r = _keyInfo
5340: 2e 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d 65  .GetOrdinal(name
5350: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 72  );.        if (r
5360: 20 3e 20 2d 31 29 20 72 20 2b 3d 20 56 69 73 69   > -1) r += Visi
5370: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 3b 0a 20  bleFieldCount;. 
5380: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 65       }..      re
5390: 74 75 72 6e 20 72 3b 0a 20 20 20 20 7d 0a 0a 20  turn r;.    }.. 
53a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
53b0: 0a 20 20 20 20 2f 2f 2f 20 53 63 68 65 6d 61 20  .    /// Schema 
53c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 53  information in S
53d0: 51 4c 69 74 65 20 69 73 20 64 69 66 66 69 63 75  QLite is difficu
53e0: 6c 74 20 74 6f 20 6d 61 70 20 69 6e 74 6f 20 2e  lt to map into .
53f0: 4e 45 54 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  NET conventions,
5400: 20 73 6f 20 61 20 6c 6f 74 20 6f 66 20 77 6f 72   so a lot of wor
5410: 6b 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 0a 20  k must be done. 
5420: 20 20 20 2f 2f 2f 20 74 6f 20 67 61 74 68 65 72     /// to gather
5430: 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 69   the necessary i
5440: 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 6f 20 69 74  nformation so it
5450: 20 63 61 6e 20 62 65 20 72 65 70 72 65 73 65 6e   can be represen
5460: 74 65 64 20 69 6e 20 61 6e 20 41 44 4f 2e 4e 45  ted in an ADO.NE
5470: 54 20 6d 61 6e 6e 65 72 2e 0a 20 20 20 20 2f 2f  T manner..    //
5480: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
5490: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
54a0: 74 75 72 6e 73 20 61 20 44 61 74 61 54 61 62 6c  turns a DataTabl
54b0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
54c0: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
54d0: 69 6f 6e 20 66 6f 72 20 74 68 65 20 61 63 74 69  ion for the acti
54e0: 76 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  ve SELECT statem
54f0: 65 6e 74 20 62 65 69 6e 67 20 70 72 6f 63 65 73  ent being proces
5500: 73 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  sed.</returns>. 
5510: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
5520: 64 65 20 44 61 74 61 54 61 62 6c 65 20 47 65 74  de DataTable Get
5530: 53 63 68 65 6d 61 54 61 62 6c 65 28 29 0a 20 20  SchemaTable().  
5540: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
5550: 44 69 73 70 6f 73 65 64 28 29 3b 0a 20 20 20 20  Disposed();.    
5560: 20 20 72 65 74 75 72 6e 20 47 65 74 53 63 68 65    return GetSche
5570: 6d 61 54 61 62 6c 65 28 74 72 75 65 2c 20 66 61  maTable(true, fa
5580: 6c 73 65 29 3b 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lse);.    }.... 
5590: 20 20 20 70 72 69 76 61 74 65 20 63 6c 61 73 73     private class
55a0: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 3a 20   ColumnParent : 
55b0: 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61 72 65  IEqualityCompare
55c0: 72 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 0d  r<ColumnParent>.
55d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
55e0: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 61  public string Da
55f0: 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20 20 20  tabaseName;..   
5600: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
5610: 6e 67 20 54 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20  ng TableName;.. 
5620: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
5630: 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 3b  ring ColumnName;
5640: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
5650: 69 63 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28  ic ColumnParent(
5660: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
5670: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
5680: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
5690: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70    }....        p
56a0: 75 62 6c 69 63 20 43 6f 6c 75 6d 6e 50 61 72 65  ublic ColumnPare
56b0: 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt(..           
56c0: 20 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65   string database
56d0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
56e0: 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c 65 4e     string tableN
56f0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
5700: 20 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e    string columnN
5710: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
5720: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5730: 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20  : this()..      
5740: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5750: 20 74 68 69 73 2e 44 61 74 61 62 61 73 65 4e 61   this.DatabaseNa
5760: 6d 65 20 3d 20 64 61 74 61 62 61 73 65 4e 61 6d  me = databaseNam
5770: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
5780: 74 68 69 73 2e 54 61 62 6c 65 4e 61 6d 65 20 3d  this.TableName =
5790: 20 74 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20   tableName;..   
57a0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 43 6f           this.Co
57b0: 6c 75 6d 6e 4e 61 6d 65 20 3d 20 63 6f 6c 75 6d  lumnName = colum
57c0: 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  nName;..        
57d0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  }....        #re
57e0: 67 69 6f 6e 20 49 45 71 75 61 6c 69 74 79 43 6f  gion IEqualityCo
57f0: 6d 70 61 72 65 72 3c 43 6f 6c 75 6d 6e 50 61 72  mparer<ColumnPar
5800: 65 6e 74 3e 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ent> Members..  
5810: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
5820: 6c 20 45 71 75 61 6c 73 28 43 6f 6c 75 6d 6e 50  l Equals(ColumnP
5830: 61 72 65 6e 74 20 78 2c 20 43 6f 6c 75 6d 6e 50  arent x, ColumnP
5840: 61 72 65 6e 74 20 79 29 0d 0a 20 20 20 20 20 20  arent y)..      
5850: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5860: 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29   if ((x == null)
5870: 20 26 26 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29   && (y == null))
5880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
58a0: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
58b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
58c0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
58d0: 66 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c  f ((x == null) |
58e0: 7c 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  | (y == null))..
58f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5910: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
5920: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5930: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
5940: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5960: 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
5970: 28 78 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 2c  (x.DatabaseName,
5980: 20 79 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 2c   y.DatabaseName,
5990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
59a0: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
59b0: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
59c0: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a  alIgnoreCase))..
59d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
59f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
5a00: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
5a10: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5a20: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
5a30: 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 78 2e  String.Equals(x.
5a40: 54 61 62 6c 65 4e 61 6d 65 2c 20 79 2e 54 61 62  TableName, y.Tab
5a50: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a70: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
5a80: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
5a90: 61 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ase))..         
5aa0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5ac0: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
5ae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5af0: 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71    if (!String.Eq
5b00: 75 61 6c 73 28 78 2e 43 6f 6c 75 6d 6e 4e 61 6d  uals(x.ColumnNam
5b10: 65 2c 20 79 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  e, y.ColumnName,
5b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b30: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
5b40: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
5b50: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a  alIgnoreCase))..
5b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5b80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
5b90: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
5ba0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5bb0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5bc0: 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
5bd0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5be0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  }....        pub
5bf0: 6c 69 63 20 69 6e 74 20 47 65 74 48 61 73 68 43  lic int GetHashC
5c00: 6f 64 65 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ode(ColumnParent
5c10: 20 6f 62 6a 29 0d 0a 20 20 20 20 20 20 20 20 7b   obj)..        {
5c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
5c30: 74 20 72 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d  t result = 0;...
5c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
5c50: 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26  ((obj != null) &
5c60: 26 20 28 6f 62 6a 2e 44 61 74 61 62 61 73 65 4e  & (obj.DatabaseN
5c70: 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ame != null)).. 
5c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5c90: 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e 44 61 74  esult ^= obj.Dat
5ca0: 61 62 61 73 65 4e 61 6d 65 2e 47 65 74 48 61 73  abaseName.GetHas
5cb0: 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  hCode();....    
5cc0: 20 20 20 20 20 20 20 20 69 66 20 28 28 6f 62 6a          if ((obj
5cd0: 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28 6f 62   != null) && (ob
5ce0: 6a 2e 54 61 62 6c 65 4e 61 6d 65 20 21 3d 20 6e  j.TableName != n
5cf0: 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
5d00: 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 5e 3d         result ^=
5d10: 20 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d 65 2e 47   obj.TableName.G
5d20: 65 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d  etHashCode();...
5d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
5d40: 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26  ((obj != null) &
5d50: 26 20 28 6f 62 6a 2e 43 6f 6c 75 6d 6e 4e 61 6d  & (obj.ColumnNam
5d60: 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  e != null))..   
5d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
5d80: 75 6c 74 20 5e 3d 20 6f 62 6a 2e 43 6f 6c 75 6d  ult ^= obj.Colum
5d90: 6e 4e 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64  nName.GetHashCod
5da0: 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
5db0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
5dc0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
5dd0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
5de0: 6e 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  n..    }....    
5df0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
5e00: 6f 69 64 20 47 65 74 53 74 61 74 65 6d 65 6e 74  oid GetStatement
5e10: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 73 28 0d 0a  ColumnParents(..
5e20: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
5e30: 73 65 20 73 71 6c 2c 0d 0a 20 20 20 20 20 20 20  se sql,..       
5e40: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
5e50: 20 73 74 6d 74 2c 0d 0a 20 20 20 20 20 20 20 20   stmt,..        
5e60: 69 6e 74 20 66 69 65 6c 64 43 6f 75 6e 74 2c 0d  int fieldCount,.
5e70: 0a 20 20 20 20 20 20 20 20 72 65 66 20 44 69 63  .        ref Dic
5e80: 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61  tionary<ColumnPa
5e90: 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e  rent, List<int>>
5ea0: 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73   parentToColumns
5eb0: 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 44  ,..        ref D
5ec0: 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74 2c 20 43  ictionary<int, C
5ed0: 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20 63 6f 6c  olumnParent> col
5ee0: 75 6d 6e 54 6f 50 61 72 65 6e 74 0d 0a 20 20 20  umnToParent..   
5ef0: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
5f00: 20 20 20 20 20 20 20 69 66 20 28 70 61 72 65 6e         if (paren
5f10: 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 3d 20 6e 75  tToColumns == nu
5f20: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5f30: 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73   parentToColumns
5f40: 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72   = new Dictionar
5f50: 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20  y<ColumnParent, 
5f60: 4c 69 73 74 3c 69 6e 74 3e 3e 28 0d 0a 20 20 20  List<int>>(..   
5f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
5f80: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 29 29   ColumnParent())
5f90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
5fa0: 28 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20  (columnToParent 
5fb0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
5fc0: 20 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f 50 61        columnToPa
5fd0: 72 65 6e 74 20 3d 20 6e 65 77 20 44 69 63 74 69  rent = new Dicti
5fe0: 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d  onary<int, Colum
5ff0: 6e 50 61 72 65 6e 74 3e 28 29 3b 0d 0a 0d 0a 20  nParent>();.... 
6000: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
6010: 6e 20 3d 20 30 3b 20 6e 20 3c 20 66 69 65 6c 64  n = 0; n < field
6020: 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0d 0a 20 20 20  Count; n++)..   
6030: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6040: 20 20 20 20 73 74 72 69 6e 67 20 64 61 74 61 62      string datab
6050: 61 73 65 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f  aseName = sql.Co
6060: 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65  lumnDatabaseName
6070: 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a 20 20 20 20  (stmt, n);..    
6080: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
6090: 61 62 6c 65 4e 61 6d 65 20 3d 20 73 71 6c 2e 43  ableName = sql.C
60a0: 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 73  olumnTableName(s
60b0: 74 6d 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20  tmt, n);..      
60c0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6c        string col
60d0: 75 6d 6e 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f  umnName = sql.Co
60e0: 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65  lumnOriginalName
60f0: 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a 0d 0a 20 20  (stmt, n);....  
6100: 20 20 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e            Column
6110: 50 61 72 65 6e 74 20 6b 65 79 20 3d 20 6e 65 77  Parent key = new
6120: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 64 61   ColumnParent(da
6130: 74 61 62 61 73 65 4e 61 6d 65 2c 20 74 61 62 6c  tabaseName, tabl
6140: 65 4e 61 6d 65 2c 20 6e 75 6c 6c 29 3b 0d 0a 20  eName, null);.. 
6150: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6c 75 6d             Colum
6160: 6e 50 61 72 65 6e 74 20 76 61 6c 75 65 20 3d 20  nParent value = 
6170: 6e 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  new ColumnParent
6180: 28 64 61 74 61 62 61 73 65 4e 61 6d 65 2c 20 74  (databaseName, t
6190: 61 62 6c 65 4e 61 6d 65 2c 20 63 6f 6c 75 6d 6e  ableName, column
61a0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
61b0: 20 20 20 20 20 20 69 66 20 28 21 70 61 72 65 6e        if (!paren
61c0: 74 54 6f 43 6f 6c 75 6d 6e 73 2e 43 6f 6e 74 61  tToColumns.Conta
61d0: 69 6e 73 4b 65 79 28 6b 65 79 29 29 0d 0a 20 20  insKey(key))..  
61e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
61f0: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 41 64  rentToColumns.Ad
6200: 64 28 6b 65 79 2c 20 6e 65 77 20 4c 69 73 74 3c  d(key, new List<
6210: 69 6e 74 3e 28 6e 65 77 20 69 6e 74 5b 5d 20 7b  int>(new int[] {
6220: 20 6e 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20   n }));..       
6230: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
6240: 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65 6e             paren
6250: 74 54 6f 43 6f 6c 75 6d 6e 73 5b 6b 65 79 5d 2e  tToColumns[key].
6260: 41 64 64 28 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  Add(n);....     
6270: 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f 50         columnToP
6280: 61 72 65 6e 74 2e 41 64 64 28 6e 2c 20 76 61 6c  arent.Add(n, val
6290: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
62a0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 65  .    }..    inte
62b0: 72 6e 61 6c 20 44 61 74 61 54 61 62 6c 65 20 47  rnal DataTable G
62c0: 65 74 53 63 68 65 6d 61 54 61 62 6c 65 28 62 6f  etSchemaTable(bo
62d0: 6f 6c 20 77 61 6e 74 55 6e 69 71 75 65 49 6e 66  ol wantUniqueInf
62e0: 6f 2c 20 62 6f 6f 6c 20 77 61 6e 74 44 65 66 61  o, bool wantDefa
62f0: 75 6c 74 56 61 6c 75 65 29 0a 20 20 20 20 7b 0a  ultValue).    {.
6300: 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65        CheckClose
6310: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 2f 2f 0d  d();....     //.
6320: 0a 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a  .     // BUGFIX:
6330: 20 57 65 20 6e 65 65 64 20 74 6f 20 71 75 69 63   We need to quic
6340: 6b 6c 79 20 73 63 61 6e 20 61 6c 6c 20 74 68 65  kly scan all the
6350: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
6360: 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 2f 2f 20  urrent..     // 
6370: 20 20 20 20 20 20 20 20 22 72 65 73 75 6c 74 20          "result 
6380: 73 65 74 22 20 74 6f 20 73 65 65 20 68 6f 77 20  set" to see how 
6390: 6d 61 6e 79 20 64 69 73 74 69 6e 63 74 20 74 61  many distinct ta
63a0: 62 6c 65 73 20 61 72 65 20 61 63 74 75 61 6c 6c  bles are actuall
63b0: 79 0d 0a 20 20 20 20 20 2f 2f 20 20 20 20 20 20  y..     //      
63c0: 20 20 20 69 6e 76 6f 6c 76 65 64 2e 20 20 54 68     involved.  Th
63d0: 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  is information i
63e0: 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74  s necessary so t
63f0: 68 61 74 20 73 6f 6d 65 0d 0a 20 20 20 20 20 2f  hat some..     /
6400: 2f 20 20 20 20 20 20 20 20 20 69 6e 74 65 6c 6c  /         intell
6410: 69 67 65 6e 74 20 64 65 63 69 73 69 6f 6e 73 20  igent decisions 
6420: 63 61 6e 20 62 65 20 6d 61 64 65 20 77 68 65 6e  can be made when
6430: 20 63 6f 6e 73 74 72 75 63 74 69 6e 67 20 74 68   constructing th
6440: 65 0d 0a 20 20 20 20 20 2f 2f 20 20 20 20 20 20  e..     //      
6450: 20 20 20 6d 65 74 61 64 61 74 61 20 62 65 6c 6f     metadata belo
6460: 77 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  w.  For example,
6470: 20 77 65 20 6e 65 65 64 20 74 6f 20 62 65 20 76   we need to be v
6480: 65 72 79 20 63 61 72 65 66 75 6c 0d 0a 20 20 20  ery careful..   
6490: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 61 62 6f    //         abo
64a0: 75 74 20 66 6c 61 67 67 69 6e 67 20 61 20 70 61  ut flagging a pa
64b0: 72 74 69 63 75 6c 61 72 20 63 6f 6c 75 6d 6e 20  rticular column 
64c0: 61 73 20 22 75 6e 69 71 75 65 22 20 6a 75 73 74  as "unique" just
64d0: 0d 0a 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  ..     //       
64e0: 20 20 62 65 63 61 75 73 65 20 69 74 20 77 61 73    because it was
64f0: 20 69 6e 20 69 74 73 20 6f 72 69 67 69 6e 61 6c   in its original
6500: 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61   underlying data
6510: 62 61 73 65 20 74 61 62 6c 65 0d 0a 20 20 20 20  base table..    
6520: 20 2f 2f 20 20 20 20 20 20 20 20 20 69 66 20 74   //         if t
6530: 68 65 72 65 20 61 72 65 20 6e 6f 77 20 6d 75 6c  here are now mul
6540: 74 69 70 6c 65 20 74 61 62 6c 65 73 20 69 6e 76  tiple tables inv
6550: 6f 6c 76 65 64 20 69 6e 20 74 68 65 0d 0a 20 20  olved in the..  
6560: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 22 72     //         "r
6570: 65 73 75 6c 74 20 73 65 74 22 2e 20 20 53 65 65  esult set".  See
6580: 20 74 69 63 6b 65 74 20 5b 37 65 33 66 61 39 33   ticket [7e3fa93
6590: 37 34 34 5d 20 66 6f 72 20 6d 6f 72 65 20 64 65  744] for more de
65a0: 74 61 69 6c 65 64 0d 0a 20 20 20 20 20 2f 2f 20  tailed..     // 
65b0: 20 20 20 20 20 20 20 20 69 6e 66 6f 72 6d 61 74          informat
65c0: 69 6f 6e 2e 0d 0a 20 20 20 20 20 2f 2f 0d 0a 20  ion...     //.. 
65d0: 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79 3c       Dictionary<
65e0: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69  ColumnParent, Li
65f0: 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54  st<int>> parentT
6600: 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e 75 6c 6c 3b  oColumns = null;
6610: 0d 0a 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61  ..      Dictiona
6620: 72 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61  ry<int, ColumnPa
6630: 72 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54 6f 50 61  rent> columnToPa
6640: 72 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rent = null;....
6650: 20 20 20 20 20 20 47 65 74 53 74 61 74 65 6d 65        GetStateme
6660: 6e 74 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 73 28  ntColumnParents(
6670: 0a 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d  .          _comm
6680: 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  and.Connection._
6690: 73 71 6c 2c 20 5f 61 63 74 69 76 65 53 74 61 74  sql, _activeStat
66a0: 65 6d 65 6e 74 2c 20 5f 66 69 65 6c 64 43 6f 75  ement, _fieldCou
66b0: 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 72 65  nt,.          re
66c0: 66 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e  f parentToColumn
66d0: 73 2c 20 72 65 66 20 63 6f 6c 75 6d 6e 54 6f 50  s, ref columnToP
66e0: 61 72 65 6e 74 29 3b 0a 0a 20 20 20 20 20 20 44  arent);..      D
66f0: 61 74 61 54 61 62 6c 65 20 74 62 6c 20 3d 20 6e  ataTable tbl = n
6700: 65 77 20 44 61 74 61 54 61 62 6c 65 28 22 53 63  ew DataTable("Sc
6710: 68 65 6d 61 54 61 62 6c 65 22 29 3b 0a 20 20 20  hemaTable");.   
6720: 20 20 20 44 61 74 61 54 61 62 6c 65 20 74 62 6c     DataTable tbl
6730: 49 6e 64 65 78 65 73 20 3d 20 6e 75 6c 6c 3b 0a  Indexes = null;.
6740: 20 20 20 20 20 20 44 61 74 61 54 61 62 6c 65 20        DataTable 
6750: 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 3b  tblIndexColumns;
6760: 0a 20 20 20 20 20 20 44 61 74 61 52 6f 77 20 72  .      DataRow r
6770: 6f 77 3b 0a 20 20 20 20 20 20 73 74 72 69 6e 67  ow;.      string
6780: 20 74 65 6d 70 3b 0a 20 20 20 20 20 20 73 74 72   temp;.      str
6790: 69 6e 67 20 73 74 72 43 61 74 61 6c 6f 67 20 3d  ing strCatalog =
67a0: 20 22 22 3b 0a 20 20 20 20 20 20 73 74 72 69 6e   "";.      strin
67b0: 67 20 73 74 72 54 61 62 6c 65 20 3d 20 22 22 3b  g strTable = "";
67c0: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74  .      string st
67d0: 72 43 6f 6c 75 6d 6e 20 3d 20 22 22 3b 0a 0a 20  rColumn = "";.. 
67e0: 20 20 20 20 20 74 62 6c 2e 4c 6f 63 61 6c 65 20       tbl.Locale 
67f0: 3d 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  = CultureInfo.In
6800: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 3b 0a  variantCulture;.
6810: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
6820: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
6830: 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61  eColumn.ColumnNa
6840: 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e  me, typeof(Strin
6850: 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  g));.      tbl.C
6860: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
6870: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c  aTableColumn.Col
6880: 75 6d 6e 4f 72 64 69 6e 61 6c 2c 20 74 79 70 65  umnOrdinal, type
6890: 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 20 20  of(int));.      
68a0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
68b0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
68c0: 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 2c 20 74 79  n.ColumnSize, ty
68d0: 70 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20 20  peof(int));.    
68e0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
68f0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
6900: 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63 69  umn.NumericPreci
6910: 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 73 68 6f  sion, typeof(sho
6920: 72 74 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  rt));.      tbl.
6930: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
6940: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75  maTableColumn.Nu
6950: 6d 65 72 69 63 53 63 61 6c 65 2c 20 74 79 70 65  mericScale, type
6960: 6f 66 28 73 68 6f 72 74 29 29 3b 0a 20 20 20 20  of(short));.    
6970: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
6980: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
6990: 75 6d 6e 2e 49 73 55 6e 69 71 75 65 2c 20 74 79  umn.IsUnique, ty
69a0: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a  peof(Boolean));.
69b0: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
69c0: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
69d0: 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 2c 20 74  eColumn.IsKey, t
69e0: 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b  ypeof(Boolean));
69f0: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
6a00: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
6a10: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
6a20: 2e 42 61 73 65 53 65 72 76 65 72 4e 61 6d 65 2c  .BaseServerName,
6a30: 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29   typeof(string))
6a40: 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ;.      tbl.Colu
6a50: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
6a60: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
6a70: 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d  n.BaseCatalogNam
6a80: 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67  e, typeof(String
6a90: 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  ));.      tbl.Co
6aa0: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
6ab0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
6ac0: 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65  ColumnName, type
6ad0: 6f 66 28 53 74 72 69 6e 67 29 29 3b 0a 20 20 20  of(String));.   
6ae0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
6af0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
6b00: 6c 75 6d 6e 2e 42 61 73 65 53 63 68 65 6d 61 4e  lumn.BaseSchemaN
6b10: 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69  ame, typeof(Stri
6b20: 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  ng));.      tbl.
6b30: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
6b40: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
6b50: 73 65 54 61 62 6c 65 4e 61 6d 65 2c 20 74 79 70  seTableName, typ
6b60: 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0a 20 20  eof(String));.  
6b70: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
6b80: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
6b90: 6f 6c 75 6d 6e 2e 44 61 74 61 54 79 70 65 2c 20  olumn.DataType, 
6ba0: 74 79 70 65 6f 66 28 54 79 70 65 29 29 3b 0a 20  typeof(Type));. 
6bb0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
6bc0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
6bd0: 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75  Column.AllowDBNu
6be0: 6c 6c 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65  ll, typeof(Boole
6bf0: 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  an));.      tbl.
6c00: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
6c10: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72  maTableColumn.Pr
6c20: 6f 76 69 64 65 72 54 79 70 65 2c 20 74 79 70 65  oviderType, type
6c30: 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 20 20  of(int));.      
6c40: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
6c50: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
6c60: 6e 2e 49 73 41 6c 69 61 73 65 64 2c 20 74 79 70  n.IsAliased, typ
6c70: 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20  eof(Boolean));. 
6c80: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
6c90: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
6ca0: 43 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65 73 73  Column.IsExpress
6cb0: 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  ion, typeof(Bool
6cc0: 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  ean));.      tbl
6cd0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
6ce0: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
6cf0: 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63  Column.IsAutoInc
6d00: 72 65 6d 65 6e 74 2c 20 74 79 70 65 6f 66 28 42  rement, typeof(B
6d10: 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20  oolean));.      
6d20: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
6d30: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
6d40: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56  nalColumn.IsRowV
6d50: 65 72 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42  ersion, typeof(B
6d60: 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20  oolean));.      
6d70: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
6d80: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
6d90: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 48 69 64 64  nalColumn.IsHidd
6da0: 65 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65  en, typeof(Boole
6db0: 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  an));.      tbl.
6dc0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
6dd0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
6de0: 4c 6f 6e 67 2c 20 74 79 70 65 6f 66 28 42 6f 6f  Long, typeof(Boo
6df0: 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62  lean));.      tb
6e00: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
6e10: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
6e20: 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e  lColumn.IsReadOn
6e30: 6c 79 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65  ly, typeof(Boole
6e40: 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  an));.      tbl.
6e50: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
6e60: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
6e70: 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72 53 70  olumn.ProviderSp
6e80: 65 63 69 66 69 63 44 61 74 61 54 79 70 65 2c 20  ecificDataType, 
6e90: 74 79 70 65 6f 66 28 54 79 70 65 29 29 3b 0a 20  typeof(Type));. 
6ea0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
6eb0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
6ec0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44  OptionalColumn.D
6ed0: 65 66 61 75 6c 74 56 61 6c 75 65 2c 20 74 79 70  efaultValue, typ
6ee0: 65 6f 66 28 6f 62 6a 65 63 74 29 29 3b 0a 20 20  eof(object));.  
6ef0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
6f00: 41 64 64 28 22 44 61 74 61 54 79 70 65 4e 61 6d  Add("DataTypeNam
6f10: 65 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e  e", typeof(strin
6f20: 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  g));.      tbl.C
6f30: 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 43 6f 6c 6c  olumns.Add("Coll
6f40: 61 74 69 6f 6e 54 79 70 65 22 2c 20 74 79 70 65  ationType", type
6f50: 6f 66 28 73 74 72 69 6e 67 29 29 3b 0a 20 20 20  of(string));.   
6f60: 20 20 20 74 62 6c 2e 42 65 67 69 6e 4c 6f 61 64     tbl.BeginLoad
6f70: 44 61 74 61 28 29 3b 0a 0a 20 20 20 20 20 20 66  Data();..      f
6f80: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
6f90: 20 3c 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 20   < _fieldCount; 
6fa0: 6e 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 20 20 20  n++).      {.   
6fb0: 20 20 20 20 20 72 6f 77 20 3d 20 74 62 6c 2e 4e       row = tbl.N
6fc0: 65 77 52 6f 77 28 29 3b 0a 0a 20 20 20 20 20 20  ewRow();..      
6fd0: 20 20 44 62 54 79 70 65 20 74 79 70 20 3d 20 47    DbType typ = G
6fe0: 65 74 53 51 4c 69 74 65 54 79 70 65 28 6e 29 2e  etSQLiteType(n).
6ff0: 54 79 70 65 3b 0a 0a 20 20 20 20 20 20 20 20 2f  Type;..        /
7000: 2f 20 44 65 66 61 75 6c 74 20 73 65 74 74 69 6e  / Default settin
7010: 67 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  gs for the colum
7020: 6e 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  n.        row[Sc
7030: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
7040: 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20 3d 20 47 65  ColumnName] = Ge
7050: 74 4e 61 6d 65 28 6e 29 3b 0a 20 20 20 20 20 20  tName(n);.      
7060: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
7070: 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72  eColumn.ColumnOr
7080: 64 69 6e 61 6c 5d 20 3d 20 6e 3b 0a 20 20 20 20  dinal] = n;.    
7090: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
70a0: 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
70b0: 53 69 7a 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f  Size] = SQLiteCo
70c0: 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f 43 6f  nvert.DbTypeToCo
70d0: 6c 75 6d 6e 53 69 7a 65 28 74 79 70 29 3b 0a 20  lumnSize(typ);. 
70e0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
70f0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
7100: 65 72 69 63 50 72 65 63 69 73 69 6f 6e 5d 20 3d  ericPrecision] =
7110: 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44   SQLiteConvert.D
7120: 62 54 79 70 65 54 6f 4e 75 6d 65 72 69 63 50 72  bTypeToNumericPr
7130: 65 63 69 73 69 6f 6e 28 74 79 70 29 3b 0a 20 20  ecision(typ);.  
7140: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
7150: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65  TableColumn.Nume
7160: 72 69 63 53 63 61 6c 65 5d 20 3d 20 53 51 4c 69  ricScale] = SQLi
7170: 74 65 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65  teConvert.DbType
7180: 54 6f 4e 75 6d 65 72 69 63 53 63 61 6c 65 28 74  ToNumericScale(t
7190: 79 70 29 3b 0a 20 20 20 20 20 20 20 20 72 6f 77  yp);.        row
71a0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
71b0: 6d 6e 2e 50 72 6f 76 69 64 65 72 54 79 70 65 5d  mn.ProviderType]
71c0: 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65   = GetSQLiteType
71d0: 28 6e 29 2e 54 79 70 65 3b 0a 20 20 20 20 20 20  (n).Type;.      
71e0: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
71f0: 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e 67 5d 20  eColumn.IsLong] 
7200: 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20  = false;.       
7210: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
7220: 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75  Column.AllowDBNu
7230: 6c 6c 5d 20 3d 20 74 72 75 65 3b 0a 20 20 20 20  ll] = true;.    
7240: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
7250: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
7260: 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 5d 20 3d 20  n.IsReadOnly] = 
7270: 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 72  false;.        r
7280: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
7290: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52  tionalColumn.IsR
72a0: 6f 77 56 65 72 73 69 6f 6e 5d 20 3d 20 66 61 6c  owVersion] = fal
72b0: 73 65 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  se;.        row[
72c0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
72d0: 6e 2e 49 73 55 6e 69 71 75 65 5d 20 3d 20 66 61  n.IsUnique] = fa
72e0: 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 72 6f 77  lse;.        row
72f0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
7300: 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20 66 61 6c 73  mn.IsKey] = fals
7310: 65 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53  e;.        row[S
7320: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
7330: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49  alColumn.IsAutoI
7340: 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 66 61 6c 73  ncrement] = fals
7350: 65 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53  e;.        row[S
7360: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
7370: 2e 44 61 74 61 54 79 70 65 5d 20 3d 20 47 65 74  .DataType] = Get
7380: 46 69 65 6c 64 54 79 70 65 28 6e 29 3b 0a 20 20  FieldType(n);.  
7390: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
73a0: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
73b0: 75 6d 6e 2e 49 73 48 69 64 64 65 6e 5d 20 3d 20  umn.IsHidden] = 
73c0: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
73d0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
73e0: 6f 6c 75 6d 6e 2e 42 61 73 65 53 63 68 65 6d 61  olumn.BaseSchema
73f0: 4e 61 6d 65 5d 20 3d 20 5f 62 61 73 65 53 63 68  Name] = _baseSch
7400: 65 6d 61 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  emaName;....    
7410: 20 20 20 20 73 74 72 43 6f 6c 75 6d 6e 20 3d 20      strColumn = 
7420: 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 5b 6e  columnToParent[n
7430: 5d 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0a 20 20  ].ColumnName;.  
7440: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
7450: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73  .IsNullOrEmpty(s
7460: 74 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c  trColumn) == fal
7470: 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61  se) row[SchemaTa
7480: 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f  bleColumn.BaseCo
7490: 6c 75 6d 6e 4e 61 6d 65 5d 20 3d 20 73 74 72 43  lumnName] = strC
74a0: 6f 6c 75 6d 6e 3b 0a 0a 20 20 20 20 20 20 20 20  olumn;..        
74b0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
74c0: 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65 73 73 69  olumn.IsExpressi
74d0: 6f 6e 5d 20 3d 20 53 74 72 69 6e 67 2e 49 73 4e  on] = String.IsN
74e0: 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f  ullOrEmpty(strCo
74f0: 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20 20 20 72  lumn);.        r
7500: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
7510: 6c 75 6d 6e 2e 49 73 41 6c 69 61 73 65 64 5d 20  lumn.IsAliased] 
7520: 3d 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  = (String.Compar
7530: 65 28 47 65 74 4e 61 6d 65 28 6e 29 2c 20 73 74  e(GetName(n), st
7540: 72 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43  rColumn, StringC
7550: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
7560: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 21 3d 20  lIgnoreCase) != 
7570: 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  0);....        t
7580: 65 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61  emp = columnToPa
7590: 72 65 6e 74 5b 6e 5d 2e 54 61 62 6c 65 4e 61 6d  rent[n].TableNam
75a0: 65 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  e;.        if (S
75b0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
75c0: 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c  pty(temp) == fal
75d0: 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61  se) row[SchemaTa
75e0: 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61  bleColumn.BaseTa
75f0: 62 6c 65 4e 61 6d 65 5d 20 3d 20 74 65 6d 70 3b  bleName] = temp;
7600: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65 6d 70  ....        temp
7610: 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e   = columnToParen
7620: 74 5b 6e 5d 2e 44 61 74 61 62 61 73 65 4e 61 6d  t[n].DatabaseNam
7630: 65 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  e;.        if (S
7640: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
7650: 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c  pty(temp) == fal
7660: 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61  se) row[SchemaTa
7670: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
7680: 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d  n.BaseCatalogNam
7690: 65 5d 20 3d 20 74 65 6d 70 3b 0a 0a 20 20 20 20  e] = temp;..    
76a0: 20 20 20 20 73 74 72 69 6e 67 20 64 61 74 61 54      string dataT
76b0: 79 70 65 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20  ype = null;.    
76c0: 20 20 20 20 2f 2f 20 49 66 20 77 65 20 68 61 76      // If we hav
76d0: 65 20 61 20 74 61 62 6c 65 2d 62 6f 75 6e 64 20  e a table-bound 
76e0: 63 6f 6c 75 6d 6e 2c 20 65 78 74 72 61 63 74 20  column, extract 
76f0: 74 68 65 20 65 78 74 72 61 20 69 6e 66 6f 72 6d  the extra inform
7700: 61 74 69 6f 6e 20 66 72 6f 6d 20 69 74 0a 20 20  ation from it.  
7710: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
7720: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73  .IsNullOrEmpty(s
7730: 74 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c  trColumn) == fal
7740: 73 65 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  se).        {.  
7750: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
7760: 6f 6c 6c 53 65 71 3b 0a 20 20 20 20 20 20 20 20  ollSeq;.        
7770: 20 20 62 6f 6f 6c 20 62 4e 6f 74 4e 75 6c 6c 3b    bool bNotNull;
7780: 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  .          bool 
7790: 62 50 72 69 6d 61 72 79 4b 65 79 3b 0a 20 20 20  bPrimaryKey;.   
77a0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 62 41 75 74         bool bAut
77b0: 6f 49 6e 63 72 65 6d 65 6e 74 3b 0a 20 20 20 20  oIncrement;.    
77c0: 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
77d0: 72 53 69 7a 65 3b 0a 0a 20 20 20 20 20 20 20 20  rSize;..        
77e0: 20 20 2f 2f 20 47 65 74 20 74 68 65 20 63 6f 6c    // Get the col
77f0: 75 6d 6e 20 6d 65 74 61 20 64 61 74 61 0a 20 20  umn meta data.  
7800: 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64          _command
7810: 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c  .Connection._sql
7820: 2e 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28  .ColumnMetaData(
7830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74  .            (st
7840: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)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 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68   (string)row[Sch
7890: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
78a0: 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 2c 0a 20  aseTableName],. 
78b0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 43 6f             strCo
78c0: 6c 75 6d 6e 2c 0a 20 20 20 20 20 20 20 20 20 20  lumn,.          
78d0: 20 20 6f 75 74 20 64 61 74 61 54 79 70 65 2c 20    out dataType, 
78e0: 6f 75 74 20 63 6f 6c 6c 53 65 71 2c 20 6f 75 74  out collSeq, out
78f0: 20 62 4e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62   bNotNull, out b
7900: 50 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20  PrimaryKey, out 
7910: 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 3b  bAutoIncrement);
7920: 0a 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
7930: 62 4e 6f 74 4e 75 6c 6c 20 7c 7c 20 62 50 72 69  bNotNull || bPri
7940: 6d 61 72 79 4b 65 79 29 20 72 6f 77 5b 53 63 68  maryKey) row[Sch
7950: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41  emaTableColumn.A
7960: 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 20 66 61  llowDBNull] = fa
7970: 6c 73 65 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
7980: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
7990: 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20 62  olumn.IsKey] = b
79a0: 50 72 69 6d 61 72 79 4b 65 79 3b 0a 20 20 20 20  PrimaryKey;.    
79b0: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
79c0: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
79d0: 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d  umn.IsAutoIncrem
79e0: 65 6e 74 5d 20 3d 20 62 41 75 74 6f 49 6e 63 72  ent] = bAutoIncr
79f0: 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 20 20 20  ement;.         
7a00: 20 72 6f 77 5b 22 43 6f 6c 6c 61 74 69 6f 6e 54   row["CollationT
7a10: 79 70 65 22 5d 20 3d 20 63 6f 6c 6c 53 65 71 3b  ype"] = collSeq;
7a20: 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46  ..          // F
7a30: 6f 72 20 74 79 70 65 73 20 6c 69 6b 65 20 76 61  or types like va
7a40: 72 63 68 61 72 28 35 30 29 20 61 6e 64 20 73 75  rchar(50) and su
7a50: 63 68 2c 20 65 78 74 72 61 63 74 20 74 68 65 20  ch, extract the 
7a60: 73 69 7a 65 0a 20 20 20 20 20 20 20 20 20 20 61  size.          a
7a70: 72 53 69 7a 65 20 3d 20 64 61 74 61 54 79 70 65  rSize = dataType
7a80: 2e 53 70 6c 69 74 28 27 28 27 29 3b 0a 20 20 20  .Split('(');.   
7a90: 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a         if (arSiz
7aa0: 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20 20  e.Length > 1).  
7ab0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
7ac0: 20 20 20 20 20 20 64 61 74 61 54 79 70 65 20 3d        dataType =
7ad0: 20 61 72 53 69 7a 65 5b 30 5d 3b 0a 20 20 20 20   arSize[0];.    
7ae0: 20 20 20 20 20 20 20 20 61 72 53 69 7a 65 20 3d          arSize =
7af0: 20 61 72 53 69 7a 65 5b 31 5d 2e 53 70 6c 69 74   arSize[1].Split
7b00: 28 27 29 27 29 3b 0a 20 20 20 20 20 20 20 20 20  (')');.         
7b10: 20 20 20 69 66 20 28 61 72 53 69 7a 65 2e 4c 65     if (arSize.Le
7b20: 6e 67 74 68 20 3e 20 31 29 0a 20 20 20 20 20 20  ngth > 1).      
7b30: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
7b40: 20 20 20 20 20 20 61 72 53 69 7a 65 20 3d 20 61        arSize = a
7b50: 72 53 69 7a 65 5b 30 5d 2e 53 70 6c 69 74 28 27  rSize[0].Split('
7b60: 2c 27 2c 20 27 2e 27 29 3b 0a 20 20 20 20 20 20  ,', '.');.      
7b70: 20 20 20 20 20 20 20 20 69 66 20 28 47 65 74 53          if (GetS
7b80: 51 4c 69 74 65 54 79 70 65 28 6e 29 2e 54 79 70  QLiteType(n).Typ
7b90: 65 20 3d 3d 20 44 62 54 79 70 65 2e 53 74 72 69  e == DbType.Stri
7ba0: 6e 67 20 7c 7c 20 47 65 74 53 51 4c 69 74 65 54  ng || GetSQLiteT
7bb0: 79 70 65 28 6e 29 2e 54 79 70 65 20 3d 3d 20 44  ype(n).Type == D
7bc0: 62 54 79 70 65 2e 42 69 6e 61 72 79 29 0a 20 20  bType.Binary).  
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
7be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
7bf0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
7c00: 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20  umn.ColumnSize] 
7c10: 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33  = Convert.ToInt3
7c20: 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20 43 75 6c  2(arSize[0], Cul
7c30: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
7c40: 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20 20 20 20  ntCulture);.    
7c50: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
7c60: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20            else. 
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20               {. 
7c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7c90: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
7ca0: 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63  lumn.NumericPrec
7cb0: 69 73 69 6f 6e 5d 20 3d 20 43 6f 6e 76 65 72 74  ision] = Convert
7cc0: 2e 54 6f 49 6e 74 33 32 28 61 72 53 69 7a 65 5b  .ToInt32(arSize[
7cd0: 30 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  0], CultureInfo.
7ce0: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
7cf0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
7d00: 20 20 20 69 66 20 28 61 72 53 69 7a 65 2e 4c 65     if (arSize.Le
7d10: 6e 67 74 68 20 3e 20 31 29 0a 20 20 20 20 20 20  ngth > 1).      
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
7d30: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
7d40: 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c 65 5d 20  n.NumericScale] 
7d50: 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33  = Convert.ToInt3
7d60: 32 28 61 72 53 69 7a 65 5b 31 5d 2c 20 43 75 6c  2(arSize[1], Cul
7d70: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
7d80: 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20 20 20 20  ntCulture);.    
7d90: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
7da0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
7db0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20      }..         
7dc0: 20 69 66 20 28 77 61 6e 74 44 65 66 61 75 6c 74   if (wantDefault
7dd0: 56 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20  Value).         
7de0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f   {.            /
7df0: 2f 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20  / Determine the 
7e00: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
7e10: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 77 68  r the column, wh
7e20: 69 63 68 20 73 75 63 6b 73 20 62 65 63 61 75 73  ich sucks becaus
7e30: 65 20 77 65 20 68 61 76 65 20 74 6f 20 71 75 65  e we have to que
7e40: 72 79 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f  ry the schema fo
7e50: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 0a 20 20  r each column.  
7e60: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
7e70: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
7e80: 6d 64 54 61 62 6c 65 20 3d 20 6e 65 77 20 53 51  mdTable = new SQ
7e90: 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 53 74 72 69  LiteCommand(Stri
7ea0: 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ng.Format(Cultur
7eb0: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
7ec0: 75 6c 74 75 72 65 2c 20 22 50 52 41 47 4d 41 20  ulture, "PRAGMA 
7ed0: 5b 7b 30 7d 5d 2e 54 41 42 4c 45 5f 49 4e 46 4f  [{0}].TABLE_INFO
7ee0: 28 5b 7b 31 7d 5d 29 22 2c 0a 20 20 20 20 20 20  ([{1}])",.      
7ef0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
7f00: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
7f10: 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f  olumn.BaseCatalo
7f20: 67 4e 61 6d 65 5d 2c 0a 20 20 20 20 20 20 20 20  gName],.        
7f30: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
7f40: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
7f50: 54 61 62 6c 65 4e 61 6d 65 5d 0a 20 20 20 20 20  TableName].     
7f60: 20 20 20 20 20 20 20 20 20 29 2c 20 5f 63 6f 6d           ), _com
7f70: 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 29  mand.Connection)
7f80: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ).            us
7f90: 69 6e 67 20 28 44 62 44 61 74 61 52 65 61 64 65  ing (DbDataReade
7fa0: 72 20 72 64 54 61 62 6c 65 20 3d 20 63 6d 64 54  r rdTable = cmdT
7fb0: 61 62 6c 65 2e 45 78 65 63 75 74 65 52 65 61 64  able.ExecuteRead
7fc0: 65 72 28 29 29 0a 20 20 20 20 20 20 20 20 20 20  er()).          
7fd0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
7fe0: 20 20 2f 2f 20 46 69 6e 64 20 74 68 65 20 6d 61    // Find the ma
7ff0: 74 63 68 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20  tching column.  
8000: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
8010: 65 20 28 72 64 54 61 62 6c 65 2e 52 65 61 64 28  e (rdTable.Read(
8020: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
8030: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
8040: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
8050: 6d 70 61 72 65 28 28 73 74 72 69 6e 67 29 72 6f  mpare((string)ro
8060: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
8070: 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61  umn.BaseColumnNa
8080: 6d 65 5d 2c 20 72 64 54 61 62 6c 65 2e 47 65 74  me], rdTable.Get
8090: 53 74 72 69 6e 67 28 31 29 2c 20 53 74 72 69 6e  String(1), Strin
80a0: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
80b0: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
80c0: 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20  = 0).           
80d0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
80e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 64 54           if (rdT
80f0: 61 62 6c 65 2e 49 73 44 42 4e 75 6c 6c 28 34 29  able.IsDBNull(4)
8100: 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 20   == false).     
8110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8120: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
8130: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66  tionalColumn.Def
8140: 61 75 6c 74 56 61 6c 75 65 5d 20 3d 20 72 64 54  aultValue] = rdT
8150: 61 62 6c 65 5b 34 5d 3b 0a 0a 20 20 20 20 20 20  able[4];..      
8160: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
8170: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  k;.             
8180: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
8190: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
81a0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 0a   }.          }..
81b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65 74            // Det
81c0: 65 72 6d 69 6e 65 20 49 73 55 6e 69 71 75 65 20  ermine IsUnique 
81d0: 70 72 6f 70 65 72 6c 79 2c 20 77 68 69 63 68 20  properly, which 
81e0: 69 73 20 61 20 70 61 69 6e 20 69 6e 20 74 68 65  is a pain in the
81f0: 20 62 75 74 74 21 0a 20 20 20 20 20 20 20 20 20   butt!.         
8200: 20 69 66 20 28 77 61 6e 74 55 6e 69 71 75 65 49   if (wantUniqueI
8210: 6e 66 6f 29 0a 20 20 20 20 20 20 20 20 20 20 7b  nfo).          {
8220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
8230: 28 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68  ((string)row[Sch
8240: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
8250: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c  Column.BaseCatal
8260: 6f 67 4e 61 6d 65 5d 20 21 3d 20 73 74 72 43 61  ogName] != strCa
8270: 74 61 6c 6f 67 0a 20 20 20 20 20 20 20 20 20 20  talog.          
8280: 20 20 20 20 7c 7c 20 28 73 74 72 69 6e 67 29 72      || (string)r
8290: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
82a0: 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61  lumn.BaseTableNa
82b0: 6d 65 5d 20 21 3d 20 73 74 72 54 61 62 6c 65 29  me] != strTable)
82c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20  .            {. 
82d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
82e0: 43 61 74 61 6c 6f 67 20 3d 20 28 73 74 72 69 6e  Catalog = (strin
82f0: 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  g)row[SchemaTabl
8300: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
8310: 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d  BaseCatalogName]
8320: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
8330: 73 74 72 54 61 62 6c 65 20 3d 20 28 73 74 72 69  strTable = (stri
8340: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
8350: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62  leColumn.BaseTab
8360: 6c 65 4e 61 6d 65 5d 3b 0a 0a 20 20 20 20 20 20  leName];..      
8370: 20 20 20 20 20 20 20 20 74 62 6c 49 6e 64 65 78          tblIndex
8380: 65 73 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  es = _command.Co
8390: 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53 63 68 65  nnection.GetSche
83a0: 6d 61 28 22 49 6e 64 65 78 65 73 22 2c 20 6e 65  ma("Indexes", ne
83b0: 77 20 73 74 72 69 6e 67 5b 5d 20 7b 0a 20 20 20  w string[] {.   
83c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74               (st
83d0: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
83e0: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
83f0: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
8400: 6d 65 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20  me],.           
8410: 20 20 20 20 20 6e 75 6c 6c 2c 0a 20 20 20 20 20       null,.     
8420: 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
8430: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
8440: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62  leColumn.BaseTab
8450: 6c 65 4e 61 6d 65 5d 2c 0a 20 20 20 20 20 20 20  leName],.       
8460: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 20 7d 29           null })
8470: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
8480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
8490: 65 61 63 68 20 28 44 61 74 61 52 6f 77 20 72 6f  each (DataRow ro
84a0: 77 49 6e 64 65 78 65 73 20 69 6e 20 74 62 6c 49  wIndexes in tblI
84b0: 6e 64 65 78 65 73 2e 52 6f 77 73 29 0a 20 20 20  ndexes.Rows).   
84c0: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
84d0: 20 20 20 20 20 20 20 20 20 74 62 6c 49 6e 64 65           tblInde
84e0: 78 43 6f 6c 75 6d 6e 73 20 3d 20 5f 63 6f 6d 6d  xColumns = _comm
84f0: 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47  and.Connection.G
8500: 65 74 53 63 68 65 6d 61 28 22 49 6e 64 65 78 43  etSchema("IndexC
8510: 6f 6c 75 6d 6e 73 22 2c 20 6e 65 77 20 73 74 72  olumns", new str
8520: 69 6e 67 5b 5d 20 7b 0a 20 20 20 20 20 20 20 20  ing[] {.        
8530: 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29          (string)
8540: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
8550: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61  ptionalColumn.Ba
8560: 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 2c 0a  seCatalogName],.
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8580: 6e 75 6c 6c 2c 0a 20 20 20 20 20 20 20 20 20 20  null,.          
8590: 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f        (string)ro
85a0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
85b0: 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d  umn.BaseTableNam
85c0: 65 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  e],.            
85d0: 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77 49      (string)rowI
85e0: 6e 64 65 78 65 73 5b 22 49 4e 44 45 58 5f 4e 41  ndexes["INDEX_NA
85f0: 4d 45 22 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  ME"],.          
8600: 20 20 20 20 20 20 6e 75 6c 6c 0a 20 20 20 20 20        null.     
8610: 20 20 20 20 20 20 20 20 20 20 20 7d 29 3b 0a 20             });. 
8620: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
8630: 65 61 63 68 20 28 44 61 74 61 52 6f 77 20 72 6f  each (DataRow ro
8640: 77 43 6f 6c 75 6d 6e 49 6e 64 65 78 20 69 6e 20  wColumnIndex in 
8650: 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e  tblIndexColumns.
8660: 52 6f 77 73 29 0a 20 20 20 20 20 20 20 20 20 20  Rows).          
8670: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
8680: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
8690: 2e 43 6f 6d 70 61 72 65 28 28 73 74 72 69 6e 67  .Compare((string
86a0: 29 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64 65 78 5b  )rowColumnIndex[
86b0: 22 43 4f 4c 55 4d 4e 5f 4e 41 4d 45 22 5d 2c 20  "COLUMN_NAME"], 
86c0: 73 74 72 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e  strColumn, Strin
86d0: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
86e0: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
86f0: 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20  = 0).           
8700: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8710: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
8720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8730: 2f 2f 20 42 55 47 46 49 58 3a 20 4d 61 6b 65 20  // BUGFIX: Make 
8740: 73 75 72 65 20 74 68 61 74 20 77 65 20 6f 6e 6c  sure that we onl
8750: 79 20 66 6c 61 67 20 74 68 69 73 20 63 6f 6c 75  y flag this colu
8760: 6d 6e 20 61 73 20 22 75 6e 69 71 75 65 22 0d 0a  mn as "unique"..
8770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8780: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69 66 20    //         if 
8790: 77 65 20 61 72 65 20 6e 6f 74 20 70 72 6f 63 65  we are not proce
87a0: 73 73 69 6e 67 20 6f 66 20 73 6f 6d 65 20 6b 69  ssing of some ki
87b0: 6e 64 20 6f 66 20 6d 75 6c 74 69 2d 74 61 62 6c  nd of multi-tabl
87c0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
87d0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
87e0: 63 6f 6e 73 74 72 75 63 74 20 28 69 2e 65 2e 20  construct (i.e. 
87f0: 61 20 6a 6f 69 6e 29 20 62 65 63 61 75 73 65 20  a join) because 
8800: 69 6e 20 74 68 61 74 20 63 61 73 65 20 77 65 20  in that case we 
8810: 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  must..          
8820: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
8830: 20 20 20 61 6c 6c 6f 77 20 64 75 70 6c 69 63 61     allow duplica
8840: 74 65 20 76 61 6c 75 65 73 20 28 72 65 66 65 72  te values (refer
8850: 20 74 6f 20 74 69 63 6b 65 74 20 5b 37 65 33 66   to ticket [7e3f
8860: 61 39 33 37 34 34 5d 29 2e 0d 0a 20 20 20 20 20  a93744])...     
8870: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
8880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8890: 20 20 20 69 66 20 28 70 61 72 65 6e 74 54 6f 43     if (parentToC
88a0: 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 20 3d 3d 20  olumns.Count == 
88b0: 31 20 26 26 20 74 62 6c 49 6e 64 65 78 43 6f 6c  1 && tblIndexCol
88c0: 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74 20  umns.Rows.Count 
88d0: 3d 3d 20 31 20 26 26 20 28 62 6f 6f 6c 29 72 6f  == 1 && (bool)ro
88e0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
88f0: 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d  umn.AllowDBNull]
8900: 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20   == false)..    
8910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8920: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
8930: 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 20  olumn.IsUnique] 
8940: 3d 20 72 6f 77 49 6e 64 65 78 65 73 5b 22 55 4e  = rowIndexes["UN
8950: 49 51 55 45 22 5d 3b 0a 0a 20 20 20 20 20 20 20  IQUE"];..       
8960: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66             // If
8970: 20 69 74 73 20 61 6e 20 69 6e 74 65 67 65 72 20   its an integer 
8980: 70 72 69 6d 61 72 79 20 6b 65 79 20 61 6e 64 20  primary key and 
8990: 74 68 65 20 6f 6e 6c 79 20 70 72 69 6d 61 72 79  the only primary
89a0: 20 6b 65 79 20 69 6e 20 74 68 65 20 74 61 62 6c   key in the tabl
89b0: 65 2c 20 74 68 65 6e 20 69 74 73 20 61 20 72 6f  e, then its a ro
89c0: 77 69 64 20 61 6c 69 61 73 20 61 6e 64 20 69 73  wid alias and is
89d0: 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 20   autoincrement. 
89e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
89f0: 20 2f 2f 20 4e 4f 54 45 3a 20 20 43 75 72 72 65   // NOTE:  Curre
8a00: 6e 74 6c 79 20 63 6f 6d 6d 65 6e 74 65 64 20 6f  ntly commented o
8a10: 75 74 20 62 65 63 61 75 73 65 20 74 68 69 73 20  ut because this 
8a20: 69 73 20 6e 6f 74 20 61 6c 77 61 79 73 20 74 68  is not always th
8a30: 65 20 64 65 73 69 72 65 64 20 62 65 68 61 76 69  e desired behavi
8a40: 6f 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  or.  For example
8a50: 2c 20 61 20 31 3a 31 20 72 65 6c 61 74 69 6f 6e  , a 1:1 relation
8a60: 73 68 69 70 20 77 69 74 68 0a 20 20 20 20 20 20  ship with.      
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
8a80: 20 20 20 20 20 20 61 6e 6f 74 68 65 72 20 74 61        another ta
8a90: 62 6c 65 2c 20 77 68 65 72 65 20 74 68 65 20 6f  ble, where the o
8aa0: 74 68 65 72 20 74 61 62 6c 65 20 69 73 20 61 75  ther table is au
8ab0: 74 6f 69 6e 63 72 65 6d 65 6e 74 2c 20 62 75 74  toincrement, but
8ac0: 20 74 68 69 73 20 6f 6e 65 20 69 73 20 6e 6f 74   this one is not
8ad0: 2c 20 61 6e 64 20 75 73 65 73 20 74 68 65 20 72  , and uses the r
8ae0: 6f 77 69 64 20 66 72 6f 6d 20 74 68 65 20 6f 74  owid from the ot
8af0: 68 65 72 2e 0a 20 20 20 20 20 20 20 20 20 20 20  her..           
8b00: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
8b10: 20 49 74 20 69 73 20 73 61 66 65 72 20 74 6f 20   It is safer to 
8b20: 6f 6e 6c 79 20 73 65 74 20 41 75 74 6f 69 6e 63  only set Autoinc
8b30: 72 65 6d 65 6e 74 20 6f 6e 20 74 61 62 6c 65 73  rement on tables
8b40: 20 77 68 65 72 65 20 77 65 27 72 65 20 53 55 52   where we're SUR
8b50: 45 20 74 68 65 20 75 73 65 72 20 73 70 65 63 69  E the user speci
8b60: 66 69 65 64 20 41 55 54 4f 49 4e 43 52 45 4d 45  fied AUTOINCREME
8b70: 4e 54 2c 20 65 76 65 6e 20 69 66 20 69 74 73 20  NT, even if its 
8b80: 61 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 2e 0a  a rowid column..
8b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ba0: 20 20 20 69 66 20 28 74 62 6c 49 6e 64 65 78 43     if (tblIndexC
8bb0: 6f 6c 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e  olumns.Rows.Coun
8bc0: 74 20 3d 3d 20 31 20 26 26 20 28 62 6f 6f 6c 29  t == 1 && (bool)
8bd0: 72 6f 77 49 6e 64 65 78 65 73 5b 22 50 52 49 4d  rowIndexes["PRIM
8be0: 41 52 59 5f 4b 45 59 22 5d 20 3d 3d 20 74 72 75  ARY_KEY"] == tru
8bf0: 65 20 26 26 20 53 74 72 69 6e 67 2e 49 73 4e 75  e && String.IsNu
8c00: 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74 61 54 79  llOrEmpty(dataTy
8c10: 70 65 29 20 3d 3d 20 66 61 6c 73 65 20 26 26 0a  pe) == false &&.
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c30: 20 20 20 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61      String.Compa
8c40: 72 65 28 64 61 74 61 54 79 70 65 2c 20 22 69 6e  re(dataType, "in
8c50: 74 65 67 65 72 22 2c 20 53 74 72 69 6e 67 43 6f  teger", StringCo
8c60: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
8c70: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
8c80: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
8c90: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
8ca0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 72 6f            //  ro
8cb0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
8cc0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75  ionalColumn.IsAu
8cd0: 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 74  toIncrement] = t
8ce0: 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20  rue;.           
8cf0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
8d10: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  k;.             
8d20: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
8d30: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
8d40: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 0a   }.          }..
8d50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
8d60: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
8d70: 74 79 28 64 61 74 61 54 79 70 65 29 29 0a 20 20  ty(dataType)).  
8d80: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
8d90: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
8da0: 74 79 20 61 66 66 69 6e 3b 0a 20 20 20 20 20 20  ty affin;.      
8db0: 20 20 20 20 20 20 64 61 74 61 54 79 70 65 20 3d        dataType =
8dc0: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
8dd0: 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70  t._sql.ColumnTyp
8de0: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
8df0: 6e 74 2c 20 6e 2c 20 6f 75 74 20 61 66 66 69 6e  nt, n, out affin
8e00: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 0a  );.          }..
8e10: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
8e20: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
8e30: 74 79 28 64 61 74 61 54 79 70 65 29 20 3d 3d 20  ty(dataType) == 
8e40: 66 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20 20  false).         
8e50: 20 20 20 72 6f 77 5b 22 44 61 74 61 54 79 70 65     row["DataType
8e60: 4e 61 6d 65 22 5d 20 3d 20 64 61 74 61 54 79 70  Name"] = dataTyp
8e70: 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  e;.        }.   
8e80: 20 20 20 20 20 74 62 6c 2e 52 6f 77 73 2e 41 64       tbl.Rows.Ad
8e90: 64 28 72 6f 77 29 3b 0a 20 20 20 20 20 20 7d 0a  d(row);.      }.
8ea0: 0a 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49  .      if (_keyI
8eb0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
8ec0: 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 41 70       _keyInfo.Ap
8ed0: 70 65 6e 64 53 63 68 65 6d 61 54 61 62 6c 65 28  pendSchemaTable(
8ee0: 74 62 6c 29 3b 0a 0a 20 20 20 20 20 20 74 62 6c  tbl);..      tbl
8ef0: 2e 41 63 63 65 70 74 43 68 61 6e 67 65 73 28 29  .AcceptChanges()
8f00: 3b 0a 20 20 20 20 20 20 74 62 6c 2e 45 6e 64 4c  ;.      tbl.EndL
8f10: 6f 61 64 44 61 74 61 28 29 3b 0a 0a 20 20 20 20  oadData();..    
8f20: 20 20 72 65 74 75 72 6e 20 74 62 6c 3b 0a 20 20    return tbl;.  
8f30: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
8f40: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
8f50: 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c  etrieves the col
8f60: 75 6d 6e 20 61 73 20 61 20 73 74 72 69 6e 67 0a  umn as a string.
8f70: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8f80: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
8f90: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
8fa0: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
8fb0: 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  mn to retrieve</
8fc0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
8fd0: 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f  returns>string</
8fe0: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
8ff0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
9000: 69 6e 67 20 47 65 74 53 74 72 69 6e 67 28 69 6e  ing GetString(in
9010: 74 20 69 29 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t i).    {..    
9020: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9030: 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 69 20  );..      if (i 
9040: 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43  >= VisibleFieldC
9050: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
9060: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
9070: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
9080: 6f 2e 47 65 74 53 74 72 69 6e 67 28 69 20 2d 20  o.GetString(i - 
9090: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
90a0: 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66  t);..      Verif
90b0: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
90c0: 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20 20 72  String);.      r
90d0: 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61  eturn _activeSta
90e0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54  tement._sql.GetT
90f0: 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ext(_activeState
9100: 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a  ment, i);.    }.
9110: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
9120: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  y>.    /// Retri
9130: 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  eves the column 
9140: 61 73 20 61 6e 20 6f 62 6a 65 63 74 20 63 6f 72  as an object cor
9150: 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68  responding to th
9160: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
9170: 61 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c  atype of the col
9180: 75 6d 6e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  umn.    /// </su
9190: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
91a0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
91b0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
91c0: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
91d0: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
91e0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 6f 62 6a 65  // <returns>obje
91f0: 63 74 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  ct</returns>.   
9200: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
9210: 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65   object GetValue
9220: 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0d 0a 20  (int i).    {.. 
9230: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
9240: 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20  ed();..      if 
9250: 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65  (i >= VisibleFie
9260: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
9270: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
9280: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
9290: 49 6e 66 6f 2e 47 65 74 56 61 6c 75 65 28 69 20  Info.GetValue(i 
92a0: 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  - VisibleFieldCo
92b0: 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 53 51 4c  unt);..      SQL
92c0: 69 74 65 54 79 70 65 20 74 79 70 20 3d 20 47 65  iteType typ = Ge
92d0: 74 53 51 4c 69 74 65 54 79 70 65 28 69 29 3b 0a  tSQLiteType(i);.
92e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61  .      return _a
92f0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
9300: 73 71 6c 2e 47 65 74 56 61 6c 75 65 28 5f 61 63  sql.GetValue(_ac
9310: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
9320: 2c 20 74 79 70 29 3b 0a 20 20 20 20 7d 0a 0a 20  , typ);.    }.. 
9330: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
9340: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 65 69 76  .    /// Retreiv
9350: 65 73 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  es the values of
9360: 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e   multiple column
9370: 73 2c 20 75 70 20 74 6f 20 74 68 65 20 73 69 7a  s, up to the siz
9380: 65 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65  e of the supplie
9390: 64 20 61 72 72 61 79 0a 20 20 20 20 2f 2f 2f 20  d array.    /// 
93a0: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
93b0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
93c0: 76 61 6c 75 65 73 22 3e 54 68 65 20 61 72 72 61  values">The arra
93d0: 79 20 74 6f 20 66 69 6c 6c 20 77 69 74 68 20 76  y to fill with v
93e0: 61 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20 63  alues from the c
93f0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 63 75  olumns in the cu
9400: 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 3c  rrent resultset<
9410: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
9420: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d  <returns>The num
9430: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72  ber of columns r
9440: 65 74 72 69 65 76 65 64 3c 2f 72 65 74 75 72 6e  etrieved</return
9450: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
9460: 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 56 61  erride int GetVa
9470: 6c 75 65 73 28 6f 62 6a 65 63 74 5b 5d 20 76 61  lues(object[] va
9480: 6c 75 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  lues)..    {..  
9490: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
94a0: 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 6e 74 20  d();..      int 
94b0: 6e 4d 61 78 20 3d 20 46 69 65 6c 64 43 6f 75 6e  nMax = FieldCoun
94c0: 74 3b 0a 20 20 20 20 20 20 69 66 20 28 76 61 6c  t;.      if (val
94d0: 75 65 73 2e 4c 65 6e 67 74 68 20 3c 20 6e 4d 61  ues.Length < nMa
94e0: 78 29 20 6e 4d 61 78 20 3d 20 76 61 6c 75 65 73  x) nMax = values
94f0: 2e 4c 65 6e 67 74 68 3b 0a 0a 20 20 20 20 20 20  .Length;..      
9500: 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20  for (int n = 0; 
9510: 6e 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0a 20  n < nMax; n++). 
9520: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 76       {.        v
9530: 61 6c 75 65 73 5b 6e 5d 20 3d 20 47 65 74 56 61  alues[n] = GetVa
9540: 6c 75 65 28 6e 29 3b 0a 20 20 20 20 20 20 7d 0a  lue(n);.      }.
9550: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 4d  .      return nM
9560: 61 78 3b 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ax;.    }....   
9570: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
9580: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
9590: 61 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 63 6f 6e  a collection con
95a0: 74 61 69 6e 69 6e 67 20 61 6c 6c 20 74 68 65 20  taining all the 
95b0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 6e 64  column names and
95c0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 0d   values for the.
95d0: 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74  .    /// current
95e0: 20 72 6f 77 20 6f 66 20 64 61 74 61 20 69 6e 20   row of data in 
95f0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75  the current resu
9600: 6c 74 73 65 74 2c 20 69 66 20 61 6e 79 2e 20 20  ltset, if any.  
9610: 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 0d 0a  If there is no..
9620: 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20      /// current 
9630: 72 6f 77 20 6f 72 20 6e 6f 20 63 75 72 72 65 6e  row or no curren
9640: 74 20 72 65 73 75 6c 74 73 65 74 2c 20 61 6e 20  t resultset, an 
9650: 65 78 63 65 70 74 69 6f 6e 20 6d 61 79 20 62 65  exception may be
9660: 20 74 68 72 6f 77 6e 2e 0d 0a 20 20 20 20 2f 2f   thrown...    //
9670: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
9680: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
9690: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6c  .    /// The col
96a0: 6c 65 63 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 69  lection containi
96b0: 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  ng the column na
96c0: 6d 65 20 61 6e 64 20 76 61 6c 75 65 20 69 6e 66  me and value inf
96d0: 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65  ormation for the
96e0: 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e  ..    /// curren
96f0: 74 20 72 6f 77 20 6f 66 20 64 61 74 61 20 69 6e  t row of data in
9700: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73   the current res
9710: 75 6c 74 73 65 74 20 6f 72 20 6e 75 6c 6c 20 69  ultset or null i
9720: 66 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  f this informati
9730: 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 63 61 6e 6e  on..    /// cann
9740: 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0d  ot be obtained..
9750: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
9760: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
9770: 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63 74  NameValueCollect
9780: 69 6f 6e 20 47 65 74 56 61 6c 75 65 73 28 29 0d  ion GetValues().
9790: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
97a0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
97b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
97c0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
97d0: 74 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 5f  t == null) || (_
97e0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
97f0: 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  _sql == null))..
9800: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
9810: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
9820: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
9830: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e  );....        in
9840: 74 20 6e 4d 61 78 20 3d 20 56 69 73 69 62 6c 65  t nMax = Visible
9850: 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20  FieldCount;..   
9860: 20 20 20 20 20 4e 61 6d 65 56 61 6c 75 65 43 6f       NameValueCo
9870: 6c 6c 65 63 74 69 6f 6e 20 72 65 73 75 6c 74 20  llection result 
9880: 3d 20 6e 65 77 20 4e 61 6d 65 56 61 6c 75 65 43  = new NameValueC
9890: 6f 6c 6c 65 63 74 69 6f 6e 28 6e 4d 61 78 29 3b  ollection(nMax);
98a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20  ....        for 
98b0: 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20  (int n = 0; n < 
98c0: 6e 4d 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20  nMax; n++)..    
98d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
98e0: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d     string name =
98f0: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
9900: 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d  t._sql.ColumnNam
9910: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
9920: 6e 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20  nt, n);..       
9930: 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75       string valu
9940: 65 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65  e = _activeState
9950: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78  ment._sql.GetTex
9960: 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  t(_activeStateme
9970: 6e 74 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  nt, n);....     
9980: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
9990: 64 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d  d(name, value);.
99a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
99b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
99c0: 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ult;..    }.... 
99d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
99e0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
99f0: 73 20 54 72 75 65 20 69 66 20 74 68 65 20 72 65  s True if the re
9a00: 73 75 6c 74 73 65 74 20 68 61 73 20 72 6f 77 73  sultset has rows
9a10: 20 74 68 61 74 20 63 61 6e 20 62 65 20 66 65 74   that can be fet
9a20: 63 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ched..    /// </
9a30: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
9a40: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f  blic override bo
9a50: 6f 6c 20 48 61 73 52 6f 77 73 0a 20 20 20 20 7b  ol HasRows.    {
9a60: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
9a70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
9a80: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 20 20  ckDisposed();.  
9a90: 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65        CheckClose
9aa0: 64 28 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74  d();.        ret
9ab0: 75 72 6e 20 28 5f 72 65 61 64 69 6e 67 53 74 61  urn (_readingSta
9ac0: 74 65 20 21 3d 20 31 29 3b 0a 20 20 20 20 20 20  te != 1);.      
9ad0: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  }.    }..    ///
9ae0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
9af0: 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75 65 20  // Returns True 
9b00: 69 66 20 74 68 65 20 64 61 74 61 20 72 65 61 64  if the data read
9b10: 65 72 20 69 73 20 63 6c 6f 73 65 64 0a 20 20 20  er is closed.   
9b20: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
9b30: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
9b40: 69 64 65 20 62 6f 6f 6c 20 49 73 43 6c 6f 73 65  ide bool IsClose
9b50: 64 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  d.    {..      g
9b60: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
9b70: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 28 5f 63  ed(); return (_c
9b80: 6f 6d 6d 61 6e 64 20 3d 3d 20 6e 75 6c 6c 29 3b  ommand == null);
9b90: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f   }.    }..    //
9ba0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
9bb0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75 65  /// Returns True
9bc0: 20 69 66 20 74 68 65 20 73 70 65 63 69 66 69 65   if the specifie
9bd0: 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 75 6c 6c  d column is null
9be0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
9bf0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
9c00: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
9c10: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
9c20: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
9c30: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
9c40: 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20 6f 72  <returns>True or
9c50: 20 46 61 6c 73 65 3c 2f 72 65 74 75 72 6e 73 3e   False</returns>
9c60: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
9c70: 72 69 64 65 20 62 6f 6f 6c 20 49 73 44 42 4e 75  ride bool IsDBNu
9c80: 6c 6c 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  ll(int i)..    {
9c90: 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73  ..      CheckDis
9ca0: 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20  posed();..      
9cb0: 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65  if (i >= Visible
9cc0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
9cd0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a  eyInfo != null).
9ce0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
9cf0: 6b 65 79 49 6e 66 6f 2e 49 73 44 42 4e 75 6c 6c  keyInfo.IsDBNull
9d00: 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c  (i - VisibleFiel
9d10: 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20  dCount);..      
9d20: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
9d30: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4e  atement._sql.IsN
9d40: 75 6c 6c 28 5f 61 63 74 69 76 65 53 74 61 74 65  ull(_activeState
9d50: 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a  ment, i);.    }.
9d60: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
9d70: 79 3e 0a 20 20 20 20 2f 2f 2f 20 4d 6f 76 65 73  y>.    /// Moves
9d80: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 65 73   to the next res
9d90: 75 6c 74 73 65 74 20 69 6e 20 6d 75 6c 74 69 70  ultset in multip
9da0: 6c 65 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67  le row-returning
9db0: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20   SQL command..  
9dc0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9dd0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
9de0: 73 3e 54 72 75 65 20 69 66 20 74 68 65 20 63 6f  s>True if the co
9df0: 6d 6d 61 6e 64 20 77 61 73 20 73 75 63 63 65 73  mmand was succes
9e00: 73 66 75 6c 20 61 6e 64 20 61 20 6e 65 77 20 72  sful and a new r
9e10: 65 73 75 6c 74 73 65 74 20 69 73 20 61 76 61 69  esultset is avai
9e20: 6c 61 62 6c 65 2c 20 46 61 6c 73 65 20 6f 74 68  lable, False oth
9e30: 65 72 77 69 73 65 2e 3c 2f 72 65 74 75 72 6e 73  erwise.</returns
9e40: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
9e50: 72 72 69 64 65 20 62 6f 6f 6c 20 4e 65 78 74 52  rride bool NextR
9e60: 65 73 75 6c 74 28 29 0a 20 20 20 20 7b 0d 0a 20  esult().    {.. 
9e70: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
9e80: 65 64 28 29 3b 0a 20 20 20 20 20 20 43 68 65 63  ed();.      Chec
9e90: 6b 43 6c 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20  kClosed();..    
9ea0: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
9eb0: 74 20 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0a 20  t stmt = null;. 
9ec0: 20 20 20 20 20 69 6e 74 20 66 69 65 6c 64 43 6f       int fieldCo
9ed0: 75 6e 74 3b 0a 0a 20 20 20 20 20 20 77 68 69 6c  unt;..      whil
9ee0: 65 20 28 74 72 75 65 29 0a 20 20 20 20 20 20 7b  e (true).      {
9ef0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74  ..        if (st
9f00: 6d 74 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 5f 61  mt == null && _a
9f10: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 21  ctiveStatement !
9f20: 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76  = null && _activ
9f30: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 20  eStatement._sql 
9f40: 21 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69  != null && _acti
9f50: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
9f60: 2e 49 73 4f 70 65 6e 28 29 29 0a 20 20 20 20 20  .IsOpen()).     
9f70: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 2f     {.          /
9f80: 2f 20 52 65 73 65 74 20 74 68 65 20 70 72 65 76  / Reset the prev
9f90: 69 6f 75 73 6c 79 2d 65 78 65 63 75 74 65 64 20  iously-executed 
9fa0: 73 74 61 74 65 6d 65 6e 74 0a 20 20 20 20 20 20  statement.      
9fb0: 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65      _activeState
9fc0: 6d 65 6e 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28  ment._sql.Reset(
9fd0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
9fe0: 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  );..          //
9ff0: 20 49 66 20 77 65 27 72 65 20 6f 6e 6c 79 20 73   If we're only s
a000: 75 70 70 6f 73 65 64 20 74 6f 20 72 65 74 75 72  upposed to retur
a010: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 73 65  n a single rowse
a020: 74 2c 20 73 74 65 70 20 74 68 72 6f 75 67 68 20  t, step through 
a030: 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 73 74  all remaining st
a040: 61 74 65 6d 65 6e 74 73 20 6f 6e 63 65 20 75 6e  atements once un
a050: 74 69 6c 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  til.          //
a060: 20 74 68 65 79 20 61 72 65 20 61 6c 6c 20 64 6f   they are all do
a070: 6e 65 20 61 6e 64 20 72 65 74 75 72 6e 20 66 61  ne and return fa
a080: 6c 73 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20  lse to indicate 
a090: 6e 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74 73 65  no more resultse
a0a0: 74 73 20 65 78 69 73 74 2e 0a 20 20 20 20 20 20  ts exist..      
a0b0: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
a0c0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
a0d0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 69 6e 67  andBehavior.Sing
a0e0: 6c 65 52 65 73 75 6c 74 29 20 21 3d 20 30 29 0a  leResult) != 0).
a0f0: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
a100: 20 20 20 20 20 20 20 20 66 6f 72 20 28 3b 20 3b          for (; ;
a110: 20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b   ).            {
a120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
a130: 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 47  tmt = _command.G
a140: 65 74 53 74 61 74 65 6d 65 6e 74 28 5f 61 63 74  etStatement(_act
a150: 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65  iveStatementInde
a160: 78 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 20 20  x + 1);.        
a170: 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d        if (stmt =
a180: 3d 20 6e 75 6c 6c 29 20 62 72 65 61 6b 3b 0a 20  = null) break;. 
a190: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 61 63               _ac
a1a0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64  tiveStatementInd
a1b0: 65 78 2b 2b 3b 0a 0a 20 20 20 20 20 20 20 20 20  ex++;..         
a1c0: 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 2e 53       stmt._sql.S
a1d0: 74 65 70 28 73 74 6d 74 29 3b 0a 20 20 20 20 20  tep(stmt);.     
a1e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d           if (stm
a1f0: 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f 75  t._sql.ColumnCou
a200: 6e 74 28 73 74 6d 74 29 20 3d 3d 20 30 29 0a 20  nt(stmt) == 0). 
a210: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20               {. 
a220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a230: 66 20 28 5f 72 6f 77 73 41 66 66 65 63 74 65 64  f (_rowsAffected
a240: 20 3d 3d 20 2d 31 29 20 5f 72 6f 77 73 41 66 66   == -1) _rowsAff
a250: 65 63 74 65 64 20 3d 20 30 3b 0a 20 20 20 20 20  ected = 0;.     
a260: 20 20 20 20 20 20 20 20 20 20 20 5f 72 6f 77 73             _rows
a270: 41 66 66 65 63 74 65 64 20 2b 3d 20 73 74 6d 74  Affected += stmt
a280: 2e 5f 73 71 6c 2e 43 68 61 6e 67 65 73 3b 0a 20  ._sql.Changes;. 
a290: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
a2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d               stm
a2b0: 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28 73 74 6d  t._sql.Reset(stm
a2c0: 74 29 3b 20 2f 2f 20 47 6f 74 74 61 20 72 65 73  t); // Gotta res
a2d0: 65 74 20 61 66 74 65 72 20 65 76 65 72 79 20 73  et after every s
a2e0: 74 65 70 20 74 6f 20 72 65 6c 65 61 73 65 20 61  tep to release a
a2f0: 6e 79 20 6c 6f 63 6b 73 20 61 6e 64 20 73 75 63  ny locks and suc
a300: 68 21 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  h!.            }
a310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
a320: 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 20  urn false;.     
a330: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
a340: 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 47 65 74  ..        // Get
a350: 20 74 68 65 20 6e 65 78 74 20 73 74 61 74 65 6d   the next statem
a360: 65 6e 74 20 74 6f 20 65 78 65 63 75 74 65 0a 20  ent to execute. 
a370: 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20 5f 63         stmt = _c
a380: 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61 74 65 6d  ommand.GetStatem
a390: 65 6e 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ent(_activeState
a3a0: 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31 29 3b 0a  mentIndex + 1);.
a3b0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77  .        // If w
a3c0: 65 27 76 65 20 72 65 61 63 68 65 64 20 74 68 65  e've reached the
a3d0: 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74 61 74   end of the stat
a3e0: 65 6d 65 6e 74 73 2c 20 72 65 74 75 72 6e 20 66  ements, return f
a3f0: 61 6c 73 65 2c 20 6e 6f 20 6d 6f 72 65 20 72 65  alse, no more re
a400: 73 75 6c 74 73 65 74 73 0a 20 20 20 20 20 20 20  sultsets.       
a410: 20 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c   if (stmt == nul
a420: 6c 29 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  l).          ret
a430: 75 72 6e 20 66 61 6c 73 65 3b 0a 0a 20 20 20 20  urn false;..    
a440: 20 20 20 20 2f 2f 20 49 66 20 77 65 20 77 65 72      // If we wer
a450: 65 20 6f 6e 20 61 20 63 75 72 72 65 6e 74 20 72  e on a current r
a460: 65 73 75 6c 74 73 65 74 2c 20 73 65 74 20 74 68  esultset, set th
a470: 65 20 73 74 61 74 65 20 74 6f 20 22 64 6f 6e 65  e state to "done
a480: 20 72 65 61 64 69 6e 67 22 20 66 6f 72 20 69 74   reading" for it
a490: 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 72 65  .        if (_re
a4a0: 61 64 69 6e 67 53 74 61 74 65 20 3c 20 31 29 0a  adingState < 1).
a4b0: 20 20 20 20 20 20 20 20 20 20 5f 72 65 61 64 69            _readi
a4c0: 6e 67 53 74 61 74 65 20 3d 20 31 3b 0a 0a 20 20  ngState = 1;..  
a4d0: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
a4e0: 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b 0a 0a  tementIndex++;..
a4f0: 20 20 20 20 20 20 20 20 66 69 65 6c 64 43 6f 75          fieldCou
a500: 6e 74 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 2e 43  nt = stmt._sql.C
a510: 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29  olumnCount(stmt)
a520: 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66  ;..        // If
a530: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   the statement i
a540: 73 20 6e 6f 74 20 61 20 73 65 6c 65 63 74 20 73  s not a select s
a550: 74 61 74 65 6d 65 6e 74 20 6f 72 20 77 65 27 72  tatement or we'r
a560: 65 20 6e 6f 74 20 72 65 74 72 69 65 76 69 6e 67  e not retrieving
a570: 20 73 63 68 65 6d 61 20 6f 6e 6c 79 2c 20 74 68   schema only, th
a580: 65 6e 20 70 65 72 66 6f 72 6d 20 74 68 65 20 69  en perform the i
a590: 6e 69 74 69 61 6c 20 73 74 65 70 0a 20 20 20 20  nitial step.    
a5a0: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
a5b0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
a5c0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 63 68 65  andBehavior.Sche
a5d0: 6d 61 4f 6e 6c 79 29 20 3d 3d 20 30 20 7c 7c 20  maOnly) == 0 || 
a5e0: 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d 20 30 29  fieldCount == 0)
a5f0: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
a600: 20 20 20 20 20 69 66 20 28 73 74 6d 74 2e 5f 73       if (stmt._s
a610: 71 6c 2e 53 74 65 70 28 73 74 6d 74 29 29 0a 20  ql.Step(stmt)). 
a620: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
a630: 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53         _readingS
a640: 74 61 74 65 20 3d 20 2d 31 3b 0a 20 20 20 20 20  tate = -1;.     
a650: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
a660: 20 65 6c 73 65 20 69 66 20 28 66 69 65 6c 64 43   else if (fieldC
a670: 6f 75 6e 74 20 3d 3d 20 30 29 20 2f 2f 20 4e 6f  ount == 0) // No
a680: 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 2c 20   rows returned, 
a690: 69 66 20 66 69 65 6c 64 43 6f 75 6e 74 20 69 73  if fieldCount is
a6a0: 20 7a 65 72 6f 2c 20 73 6b 69 70 20 74 6f 20 74   zero, skip to t
a6b0: 68 65 20 6e 65 78 74 20 73 74 61 74 65 6d 65 6e  he next statemen
a6c0: 74 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  t.          {.  
a6d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 72            if (_r
a6e0: 6f 77 73 41 66 66 65 63 74 65 64 20 3d 3d 20 2d  owsAffected == -
a6f0: 31 29 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64  1) _rowsAffected
a700: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
a710: 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20    _rowsAffected 
a720: 2b 3d 20 73 74 6d 74 2e 5f 73 71 6c 2e 43 68 61  += stmt._sql.Cha
a730: 6e 67 65 73 3b 0a 20 20 20 20 20 20 20 20 20 20  nges;.          
a740: 20 20 73 74 6d 74 2e 5f 73 71 6c 2e 52 65 73 65    stmt._sql.Rese
a750: 74 28 73 74 6d 74 29 3b 0a 20 20 20 20 20 20 20  t(stmt);.       
a760: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 20 2f       continue; /
a770: 2f 20 53 6b 69 70 20 74 68 69 73 20 63 6f 6d 6d  / Skip this comm
a780: 61 6e 64 20 61 6e 64 20 6d 6f 76 65 20 74 6f 20  and and move to 
a790: 74 68 65 20 6e 65 78 74 2c 20 69 74 20 77 61 73  the next, it was
a7a0: 20 6e 6f 74 20 61 20 72 6f 77 2d 72 65 74 75 72   not a row-retur
a7b0: 6e 69 6e 67 20 72 65 73 75 6c 74 73 65 74 0a 20  ning resultset. 
a7c0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
a7d0: 20 20 20 20 20 65 6c 73 65 20 2f 2f 20 4e 6f 20       else // No 
a7e0: 72 6f 77 73 2c 20 66 69 65 6c 64 43 6f 75 6e 74  rows, fieldCount
a7f0: 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 73 6f 20   is non-zero so 
a800: 73 74 6f 70 20 68 65 72 65 0a 20 20 20 20 20 20  stop here.      
a810: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
a820: 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20    _readingState 
a830: 3d 20 31 3b 20 2f 2f 20 54 68 69 73 20 63 6f 6d  = 1; // This com
a840: 6d 61 6e 64 20 72 65 74 75 72 6e 65 64 20 63 6f  mand returned co
a850: 6c 75 6d 6e 73 20 62 75 74 20 6e 6f 20 72 6f 77  lumns but no row
a860: 73 2c 20 73 6f 20 72 65 74 75 72 6e 20 74 72 75  s, so return tru
a870: 65 2c 20 62 75 74 20 48 61 73 52 6f 77 73 20 3d  e, but HasRows =
a880: 20 66 61 6c 73 65 20 61 6e 64 20 52 65 61 64 28   false and Read(
a890: 29 20 72 65 74 75 72 6e 73 20 66 61 6c 73 65 0a  ) returns false.
a8a0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
a8b0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
a8c0: 2f 20 41 68 68 2c 20 77 65 20 66 6f 75 6e 64 20  / Ahh, we found 
a8d0: 61 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  a row-returning 
a8e0: 72 65 73 75 6c 74 73 65 74 20 65 6c 69 67 69 62  resultset eligib
a8f0: 6c 65 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65  le to be returne
a900: 64 21 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69  d!.        _acti
a910: 76 65 53 74 61 74 65 6d 65 6e 74 20 3d 20 73 74  veStatement = st
a920: 6d 74 3b 0a 20 20 20 20 20 20 20 20 5f 66 69 65  mt;.        _fie
a930: 6c 64 43 6f 75 6e 74 20 3d 20 66 69 65 6c 64 43  ldCount = fieldC
a940: 6f 75 6e 74 3b 0a 20 20 20 20 20 20 20 20 5f 66  ount;.        _f
a950: 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d 20  ieldTypeArray = 
a960: 6e 75 6c 6c 3b 0a 0a 20 20 20 20 20 20 20 20 69  null;..        i
a970: 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61  f ((_commandBeha
a980: 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65  vior & CommandBe
a990: 68 61 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 29 20  havior.KeyInfo) 
a9a0: 21 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20 20  != 0).          
a9b0: 4c 6f 61 64 4b 65 79 49 6e 66 6f 28 29 3b 0a 0a  LoadKeyInfo();..
a9c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
a9d0: 72 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  rue;.      }.   
a9e0: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
a9f0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65  mary>.    /// Re
aa00: 74 72 69 65 76 65 73 20 74 68 65 20 53 51 4c 69  trieves the SQLi
aa10: 74 65 54 79 70 65 20 66 6f 72 20 61 20 67 69 76  teType for a giv
aa20: 65 6e 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 63  en column, and c
aa30: 61 63 68 65 73 20 69 74 20 74 6f 20 61 76 6f 69  aches it to avoi
aa40: 64 20 72 65 70 65 74 65 74 69 76 65 20 69 6e 74  d repetetive int
aa50: 65 72 6f 70 20 63 61 6c 6c 73 2e 0a 20 20 20 20  erop calls..    
aa60: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
aa70: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
aa80: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
aa90: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
aaa0: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
aab0: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
aac0: 72 6e 73 3e 41 20 53 51 4c 69 74 65 54 79 70 65  rns>A SQLiteType
aad0: 20 73 74 72 75 63 74 75 72 65 3c 2f 72 65 74 75   structure</retu
aae0: 72 6e 73 3e 0a 20 20 20 20 70 72 69 76 61 74 65  rns>.    private
aaf0: 20 53 51 4c 69 74 65 54 79 70 65 20 47 65 74 53   SQLiteType GetS
ab00: 51 4c 69 74 65 54 79 70 65 28 69 6e 74 20 69 29  QLiteType(int i)
ab10: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 53 51 4c  .    {.      SQL
ab20: 69 74 65 54 79 70 65 20 74 79 70 3b 0a 0a 20 20  iteType typ;..  
ab30: 20 20 20 20 2f 2f 20 49 6e 69 74 69 61 6c 69 7a      // Initializ
ab40: 65 20 74 68 65 20 66 69 65 6c 64 20 74 79 70 65  e the field type
ab50: 73 20 61 72 72 61 79 20 69 66 20 6e 6f 74 20 61  s array if not a
ab60: 6c 72 65 61 64 79 20 69 6e 69 74 69 61 6c 69 7a  lready initializ
ab70: 65 64 0a 20 20 20 20 20 20 69 66 20 28 5f 66 69  ed.      if (_fi
ab80: 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d 3d 20  eldTypeArray == 
ab90: 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 5f 66  null).        _f
aba0: 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d 20  ieldTypeArray = 
abb0: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 5b 56  new SQLiteType[V
abc0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
abd0: 5d 3b 0a 0a 20 20 20 20 20 20 2f 2f 20 49 6e 69  ];..      // Ini
abe0: 74 69 61 6c 69 7a 65 20 74 68 69 73 20 63 6f 6c  tialize this col
abf0: 75 6d 6e 27 73 20 66 69 65 6c 64 20 74 79 70 65  umn's field type
ac00: 20 69 6e 73 74 61 6e 63 65 0a 20 20 20 20 20 20   instance.      
ac10: 69 66 20 28 5f 66 69 65 6c 64 54 79 70 65 41 72  if (_fieldTypeAr
ac20: 72 61 79 5b 69 5d 20 3d 3d 20 6e 75 6c 6c 29 20  ray[i] == null) 
ac30: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 5b  _fieldTypeArray[
ac40: 69 5d 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 54  i] = new SQLiteT
ac50: 79 70 65 28 29 3b 0a 0a 20 20 20 20 20 20 74 79  ype();..      ty
ac60: 70 20 3d 20 5f 66 69 65 6c 64 54 79 70 65 41 72  p = _fieldTypeAr
ac70: 72 61 79 5b 69 5d 3b 0a 0a 20 20 20 20 20 20 2f  ray[i];..      /
ac80: 2f 20 49 66 20 6e 6f 74 20 69 6e 69 74 69 61 6c  / If not initial
ac90: 69 7a 65 64 2c 20 74 68 65 6e 20 66 65 74 63 68  ized, then fetch
aca0: 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 63 6f   the declared co
acb0: 6c 75 6d 6e 20 64 61 74 61 74 79 70 65 20 61 6e  lumn datatype an
acc0: 64 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6e  d attempt to con
acd0: 76 65 72 74 20 69 74 20 0a 20 20 20 20 20 20 2f  vert it .      /
ace0: 2f 20 74 6f 20 61 20 6b 6e 6f 77 6e 20 44 62 54  / to a known DbT
acf0: 79 70 65 2e 0a 20 20 20 20 20 20 69 66 20 28 74  ype..      if (t
ad00: 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54  yp.Affinity == T
ad10: 79 70 65 41 66 66 69 6e 69 74 79 2e 55 6e 69 6e  ypeAffinity.Unin
ad20: 69 74 69 61 6c 69 7a 65 64 29 0a 20 20 20 20 20  itialized).     
ad30: 20 20 20 74 79 70 2e 54 79 70 65 20 3d 20 53 51     typ.Type = SQ
ad40: 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54 79 70 65  LiteConvert.Type
ad50: 4e 61 6d 65 54 6f 44 62 54 79 70 65 28 5f 61 63  NameToDbType(_ac
ad60: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
ad70: 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 5f 61  ql.ColumnType(_a
ad80: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
ad90: 69 2c 20 6f 75 74 20 74 79 70 2e 41 66 66 69 6e  i, out typ.Affin
ada0: 69 74 79 29 29 3b 0a 20 20 20 20 20 20 65 6c 73  ity));.      els
adb0: 65 0a 20 20 20 20 20 20 20 20 74 79 70 2e 41 66  e.        typ.Af
adc0: 66 69 6e 69 74 79 20 3d 20 5f 61 63 74 69 76 65  finity = _active
add0: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43  Statement._sql.C
ade0: 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 5f 61  olumnAffinity(_a
adf0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
ae00: 69 29 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72  i);..      retur
ae10: 6e 20 74 79 70 3b 0a 20 20 20 20 7d 0a 0a 20 20  n typ;.    }..  
ae20: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
ae30: 20 20 20 20 2f 2f 2f 20 52 65 61 64 73 20 74 68      /// Reads th
ae40: 65 20 6e 65 78 74 20 72 6f 77 20 66 72 6f 6d 20  e next row from 
ae50: 74 68 65 20 72 65 73 75 6c 74 73 65 74 0a 20 20  the resultset.  
ae60: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
ae70: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
ae80: 73 3e 54 72 75 65 20 69 66 20 61 20 6e 65 77 20  s>True if a new 
ae90: 72 6f 77 20 77 61 73 20 73 75 63 63 65 73 73 66  row was successf
aea0: 75 6c 6c 79 20 6c 6f 61 64 65 64 20 61 6e 64 20  ully loaded and 
aeb0: 69 73 20 72 65 61 64 79 20 66 6f 72 20 70 72 6f  is ready for pro
aec0: 63 65 73 73 69 6e 67 3c 2f 72 65 74 75 72 6e 73  cessing</returns
aed0: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
aee0: 72 72 69 64 65 20 62 6f 6f 6c 20 52 65 61 64 28  rride bool Read(
aef0: 29 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43  ).    {..      C
af00: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a  heckDisposed();.
af10: 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65        CheckClose
af20: 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28  d();..      if (
af30: 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 3d  _readingState ==
af40: 20 2d 31 29 20 2f 2f 20 46 69 72 73 74 20 73 74   -1) // First st
af50: 65 70 20 77 61 73 20 61 6c 72 65 61 64 79 20 64  ep was already d
af60: 6f 6e 65 20 61 74 20 74 68 65 20 4e 65 78 74 52  one at the NextR
af70: 65 73 75 6c 74 28 29 20 6c 65 76 65 6c 2c 20 73  esult() level, s
af80: 6f 20 64 6f 6e 27 74 20 73 74 65 70 20 61 67 61  o don't step aga
af90: 69 6e 2c 20 6a 75 73 74 20 72 65 74 75 72 6e 20  in, just return 
afa0: 74 72 75 65 2e 0a 20 20 20 20 20 20 7b 0a 20 20  true..      {.  
afb0: 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74        _readingSt
afc0: 61 74 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ate = 0;.       
afd0: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20   return true;.  
afe0: 20 20 20 20 7d 0a 20 20 20 20 20 20 65 6c 73 65      }.      else
aff0: 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
b000: 74 65 20 3d 3d 20 30 29 20 2f 2f 20 41 63 74 69  te == 0) // Acti
b010: 76 65 6c 79 20 72 65 61 64 69 6e 67 20 72 6f 77  vely reading row
b020: 73 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  s.      {.      
b030: 20 20 2f 2f 20 44 6f 6e 27 74 20 72 65 61 64 20    // Don't read 
b040: 61 20 6e 65 77 20 72 6f 77 20 69 66 20 74 68 65  a new row if the
b050: 20 63 6f 6d 6d 61 6e 64 20 62 65 68 61 76 69 6f   command behavio
b060: 72 20 64 69 63 74 61 74 65 73 20 53 69 6e 67 6c  r dictates Singl
b070: 65 52 6f 77 2e 20 20 57 65 27 76 65 20 61 6c 72  eRow.  We've alr
b080: 65 61 64 79 20 72 65 61 64 20 74 68 65 20 66 69  eady read the fi
b090: 72 73 74 20 72 6f 77 2e 0a 20 20 20 20 20 20 20  rst row..       
b0a0: 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65   if ((_commandBe
b0b0: 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64  havior & Command
b0c0: 42 65 68 61 76 69 6f 72 2e 53 69 6e 67 6c 65 52  Behavior.SingleR
b0d0: 6f 77 29 20 3d 3d 20 30 29 0a 20 20 20 20 20 20  ow) == 0).      
b0e0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66    {.          if
b0f0: 20 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65   (_activeStateme
b100: 6e 74 2e 5f 73 71 6c 2e 53 74 65 70 28 5f 61 63  nt._sql.Step(_ac
b110: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 29 20 3d  tiveStatement) =
b120: 3d 20 74 72 75 65 29 0a 20 20 20 20 20 20 20 20  = true).        
b130: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
b140: 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20  if (_keyInfo != 
b150: 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 20 20  null).          
b160: 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 52 65 73      _keyInfo.Res
b170: 65 74 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 20  et();..         
b180: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a     return true;.
b190: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
b1a0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 5f      }..        _
b1b0: 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31  readingState = 1
b1c0: 3b 20 2f 2f 20 46 69 6e 69 73 68 65 64 20 72 65  ; // Finished re
b1d0: 61 64 69 6e 67 20 72 6f 77 73 0a 20 20 20 20 20  ading rows.     
b1e0: 20 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
b1f0: 20 66 61 6c 73 65 3b 0a 20 20 20 20 7d 0a 0a 20   false;.    }.. 
b200: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
b210: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
b220: 65 20 74 68 65 20 63 6f 75 6e 74 20 6f 66 20 72  e the count of r
b230: 65 63 6f 72 64 73 20 61 66 66 65 63 74 65 64 20  ecords affected 
b240: 62 79 20 61 6e 20 75 70 64 61 74 65 2f 69 6e 73  by an update/ins
b250: 65 72 74 20 63 6f 6d 6d 61 6e 64 2e 20 20 4f 6e  ert command.  On
b260: 6c 79 20 76 61 6c 69 64 20 6f 6e 63 65 20 74 68  ly valid once th
b270: 65 20 64 61 74 61 20 72 65 61 64 65 72 20 69 73  e data reader is
b280: 20 63 6c 6f 73 65 64 21 0a 20 20 20 20 2f 2f 2f   closed!.    ///
b290: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
b2a0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
b2b0: 69 6e 74 20 52 65 63 6f 72 64 73 41 66 66 65 63  int RecordsAffec
b2c0: 74 65 64 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ted.    {..     
b2d0: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
b2e0: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 28  osed(); return (
b2f0: 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3c 20  _rowsAffected < 
b300: 30 29 20 3f 20 30 20 3a 20 5f 72 6f 77 73 41 66  0) ? 0 : _rowsAf
b310: 66 65 63 74 65 64 3b 20 7d 0a 20 20 20 20 7d 0a  fected; }.    }.
b320: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
b330: 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78  y>.    /// Index
b340: 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 64  er to retrieve d
b350: 61 74 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ata from a colum
b360: 6e 20 67 69 76 65 6e 20 69 74 73 20 6e 61 6d 65  n given its name
b370: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
b380: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
b390: 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 54  am name="name">T
b3a0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
b3b0: 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76  olumn to retriev
b3c0: 65 20 64 61 74 61 20 66 6f 72 3c 2f 70 61 72 61  e data for</para
b3d0: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
b3e0: 72 6e 73 3e 54 68 65 20 76 61 6c 75 65 20 63 6f  rns>The value co
b3f0: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63  ntained in the c
b400: 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0a  olumn</returns>.
b410: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
b420: 69 64 65 20 6f 62 6a 65 63 74 20 74 68 69 73 5b  ide object this[
b430: 73 74 72 69 6e 67 20 6e 61 6d 65 5d 0a 20 20 20  string name].   
b440: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20   {..      get { 
b450: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
b460: 20 72 65 74 75 72 6e 20 47 65 74 56 61 6c 75 65   return GetValue
b470: 28 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d 65  (GetOrdinal(name
b480: 29 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  )); }.    }..   
b490: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
b4a0: 20 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72 20 74     /// Indexer t
b4b0: 6f 20 72 65 74 72 69 65 76 65 20 64 61 74 61 20  o retrieve data 
b4c0: 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 67 69  from a column gi
b4d0: 76 65 6e 20 69 74 73 20 69 0a 20 20 20 20 2f 2f  ven its i.    //
b4e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
b4f0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
b500: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
b510: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
b520: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
b530: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
b540: 73 3e 54 68 65 20 76 61 6c 75 65 20 63 6f 6e 74  s>The value cont
b550: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c  ained in the col
b560: 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  umn</returns>.  
b570: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
b580: 65 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 69 6e  e object this[in
b590: 74 20 69 5d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t i].    {..    
b5a0: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
b5b0: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
b5c0: 47 65 74 56 61 6c 75 65 28 69 29 3b 20 7d 0a 20  GetValue(i); }. 
b5d0: 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74     }..    privat
b5e0: 65 20 76 6f 69 64 20 4c 6f 61 64 4b 65 79 49 6e  e void LoadKeyIn
b5f0: 66 6f 28 29 0a 20 20 20 20 7b 0d 0a 20 20 20 20  fo().    {..    
b600: 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f      if (_keyInfo
b610: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
b620: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b630: 20 20 5f 6b 65 79 49 6e 66 6f 2e 44 69 73 70 6f    _keyInfo.Dispo
b640: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
b650: 20 20 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 75     _keyInfo = nu
b660: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ll;..        }..
b670: 0d 0a 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e  ..        _keyIn
b680: 66 6f 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 4b  fo = new SQLiteK
b690: 65 79 52 65 61 64 65 72 28 5f 63 6f 6d 6d 61 6e  eyReader(_comman
b6a0: 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68  d.Connection, th
b6b0: 69 73 2c 20 5f 61 63 74 69 76 65 53 74 61 74 65  is, _activeState
b6c0: 6d 65 6e 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ment);.    }.  }
b6d0: 0a 7d 0a                                         .}.