System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 6b7442217893a230fbbca82d2cd4218e8a80d1c8:


0000: ef bb bf 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20  ************. * 
0040: 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61  ADO.NET 2.0 Data
0050: 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51   Provider for SQ
0060: 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58  Lite Version 3.X
0070: 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52  . * Written by R
0080: 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72  obert Simpson (r
0090: 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c  obert@blackcastl
00a0: 65 73 6f 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20  esoft.com). * . 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a   risk!. ********
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2f 0a 0a 6e 61 6d 65 73 70 61 63 65 20 53 79 73  /..namespace Sys
0130: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0a  tem.Data.SQLite.
0140: 7b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  {.  using System
0150: 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ;.  using System
0160: 2e 44 61 74 61 3b 0a 20 20 75 73 69 6e 67 20 53  .Data;.  using S
0170: 79 73 74 65 6d 2e 44 61 74 61 2e 43 6f 6d 6d 6f  ystem.Data.Commo
0180: 6e 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  n;.  using Syste
0190: 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65  m.Collections.Ge
01a0: 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e 67 20 53  neric;.  using S
01b0: 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74  ystem.Globalizat
01c0: 69 6f 6e 3b 0a 20 20 75 73 69 6e 67 20 53 79 73  ion;.  using Sys
01d0: 74 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0a  tem.Reflection;.
01e0: 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e  .  /// <summary>
01f0: 0a 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 69 6d  .  /// SQLite im
0200: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
0210: 44 62 44 61 74 61 52 65 61 64 65 72 2e 0a 20 20  DbDataReader..  
0220: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
0230: 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63   public sealed c
0240: 6c 61 73 73 20 53 51 4c 69 74 65 44 61 74 61 52  lass SQLiteDataR
0250: 65 61 64 65 72 20 3a 20 44 62 44 61 74 61 52 65  eader : DbDataRe
0260: 61 64 65 72 0a 20 20 7b 0a 20 20 20 20 2f 2f 2f  ader.  {.    ///
0270: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
0280: 2f 2f 20 55 6e 64 65 72 6c 79 69 6e 67 20 63 6f  // Underlying co
0290: 6d 6d 61 6e 64 20 74 68 69 73 20 72 65 61 64 65  mmand this reade
02a0: 72 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  r is attached to
02b0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
02c0: 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20  ry>.    private 
02d0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 5f 63  SQLiteCommand _c
02e0: 6f 6d 6d 61 6e 64 3b 0a 20 20 20 20 2f 2f 2f 20  ommand;.    /// 
02f0: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
0300: 2f 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20 63  / Index of the c
0310: 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e 74  urrent statement
0320: 20 69 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20   in the command 
0330: 62 65 69 6e 67 20 70 72 6f 63 65 73 73 65 64 0a  being processed.
0340: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0350: 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 69  y>.    private i
0360: 6e 74 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  nt _activeStatem
0370: 65 6e 74 49 6e 64 65 78 3b 0a 20 20 20 20 2f 2f  entIndex;.    //
0380: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
0390: 2f 2f 2f 20 43 75 72 72 65 6e 74 20 73 74 61 74  /// Current stat
03a0: 65 6d 65 6e 74 20 62 65 69 6e 67 20 52 65 61 64  ement being Read
03b0: 28 29 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ().    /// </sum
03c0: 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74  mary>.    privat
03d0: 65 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e SQLiteStatemen
03e0: 74 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  t _activeStateme
03f0: 6e 74 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  nt;.    /// <sum
0400: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 53 74  mary>.    /// St
0410: 61 74 65 20 6f 66 20 74 68 65 20 63 75 72 72 65  ate of the curre
0420: 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  nt statement bei
0430: 6e 67 20 70 72 6f 63 65 73 73 65 64 2e 0a 20 20  ng processed..  
0440: 20 20 2f 2f 2f 20 2d 31 20 3d 20 46 69 72 73 74    /// -1 = First
0450: 20 53 74 65 70 28 29 20 65 78 65 63 75 74 65 64   Step() executed
0460: 2c 20 73 6f 20 74 68 65 20 66 69 72 73 74 20 52  , so the first R
0470: 65 61 64 28 29 20 77 69 6c 6c 20 62 65 20 69 67  ead() will be ig
0480: 6e 6f 72 65 64 0a 20 20 20 20 2f 2f 2f 20 20 30  nored.    ///  0
0490: 20 3d 20 41 63 74 69 76 65 6c 79 20 72 65 61 64   = Actively read
04a0: 69 6e 67 0a 20 20 20 20 2f 2f 2f 20 20 31 20 3d  ing.    ///  1 =
04b0: 20 46 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e   Finished readin
04c0: 67 0a 20 20 20 20 2f 2f 2f 20 20 32 20 3d 20 4e  g.    ///  2 = N
04d0: 6f 6e 2d 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67  on-row-returning
04e0: 20 73 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 20 72   statement, no r
04f0: 65 63 6f 72 64 73 0a 20 20 20 20 2f 2f 2f 20 3c  ecords.    /// <
0500: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72  /summary>.    pr
0510: 69 76 61 74 65 20 69 6e 74 20 5f 72 65 61 64 69  ivate int _readi
0520: 6e 67 53 74 61 74 65 3b 0a 20 20 20 20 2f 2f 2f  ngState;.    ///
0530: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
0540: 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 63  // Number of rec
0550: 6f 72 64 73 20 61 66 66 65 63 74 65 64 20 62 79  ords affected by
0560: 20 74 68 65 20 69 6e 73 65 72 74 2f 75 70 64 61   the insert/upda
0570: 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 65 78  te statements ex
0580: 65 63 75 74 65 64 20 6f 6e 20 74 68 65 20 63 6f  ecuted on the co
0590: 6d 6d 61 6e 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f  mmand.    /// </
05a0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69  summary>.    pri
05b0: 76 61 74 65 20 69 6e 74 20 5f 72 6f 77 73 41 66  vate int _rowsAf
05c0: 66 65 63 74 65 64 3b 0a 20 20 20 20 2f 2f 2f 20  fected;.    /// 
05d0: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
05e0: 2f 20 43 6f 75 6e 74 20 6f 66 20 66 69 65 6c 64  / Count of field
05f0: 73 20 28 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74  s (columns) in t
0600: 68 65 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67  he row-returning
0610: 20 73 74 61 74 65 6d 65 6e 74 20 63 75 72 72 65   statement curre
0620: 6e 74 6c 79 20 62 65 69 6e 67 20 70 72 6f 63 65  ntly being proce
0630: 73 73 65 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ssed.    /// </s
0640: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76  ummary>.    priv
0650: 61 74 65 20 69 6e 74 20 5f 66 69 65 6c 64 43 6f  ate int _fieldCo
0660: 75 6e 74 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  unt;.    /// <su
0670: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 44  mmary>.    /// D
0680: 61 74 61 74 79 70 65 73 20 6f 66 20 61 63 74 69  atatypes of acti
0690: 76 65 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d  ve fields (colum
06a0: 6e 73 29 20 69 6e 20 74 68 65 20 63 75 72 72 65  ns) in the curre
06b0: 6e 74 20 73 74 61 74 65 6d 65 6e 74 2c 20 75 73  nt statement, us
06c0: 65 64 20 66 6f 72 20 74 79 70 65 2d 72 65 73 74  ed for type-rest
06d0: 72 69 63 74 69 6e 67 20 64 61 74 61 0a 20 20 20  ricting data.   
06e0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
06f0: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
0700: 74 65 54 79 70 65 5b 5d 20 5f 66 69 65 6c 64 54  teType[] _fieldT
0710: 79 70 65 41 72 72 61 79 3b 0a 0a 20 20 20 20 2f  ypeArray;..    /
0720: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
0730: 20 2f 2f 2f 20 54 68 65 20 62 65 68 61 76 69 6f   /// The behavio
0740: 72 20 6f 66 20 74 68 65 20 64 61 74 61 72 65 61  r of the datarea
0750: 64 65 72 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  der.    /// </su
0760: 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61  mmary>.    priva
0770: 74 65 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69  te CommandBehavi
0780: 6f 72 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76  or _commandBehav
0790: 69 6f 72 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73  ior;..    /// <s
07a0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
07b0: 49 66 20 73 65 74 2c 20 74 68 65 6e 20 64 69 73  If set, then dis
07c0: 70 6f 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d  pose of the comm
07d0: 61 6e 64 20 6f 62 6a 65 63 74 20 77 68 65 6e 20  and object when 
07e0: 74 68 65 20 72 65 61 64 65 72 20 69 73 20 66 69  the reader is fi
07f0: 6e 69 73 68 65 64 0a 20 20 20 20 2f 2f 2f 20 3c  nished.    /// <
0800: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 69 6e  /summary>.    in
0810: 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 64 69 73  ternal bool _dis
0820: 70 6f 73 65 43 6f 6d 6d 61 6e 64 3b 0a 0a 20 20  poseCommand;..  
0830: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
0840: 20 20 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79      /// An array
0850: 20 6f 66 20 72 6f 77 69 64 27 73 20 66 6f 72 20   of rowid's for 
0860: 74 68 65 20 61 63 74 69 76 65 20 73 74 61 74 65  the active state
0870: 6d 65 6e 74 20 69 66 20 43 6f 6d 6d 61 6e 64 42  ment if CommandB
0880: 65 68 61 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 20  ehavior.KeyInfo 
0890: 69 73 20 73 70 65 63 69 66 69 65 64 0a 20 20 20  is specified.   
08a0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
08b0: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
08c0: 74 65 4b 65 79 52 65 61 64 65 72 20 5f 6b 65 79  teKeyReader _key
08d0: 49 6e 66 6f 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c  Info;..    /// <
08e0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
08f0: 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 72   Internal constr
0900: 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69 7a  uctor, initializ
0910: 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64 65  es the datareade
0920: 72 20 61 6e 64 20 73 65 74 73 20 75 70 20 74 6f  r and sets up to
0930: 20 62 65 67 69 6e 20 65 78 65 63 75 74 69 6e 67   begin executing
0940: 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 20 20   statements.    
0950: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
0960: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0970: 6d 65 3d 22 63 6d 64 22 3e 54 68 65 20 53 51 4c  me="cmd">The SQL
0980: 69 74 65 43 6f 6d 6d 61 6e 64 20 74 68 69 73 20  iteCommand this 
0990: 64 61 74 61 20 72 65 61 64 65 72 20 69 73 20 66  data reader is f
09a0: 6f 72 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  or</param>.    /
09b0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
09c0: 62 65 68 61 76 65 22 3e 54 68 65 20 65 78 70 65  behave">The expe
09d0: 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 6f 66  cted behavior of
09e0: 20 74 68 65 20 64 61 74 61 20 72 65 61 64 65 72   the data reader
09f0: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 69 6e 74  </param>.    int
0a00: 65 72 6e 61 6c 20 53 51 4c 69 74 65 44 61 74 61  ernal SQLiteData
0a10: 52 65 61 64 65 72 28 53 51 4c 69 74 65 43 6f 6d  Reader(SQLiteCom
0a20: 6d 61 6e 64 20 63 6d 64 2c 20 43 6f 6d 6d 61 6e  mand cmd, Comman
0a30: 64 42 65 68 61 76 69 6f 72 20 62 65 68 61 76 65  dBehavior behave
0a40: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 63  ).    {.      _c
0a50: 6f 6d 6d 61 6e 64 20 3d 20 63 6d 64 3b 0a 20 20  ommand = cmd;.  
0a60: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61      _commandBeha
0a70: 76 69 6f 72 20 3d 20 62 65 68 61 76 65 3b 0a 20  vior = behave;. 
0a80: 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74       _activeStat
0a90: 65 6d 65 6e 74 49 6e 64 65 78 20 3d 20 2d 31 3b  ementIndex = -1;
0aa0: 0a 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74  .      _activeSt
0ab0: 61 74 65 6d 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0a  atement = null;.
0ac0: 20 20 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63        _rowsAffec
0ad0: 74 65 64 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20  ted = -1;.      
0ae0: 5f 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20 30 3b  _fieldCount = 0;
0af0: 0a 0a 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d  ..      if (_com
0b00: 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0a 20 20  mand != null).  
0b10: 20 20 20 20 20 20 4e 65 78 74 52 65 73 75 6c 74        NextResult
0b20: 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ();.    }..    /
0b30: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
0b40: 20 2f 2f 2f 20 43 6c 6f 73 65 73 20 74 68 65 20   /// Closes the 
0b50: 64 61 74 61 72 65 61 64 65 72 2c 20 70 6f 74 65  datareader, pote
0b60: 6e 74 69 61 6c 6c 79 20 63 6c 6f 73 69 6e 67 20  ntially closing 
0b70: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  the connection a
0b80: 73 20 77 65 6c 6c 20 69 66 20 43 6f 6d 6d 61 6e  s well if Comman
0b90: 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43  dBehavior.CloseC
0ba0: 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 73 70  onnection was sp
0bb0: 65 63 69 66 69 65 64 2e 0a 20 20 20 20 2f 2f 2f  ecified..    ///
0bc0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
0bd0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
0be0: 76 6f 69 64 20 43 6c 6f 73 65 28 29 0a 20 20 20  void Close().   
0bf0: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 5f 63 6f   {.      if (_co
0c00: 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0a 20  mmand != null). 
0c10: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 77       {.        w
0c20: 68 69 6c 65 20 28 4e 65 78 74 52 65 73 75 6c 74  hile (NextResult
0c30: 28 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  ()).        {.  
0c40: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
0c50: 5f 63 6f 6d 6d 61 6e 64 2e 43 6c 65 61 72 44 61  _command.ClearDa
0c60: 74 61 52 65 61 64 65 72 28 29 3b 0a 0a 20 20 20  taReader();..   
0c70: 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64       // If the d
0c80: 61 74 61 72 65 61 64 65 72 27 73 20 62 65 68 61  atareader's beha
0c90: 76 69 6f 72 20 69 6e 63 6c 75 64 65 73 20 63 6c  vior includes cl
0ca0: 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  osing the connec
0cb0: 74 69 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73 6f  tion, then do so
0cc0: 20 68 65 72 65 2e 0a 20 20 20 20 20 20 20 20 69   here..        i
0cd0: 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61  f ((_commandBeha
0ce0: 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65  vior & CommandBe
0cf0: 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e  havior.CloseConn
0d00: 65 63 74 69 6f 6e 29 20 21 3d 20 30 20 26 26 20  ection) != 0 && 
0d10: 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74  _command.Connect
0d20: 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  ion != null).   
0d30: 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e         _command.
0d40: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65  Connection.Close
0d50: 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 20  ();..        if 
0d60: 28 5f 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64  (_disposeCommand
0d70: 29 0a 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6d  ).          _com
0d80: 6d 61 6e 64 2e 44 69 73 70 6f 73 65 28 29 3b 0a  mand.Dispose();.
0d90: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 5f        }..      _
0da0: 63 6f 6d 6d 61 6e 64 20 3d 20 6e 75 6c 6c 3b 0a  command = null;.
0db0: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
0dc0: 74 65 6d 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0a 20  tement = null;. 
0dd0: 20 20 20 20 20 5f 66 69 65 6c 64 54 79 70 65 41       _fieldTypeA
0de0: 72 72 61 79 20 3d 20 6e 75 6c 6c 3b 0a 0a 20 20  rray = null;..  
0df0: 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f      if (_keyInfo
0e00: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
0e10: 7b 0a 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e  {.        _keyIn
0e20: 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b 0a 20 20  fo.Dispose();.  
0e30: 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 20 3d        _keyInfo =
0e40: 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20   null;.      }. 
0e50: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
0e60: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0e70: 54 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 20 69  Throw an error i
0e80: 66 20 74 68 65 20 64 61 74 61 72 65 61 64 65 72  f the datareader
0e90: 20 69 73 20 63 6c 6f 73 65 64 0a 20 20 20 20 2f   is closed.    /
0ea0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
0eb0: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
0ec0: 68 65 63 6b 43 6c 6f 73 65 64 28 29 0a 20 20 20  heckClosed().   
0ed0: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 5f 63 6f   {.      if (_co
0ee0: 6d 6d 61 6e 64 20 3d 3d 20 6e 75 6c 6c 29 0a 20  mmand == null). 
0ef0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
0f00: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
0f10: 6e 45 78 63 65 70 74 69 6f 6e 28 22 44 61 74 61  nException("Data
0f20: 52 65 61 64 65 72 20 68 61 73 20 62 65 65 6e 20  Reader has been 
0f30: 63 6c 6f 73 65 64 22 29 3b 0a 20 20 20 20 7d 0a  closed");.    }.
0f40: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0f50: 79 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77  y>.    /// Throw
0f60: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 61 20 72   an error if a r
0f70: 6f 77 20 69 73 20 6e 6f 74 20 6c 6f 61 64 65 64  ow is not loaded
0f80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0f90: 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20  ry>.    private 
0fa0: 76 6f 69 64 20 43 68 65 63 6b 56 61 6c 69 64 52  void CheckValidR
0fb0: 6f 77 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ow().    {.     
0fc0: 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
0fd0: 74 65 20 21 3d 20 30 29 0a 20 20 20 20 20 20 20  te != 0).       
0fe0: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
0ff0: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
1000: 74 69 6f 6e 28 22 4e 6f 20 63 75 72 72 65 6e 74  tion("No current
1010: 20 72 6f 77 22 29 3b 0a 20 20 20 20 7d 0a 0a 20   row");.    }.. 
1020: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1030: 0a 20 20 20 20 2f 2f 2f 20 45 6e 75 6d 65 72 61  .    /// Enumera
1040: 74 6f 72 20 73 75 70 70 6f 72 74 0a 20 20 20 20  tor support.    
1050: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
1060: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
1070: 52 65 74 75 72 6e 73 20 61 20 44 62 45 6e 75 6d  Returns a DbEnum
1080: 65 72 61 74 6f 72 20 6f 62 6a 65 63 74 2e 3c 2f  erator object.</
1090: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
10a0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 43 6f 6c  lic override Col
10b0: 6c 65 63 74 69 6f 6e 73 2e 49 45 6e 75 6d 65 72  lections.IEnumer
10c0: 61 74 6f 72 20 47 65 74 45 6e 75 6d 65 72 61 74  ator GetEnumerat
10d0: 6f 72 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  or().    {.     
10e0: 20 72 65 74 75 72 6e 20 6e 65 77 20 44 62 45 6e   return new DbEn
10f0: 75 6d 65 72 61 74 6f 72 28 74 68 69 73 29 3b 0a  umerator(this);.
1100: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
1110: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
1120: 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64   Not implemented
1130: 2e 20 20 52 65 74 75 72 6e 73 20 30 0a 20 20 20  .  Returns 0.   
1140: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
1150: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
1160: 69 64 65 20 69 6e 74 20 44 65 70 74 68 0a 20 20  ide int Depth.  
1170: 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a 20 20    {.      get.  
1180: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 43 68      {.        Ch
1190: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20  eckClosed();.   
11a0: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20       return 0;. 
11b0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
11c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
11d0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
11e0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
11f0: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 63 75 72  lumns in the cur
1200: 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 0a 20  rent resultset. 
1210: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1220: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
1230: 72 72 69 64 65 20 69 6e 74 20 46 69 65 6c 64 43  rride int FieldC
1240: 6f 75 6e 74 0a 20 20 20 20 7b 0a 20 20 20 20 20  ount.    {.     
1250: 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20   get.      {.   
1260: 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64       CheckClosed
1270: 28 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28  ();.        if (
1280: 5f 6b 65 79 49 6e 66 6f 20 3d 3d 20 6e 75 6c 6c  _keyInfo == null
1290: 29 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ).          retu
12a0: 72 6e 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0a  rn _fieldCount;.
12b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
12c0: 5f 66 69 65 6c 64 43 6f 75 6e 74 20 2b 20 5f 6b  _fieldCount + _k
12d0: 65 79 49 6e 66 6f 2e 43 6f 75 6e 74 3b 0a 20 20  eyInfo.Count;.  
12e0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
12f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
1300: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
1310: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 69 73  he number of vis
1320: 69 62 6c 65 20 66 69 65 6c 73 64 20 69 6e 20 74  ible fielsd in t
1330: 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c  he current resul
1340: 74 73 65 74 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  tset.    /// </s
1350: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75 62 6c  ummary>.    publ
1360: 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  ic override int 
1370: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
1380: 74 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65  t.    {.      ge
1390: 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  t.      {.      
13a0: 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b    CheckClosed();
13b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
13c0: 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0a 20 20 20  _fieldCount;.   
13d0: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
13e0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
13f0: 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 69 73 20    /// SQLite is 
1400: 69 6e 68 65 72 65 6e 74 6c 79 20 75 6e 2d 74 79  inherently un-ty
1410: 70 65 64 2e 20 20 41 6c 6c 20 64 61 74 61 74 79  ped.  All dataty
1420: 70 65 73 20 69 6e 20 53 51 4c 69 74 65 20 61 72  pes in SQLite ar
1430: 65 20 6e 61 74 69 76 65 6c 79 20 73 74 72 69 6e  e natively strin
1440: 67 73 2e 20 20 54 68 65 20 64 65 66 69 6e 69 74  gs.  The definit
1450: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ion of the colum
1460: 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 0a 20 20  ns of a table.  
1470: 20 20 2f 2f 2f 20 61 6e 64 20 74 68 65 20 61 66    /// and the af
1480: 66 69 6e 69 74 79 20 6f 66 20 72 65 74 75 72 6e  finity of return
1490: 65 64 20 74 79 70 65 73 20 61 72 65 20 61 6c 6c  ed types are all
14a0: 20 77 65 20 68 61 76 65 20 74 6f 20 67 6f 20 6f   we have to go o
14b0: 6e 20 74 6f 20 74 79 70 65 2d 72 65 73 74 72 69  n to type-restri
14c0: 63 74 20 64 61 74 61 20 69 6e 20 74 68 65 20 72  ct data in the r
14d0: 65 61 64 65 72 2e 0a 20 20 20 20 2f 2f 2f 20 0a  eader..    /// .
14e0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e      /// This fun
14f0: 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74  ction attempts t
1500: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  o verify that th
1510: 65 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 62  e type of data b
1520: 65 69 6e 67 20 72 65 71 75 65 73 74 65 64 20 6f  eing requested o
1530: 66 20 61 20 63 6f 6c 75 6d 6e 20 6d 61 74 63 68  f a column match
1540: 65 73 20 74 68 65 20 64 61 74 61 74 79 70 65 20  es the datatype 
1550: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20  of the column.  
1560: 49 6e 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63  In.    /// the c
1570: 61 73 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  ase of columns t
1580: 68 61 74 20 61 72 65 20 6e 6f 74 20 62 61 63 6b  hat are not back
1590: 65 64 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20  ed into a table 
15a0: 64 65 66 69 6e 69 74 69 6f 6e 2c 20 77 65 20 61  definition, we a
15b0: 74 74 65 6d 70 74 20 74 6f 20 6d 61 74 63 68 20  ttempt to match 
15c0: 75 70 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  up the affinity 
15d0: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 28 69 6e 74  of a column (int
15e0: 2c 20 64 6f 75 62 6c 65 2c 20 73 74 72 69 6e 67  , double, string
15f0: 20 6f 72 20 62 6c 6f 62 29 0a 20 20 20 20 2f 2f   or blob).    //
1600: 2f 20 74 6f 20 61 20 73 65 74 20 6f 66 20 6b 6e  / to a set of kn
1610: 6f 77 6e 20 74 79 70 65 73 20 74 68 61 74 20 63  own types that c
1620: 6c 6f 73 65 6c 79 20 6d 61 74 63 68 20 74 68 61  losely match tha
1630: 74 20 61 66 66 69 6e 69 74 79 2e 20 20 49 74 27  t affinity.  It'
1640: 73 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 73  s not an exact s
1650: 63 69 65 6e 63 65 2c 20 62 75 74 20 69 74 73 20  cience, but its 
1660: 74 68 65 20 62 65 73 74 20 77 65 20 63 61 6e 20  the best we can 
1670: 64 6f 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  do..    /// </su
1680: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
1690: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 2f 2f 2f  returns>.    ///
16a0: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74   This function t
16b0: 68 72 6f 77 73 20 61 6e 20 49 6e 76 61 6c 69 64  hrows an Invalid
16c0: 54 79 70 65 43 61 73 74 28 29 20 65 78 63 65 70  TypeCast() excep
16d0: 74 69 6f 6e 20 69 66 20 74 68 65 20 72 65 71 75  tion if the requ
16e0: 65 73 74 65 64 20 74 79 70 65 20 64 6f 65 73 6e  ested type doesn
16f0: 27 74 20 6d 61 74 63 68 20 74 68 65 20 63 6f 6c  't match the col
1700: 75 6d 6e 27 73 20 64 65 66 69 6e 69 74 69 6f 6e  umn's definition
1710: 20 6f 72 20 61 66 66 69 6e 69 74 79 2e 0a 20 20   or affinity..  
1720: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
1730: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1740: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
1750: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
1760: 20 74 6f 20 74 79 70 65 2d 63 68 65 63 6b 3c 2f   to type-check</
1770: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
1780: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22  param name="typ"
1790: 3e 54 68 65 20 74 79 70 65 20 77 65 20 77 61 6e  >The type we wan
17a0: 74 20 74 6f 20 67 65 74 20 6f 75 74 20 6f 66 20  t to get out of 
17b0: 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 70 61 72 61  the column</para
17c0: 6d 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 54  m>.    private T
17d0: 79 70 65 41 66 66 69 6e 69 74 79 20 56 65 72 69  ypeAffinity Veri
17e0: 66 79 54 79 70 65 28 69 6e 74 20 69 2c 20 44 62  fyType(int i, Db
17f0: 54 79 70 65 20 74 79 70 29 0a 20 20 20 20 7b 0a  Type typ).    {.
1800: 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65        CheckClose
1810: 64 28 29 3b 0a 20 20 20 20 20 20 43 68 65 63 6b  d();.      Check
1820: 56 61 6c 69 64 52 6f 77 28 29 3b 0a 20 20 20 20  ValidRow();.    
1830: 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61    TypeAffinity a
1840: 66 66 69 6e 69 74 79 20 3d 20 47 65 74 53 51 4c  ffinity = GetSQL
1850: 69 74 65 54 79 70 65 28 69 29 2e 41 66 66 69 6e  iteType(i).Affin
1860: 69 74 79 3b 0a 0a 20 20 20 20 20 20 73 77 69 74  ity;..      swit
1870: 63 68 20 28 61 66 66 69 6e 69 74 79 29 0a 20 20  ch (affinity).  
1880: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 63 61      {.        ca
1890: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
18a0: 49 6e 74 36 34 3a 0a 20 20 20 20 20 20 20 20 20  Int64:.         
18b0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
18c0: 70 65 2e 49 6e 74 31 36 29 20 72 65 74 75 72 6e  pe.Int16) return
18d0: 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20   affinity;.     
18e0: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
18f0: 44 62 54 79 70 65 2e 49 6e 74 33 32 29 20 72 65  DbType.Int32) re
1900: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20  turn affinity;. 
1910: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
1920: 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74 36 34   == DbType.Int64
1930: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
1940: 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  y;.          if 
1950: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42  (typ == DbType.B
1960: 6f 6f 6c 65 61 6e 29 20 72 65 74 75 72 6e 20 61  oolean) return a
1970: 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20  ffinity;.       
1980: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
1990: 54 79 70 65 2e 42 79 74 65 29 20 72 65 74 75 72  Type.Byte) retur
19a0: 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20  n affinity;.    
19b0: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
19c0: 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65   DbType.DateTime
19d0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
19e0: 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  y;.          if 
19f0: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53  (typ == DbType.S
1a00: 69 6e 67 6c 65 29 20 72 65 74 75 72 6e 20 61 66  ingle) return af
1a10: 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20  finity;.        
1a20: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
1a30: 79 70 65 2e 44 6f 75 62 6c 65 29 20 72 65 74 75  ype.Double) retu
1a40: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20  rn affinity;.   
1a50: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
1a60: 3d 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c  = DbType.Decimal
1a70: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
1a80: 79 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  y;.          bre
1a90: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
1aa0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
1ab0: 75 62 6c 65 3a 0a 20 20 20 20 20 20 20 20 20 20  uble:.          
1ac0: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
1ad0: 65 2e 53 69 6e 67 6c 65 29 20 72 65 74 75 72 6e  e.Single) return
1ae0: 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20   affinity;.     
1af0: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
1b00: 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 20 72  DbType.Double) r
1b10: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a  eturn affinity;.
1b20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
1b30: 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 65 63 69  p == DbType.Deci
1b40: 6d 61 6c 29 20 72 65 74 75 72 6e 20 61 66 66 69  mal) return affi
1b50: 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20  nity;.          
1b60: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
1b70: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
1b80: 2e 54 65 78 74 3a 0a 20 20 20 20 20 20 20 20 20  .Text:.         
1b90: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
1ba0: 70 65 2e 53 42 79 74 65 29 20 72 65 74 75 72 6e  pe.SByte) return
1bb0: 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20   affinity;.     
1bc0: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
1bd0: 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 20 72  DbType.String) r
1be0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a  eturn affinity;.
1bf0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
1c00: 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 42 79 74  p == DbType.SByt
1c10: 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  e) return affini
1c20: 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  ty;.          if
1c30: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
1c40: 47 75 69 64 29 20 72 65 74 75 72 6e 20 61 66 66  Guid) return aff
1c50: 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20  inity;.         
1c60: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
1c70: 70 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74  pe.DateTime) ret
1c80: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20  urn affinity;.  
1c90: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1ca0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
1cb0: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0a 20  Affinity.Blob:. 
1cc0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
1cd0: 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29   == DbType.Guid)
1ce0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
1cf0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ;.          if (
1d00: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 74  typ == DbType.St
1d10: 72 69 6e 67 29 20 72 65 74 75 72 6e 20 61 66 66  ring) return aff
1d20: 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20  inity;.         
1d30: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
1d40: 70 65 2e 42 69 6e 61 72 79 29 20 72 65 74 75 72  pe.Binary) retur
1d50: 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20  n affinity;.    
1d60: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1d70: 20 20 20 7d 0a 0a 20 20 20 20 20 20 74 68 72 6f     }..      thro
1d80: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 43 61 73  w new InvalidCas
1d90: 74 45 78 63 65 70 74 69 6f 6e 28 29 3b 0a 20 20  tException();.  
1da0: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
1db0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
1dc0: 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c  etrieves the col
1dd0: 75 6d 6e 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e  umn as a boolean
1de0: 20 76 61 6c 75 65 0a 20 20 20 20 2f 2f 2f 20 3c   value.    /// <
1df0: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
1e00: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
1e10: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
1e20: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
1e30: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  rieve</param>.  
1e40: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62    /// <returns>b
1e50: 6f 6f 6c 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  ool</returns>.  
1e60: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
1e70: 65 20 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65 61  e bool GetBoolea
1e80: 6e 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20  n(int i).    {. 
1e90: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69       if (i >= Vi
1ea0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
1eb0: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
1ec0: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74  ull).        ret
1ed0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
1ee0: 42 6f 6f 6c 65 61 6e 28 69 20 2d 20 56 69 73 69  Boolean(i - Visi
1ef0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a  bleFieldCount);.
1f00: 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70  .      VerifyTyp
1f10: 65 28 69 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c  e(i, DbType.Bool
1f20: 65 61 6e 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ean);.      retu
1f30: 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42 6f 6f  rn Convert.ToBoo
1f40: 6c 65 61 6e 28 47 65 74 56 61 6c 75 65 28 69 29  lean(GetValue(i)
1f50: 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75  , CultureInfo.Cu
1f60: 72 72 65 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20  rrentCulture);. 
1f70: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
1f80: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
1f90: 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f  Retrieves the co
1fa0: 6c 75 6d 6e 20 61 73 20 61 20 73 69 6e 67 6c 65  lumn as a single
1fb0: 20 62 79 74 65 20 76 61 6c 75 65 0a 20 20 20 20   byte value.    
1fc0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
1fd0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1fe0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
1ff0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
2000: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
2010: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
2020: 72 6e 73 3e 62 79 74 65 3c 2f 72 65 74 75 72 6e  rns>byte</return
2030: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
2040: 65 72 72 69 64 65 20 62 79 74 65 20 47 65 74 42  erride byte GetB
2050: 79 74 65 28 69 6e 74 20 69 29 0a 20 20 20 20 7b  yte(int i).    {
2060: 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20  .      if (i >= 
2070: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
2080: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
2090: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72   null).        r
20a0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
20b0: 65 74 42 79 74 65 28 69 20 2d 20 56 69 73 69 62  etByte(i - Visib
20c0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a  leFieldCount);..
20d0: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
20e0: 28 69 2c 20 44 62 54 79 70 65 2e 42 79 74 65 29  (i, DbType.Byte)
20f0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 43  ;.      return C
2100: 6f 6e 76 65 72 74 2e 54 6f 42 79 74 65 28 5f 61  onvert.ToByte(_a
2110: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
2120: 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63  sql.GetInt32(_ac
2130: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
2140: 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ));.    }..    /
2150: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
2160: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 61   /// Retrieves a
2170: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 61 72   column as an ar
2180: 72 61 79 20 6f 66 20 62 79 74 65 73 20 28 62 6c  ray of bytes (bl
2190: 6f 62 29 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ob).    /// </su
21a0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
21b0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
21c0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
21d0: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
21e0: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
21f0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2200: 66 69 65 6c 64 4f 66 66 73 65 74 22 3e 54 68 65  fieldOffset">The
2210: 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65   zero-based inde
2220: 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65  x of where to be
2230: 67 69 6e 20 72 65 61 64 69 6e 67 20 74 68 65 20  gin reading the 
2240: 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  data</param>.   
2250: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2260: 3d 22 62 75 66 66 65 72 22 3e 54 68 65 20 62 75  ="buffer">The bu
2270: 66 66 65 72 20 74 6f 20 77 72 69 74 65 20 74 68  ffer to write th
2280: 65 20 62 79 74 65 73 20 69 6e 74 6f 3c 2f 70 61  e bytes into</pa
2290: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ram>.    /// <pa
22a0: 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72  ram name="buffer
22b0: 6f 66 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f  offset">The zero
22c0: 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20  -based index of 
22d0: 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e 20 77  where to begin w
22e0: 72 69 74 69 6e 67 20 69 6e 74 6f 20 74 68 65 20  riting into the 
22f0: 61 72 72 61 79 3c 2f 70 61 72 61 6d 3e 0a 20 20  array</param>.  
2300: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2310: 65 3d 22 6c 65 6e 67 74 68 22 3e 54 68 65 20 6e  e="length">The n
2320: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74  umber of bytes t
2330: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
2340: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
2350: 72 6e 73 3e 54 68 65 20 61 63 74 75 61 6c 20 6e  rns>The actual n
2360: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 77  umber of bytes w
2370: 72 69 74 74 65 6e 20 69 6e 74 6f 20 74 68 65 20  ritten into the 
2380: 61 72 72 61 79 3c 2f 72 65 74 75 72 6e 73 3e 0a  array</returns>.
2390: 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73      /// <remarks
23a0: 3e 0a 20 20 20 20 2f 2f 2f 20 54 6f 20 64 65 74  >.    /// To det
23b0: 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
23c0: 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
23d0: 65 20 63 6f 6c 75 6d 6e 2c 20 70 61 73 73 20 61  e column, pass a
23e0: 20 6e 75 6c 6c 20 76 61 6c 75 65 20 66 6f 72 20   null value for 
23f0: 74 68 65 20 62 75 66 66 65 72 2e 20 20 54 68 65  the buffer.  The
2400: 20 74 6f 74 61 6c 20 6c 65 6e 67 74 68 20 77 69   total length wi
2410: 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0a  ll be returned..
2420: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
2430: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
2440: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42  erride long GetB
2450: 79 74 65 73 28 69 6e 74 20 69 2c 20 6c 6f 6e 67  ytes(int i, long
2460: 20 66 69 65 6c 64 4f 66 66 73 65 74 2c 20 62 79   fieldOffset, by
2470: 74 65 5b 5d 20 62 75 66 66 65 72 2c 20 69 6e 74  te[] buffer, int
2480: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 69   bufferoffset, i
2490: 6e 74 20 6c 65 6e 67 74 68 29 0a 20 20 20 20 7b  nt length).    {
24a0: 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20  .      if (i >= 
24b0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
24c0: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
24d0: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72   null).        r
24e0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
24f0: 65 74 42 79 74 65 73 28 69 20 2d 20 56 69 73 69  etBytes(i - Visi
2500: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20 66  bleFieldCount, f
2510: 69 65 6c 64 4f 66 66 73 65 74 2c 20 62 75 66 66  ieldOffset, buff
2520: 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74  er, bufferoffset
2530: 2c 20 6c 65 6e 67 74 68 29 3b 0a 0a 20 20 20 20  , length);..    
2540: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
2550: 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29 3b 0a  DbType.Binary);.
2560: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
2570: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
2580: 71 6c 2e 47 65 74 42 79 74 65 73 28 5f 61 63 74  ql.GetBytes(_act
2590: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c  iveStatement, i,
25a0: 20 28 69 6e 74 29 66 69 65 6c 64 4f 66 66 73 65   (int)fieldOffse
25b0: 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65  t, buffer, buffe
25c0: 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29  roffset, length)
25d0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
25e0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
25f0: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 63  // Returns the c
2600: 6f 6c 75 6d 6e 20 61 73 20 61 20 73 69 6e 67 6c  olumn as a singl
2610: 65 20 63 68 61 72 61 63 74 65 72 0a 20 20 20 20  e character.    
2620: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
2630: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2640: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
2650: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
2660: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
2670: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
2680: 72 6e 73 3e 63 68 61 72 3c 2f 72 65 74 75 72 6e  rns>char</return
2690: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
26a0: 65 72 72 69 64 65 20 63 68 61 72 20 47 65 74 43  erride char GetC
26b0: 68 61 72 28 69 6e 74 20 69 29 0a 20 20 20 20 7b  har(int i).    {
26c0: 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20  .      if (i >= 
26d0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
26e0: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
26f0: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72   null).        r
2700: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
2710: 65 74 43 68 61 72 28 69 20 2d 20 56 69 73 69 62  etChar(i - Visib
2720: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a  leFieldCount);..
2730: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
2740: 28 69 2c 20 44 62 54 79 70 65 2e 53 42 79 74 65  (i, DbType.SByte
2750: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
2760: 43 6f 6e 76 65 72 74 2e 54 6f 43 68 61 72 28 5f  Convert.ToChar(_
2770: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
2780: 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61  _sql.GetInt32(_a
2790: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
27a0: 69 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  i));.    }..    
27b0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
27c0: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
27d0: 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 61  a column as an a
27e0: 72 72 61 79 20 6f 66 20 63 68 61 72 73 20 28 62  rray of chars (b
27f0: 6c 6f 62 29 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  lob).    /// </s
2800: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
2810: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
2820: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
2830: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
2840: 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  eve</param>.    
2850: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2860: 22 66 69 65 6c 64 6f 66 66 73 65 74 22 3e 54 68  "fieldoffset">Th
2870: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64  e zero-based ind
2880: 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62  ex of where to b
2890: 65 67 69 6e 20 72 65 61 64 69 6e 67 20 74 68 65  egin reading the
28a0: 20 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0a 20 20   data</param>.  
28b0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
28c0: 65 3d 22 62 75 66 66 65 72 22 3e 54 68 65 20 62  e="buffer">The b
28d0: 75 66 66 65 72 20 74 6f 20 77 72 69 74 65 20 74  uffer to write t
28e0: 68 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  he characters in
28f0: 74 6f 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  to</param>.    /
2900: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2910: 62 75 66 66 65 72 6f 66 66 73 65 74 22 3e 54 68  bufferoffset">Th
2920: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64  e zero-based ind
2930: 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62  ex of where to b
2940: 65 67 69 6e 20 77 72 69 74 69 6e 67 20 69 6e 74  egin writing int
2950: 6f 20 74 68 65 20 61 72 72 61 79 3c 2f 70 61 72  o the array</par
2960: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  am>.    /// <par
2970: 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22  am name="length"
2980: 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62  >The number of b
2990: 79 74 65 73 20 74 6f 20 72 65 74 72 69 65 76 65  ytes to retrieve
29a0: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
29b0: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 61 63   <returns>The ac
29c0: 74 75 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63  tual number of c
29d0: 68 61 72 61 63 74 65 72 73 20 77 72 69 74 74 65  haracters writte
29e0: 6e 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79  n into the array
29f0: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 2f  </returns>.    /
2a00: 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a 20 20 20  // <remarks>.   
2a10: 20 2f 2f 2f 20 54 6f 20 64 65 74 65 72 6d 69 6e   /// To determin
2a20: 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
2a30: 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
2a40: 65 20 63 6f 6c 75 6d 6e 2c 20 70 61 73 73 20 61  e column, pass a
2a50: 20 6e 75 6c 6c 20 76 61 6c 75 65 20 66 6f 72 20   null value for 
2a60: 74 68 65 20 62 75 66 66 65 72 2e 20 20 54 68 65  the buffer.  The
2a70: 20 74 6f 74 61 6c 20 6c 65 6e 67 74 68 20 77 69   total length wi
2a80: 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0a  ll be returned..
2a90: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
2aa0: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
2ab0: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43  erride long GetC
2ac0: 68 61 72 73 28 69 6e 74 20 69 2c 20 6c 6f 6e 67  hars(int i, long
2ad0: 20 66 69 65 6c 64 6f 66 66 73 65 74 2c 20 63 68   fieldoffset, ch
2ae0: 61 72 5b 5d 20 62 75 66 66 65 72 2c 20 69 6e 74  ar[] buffer, int
2af0: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 69   bufferoffset, i
2b00: 6e 74 20 6c 65 6e 67 74 68 29 0a 20 20 20 20 7b  nt length).    {
2b10: 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20  .      if (i >= 
2b20: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
2b30: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
2b40: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72   null).        r
2b50: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
2b60: 65 74 43 68 61 72 73 28 69 20 2d 20 56 69 73 69  etChars(i - Visi
2b70: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20 66  bleFieldCount, f
2b80: 69 65 6c 64 6f 66 66 73 65 74 2c 20 62 75 66 66  ieldoffset, buff
2b90: 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74  er, bufferoffset
2ba0: 2c 20 6c 65 6e 67 74 68 29 3b 0a 0a 20 20 20 20  , length);..    
2bb0: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
2bc0: 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 3b 0a  DbType.String);.
2bd0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
2be0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
2bf0: 71 6c 2e 47 65 74 43 68 61 72 73 28 5f 61 63 74  ql.GetChars(_act
2c00: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c  iveStatement, i,
2c10: 20 28 69 6e 74 29 66 69 65 6c 64 6f 66 66 73 65   (int)fieldoffse
2c20: 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65  t, buffer, buffe
2c30: 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29  roffset, length)
2c40: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
2c50: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
2c60: 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65  // Retrieves the
2c70: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 62 61 63   name of the bac
2c80: 6b 2d 65 6e 64 20 64 61 74 61 74 79 70 65 20 6f  k-end datatype o
2c90: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20  f the column.   
2ca0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
2cb0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2cc0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
2cd0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  x of the column 
2ce0: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
2cf0: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
2d00: 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74  urns>string</ret
2d10: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
2d20: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
2d30: 20 47 65 74 44 61 74 61 54 79 70 65 4e 61 6d 65   GetDataTypeName
2d40: 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20  (int i).    {.  
2d50: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
2d60: 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 69 20  );..      if (i 
2d70: 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43  >= VisibleFieldC
2d80: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
2d90: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
2da0: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
2db0: 6f 2e 47 65 74 44 61 74 61 54 79 70 65 4e 61 6d  o.GetDataTypeNam
2dc0: 65 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65  e(i - VisibleFie
2dd0: 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20  ldCount);..     
2de0: 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 20   SQLiteType typ 
2df0: 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  = GetSQLiteType(
2e00: 69 29 3b 0a 20 20 20 20 20 20 69 66 20 28 74 79  i);.      if (ty
2e10: 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65  p.Type == DbType
2e20: 2e 4f 62 6a 65 63 74 29 20 72 65 74 75 72 6e 20  .Object) return 
2e30: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51  SQLiteConvert.SQ
2e40: 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74  LiteTypeToType(t
2e50: 79 70 29 2e 4e 61 6d 65 3b 0a 20 20 20 20 20 20  yp).Name;.      
2e60: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
2e70: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c  atement._sql.Col
2e80: 75 6d 6e 54 79 70 65 28 5f 61 63 74 69 76 65 53  umnType(_activeS
2e90: 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 6f 75 74  tatement, i, out
2ea0: 20 74 79 70 2e 41 66 66 69 6e 69 74 79 29 3b 0a   typ.Affinity);.
2eb0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
2ec0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
2ed0: 20 52 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   Retrieve the co
2ee0: 6c 75 6d 6e 20 61 73 20 61 20 64 61 74 65 2f 74  lumn as a date/t
2ef0: 69 6d 65 20 76 61 6c 75 65 0a 20 20 20 20 2f 2f  ime value.    //
2f00: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
2f10: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2f20: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
2f30: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
2f40: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
2f50: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
2f60: 73 3e 44 61 74 65 54 69 6d 65 3c 2f 72 65 74 75  s>DateTime</retu
2f70: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
2f80: 6f 76 65 72 72 69 64 65 20 44 61 74 65 54 69 6d  override DateTim
2f90: 65 20 47 65 74 44 61 74 65 54 69 6d 65 28 69 6e  e GetDateTime(in
2fa0: 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  t i).    {.     
2fb0: 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c   if (i >= Visibl
2fc0: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
2fd0: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
2fe0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2ff0: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 61 74 65  _keyInfo.GetDate
3000: 54 69 6d 65 28 69 20 2d 20 56 69 73 69 62 6c 65  Time(i - Visible
3010: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20  FieldCount);..  
3020: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
3030: 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d  , DbType.DateTim
3040: 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  e);.      return
3050: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
3060: 74 2e 5f 73 71 6c 2e 47 65 74 44 61 74 65 54 69  t._sql.GetDateTi
3070: 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  me(_activeStatem
3080: 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a  ent, i);.    }..
3090: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
30a0: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  >.    /// Retrie
30b0: 76 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73  ve the column as
30c0: 20 61 20 64 65 63 69 6d 61 6c 20 76 61 6c 75 65   a decimal value
30d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
30e0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
30f0: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
3100: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
3110: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
3120: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
3130: 3c 72 65 74 75 72 6e 73 3e 64 65 63 69 6d 61 6c  <returns>decimal
3140: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
3150: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64  ublic override d
3160: 65 63 69 6d 61 6c 20 47 65 74 44 65 63 69 6d 61  ecimal GetDecima
3170: 6c 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20  l(int i).    {. 
3180: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69       if (i >= Vi
3190: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
31a0: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
31b0: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74  ull).        ret
31c0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
31d0: 44 65 63 69 6d 61 6c 28 69 20 2d 20 56 69 73 69  Decimal(i - Visi
31e0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a  bleFieldCount);.
31f0: 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70  .      VerifyTyp
3200: 65 28 69 2c 20 44 62 54 79 70 65 2e 44 65 63 69  e(i, DbType.Deci
3210: 6d 61 6c 29 3b 0a 20 20 20 20 20 20 72 65 74 75  mal);.      retu
3220: 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 44 65 63  rn Convert.ToDec
3230: 69 6d 61 6c 28 5f 61 63 74 69 76 65 53 74 61 74  imal(_activeStat
3240: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f  ement._sql.GetDo
3250: 75 62 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74  uble(_activeStat
3260: 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20 20 20  ement, i));.    
3270: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
3280: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ary>.    /// Ret
3290: 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  urns the column 
32a0: 61 73 20 61 20 64 6f 75 62 6c 65 0a 20 20 20 20  as a double.    
32b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
32c0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
32d0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
32e0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
32f0: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
3300: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
3310: 72 6e 73 3e 64 6f 75 62 6c 65 3c 2f 72 65 74 75  rns>double</retu
3320: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
3330: 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20  override double 
3340: 47 65 74 44 6f 75 62 6c 65 28 69 6e 74 20 69 29  GetDouble(int i)
3350: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20  .    {.      if 
3360: 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65  (i >= VisibleFie
3370: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
3380: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
3390: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
33a0: 49 6e 66 6f 2e 47 65 74 44 6f 75 62 6c 65 28 69  Info.GetDouble(i
33b0: 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43   - VisibleFieldC
33c0: 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56 65  ount);..      Ve
33d0: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
33e0: 70 65 2e 44 6f 75 62 6c 65 29 3b 0a 20 20 20 20  pe.Double);.    
33f0: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
3400: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
3410: 65 74 44 6f 75 62 6c 65 28 5f 61 63 74 69 76 65  etDouble(_active
3420: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20  Statement, i);. 
3430: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
3440: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
3450: 52 65 74 75 72 6e 73 20 74 68 65 20 2e 4e 45 54  Returns the .NET
3460: 20 74 79 70 65 20 6f 66 20 61 20 67 69 76 65 6e   type of a given
3470: 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2f 2f 2f 20   column.    /// 
3480: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
3490: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
34a0: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
34b0: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
34c0: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20  trieve</param>. 
34d0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
34e0: 54 79 70 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  Type</returns>. 
34f0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
3500: 64 65 20 54 79 70 65 20 47 65 74 46 69 65 6c 64  de Type GetField
3510: 54 79 70 65 28 69 6e 74 20 69 29 0a 20 20 20 20  Type(int i).    
3520: 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  {.      CheckClo
3530: 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66  sed();..      if
3540: 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69   (i >= VisibleFi
3550: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
3560: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20  Info != null).  
3570: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
3580: 79 49 6e 66 6f 2e 47 65 74 46 69 65 6c 64 54 79  yInfo.GetFieldTy
3590: 70 65 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69  pe(i - VisibleFi
35a0: 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20  eldCount);..    
35b0: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 43    return SQLiteC
35c0: 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70  onvert.SQLiteTyp
35d0: 65 54 6f 54 79 70 65 28 47 65 74 53 51 4c 69 74  eToType(GetSQLit
35e0: 65 54 79 70 65 28 69 29 29 3b 0a 20 20 20 20 7d  eType(i));.    }
35f0: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3600: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  ry>.    /// Retu
3610: 72 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20  rns a column as 
3620: 61 20 66 6c 6f 61 74 20 76 61 6c 75 65 0a 20 20  a float value.  
3630: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
3640: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
3650: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
3660: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
3670: 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
3680: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
3690: 74 75 72 6e 73 3e 66 6c 6f 61 74 3c 2f 72 65 74  turns>float</ret
36a0: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
36b0: 20 6f 76 65 72 72 69 64 65 20 66 6c 6f 61 74 20   override float 
36c0: 47 65 74 46 6c 6f 61 74 28 69 6e 74 20 69 29 0a  GetFloat(int i).
36d0: 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28      {.      if (
36e0: 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c  i >= VisibleFiel
36f0: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
3700: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  fo != null).    
3710: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
3720: 6e 66 6f 2e 47 65 74 46 6c 6f 61 74 28 69 20 2d  nfo.GetFloat(i -
3730: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
3740: 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69  nt);..      Veri
3750: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
3760: 2e 53 69 6e 67 6c 65 29 3b 0a 20 20 20 20 20 20  .Single);.      
3770: 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54  return Convert.T
3780: 6f 53 69 6e 67 6c 65 28 5f 61 63 74 69 76 65 53  oSingle(_activeS
3790: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
37a0: 74 44 6f 75 62 6c 65 28 5f 61 63 74 69 76 65 53  tDouble(_activeS
37b0: 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20  tatement, i));. 
37c0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
37d0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
37e0: 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75  Returns the colu
37f0: 6d 6e 20 61 73 20 61 20 47 75 69 64 0a 20 20 20  mn as a Guid.   
3800: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
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 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
3830: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  x of the column 
3840: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
3850: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
3860: 75 72 6e 73 3e 47 75 69 64 3c 2f 72 65 74 75 72  urns>Guid</retur
3870: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
3880: 76 65 72 72 69 64 65 20 47 75 69 64 20 47 65 74  verride Guid Get
3890: 47 75 69 64 28 69 6e 74 20 69 29 0a 20 20 20 20  Guid(int i).    
38a0: 7b 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d  {.      if (i >=
38b0: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
38c0: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
38d0: 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20  = null).        
38e0: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
38f0: 47 65 74 47 75 69 64 28 69 20 2d 20 56 69 73 69  GetGuid(i - Visi
3900: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a  bleFieldCount);.
3910: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
3920: 69 74 79 20 61 66 66 69 6e 69 74 79 20 3d 20 56  ity affinity = V
3930: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
3940: 79 70 65 2e 47 75 69 64 29 3b 0a 20 20 20 20 20  ype.Guid);.     
3950: 20 69 66 20 28 61 66 66 69 6e 69 74 79 20 3d 3d   if (affinity ==
3960: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c   TypeAffinity.Bl
3970: 6f 62 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  ob).      {.    
3980: 20 20 20 20 62 79 74 65 5b 5d 20 62 75 66 66 65      byte[] buffe
3990: 72 20 3d 20 6e 65 77 20 62 79 74 65 5b 31 36 5d  r = new byte[16]
39a0: 3b 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69 76  ;.        _activ
39b0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
39c0: 47 65 74 42 79 74 65 73 28 5f 61 63 74 69 76 65  GetBytes(_active
39d0: 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 30 2c  Statement, i, 0,
39e0: 20 62 75 66 66 65 72 2c 20 30 2c 20 31 36 29 3b   buffer, 0, 16);
39f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3a00: 6e 65 77 20 47 75 69 64 28 62 75 66 66 65 72 29  new Guid(buffer)
3a10: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
3a20: 65 6c 73 65 0a 20 20 20 20 20 20 20 20 72 65 74  else.        ret
3a30: 75 72 6e 20 6e 65 77 20 47 75 69 64 28 5f 61 63  urn new Guid(_ac
3a40: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
3a50: 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69  ql.GetText(_acti
3a60: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29  veStatement, i))
3a70: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
3a80: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
3a90: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 63  // Returns the c
3aa0: 6f 6c 75 6d 6e 20 61 73 20 61 20 73 68 6f 72 74  olumn as a short
3ab0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3ac0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
3ad0: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
3ae0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
3af0: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
3b00: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
3b10: 3c 72 65 74 75 72 6e 73 3e 49 6e 74 31 36 3c 2f  <returns>Int16</
3b20: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
3b30: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74  lic override Int
3b40: 31 36 20 47 65 74 49 6e 74 31 36 28 69 6e 74 20  16 GetInt16(int 
3b50: 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69  i).    {.      i
3b60: 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46  f (i >= VisibleF
3b70: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
3b80: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20  yInfo != null). 
3b90: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
3ba0: 65 79 49 6e 66 6f 2e 47 65 74 49 6e 74 31 36 28  eyInfo.GetInt16(
3bb0: 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64  i - VisibleField
3bc0: 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56  Count);..      V
3bd0: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
3be0: 79 70 65 2e 49 6e 74 31 36 29 3b 0a 20 20 20 20  ype.Int16);.    
3bf0: 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
3c00: 2e 54 6f 49 6e 74 31 36 28 5f 61 63 74 69 76 65  .ToInt16(_active
3c10: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
3c20: 65 74 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53  etInt32(_activeS
3c30: 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20  tatement, i));. 
3c40: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
3c50: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
3c60: 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f  Retrieves the co
3c70: 6c 75 6d 6e 20 61 73 20 61 6e 20 69 6e 74 0a 20  lumn as an int. 
3c80: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3c90: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
3ca0: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
3cb0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
3cc0: 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  n to retrieve</p
3cd0: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
3ce0: 65 74 75 72 6e 73 3e 49 6e 74 33 32 3c 2f 72 65  eturns>Int32</re
3cf0: 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69  turns>.    publi
3d00: 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 33 32  c override Int32
3d10: 20 47 65 74 49 6e 74 33 32 28 69 6e 74 20 69 29   GetInt32(int i)
3d20: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20  .    {.      if 
3d30: 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65  (i >= VisibleFie
3d40: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
3d50: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
3d60: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
3d70: 49 6e 66 6f 2e 47 65 74 49 6e 74 33 32 28 69 20  Info.GetInt32(i 
3d80: 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  - VisibleFieldCo
3d90: 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72  unt);..      Ver
3da0: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
3db0: 65 2e 49 6e 74 33 32 29 3b 0a 20 20 20 20 20 20  e.Int32);.      
3dc0: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
3dd0: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
3de0: 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74 61  Int32(_activeSta
3df0: 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20  tement, i);.    
3e00: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
3e10: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ary>.    /// Ret
3e20: 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d  rieves the colum
3e30: 6e 20 61 73 20 61 20 6c 6f 6e 67 0a 20 20 20 20  n as a long.    
3e40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
3e50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3e60: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
3e70: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
3e80: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
3e90: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
3ea0: 72 6e 73 3e 49 6e 74 36 34 3c 2f 72 65 74 75 72  rns>Int64</retur
3eb0: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
3ec0: 76 65 72 72 69 64 65 20 49 6e 74 36 34 20 47 65  verride Int64 Ge
3ed0: 74 49 6e 74 36 34 28 69 6e 74 20 69 29 0a 20 20  tInt64(int i).  
3ee0: 20 20 7b 0a 20 20 20 20 20 20 69 66 20 28 69 20    {.      if (i 
3ef0: 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43  >= VisibleFieldC
3f00: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
3f10: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
3f20: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
3f30: 6f 2e 47 65 74 49 6e 74 36 34 28 69 20 2d 20 56  o.GetInt64(i - V
3f40: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
3f50: 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66 79  );..      Verify
3f60: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 49  Type(i, DbType.I
3f70: 6e 74 36 34 29 3b 0a 20 20 20 20 20 20 72 65 74  nt64);.      ret
3f80: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
3f90: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74  ment._sql.GetInt
3fa0: 36 34 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  64(_activeStatem
3fb0: 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a  ent, i);.    }..
3fc0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
3fd0: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  >.    /// Retrie
3fe0: 76 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ves the name of 
3ff0: 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2f  the column.    /
4000: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
4010: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4020: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
4030: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
4040: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
4050: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
4060: 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72  ns>string</retur
4070: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
4080: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
4090: 65 74 4e 61 6d 65 28 69 6e 74 20 69 29 0a 20 20  etName(int i).  
40a0: 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43    {.      CheckC
40b0: 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20 69  losed();.      i
40c0: 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46  f (i >= VisibleF
40d0: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
40e0: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20  yInfo != null). 
40f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
4100: 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d 65 28 69  eyInfo.GetName(i
4110: 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43   - VisibleFieldC
4120: 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 72 65  ount);..      re
4130: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
4140: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d  ement._sql.Colum
4150: 6e 4e 61 6d 65 28 5f 61 63 74 69 76 65 53 74 61  nName(_activeSta
4160: 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20  tement, i);.    
4170: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
4180: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ary>.    /// Ret
4190: 72 69 65 76 65 73 20 74 68 65 20 69 20 6f 66 20  rieves the i of 
41a0: 61 20 63 6f 6c 75 6d 6e 2c 20 67 69 76 65 6e 20  a column, given 
41b0: 69 74 73 20 6e 61 6d 65 0a 20 20 20 20 2f 2f 2f  its name.    ///
41c0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
41d0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
41e0: 22 6e 61 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20  "name">The name 
41f0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
4200: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
4210: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
4220: 6e 73 3e 54 68 65 20 69 6e 74 20 69 20 6f 66 20  ns>The int i of 
4230: 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75  the column</retu
4240: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
4250: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74  override int Get
4260: 4f 72 64 69 6e 61 6c 28 73 74 72 69 6e 67 20 6e  Ordinal(string n
4270: 61 6d 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ame).    {.     
4280: 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a   CheckClosed();.
4290: 20 20 20 20 20 20 69 6e 74 20 72 20 3d 20 5f 61        int r = _a
42a0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
42b0: 73 71 6c 2e 43 6f 6c 75 6d 6e 49 6e 64 65 78 28  sql.ColumnIndex(
42c0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
42d0: 2c 20 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69  , name);.      i
42e0: 66 20 28 72 20 3d 3d 20 2d 31 20 26 26 20 5f 6b  f (r == -1 && _k
42f0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a  eyInfo != null).
4300: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
4310: 72 20 3d 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  r = _keyInfo.Get
4320: 4f 72 64 69 6e 61 6c 28 6e 61 6d 65 29 3b 0a 20  Ordinal(name);. 
4330: 20 20 20 20 20 20 20 69 66 20 28 72 20 3e 20 2d         if (r > -
4340: 31 29 20 72 20 2b 3d 20 56 69 73 69 62 6c 65 46  1) r += VisibleF
4350: 69 65 6c 64 43 6f 75 6e 74 3b 0a 20 20 20 20 20  ieldCount;.     
4360: 20 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
4370: 20 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f   r;.    }..    /
4380: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
4390: 20 2f 2f 2f 20 53 63 68 65 6d 61 20 69 6e 66 6f   /// Schema info
43a0: 72 6d 61 74 69 6f 6e 20 69 6e 20 53 51 4c 69 74  rmation in SQLit
43b0: 65 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 74  e is difficult t
43c0: 6f 20 6d 61 70 20 69 6e 74 6f 20 2e 4e 45 54 20  o map into .NET 
43d0: 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 73 6f 20  conventions, so 
43e0: 61 20 6c 6f 74 20 6f 66 20 77 6f 72 6b 20 6d 75  a lot of work mu
43f0: 73 74 20 62 65 20 64 6f 6e 65 0a 20 20 20 20 2f  st be done.    /
4400: 2f 2f 20 74 6f 20 67 61 74 68 65 72 20 74 68 65  // to gather the
4410: 20 6e 65 63 65 73 73 61 72 79 20 69 6e 66 6f 72   necessary infor
4420: 6d 61 74 69 6f 6e 20 73 6f 20 69 74 20 63 61 6e  mation so it can
4430: 20 62 65 20 72 65 70 72 65 73 65 6e 74 65 64 20   be represented 
4440: 69 6e 20 61 6e 20 41 44 4f 2e 4e 45 54 20 6d 61  in an ADO.NET ma
4450: 6e 6e 65 72 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f  nner..    /// </
4460: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
4470: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
4480: 73 20 61 20 44 61 74 61 54 61 62 6c 65 20 63 6f  s a DataTable co
4490: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73 63 68  ntaining the sch
44a0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
44b0: 66 6f 72 20 74 68 65 20 61 63 74 69 76 65 20 53  for the active S
44c0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
44d0: 62 65 69 6e 67 20 70 72 6f 63 65 73 73 65 64 2e  being processed.
44e0: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
44f0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 44  ublic override D
4500: 61 74 61 54 61 62 6c 65 20 47 65 74 53 63 68 65  ataTable GetSche
4510: 6d 61 54 61 62 6c 65 28 29 0a 20 20 20 20 7b 0a  maTable().    {.
4520: 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
4530: 53 63 68 65 6d 61 54 61 62 6c 65 28 74 72 75 65  SchemaTable(true
4540: 2c 20 66 61 6c 73 65 29 3b 0a 20 20 20 20 7d 0a  , false);.    }.
4550: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 44 61  .    internal Da
4560: 74 61 54 61 62 6c 65 20 47 65 74 53 63 68 65 6d  taTable GetSchem
4570: 61 54 61 62 6c 65 28 62 6f 6f 6c 20 77 61 6e 74  aTable(bool want
4580: 55 6e 69 71 75 65 49 6e 66 6f 2c 20 62 6f 6f 6c  UniqueInfo, bool
4590: 20 77 61 6e 74 44 65 66 61 75 6c 74 56 61 6c 75   wantDefaultValu
45a0: 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43  e).    {.      C
45b0: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 0a 20  heckClosed();.. 
45c0: 20 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 74       DataTable t
45d0: 62 6c 20 3d 20 6e 65 77 20 44 61 74 61 54 61 62  bl = new DataTab
45e0: 6c 65 28 22 53 63 68 65 6d 61 54 61 62 6c 65 22  le("SchemaTable"
45f0: 29 3b 0a 20 20 20 20 20 20 44 61 74 61 54 61 62  );.      DataTab
4600: 6c 65 20 74 62 6c 49 6e 64 65 78 65 73 20 3d 20  le tblIndexes = 
4610: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 44 61 74 61  null;.      Data
4620: 54 61 62 6c 65 20 74 62 6c 49 6e 64 65 78 43 6f  Table tblIndexCo
4630: 6c 75 6d 6e 73 3b 0a 20 20 20 20 20 20 44 61 74  lumns;.      Dat
4640: 61 52 6f 77 20 72 6f 77 3b 0a 20 20 20 20 20 20  aRow row;.      
4650: 73 74 72 69 6e 67 20 74 65 6d 70 3b 0a 20 20 20  string temp;.   
4660: 20 20 20 73 74 72 69 6e 67 20 73 74 72 43 61 74     string strCat
4670: 61 6c 6f 67 20 3d 20 22 22 3b 0a 20 20 20 20 20  alog = "";.     
4680: 20 73 74 72 69 6e 67 20 73 74 72 54 61 62 6c 65   string strTable
4690: 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 73 74 72   = "";.      str
46a0: 69 6e 67 20 73 74 72 43 6f 6c 75 6d 6e 20 3d 20  ing strColumn = 
46b0: 22 22 3b 0a 0a 20 20 20 20 20 20 74 62 6c 2e 4c  "";..      tbl.L
46c0: 6f 63 61 6c 65 20 3d 20 43 75 6c 74 75 72 65 49  ocale = CultureI
46d0: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
46e0: 74 75 72 65 3b 0a 20 20 20 20 20 20 74 62 6c 2e  ture;.      tbl.
46f0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
4700: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f  maTableColumn.Co
4710: 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66  lumnName, typeof
4720: 28 53 74 72 69 6e 67 29 29 3b 0a 20 20 20 20 20  (String));.     
4730: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
4740: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
4750: 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c  mn.ColumnOrdinal
4760: 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0a  , typeof(int));.
4770: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
4780: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
4790: 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69  eColumn.ColumnSi
47a0: 7a 65 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29  ze, typeof(int))
47b0: 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ;.      tbl.Colu
47c0: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
47d0: 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69  bleColumn.Numeri
47e0: 63 50 72 65 63 69 73 69 6f 6e 2c 20 74 79 70 65  cPrecision, type
47f0: 6f 66 28 73 68 6f 72 74 29 29 3b 0a 20 20 20 20  of(short));.    
4800: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
4810: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
4820: 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c 65  umn.NumericScale
4830: 2c 20 74 79 70 65 6f 66 28 73 68 6f 72 74 29 29  , typeof(short))
4840: 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ;.      tbl.Colu
4850: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
4860: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71  bleColumn.IsUniq
4870: 75 65 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65  ue, typeof(Boole
4880: 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  an));.      tbl.
4890: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
48a0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
48b0: 4b 65 79 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  Key, typeof(Bool
48c0: 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  ean));.      tbl
48d0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
48e0: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
48f0: 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 65 72 76 65  Column.BaseServe
4900: 72 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 73 74  rName, typeof(st
4910: 72 69 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62  ring));.      tb
4920: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
4930: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
4940: 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61  lColumn.BaseCata
4950: 6c 6f 67 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28  logName, typeof(
4960: 53 74 72 69 6e 67 29 29 3b 0a 20 20 20 20 20 20  String));.      
4970: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
4980: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
4990: 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65  n.BaseColumnName
49a0: 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29  , typeof(String)
49b0: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
49c0: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
49d0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 53  ableColumn.BaseS
49e0: 63 68 65 6d 61 4e 61 6d 65 2c 20 74 79 70 65 6f  chemaName, typeo
49f0: 66 28 53 74 72 69 6e 67 29 29 3b 0a 20 20 20 20  f(String));.    
4a00: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
4a10: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
4a20: 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d  umn.BaseTableNam
4a30: 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67  e, typeof(String
4a40: 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  ));.      tbl.Co
4a50: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
4a60: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74 61  TableColumn.Data
4a70: 54 79 70 65 2c 20 74 79 70 65 6f 66 28 54 79 70  Type, typeof(Typ
4a80: 65 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  e));.      tbl.C
4a90: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
4aa0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c  aTableColumn.All
4ab0: 6f 77 44 42 4e 75 6c 6c 2c 20 74 79 70 65 6f 66  owDBNull, typeof
4ac0: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20  (Boolean));.    
4ad0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
4ae0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
4af0: 75 6d 6e 2e 50 72 6f 76 69 64 65 72 54 79 70 65  umn.ProviderType
4b00: 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0a  , typeof(int));.
4b10: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
4b20: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
4b30: 65 43 6f 6c 75 6d 6e 2e 49 73 41 6c 69 61 73 65  eColumn.IsAliase
4b40: 64 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  d, typeof(Boolea
4b50: 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  n));.      tbl.C
4b60: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
4b70: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45  aTableColumn.IsE
4b80: 78 70 72 65 73 73 69 6f 6e 2c 20 74 79 70 65 6f  xpression, typeo
4b90: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20  f(Boolean));.   
4ba0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
4bb0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  dd(SchemaTableOp
4bc0: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41  tionalColumn.IsA
4bd0: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 2c 20 74 79  utoIncrement, ty
4be0: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a  peof(Boolean));.
4bf0: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
4c00: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
4c10: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
4c20: 49 73 52 6f 77 56 65 72 73 69 6f 6e 2c 20 74 79  IsRowVersion, ty
4c30: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a  peof(Boolean));.
4c40: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
4c50: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
4c60: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
4c70: 49 73 48 69 64 64 65 6e 2c 20 74 79 70 65 6f 66  IsHidden, typeof
4c80: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20  (Boolean));.    
4c90: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
4ca0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
4cb0: 75 6d 6e 2e 49 73 4c 6f 6e 67 2c 20 74 79 70 65  umn.IsLong, type
4cc0: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20  of(Boolean));.  
4cd0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
4ce0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
4cf0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
4d00: 52 65 61 64 4f 6e 6c 79 2c 20 74 79 70 65 6f 66  ReadOnly, typeof
4d10: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20  (Boolean));.    
4d20: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
4d30: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
4d40: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 50 72 6f 76  ionalColumn.Prov
4d50: 69 64 65 72 53 70 65 63 69 66 69 63 44 61 74 61  iderSpecificData
4d60: 54 79 70 65 2c 20 74 79 70 65 6f 66 28 54 79 70  Type, typeof(Typ
4d70: 65 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  e));.      tbl.C
4d80: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
4d90: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
4da0: 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56 61 6c 75  lumn.DefaultValu
4db0: 65 2c 20 74 79 70 65 6f 66 28 6f 62 6a 65 63 74  e, typeof(object
4dc0: 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  ));.      tbl.Co
4dd0: 6c 75 6d 6e 73 2e 41 64 64 28 22 44 61 74 61 54  lumns.Add("DataT
4de0: 79 70 65 4e 61 6d 65 22 2c 20 74 79 70 65 6f 66  ypeName", typeof
4df0: 28 73 74 72 69 6e 67 29 29 3b 0a 0a 20 20 20 20  (string));..    
4e00: 20 20 74 62 6c 2e 42 65 67 69 6e 4c 6f 61 64 44    tbl.BeginLoadD
4e10: 61 74 61 28 29 3b 0a 0a 20 20 20 20 20 20 66 6f  ata();..      fo
4e20: 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20  r (int n = 0; n 
4e30: 3c 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e  < _fieldCount; n
4e40: 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  ++).      {.    
4e50: 20 20 20 20 72 6f 77 20 3d 20 74 62 6c 2e 4e 65      row = tbl.Ne
4e60: 77 52 6f 77 28 29 3b 0a 0a 20 20 20 20 20 20 20  wRow();..       
4e70: 20 44 62 54 79 70 65 20 74 79 70 20 3d 20 47 65   DbType typ = Ge
4e80: 74 53 51 4c 69 74 65 54 79 70 65 28 6e 29 2e 54  tSQLiteType(n).T
4e90: 79 70 65 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f  ype;..        //
4ea0: 20 44 65 66 61 75 6c 74 20 73 65 74 74 69 6e 67   Default setting
4eb0: 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
4ec0: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
4ed0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43  emaTableColumn.C
4ee0: 6f 6c 75 6d 6e 4e 61 6d 65 5d 20 3d 20 47 65 74  olumnName] = Get
4ef0: 4e 61 6d 65 28 6e 29 3b 0a 20 20 20 20 20 20 20  Name(n);.       
4f00: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
4f10: 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64  Column.ColumnOrd
4f20: 69 6e 61 6c 5d 20 3d 20 6e 3b 0a 20 20 20 20 20  inal] = n;.     
4f30: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
4f40: 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53  leColumn.ColumnS
4f50: 69 7a 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e  ize] = SQLiteCon
4f60: 76 65 72 74 2e 44 62 54 79 70 65 54 6f 43 6f 6c  vert.DbTypeToCol
4f70: 75 6d 6e 53 69 7a 65 28 74 79 70 29 3b 0a 20 20  umnSize(typ);.  
4f80: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
4f90: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65  TableColumn.Nume
4fa0: 72 69 63 50 72 65 63 69 73 69 6f 6e 5d 20 3d 20  ricPrecision] = 
4fb0: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44 62  SQLiteConvert.Db
4fc0: 54 79 70 65 54 6f 4e 75 6d 65 72 69 63 50 72 65  TypeToNumericPre
4fd0: 63 69 73 69 6f 6e 28 74 79 70 29 3b 0a 20 20 20  cision(typ);.   
4fe0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
4ff0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72  ableColumn.Numer
5000: 69 63 53 63 61 6c 65 5d 20 3d 20 53 51 4c 69 74  icScale] = SQLit
5010: 65 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54  eConvert.DbTypeT
5020: 6f 4e 75 6d 65 72 69 63 53 63 61 6c 65 28 74 79  oNumericScale(ty
5030: 70 29 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  p);.        row[
5040: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
5050: 6e 2e 50 72 6f 76 69 64 65 72 54 79 70 65 5d 20  n.ProviderType] 
5060: 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  = GetSQLiteType(
5070: 6e 29 2e 54 79 70 65 3b 0a 20 20 20 20 20 20 20  n).Type;.       
5080: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
5090: 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e 67 5d 20 3d  Column.IsLong] =
50a0: 20 28 47 65 74 53 51 4c 69 74 65 54 79 70 65 28   (GetSQLiteType(
50b0: 6e 29 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70  n).Type == DbTyp
50c0: 65 2e 42 69 6e 61 72 79 29 3b 0a 20 20 20 20 20  e.Binary);.     
50d0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
50e0: 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42  leColumn.AllowDB
50f0: 4e 75 6c 6c 5d 20 3d 20 74 72 75 65 3b 0a 20 20  Null] = true;.  
5100: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
5110: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
5120: 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 5d 20  umn.IsReadOnly] 
5130: 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20  = false;.       
5140: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
5150: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
5160: 73 52 6f 77 56 65 72 73 69 6f 6e 5d 20 3d 20 66  sRowVersion] = f
5170: 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 72 6f  alse;.        ro
5180: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
5190: 75 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 20 3d 20  umn.IsUnique] = 
51a0: 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 72  false;.        r
51b0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
51c0: 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20 66 61  lumn.IsKey] = fa
51d0: 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 72 6f 77  lse;.        row
51e0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  [SchemaTableOpti
51f0: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74  onalColumn.IsAut
5200: 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 66 61  oIncrement] = fa
5210: 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 72 6f 77  lse;.        row
5220: 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  [SchemaTableOpti
5230: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65 61  onalColumn.IsRea
5240: 64 4f 6e 6c 79 5d 20 3d 20 66 61 6c 73 65 3b 0a  dOnly] = false;.
5250: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
5260: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61  maTableColumn.Da
5270: 74 61 54 79 70 65 5d 20 3d 20 47 65 74 46 69 65  taType] = GetFie
5280: 6c 64 54 79 70 65 28 6e 29 3b 0a 20 20 20 20 20  ldType(n);.     
5290: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
52a0: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
52b0: 2e 49 73 48 69 64 64 65 6e 5d 20 3d 20 66 61 6c  .IsHidden] = fal
52c0: 73 65 3b 0a 0a 20 20 20 20 20 20 20 20 73 74 72  se;..        str
52d0: 43 6f 6c 75 6d 6e 20 3d 20 5f 63 6f 6d 6d 61 6e  Column = _comman
52e0: 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71  d.Connection._sq
52f0: 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c  l.ColumnOriginal
5300: 4e 61 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74  Name(_activeStat
5310: 65 6d 65 6e 74 2c 20 6e 29 3b 0a 20 20 20 20 20  ement, n);.     
5320: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
5330: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43  NullOrEmpty(strC
5340: 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29  olumn) == false)
5350: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
5360: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d  Column.BaseColum
5370: 6e 4e 61 6d 65 5d 20 3d 20 73 74 72 43 6f 6c 75  nName] = strColu
5380: 6d 6e 3b 0a 0a 20 20 20 20 20 20 20 20 72 6f 77  mn;..        row
5390: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
53a0: 6d 6e 2e 49 73 45 78 70 72 65 73 73 69 6f 6e 5d  mn.IsExpression]
53b0: 20 3d 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   = String.IsNull
53c0: 4f 72 45 6d 70 74 79 28 73 74 72 43 6f 6c 75 6d  OrEmpty(strColum
53d0: 6e 29 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  n);.        row[
53e0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
53f0: 6e 2e 49 73 41 6c 69 61 73 65 64 5d 20 3d 20 28  n.IsAliased] = (
5400: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47  String.Compare(G
5410: 65 74 4e 61 6d 65 28 6e 29 2c 20 73 74 72 43 6f  etName(n), strCo
5420: 6c 75 6d 6e 2c 20 74 72 75 65 2c 20 43 75 6c 74  lumn, true, Cult
5430: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
5440: 74 43 75 6c 74 75 72 65 29 20 21 3d 20 30 29 3b  tCulture) != 0);
5450: 0a 0a 20 20 20 20 20 20 20 20 74 65 6d 70 20 3d  ..        temp =
5460: 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63   _command.Connec
5470: 74 69 6f 6e 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  tion._sql.Column
5480: 54 61 62 6c 65 4e 61 6d 65 28 5f 61 63 74 69 76  TableName(_activ
5490: 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e 29 3b 0a  eStatement, n);.
54a0: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
54b0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
54c0: 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c 73 65 29  (temp) == false)
54d0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
54e0: 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65  Column.BaseTable
54f0: 4e 61 6d 65 5d 20 3d 20 74 65 6d 70 3b 0a 0a 20  Name] = temp;.. 
5500: 20 20 20 20 20 20 20 74 65 6d 70 20 3d 20 5f 63         temp = _c
5510: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
5520: 6e 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 44 61 74  n._sql.ColumnDat
5530: 61 62 61 73 65 4e 61 6d 65 28 5f 61 63 74 69 76  abaseName(_activ
5540: 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e 29 3b 0a  eStatement, n);.
5550: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
5560: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
5570: 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c 73 65 29  (temp) == false)
5580: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
5590: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42  OptionalColumn.B
55a0: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20  aseCatalogName] 
55b0: 3d 20 74 65 6d 70 3b 0a 0a 20 20 20 20 20 20 20  = temp;..       
55c0: 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65   string dataType
55d0: 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20   = null;.       
55e0: 20 2f 2f 20 49 66 20 77 65 20 68 61 76 65 20 61   // If we have a
55f0: 20 74 61 62 6c 65 2d 62 6f 75 6e 64 20 63 6f 6c   table-bound col
5600: 75 6d 6e 2c 20 65 78 74 72 61 63 74 20 74 68 65  umn, extract the
5610: 20 65 78 74 72 61 20 69 6e 66 6f 72 6d 61 74 69   extra informati
5620: 6f 6e 20 66 72 6f 6d 20 69 74 0a 20 20 20 20 20  on from it.     
5630: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
5640: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43  NullOrEmpty(strC
5650: 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29  olumn) == false)
5660: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
5670: 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6c 6c       string coll
5680: 53 65 71 3b 0a 20 20 20 20 20 20 20 20 20 20 62  Seq;.          b
5690: 6f 6f 6c 20 62 4e 6f 74 4e 75 6c 6c 3b 0a 20 20  ool bNotNull;.  
56a0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 62 50 72          bool bPr
56b0: 69 6d 61 72 79 4b 65 79 3b 0a 20 20 20 20 20 20  imaryKey;.      
56c0: 20 20 20 20 62 6f 6f 6c 20 62 41 75 74 6f 49 6e      bool bAutoIn
56d0: 63 72 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 20  crement;.       
56e0: 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 53 69     string[] arSi
56f0: 7a 65 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 2f  ze;..          /
5700: 2f 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e  / Get the column
5710: 20 6d 65 74 61 20 64 61 74 61 0a 20 20 20 20 20   meta data.     
5720: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f       _command.Co
5730: 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2e 43 6f  nnection._sql.Co
5740: 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 0a 20 20  lumnMetaData(.  
5750: 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e            (strin
5760: 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  g)row[SchemaTabl
5770: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
5780: 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d  BaseCatalogName]
5790: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73  ,.            (s
57a0: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
57b0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
57c0: 54 61 62 6c 65 4e 61 6d 65 5d 2c 0a 20 20 20 20  TableName],.    
57d0: 20 20 20 20 20 20 20 20 73 74 72 43 6f 6c 75 6d          strColum
57e0: 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  n,.            o
57f0: 75 74 20 64 61 74 61 54 79 70 65 2c 20 6f 75 74  ut dataType, out
5800: 20 63 6f 6c 6c 53 65 71 2c 20 6f 75 74 20 62 4e   collSeq, out bN
5810: 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62 50 72 69  otNull, out bPri
5820: 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 62 41 75  maryKey, out bAu
5830: 74 6f 49 6e 63 72 65 6d 65 6e 74 29 3b 0a 0a 20  toIncrement);.. 
5840: 20 20 20 20 20 20 20 20 20 69 66 20 28 62 4e 6f           if (bNo
5850: 74 4e 75 6c 6c 20 7c 7c 20 62 50 72 69 6d 61 72  tNull || bPrimar
5860: 79 4b 65 79 29 20 72 6f 77 5b 53 63 68 65 6d 61  yKey) row[Schema
5870: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f  TableColumn.Allo
5880: 77 44 42 4e 75 6c 6c 5d 20 3d 20 66 61 6c 73 65  wDBNull] = false
5890: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 72 6f 77  ;..          row
58a0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
58b0: 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20 62 50 72 69  mn.IsKey] = bPri
58c0: 6d 61 72 79 4b 65 79 3b 0a 20 20 20 20 20 20 20  maryKey;.       
58d0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
58e0: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
58f0: 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74  .IsAutoIncrement
5900: 5d 20 3d 20 62 41 75 74 6f 49 6e 63 72 65 6d 65  ] = bAutoIncreme
5910: 6e 74 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 2f  nt;..          /
5920: 2f 20 46 6f 72 20 74 79 70 65 73 20 6c 69 6b 65  / For types like
5930: 20 76 61 72 63 68 61 72 28 35 30 29 20 61 6e 64   varchar(50) and
5940: 20 73 75 63 68 2c 20 65 78 74 72 61 63 74 20 74   such, extract t
5950: 68 65 20 73 69 7a 65 0a 20 20 20 20 20 20 20 20  he size.        
5960: 20 20 61 72 53 69 7a 65 20 3d 20 64 61 74 61 54    arSize = dataT
5970: 79 70 65 2e 53 70 6c 69 74 28 27 28 27 29 3b 0a  ype.Split('(');.
5980: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
5990: 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29  Size.Length > 1)
59a0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20  .          {.   
59b0: 20 20 20 20 20 20 20 20 20 64 61 74 61 54 79 70           dataTyp
59c0: 65 20 3d 20 61 72 53 69 7a 65 5b 30 5d 3b 0a 20  e = arSize[0];. 
59d0: 20 20 20 20 20 20 20 20 20 20 20 61 72 53 69 7a             arSiz
59e0: 65 20 3d 20 61 72 53 69 7a 65 5b 31 5d 2e 53 70  e = arSize[1].Sp
59f0: 6c 69 74 28 27 29 27 29 3b 0a 20 20 20 20 20 20  lit(')');.      
5a00: 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a 65        if (arSize
5a10: 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20 20 20  .Length > 1).   
5a20: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
5a30: 20 20 20 20 20 20 20 20 20 61 72 53 69 7a 65 20           arSize 
5a40: 3d 20 61 72 53 69 7a 65 5b 30 5d 2e 53 70 6c 69  = arSize[0].Spli
5a50: 74 28 27 2c 27 2c 20 27 2e 27 29 3b 0a 20 20 20  t(',', '.');.   
5a60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 47             if (G
5a70: 65 74 53 51 4c 69 74 65 54 79 70 65 28 6e 29 2e  etSQLiteType(n).
5a80: 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 53  Type == DbType.S
5a90: 74 72 69 6e 67 20 7c 7c 20 47 65 74 53 51 4c 69  tring || GetSQLi
5aa0: 74 65 54 79 70 65 28 6e 29 2e 54 79 70 65 20 3d  teType(n).Type =
5ab0: 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29  = DbType.Binary)
5ac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
5ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5ae0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
5af0: 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a  Column.ColumnSiz
5b00: 65 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49  e] = Convert.ToI
5b10: 6e 74 33 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20  nt32(arSize[0], 
5b20: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
5b30: 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20  riantCulture);. 
5b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
5b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
5b60: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
5b70: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
5b80: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
5b90: 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50  eColumn.NumericP
5ba0: 72 65 63 69 73 69 6f 6e 5d 20 3d 20 43 6f 6e 76  recision] = Conv
5bb0: 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53 69  ert.ToInt32(arSi
5bc0: 7a 65 5b 30 5d 2c 20 43 75 6c 74 75 72 65 49 6e  ze[0], CultureIn
5bd0: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
5be0: 75 72 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ure);.          
5bf0: 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a 65        if (arSize
5c00: 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20 20 20  .Length > 1).   
5c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5c20: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
5c30: 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c  lumn.NumericScal
5c40: 65 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49  e] = Convert.ToI
5c50: 6e 74 33 32 28 61 72 53 69 7a 65 5b 31 5d 2c 20  nt32(arSize[1], 
5c60: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
5c70: 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20  riantCulture);. 
5c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
5c90: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
5ca0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
5cb0: 20 20 20 20 69 66 20 28 77 61 6e 74 44 65 66 61      if (wantDefa
5cc0: 75 6c 74 56 61 6c 75 65 29 0a 20 20 20 20 20 20  ultValue).      
5cd0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
5ce0: 20 20 2f 2f 20 44 65 74 65 72 6d 69 6e 65 20 74    // Determine t
5cf0: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
5d00: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c   for the column,
5d10: 20 77 68 69 63 68 20 73 75 63 6b 73 20 62 65 63   which sucks bec
5d20: 61 75 73 65 20 77 65 20 68 61 76 65 20 74 6f 20  ause we have to 
5d30: 71 75 65 72 79 20 74 68 65 20 73 63 68 65 6d 61  query the schema
5d40: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
5d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
5d60: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
5d70: 64 20 63 6d 64 54 61 62 6c 65 20 3d 20 6e 65 77  d cmdTable = new
5d80: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 53   SQLiteCommand(S
5d90: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c  tring.Format(Cul
5da0: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
5db0: 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 52 41 47  ntCulture, "PRAG
5dc0: 4d 41 20 5b 7b 30 7d 5d 2e 54 41 42 4c 45 5f 49  MA [{0}].TABLE_I
5dd0: 4e 46 4f 28 5b 7b 31 7d 5d 29 22 2c 0a 20 20 20  NFO([{1}])",.   
5de0: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
5df0: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
5e00: 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74  alColumn.BaseCat
5e10: 61 6c 6f 67 4e 61 6d 65 5d 2c 0a 20 20 20 20 20  alogName],.     
5e20: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
5e30: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
5e40: 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 0a 20 20  aseTableName].  
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 29 2c 20 5f              ), _
5e60: 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69  command.Connecti
5e70: 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  on)).           
5e80: 20 75 73 69 6e 67 20 28 44 62 44 61 74 61 52 65   using (DbDataRe
5e90: 61 64 65 72 20 72 64 54 61 62 6c 65 20 3d 20 63  ader rdTable = c
5ea0: 6d 64 54 61 62 6c 65 2e 45 78 65 63 75 74 65 52  mdTable.ExecuteR
5eb0: 65 61 64 65 72 28 29 29 0a 20 20 20 20 20 20 20  eader()).       
5ec0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
5ed0: 20 20 20 20 20 2f 2f 20 46 69 6e 64 20 74 68 65       // Find the
5ee0: 20 6d 61 74 63 68 69 6e 67 20 63 6f 6c 75 6d 6e   matching column
5ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77  .              w
5f00: 68 69 6c 65 20 28 72 64 54 61 62 6c 65 2e 52 65  hile (rdTable.Re
5f10: 61 64 28 29 29 0a 20 20 20 20 20 20 20 20 20 20  ad()).          
5f20: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
5f30: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
5f40: 2e 43 6f 6d 70 61 72 65 28 28 73 74 72 69 6e 67  .Compare((string
5f50: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
5f60: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d  Column.BaseColum
5f70: 6e 4e 61 6d 65 5d 2c 20 72 64 54 61 62 6c 65 2e  nName], rdTable.
5f80: 47 65 74 53 74 72 69 6e 67 28 31 29 2c 20 74 72  GetString(1), tr
5f90: 75 65 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  ue, CultureInfo.
5fa0: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
5fb0: 29 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20  ) == 0).        
5fc0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
5fd0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5fe0: 72 64 54 61 62 6c 65 2e 49 73 44 42 4e 75 6c 6c  rdTable.IsDBNull
5ff0: 28 34 29 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20  (4) == false).  
6000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6010: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
6020: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
6030: 44 65 66 61 75 6c 74 56 61 6c 75 65 5d 20 3d 20  DefaultValue] = 
6040: 72 64 54 61 62 6c 65 5b 34 5d 3b 0a 0a 20 20 20  rdTable[4];..   
6050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
6060: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  reak;.          
6070: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
6080: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
6090: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
60a0: 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  }..          // 
60b0: 44 65 74 65 72 6d 69 6e 65 20 49 73 55 6e 69 71  Determine IsUniq
60c0: 75 65 20 70 72 6f 70 65 72 6c 79 2c 20 77 68 69  ue properly, whi
60d0: 63 68 20 69 73 20 61 20 70 61 69 6e 20 69 6e 20  ch is a pain in 
60e0: 74 68 65 20 62 75 74 74 21 0a 20 20 20 20 20 20  the butt!.      
60f0: 20 20 20 20 69 66 20 28 77 61 6e 74 55 6e 69 71      if (wantUniq
6100: 75 65 49 6e 66 6f 29 0a 20 20 20 20 20 20 20 20  ueInfo).        
6110: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
6120: 69 66 20 28 28 73 74 72 69 6e 67 29 72 6f 77 5b  if ((string)row[
6130: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
6140: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61  nalColumn.BaseCa
6150: 74 61 6c 6f 67 4e 61 6d 65 5d 20 21 3d 20 73 74  talogName] != st
6160: 72 43 61 74 61 6c 6f 67 0a 20 20 20 20 20 20 20  rCatalog.       
6170: 20 20 20 20 20 20 20 7c 7c 20 28 73 74 72 69 6e         || (strin
6180: 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  g)row[SchemaTabl
6190: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c  eColumn.BaseTabl
61a0: 65 4e 61 6d 65 5d 20 21 3d 20 73 74 72 54 61 62  eName] != strTab
61b0: 6c 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  le).            
61c0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
61d0: 73 74 72 43 61 74 61 6c 6f 67 20 3d 20 28 73 74  strCatalog = (st
61e0: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
61f0: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
6200: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
6210: 6d 65 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  me];.           
6220: 20 20 20 73 74 72 54 61 62 6c 65 20 3d 20 28 73     strTable = (s
6230: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
6240: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
6250: 54 61 62 6c 65 4e 61 6d 65 5d 3b 0a 0a 20 20 20  TableName];..   
6260: 20 20 20 20 20 20 20 20 20 20 20 74 62 6c 49 6e             tblIn
6270: 64 65 78 65 73 20 3d 20 5f 63 6f 6d 6d 61 6e 64  dexes = _command
6280: 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53  .Connection.GetS
6290: 63 68 65 6d 61 28 22 49 6e 64 65 78 65 73 22 2c  chema("Indexes",
62a0: 20 6e 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b 0a   new string[] {.
62b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62c0: 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65  (string)row[Sche
62d0: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
62e0: 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f  olumn.BaseCatalo
62f0: 67 4e 61 6d 65 5d 2c 0a 20 20 20 20 20 20 20 20  gName],.        
6300: 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 0a 20 20          null,.  
6310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
6320: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
6330: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
6340: 54 61 62 6c 65 4e 61 6d 65 5d 2c 0a 20 20 20 20  TableName],.    
6350: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
6360: 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   });.           
6370: 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6380: 66 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f 77  foreach (DataRow
6390: 20 72 6f 77 49 6e 64 65 78 65 73 20 69 6e 20 74   rowIndexes in t
63a0: 62 6c 49 6e 64 65 78 65 73 2e 52 6f 77 73 29 0a  blIndexes.Rows).
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
63c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 62 6c 49              tblI
63d0: 6e 64 65 78 43 6f 6c 75 6d 6e 73 20 3d 20 5f 63  ndexColumns = _c
63e0: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
63f0: 6e 2e 47 65 74 53 63 68 65 6d 61 28 22 49 6e 64  n.GetSchema("Ind
6400: 65 78 43 6f 6c 75 6d 6e 73 22 2c 20 6e 65 77 20  exColumns", new 
6410: 73 74 72 69 6e 67 5b 5d 20 7b 0a 20 20 20 20 20  string[] {.     
6420: 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
6430: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
6440: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
6450: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
6460: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ],.             
6470: 20 20 20 6e 75 6c 6c 2c 0a 20 20 20 20 20 20 20     null,.       
6480: 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67           (string
6490: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
64a0: 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65  Column.BaseTable
64b0: 4e 61 6d 65 5d 2c 0a 20 20 20 20 20 20 20 20 20  Name],.         
64c0: 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 72         (string)r
64d0: 6f 77 49 6e 64 65 78 65 73 5b 22 49 4e 44 45 58  owIndexes["INDEX
64e0: 5f 4e 41 4d 45 22 5d 2c 0a 20 20 20 20 20 20 20  _NAME"],.       
64f0: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 0a 20 20           null.  
6500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29                })
6510: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
6520: 66 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f 77  foreach (DataRow
6530: 20 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64 65 78 20   rowColumnIndex 
6540: 69 6e 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d  in tblIndexColum
6550: 6e 73 2e 52 6f 77 73 29 0a 20 20 20 20 20 20 20  ns.Rows).       
6560: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
6570: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
6580: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 28 73 74 72  ing.Compare((str
6590: 69 6e 67 29 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64  ing)rowColumnInd
65a0: 65 78 5b 22 43 4f 4c 55 4d 4e 5f 4e 41 4d 45 22  ex["COLUMN_NAME"
65b0: 5d 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c 20 74 72  ], strColumn, tr
65c0: 75 65 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  ue, CultureInfo.
65d0: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
65e0: 29 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20  ) == 0).        
65f0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
6600: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6610: 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e  tblIndexColumns.
6620: 52 6f 77 73 2e 43 6f 75 6e 74 20 3d 3d 20 31 20  Rows.Count == 1 
6630: 26 26 20 28 62 6f 6f 6c 29 72 6f 77 5b 53 63 68  && (bool)row[Sch
6640: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41  emaTableColumn.A
6650: 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 3d 20 66  llowDBNull] == f
6660: 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20 20 20  alse).          
6670: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
6680: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
6690: 49 73 55 6e 69 71 75 65 5d 20 3d 20 72 6f 77 49  IsUnique] = rowI
66a0: 6e 64 65 78 65 73 5b 22 55 4e 49 51 55 45 22 5d  ndexes["UNIQUE"]
66b0: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
66c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
66d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
66f0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
6700: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
6710: 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  }..        if (S
6720: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
6730: 70 74 79 28 64 61 74 61 54 79 70 65 29 29 0a 20  pty(dataType)). 
6740: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
6750: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20     TypeAffinity 
6760: 61 66 66 69 6e 3b 0a 20 20 20 20 20 20 20 20 20  affin;.         
6770: 20 64 61 74 61 54 79 70 65 20 3d 20 5f 61 63 74   dataType = _act
6780: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
6790: 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 5f 61 63  l.ColumnType(_ac
67a0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e  tiveStatement, n
67b0: 2c 20 6f 75 74 20 61 66 66 69 6e 29 3b 0a 20 20  , out affin);.  
67c0: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
67d0: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
67e0: 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74 61 54 79  llOrEmpty(dataTy
67f0: 70 65 29 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20  pe) == false).  
6800: 20 20 20 20 20 20 20 20 72 6f 77 5b 22 44 61 74          row["Dat
6810: 61 54 79 70 65 4e 61 6d 65 22 5d 20 3d 20 64 61  aTypeName"] = da
6820: 74 61 54 79 70 65 3b 0a 0a 20 20 20 20 20 20 20  taType;..       
6830: 20 74 62 6c 2e 52 6f 77 73 2e 41 64 64 28 72 6f   tbl.Rows.Add(ro
6840: 77 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  w);.      }..   
6850: 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20     if (_keyInfo 
6860: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  != null).       
6870: 20 5f 6b 65 79 49 6e 66 6f 2e 41 70 70 65 6e 64   _keyInfo.Append
6880: 53 63 68 65 6d 61 54 61 62 6c 65 28 74 62 6c 29  SchemaTable(tbl)
6890: 3b 0a 0a 20 20 20 20 20 20 74 62 6c 2e 41 63 63  ;..      tbl.Acc
68a0: 65 70 74 43 68 61 6e 67 65 73 28 29 3b 0a 20 20  eptChanges();.  
68b0: 20 20 20 20 74 62 6c 2e 45 6e 64 4c 6f 61 64 44      tbl.EndLoadD
68c0: 61 74 61 28 29 3b 0a 0a 20 20 20 20 20 20 72 65  ata();..      re
68d0: 74 75 72 6e 20 74 62 6c 3b 0a 20 20 20 20 7d 0a  turn tbl;.    }.
68e0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
68f0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  y>.    /// Retri
6900: 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  eves the column 
6910: 61 73 20 61 20 73 74 72 69 6e 67 0a 20 20 20 20  as a string.    
6920: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
6930: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
6940: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
6950: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
6960: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
6970: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
6980: 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75  rns>string</retu
6990: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
69a0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
69b0: 47 65 74 53 74 72 69 6e 67 28 69 6e 74 20 69 29  GetString(int i)
69c0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20  .    {.      if 
69d0: 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65  (i >= VisibleFie
69e0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
69f0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
6a00: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
6a10: 49 6e 66 6f 2e 47 65 74 53 74 72 69 6e 67 28 69  Info.GetString(i
6a20: 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43   - VisibleFieldC
6a30: 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56 65  ount);..      Ve
6a40: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
6a50: 70 65 2e 53 74 72 69 6e 67 29 3b 0a 20 20 20 20  pe.String);.    
6a60: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
6a70: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
6a80: 65 74 54 65 78 74 28 5f 61 63 74 69 76 65 53 74  etText(_activeSt
6a90: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20  atement, i);.   
6aa0: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
6ab0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65  mary>.    /// Re
6ac0: 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75  trieves the colu
6ad0: 6d 6e 20 61 73 20 61 6e 20 6f 62 6a 65 63 74 20  mn as an object 
6ae0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
6af0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
6b00: 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20  datatype of the 
6b10: 63 6f 6c 75 6d 6e 0a 20 20 20 20 2f 2f 2f 20 3c  column.    /// <
6b20: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
6b30: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
6b40: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
6b50: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
6b60: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  rieve</param>.  
6b70: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 6f    /// <returns>o
6b80: 62 6a 65 63 74 3c 2f 72 65 74 75 72 6e 73 3e 0a  bject</returns>.
6b90: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
6ba0: 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56 61  ide object GetVa
6bb0: 6c 75 65 28 69 6e 74 20 69 29 0a 20 20 20 20 7b  lue(int i).    {
6bc0: 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73  .      CheckClos
6bd0: 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20  ed();..      if 
6be0: 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65  (i >= VisibleFie
6bf0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
6c00: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
6c10: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
6c20: 49 6e 66 6f 2e 47 65 74 56 61 6c 75 65 28 69 20  Info.GetValue(i 
6c30: 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  - VisibleFieldCo
6c40: 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 53 51 4c  unt);..      SQL
6c50: 69 74 65 54 79 70 65 20 74 79 70 20 3d 20 47 65  iteType typ = Ge
6c60: 74 53 51 4c 69 74 65 54 79 70 65 28 69 29 3b 0a  tSQLiteType(i);.
6c70: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61  .      return _a
6c80: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
6c90: 73 71 6c 2e 47 65 74 56 61 6c 75 65 28 5f 61 63  sql.GetValue(_ac
6ca0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
6cb0: 2c 20 74 79 70 29 3b 0a 20 20 20 20 7d 0a 0a 20  , typ);.    }.. 
6cc0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6cd0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 65 69 76  .    /// Retreiv
6ce0: 65 73 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  es the values of
6cf0: 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e   multiple column
6d00: 73 2c 20 75 70 20 74 6f 20 74 68 65 20 73 69 7a  s, up to the siz
6d10: 65 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65  e of the supplie
6d20: 64 20 61 72 72 61 79 0a 20 20 20 20 2f 2f 2f 20  d array.    /// 
6d30: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
6d40: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
6d50: 76 61 6c 75 65 73 22 3e 54 68 65 20 61 72 72 61  values">The arra
6d60: 79 20 74 6f 20 66 69 6c 6c 20 77 69 74 68 20 76  y to fill with v
6d70: 61 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20 63  alues from the c
6d80: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 63 75  olumns in the cu
6d90: 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 3c  rrent resultset<
6da0: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
6db0: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d  <returns>The num
6dc0: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72  ber of columns r
6dd0: 65 74 72 69 65 76 65 64 3c 2f 72 65 74 75 72 6e  etrieved</return
6de0: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
6df0: 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 56 61  erride int GetVa
6e00: 6c 75 65 73 28 6f 62 6a 65 63 74 5b 5d 20 76 61  lues(object[] va
6e10: 6c 75 65 73 29 0a 20 20 20 20 7b 0a 20 20 20 20  lues).    {.    
6e20: 20 20 69 6e 74 20 6e 4d 61 78 20 3d 20 46 69 65    int nMax = Fie
6e30: 6c 64 43 6f 75 6e 74 3b 0a 20 20 20 20 20 20 69  ldCount;.      i
6e40: 66 20 28 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68  f (values.Length
6e50: 20 3c 20 6e 4d 61 78 29 20 6e 4d 61 78 20 3d 20   < nMax) nMax = 
6e60: 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 3b 0a 0a  values.Length;..
6e70: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e        for (int n
6e80: 20 3d 20 30 3b 20 6e 20 3c 20 6e 4d 61 78 3b 20   = 0; n < nMax; 
6e90: 6e 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 20 20 20  n++).      {.   
6ea0: 20 20 20 20 20 76 61 6c 75 65 73 5b 6e 5d 20 3d       values[n] =
6eb0: 20 47 65 74 56 61 6c 75 65 28 6e 29 3b 0a 20 20   GetValue(n);.  
6ec0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 65 74      }..      ret
6ed0: 75 72 6e 20 6e 4d 61 78 3b 0a 20 20 20 20 7d 0a  urn nMax;.    }.
6ee0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
6ef0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  y>.    /// Retur
6f00: 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20 72  ns True if the r
6f10: 65 73 75 6c 74 73 65 74 20 68 61 73 20 72 6f 77  esultset has row
6f20: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 66 65  s that can be fe
6f30: 74 63 68 65 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f  tched.    /// </
6f40: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75 62  summary>.    pub
6f50: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
6f60: 6c 20 48 61 73 52 6f 77 73 0a 20 20 20 20 7b 0a  l HasRows.    {.
6f70: 20 20 20 20 20 20 67 65 74 0a 20 20 20 20 20 20        get.      
6f80: 7b 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 43  {.        CheckC
6f90: 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20 20  losed();.       
6fa0: 20 72 65 74 75 72 6e 20 28 5f 72 65 61 64 69 6e   return (_readin
6fb0: 67 53 74 61 74 65 20 21 3d 20 31 29 3b 0a 20 20  gState != 1);.  
6fc0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
6fd0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
6fe0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54     /// Returns T
6ff0: 72 75 65 20 69 66 20 74 68 65 20 64 61 74 61 20  rue if the data 
7000: 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
7010: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
7020: 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ry>.    public o
7030: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 43  verride bool IsC
7040: 6c 6f 73 65 64 0a 20 20 20 20 7b 0a 20 20 20 20  losed.    {.    
7050: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 28    get { return (
7060: 5f 63 6f 6d 6d 61 6e 64 20 3d 3d 20 6e 75 6c 6c  _command == null
7070: 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ); }.    }..    
7080: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
7090: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72    /// Returns Tr
70a0: 75 65 20 69 66 20 74 68 65 20 73 70 65 63 69 66  ue if the specif
70b0: 69 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 75  ied column is nu
70c0: 6c 6c 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ll.    /// </sum
70d0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
70e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
70f0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
7100: 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76  olumn to retriev
7110: 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  e</param>.    //
7120: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20  / <returns>True 
7130: 6f 72 20 46 61 6c 73 65 3c 2f 72 65 74 75 72 6e  or False</return
7140: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
7150: 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 44 42  erride bool IsDB
7160: 4e 75 6c 6c 28 69 6e 74 20 69 29 0a 20 20 20 20  Null(int i).    
7170: 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  {.      CheckClo
7180: 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66  sed();..      if
7190: 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69   (i >= VisibleFi
71a0: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
71b0: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20  Info != null).  
71c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
71d0: 79 49 6e 66 6f 2e 49 73 44 42 4e 75 6c 6c 28 69  yInfo.IsDBNull(i
71e0: 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43   - VisibleFieldC
71f0: 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 72 65  ount);..      re
7200: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
7210: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4e 75 6c  ement._sql.IsNul
7220: 6c 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  l(_activeStateme
7230: 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20  nt, i);.    }.. 
7240: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
7250: 0a 20 20 20 20 2f 2f 2f 20 4d 6f 76 65 73 20 74  .    /// Moves t
7260: 6f 20 74 68 65 20 6e 65 78 74 20 72 65 73 75 6c  o the next resul
7270: 74 73 65 74 20 69 6e 20 6d 75 6c 74 69 70 6c 65  tset in multiple
7280: 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 53   row-returning S
7290: 51 4c 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20 20 20  QL command..    
72a0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
72b0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
72c0: 54 72 75 65 20 69 66 20 74 68 65 20 63 6f 6d 6d  True if the comm
72d0: 61 6e 64 20 77 61 73 20 73 75 63 63 65 73 73 66  and was successf
72e0: 75 6c 20 61 6e 64 20 61 20 6e 65 77 20 72 65 73  ul and a new res
72f0: 75 6c 74 73 65 74 20 69 73 20 61 76 61 69 6c 61  ultset is availa
7300: 62 6c 65 2c 20 46 61 6c 73 65 20 6f 74 68 65 72  ble, False other
7310: 77 69 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a  wise.</returns>.
7320: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
7330: 69 64 65 20 62 6f 6f 6c 20 4e 65 78 74 52 65 73  ide bool NextRes
7340: 75 6c 74 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  ult().    {.    
7350: 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b    CheckClosed();
7360: 0a 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74  ..      SQLiteSt
7370: 61 74 65 6d 65 6e 74 20 73 74 6d 74 20 3d 20 6e  atement stmt = n
7380: 75 6c 6c 3b 0a 20 20 20 20 20 20 69 6e 74 20 66  ull;.      int f
7390: 69 65 6c 64 43 6f 75 6e 74 3b 0a 0a 20 20 20 20  ieldCount;..    
73a0: 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0a 20    while (true). 
73b0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69       {.        i
73c0: 66 20 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  f (_activeStatem
73d0: 65 6e 74 20 21 3d 20 6e 75 6c 6c 20 26 26 20 73  ent != null && s
73e0: 74 6d 74 20 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20  tmt == null).   
73f0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
7400: 20 2f 2f 20 52 65 73 65 74 20 74 68 65 20 70 72   // Reset the pr
7410: 65 76 69 6f 75 73 6c 79 2d 65 78 65 63 75 74 65  eviously-execute
7420: 64 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 20 20  d statement.    
7430: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
7440: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 52 65 73 65  tement._sql.Rese
7450: 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  t(_activeStateme
7460: 6e 74 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
7470: 2f 2f 20 49 66 20 77 65 27 72 65 20 6f 6e 6c 79  // If we're only
7480: 20 73 75 70 70 6f 73 65 64 20 74 6f 20 72 65 74   supposed to ret
7490: 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  urn a single row
74a0: 73 65 74 2c 20 73 74 65 70 20 74 68 72 6f 75 67  set, step throug
74b0: 68 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20  h all remaining 
74c0: 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 63 65 20  statements once 
74d0: 75 6e 74 69 6c 0a 20 20 20 20 20 20 20 20 20 20  until.          
74e0: 2f 2f 20 74 68 65 79 20 61 72 65 20 61 6c 6c 20  // they are all 
74f0: 64 6f 6e 65 20 61 6e 64 20 72 65 74 75 72 6e 20  done and return 
7500: 66 61 6c 73 65 20 74 6f 20 69 6e 64 69 63 61 74  false to indicat
7510: 65 20 6e 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74  e no more result
7520: 73 65 74 73 20 65 78 69 73 74 2e 0a 20 20 20 20  sets exist..    
7530: 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d        if ((_comm
7540: 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f  andBehavior & Co
7550: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 69  mmandBehavior.Si
7560: 6e 67 6c 65 52 65 73 75 6c 74 29 20 21 3d 20 30  ngleResult) != 0
7570: 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  ).          {.  
7580: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 3b            for (;
7590: 20 3b 20 29 0a 20 20 20 20 20 20 20 20 20 20 20   ; ).           
75a0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
75b0: 20 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64   stmt = _command
75c0: 2e 47 65 74 53 74 61 74 65 6d 65 6e 74 28 5f 61  .GetStatement(_a
75d0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
75e0: 64 65 78 20 2b 20 31 29 3b 0a 20 20 20 20 20 20  dex + 1);.      
75f0: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74          if (stmt
7600: 20 3d 3d 20 6e 75 6c 6c 29 20 62 72 65 61 6b 3b   == null) break;
7610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
7620: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49  activeStatementI
7630: 6e 64 65 78 2b 2b 3b 0a 0a 20 20 20 20 20 20 20  ndex++;..       
7640: 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c         stmt._sql
7650: 2e 53 74 65 70 28 73 74 6d 74 29 3b 0a 20 20 20  .Step(stmt);.   
7660: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
7670: 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43  tmt._sql.ColumnC
7680: 6f 75 6e 74 28 73 74 6d 74 29 20 3d 3d 20 30 29  ount(stmt) == 0)
7690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
76a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
76b0: 20 69 66 20 28 5f 72 6f 77 73 41 66 66 65 63 74   if (_rowsAffect
76c0: 65 64 20 3d 3d 20 2d 31 29 20 5f 72 6f 77 73 41  ed == -1) _rowsA
76d0: 66 66 65 63 74 65 64 20 3d 20 30 3b 0a 20 20 20  ffected = 0;.   
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 6f               _ro
76f0: 77 73 41 66 66 65 63 74 65 64 20 2b 3d 20 73 74  wsAffected += st
7700: 6d 74 2e 5f 73 71 6c 2e 43 68 61 6e 67 65 73 3b  mt._sql.Changes;
7710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
7720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
7730: 74 6d 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28 73  tmt._sql.Reset(s
7740: 74 6d 74 29 3b 20 2f 2f 20 47 6f 74 74 61 20 72  tmt); // Gotta r
7750: 65 73 65 74 20 61 66 74 65 72 20 65 76 65 72 79  eset after every
7760: 20 73 74 65 70 20 74 6f 20 72 65 6c 65 61 73 65   step to release
7770: 20 61 6e 79 20 6c 6f 63 6b 73 20 61 6e 64 20 73   any locks and s
7780: 75 63 68 21 0a 20 20 20 20 20 20 20 20 20 20 20  uch!.           
7790: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72   }.            r
77a0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20  eturn false;.   
77b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
77c0: 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 47   }..        // G
77d0: 65 74 20 74 68 65 20 6e 65 78 74 20 73 74 61 74  et the next stat
77e0: 65 6d 65 6e 74 20 74 6f 20 65 78 65 63 75 74 65  ement to execute
77f0: 0a 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20  .        stmt = 
7800: 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61 74  _command.GetStat
7810: 65 6d 65 6e 74 28 5f 61 63 74 69 76 65 53 74 61  ement(_activeSta
7820: 74 65 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31 29  tementIndex + 1)
7830: 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66  ;..        // If
7840: 20 77 65 27 76 65 20 72 65 61 63 68 65 64 20 74   we've reached t
7850: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74  he end of the st
7860: 61 74 65 6d 65 6e 74 73 2c 20 72 65 74 75 72 6e  atements, return
7870: 20 66 61 6c 73 65 2c 20 6e 6f 20 6d 6f 72 65 20   false, no more 
7880: 72 65 73 75 6c 74 73 65 74 73 0a 20 20 20 20 20  resultsets.     
7890: 20 20 20 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e     if (stmt == n
78a0: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 20 20 72  ull).          r
78b0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 0a 20 20  eturn false;..  
78c0: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 20 77        // If we w
78d0: 65 72 65 20 6f 6e 20 61 20 63 75 72 72 65 6e 74  ere on a current
78e0: 20 72 65 73 75 6c 74 73 65 74 2c 20 73 65 74 20   resultset, set 
78f0: 74 68 65 20 73 74 61 74 65 20 74 6f 20 22 64 6f  the state to "do
7900: 6e 65 20 72 65 61 64 69 6e 67 22 20 66 6f 72 20  ne reading" for 
7910: 69 74 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  it.        if (_
7920: 72 65 61 64 69 6e 67 53 74 61 74 65 20 3c 20 31  readingState < 1
7930: 29 0a 20 20 20 20 20 20 20 20 20 20 5f 72 65 61  ).          _rea
7940: 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 0a 0a  dingState = 1;..
7950: 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
7960: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b  tatementIndex++;
7970: 0a 0a 20 20 20 20 20 20 20 20 66 69 65 6c 64 43  ..        fieldC
7980: 6f 75 6e 74 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ount = stmt._sql
7990: 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d  .ColumnCount(stm
79a0: 74 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20  t);..        // 
79b0: 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
79c0: 20 69 73 20 6e 6f 74 20 61 20 73 65 6c 65 63 74   is not a select
79d0: 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 77 65   statement or we
79e0: 27 72 65 20 6e 6f 74 20 72 65 74 72 69 65 76 69  're not retrievi
79f0: 6e 67 20 73 63 68 65 6d 61 20 6f 6e 6c 79 2c 20  ng schema only, 
7a00: 74 68 65 6e 20 70 65 72 66 6f 72 6d 20 74 68 65  then perform the
7a10: 20 69 6e 69 74 69 61 6c 20 73 74 65 70 0a 20 20   initial step.  
7a20: 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d        if ((_comm
7a30: 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f  andBehavior & Co
7a40: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 63  mmandBehavior.Sc
7a50: 68 65 6d 61 4f 6e 6c 79 29 20 3d 3d 20 30 20 7c  hemaOnly) == 0 |
7a60: 7c 20 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d 20  | fieldCount == 
7a70: 30 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  0).        {.   
7a80: 20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 2e         if (stmt.
7a90: 5f 73 71 6c 2e 53 74 65 70 28 73 74 6d 74 29 29  _sql.Step(stmt))
7aa0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20  .          {.   
7ab0: 20 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e           _readin
7ac0: 67 53 74 61 74 65 20 3d 20 2d 31 3b 0a 20 20 20  gState = -1;.   
7ad0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
7ae0: 20 20 20 65 6c 73 65 20 69 66 20 28 66 69 65 6c     else if (fiel
7af0: 64 43 6f 75 6e 74 20 3d 3d 20 30 29 20 2f 2f 20  dCount == 0) // 
7b00: 4e 6f 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  No rows returned
7b10: 2c 20 69 66 20 66 69 65 6c 64 43 6f 75 6e 74 20  , if fieldCount 
7b20: 69 73 20 7a 65 72 6f 2c 20 73 6b 69 70 20 74 6f  is zero, skip to
7b30: 20 74 68 65 20 6e 65 78 74 20 73 74 61 74 65 6d   the next statem
7b40: 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20 7b 0a  ent.          {.
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7b60: 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d 3d  _rowsAffected ==
7b70: 20 2d 31 29 20 5f 72 6f 77 73 41 66 66 65 63 74   -1) _rowsAffect
7b80: 65 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ed = 0;.        
7b90: 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65      _rowsAffecte
7ba0: 64 20 2b 3d 20 73 74 6d 74 2e 5f 73 71 6c 2e 43  d += stmt._sql.C
7bb0: 68 61 6e 67 65 73 3b 0a 20 20 20 20 20 20 20 20  hanges;.        
7bc0: 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 2e 52 65      stmt._sql.Re
7bd0: 73 65 74 28 73 74 6d 74 29 3b 0a 20 20 20 20 20  set(stmt);.     
7be0: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
7bf0: 20 2f 2f 20 53 6b 69 70 20 74 68 69 73 20 63 6f   // Skip this co
7c00: 6d 6d 61 6e 64 20 61 6e 64 20 6d 6f 76 65 20 74  mmand and move t
7c10: 6f 20 74 68 65 20 6e 65 78 74 2c 20 69 74 20 77  o the next, it w
7c20: 61 73 20 6e 6f 74 20 61 20 72 6f 77 2d 72 65 74  as not a row-ret
7c30: 75 72 6e 69 6e 67 20 72 65 73 75 6c 74 73 65 74  urning resultset
7c40: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
7c50: 20 20 20 20 20 20 20 65 6c 73 65 20 2f 2f 20 4e         else // N
7c60: 6f 20 72 6f 77 73 2c 20 66 69 65 6c 64 43 6f 75  o rows, fieldCou
7c70: 6e 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 73  nt is non-zero s
7c80: 6f 20 73 74 6f 70 20 68 65 72 65 0a 20 20 20 20  o stop here.    
7c90: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
7ca0: 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74      _readingStat
7cb0: 65 20 3d 20 31 3b 20 2f 2f 20 54 68 69 73 20 63  e = 1; // This c
7cc0: 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 65 64 20  ommand returned 
7cd0: 63 6f 6c 75 6d 6e 73 20 62 75 74 20 6e 6f 20 72  columns but no r
7ce0: 6f 77 73 2c 20 73 6f 20 72 65 74 75 72 6e 20 74  ows, so return t
7cf0: 72 75 65 2c 20 62 75 74 20 48 61 73 52 6f 77 73  rue, but HasRows
7d00: 20 3d 20 66 61 6c 73 65 20 61 6e 64 20 52 65 61   = false and Rea
7d10: 64 28 29 20 72 65 74 75 72 6e 73 20 66 61 6c 73  d() returns fals
7d20: 65 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  e.          }.  
7d30: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
7d40: 20 2f 2f 20 41 68 68 2c 20 77 65 20 66 6f 75 6e   // Ahh, we foun
7d50: 64 20 61 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e  d a row-returnin
7d60: 67 20 72 65 73 75 6c 74 73 65 74 20 65 6c 69 67  g resultset elig
7d70: 69 62 6c 65 20 74 6f 20 62 65 20 72 65 74 75 72  ible to be retur
7d80: 6e 65 64 21 0a 20 20 20 20 20 20 20 20 5f 61 63  ned!.        _ac
7d90: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d 20  tiveStatement = 
7da0: 73 74 6d 74 3b 0a 20 20 20 20 20 20 20 20 5f 66  stmt;.        _f
7db0: 69 65 6c 64 43 6f 75 6e 74 20 3d 20 66 69 65 6c  ieldCount = fiel
7dc0: 64 43 6f 75 6e 74 3b 0a 20 20 20 20 20 20 20 20  dCount;.        
7dd0: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20  _fieldTypeArray 
7de0: 3d 20 6e 75 6c 6c 3b 0a 0a 20 20 20 20 20 20 20  = null;..       
7df0: 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65   if ((_commandBe
7e00: 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64  havior & Command
7e10: 42 65 68 61 76 69 6f 72 2e 4b 65 79 49 6e 66 6f  Behavior.KeyInfo
7e20: 29 20 21 3d 20 30 29 0a 20 20 20 20 20 20 20 20  ) != 0).        
7e30: 20 20 4c 6f 61 64 4b 65 79 49 6e 66 6f 28 29 3b    LoadKeyInfo();
7e40: 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
7e50: 20 74 72 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20   true;.      }. 
7e60: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
7e70: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
7e80: 52 65 74 72 69 65 76 65 73 20 74 68 65 20 53 51  Retrieves the SQ
7e90: 4c 69 74 65 54 79 70 65 20 66 6f 72 20 61 20 67  LiteType for a g
7ea0: 69 76 65 6e 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64  iven column, and
7eb0: 20 63 61 63 68 65 73 20 69 74 20 74 6f 20 61 76   caches it to av
7ec0: 6f 69 64 20 72 65 70 65 74 65 74 69 76 65 20 69  oid repetetive i
7ed0: 6e 74 65 72 6f 70 20 63 61 6c 6c 73 2e 0a 20 20  nterop calls..  
7ee0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
7ef0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
7f00: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
7f10: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
7f20: 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
7f30: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
7f40: 74 75 72 6e 73 3e 41 20 53 51 4c 69 74 65 54 79  turns>A SQLiteTy
7f50: 70 65 20 73 74 72 75 63 74 75 72 65 3c 2f 72 65  pe structure</re
7f60: 74 75 72 6e 73 3e 0a 20 20 20 20 70 72 69 76 61  turns>.    priva
7f70: 74 65 20 53 51 4c 69 74 65 54 79 70 65 20 47 65  te SQLiteType Ge
7f80: 74 53 51 4c 69 74 65 54 79 70 65 28 69 6e 74 20  tSQLiteType(int 
7f90: 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 53  i).    {.      S
7fa0: 51 4c 69 74 65 54 79 70 65 20 74 79 70 3b 0a 0a  QLiteType typ;..
7fb0: 20 20 20 20 20 20 2f 2f 20 49 6e 69 74 69 61 6c        // Initial
7fc0: 69 7a 65 20 74 68 65 20 66 69 65 6c 64 20 74 79  ize the field ty
7fd0: 70 65 73 20 61 72 72 61 79 20 69 66 20 6e 6f 74  pes array if not
7fe0: 20 61 6c 72 65 61 64 79 20 69 6e 69 74 69 61 6c   already initial
7ff0: 69 7a 65 64 0a 20 20 20 20 20 20 69 66 20 28 5f  ized.      if (_
8000: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d  fieldTypeArray =
8010: 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20  = null).        
8020: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20  _fieldTypeArray 
8030: 3d 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65  = new SQLiteType
8040: 5b 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  [VisibleFieldCou
8050: 6e 74 5d 3b 0a 0a 20 20 20 20 20 20 2f 2f 20 49  nt];..      // I
8060: 6e 69 74 69 61 6c 69 7a 65 20 74 68 69 73 20 63  nitialize this c
8070: 6f 6c 75 6d 6e 27 73 20 66 69 65 6c 64 20 74 79  olumn's field ty
8080: 70 65 20 69 6e 73 74 61 6e 63 65 0a 20 20 20 20  pe instance.    
8090: 20 20 69 66 20 28 5f 66 69 65 6c 64 54 79 70 65    if (_fieldType
80a0: 41 72 72 61 79 5b 69 5d 20 3d 3d 20 6e 75 6c 6c  Array[i] == null
80b0: 29 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61  ) _fieldTypeArra
80c0: 79 5b 69 5d 20 3d 20 6e 65 77 20 53 51 4c 69 74  y[i] = new SQLit
80d0: 65 54 79 70 65 28 29 3b 0a 0a 20 20 20 20 20 20  eType();..      
80e0: 74 79 70 20 3d 20 5f 66 69 65 6c 64 54 79 70 65  typ = _fieldType
80f0: 41 72 72 61 79 5b 69 5d 3b 0a 0a 20 20 20 20 20  Array[i];..     
8100: 20 2f 2f 20 49 66 20 6e 6f 74 20 69 6e 69 74 69   // If not initi
8110: 61 6c 69 7a 65 64 2c 20 74 68 65 6e 20 66 65 74  alized, then fet
8120: 63 68 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  ch the declared 
8130: 63 6f 6c 75 6d 6e 20 64 61 74 61 74 79 70 65 20  column datatype 
8140: 61 6e 64 20 61 74 74 65 6d 70 74 20 74 6f 20 63  and attempt to c
8150: 6f 6e 76 65 72 74 20 69 74 20 0a 20 20 20 20 20  onvert it .     
8160: 20 2f 2f 20 74 6f 20 61 20 6b 6e 6f 77 6e 20 44   // to a known D
8170: 62 54 79 70 65 2e 0a 20 20 20 20 20 20 69 66 20  bType..      if 
8180: 28 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d  (typ.Affinity ==
8190: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 55 6e   TypeAffinity.Un
81a0: 69 6e 69 74 69 61 6c 69 7a 65 64 29 0a 20 20 20  initialized).   
81b0: 20 20 20 20 20 74 79 70 2e 54 79 70 65 20 3d 20       typ.Type = 
81c0: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54 79  SQLiteConvert.Ty
81d0: 70 65 4e 61 6d 65 54 6f 44 62 54 79 70 65 28 5f  peNameToDbType(_
81e0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
81f0: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28  _sql.ColumnType(
8200: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
8210: 2c 20 69 2c 20 6f 75 74 20 74 79 70 2e 41 66 66  , i, out typ.Aff
8220: 69 6e 69 74 79 29 29 3b 0a 20 20 20 20 20 20 65  inity));.      e
8230: 6c 73 65 0a 20 20 20 20 20 20 20 20 74 79 70 2e  lse.        typ.
8240: 41 66 66 69 6e 69 74 79 20 3d 20 5f 61 63 74 69  Affinity = _acti
8250: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
8260: 2e 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  .ColumnAffinity(
8270: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
8280: 2c 20 69 29 3b 0a 0a 20 20 20 20 20 20 72 65 74  , i);..      ret
8290: 75 72 6e 20 74 79 70 3b 0a 20 20 20 20 7d 0a 0a  urn typ;.    }..
82a0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
82b0: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 61 64 73 20  >.    /// Reads 
82c0: 74 68 65 20 6e 65 78 74 20 72 6f 77 20 66 72 6f  the next row fro
82d0: 6d 20 74 68 65 20 72 65 73 75 6c 74 73 65 74 0a  m the resultset.
82e0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
82f0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  y>.    /// <retu
8300: 72 6e 73 3e 54 72 75 65 20 69 66 20 61 20 6e 65  rns>True if a ne
8310: 77 20 72 6f 77 20 77 61 73 20 73 75 63 63 65 73  w row was succes
8320: 73 66 75 6c 6c 79 20 6c 6f 61 64 65 64 20 61 6e  sfully loaded an
8330: 64 20 69 73 20 72 65 61 64 79 20 66 6f 72 20 70  d is ready for p
8340: 72 6f 63 65 73 73 69 6e 67 3c 2f 72 65 74 75 72  rocessing</retur
8350: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
8360: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 52 65 61  verride bool Rea
8370: 64 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  d().    {.      
8380: 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 0a  CheckClosed();..
8390: 20 20 20 20 20 20 69 66 20 28 5f 72 65 61 64 69        if (_readi
83a0: 6e 67 53 74 61 74 65 20 3d 3d 20 2d 31 29 20 2f  ngState == -1) /
83b0: 2f 20 46 69 72 73 74 20 73 74 65 70 20 77 61 73  / First step was
83c0: 20 61 6c 72 65 61 64 79 20 64 6f 6e 65 20 61 74   already done at
83d0: 20 74 68 65 20 4e 65 78 74 52 65 73 75 6c 74 28   the NextResult(
83e0: 29 20 6c 65 76 65 6c 2c 20 73 6f 20 64 6f 6e 27  ) level, so don'
83f0: 74 20 73 74 65 70 20 61 67 61 69 6e 2c 20 6a 75  t step again, ju
8400: 73 74 20 72 65 74 75 72 6e 20 74 72 75 65 2e 0a  st return true..
8410: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
8420: 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20  _readingState = 
8430: 30 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  0;.        retur
8440: 6e 20 74 72 75 65 3b 0a 20 20 20 20 20 20 7d 0a  n true;.      }.
8450: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f        else if (_
8460: 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 3d 20  readingState == 
8470: 30 29 20 2f 2f 20 41 63 74 69 76 65 6c 79 20 72  0) // Actively r
8480: 65 61 64 69 6e 67 20 72 6f 77 73 0a 20 20 20 20  eading rows.    
8490: 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28    {.        if (
84a0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
84b0: 2e 5f 73 71 6c 2e 53 74 65 70 28 5f 61 63 74 69  ._sql.Step(_acti
84c0: 76 65 53 74 61 74 65 6d 65 6e 74 29 20 3d 3d 20  veStatement) == 
84d0: 74 72 75 65 29 0a 20 20 20 20 20 20 20 20 7b 0a  true).        {.
84e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 6b            if (_k
84f0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a  eyInfo != null).
8500: 20 20 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79              _key
8510: 49 6e 66 6f 2e 52 65 73 65 74 28 29 3b 0a 0a 20  Info.Reset();.. 
8520: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8530: 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a  true;.        }.
8540: 0a 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e  .        _readin
8550: 67 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f 20 46  gState = 1; // F
8560: 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 20  inished reading 
8570: 72 6f 77 73 0a 20 20 20 20 20 20 7d 0a 0a 20 20  rows.      }..  
8580: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
8590: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
85a0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
85b0: 2f 2f 20 52 65 74 72 69 65 76 65 20 74 68 65 20  // Retrieve the 
85c0: 63 6f 75 6e 74 20 6f 66 20 72 65 63 6f 72 64 73  count of records
85d0: 20 61 66 66 65 63 74 65 64 20 62 79 20 61 6e 20   affected by an 
85e0: 75 70 64 61 74 65 2f 69 6e 73 65 72 74 20 63 6f  update/insert co
85f0: 6d 6d 61 6e 64 2e 20 20 4f 6e 6c 79 20 76 61 6c  mmand.  Only val
8600: 69 64 20 6f 6e 63 65 20 74 68 65 20 64 61 74 61  id once the data
8610: 20 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65   reader is close
8620: 64 21 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  d!.    /// </sum
8630: 6d 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63  mary>.    public
8640: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52 65   override int Re
8650: 63 6f 72 64 73 41 66 66 65 63 74 65 64 0a 20 20  cordsAffected.  
8660: 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20    {.      get { 
8670: 72 65 74 75 72 6e 20 28 5f 72 6f 77 73 41 66 66  return (_rowsAff
8680: 65 63 74 65 64 20 3c 20 30 29 20 3f 20 30 20 3a  ected < 0) ? 0 :
8690: 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 3b 20   _rowsAffected; 
86a0: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  }.    }..    ///
86b0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
86c0: 2f 2f 20 49 6e 64 65 78 65 72 20 74 6f 20 72 65  // Indexer to re
86d0: 74 72 69 65 76 65 20 64 61 74 61 20 66 72 6f 6d  trieve data from
86e0: 20 61 20 63 6f 6c 75 6d 6e 20 67 69 76 65 6e 20   a column given 
86f0: 69 74 73 20 6e 61 6d 65 0a 20 20 20 20 2f 2f 2f  its name.    ///
8700: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
8710: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
8720: 22 6e 61 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20  "name">The name 
8730: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
8740: 20 72 65 74 72 69 65 76 65 20 64 61 74 61 20 66   retrieve data f
8750: 6f 72 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  or</param>.    /
8760: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
8770: 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
8780: 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72  in the column</r
8790: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
87a0: 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65  ic override obje
87b0: 63 74 20 74 68 69 73 5b 73 74 72 69 6e 67 20 6e  ct this[string n
87c0: 61 6d 65 5d 0a 20 20 20 20 7b 0a 20 20 20 20 20  ame].    {.     
87d0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 47 65   get { return Ge
87e0: 74 56 61 6c 75 65 28 47 65 74 4f 72 64 69 6e 61  tValue(GetOrdina
87f0: 6c 28 6e 61 6d 65 29 29 3b 20 7d 0a 20 20 20 20  l(name)); }.    
8800: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
8810: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 64  ary>.    /// Ind
8820: 65 78 65 72 20 74 6f 20 72 65 74 72 69 65 76 65  exer to retrieve
8830: 20 64 61 74 61 20 66 72 6f 6d 20 61 20 63 6f 6c   data from a col
8840: 75 6d 6e 20 67 69 76 65 6e 20 69 74 73 20 69 0a  umn given its i.
8850: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8860: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
8870: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
8880: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
8890: 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  mn to retrieve</
88a0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
88b0: 72 65 74 75 72 6e 73 3e 54 68 65 20 76 61 6c 75  returns>The valu
88c0: 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
88d0: 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72  he column</retur
88e0: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
88f0: 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 74  verride object t
8900: 68 69 73 5b 69 6e 74 20 69 5d 0a 20 20 20 20 7b  his[int i].    {
8910: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74  .      get { ret
8920: 75 72 6e 20 47 65 74 56 61 6c 75 65 28 69 29 3b  urn GetValue(i);
8930: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72   }.    }..    pr
8940: 69 76 61 74 65 20 76 6f 69 64 20 4c 6f 61 64 4b  ivate void LoadK
8950: 65 79 49 6e 66 6f 28 29 0a 20 20 20 20 7b 0a 20  eyInfo().    {. 
8960: 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66       if (_keyInf
8970: 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  o != null).     
8980: 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 44 69 73 70     _keyInfo.Disp
8990: 6f 73 65 28 29 3b 0a 0a 20 20 20 20 20 20 5f 6b  ose();..      _k
89a0: 65 79 49 6e 66 6f 20 3d 20 6e 65 77 20 53 51 4c  eyInfo = new SQL
89b0: 69 74 65 4b 65 79 52 65 61 64 65 72 28 5f 63 6f  iteKeyReader(_co
89c0: 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
89d0: 2c 20 74 68 69 73 2c 20 5f 61 63 74 69 76 65 53  , this, _activeS
89e0: 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 7d  tatement);.    }
89f0: 0a 20 20 7d 0a 7d 0a                             .  }.}.