System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 5d5d10bac266a85d58b7e81899a5d7a135e212b9:


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 0d 0a 0a 20 20  Disposed();...  
1560: 20 20 20 20 74 72 79 0a 20 20 20 20 20 20 7b 0a      try.      {.
1570: 20 20 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d          if (_com
1580: 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0a 20 20  mand != null).  
1590: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
15a0: 20 20 74 72 79 0a 20 20 20 20 20 20 20 20 20 20    try.          
15b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  {.            tr
15c0: 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a  y.            {.
15d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15e0: 20 4d 61 6b 65 20 73 75 72 65 20 77 65 27 76 65   Make sure we've
15f0: 20 6e 6f 74 20 62 65 65 6e 20 63 61 6e 63 65 6c   not been cancel
1600: 65 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ed.             
1610: 20 69 66 20 28 5f 76 65 72 73 69 6f 6e 20 21 3d   if (_version !=
1620: 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   0).            
1630: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
1640: 20 20 20 20 74 72 79 0a 20 20 20 20 20 20 20 20      try.        
1650: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
1660: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
1670: 65 20 28 4e 65 78 74 52 65 73 75 6c 74 28 29 29  e (NextResult())
1680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1690: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
16a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
16b0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
16c0: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
16d0: 28 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e  (SQLiteException
16e0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
16f0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
1700: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1710: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1720: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6c 65      _command.Cle
1730: 61 72 44 61 74 61 52 65 61 64 65 72 28 29 3b 0a  arDataReader();.
1740: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
1750: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
1760: 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a  y.            {.
1770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1780: 20 49 66 20 74 68 65 20 64 61 74 61 72 65 61 64   If the dataread
1790: 65 72 27 73 20 62 65 68 61 76 69 6f 72 20 69 6e  er's behavior in
17a0: 63 6c 75 64 65 73 20 63 6c 6f 73 69 6e 67 20 74  cludes closing t
17b0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74  he connection, t
17c0: 68 65 6e 20 64 6f 20 73 6f 20 68 65 72 65 2e 0a  hen do so here..
17d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
17e0: 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
17f0: 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
1800: 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65  avior.CloseConne
1810: 63 74 69 6f 6e 29 20 21 3d 20 30 20 26 26 20 5f  ction) != 0 && _
1820: 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69  command.Connecti
1830: 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  on != null).    
1840: 20 20 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6d              _com
1850: 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e  mand.Connection.
1860: 43 6c 6f 73 65 28 29 3b 0a 20 20 20 20 20 20 20  Close();.       
1870: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1880: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6e   }.          fin
1890: 61 6c 6c 79 0a 20 20 20 20 20 20 20 20 20 20 7b  ally.          {
18a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
18b0: 28 5f 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64  (_disposeCommand
18c0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
18d0: 5f 63 6f 6d 6d 61 6e 64 2e 44 69 73 70 6f 73 65  _command.Dispose
18e0: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ();.          }.
18f0: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
1900: 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 6e 75     _command = nu
1910: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 5f 61 63 74  ll;.        _act
1920: 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d 20 6e  iveStatement = n
1930: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 5f 66 69  ull;.        _fi
1940: 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d 20 6e  eldTypeArray = n
1950: 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ull;.      }.   
1960: 20 20 20 66 69 6e 61 6c 6c 79 0a 20 20 20 20 20     finally.     
1970: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f   {.        if (_
1980: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
1990: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
19a0: 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 44 69       _keyInfo.Di
19b0: 73 70 6f 73 65 28 29 3b 0a 20 20 20 20 20 20 20  spose();.       
19c0: 20 20 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 75     _keyInfo = nu
19d0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ll;.        }.  
19e0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
19f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
1a00: 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20     /// Throw an 
1a10: 65 72 72 6f 72 20 69 66 20 74 68 65 20 64 61 74  error if the dat
1a20: 61 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65  areader is close
1a30: 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  d.    /// </summ
1a40: 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65  ary>.    private
1a50: 20 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73 65   void CheckClose
1a60: 64 28 29 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  d().    {..     
1a70: 20 69 66 20 28 21 5f 74 68 72 6f 77 4f 6e 44 69   if (!_throwOnDi
1a80: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
1a90: 20 72 65 74 75 72 6e 3b 0a 0a 20 20 20 20 20 20   return;..      
1aa0: 69 66 20 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d 20  if (_command == 
1ab0: 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 74 68  null).        th
1ac0: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
1ad0: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
1ae0: 6e 28 22 44 61 74 61 52 65 61 64 65 72 20 68 61  n("DataReader ha
1af0: 73 20 62 65 65 6e 20 63 6c 6f 73 65 64 22 29 3b  s been closed");
1b00: 0a 0a 20 20 20 20 20 20 69 66 20 28 5f 76 65 72  ..      if (_ver
1b10: 73 69 6f 6e 20 3d 3d 20 30 29 0a 20 20 20 20 20  sion == 0).     
1b20: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
1b30: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 28 69 6e  iteException((in
1b40: 74 29 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  t)SQLiteErrorCod
1b50: 65 2e 41 62 6f 72 74 2c 20 22 45 78 65 63 75 74  e.Abort, "Execut
1b60: 69 6f 6e 20 77 61 73 20 61 62 6f 72 74 65 64 20  ion was aborted 
1b70: 62 79 20 74 68 65 20 75 73 65 72 22 29 3b 0a 0a  by the user");..
1b80: 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61        if (_comma
1b90: 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 53 74  nd.Connection.St
1ba0: 61 74 65 20 21 3d 20 43 6f 6e 6e 65 63 74 69 6f  ate != Connectio
1bb0: 6e 53 74 61 74 65 2e 4f 70 65 6e 20 7c 7c 20 5f  nState.Open || _
1bc0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69  command.Connecti
1bd0: 6f 6e 2e 5f 76 65 72 73 69 6f 6e 20 21 3d 20 5f  on._version != _
1be0: 76 65 72 73 69 6f 6e 29 0a 20 20 20 20 20 20 20  version).       
1bf0: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
1c00: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
1c10: 74 69 6f 6e 28 22 43 6f 6e 6e 65 63 74 69 6f 6e  tion("Connection
1c20: 20 77 61 73 20 63 6c 6f 73 65 64 2c 20 73 74 61   was closed, sta
1c30: 74 65 6d 65 6e 74 20 77 61 73 20 74 65 72 6d 69  tement was termi
1c40: 6e 61 74 65 64 22 29 3b 0a 20 20 20 20 7d 0a 0a  nated");.    }..
1c50: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1c60: 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20  >.    /// Throw 
1c70: 61 6e 20 65 72 72 6f 72 20 69 66 20 61 20 72 6f  an error if a ro
1c80: 77 20 69 73 20 6e 6f 74 20 6c 6f 61 64 65 64 0a  w is not loaded.
1c90: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1ca0: 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 76  y>.    private v
1cb0: 6f 69 64 20 43 68 65 63 6b 56 61 6c 69 64 52 6f  oid CheckValidRo
1cc0: 77 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  w().    {.      
1cd0: 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74  if (_readingStat
1ce0: 65 20 21 3d 20 30 29 0a 20 20 20 20 20 20 20 20  e != 0).        
1cf0: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
1d00: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
1d10: 69 6f 6e 28 22 4e 6f 20 63 75 72 72 65 6e 74 20  ion("No current 
1d20: 72 6f 77 22 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  row");.    }..  
1d30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
1d40: 20 20 20 20 2f 2f 2f 20 45 6e 75 6d 65 72 61 74      /// Enumerat
1d50: 6f 72 20 73 75 70 70 6f 72 74 0a 20 20 20 20 2f  or support.    /
1d60: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
1d70: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
1d80: 65 74 75 72 6e 73 20 61 20 44 62 45 6e 75 6d 65  eturns a DbEnume
1d90: 72 61 74 6f 72 20 6f 62 6a 65 63 74 2e 3c 2f 72  rator object.</r
1da0: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
1db0: 69 63 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c  ic override Coll
1dc0: 65 63 74 69 6f 6e 73 2e 49 45 6e 75 6d 65 72 61  ections.IEnumera
1dd0: 74 6f 72 20 47 65 74 45 6e 75 6d 65 72 61 74 6f  tor GetEnumerato
1de0: 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  r()..    {..    
1df0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
1e00: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
1e10: 6e 65 77 20 44 62 45 6e 75 6d 65 72 61 74 6f 72  new DbEnumerator
1e20: 28 74 68 69 73 2c 20 28 28 5f 63 6f 6d 6d 61 6e  (this, ((_comman
1e30: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
1e40: 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73  andBehavior.Clos
1e50: 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 3d 3d 20  eConnection) == 
1e60: 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e  CommandBehavior.
1e70: 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 29  CloseConnection)
1e80: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f  );.    }..    //
1e90: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
1ea0: 2f 2f 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e  /// Not implemen
1eb0: 74 65 64 2e 20 20 52 65 74 75 72 6e 73 20 30 0a  ted.  Returns 0.
1ec0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1ed0: 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  y>.    public ov
1ee0: 65 72 72 69 64 65 20 69 6e 74 20 44 65 70 74 68  erride int Depth
1ef0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74  .    {.      get
1f00: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1f10: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
1f20: 29 3b 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  );.        Check
1f30: 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  Closed();..     
1f40: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20     return 0;.   
1f50: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
1f60: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
1f70: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
1f80: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1f90: 6d 6e 73 20 69 6e 20 74 68 65 20 63 75 72 72 65  mns in the curre
1fa0: 6e 74 20 72 65 73 75 6c 74 73 65 74 0a 20 20 20  nt resultset.   
1fb0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
1fc0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
1fd0: 69 64 65 20 69 6e 74 20 46 69 65 6c 64 43 6f 75  ide int FieldCou
1fe0: 6e 74 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  nt.    {.      g
1ff0: 65 74 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  et.      {..    
2000: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
2010: 64 28 29 3b 0a 20 20 20 20 20 20 20 20 43 68 65  d();.        Che
2020: 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 0a 20 20  ckClosed();...  
2030: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
2040: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  fo == null).    
2050: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69        return _fi
2060: 65 6c 64 43 6f 75 6e 74 3b 0a 0a 20 20 20 20 20  eldCount;..     
2070: 20 20 20 72 65 74 75 72 6e 20 5f 66 69 65 6c 64     return _field
2080: 43 6f 75 6e 74 20 2b 20 5f 6b 65 79 49 6e 66 6f  Count + _keyInfo
2090: 2e 43 6f 75 6e 74 3b 0a 20 20 20 20 20 20 7d 0a  .Count;.      }.
20a0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
20b0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
20c0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   Returns the num
20d0: 62 65 72 20 6f 66 20 76 69 73 69 62 6c 65 20 66  ber of visible f
20e0: 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63 75 72  ields in the cur
20f0: 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 0a 20  rent resultset. 
2100: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2110: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
2120: 72 72 69 64 65 20 69 6e 74 20 56 69 73 69 62 6c  rride int Visibl
2130: 65 46 69 65 6c 64 43 6f 75 6e 74 0a 20 20 20 20  eFieldCount.    
2140: 7b 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  {.      get..   
2150: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
2160: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 20  eckDisposed();. 
2170: 20 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73         CheckClos
2180: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ed();..        r
2190: 65 74 75 72 6e 20 5f 66 69 65 6c 64 43 6f 75 6e  eturn _fieldCoun
21a0: 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
21b0: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
21c0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 53 51 4c 69  ry>.    /// SQLi
21d0: 74 65 20 69 73 20 69 6e 68 65 72 65 6e 74 6c 79  te is inherently
21e0: 20 75 6e 2d 74 79 70 65 64 2e 20 20 41 6c 6c 20   un-typed.  All 
21f0: 64 61 74 61 74 79 70 65 73 20 69 6e 20 53 51 4c  datatypes in SQL
2200: 69 74 65 20 61 72 65 20 6e 61 74 69 76 65 6c 79  ite are natively
2210: 20 73 74 72 69 6e 67 73 2e 20 20 54 68 65 20 64   strings.  The d
2220: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 65  efinition of the
2230: 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61   columns of a ta
2240: 62 6c 65 0a 20 20 20 20 2f 2f 2f 20 61 6e 64 20  ble.    /// and 
2250: 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
2260: 72 65 74 75 72 6e 65 64 20 74 79 70 65 73 20 61  returned types a
2270: 72 65 20 61 6c 6c 20 77 65 20 68 61 76 65 20 74  re all we have t
2280: 6f 20 67 6f 20 6f 6e 20 74 6f 20 74 79 70 65 2d  o go on to type-
2290: 72 65 73 74 72 69 63 74 20 64 61 74 61 20 69 6e  restrict data in
22a0: 20 74 68 65 20 72 65 61 64 65 72 2e 0a 20 20 20   the reader..   
22b0: 20 2f 2f 2f 20 0a 20 20 20 20 2f 2f 2f 20 54 68   /// .    /// Th
22c0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 61 74 74 65  is function atte
22d0: 6d 70 74 73 20 74 6f 20 76 65 72 69 66 79 20 74  mpts to verify t
22e0: 68 61 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  hat the type of 
22f0: 64 61 74 61 20 62 65 69 6e 67 20 72 65 71 75 65  data being reque
2300: 73 74 65 64 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  sted of a column
2310: 20 6d 61 74 63 68 65 73 20 74 68 65 20 64 61 74   matches the dat
2320: 61 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c  atype of the col
2330: 75 6d 6e 2e 20 20 49 6e 0a 20 20 20 20 2f 2f 2f  umn.  In.    ///
2340: 20 74 68 65 20 63 61 73 65 20 6f 66 20 63 6f 6c   the case of col
2350: 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f  umns that are no
2360: 74 20 62 61 63 6b 65 64 20 69 6e 74 6f 20 61 20  t backed into a 
2370: 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
2380: 2c 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20  , we attempt to 
2390: 6d 61 74 63 68 20 75 70 20 74 68 65 20 61 66 66  match up the aff
23a0: 69 6e 69 74 79 20 6f 66 20 61 20 63 6f 6c 75 6d  inity of a colum
23b0: 6e 20 28 69 6e 74 2c 20 64 6f 75 62 6c 65 2c 20  n (int, double, 
23c0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 29 0a  string or blob).
23d0: 20 20 20 20 2f 2f 2f 20 74 6f 20 61 20 73 65 74      /// to a set
23e0: 20 6f 66 20 6b 6e 6f 77 6e 20 74 79 70 65 73 20   of known types 
23f0: 74 68 61 74 20 63 6c 6f 73 65 6c 79 20 6d 61 74  that closely mat
2400: 63 68 20 74 68 61 74 20 61 66 66 69 6e 69 74 79  ch that affinity
2410: 2e 20 20 49 74 27 73 20 6e 6f 74 20 61 6e 20 65  .  It's not an e
2420: 78 61 63 74 20 73 63 69 65 6e 63 65 2c 20 62 75  xact science, bu
2430: 74 20 69 74 73 20 74 68 65 20 62 65 73 74 20 77  t its the best w
2440: 65 20 63 61 6e 20 64 6f 2e 0a 20 20 20 20 2f 2f  e can do..    //
2450: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
2460: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0a 20   /// <returns>. 
2470: 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63     /// This func
2480: 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 49  tion throws an I
2490: 6e 76 61 6c 69 64 54 79 70 65 43 61 73 74 28 29  nvalidTypeCast()
24a0: 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68   exception if th
24b0: 65 20 72 65 71 75 65 73 74 65 64 20 74 79 70 65  e requested type
24c0: 20 64 6f 65 73 6e 27 74 20 6d 61 74 63 68 20 74   doesn't match t
24d0: 68 65 20 63 6f 6c 75 6d 6e 27 73 20 64 65 66 69  he column's defi
24e0: 6e 69 74 69 6f 6e 20 6f 72 20 61 66 66 69 6e 69  nition or affini
24f0: 74 79 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  ty..    /// </re
2500: 74 75 72 6e 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c  turns>.    /// <
2510: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
2520: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
2530: 63 6f 6c 75 6d 6e 20 74 6f 20 74 79 70 65 2d 63  column to type-c
2540: 68 65 63 6b 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  heck</param>.   
2550: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2560: 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
2570: 77 65 20 77 61 6e 74 20 74 6f 20 67 65 74 20 6f  we want to get o
2580: 75 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ut of the column
2590: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 70 72 69  </param>.    pri
25a0: 76 61 74 65 20 54 79 70 65 41 66 66 69 6e 69 74  vate TypeAffinit
25b0: 79 20 56 65 72 69 66 79 54 79 70 65 28 69 6e 74  y VerifyType(int
25c0: 20 69 2c 20 44 62 54 79 70 65 20 74 79 70 29 0a   i, DbType typ).
25d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65      {..      Che
25e0: 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20  ckClosed();..   
25f0: 20 20 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77     CheckValidRow
2600: 28 29 3b 0a 0a 20 20 20 20 20 20 54 79 70 65 41  ();..      TypeA
2610: 66 66 69 6e 69 74 79 20 61 66 66 69 6e 69 74 79  ffinity affinity
2620: 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65   = GetSQLiteType
2630: 28 69 29 2e 41 66 66 69 6e 69 74 79 3b 0a 0a 20  (i).Affinity;.. 
2640: 20 20 20 20 20 73 77 69 74 63 68 20 28 61 66 66       switch (aff
2650: 69 6e 69 74 79 29 0a 20 20 20 20 20 20 7b 0a 20  inity).      {. 
2660: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
2670: 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0a  Affinity.Int64:.
2680: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
2690: 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74 31  p == DbType.Int1
26a0: 36 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  6) return affini
26b0: 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  ty;.          if
26c0: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
26d0: 49 6e 74 33 32 29 20 72 65 74 75 72 6e 20 61 66  Int32) return af
26e0: 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20  finity;.        
26f0: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
2700: 79 70 65 2e 49 6e 74 36 34 29 20 72 65 74 75 72  ype.Int64) retur
2710: 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20  n affinity;.    
2720: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
2730: 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29   DbType.Boolean)
2740: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
2750: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ;.          if (
2760: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 79  typ == DbType.By
2770: 74 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  te) return affin
2780: 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69  ity;.          i
2790: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
27a0: 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74 75 72  .DateTime) retur
27b0: 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20  n affinity;.    
27c0: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
27d0: 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29 20   DbType.Single) 
27e0: 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b  return affinity;
27f0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
2800: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 6f 75  yp == DbType.Dou
2810: 62 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  ble) return affi
2820: 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20  nity;.          
2830: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
2840: 65 2e 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72  e.Decimal) retur
2850: 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20  n affinity;.    
2860: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2870: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
2880: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0a 20  finity.Double:. 
2890: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
28a0: 20 3d 3d 20 44 62 54 79 70 65 2e 53 69 6e 67 6c   == DbType.Singl
28b0: 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  e) return affini
28c0: 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  ty;.          if
28d0: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
28e0: 44 6f 75 62 6c 65 29 20 72 65 74 75 72 6e 20 61  Double) return a
28f0: 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20  ffinity;.       
2900: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
2910: 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72 65  Type.Decimal) re
2920: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20  turn affinity;. 
2930: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
2940: 20 3d 3d 20 44 62 54 79 70 65 2e 44 61 74 65 54   == DbType.DateT
2950: 69 6d 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  ime) return affi
2960: 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20  nity;.          
2970: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
2980: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
2990: 2e 54 65 78 74 3a 0a 20 20 20 20 20 20 20 20 20  .Text:.         
29a0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
29b0: 70 65 2e 53 42 79 74 65 29 20 72 65 74 75 72 6e  pe.SByte) return
29c0: 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20   affinity;.     
29d0: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
29e0: 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 20 72  DbType.String) r
29f0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a  eturn affinity;.
2a00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
2a10: 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 42 79 74  p == DbType.SByt
2a20: 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  e) return affini
2a30: 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  ty;.          if
2a40: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
2a50: 47 75 69 64 29 20 72 65 74 75 72 6e 20 61 66 66  Guid) return aff
2a60: 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20  inity;.         
2a70: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
2a80: 70 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74  pe.DateTime) ret
2a90: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20  urn affinity;.  
2aa0: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
2ab0: 3d 3d 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61  == DbType.Decima
2ac0: 6c 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  l) return affini
2ad0: 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72  ty;.          br
2ae0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73  eak;.        cas
2af0: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42  e TypeAffinity.B
2b00: 6c 6f 62 3a 0a 20 20 20 20 20 20 20 20 20 20 69  lob:.          i
2b10: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
2b20: 2e 47 75 69 64 29 20 72 65 74 75 72 6e 20 61 66  .Guid) return af
2b30: 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20  finity;.        
2b40: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
2b50: 79 70 65 2e 53 74 72 69 6e 67 29 20 72 65 74 75  ype.String) retu
2b60: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20  rn affinity;.   
2b70: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
2b80: 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29  = DbType.Binary)
2b90: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
2ba0: 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;.          brea
2bb0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  k;.      }..    
2bc0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
2bd0: 6c 69 64 43 61 73 74 45 78 63 65 70 74 69 6f 6e  lidCastException
2be0: 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ();.    }..    /
2bf0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
2c00: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
2c10: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 62  he column as a b
2c20: 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 20  oolean value.   
2c30: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
2c40: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2c50: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
2c60: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  x of the column 
2c70: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
2c80: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
2c90: 75 72 6e 73 3e 62 6f 6f 6c 3c 2f 72 65 74 75 72  urns>bool</retur
2ca0: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
2cb0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 47 65 74  verride bool Get
2cc0: 42 6f 6f 6c 65 61 6e 28 69 6e 74 20 69 29 0d 0a  Boolean(int i)..
2cd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65      {..      Che
2ce0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0a  ckDisposed();...
2cf0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56        if (i >= V
2d00: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
2d10: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
2d20: 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65  null).        re
2d30: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
2d40: 74 42 6f 6f 6c 65 61 6e 28 69 20 2d 20 56 69 73  tBoolean(i - Vis
2d50: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
2d60: 0a 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79  ..      VerifyTy
2d70: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42 6f 6f  pe(i, DbType.Boo
2d80: 6c 65 61 6e 29 3b 0a 20 20 20 20 20 20 72 65 74  lean);.      ret
2d90: 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42 6f  urn Convert.ToBo
2da0: 6f 6c 65 61 6e 28 47 65 74 56 61 6c 75 65 28 69  olean(GetValue(i
2db0: 29 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43  ), CultureInfo.C
2dc0: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 29 3b 0a  urrentCulture);.
2dd0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
2de0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
2df0: 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63   Retrieves the c
2e00: 6f 6c 75 6d 6e 20 61 73 20 61 20 73 69 6e 67 6c  olumn as a singl
2e10: 65 20 62 79 74 65 20 76 61 6c 75 65 0a 20 20 20  e byte value.   
2e20: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
2e30: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2e40: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
2e50: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  x of the column 
2e60: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
2e70: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
2e80: 75 72 6e 73 3e 62 79 74 65 3c 2f 72 65 74 75 72  urns>byte</retur
2e90: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
2ea0: 76 65 72 72 69 64 65 20 62 79 74 65 20 47 65 74  verride byte Get
2eb0: 42 79 74 65 28 69 6e 74 20 69 29 0a 20 20 20 20  Byte(int i).    
2ec0: 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69  {..      CheckDi
2ed0: 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20  sposed();..     
2ee0: 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c   if (i >= Visibl
2ef0: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
2f00: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
2f10: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2f20: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42 79 74 65  _keyInfo.GetByte
2f30: 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c  (i - VisibleFiel
2f40: 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20  dCount);..      
2f50: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
2f60: 54 79 70 65 2e 42 79 74 65 29 3b 0a 20 20 20 20  Type.Byte);.    
2f70: 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
2f80: 2e 54 6f 42 79 74 65 28 5f 61 63 74 69 76 65 53  .ToByte(_activeS
2f90: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
2fa0: 74 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74  tInt32(_activeSt
2fb0: 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20  atement, i));.  
2fc0: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
2fd0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
2fe0: 65 74 72 69 65 76 65 73 20 61 20 63 6f 6c 75 6d  etrieves a colum
2ff0: 6e 20 61 73 20 61 6e 20 61 72 72 61 79 20 6f 66  n as an array of
3000: 20 62 79 74 65 73 20 28 62 6c 6f 62 29 0a 20 20   bytes (blob).  
3010: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
3020: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
3030: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
3040: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
3050: 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
3060: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ram>.    /// <pa
3070: 72 61 6d 20 6e 61 6d 65 3d 22 66 69 65 6c 64 4f  ram name="fieldO
3080: 66 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d  ffset">The zero-
3090: 62 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20 77  based index of w
30a0: 68 65 72 65 20 74 6f 20 62 65 67 69 6e 20 72 65  here to begin re
30b0: 61 64 69 6e 67 20 74 68 65 20 64 61 74 61 3c 2f  ading the data</
30c0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
30d0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66  param name="buff
30e0: 65 72 22 3e 54 68 65 20 62 75 66 66 65 72 20 74  er">The buffer t
30f0: 6f 20 77 72 69 74 65 20 74 68 65 20 62 79 74 65  o write the byte
3100: 73 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e 0a 20  s into</param>. 
3110: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3120: 6d 65 3d 22 62 75 66 66 65 72 6f 66 66 73 65 74  me="bufferoffset
3130: 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  ">The zero-based
3140: 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20   index of where 
3150: 74 6f 20 62 65 67 69 6e 20 77 72 69 74 69 6e 67  to begin writing
3160: 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c   into the array<
3170: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
3180: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e  <param name="len
3190: 67 74 68 22 3e 54 68 65 20 6e 75 6d 62 65 72 20  gth">The number 
31a0: 6f 66 20 62 79 74 65 73 20 74 6f 20 72 65 74 72  of bytes to retr
31b0: 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  ieve</param>.   
31c0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
31d0: 65 20 61 63 74 75 61 6c 20 6e 75 6d 62 65 72 20  e actual number 
31e0: 6f 66 20 62 79 74 65 73 20 77 72 69 74 74 65 6e  of bytes written
31f0: 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c   into the array<
3200: 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 2f 2f  /returns>.    //
3210: 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20  / <remarks>.    
3220: 2f 2f 2f 20 54 6f 20 64 65 74 65 72 6d 69 6e 65  /// To determine
3230: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
3240: 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75  ytes in the colu
3250: 6d 6e 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c 20  mn, pass a null 
3260: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62 75  value for the bu
3270: 66 66 65 72 2e 20 20 54 68 65 20 74 6f 74 61 6c  ffer.  The total
3280: 20 6c 65 6e 67 74 68 20 77 69 6c 6c 20 62 65 20   length will be 
3290: 72 65 74 75 72 6e 65 64 2e 0a 20 20 20 20 2f 2f  returned..    //
32a0: 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0a 20 20 20  / </remarks>.   
32b0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
32c0: 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28 69   long GetBytes(i
32d0: 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65 6c 64  nt i, long field
32e0: 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62  Offset, byte[] b
32f0: 75 66 66 65 72 2c 20 69 6e 74 20 62 75 66 66 65  uffer, int buffe
3300: 72 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c 65 6e  roffset, int len
3310: 67 74 68 29 0a 20 20 20 20 7b 0d 0a 20 20 20 20  gth).    {..    
3320: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
3330: 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 69 20  );..      if (i 
3340: 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43  >= VisibleFieldC
3350: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
3360: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
3370: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
3380: 6f 2e 47 65 74 42 79 74 65 73 28 69 20 2d 20 56  o.GetBytes(i - V
3390: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
33a0: 2c 20 66 69 65 6c 64 4f 66 66 73 65 74 2c 20 62  , fieldOffset, b
33b0: 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66  uffer, bufferoff
33c0: 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0a 0a 20  set, length);.. 
33d0: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
33e0: 69 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79  i, DbType.Binary
33f0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
3400: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
3410: 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65 73 28 5f  ._sql.GetBytes(_
3420: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
3430: 20 69 2c 20 28 69 6e 74 29 66 69 65 6c 64 4f 66   i, (int)fieldOf
3440: 66 73 65 74 2c 20 62 75 66 66 65 72 2c 20 62 75  fset, buffer, bu
3450: 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67  fferoffset, leng
3460: 74 68 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  th);.    }..    
3470: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
3480: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
3490: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73 69  e column as a si
34a0: 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 0a 20  ngle character. 
34b0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
34c0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
34d0: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
34e0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
34f0: 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  n to retrieve</p
3500: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
3510: 65 74 75 72 6e 73 3e 63 68 61 72 3c 2f 72 65 74  eturns>char</ret
3520: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
3530: 20 6f 76 65 72 72 69 64 65 20 63 68 61 72 20 47   override char G
3540: 65 74 43 68 61 72 28 69 6e 74 20 69 29 0a 20 20  etChar(int i).  
3550: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
3560: 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20  Disposed();..   
3570: 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69     if (i >= Visi
3580: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
3590: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
35a0: 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  l).        retur
35b0: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 43 68  n _keyInfo.GetCh
35c0: 61 72 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69  ar(i - VisibleFi
35d0: 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20  eldCount);..    
35e0: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
35f0: 44 62 54 79 70 65 2e 53 42 79 74 65 29 3b 0a 20  DbType.SByte);. 
3600: 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
3610: 65 72 74 2e 54 6f 43 68 61 72 28 5f 61 63 74 69  ert.ToChar(_acti
3620: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
3630: 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74 69 76  .GetInt32(_activ
3640: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b  eStatement, i));
3650: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
3660: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
3670: 2f 20 52 65 74 72 69 65 76 65 73 20 61 20 63 6f  / Retrieves a co
3680: 6c 75 6d 6e 20 61 73 20 61 6e 20 61 72 72 61 79  lumn as an array
3690: 20 6f 66 20 63 68 61 72 73 20 28 62 6c 6f 62 29   of chars (blob)
36a0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
36b0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
36c0: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
36d0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
36e0: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
36f0: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
3700: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 65  <param name="fie
3710: 6c 64 6f 66 66 73 65 74 22 3e 54 68 65 20 7a 65  ldoffset">The ze
3720: 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f  ro-based index o
3730: 66 20 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e  f where to begin
3740: 20 72 65 61 64 69 6e 67 20 74 68 65 20 64 61 74   reading the dat
3750: 61 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  a</param>.    //
3760: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
3770: 75 66 66 65 72 22 3e 54 68 65 20 62 75 66 66 65  uffer">The buffe
3780: 72 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 63  r to write the c
3790: 68 61 72 61 63 74 65 72 73 20 69 6e 74 6f 3c 2f  haracters into</
37a0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
37b0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66  param name="buff
37c0: 65 72 6f 66 66 73 65 74 22 3e 54 68 65 20 7a 65  eroffset">The ze
37d0: 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f  ro-based index o
37e0: 66 20 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e  f where to begin
37f0: 20 77 72 69 74 69 6e 67 20 69 6e 74 6f 20 74 68   writing into th
3800: 65 20 61 72 72 61 79 3c 2f 70 61 72 61 6d 3e 0a  e array</param>.
3810: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
3820: 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 54 68 65  ame="length">The
3830: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
3840: 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
3850: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
3860: 74 75 72 6e 73 3e 54 68 65 20 61 63 74 75 61 6c  turns>The actual
3870: 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   number of chara
3880: 63 74 65 72 73 20 77 72 69 74 74 65 6e 20 69 6e  cters written in
3890: 74 6f 20 74 68 65 20 61 72 72 61 79 3c 2f 72 65  to the array</re
38a0: 74 75 72 6e 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c  turns>.    /// <
38b0: 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20 2f 2f 2f  remarks>.    ///
38c0: 20 54 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   To determine th
38d0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  e number of char
38e0: 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 63 6f  acters in the co
38f0: 6c 75 6d 6e 2c 20 70 61 73 73 20 61 20 6e 75 6c  lumn, pass a nul
3900: 6c 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  l value for the 
3910: 62 75 66 66 65 72 2e 20 20 54 68 65 20 74 6f 74  buffer.  The tot
3920: 61 6c 20 6c 65 6e 67 74 68 20 77 69 6c 6c 20 62  al length will b
3930: 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 20 20  e returned..    
3940: 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0a 20  /// </remarks>. 
3950: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
3960: 64 65 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73  de long GetChars
3970: 28 69 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65  (int i, long fie
3980: 6c 64 6f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d  ldoffset, char[]
3990: 20 62 75 66 66 65 72 2c 20 69 6e 74 20 62 75 66   buffer, int buf
39a0: 66 65 72 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c  feroffset, int l
39b0: 65 6e 67 74 68 29 0a 20 20 20 20 7b 0d 0a 20 20  ength).    {..  
39c0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
39d0: 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28  d();..      if (
39e0: 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c  i >= VisibleFiel
39f0: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
3a00: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  fo != null).    
3a10: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
3a20: 6e 66 6f 2e 47 65 74 43 68 61 72 73 28 69 20 2d  nfo.GetChars(i -
3a30: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
3a40: 6e 74 2c 20 66 69 65 6c 64 6f 66 66 73 65 74 2c  nt, fieldoffset,
3a50: 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f   buffer, buffero
3a60: 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0a  ffset, length);.
3a70: 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70  .      VerifyTyp
3a80: 65 28 69 2c 20 44 62 54 79 70 65 2e 53 74 72 69  e(i, DbType.Stri
3a90: 6e 67 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  ng);.      retur
3aa0: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
3ab0: 6e 74 2e 5f 73 71 6c 2e 47 65 74 43 68 61 72 73  nt._sql.GetChars
3ac0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
3ad0: 74 2c 20 69 2c 20 28 69 6e 74 29 66 69 65 6c 64  t, i, (int)field
3ae0: 6f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c 20  offset, buffer, 
3af0: 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65  bufferoffset, le
3b00: 6e 67 74 68 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ngth);.    }..  
3b10: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
3b20: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
3b30: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
3b40: 65 20 62 61 63 6b 2d 65 6e 64 20 64 61 74 61 74  e back-end datat
3b50: 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ype of the colum
3b60: 6e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  n.    /// </summ
3b70: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
3b80: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
3b90: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
3ba0: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
3bb0: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
3bc0: 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67   <returns>string
3bd0: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
3be0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73  ublic override s
3bf0: 74 72 69 6e 67 20 47 65 74 44 61 74 61 54 79 70  tring GetDataTyp
3c00: 65 4e 61 6d 65 28 69 6e 74 20 69 29 0a 20 20 20  eName(int i).   
3c10: 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44   {..      CheckD
3c20: 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20  isposed();..    
3c30: 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62    if (i >= Visib
3c40: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
3c50: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
3c60: 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ).        return
3c70: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 61 74   _keyInfo.GetDat
3c80: 61 54 79 70 65 4e 61 6d 65 28 69 20 2d 20 56 69  aTypeName(i - Vi
3c90: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
3ca0: 3b 0a 0a 20 20 20 20 20 20 53 51 4c 69 74 65 54  ;..      SQLiteT
3cb0: 79 70 65 20 74 79 70 20 3d 20 47 65 74 53 51 4c  ype typ = GetSQL
3cc0: 69 74 65 54 79 70 65 28 69 29 3b 0a 20 20 20 20  iteType(i);.    
3cd0: 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d    if (typ.Type =
3ce0: 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29  = DbType.Object)
3cf0: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 43 6f   return SQLiteCo
3d00: 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65  nvert.SQLiteType
3d10: 54 6f 54 79 70 65 28 74 79 70 29 2e 4e 61 6d 65  ToType(typ).Name
3d20: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f  ;.      return _
3d30: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
3d40: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28  _sql.ColumnType(
3d50: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
3d60: 2c 20 69 2c 20 6f 75 74 20 74 79 70 2e 41 66 66  , i, out typ.Aff
3d70: 69 6e 69 74 79 29 3b 0a 20 20 20 20 7d 0a 0a 20  inity);.    }.. 
3d80: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3d90: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
3da0: 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  e the column as 
3db0: 61 20 64 61 74 65 2f 74 69 6d 65 20 76 61 6c 75  a date/time valu
3dc0: 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  e.    /// </summ
3dd0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
3de0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
3df0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
3e00: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
3e10: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
3e20: 20 3c 72 65 74 75 72 6e 73 3e 44 61 74 65 54 69   <returns>DateTi
3e30: 6d 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  me</returns>.   
3e40: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
3e50: 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61 74   DateTime GetDat
3e60: 65 54 69 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20  eTime(int i)..  
3e70: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
3e80: 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20  Disposed();..   
3e90: 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69     if (i >= Visi
3ea0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
3eb0: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
3ec0: 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  l).        retur
3ed0: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 61  n _keyInfo.GetDa
3ee0: 74 65 54 69 6d 65 28 69 20 2d 20 56 69 73 69 62  teTime(i - Visib
3ef0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a  leFieldCount);..
3f00: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
3f10: 28 69 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54  (i, DbType.DateT
3f20: 69 6d 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ime);.      retu
3f30: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
3f40: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 61 74 65  ent._sql.GetDate
3f50: 54 69 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74  Time(_activeStat
3f60: 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d  ement, i);.    }
3f70: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3f80: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  ry>.    /// Retr
3f90: 69 65 76 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ieve the column 
3fa0: 61 73 20 61 20 64 65 63 69 6d 61 6c 20 76 61 6c  as a decimal val
3fb0: 75 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ue.    /// </sum
3fc0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
3fd0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
3fe0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
3ff0: 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76  olumn to retriev
4000: 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  e</param>.    //
4010: 2f 20 3c 72 65 74 75 72 6e 73 3e 64 65 63 69 6d  / <returns>decim
4020: 61 6c 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  al</returns>.   
4030: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
4040: 20 64 65 63 69 6d 61 6c 20 47 65 74 44 65 63 69   decimal GetDeci
4050: 6d 61 6c 28 69 6e 74 20 69 29 0a 20 20 20 20 7b  mal(int i).    {
4060: 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73  ..      CheckDis
4070: 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20  posed();..      
4080: 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65  if (i >= Visible
4090: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
40a0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a  eyInfo != null).
40b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
40c0: 6b 65 79 49 6e 66 6f 2e 47 65 74 44 65 63 69 6d  keyInfo.GetDecim
40d0: 61 6c 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69  al(i - VisibleFi
40e0: 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20  eldCount);..    
40f0: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
4100: 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 3b  DbType.Decimal);
4110: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 65  .      return De
4120: 63 69 6d 61 6c 2e 50 61 72 73 65 28 5f 61 63 74  cimal.Parse(_act
4130: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
4140: 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76  l.GetText(_activ
4150: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 2c 20  eStatement, i), 
4160: 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c  NumberStyles.All
4170: 6f 77 44 65 63 69 6d 61 6c 50 6f 69 6e 74 20 7c  owDecimalPoint |
4180: 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c   NumberStyles.Al
4190: 6c 6f 77 45 78 70 6f 6e 65 6e 74 20 7c 20 4e 75  lowExponent | Nu
41a0: 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f 77  mberStyles.Allow
41b0: 4c 65 61 64 69 6e 67 53 69 67 6e 2c 20 43 75 6c  LeadingSign, Cul
41c0: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
41d0: 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20 20 20 20  ntCulture);.    
41e0: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
41f0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ary>.    /// Ret
4200: 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  urns the column 
4210: 61 73 20 61 20 64 6f 75 62 6c 65 0a 20 20 20 20  as a double.    
4220: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
4230: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
4240: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
4250: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
4260: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
4270: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
4280: 72 6e 73 3e 64 6f 75 62 6c 65 3c 2f 72 65 74 75  rns>double</retu
4290: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
42a0: 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20  override double 
42b0: 47 65 74 44 6f 75 62 6c 65 28 69 6e 74 20 69 29  GetDouble(int i)
42c0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68  .    {..      Ch
42d0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a  eckDisposed();..
42e0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56        if (i >= V
42f0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
4300: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
4310: 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65  null).        re
4320: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
4330: 74 44 6f 75 62 6c 65 28 69 20 2d 20 56 69 73 69  tDouble(i - Visi
4340: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a  bleFieldCount);.
4350: 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70  .      VerifyTyp
4360: 65 28 69 2c 20 44 62 54 79 70 65 2e 44 6f 75 62  e(i, DbType.Doub
4370: 6c 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  le);.      retur
4380: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
4390: 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c  nt._sql.GetDoubl
43a0: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
43b0: 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20  nt, i);.    }.. 
43c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
43d0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
43e0: 20 74 68 65 20 2e 4e 45 54 20 74 79 70 65 20 6f   the .NET type o
43f0: 66 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e  f a given column
4400: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
4410: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
4420: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
4430: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
4440: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
4450: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
4460: 3c 72 65 74 75 72 6e 73 3e 54 79 70 65 3c 2f 72  <returns>Type</r
4470: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
4480: 69 63 20 6f 76 65 72 72 69 64 65 20 54 79 70 65  ic override Type
4490: 20 47 65 74 46 69 65 6c 64 54 79 70 65 28 69 6e   GetFieldType(in
44a0: 74 20 69 29 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t i).    {..    
44b0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
44c0: 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 69 20  );..      if (i 
44d0: 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43  >= VisibleFieldC
44e0: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
44f0: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
4500: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
4510: 6f 2e 47 65 74 46 69 65 6c 64 54 79 70 65 28 69  o.GetFieldType(i
4520: 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43   - VisibleFieldC
4530: 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 72 65  ount);..      re
4540: 74 75 72 6e 20 53 51 4c 69 74 65 43 6f 6e 76 65  turn SQLiteConve
4550: 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f 54  rt.SQLiteTypeToT
4560: 79 70 65 28 47 65 74 53 51 4c 69 74 65 54 79 70  ype(GetSQLiteTyp
4570: 65 28 69 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  e(i));.    }..  
4580: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
4590: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
45a0: 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 66 6c  a column as a fl
45b0: 6f 61 74 20 76 61 6c 75 65 0a 20 20 20 20 2f 2f  oat value.    //
45c0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
45d0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
45e0: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
45f0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
4600: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
4610: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
4620: 73 3e 66 6c 6f 61 74 3c 2f 72 65 74 75 72 6e 73  s>float</returns
4630: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
4640: 72 72 69 64 65 20 66 6c 6f 61 74 20 47 65 74 46  rride float GetF
4650: 6c 6f 61 74 28 69 6e 74 20 69 29 0a 20 20 20 20  loat(int i).    
4660: 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69  {..      CheckDi
4670: 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20  sposed();..     
4680: 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c   if (i >= Visibl
4690: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
46a0: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
46b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
46c0: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 46 6c 6f 61  _keyInfo.GetFloa
46d0: 74 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65  t(i - VisibleFie
46e0: 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20  ldCount);..     
46f0: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
4700: 62 54 79 70 65 2e 53 69 6e 67 6c 65 29 3b 0a 20  bType.Single);. 
4710: 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
4720: 65 72 74 2e 54 6f 53 69 6e 67 6c 65 28 5f 61 63  ert.ToSingle(_ac
4730: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
4740: 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f 61 63  ql.GetDouble(_ac
4750: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
4760: 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ));.    }..    /
4770: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
4780: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
4790: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 47 75 69   column as a Gui
47a0: 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  d.    /// </summ
47b0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
47c0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
47d0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
47e0: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
47f0: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
4800: 20 3c 72 65 74 75 72 6e 73 3e 47 75 69 64 3c 2f   <returns>Guid</
4810: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
4820: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 47 75 69  lic override Gui
4830: 64 20 47 65 74 47 75 69 64 28 69 6e 74 20 69 29  d GetGuid(int i)
4840: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43  ..    {..      C
4850: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a  heckDisposed();.
4860: 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20  .      if (i >= 
4870: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
4880: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
4890: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72   null).        r
48a0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
48b0: 65 74 47 75 69 64 28 69 20 2d 20 56 69 73 69 62  etGuid(i - Visib
48c0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a  leFieldCount);..
48d0: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
48e0: 74 79 20 61 66 66 69 6e 69 74 79 20 3d 20 56 65  ty affinity = Ve
48f0: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
4900: 70 65 2e 47 75 69 64 29 3b 0a 20 20 20 20 20 20  pe.Guid);.      
4910: 69 66 20 28 61 66 66 69 6e 69 74 79 20 3d 3d 20  if (affinity == 
4920: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f  TypeAffinity.Blo
4930: 62 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  b).      {.     
4940: 20 20 20 62 79 74 65 5b 5d 20 62 75 66 66 65 72     byte[] buffer
4950: 20 3d 20 6e 65 77 20 62 79 74 65 5b 31 36 5d 3b   = new byte[16];
4960: 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65  .        _active
4970: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
4980: 65 74 42 79 74 65 73 28 5f 61 63 74 69 76 65 53  etBytes(_activeS
4990: 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 30 2c 20  tatement, i, 0, 
49a0: 62 75 66 66 65 72 2c 20 30 2c 20 31 36 29 3b 0a  buffer, 0, 16);.
49b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
49c0: 65 77 20 47 75 69 64 28 62 75 66 66 65 72 29 3b  ew Guid(buffer);
49d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 65  .      }.      e
49e0: 6c 73 65 0a 20 20 20 20 20 20 20 20 72 65 74 75  lse.        retu
49f0: 72 6e 20 6e 65 77 20 47 75 69 64 28 5f 61 63 74  rn new Guid(_act
4a00: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
4a10: 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76  l.GetText(_activ
4a20: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b  eStatement, i));
4a30: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
4a40: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
4a50: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f  / Returns the co
4a60: 6c 75 6d 6e 20 61 73 20 61 20 73 68 6f 72 74 0a  lumn as a short.
4a70: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4a80: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
4a90: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
4aa0: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
4ab0: 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  mn to retrieve</
4ac0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
4ad0: 72 65 74 75 72 6e 73 3e 49 6e 74 31 36 3c 2f 72  returns>Int16</r
4ae0: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
4af0: 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 31  ic override Int1
4b00: 36 20 47 65 74 49 6e 74 31 36 28 69 6e 74 20 69  6 GetInt16(int i
4b10: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
4b20: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
4b30: 0a 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d  ..      if (i >=
4b40: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
4b50: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
4b60: 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20  = null).        
4b70: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
4b80: 47 65 74 49 6e 74 31 36 28 69 20 2d 20 56 69 73  GetInt16(i - Vis
4b90: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
4ba0: 0a 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79  ..      VerifyTy
4bb0: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 49 6e 74  pe(i, DbType.Int
4bc0: 31 36 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  16);.      retur
4bd0: 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 31  n Convert.ToInt1
4be0: 36 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  6(_activeStateme
4bf0: 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32  nt._sql.GetInt32
4c00: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
4c10: 74 2c 20 69 29 29 3b 0a 20 20 20 20 7d 0a 0a 20  t, i));.    }.. 
4c20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
4c30: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
4c40: 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73  es the column as
4c50: 20 61 6e 20 69 6e 74 0a 20 20 20 20 2f 2f 2f 20   an int.    /// 
4c60: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
4c70: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
4c80: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
4c90: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
4ca0: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20  trieve</param>. 
4cb0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
4cc0: 49 6e 74 33 32 3c 2f 72 65 74 75 72 6e 73 3e 0a  Int32</returns>.
4cd0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
4ce0: 69 64 65 20 49 6e 74 33 32 20 47 65 74 49 6e 74  ide Int32 GetInt
4cf0: 33 32 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  32(int i)..    {
4d00: 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73  ..      CheckDis
4d10: 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20  posed();..      
4d20: 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65  if (i >= Visible
4d30: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
4d40: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a  eyInfo != null).
4d50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
4d60: 6b 65 79 49 6e 66 6f 2e 47 65 74 49 6e 74 33 32  keyInfo.GetInt32
4d70: 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c  (i - VisibleFiel
4d80: 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20  dCount);..      
4d90: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
4da0: 54 79 70 65 2e 49 6e 74 33 32 29 3b 0a 20 20 20  Type.Int32);.   
4db0: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
4dc0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
4dd0: 47 65 74 49 6e 74 33 32 28 5f 61 63 74 69 76 65  GetInt32(_active
4de0: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20  Statement, i);. 
4df0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
4e00: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
4e10: 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f  Retrieves the co
4e20: 6c 75 6d 6e 20 61 73 20 61 20 6c 6f 6e 67 0a 20  lumn as a long. 
4e30: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
4e40: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
4e50: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
4e60: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
4e70: 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  n to retrieve</p
4e80: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
4e90: 65 74 75 72 6e 73 3e 49 6e 74 36 34 3c 2f 72 65  eturns>Int64</re
4ea0: 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69  turns>.    publi
4eb0: 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 36 34  c override Int64
4ec0: 20 47 65 74 49 6e 74 36 34 28 69 6e 74 20 69 29   GetInt64(int i)
4ed0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43  ..    {..      C
4ee0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a  heckDisposed();.
4ef0: 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20  .      if (i >= 
4f00: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
4f10: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
4f20: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72   null).        r
4f30: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
4f40: 65 74 49 6e 74 36 34 28 69 20 2d 20 56 69 73 69  etInt64(i - Visi
4f50: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a  bleFieldCount);.
4f60: 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70  .      VerifyTyp
4f70: 65 28 69 2c 20 44 62 54 79 70 65 2e 49 6e 74 36  e(i, DbType.Int6
4f80: 34 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  4);.      return
4f90: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
4fa0: 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 36 34 28  t._sql.GetInt64(
4fb0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
4fc0: 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  , i);.    }..   
4fd0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
4fe0: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
4ff0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
5000: 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2f 2f 2f 20   column.    /// 
5010: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
5020: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5030: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
5040: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
5050: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20  trieve</param>. 
5060: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
5070: 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e  string</returns>
5080: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
5090: 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 4e  ride string GetN
50a0: 61 6d 65 28 69 6e 74 20 69 29 0a 20 20 20 20 7b  ame(int i).    {
50b0: 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73  ..      CheckDis
50c0: 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20  posed();..      
50d0: 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65  if (i >= Visible
50e0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
50f0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a  eyInfo != null).
5100: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
5110: 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d 65 28  keyInfo.GetName(
5120: 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64  i - VisibleField
5130: 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 72  Count);..      r
5140: 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61  eturn _activeSta
5150: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75  tement._sql.Colu
5160: 6d 6e 4e 61 6d 65 28 5f 61 63 74 69 76 65 53 74  mnName(_activeSt
5170: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20  atement, i);.   
5180: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
5190: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65  mary>.    /// Re
51a0: 74 72 69 65 76 65 73 20 74 68 65 20 69 20 6f 66  trieves the i of
51b0: 20 61 20 63 6f 6c 75 6d 6e 2c 20 67 69 76 65 6e   a column, given
51c0: 20 69 74 73 20 6e 61 6d 65 0a 20 20 20 20 2f 2f   its name.    //
51d0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
51e0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
51f0: 3d 22 6e 61 6d 65 22 3e 54 68 65 20 6e 61 6d 65  ="name">The name
5200: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
5210: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
5220: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
5230: 72 6e 73 3e 54 68 65 20 69 6e 74 20 69 20 6f 66  rns>The int i of
5240: 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74   the column</ret
5250: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
5260: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
5270: 74 4f 72 64 69 6e 61 6c 28 73 74 72 69 6e 67 20  tOrdinal(string 
5280: 6e 61 6d 65 29 0a 20 20 20 20 7b 0d 0a 20 20 20  name).    {..   
5290: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
52a0: 28 29 3b 0a 20 20 20 20 20 20 43 68 65 63 6b 43  ();.      CheckC
52b0: 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  losed();..      
52c0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43 68  SQLiteCommand.Ch
52d0: 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0a 0a  eck(_command);..
52e0: 20 20 20 20 20 20 69 6e 74 20 72 20 3d 20 5f 61        int r = _a
52f0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
5300: 73 71 6c 2e 43 6f 6c 75 6d 6e 49 6e 64 65 78 28  sql.ColumnIndex(
5310: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
5320: 2c 20 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69  , name);.      i
5330: 66 20 28 72 20 3d 3d 20 2d 31 20 26 26 20 5f 6b  f (r == -1 && _k
5340: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a  eyInfo != null).
5350: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
5360: 72 20 3d 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  r = _keyInfo.Get
5370: 4f 72 64 69 6e 61 6c 28 6e 61 6d 65 29 3b 0a 20  Ordinal(name);. 
5380: 20 20 20 20 20 20 20 69 66 20 28 72 20 3e 20 2d         if (r > -
5390: 31 29 20 72 20 2b 3d 20 56 69 73 69 62 6c 65 46  1) r += VisibleF
53a0: 69 65 6c 64 43 6f 75 6e 74 3b 0a 20 20 20 20 20  ieldCount;.     
53b0: 20 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
53c0: 20 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f   r;.    }..    /
53d0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
53e0: 20 2f 2f 2f 20 53 63 68 65 6d 61 20 69 6e 66 6f   /// Schema info
53f0: 72 6d 61 74 69 6f 6e 20 69 6e 20 53 51 4c 69 74  rmation in SQLit
5400: 65 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 74  e is difficult t
5410: 6f 20 6d 61 70 20 69 6e 74 6f 20 2e 4e 45 54 20  o map into .NET 
5420: 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 73 6f 20  conventions, so 
5430: 61 20 6c 6f 74 20 6f 66 20 77 6f 72 6b 20 6d 75  a lot of work mu
5440: 73 74 20 62 65 20 64 6f 6e 65 0a 20 20 20 20 2f  st be done.    /
5450: 2f 2f 20 74 6f 20 67 61 74 68 65 72 20 74 68 65  // to gather the
5460: 20 6e 65 63 65 73 73 61 72 79 20 69 6e 66 6f 72   necessary infor
5470: 6d 61 74 69 6f 6e 20 73 6f 20 69 74 20 63 61 6e  mation so it can
5480: 20 62 65 20 72 65 70 72 65 73 65 6e 74 65 64 20   be represented 
5490: 69 6e 20 61 6e 20 41 44 4f 2e 4e 45 54 20 6d 61  in an ADO.NET ma
54a0: 6e 6e 65 72 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f  nner..    /// </
54b0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
54c0: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
54d0: 73 20 61 20 44 61 74 61 54 61 62 6c 65 20 63 6f  s a DataTable co
54e0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73 63 68  ntaining the sch
54f0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
5500: 66 6f 72 20 74 68 65 20 61 63 74 69 76 65 20 53  for the active S
5510: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
5520: 62 65 69 6e 67 20 70 72 6f 63 65 73 73 65 64 2e  being processed.
5530: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
5540: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 44  ublic override D
5550: 61 74 61 54 61 62 6c 65 20 47 65 74 53 63 68 65  ataTable GetSche
5560: 6d 61 54 61 62 6c 65 28 29 0a 20 20 20 20 7b 0d  maTable().    {.
5570: 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70  .      CheckDisp
5580: 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20 72 65  osed();.      re
5590: 74 75 72 6e 20 47 65 74 53 63 68 65 6d 61 54 61  turn GetSchemaTa
55a0: 62 6c 65 28 74 72 75 65 2c 20 66 61 6c 73 65 29  ble(true, false)
55b0: 3b 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ;.    }....    p
55c0: 72 69 76 61 74 65 20 63 6c 61 73 73 20 43 6f 6c  rivate class Col
55d0: 75 6d 6e 50 61 72 65 6e 74 20 3a 20 49 45 71 75  umnParent : IEqu
55e0: 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 43 6f  alityComparer<Co
55f0: 6c 75 6d 6e 50 61 72 65 6e 74 3e 0d 0a 20 20 20  lumnParent>..   
5600: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
5610: 69 63 20 73 74 72 69 6e 67 20 44 61 74 61 62 61  ic string Databa
5620: 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  seName;..       
5630: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54   public string T
5640: 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  ableName;..     
5650: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
5660: 20 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 0d 0a   ColumnName;....
5670: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 43          public C
5680: 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 29 0d 0a 20  olumnParent().. 
5690: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
56a0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
56b0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
56c0: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
56d0: 63 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 0d  c ColumnParent(.
56e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
56f0: 69 6e 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65  ing databaseName
5700: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
5710: 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 2c  tring tableName,
5720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
5730: 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 0d  ring columnName.
5740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
5750: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
5760: 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  is()..        {.
5770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
5780: 73 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 20 3d  s.DatabaseName =
5790: 20 64 61 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a   databaseName;..
57a0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
57b0: 2e 54 61 62 6c 65 4e 61 6d 65 20 3d 20 74 61 62  .TableName = tab
57c0: 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
57d0: 20 20 20 20 20 74 68 69 73 2e 43 6f 6c 75 6d 6e       this.Column
57e0: 4e 61 6d 65 20 3d 20 63 6f 6c 75 6d 6e 4e 61 6d  Name = columnNam
57f0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
5800: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
5810: 20 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61 72   IEqualityCompar
5820: 65 72 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e  er<ColumnParent>
5830: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
5840: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 45 71    public bool Eq
5850: 75 61 6c 73 28 43 6f 6c 75 6d 6e 50 61 72 65 6e  uals(ColumnParen
5860: 74 20 78 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e  t x, ColumnParen
5870: 74 20 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  t y)..        {.
5880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
5890: 28 28 78 20 3d 3d 20 6e 75 6c 6c 29 20 26 26 20  ((x == null) && 
58a0: 28 79 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  (y == null))..  
58b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
58c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
58d0: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
58e0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
58f0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28        else if ((
5900: 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 79  x == null) || (y
5910: 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
5920: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5930: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5940: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
5950: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5960: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
5970: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5980: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
5990: 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 78 2e 44  tring.Equals(x.D
59a0: 61 74 61 62 61 73 65 4e 61 6d 65 2c 20 79 2e 44  atabaseName, y.D
59b0: 61 74 61 62 61 73 65 4e 61 6d 65 2c 0d 0a 20 20  atabaseName,..  
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59d0: 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
59e0: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
59f0: 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20  noreCase))..    
5a00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a20: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
5a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5a40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5a50: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
5a60: 6e 67 2e 45 71 75 61 6c 73 28 78 2e 54 61 62 6c  ng.Equals(x.Tabl
5a70: 65 4e 61 6d 65 2c 20 79 2e 54 61 62 6c 65 4e 61  eName, y.TableNa
5a80: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
5a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
5aa0: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
5ab0: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
5ac0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5ad0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5ae0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5af0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
5b00: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
5b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5b20: 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
5b30: 28 78 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 79  (x.ColumnName, y
5b40: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 0d 0a 20 20  .ColumnName,..  
5b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b60: 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
5b70: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
5b80: 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20  noreCase))..    
5b90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5bb0: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
5bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5bd0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5be0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
5bf0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
5c00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
5c10: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
5c20: 69 6e 74 20 47 65 74 48 61 73 68 43 6f 64 65 28  int GetHashCode(
5c30: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6f 62 6a  ColumnParent obj
5c40: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
5c50: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 65            int re
5c60: 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20  sult = 0;....   
5c70: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6f 62           if ((ob
5c80: 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28 6f  j != null) && (o
5c90: 62 6a 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 20  bj.DatabaseName 
5ca0: 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  != null))..     
5cb0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
5cc0: 74 20 5e 3d 20 6f 62 6a 2e 44 61 74 61 62 61 73  t ^= obj.Databas
5cd0: 65 4e 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64  eName.GetHashCod
5ce0: 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
5cf0: 20 20 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20      if ((obj != 
5d00: 6e 75 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 54 61  null) && (obj.Ta
5d10: 62 6c 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  bleName != null)
5d20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5d30: 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a     result ^= obj
5d40: 2e 54 61 62 6c 65 4e 61 6d 65 2e 47 65 74 48 61  .TableName.GetHa
5d50: 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20  shCode();....   
5d60: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6f 62           if ((ob
5d70: 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28 6f  j != null) && (o
5d80: 62 6a 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 20 21 3d  bj.ColumnName !=
5d90: 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
5da0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
5db0: 5e 3d 20 6f 62 6a 2e 43 6f 6c 75 6d 6e 4e 61 6d  ^= obj.ColumnNam
5dc0: 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28 29 3b  e.GetHashCode();
5dd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5de0: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
5df0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5e00: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
5e10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76     }....    priv
5e20: 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
5e30: 47 65 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c 75  GetStatementColu
5e40: 6d 6e 50 61 72 65 6e 74 73 28 0d 0a 20 20 20 20  mnParents(..    
5e50: 20 20 20 20 53 51 4c 69 74 65 42 61 73 65 20 73      SQLiteBase s
5e60: 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ql,..        SQL
5e70: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
5e80: 74 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  t,..        int 
5e90: 66 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a 20 20 20  fieldCount,..   
5ea0: 20 20 20 20 20 72 65 66 20 44 69 63 74 69 6f 6e       ref Diction
5eb0: 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ary<ColumnParent
5ec0: 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20 70 61 72  , List<int>> par
5ed0: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 0d 0a 20  entToColumns,.. 
5ee0: 20 20 20 20 20 20 20 72 65 66 20 44 69 63 74 69         ref Dicti
5ef0: 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d  onary<int, Colum
5f00: 6e 50 61 72 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54  nParent> columnT
5f10: 6f 50 61 72 65 6e 74 0d 0a 20 20 20 20 20 20 20  oParent..       
5f20: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
5f30: 20 20 20 69 66 20 28 70 61 72 65 6e 74 54 6f 43     if (parentToC
5f40: 6f 6c 75 6d 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  olumns == null).
5f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72  .            par
5f60: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e  entToColumns = n
5f70: 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 43 6f  ew Dictionary<Co
5f80: 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73 74  lumnParent, List
5f90: 3c 69 6e 74 3e 3e 28 0d 0a 20 20 20 20 20 20 20  <int>>(..       
5fa0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f 6c           new Col
5fb0: 75 6d 6e 50 61 72 65 6e 74 28 29 29 3b 0d 0a 0d  umnParent());...
5fc0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6c  .        if (col
5fd0: 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 3d 20 6e  umnToParent == n
5fe0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5ff0: 20 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74    columnToParent
6000: 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72   = new Dictionar
6010: 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72  y<int, ColumnPar
6020: 65 6e 74 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ent>();....     
6030: 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20     for (int n = 
6040: 30 3b 20 6e 20 3c 20 66 69 65 6c 64 43 6f 75 6e  0; n < fieldCoun
6050: 74 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 20  t; n++)..       
6060: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6070: 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 4e  string databaseN
6080: 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e  ame = sql.Column
6090: 44 61 74 61 62 61 73 65 4e 61 6d 65 28 73 74 6d  DatabaseName(stm
60a0: 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  t, n);..        
60b0: 20 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c 65      string table
60c0: 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d  Name = sql.Colum
60d0: 6e 54 61 62 6c 65 4e 61 6d 65 28 73 74 6d 74 2c  nTableName(stmt,
60e0: 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   n);..          
60f0: 20 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e    string columnN
6100: 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e  ame = sql.Column
6110: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 73 74 6d  OriginalName(stm
6120: 74 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  t, n);....      
6130: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 50 61 72 65        ColumnPare
6140: 6e 74 20 6b 65 79 20 3d 20 6e 65 77 20 43 6f 6c  nt key = new Col
6150: 75 6d 6e 50 61 72 65 6e 74 28 64 61 74 61 62 61  umnParent(databa
6160: 73 65 4e 61 6d 65 2c 20 74 61 62 6c 65 4e 61 6d  seName, tableNam
6170: 65 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  e, null);..     
6180: 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 50 61 72         ColumnPar
6190: 65 6e 74 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  ent value = new 
61a0: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 64 61 74  ColumnParent(dat
61b0: 61 62 61 73 65 4e 61 6d 65 2c 20 74 61 62 6c 65  abaseName, table
61c0: 4e 61 6d 65 2c 20 63 6f 6c 75 6d 6e 4e 61 6d 65  Name, columnName
61d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
61e0: 20 20 69 66 20 28 21 70 61 72 65 6e 74 54 6f 43    if (!parentToC
61f0: 6f 6c 75 6d 6e 73 2e 43 6f 6e 74 61 69 6e 73 4b  olumns.ContainsK
6200: 65 79 28 6b 65 79 29 29 0d 0a 20 20 20 20 20 20  ey(key))..      
6210: 20 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74            parent
6220: 54 6f 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 6b 65  ToColumns.Add(ke
6230: 79 2c 20 6e 65 77 20 4c 69 73 74 3c 69 6e 74 3e  y, new List<int>
6240: 28 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 6e 20 7d  (new int[] { n }
6250: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
6260: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
6270: 20 20 20 20 20 20 20 70 61 72 65 6e 74 54 6f 43         parentToC
6280: 6f 6c 75 6d 6e 73 5b 6b 65 79 5d 2e 41 64 64 28  olumns[key].Add(
6290: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
62a0: 20 20 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e     columnToParen
62b0: 74 2e 41 64 64 28 6e 2c 20 76 61 6c 75 65 29 3b  t.Add(n, value);
62c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
62d0: 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c   }..    internal
62e0: 20 44 61 74 61 54 61 62 6c 65 20 47 65 74 53 63   DataTable GetSc
62f0: 68 65 6d 61 54 61 62 6c 65 28 62 6f 6f 6c 20 77  hemaTable(bool w
6300: 61 6e 74 55 6e 69 71 75 65 49 6e 66 6f 2c 20 62  antUniqueInfo, b
6310: 6f 6f 6c 20 77 61 6e 74 44 65 66 61 75 6c 74 56  ool wantDefaultV
6320: 61 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20  alue).    {.    
6330: 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b    CheckClosed();
6340: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f  ..      SQLiteCo
6350: 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d  mmand.Check(_com
6360: 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 2f  mand);....     /
6370: 2f 0d 0a 20 20 20 20 20 2f 2f 20 42 55 47 46 49  /..     // BUGFI
6380: 58 3a 20 57 65 20 6e 65 65 64 20 74 6f 20 71 75  X: We need to qu
6390: 69 63 6b 6c 79 20 73 63 61 6e 20 61 6c 6c 20 74  ickly scan all t
63a0: 68 65 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  he fields in the
63b0: 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 2f   current..     /
63c0: 2f 20 20 20 20 20 20 20 20 20 22 72 65 73 75 6c  /         "resul
63d0: 74 20 73 65 74 22 20 74 6f 20 73 65 65 20 68 6f  t set" to see ho
63e0: 77 20 6d 61 6e 79 20 64 69 73 74 69 6e 63 74 20  w many distinct 
63f0: 74 61 62 6c 65 73 20 61 72 65 20 61 63 74 75 61  tables are actua
6400: 6c 6c 79 0d 0a 20 20 20 20 20 2f 2f 20 20 20 20  lly..     //    
6410: 20 20 20 20 20 69 6e 76 6f 6c 76 65 64 2e 20 20       involved.  
6420: 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  This information
6430: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f   is necessary so
6440: 20 74 68 61 74 20 73 6f 6d 65 0d 0a 20 20 20 20   that some..    
6450: 20 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 74 65   //         inte
6460: 6c 6c 69 67 65 6e 74 20 64 65 63 69 73 69 6f 6e  lligent decision
6470: 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 77 68  s can be made wh
6480: 65 6e 20 63 6f 6e 73 74 72 75 63 74 69 6e 67 20  en constructing 
6490: 74 68 65 0d 0a 20 20 20 20 20 2f 2f 20 20 20 20  the..     //    
64a0: 20 20 20 20 20 6d 65 74 61 64 61 74 61 20 62 65       metadata be
64b0: 6c 6f 77 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  low.  For exampl
64c0: 65 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 62 65  e, we need to be
64d0: 20 76 65 72 79 20 63 61 72 65 66 75 6c 0d 0a 20   very careful.. 
64e0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 61      //         a
64f0: 62 6f 75 74 20 66 6c 61 67 67 69 6e 67 20 61 20  bout flagging a 
6500: 70 61 72 74 69 63 75 6c 61 72 20 63 6f 6c 75 6d  particular colum
6510: 6e 20 61 73 20 22 75 6e 69 71 75 65 22 20 6a 75  n as "unique" ju
6520: 73 74 0d 0a 20 20 20 20 20 2f 2f 20 20 20 20 20  st..     //     
6530: 20 20 20 20 62 65 63 61 75 73 65 20 69 74 20 77      because it w
6540: 61 73 20 69 6e 20 69 74 73 20 6f 72 69 67 69 6e  as in its origin
6550: 61 6c 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61  al underlying da
6560: 74 61 62 61 73 65 20 74 61 62 6c 65 0d 0a 20 20  tabase table..  
6570: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69 66     //         if
6580: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 77 20 6d   there are now m
6590: 75 6c 74 69 70 6c 65 20 74 61 62 6c 65 73 20 69  ultiple tables i
65a0: 6e 76 6f 6c 76 65 64 20 69 6e 20 74 68 65 0d 0a  nvolved in the..
65b0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
65c0: 22 72 65 73 75 6c 74 20 73 65 74 22 2e 20 20 53  "result set".  S
65d0: 65 65 20 74 69 63 6b 65 74 20 5b 37 65 33 66 61  ee ticket [7e3fa
65e0: 39 33 37 34 34 5d 20 66 6f 72 20 6d 6f 72 65 20  93744] for more 
65f0: 64 65 74 61 69 6c 65 64 0d 0a 20 20 20 20 20 2f  detailed..     /
6600: 2f 20 20 20 20 20 20 20 20 20 69 6e 66 6f 72 6d  /         inform
6610: 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 2f 2f 0d  ation...     //.
6620: 0a 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72  .      Dictionar
6630: 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20  y<ColumnParent, 
6640: 4c 69 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e  List<int>> paren
6650: 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e 75 6c  tToColumns = nul
6660: 6c 3b 0d 0a 20 20 20 20 20 20 44 69 63 74 69 6f  l;..      Dictio
6670: 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e  nary<int, Column
6680: 50 61 72 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54 6f  Parent> columnTo
6690: 50 61 72 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0d 0a  Parent = null;..
66a0: 0d 0a 20 20 20 20 20 20 47 65 74 53 74 61 74 65  ..      GetState
66b0: 6d 65 6e 74 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  mentColumnParent
66c0: 73 28 0a 20 20 20 20 20 20 20 20 20 20 5f 63 6f  s(.          _co
66d0: 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
66e0: 2e 5f 73 71 6c 2c 20 5f 61 63 74 69 76 65 53 74  ._sql, _activeSt
66f0: 61 74 65 6d 65 6e 74 2c 20 5f 66 69 65 6c 64 43  atement, _fieldC
6700: 6f 75 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20  ount,.          
6710: 72 65 66 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75  ref parentToColu
6720: 6d 6e 73 2c 20 72 65 66 20 63 6f 6c 75 6d 6e 54  mns, ref columnT
6730: 6f 50 61 72 65 6e 74 29 3b 0a 0a 20 20 20 20 20  oParent);..     
6740: 20 44 61 74 61 54 61 62 6c 65 20 74 62 6c 20 3d   DataTable tbl =
6750: 20 6e 65 77 20 44 61 74 61 54 61 62 6c 65 28 22   new DataTable("
6760: 53 63 68 65 6d 61 54 61 62 6c 65 22 29 3b 0a 20  SchemaTable");. 
6770: 20 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 74       DataTable t
6780: 62 6c 49 6e 64 65 78 65 73 20 3d 20 6e 75 6c 6c  blIndexes = null
6790: 3b 0a 20 20 20 20 20 20 44 61 74 61 54 61 62 6c  ;.      DataTabl
67a0: 65 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e  e tblIndexColumn
67b0: 73 3b 0a 20 20 20 20 20 20 44 61 74 61 52 6f 77  s;.      DataRow
67c0: 20 72 6f 77 3b 0a 20 20 20 20 20 20 73 74 72 69   row;.      stri
67d0: 6e 67 20 74 65 6d 70 3b 0a 20 20 20 20 20 20 73  ng temp;.      s
67e0: 74 72 69 6e 67 20 73 74 72 43 61 74 61 6c 6f 67  tring strCatalog
67f0: 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 73 74 72   = "";.      str
6800: 69 6e 67 20 73 74 72 54 61 62 6c 65 20 3d 20 22  ing strTable = "
6810: 22 3b 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ";.      string 
6820: 73 74 72 43 6f 6c 75 6d 6e 20 3d 20 22 22 3b 0a  strColumn = "";.
6830: 0a 20 20 20 20 20 20 74 62 6c 2e 4c 6f 63 61 6c  .      tbl.Local
6840: 65 20 3d 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  e = CultureInfo.
6850: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
6860: 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ;.      tbl.Colu
6870: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
6880: 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
6890: 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72  Name, typeof(Str
68a0: 69 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  ing));.      tbl
68b0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
68c0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43  emaTableColumn.C
68d0: 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 2c 20 74 79  olumnOrdinal, ty
68e0: 70 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20 20  peof(int));.    
68f0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
6900: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
6910: 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 2c 20  umn.ColumnSize, 
6920: 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20  typeof(int));.  
6930: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
6940: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
6950: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65  olumn.NumericPre
6960: 63 69 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 73  cision, typeof(s
6970: 68 6f 72 74 29 29 3b 0a 20 20 20 20 20 20 74 62  hort));.      tb
6980: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
6990: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
69a0: 4e 75 6d 65 72 69 63 53 63 61 6c 65 2c 20 74 79  NumericScale, ty
69b0: 70 65 6f 66 28 73 68 6f 72 74 29 29 3b 0a 20 20  peof(short));.  
69c0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
69d0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
69e0: 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 2c 20  olumn.IsUnique, 
69f0: 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29  typeof(Boolean))
6a00: 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ;.      tbl.Colu
6a10: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
6a20: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 2c  bleColumn.IsKey,
6a30: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
6a40: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
6a50: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
6a60: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
6a70: 6d 6e 2e 42 61 73 65 53 65 72 76 65 72 4e 61 6d  mn.BaseServerNam
6a80: 65 2c 20 74 79 70 65 6f 66 28 73 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 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
6ac0: 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e  umn.BaseCatalogN
6ad0: 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69  ame, typeof(Stri
6ae0: 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  ng));.      tbl.
6af0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
6b00: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
6b10: 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79  seColumnName, ty
6b20: 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0a 20  peof(String));. 
6b30: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
6b40: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
6b50: 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 63 68 65 6d  Column.BaseSchem
6b60: 61 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74  aName, typeof(St
6b70: 72 69 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62  ring));.      tb
6b80: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
6b90: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
6ba0: 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 2c 20 74  BaseTableName, t
6bb0: 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0a  ypeof(String));.
6bc0: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
6bd0: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
6be0: 65 43 6f 6c 75 6d 6e 2e 44 61 74 61 54 79 70 65  eColumn.DataType
6bf0: 2c 20 74 79 70 65 6f 66 28 54 79 70 65 29 29 3b  , typeof(Type));
6c00: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
6c10: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
6c20: 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42  leColumn.AllowDB
6c30: 4e 75 6c 6c 2c 20 74 79 70 65 6f 66 28 42 6f 6f  Null, typeof(Boo
6c40: 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62  lean));.      tb
6c50: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
6c60: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
6c70: 50 72 6f 76 69 64 65 72 54 79 70 65 2c 20 74 79  ProviderType, ty
6c80: 70 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20 20  peof(int));.    
6c90: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
6ca0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
6cb0: 75 6d 6e 2e 49 73 41 6c 69 61 73 65 64 2c 20 74  umn.IsAliased, t
6cc0: 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b  ypeof(Boolean));
6cd0: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
6ce0: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
6cf0: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65  leColumn.IsExpre
6d00: 73 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f  ssion, typeof(Bo
6d10: 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74  olean));.      t
6d20: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
6d30: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
6d40: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49  alColumn.IsAutoI
6d50: 6e 63 72 65 6d 65 6e 74 2c 20 74 79 70 65 6f 66  ncrement, typeof
6d60: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20  (Boolean));.    
6d70: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
6d80: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
6d90: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f  ionalColumn.IsRo
6da0: 77 56 65 72 73 69 6f 6e 2c 20 74 79 70 65 6f 66  wVersion, typeof
6db0: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20  (Boolean));.    
6dc0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
6dd0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
6de0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 48 69  ionalColumn.IsHi
6df0: 64 64 65 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f  dden, typeof(Boo
6e00: 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62  lean));.      tb
6e10: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
6e20: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
6e30: 49 73 4c 6f 6e 67 2c 20 74 79 70 65 6f 66 28 42  IsLong, typeof(B
6e40: 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20  oolean));.      
6e50: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
6e60: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
6e70: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64  nalColumn.IsRead
6e80: 4f 6e 6c 79 2c 20 74 79 70 65 6f 66 28 42 6f 6f  Only, typeof(Boo
6e90: 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62  lean));.      tb
6ea0: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
6eb0: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
6ec0: 6c 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72  lColumn.Provider
6ed0: 53 70 65 63 69 66 69 63 44 61 74 61 54 79 70 65  SpecificDataType
6ee0: 2c 20 74 79 70 65 6f 66 28 54 79 70 65 29 29 3b  , typeof(Type));
6ef0: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
6f00: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
6f10: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
6f20: 2e 44 65 66 61 75 6c 74 56 61 6c 75 65 2c 20 74  .DefaultValue, t
6f30: 79 70 65 6f 66 28 6f 62 6a 65 63 74 29 29 3b 0a  ypeof(object));.
6f40: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
6f50: 73 2e 41 64 64 28 22 44 61 74 61 54 79 70 65 4e  s.Add("DataTypeN
6f60: 61 6d 65 22 2c 20 74 79 70 65 6f 66 28 73 74 72  ame", typeof(str
6f70: 69 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  ing));.      tbl
6f80: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 43 6f  .Columns.Add("Co
6f90: 6c 6c 61 74 69 6f 6e 54 79 70 65 22 2c 20 74 79  llationType", ty
6fa0: 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0a 20  peof(string));. 
6fb0: 20 20 20 20 20 74 62 6c 2e 42 65 67 69 6e 4c 6f       tbl.BeginLo
6fc0: 61 64 44 61 74 61 28 29 3b 0a 0a 20 20 20 20 20  adData();..     
6fd0: 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b   for (int n = 0;
6fe0: 20 6e 20 3c 20 5f 66 69 65 6c 64 43 6f 75 6e 74   n < _fieldCount
6ff0: 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 20  ; n++).      {. 
7000: 20 20 20 20 20 20 20 72 6f 77 20 3d 20 74 62 6c         row = tbl
7010: 2e 4e 65 77 52 6f 77 28 29 3b 0a 0a 20 20 20 20  .NewRow();..    
7020: 20 20 20 20 44 62 54 79 70 65 20 74 79 70 20 3d      DbType typ =
7030: 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 6e   GetSQLiteType(n
7040: 29 2e 54 79 70 65 3b 0a 0a 20 20 20 20 20 20 20  ).Type;..       
7050: 20 2f 2f 20 44 65 66 61 75 6c 74 20 73 65 74 74   // Default sett
7060: 69 6e 67 73 20 66 6f 72 20 74 68 65 20 63 6f 6c  ings for the col
7070: 75 6d 6e 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  umn.        row[
7080: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
7090: 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20 3d 20  n.ColumnName] = 
70a0: 47 65 74 4e 61 6d 65 28 6e 29 3b 0a 20 20 20 20  GetName(n);.    
70b0: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
70c0: 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
70d0: 4f 72 64 69 6e 61 6c 5d 20 3d 20 6e 3b 0a 20 20  Ordinal] = n;.  
70e0: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
70f0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75  TableColumn.Colu
7100: 6d 6e 53 69 7a 65 5d 20 3d 20 53 51 4c 69 74 65  mnSize] = SQLite
7110: 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f  Convert.DbTypeTo
7120: 43 6f 6c 75 6d 6e 53 69 7a 65 28 74 79 70 29 3b  ColumnSize(typ);
7130: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
7140: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e  emaTableColumn.N
7150: 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e 5d  umericPrecision]
7160: 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74   = SQLiteConvert
7170: 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65 72 69 63  .DbTypeToNumeric
7180: 50 72 65 63 69 73 69 6f 6e 28 74 79 70 29 3b 0a  Precision(typ);.
7190: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
71a0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75  maTableColumn.Nu
71b0: 6d 65 72 69 63 53 63 61 6c 65 5d 20 3d 20 53 51  mericScale] = SQ
71c0: 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44 62 54 79  LiteConvert.DbTy
71d0: 70 65 54 6f 4e 75 6d 65 72 69 63 53 63 61 6c 65  peToNumericScale
71e0: 28 74 79 70 29 3b 0a 20 20 20 20 20 20 20 20 72  (typ);.        r
71f0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
7200: 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72 54 79 70  lumn.ProviderTyp
7210: 65 5d 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79  e] = GetSQLiteTy
7220: 70 65 28 6e 29 2e 54 79 70 65 3b 0a 20 20 20 20  pe(n).Type;.    
7230: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
7240: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e 67  bleColumn.IsLong
7250: 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20  ] = false;.     
7260: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
7270: 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42  leColumn.AllowDB
7280: 4e 75 6c 6c 5d 20 3d 20 74 72 75 65 3b 0a 20 20  Null] = true;.  
7290: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
72a0: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
72b0: 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 5d 20  umn.IsReadOnly] 
72c0: 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20  = false;.       
72d0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
72e0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
72f0: 73 52 6f 77 56 65 72 73 69 6f 6e 5d 20 3d 20 66  sRowVersion] = f
7300: 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 72 6f  alse;.        ro
7310: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
7320: 75 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 20 3d 20  umn.IsUnique] = 
7330: 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 72  false;.        r
7340: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
7350: 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20 66 61  lumn.IsKey] = fa
7360: 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 72 6f 77  lse;.        row
7370: 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  [SchemaTableOpti
7380: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74  onalColumn.IsAut
7390: 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 66 61  oIncrement] = fa
73a0: 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 72 6f 77  lse;.        row
73b0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
73c0: 6d 6e 2e 44 61 74 61 54 79 70 65 5d 20 3d 20 47  mn.DataType] = G
73d0: 65 74 46 69 65 6c 64 54 79 70 65 28 6e 29 3b 0a  etFieldType(n);.
73e0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
73f0: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
7400: 6f 6c 75 6d 6e 2e 49 73 48 69 64 64 65 6e 5d 20  olumn.IsHidden] 
7410: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
7420: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
7430: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 63 68 65  eColumn.BaseSche
7440: 6d 61 4e 61 6d 65 5d 20 3d 20 5f 62 61 73 65 53  maName] = _baseS
7450: 63 68 65 6d 61 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  chemaName;....  
7460: 20 20 20 20 20 20 73 74 72 43 6f 6c 75 6d 6e 20        strColumn 
7470: 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74  = columnToParent
7480: 5b 6e 5d 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0a  [n].ColumnName;.
7490: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
74a0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
74b0: 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66  (strColumn) == f
74c0: 61 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61  alse) row[Schema
74d0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
74e0: 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20 3d 20 73 74  ColumnName] = st
74f0: 72 43 6f 6c 75 6d 6e 3b 0a 0a 20 20 20 20 20 20  rColumn;..      
7500: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
7510: 65 43 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65 73  eColumn.IsExpres
7520: 73 69 6f 6e 5d 20 3d 20 53 74 72 69 6e 67 2e 49  sion] = String.I
7530: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72  sNullOrEmpty(str
7540: 43 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20 20  Column);.       
7550: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
7560: 43 6f 6c 75 6d 6e 2e 49 73 41 6c 69 61 73 65 64  Column.IsAliased
7570: 5d 20 3d 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70  ] = (String.Comp
7580: 61 72 65 28 47 65 74 4e 61 6d 65 28 6e 29 2c 20  are(GetName(n), 
7590: 73 74 72 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e  strColumn, Strin
75a0: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
75b0: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 21  nalIgnoreCase) !
75c0: 3d 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  = 0);....       
75d0: 20 74 65 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f   temp = columnTo
75e0: 50 61 72 65 6e 74 5b 6e 5d 2e 54 61 62 6c 65 4e  Parent[n].TableN
75f0: 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 69 66 20  ame;.        if 
7600: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
7610: 45 6d 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66  Empty(temp) == f
7620: 61 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61  alse) row[Schema
7630: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
7640: 54 61 62 6c 65 4e 61 6d 65 5d 20 3d 20 74 65 6d  TableName] = tem
7650: 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65  p;....        te
7660: 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72  mp = columnToPar
7670: 65 6e 74 5b 6e 5d 2e 44 61 74 61 62 61 73 65 4e  ent[n].DatabaseN
7680: 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 69 66 20  ame;.        if 
7690: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
76a0: 45 6d 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66  Empty(temp) == f
76b0: 61 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61  alse) row[Schema
76c0: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
76d0: 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e  umn.BaseCatalogN
76e0: 61 6d 65 5d 20 3d 20 74 65 6d 70 3b 0a 0a 20 20  ame] = temp;..  
76f0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74        string dat
7700: 61 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0a 20 20  aType = null;.  
7710: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 20 68        // If we h
7720: 61 76 65 20 61 20 74 61 62 6c 65 2d 62 6f 75 6e  ave a table-boun
7730: 64 20 63 6f 6c 75 6d 6e 2c 20 65 78 74 72 61 63  d column, extrac
7740: 74 20 74 68 65 20 65 78 74 72 61 20 69 6e 66 6f  t the extra info
7750: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 69 74 0a  rmation from it.
7760: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
7770: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
7780: 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66  (strColumn) == f
7790: 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20 7b 0a  alse).        {.
77a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
77b0: 20 63 6f 6c 6c 53 65 71 3b 0a 20 20 20 20 20 20   collSeq;.      
77c0: 20 20 20 20 62 6f 6f 6c 20 62 4e 6f 74 4e 75 6c      bool bNotNul
77d0: 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f  l;.          boo
77e0: 6c 20 62 50 72 69 6d 61 72 79 4b 65 79 3b 0a 20  l bPrimaryKey;. 
77f0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 62 41           bool bA
7800: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 3b 0a 20 20  utoIncrement;.  
7810: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
7820: 20 61 72 53 69 7a 65 3b 0a 0a 20 20 20 20 20 20   arSize;..      
7830: 20 20 20 20 2f 2f 20 47 65 74 20 74 68 65 20 63      // Get the c
7840: 6f 6c 75 6d 6e 20 6d 65 74 61 20 64 61 74 61 0a  olumn meta data.
7850: 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61            _comma
7860: 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73  nd.Connection._s
7870: 71 6c 2e 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74  ql.ColumnMetaDat
7880: 61 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  a(.            (
7890: 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d  string)row[Schem
78a0: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
78b0: 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67  lumn.BaseCatalog
78c0: 4e 61 6d 65 5d 2c 0a 20 20 20 20 20 20 20 20 20  Name],.         
78d0: 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53     (string)row[S
78e0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
78f0: 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 2c  .BaseTableName],
7900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
7910: 43 6f 6c 75 6d 6e 2c 0a 20 20 20 20 20 20 20 20  Column,.        
7920: 20 20 20 20 6f 75 74 20 64 61 74 61 54 79 70 65      out dataType
7930: 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71 2c 20 6f  , out collSeq, o
7940: 75 74 20 62 4e 6f 74 4e 75 6c 6c 2c 20 6f 75 74  ut bNotNull, out
7950: 20 62 50 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75   bPrimaryKey, ou
7960: 74 20 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74  t bAutoIncrement
7970: 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
7980: 20 28 62 4e 6f 74 4e 75 6c 6c 20 7c 7c 20 62 50   (bNotNull || bP
7990: 72 69 6d 61 72 79 4b 65 79 29 20 72 6f 77 5b 53  rimaryKey) row[S
79a0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
79b0: 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 20  .AllowDBNull] = 
79c0: 66 61 6c 73 65 3b 0a 0a 20 20 20 20 20 20 20 20  false;..        
79d0: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
79e0: 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d  eColumn.IsKey] =
79f0: 20 62 50 72 69 6d 61 72 79 4b 65 79 3b 0a 20 20   bPrimaryKey;.  
7a00: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
7a10: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
7a20: 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72  olumn.IsAutoIncr
7a30: 65 6d 65 6e 74 5d 20 3d 20 62 41 75 74 6f 49 6e  ement] = bAutoIn
7a40: 63 72 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 20  crement;.       
7a50: 20 20 20 72 6f 77 5b 22 43 6f 6c 6c 61 74 69 6f     row["Collatio
7a60: 6e 54 79 70 65 22 5d 20 3d 20 63 6f 6c 6c 53 65  nType"] = collSe
7a70: 71 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  q;..          //
7a80: 20 46 6f 72 20 74 79 70 65 73 20 6c 69 6b 65 20   For types like 
7a90: 76 61 72 63 68 61 72 28 35 30 29 20 61 6e 64 20  varchar(50) and 
7aa0: 73 75 63 68 2c 20 65 78 74 72 61 63 74 20 74 68  such, extract th
7ab0: 65 20 73 69 7a 65 0a 20 20 20 20 20 20 20 20 20  e size.         
7ac0: 20 61 72 53 69 7a 65 20 3d 20 64 61 74 61 54 79   arSize = dataTy
7ad0: 70 65 2e 53 70 6c 69 74 28 27 28 27 29 3b 0a 20  pe.Split('(');. 
7ae0: 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 53           if (arS
7af0: 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0a  ize.Length > 1).
7b00: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
7b10: 20 20 20 20 20 20 20 20 64 61 74 61 54 79 70 65          dataType
7b20: 20 3d 20 61 72 53 69 7a 65 5b 30 5d 3b 0a 20 20   = arSize[0];.  
7b30: 20 20 20 20 20 20 20 20 20 20 61 72 53 69 7a 65            arSize
7b40: 20 3d 20 61 72 53 69 7a 65 5b 31 5d 2e 53 70 6c   = arSize[1].Spl
7b50: 69 74 28 27 29 27 29 3b 0a 20 20 20 20 20 20 20  it(')');.       
7b60: 20 20 20 20 20 69 66 20 28 61 72 53 69 7a 65 2e       if (arSize.
7b70: 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20 20 20 20  Length > 1).    
7b80: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
7b90: 20 20 20 20 20 20 20 20 61 72 53 69 7a 65 20 3d          arSize =
7ba0: 20 61 72 53 69 7a 65 5b 30 5d 2e 53 70 6c 69 74   arSize[0].Split
7bb0: 28 27 2c 27 2c 20 27 2e 27 29 3b 0a 20 20 20 20  (',', '.');.    
7bc0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 47 65            if (Ge
7bd0: 74 53 51 4c 69 74 65 54 79 70 65 28 6e 29 2e 54  tSQLiteType(n).T
7be0: 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 53 74  ype == DbType.St
7bf0: 72 69 6e 67 20 7c 7c 20 47 65 74 53 51 4c 69 74  ring || GetSQLit
7c00: 65 54 79 70 65 28 6e 29 2e 54 79 70 65 20 3d 3d  eType(n).Type ==
7c10: 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29 0a   DbType.Binary).
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a                {.
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
7c50: 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65  olumn.ColumnSize
7c60: 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e  ] = Convert.ToIn
7c70: 74 33 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20 43  t32(arSize[0], C
7c80: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
7c90: 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20 20  iantCulture);.  
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
7cb0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
7cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
7cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7ce0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
7cf0: 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72  Column.NumericPr
7d00: 65 63 69 73 69 6f 6e 5d 20 3d 20 43 6f 6e 76 65  ecision] = Conve
7d10: 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53 69 7a  rt.ToInt32(arSiz
7d20: 65 5b 30 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66  e[0], CultureInf
7d30: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
7d40: 72 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  re);.           
7d50: 20 20 20 20 20 69 66 20 28 61 72 53 69 7a 65 2e       if (arSize.
7d60: 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20 20 20 20  Length > 1).    
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
7d80: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
7d90: 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c 65  umn.NumericScale
7da0: 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e  ] = Convert.ToIn
7db0: 74 33 32 28 61 72 53 69 7a 65 5b 31 5d 2c 20 43  t32(arSize[1], C
7dc0: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
7dd0: 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20 20  iantCulture);.  
7de0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
7df0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
7e00: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
7e10: 20 20 20 69 66 20 28 77 61 6e 74 44 65 66 61 75     if (wantDefau
7e20: 6c 74 56 61 6c 75 65 29 0a 20 20 20 20 20 20 20  ltValue).       
7e30: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
7e40: 20 2f 2f 20 44 65 74 65 72 6d 69 6e 65 20 74 68   // Determine th
7e50: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
7e60: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20  for the column, 
7e70: 77 68 69 63 68 20 73 75 63 6b 73 20 62 65 63 61  which sucks beca
7e80: 75 73 65 20 77 65 20 68 61 76 65 20 74 6f 20 71  use we have to q
7e90: 75 65 72 79 20 74 68 65 20 73 63 68 65 6d 61 20  uery the schema 
7ea0: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 0a  for each column.
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
7ec0: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
7ed0: 20 63 6d 64 54 61 62 6c 65 20 3d 20 6e 65 77 20   cmdTable = new 
7ee0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 53 74  SQLiteCommand(St
7ef0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74  ring.Format(Cult
7f00: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
7f10: 74 43 75 6c 74 75 72 65 2c 20 22 50 52 41 47 4d  tCulture, "PRAGM
7f20: 41 20 5b 7b 30 7d 5d 2e 54 41 42 4c 45 5f 49 4e  A [{0}].TABLE_IN
7f30: 46 4f 28 5b 7b 31 7d 5d 29 22 2c 0a 20 20 20 20  FO([{1}])",.    
7f40: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
7f50: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
7f60: 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61  lColumn.BaseCata
7f70: 6c 6f 67 4e 61 6d 65 5d 2c 0a 20 20 20 20 20 20  logName],.      
7f80: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
7f90: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
7fa0: 73 65 54 61 62 6c 65 4e 61 6d 65 5d 0a 20 20 20  seTableName].   
7fb0: 20 20 20 20 20 20 20 20 20 20 20 29 2c 20 5f 63             ), _c
7fc0: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
7fd0: 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)).            
7fe0: 75 73 69 6e 67 20 28 44 62 44 61 74 61 52 65 61  using (DbDataRea
7ff0: 64 65 72 20 72 64 54 61 62 6c 65 20 3d 20 63 6d  der rdTable = cm
8000: 64 54 61 62 6c 65 2e 45 78 65 63 75 74 65 52 65  dTable.ExecuteRe
8010: 61 64 65 72 28 29 29 0a 20 20 20 20 20 20 20 20  ader()).        
8020: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
8030: 20 20 20 20 2f 2f 20 46 69 6e 64 20 74 68 65 20      // Find the 
8040: 6d 61 74 63 68 69 6e 67 20 63 6f 6c 75 6d 6e 0a  matching column.
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
8060: 69 6c 65 20 28 72 64 54 61 62 6c 65 2e 52 65 61  ile (rdTable.Rea
8070: 64 28 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  d()).           
8080: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
8090: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
80a0: 43 6f 6d 70 61 72 65 28 28 73 74 72 69 6e 67 29  Compare((string)
80b0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
80c0: 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e  olumn.BaseColumn
80d0: 4e 61 6d 65 5d 2c 20 72 64 54 61 62 6c 65 2e 47  Name], rdTable.G
80e0: 65 74 53 74 72 69 6e 67 28 31 29 2c 20 53 74 72  etString(1), Str
80f0: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
8100: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
8110: 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20   == 0).         
8120: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
8130: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
8140: 64 54 61 62 6c 65 2e 49 73 44 42 4e 75 6c 6c 28  dTable.IsDBNull(
8150: 34 29 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20  4) == false).   
8160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8170: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
8180: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44  OptionalColumn.D
8190: 65 66 61 75 6c 74 56 61 6c 75 65 5d 20 3d 20 72  efaultValue] = r
81a0: 64 54 61 62 6c 65 5b 34 5d 3b 0a 0a 20 20 20 20  dTable[4];..    
81b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
81c0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20  eak;.           
81d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
81e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
81f0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
8200: 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44  ..          // D
8210: 65 74 65 72 6d 69 6e 65 20 49 73 55 6e 69 71 75  etermine IsUniqu
8220: 65 20 70 72 6f 70 65 72 6c 79 2c 20 77 68 69 63  e properly, whic
8230: 68 20 69 73 20 61 20 70 61 69 6e 20 69 6e 20 74  h is a pain in t
8240: 68 65 20 62 75 74 74 21 0a 20 20 20 20 20 20 20  he butt!.       
8250: 20 20 20 69 66 20 28 77 61 6e 74 55 6e 69 71 75     if (wantUniqu
8260: 65 49 6e 66 6f 29 0a 20 20 20 20 20 20 20 20 20  eInfo).         
8270: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69   {.            i
8280: 66 20 28 28 73 74 72 69 6e 67 29 72 6f 77 5b 53  f ((string)row[S
8290: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
82a0: 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74  alColumn.BaseCat
82b0: 61 6c 6f 67 4e 61 6d 65 5d 20 21 3d 20 73 74 72  alogName] != str
82c0: 43 61 74 61 6c 6f 67 0a 20 20 20 20 20 20 20 20  Catalog.        
82d0: 20 20 20 20 20 20 7c 7c 20 28 73 74 72 69 6e 67        || (string
82e0: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
82f0: 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65  Column.BaseTable
8300: 4e 61 6d 65 5d 20 21 3d 20 73 74 72 54 61 62 6c  Name] != strTabl
8310: 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e).            {
8320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
8330: 74 72 43 61 74 61 6c 6f 67 20 3d 20 28 73 74 72  trCatalog = (str
8340: 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61  ing)row[SchemaTa
8350: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
8360: 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d  n.BaseCatalogNam
8370: 65 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e];.            
8380: 20 20 73 74 72 54 61 62 6c 65 20 3d 20 28 73 74    strTable = (st
8390: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
83a0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
83b0: 61 62 6c 65 4e 61 6d 65 5d 3b 0a 0a 20 20 20 20  ableName];..    
83c0: 20 20 20 20 20 20 20 20 20 20 74 62 6c 49 6e 64            tblInd
83d0: 65 78 65 73 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  exes = _command.
83e0: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53 63  Connection.GetSc
83f0: 68 65 6d 61 28 22 49 6e 64 65 78 65 73 22 2c 20  hema("Indexes", 
8400: 6e 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b 0a 20  new string[] {. 
8410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
8420: 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d  string)row[Schem
8430: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
8440: 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67  lumn.BaseCatalog
8450: 4e 61 6d 65 5d 2c 0a 20 20 20 20 20 20 20 20 20  Name],.         
8460: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 0a 20 20 20         null,.   
8470: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74               (st
8480: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
8490: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
84a0: 61 62 6c 65 4e 61 6d 65 5d 2c 0a 20 20 20 20 20  ableName],.     
84b0: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 20             null 
84c0: 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  });.            
84d0: 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  }..            f
84e0: 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f 77 20  oreach (DataRow 
84f0: 72 6f 77 49 6e 64 65 78 65 73 20 69 6e 20 74 62  rowIndexes in tb
8500: 6c 49 6e 64 65 78 65 73 2e 52 6f 77 73 29 0a 20  lIndexes.Rows). 
8510: 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20             {.   
8520: 20 20 20 20 20 20 20 20 20 20 20 74 62 6c 49 6e             tblIn
8530: 64 65 78 43 6f 6c 75 6d 6e 73 20 3d 20 5f 63 6f  dexColumns = _co
8540: 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
8550: 2e 47 65 74 53 63 68 65 6d 61 28 22 49 6e 64 65  .GetSchema("Inde
8560: 78 43 6f 6c 75 6d 6e 73 22 2c 20 6e 65 77 20 73  xColumns", new s
8570: 74 72 69 6e 67 5b 5d 20 7b 0a 20 20 20 20 20 20  tring[] {.      
8580: 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e            (strin
8590: 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  g)row[SchemaTabl
85a0: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
85b0: 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d  BaseCatalogName]
85c0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
85d0: 20 20 6e 75 6c 6c 2c 0a 20 20 20 20 20 20 20 20    null,.        
85e0: 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29          (string)
85f0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
8600: 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e  olumn.BaseTableN
8610: 61 6d 65 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  ame],.          
8620: 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f        (string)ro
8630: 77 49 6e 64 65 78 65 73 5b 22 49 4e 44 45 58 5f  wIndexes["INDEX_
8640: 4e 41 4d 45 22 5d 2c 0a 20 20 20 20 20 20 20 20  NAME"],.        
8650: 20 20 20 20 20 20 20 20 6e 75 6c 6c 0a 20 20 20          null.   
8660: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 3b               });
8670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  .              f
8680: 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f 77 20  oreach (DataRow 
8690: 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64 65 78 20 69  rowColumnIndex i
86a0: 6e 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e  n tblIndexColumn
86b0: 73 2e 52 6f 77 73 29 0a 20 20 20 20 20 20 20 20  s.Rows).        
86c0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
86d0: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
86e0: 6e 67 2e 43 6f 6d 70 61 72 65 28 28 73 74 72 69  ng.Compare((stri
86f0: 6e 67 29 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64 65  ng)rowColumnInde
8700: 78 5b 22 43 4f 4c 55 4d 4e 5f 4e 41 4d 45 22 5d  x["COLUMN_NAME"]
8710: 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c 20 53 74 72  , strColumn, Str
8720: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
8730: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
8740: 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20   == 0).         
8750: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8760: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
8770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8780: 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 4d 61 6b    // BUGFIX: Mak
8790: 65 20 73 75 72 65 20 74 68 61 74 20 77 65 20 6f  e sure that we o
87a0: 6e 6c 79 20 66 6c 61 67 20 74 68 69 73 20 63 6f  nly flag this co
87b0: 6c 75 6d 6e 20 61 73 20 22 75 6e 69 71 75 65 22  lumn as "unique"
87c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
87d0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69      //         i
87e0: 66 20 77 65 20 61 72 65 20 6e 6f 74 20 70 72 6f  f we are not pro
87f0: 63 65 73 73 69 6e 67 20 6f 66 20 73 6f 6d 65 20  cessing of some 
8800: 6b 69 6e 64 20 6f 66 20 6d 75 6c 74 69 2d 74 61  kind of multi-ta
8810: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ble..           
8820: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
8830: 20 20 63 6f 6e 73 74 72 75 63 74 20 28 69 2e 65    construct (i.e
8840: 2e 20 61 20 6a 6f 69 6e 29 20 62 65 63 61 75 73  . a join) becaus
8850: 65 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 77  e in that case w
8860: 65 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20  e must..        
8870: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
8880: 20 20 20 20 20 61 6c 6c 6f 77 20 64 75 70 6c 69       allow dupli
8890: 63 61 74 65 20 76 61 6c 75 65 73 20 28 72 65 66  cate values (ref
88a0: 65 72 20 74 6f 20 74 69 63 6b 65 74 20 5b 37 65  er to ticket [7e
88b0: 33 66 61 39 33 37 34 34 5d 29 2e 0d 0a 20 20 20  3fa93744])...   
88c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
88d0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
88e0: 20 20 20 20 20 69 66 20 28 70 61 72 65 6e 74 54       if (parentT
88f0: 6f 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 20 3d  oColumns.Count =
8900: 3d 20 31 20 26 26 20 74 62 6c 49 6e 64 65 78 43  = 1 && tblIndexC
8910: 6f 6c 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e  olumns.Rows.Coun
8920: 74 20 3d 3d 20 31 20 26 26 20 28 62 6f 6f 6c 29  t == 1 && (bool)
8930: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
8940: 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c  olumn.AllowDBNul
8950: 6c 5d 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20 20  l] == false)..  
8960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8970: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
8980: 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65  eColumn.IsUnique
8990: 5d 20 3d 20 72 6f 77 49 6e 64 65 78 65 73 5b 22  ] = rowIndexes["
89a0: 55 4e 49 51 55 45 22 5d 3b 0a 0a 20 20 20 20 20  UNIQUE"];..     
89b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
89c0: 49 66 20 69 74 73 20 61 6e 20 69 6e 74 65 67 65  If its an intege
89d0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 61 6e  r primary key an
89e0: 64 20 74 68 65 20 6f 6e 6c 79 20 70 72 69 6d 61  d the only prima
89f0: 72 79 20 6b 65 79 20 69 6e 20 74 68 65 20 74 61  ry key in the ta
8a00: 62 6c 65 2c 20 74 68 65 6e 20 69 74 73 20 61 20  ble, then its a 
8a10: 72 6f 77 69 64 20 61 6c 69 61 73 20 61 6e 64 20  rowid alias and 
8a20: 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  is autoincrement
8a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8a40: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 20 43 75 72     // NOTE:  Cur
8a50: 72 65 6e 74 6c 79 20 63 6f 6d 6d 65 6e 74 65 64  rently commented
8a60: 20 6f 75 74 20 62 65 63 61 75 73 65 20 74 68 69   out because thi
8a70: 73 20 69 73 20 6e 6f 74 20 61 6c 77 61 79 73 20  s is not always 
8a80: 74 68 65 20 64 65 73 69 72 65 64 20 62 65 68 61  the desired beha
8a90: 76 69 6f 72 2e 20 20 46 6f 72 20 65 78 61 6d 70  vior.  For examp
8aa0: 6c 65 2c 20 61 20 31 3a 31 20 72 65 6c 61 74 69  le, a 1:1 relati
8ab0: 6f 6e 73 68 69 70 20 77 69 74 68 0a 20 20 20 20  onship with.    
8ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8ad0: 20 20 20 20 20 20 20 20 61 6e 6f 74 68 65 72 20          another 
8ae0: 74 61 62 6c 65 2c 20 77 68 65 72 65 20 74 68 65  table, where the
8af0: 20 6f 74 68 65 72 20 74 61 62 6c 65 20 69 73 20   other table is 
8b00: 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 2c 20 62  autoincrement, b
8b10: 75 74 20 74 68 69 73 20 6f 6e 65 20 69 73 20 6e  ut this one is n
8b20: 6f 74 2c 20 61 6e 64 20 75 73 65 73 20 74 68 65  ot, and uses the
8b30: 20 72 6f 77 69 64 20 66 72 6f 6d 20 74 68 65 20   rowid from the 
8b40: 6f 74 68 65 72 2e 0a 20 20 20 20 20 20 20 20 20  other..         
8b50: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
8b60: 20 20 20 49 74 20 69 73 20 73 61 66 65 72 20 74     It is safer t
8b70: 6f 20 6f 6e 6c 79 20 73 65 74 20 41 75 74 6f 69  o only set Autoi
8b80: 6e 63 72 65 6d 65 6e 74 20 6f 6e 20 74 61 62 6c  ncrement on tabl
8b90: 65 73 20 77 68 65 72 65 20 77 65 27 72 65 20 53  es where we're S
8ba0: 55 52 45 20 74 68 65 20 75 73 65 72 20 73 70 65  URE the user spe
8bb0: 63 69 66 69 65 64 20 41 55 54 4f 49 4e 43 52 45  cified AUTOINCRE
8bc0: 4d 45 4e 54 2c 20 65 76 65 6e 20 69 66 20 69 74  MENT, even if it
8bd0: 73 20 61 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e  s a rowid column
8be0: 2e 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8bf0: 20 20 20 20 20 69 66 20 28 74 62 6c 49 6e 64 65       if (tblInde
8c00: 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f  xColumns.Rows.Co
8c10: 75 6e 74 20 3d 3d 20 31 20 26 26 20 28 62 6f 6f  unt == 1 && (boo
8c20: 6c 29 72 6f 77 49 6e 64 65 78 65 73 5b 22 50 52  l)rowIndexes["PR
8c30: 49 4d 41 52 59 5f 4b 45 59 22 5d 20 3d 3d 20 74  IMARY_KEY"] == t
8c40: 72 75 65 20 26 26 20 53 74 72 69 6e 67 2e 49 73  rue && String.Is
8c50: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74 61  NullOrEmpty(data
8c60: 54 79 70 65 29 20 3d 3d 20 66 61 6c 73 65 20 26  Type) == false &
8c70: 26 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  &.              
8c80: 20 20 20 20 20 20 53 74 72 69 6e 67 2e 43 6f 6d        String.Com
8c90: 70 61 72 65 28 64 61 74 61 54 79 70 65 2c 20 22  pare(dataType, "
8ca0: 69 6e 74 65 67 65 72 22 2c 20 53 74 72 69 6e 67  integer", String
8cb0: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
8cc0: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
8cd0: 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   0).            
8ce0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
8d00: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
8d10: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
8d20: 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d  AutoIncrement] =
8d30: 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20   true;.         
8d40: 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20           }..    
8d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
8d60: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20  eak;.           
8d70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
8d80: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
8d90: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
8da0: 0a 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
8db0: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
8dc0: 6d 70 74 79 28 64 61 74 61 54 79 70 65 29 29 0a  mpty(dataType)).
8dd0: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
8de0: 20 20 20 20 20 20 20 20 54 79 70 65 41 66 66 69          TypeAffi
8df0: 6e 69 74 79 20 61 66 66 69 6e 3b 0a 20 20 20 20  nity affin;.    
8e00: 20 20 20 20 20 20 20 20 64 61 74 61 54 79 70 65          dataType
8e10: 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d   = _activeStatem
8e20: 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54  ent._sql.ColumnT
8e30: 79 70 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ype(_activeState
8e40: 6d 65 6e 74 2c 20 6e 2c 20 6f 75 74 20 61 66 66  ment, n, out aff
8e50: 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  in);.          }
8e60: 0a 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
8e70: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
8e80: 6d 70 74 79 28 64 61 74 61 54 79 70 65 29 20 3d  mpty(dataType) =
8e90: 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20 20  = false).       
8ea0: 20 20 20 20 20 72 6f 77 5b 22 44 61 74 61 54 79       row["DataTy
8eb0: 70 65 4e 61 6d 65 22 5d 20 3d 20 64 61 74 61 54  peName"] = dataT
8ec0: 79 70 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ype;.        }. 
8ed0: 20 20 20 20 20 20 20 74 62 6c 2e 52 6f 77 73 2e         tbl.Rows.
8ee0: 41 64 64 28 72 6f 77 29 3b 0a 20 20 20 20 20 20  Add(row);.      
8ef0: 7d 0a 0a 20 20 20 20 20 20 69 66 20 28 5f 6b 65  }..      if (_ke
8f00: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20  yInfo != null). 
8f10: 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e         _keyInfo.
8f20: 41 70 70 65 6e 64 53 63 68 65 6d 61 54 61 62 6c  AppendSchemaTabl
8f30: 65 28 74 62 6c 29 3b 0a 0a 20 20 20 20 20 20 74  e(tbl);..      t
8f40: 62 6c 2e 41 63 63 65 70 74 43 68 61 6e 67 65 73  bl.AcceptChanges
8f50: 28 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 45 6e  ();.      tbl.En
8f60: 64 4c 6f 61 64 44 61 74 61 28 29 3b 0a 0a 20 20  dLoadData();..  
8f70: 20 20 20 20 72 65 74 75 72 6e 20 74 62 6c 3b 0a      return tbl;.
8f80: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
8f90: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
8fa0: 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63   Retrieves the c
8fb0: 6f 6c 75 6d 6e 20 61 73 20 61 20 73 74 72 69 6e  olumn as a strin
8fc0: 67 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  g.    /// </summ
8fd0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
8fe0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
8ff0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
9000: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
9010: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
9020: 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67   <returns>string
9030: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
9040: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73  ublic override s
9050: 74 72 69 6e 67 20 47 65 74 53 74 72 69 6e 67 28  tring GetString(
9060: 69 6e 74 20 69 29 0a 20 20 20 20 7b 0d 0a 20 20  int i).    {..  
9070: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
9080: 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28  d();..      if (
9090: 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c  i >= VisibleFiel
90a0: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
90b0: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  fo != null).    
90c0: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
90d0: 6e 66 6f 2e 47 65 74 53 74 72 69 6e 67 28 69 20  nfo.GetString(i 
90e0: 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  - VisibleFieldCo
90f0: 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72  unt);..      Ver
9100: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
9110: 65 2e 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20  e.String);.     
9120: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
9130: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
9140: 74 54 65 78 74 28 5f 61 63 74 69 76 65 53 74 61  tText(_activeSta
9150: 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20  tement, i);.    
9160: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
9170: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ary>.    /// Ret
9180: 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d  rieves the colum
9190: 6e 20 61 73 20 61 6e 20 6f 62 6a 65 63 74 20 63  n as an object c
91a0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
91b0: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
91c0: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 63  atatype of the c
91d0: 6f 6c 75 6d 6e 0a 20 20 20 20 2f 2f 2f 20 3c 2f  olumn.    /// </
91e0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
91f0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
9200: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
9210: 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72  e column to retr
9220: 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  ieve</param>.   
9230: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 6f 62   /// <returns>ob
9240: 6a 65 63 74 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  ject</returns>. 
9250: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
9260: 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c  de object GetVal
9270: 75 65 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0d  ue(int i).    {.
9280: 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70  .      CheckDisp
9290: 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69  osed();..      i
92a0: 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46  f (i >= VisibleF
92b0: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
92c0: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20  yInfo != null). 
92d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
92e0: 65 79 49 6e 66 6f 2e 47 65 74 56 61 6c 75 65 28  eyInfo.GetValue(
92f0: 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64  i - VisibleField
9300: 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 53  Count);..      S
9310: 51 4c 69 74 65 54 79 70 65 20 74 79 70 20 3d 20  QLiteType typ = 
9320: 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 69 29  GetSQLiteType(i)
9330: 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
9340: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
9350: 2e 5f 73 71 6c 2e 47 65 74 56 61 6c 75 65 28 5f  ._sql.GetValue(_
9360: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
9370: 20 69 2c 20 74 79 70 29 3b 0a 20 20 20 20 7d 0a   i, typ);.    }.
9380: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
9390: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 65  y>.    /// Retre
93a0: 69 76 65 73 20 74 68 65 20 76 61 6c 75 65 73 20  ives the values 
93b0: 6f 66 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75  of multiple colu
93c0: 6d 6e 73 2c 20 75 70 20 74 6f 20 74 68 65 20 73  mns, up to the s
93d0: 69 7a 65 20 6f 66 20 74 68 65 20 73 75 70 70 6c  ize of the suppl
93e0: 69 65 64 20 61 72 72 61 79 0a 20 20 20 20 2f 2f  ied array.    //
93f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
9400: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
9410: 3d 22 76 61 6c 75 65 73 22 3e 54 68 65 20 61 72  ="values">The ar
9420: 72 61 79 20 74 6f 20 66 69 6c 6c 20 77 69 74 68  ray to fill with
9430: 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 74 68 65   values from the
9440: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
9450: 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65  current resultse
9460: 74 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  t</param>.    //
9470: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e  / <returns>The n
9480: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
9490: 20 72 65 74 72 69 65 76 65 64 3c 2f 72 65 74 75   retrieved</retu
94a0: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
94b0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74  override int Get
94c0: 56 61 6c 75 65 73 28 6f 62 6a 65 63 74 5b 5d 20  Values(object[] 
94d0: 76 61 6c 75 65 73 29 0d 0a 20 20 20 20 7b 0d 0a  values)..    {..
94e0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
94f0: 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 6e  sed();..      in
9500: 74 20 6e 4d 61 78 20 3d 20 46 69 65 6c 64 43 6f  t nMax = FieldCo
9510: 75 6e 74 3b 0a 20 20 20 20 20 20 69 66 20 28 76  unt;.      if (v
9520: 61 6c 75 65 73 2e 4c 65 6e 67 74 68 20 3c 20 6e  alues.Length < n
9530: 4d 61 78 29 20 6e 4d 61 78 20 3d 20 76 61 6c 75  Max) nMax = valu
9540: 65 73 2e 4c 65 6e 67 74 68 3b 0a 0a 20 20 20 20  es.Length;..    
9550: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
9560: 3b 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29  ; n < nMax; n++)
9570: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
9580: 20 76 61 6c 75 65 73 5b 6e 5d 20 3d 20 47 65 74   values[n] = Get
9590: 56 61 6c 75 65 28 6e 29 3b 0a 20 20 20 20 20 20  Value(n);.      
95a0: 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  }..      return 
95b0: 6e 4d 61 78 3b 0a 20 20 20 20 7d 0d 0a 0d 0a 20  nMax;.    }.... 
95c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
95d0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
95e0: 73 20 61 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 63  s a collection c
95f0: 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 74 68  ontaining all th
9600: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  e column names a
9610: 6e 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  nd values for th
9620: 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65  e..    /// curre
9630: 6e 74 20 72 6f 77 20 6f 66 20 64 61 74 61 20 69  nt row of data i
9640: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65  n the current re
9650: 73 75 6c 74 73 65 74 2c 20 69 66 20 61 6e 79 2e  sultset, if any.
9660: 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
9670: 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e  ..    /// curren
9680: 74 20 72 6f 77 20 6f 72 20 6e 6f 20 63 75 72 72  t row or no curr
9690: 65 6e 74 20 72 65 73 75 6c 74 73 65 74 2c 20 61  ent resultset, a
96a0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 6d 61 79 20  n exception may 
96b0: 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20 20 20  be thrown...    
96c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
96d0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
96e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63  >..    /// The c
96f0: 6f 6c 6c 65 63 74 69 6f 6e 20 63 6f 6e 74 61 69  ollection contai
9700: 6e 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ning the column 
9710: 6e 61 6d 65 20 61 6e 64 20 76 61 6c 75 65 20 69  name and value i
9720: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74  nformation for t
9730: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72  he..    /// curr
9740: 65 6e 74 20 72 6f 77 20 6f 66 20 64 61 74 61 20  ent row of data 
9750: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  in the current r
9760: 65 73 75 6c 74 73 65 74 20 6f 72 20 6e 75 6c 6c  esultset or null
9770: 20 69 66 20 74 68 69 73 20 69 6e 66 6f 72 6d 61   if this informa
9780: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 63 61  tion..    /// ca
9790: 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
97a0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
97b0: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
97c0: 63 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65  c NameValueColle
97d0: 63 74 69 6f 6e 20 47 65 74 56 61 6c 75 65 73 28  ction GetValues(
97e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
97f0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9800: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
9810: 20 28 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d   ((_activeStatem
9820: 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ent == null) || 
9830: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
9840: 74 2e 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 29  t._sql == null))
9850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
9860: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
9870: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
9880: 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n();....        
9890: 69 6e 74 20 6e 4d 61 78 20 3d 20 56 69 73 69 62  int nMax = Visib
98a0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20  leFieldCount;.. 
98b0: 20 20 20 20 20 20 20 4e 61 6d 65 56 61 6c 75 65         NameValue
98c0: 43 6f 6c 6c 65 63 74 69 6f 6e 20 72 65 73 75 6c  Collection resul
98d0: 74 20 3d 20 6e 65 77 20 4e 61 6d 65 56 61 6c 75  t = new NameValu
98e0: 65 43 6f 6c 6c 65 63 74 69 6f 6e 28 6e 4d 61 78  eCollection(nMax
98f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f  );....        fo
9900: 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20  r (int n = 0; n 
9910: 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20  < nMax; n++)..  
9920: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9930: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
9940: 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d   = _activeStatem
9950: 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e  ent._sql.ColumnN
9960: 61 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ame(_activeState
9970: 6d 65 6e 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20  ment, n);..     
9980: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61         string va
9990: 6c 75 65 20 3d 20 5f 61 63 74 69 76 65 53 74 61  lue = _activeSta
99a0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54  tement._sql.GetT
99b0: 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ext(_activeState
99c0: 6d 65 6e 74 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20  ment, n);....   
99d0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
99e0: 41 64 64 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29  Add(name, value)
99f0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
9a00: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
9a10: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  esult;..    }...
9a20: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
9a30: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
9a40: 72 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20  rns True if the 
9a50: 72 65 73 75 6c 74 73 65 74 20 68 61 73 20 72 6f  resultset has ro
9a60: 77 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 66  ws that can be f
9a70: 65 74 63 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  etched..    /// 
9a80: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9a90: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
9aa0: 62 6f 6f 6c 20 48 61 73 52 6f 77 73 0a 20 20 20  bool HasRows.   
9ab0: 20 7b 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20   {.      get..  
9ac0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
9ad0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a  heckDisposed();.
9ae0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f          CheckClo
9af0: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
9b00: 72 65 74 75 72 6e 20 28 5f 72 65 61 64 69 6e 67  return (_reading
9b10: 53 74 61 74 65 20 21 3d 20 31 29 3b 0a 20 20 20  State != 1);.   
9b20: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
9b30: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
9b40: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72    /// Returns Tr
9b50: 75 65 20 69 66 20 74 68 65 20 64 61 74 61 20 72  ue if the data r
9b60: 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64 0a  eader is closed.
9b70: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
9b80: 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  y>.    public ov
9b90: 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 43 6c  erride bool IsCl
9ba0: 6f 73 65 64 0a 20 20 20 20 7b 0d 0a 20 20 20 20  osed.    {..    
9bb0: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
9bc0: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
9bd0: 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d 20 6e 75 6c  (_command == nul
9be0: 6c 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  l); }.    }..   
9bf0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
9c00: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54     /// Returns T
9c10: 72 75 65 20 69 66 20 74 68 65 20 73 70 65 63 69  rue if the speci
9c20: 66 69 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e  fied column is n
9c30: 75 6c 6c 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ull.    /// </su
9c40: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
9c50: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
9c60: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
9c70: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
9c80: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
9c90: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65  // <returns>True
9ca0: 20 6f 72 20 46 61 6c 73 65 3c 2f 72 65 74 75 72   or False</retur
9cb0: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
9cc0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 44  verride bool IsD
9cd0: 42 4e 75 6c 6c 28 69 6e 74 20 69 29 0d 0a 20 20  BNull(int i)..  
9ce0: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
9cf0: 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20  Disposed();..   
9d00: 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69     if (i >= Visi
9d10: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
9d20: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
9d30: 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  l).        retur
9d40: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 49 73 44 42 4e  n _keyInfo.IsDBN
9d50: 75 6c 6c 28 69 20 2d 20 56 69 73 69 62 6c 65 46  ull(i - VisibleF
9d60: 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20  ieldCount);..   
9d70: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
9d80: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
9d90: 49 73 4e 75 6c 6c 28 5f 61 63 74 69 76 65 53 74  IsNull(_activeSt
9da0: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20  atement, i);.   
9db0: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
9dc0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 4d 6f  mary>.    /// Mo
9dd0: 76 65 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ves to the next 
9de0: 72 65 73 75 6c 74 73 65 74 20 69 6e 20 6d 75 6c  resultset in mul
9df0: 74 69 70 6c 65 20 72 6f 77 2d 72 65 74 75 72 6e  tiple row-return
9e00: 69 6e 67 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e  ing SQL command.
9e10: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
9e20: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  ry>.    /// <ret
9e30: 75 72 6e 73 3e 54 72 75 65 20 69 66 20 74 68 65  urns>True if the
9e40: 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 75 63   command was suc
9e50: 63 65 73 73 66 75 6c 20 61 6e 64 20 61 20 6e 65  cessful and a ne
9e60: 77 20 72 65 73 75 6c 74 73 65 74 20 69 73 20 61  w resultset is a
9e70: 76 61 69 6c 61 62 6c 65 2c 20 46 61 6c 73 65 20  vailable, False 
9e80: 6f 74 68 65 72 77 69 73 65 2e 3c 2f 72 65 74 75  otherwise.</retu
9e90: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
9ea0: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 4e 65  override bool Ne
9eb0: 78 74 52 65 73 75 6c 74 28 29 0a 20 20 20 20 7b  xtResult().    {
9ec0: 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73  ..      CheckDis
9ed0: 70 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20 43  posed();.      C
9ee0: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
9ef0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6d 6d 61       SQLiteComma
9f00: 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e  nd.Check(_comman
9f10: 64 29 3b 0a 0a 20 20 20 20 20 20 53 51 4c 69 74  d);..      SQLit
9f20: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 20  eStatement stmt 
9f30: 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 69 6e  = null;.      in
9f40: 74 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0a 0a 20  t fieldCount;.. 
9f50: 20 20 20 20 20 77 68 69 6c 65 20 28 74 72 75 65       while (true
9f60: 29 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ).      {..     
9f70: 20 20 20 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e     if (stmt == n
9f80: 75 6c 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74  ull && _activeSt
9f90: 61 74 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 20  atement != null 
9fa0: 26 26 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  && _activeStatem
9fb0: 65 6e 74 2e 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c  ent._sql != null
9fc0: 20 26 26 20 5f 61 63 74 69 76 65 53 74 61 74 65   && _activeState
9fd0: 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4f 70 65 6e  ment._sql.IsOpen
9fe0: 28 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  ()).        {.  
9ff0: 20 20 20 20 20 20 20 20 2f 2f 20 52 65 73 65 74          // Reset
a000: 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 2d   the previously-
a010: 65 78 65 63 75 74 65 64 20 73 74 61 74 65 6d 65  executed stateme
a020: 6e 74 0a 20 20 20 20 20 20 20 20 20 20 5f 61 63  nt.          _ac
a030: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
a040: 71 6c 2e 52 65 73 65 74 28 5f 61 63 74 69 76 65  ql.Reset(_active
a050: 53 74 61 74 65 6d 65 6e 74 29 3b 0a 0a 20 20 20  Statement);..   
a060: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27         // If we'
a070: 72 65 20 6f 6e 6c 79 20 73 75 70 70 6f 73 65 64  re only supposed
a080: 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e   to return a sin
a090: 67 6c 65 20 72 6f 77 73 65 74 2c 20 73 74 65 70  gle rowset, step
a0a0: 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 72 65 6d   through all rem
a0b0: 61 69 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  aining statement
a0c0: 73 20 6f 6e 63 65 20 75 6e 74 69 6c 0a 20 20 20  s once until.   
a0d0: 20 20 20 20 20 20 20 2f 2f 20 74 68 65 79 20 61         // they a
a0e0: 72 65 20 61 6c 6c 20 64 6f 6e 65 20 61 6e 64 20  re all done and 
a0f0: 72 65 74 75 72 6e 20 66 61 6c 73 65 20 74 6f 20  return false to 
a100: 69 6e 64 69 63 61 74 65 20 6e 6f 20 6d 6f 72 65  indicate no more
a110: 20 72 65 73 75 6c 74 73 65 74 73 20 65 78 69 73   resultsets exis
a120: 74 2e 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  t..          if 
a130: 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69  ((_commandBehavi
a140: 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61  or & CommandBeha
a150: 76 69 6f 72 2e 53 69 6e 67 6c 65 52 65 73 75 6c  vior.SingleResul
a160: 74 29 20 21 3d 20 30 29 0a 20 20 20 20 20 20 20  t) != 0).       
a170: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
a180: 20 66 6f 72 20 28 3b 20 3b 20 29 0a 20 20 20 20   for (; ; ).    
a190: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
a1a0: 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20 5f          stmt = _
a1b0: 63 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61 74 65  command.GetState
a1c0: 6d 65 6e 74 28 5f 61 63 74 69 76 65 53 74 61 74  ment(_activeStat
a1d0: 65 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31 29 3b  ementIndex + 1);
a1e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
a1f0: 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c 29  f (stmt == null)
a200: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
a210: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
a220: 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b 0a 0a  tementIndex++;..
a230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
a240: 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28 73 74 6d  mt._sql.Step(stm
a250: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t);.            
a260: 20 20 69 66 20 28 73 74 6d 74 2e 5f 73 71 6c 2e    if (stmt._sql.
a270: 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74  ColumnCount(stmt
a280: 29 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20  ) == 0).        
a290: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
a2a0: 20 20 20 20 20 20 20 20 69 66 20 28 5f 72 6f 77          if (_row
a2b0: 73 41 66 66 65 63 74 65 64 20 3d 3d 20 2d 31 29  sAffected == -1)
a2c0: 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d   _rowsAffected =
a2d0: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   0;.            
a2e0: 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65      _rowsAffecte
a2f0: 64 20 2b 3d 20 73 74 6d 74 2e 5f 73 71 6c 2e 43  d += stmt._sql.C
a300: 68 61 6e 67 65 73 3b 0a 20 20 20 20 20 20 20 20  hanges;.        
a310: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
a320: 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 2e        stmt._sql.
a330: 52 65 73 65 74 28 73 74 6d 74 29 3b 20 2f 2f 20  Reset(stmt); // 
a340: 47 6f 74 74 61 20 72 65 73 65 74 20 61 66 74 65  Gotta reset afte
a350: 72 20 65 76 65 72 79 20 73 74 65 70 20 74 6f 20  r every step to 
a360: 72 65 6c 65 61 73 65 20 61 6e 79 20 6c 6f 63 6b  release any lock
a370: 73 20 61 6e 64 20 73 75 63 68 21 0a 20 20 20 20  s and such!.    
a380: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a390: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
a3a0: 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  se;.          }.
a3b0: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
a3c0: 20 20 20 2f 2f 20 47 65 74 20 74 68 65 20 6e 65     // Get the ne
a3d0: 78 74 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  xt statement to 
a3e0: 65 78 65 63 75 74 65 0a 20 20 20 20 20 20 20 20  execute.        
a3f0: 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  stmt = _command.
a400: 47 65 74 53 74 61 74 65 6d 65 6e 74 28 5f 61 63  GetStatement(_ac
a410: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64  tiveStatementInd
a420: 65 78 20 2b 20 31 29 3b 0a 0a 20 20 20 20 20 20  ex + 1);..      
a430: 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 72 65    // If we've re
a440: 61 63 68 65 64 20 74 68 65 20 65 6e 64 20 6f 66  ached the end of
a450: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 73 2c   the statements,
a460: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2c 20 6e   return false, n
a470: 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74 73 65 74  o more resultset
a480: 73 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74  s.        if (st
a490: 6d 74 20 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  mt == null).    
a4a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
a4b0: 73 65 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20  se;..        // 
a4c0: 49 66 20 77 65 20 77 65 72 65 20 6f 6e 20 61 20  If we were on a 
a4d0: 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65  current resultse
a4e0: 74 2c 20 73 65 74 20 74 68 65 20 73 74 61 74 65  t, set the state
a4f0: 20 74 6f 20 22 64 6f 6e 65 20 72 65 61 64 69 6e   to "done readin
a500: 67 22 20 66 6f 72 20 69 74 0a 20 20 20 20 20 20  g" for it.      
a510: 20 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74    if (_readingSt
a520: 61 74 65 20 3c 20 31 29 0a 20 20 20 20 20 20 20  ate < 1).       
a530: 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65     _readingState
a540: 20 3d 20 31 3b 0a 0a 20 20 20 20 20 20 20 20 5f   = 1;..        _
a550: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49  activeStatementI
a560: 6e 64 65 78 2b 2b 3b 0a 0a 20 20 20 20 20 20 20  ndex++;..       
a570: 20 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20 73 74   fieldCount = st
a580: 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f  mt._sql.ColumnCo
a590: 75 6e 74 28 73 74 6d 74 29 3b 0a 0a 20 20 20 20  unt(stmt);..    
a5a0: 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20 73 74      // If the st
a5b0: 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 20 61  atement is not a
a5c0: 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
a5d0: 74 20 6f 72 20 77 65 27 72 65 20 6e 6f 74 20 72  t or we're not r
a5e0: 65 74 72 69 65 76 69 6e 67 20 73 63 68 65 6d 61  etrieving schema
a5f0: 20 6f 6e 6c 79 2c 20 74 68 65 6e 20 70 65 72 66   only, then perf
a600: 6f 72 6d 20 74 68 65 20 69 6e 69 74 69 61 6c 20  orm the initial 
a610: 73 74 65 70 0a 20 20 20 20 20 20 20 20 69 66 20  step.        if 
a620: 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69  ((_commandBehavi
a630: 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61  or & CommandBeha
a640: 76 69 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29  vior.SchemaOnly)
a650: 20 3d 3d 20 30 20 7c 7c 20 66 69 65 6c 64 43 6f   == 0 || fieldCo
a660: 75 6e 74 20 3d 3d 20 30 29 0a 20 20 20 20 20 20  unt == 0).      
a670: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66    {.          if
a680: 20 28 73 74 6d 74 2e 5f 73 71 6c 2e 53 74 65 70   (stmt._sql.Step
a690: 28 73 74 6d 74 29 29 0a 20 20 20 20 20 20 20 20  (stmt)).        
a6a0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
a6b0: 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20  _readingState = 
a6c0: 2d 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  -1;.          }.
a6d0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
a6e0: 66 20 28 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d  f (fieldCount ==
a6f0: 20 30 29 20 2f 2f 20 4e 6f 20 72 6f 77 73 20 72   0) // No rows r
a700: 65 74 75 72 6e 65 64 2c 20 69 66 20 66 69 65 6c  eturned, if fiel
a710: 64 43 6f 75 6e 74 20 69 73 20 7a 65 72 6f 2c 20  dCount is zero, 
a720: 73 6b 69 70 20 74 6f 20 74 68 65 20 6e 65 78 74  skip to the next
a730: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 20 20 20   statement.     
a740: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
a750: 20 20 20 69 66 20 28 5f 72 6f 77 73 41 66 66 65     if (_rowsAffe
a760: 63 74 65 64 20 3d 3d 20 2d 31 29 20 5f 72 6f 77  cted == -1) _row
a770: 73 41 66 66 65 63 74 65 64 20 3d 20 30 3b 0a 20  sAffected = 0;. 
a780: 20 20 20 20 20 20 20 20 20 20 20 5f 72 6f 77 73             _rows
a790: 41 66 66 65 63 74 65 64 20 2b 3d 20 73 74 6d 74  Affected += stmt
a7a0: 2e 5f 73 71 6c 2e 43 68 61 6e 67 65 73 3b 0a 20  ._sql.Changes;. 
a7b0: 20 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e             stmt.
a7c0: 5f 73 71 6c 2e 52 65 73 65 74 28 73 74 6d 74 29  _sql.Reset(stmt)
a7d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ;.            co
a7e0: 6e 74 69 6e 75 65 3b 20 2f 2f 20 53 6b 69 70 20  ntinue; // Skip 
a7f0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 61 6e 64  this command and
a800: 20 6d 6f 76 65 20 74 6f 20 74 68 65 20 6e 65 78   move to the nex
a810: 74 2c 20 69 74 20 77 61 73 20 6e 6f 74 20 61 20  t, it was not a 
a820: 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 72 65  row-returning re
a830: 73 75 6c 74 73 65 74 0a 20 20 20 20 20 20 20 20  sultset.        
a840: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 65 6c    }.          el
a850: 73 65 20 2f 2f 20 4e 6f 20 72 6f 77 73 2c 20 66  se // No rows, f
a860: 69 65 6c 64 43 6f 75 6e 74 20 69 73 20 6e 6f 6e  ieldCount is non
a870: 2d 7a 65 72 6f 20 73 6f 20 73 74 6f 70 20 68 65  -zero so stop he
a880: 72 65 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20  re.          {. 
a890: 20 20 20 20 20 20 20 20 20 20 20 5f 72 65 61 64             _read
a8a0: 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f  ingState = 1; //
a8b0: 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65   This command re
a8c0: 74 75 72 6e 65 64 20 63 6f 6c 75 6d 6e 73 20 62  turned columns b
a8d0: 75 74 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 72  ut no rows, so r
a8e0: 65 74 75 72 6e 20 74 72 75 65 2c 20 62 75 74 20  eturn true, but 
a8f0: 48 61 73 52 6f 77 73 20 3d 20 66 61 6c 73 65 20  HasRows = false 
a900: 61 6e 64 20 52 65 61 64 28 29 20 72 65 74 75 72  and Read() retur
a910: 6e 73 20 66 61 6c 73 65 0a 20 20 20 20 20 20 20  ns false.       
a920: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a     }.        }..
a930: 20 20 20 20 20 20 20 20 2f 2f 20 41 68 68 2c 20          // Ahh, 
a940: 77 65 20 66 6f 75 6e 64 20 61 20 72 6f 77 2d 72  we found a row-r
a950: 65 74 75 72 6e 69 6e 67 20 72 65 73 75 6c 74 73  eturning results
a960: 65 74 20 65 6c 69 67 69 62 6c 65 20 74 6f 20 62  et eligible to b
a970: 65 20 72 65 74 75 72 6e 65 64 21 0a 20 20 20 20  e returned!.    
a980: 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65      _activeState
a990: 6d 65 6e 74 20 3d 20 73 74 6d 74 3b 0a 20 20 20  ment = stmt;.   
a9a0: 20 20 20 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74       _fieldCount
a9b0: 20 3d 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0a 20   = fieldCount;. 
a9c0: 20 20 20 20 20 20 20 5f 66 69 65 6c 64 54 79 70         _fieldTyp
a9d0: 65 41 72 72 61 79 20 3d 20 6e 75 6c 6c 3b 0a 0a  eArray = null;..
a9e0: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f          if ((_co
a9f0: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20  mmandBehavior & 
aa00: 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e  CommandBehavior.
aa10: 4b 65 79 49 6e 66 6f 29 20 21 3d 20 30 29 0a 20  KeyInfo) != 0). 
aa20: 20 20 20 20 20 20 20 20 20 4c 6f 61 64 4b 65 79           LoadKey
aa30: 49 6e 66 6f 28 29 3b 0a 0a 20 20 20 20 20 20 20  Info();..       
aa40: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20   return true;.  
aa50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
aa60: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
aa70: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
aa80: 20 74 68 65 20 53 51 4c 69 74 65 54 79 70 65 20   the SQLiteType 
aa90: 66 6f 72 20 61 20 67 69 76 65 6e 20 63 6f 6c 75  for a given colu
aaa0: 6d 6e 2c 20 61 6e 64 20 63 61 63 68 65 73 20 69  mn, and caches i
aab0: 74 20 74 6f 20 61 76 6f 69 64 20 72 65 70 65 74  t to avoid repet
aac0: 65 74 69 76 65 20 69 6e 74 65 72 6f 70 20 63 61  etive interop ca
aad0: 6c 6c 73 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  lls..    /// </s
aae0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
aaf0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
ab00: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
ab10: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
ab20: 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  eve</param>.    
ab30: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 53  /// <returns>A S
ab40: 51 4c 69 74 65 54 79 70 65 20 73 74 72 75 63 74  QLiteType struct
ab50: 75 72 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  ure</returns>.  
ab60: 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
ab70: 54 79 70 65 20 47 65 74 53 51 4c 69 74 65 54 79  Type GetSQLiteTy
ab80: 70 65 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a  pe(int i).    {.
ab90: 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65        SQLiteType
aba0: 20 74 79 70 3b 0a 0a 20 20 20 20 20 20 2f 2f 20   typ;..      // 
abb0: 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 66  Initialize the f
abc0: 69 65 6c 64 20 74 79 70 65 73 20 61 72 72 61 79  ield types array
abd0: 20 69 66 20 6e 6f 74 20 61 6c 72 65 61 64 79 20   if not already 
abe0: 69 6e 69 74 69 61 6c 69 7a 65 64 0a 20 20 20 20  initialized.    
abf0: 20 20 69 66 20 28 5f 66 69 65 6c 64 54 79 70 65    if (_fieldType
ac00: 41 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0a 20  Array == null). 
ac10: 20 20 20 20 20 20 20 5f 66 69 65 6c 64 54 79 70         _fieldTyp
ac20: 65 41 72 72 61 79 20 3d 20 6e 65 77 20 53 51 4c  eArray = new SQL
ac30: 69 74 65 54 79 70 65 5b 56 69 73 69 62 6c 65 46  iteType[VisibleF
ac40: 69 65 6c 64 43 6f 75 6e 74 5d 3b 0a 0a 20 20 20  ieldCount];..   
ac50: 20 20 20 2f 2f 20 49 6e 69 74 69 61 6c 69 7a 65     // Initialize
ac60: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 27 73 20 66   this column's f
ac70: 69 65 6c 64 20 74 79 70 65 20 69 6e 73 74 61 6e  ield type instan
ac80: 63 65 0a 20 20 20 20 20 20 69 66 20 28 5f 66 69  ce.      if (_fi
ac90: 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d 20  eldTypeArray[i] 
aca0: 3d 3d 20 6e 75 6c 6c 29 20 5f 66 69 65 6c 64 54  == null) _fieldT
acb0: 79 70 65 41 72 72 61 79 5b 69 5d 20 3d 20 6e 65  ypeArray[i] = ne
acc0: 77 20 53 51 4c 69 74 65 54 79 70 65 28 29 3b 0a  w SQLiteType();.
acd0: 0a 20 20 20 20 20 20 74 79 70 20 3d 20 5f 66 69  .      typ = _fi
ace0: 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d 3b  eldTypeArray[i];
acf0: 0a 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f  ..      // If no
ad00: 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74  t initialized, t
ad10: 68 65 6e 20 66 65 74 63 68 20 74 68 65 20 64 65  hen fetch the de
ad20: 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 20 64 61  clared column da
ad30: 74 61 74 79 70 65 20 61 6e 64 20 61 74 74 65 6d  tatype and attem
ad40: 70 74 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  pt to convert it
ad50: 20 0a 20 20 20 20 20 20 2f 2f 20 74 6f 20 61 20   .      // to a 
ad60: 6b 6e 6f 77 6e 20 44 62 54 79 70 65 2e 0a 20 20  known DbType..  
ad70: 20 20 20 20 69 66 20 28 74 79 70 2e 41 66 66 69      if (typ.Affi
ad80: 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69  nity == TypeAffi
ad90: 6e 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a  nity.Uninitializ
ada0: 65 64 29 0a 20 20 20 20 20 20 20 20 74 79 70 2e  ed).        typ.
adb0: 54 79 70 65 20 3d 20 53 51 4c 69 74 65 43 6f 6e  Type = SQLiteCon
adc0: 76 65 72 74 2e 54 79 70 65 4e 61 6d 65 54 6f 44  vert.TypeNameToD
add0: 62 54 79 70 65 28 5f 61 63 74 69 76 65 53 74 61  bType(_activeSta
ade0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75  tement._sql.Colu
adf0: 6d 6e 54 79 70 65 28 5f 61 63 74 69 76 65 53 74  mnType(_activeSt
ae00: 61 74 65 6d 65 6e 74 2c 20 69 2c 20 6f 75 74 20  atement, i, out 
ae10: 74 79 70 2e 41 66 66 69 6e 69 74 79 29 29 3b 0a  typ.Affinity));.
ae20: 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20        else.     
ae30: 20 20 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20     typ.Affinity 
ae40: 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  = _activeStateme
ae50: 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 41 66  nt._sql.ColumnAf
ae60: 66 69 6e 69 74 79 28 5f 61 63 74 69 76 65 53 74  finity(_activeSt
ae70: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 0a 20 20  atement, i);..  
ae80: 20 20 20 20 72 65 74 75 72 6e 20 74 79 70 3b 0a      return typ;.
ae90: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
aea0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
aeb0: 20 52 65 61 64 73 20 74 68 65 20 6e 65 78 74 20   Reads the next 
aec0: 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 72 65 73  row from the res
aed0: 75 6c 74 73 65 74 0a 20 20 20 20 2f 2f 2f 20 3c  ultset.    /// <
aee0: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
aef0: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20  / <returns>True 
af00: 69 66 20 61 20 6e 65 77 20 72 6f 77 20 77 61 73  if a new row was
af10: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 6c 6f   successfully lo
af20: 61 64 65 64 20 61 6e 64 20 69 73 20 72 65 61 64  aded and is read
af30: 79 20 66 6f 72 20 70 72 6f 63 65 73 73 69 6e 67  y for processing
af40: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
af50: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62  ublic override b
af60: 6f 6f 6c 20 52 65 61 64 28 29 0a 20 20 20 20 7b  ool Read().    {
af70: 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73  ..      CheckDis
af80: 70 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20 43  posed();.      C
af90: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
afa0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6d 6d 61       SQLiteComma
afb0: 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e  nd.Check(_comman
afc0: 64 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 5f  d);..      if (_
afd0: 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 3d 20  readingState == 
afe0: 2d 31 29 20 2f 2f 20 46 69 72 73 74 20 73 74 65  -1) // First ste
aff0: 70 20 77 61 73 20 61 6c 72 65 61 64 79 20 64 6f  p was already do
b000: 6e 65 20 61 74 20 74 68 65 20 4e 65 78 74 52 65  ne at the NextRe
b010: 73 75 6c 74 28 29 20 6c 65 76 65 6c 2c 20 73 6f  sult() level, so
b020: 20 64 6f 6e 27 74 20 73 74 65 70 20 61 67 61 69   don't step agai
b030: 6e 2c 20 6a 75 73 74 20 72 65 74 75 72 6e 20 74  n, just return t
b040: 72 75 65 2e 0a 20 20 20 20 20 20 7b 0a 20 20 20  rue..      {.   
b050: 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61       _readingSta
b060: 74 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  te = 0;.        
b070: 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20  return true;.   
b080: 20 20 20 7d 0a 20 20 20 20 20 20 65 6c 73 65 20     }.      else 
b090: 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74  if (_readingStat
b0a0: 65 20 3d 3d 20 30 29 20 2f 2f 20 41 63 74 69 76  e == 0) // Activ
b0b0: 65 6c 79 20 72 65 61 64 69 6e 67 20 72 6f 77 73  ely reading rows
b0c0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
b0d0: 20 2f 2f 20 44 6f 6e 27 74 20 72 65 61 64 20 61   // Don't read a
b0e0: 20 6e 65 77 20 72 6f 77 20 69 66 20 74 68 65 20   new row if the 
b0f0: 63 6f 6d 6d 61 6e 64 20 62 65 68 61 76 69 6f 72  command behavior
b100: 20 64 69 63 74 61 74 65 73 20 53 69 6e 67 6c 65   dictates Single
b110: 52 6f 77 2e 20 20 57 65 27 76 65 20 61 6c 72 65  Row.  We've alre
b120: 61 64 79 20 72 65 61 64 20 74 68 65 20 66 69 72  ady read the fir
b130: 73 74 20 72 6f 77 2e 0a 20 20 20 20 20 20 20 20  st row..        
b140: 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68  if ((_commandBeh
b150: 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42  avior & CommandB
b160: 65 68 61 76 69 6f 72 2e 53 69 6e 67 6c 65 52 6f  ehavior.SingleRo
b170: 77 29 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20  w) == 0).       
b180: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20   {.          if 
b190: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
b1a0: 74 2e 5f 73 71 6c 2e 53 74 65 70 28 5f 61 63 74  t._sql.Step(_act
b1b0: 69 76 65 53 74 61 74 65 6d 65 6e 74 29 20 3d 3d  iveStatement) ==
b1c0: 20 74 72 75 65 29 0a 20 20 20 20 20 20 20 20 20   true).         
b1d0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69   {.            i
b1e0: 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  f (_keyInfo != n
b1f0: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20  ull).           
b200: 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 52 65 73 65     _keyInfo.Rese
b210: 74 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  t();..          
b220: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20    return true;. 
b230: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
b240: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 5f 72     }..        _r
b250: 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b  eadingState = 1;
b260: 20 2f 2f 20 46 69 6e 69 73 68 65 64 20 72 65 61   // Finished rea
b270: 64 69 6e 67 20 72 6f 77 73 0a 20 20 20 20 20 20  ding rows.      
b280: 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  }..      return 
b290: 66 61 6c 73 65 3b 0a 20 20 20 20 7d 0a 0a 20 20  false;.    }..  
b2a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
b2b0: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
b2c0: 20 74 68 65 20 63 6f 75 6e 74 20 6f 66 20 72 65   the count of re
b2d0: 63 6f 72 64 73 20 61 66 66 65 63 74 65 64 20 62  cords affected b
b2e0: 79 20 61 6e 20 75 70 64 61 74 65 2f 69 6e 73 65  y an update/inse
b2f0: 72 74 20 63 6f 6d 6d 61 6e 64 2e 20 20 4f 6e 6c  rt command.  Onl
b300: 79 20 76 61 6c 69 64 20 6f 6e 63 65 20 74 68 65  y valid once the
b310: 20 64 61 74 61 20 72 65 61 64 65 72 20 69 73 20   data reader is 
b320: 63 6c 6f 73 65 64 21 0a 20 20 20 20 2f 2f 2f 20  closed!.    /// 
b330: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70  </summary>.    p
b340: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
b350: 6e 74 20 52 65 63 6f 72 64 73 41 66 66 65 63 74  nt RecordsAffect
b360: 65 64 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  ed.    {..      
b370: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
b380: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 28 5f  sed(); return (_
b390: 72 6f 77 73 41 66 66 65 63 74 65 64 20 3c 20 30  rowsAffected < 0
b3a0: 29 20 3f 20 30 20 3a 20 5f 72 6f 77 73 41 66 66  ) ? 0 : _rowsAff
b3b0: 65 63 74 65 64 3b 20 7d 0a 20 20 20 20 7d 0a 0a  ected; }.    }..
b3c0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
b3d0: 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 65  >.    /// Indexe
b3e0: 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 64 61  r to retrieve da
b3f0: 74 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e  ta from a column
b400: 20 67 69 76 65 6e 20 69 74 73 20 6e 61 6d 65 0a   given its name.
b410: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
b420: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
b430: 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 54 68  m name="name">Th
b440: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  e name of the co
b450: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
b460: 20 64 61 74 61 20 66 6f 72 3c 2f 70 61 72 61 6d   data for</param
b470: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
b480: 6e 73 3e 54 68 65 20 76 61 6c 75 65 20 63 6f 6e  ns>The value con
b490: 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f  tained in the co
b4a0: 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  lumn</returns>. 
b4b0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
b4c0: 64 65 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 73  de object this[s
b4d0: 74 72 69 6e 67 20 6e 61 6d 65 5d 0a 20 20 20 20  tring name].    
b4e0: 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43  {..      get { C
b4f0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
b500: 72 65 74 75 72 6e 20 47 65 74 56 61 6c 75 65 28  return GetValue(
b510: 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d 65 29  GetOrdinal(name)
b520: 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ); }.    }..    
b530: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
b540: 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72 20 74 6f    /// Indexer to
b550: 20 72 65 74 72 69 65 76 65 20 64 61 74 61 20 66   retrieve data f
b560: 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 67 69 76  rom a column giv
b570: 65 6e 20 69 74 73 20 69 0a 20 20 20 20 2f 2f 2f  en its i.    ///
b580: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
b590: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
b5a0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
b5b0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72   the column to r
b5c0: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a  etrieve</param>.
b5d0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
b5e0: 3e 54 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61  >The value conta
b5f0: 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75  ined in the colu
b600: 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  mn</returns>.   
b610: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
b620: 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 69 6e 74   object this[int
b630: 20 69 5d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   i].    {..     
b640: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
b650: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 47  osed(); return G
b660: 65 74 56 61 6c 75 65 28 69 29 3b 20 7d 0a 20 20  etValue(i); }.  
b670: 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65    }..    private
b680: 20 76 6f 69 64 20 4c 6f 61 64 4b 65 79 49 6e 66   void LoadKeyInf
b690: 6f 28 29 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  o().    {..     
b6a0: 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20     if (_keyInfo 
b6b0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
b6c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b6d0: 20 5f 6b 65 79 49 6e 66 6f 2e 44 69 73 70 6f 73   _keyInfo.Dispos
b6e0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
b6f0: 20 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 75 6c    _keyInfo = nul
b700: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  l;..        }...
b710: 0a 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66  .        _keyInf
b720: 6f 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 4b 65  o = new SQLiteKe
b730: 79 52 65 61 64 65 72 28 5f 63 6f 6d 6d 61 6e 64  yReader(_command
b740: 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 69  .Connection, thi
b750: 73 2c 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  s, _activeStatem
b760: 65 6e 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ent);.    }.  }.
b770: 7d 0a                                            }.