System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 6b30efc3b8b42853a3b1453407c98c4da763011e:


0000: 2f 2a 2a 2a 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 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.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 0d 0a 20 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: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75  ns.Generic;..  u
0180: 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c  sing System.Coll
0190: 65 63 74 69 6f 6e 73 2e 53 70 65 63 69 61 6c 69  ections.Speciali
01a0: 7a 65 64 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  zed;..  using Sy
01b0: 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 75 73  stem.Data;..  us
01c0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
01d0: 43 6f 6d 6d 6f 6e 3b 0d 0a 20 20 75 73 69 6e 67  Common;..  using
01e0: 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a   System.Globaliz
01f0: 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20  ation;....  /// 
0200: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  <summary>..  ///
0210: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
0220: 74 61 74 69 6f 6e 20 6f 66 20 44 62 44 61 74 61  tation of DbData
0230: 52 65 61 64 65 72 2e 0d 0a 20 20 2f 2f 2f 20 3c  Reader...  /// <
0240: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62  /summary>..  pub
0250: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
0260: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
0270: 72 20 3a 20 44 62 44 61 74 61 52 65 61 64 65 72  r : DbDataReader
0280: 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ..  {..    /// <
0290: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
02a0: 2f 20 55 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d  / Underlying com
02b0: 6d 61 6e 64 20 74 68 69 73 20 72 65 61 64 65 72  mand this reader
02c0: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 0d   is attached to.
02d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
02e0: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
02f0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 5f   SQLiteCommand _
0300: 63 6f 6d 6d 61 6e 64 3b 0d 0a 20 20 20 20 2f 2f  command;..    //
0310: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0320: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 70   /// The flags p
0330: 65 72 74 61 69 6e 69 6e 67 20 74 6f 20 74 68 65  ertaining to the
0340: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6e 6e   associated conn
0350: 65 63 74 69 6f 6e 20 28 76 69 61 20 74 68 65 20  ection (via the 
0360: 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 2f  command)...    /
0370: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0380: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0390: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
03a0: 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20 2f 2f   _flags;..    //
03b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
03c0: 20 2f 2f 2f 20 49 6e 64 65 78 20 6f 66 20 74 68   /// Index of th
03d0: 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
03e0: 65 6e 74 20 69 6e 20 74 68 65 20 63 6f 6d 6d 61  ent in the comma
03f0: 6e 64 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nd being process
0400: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
0410: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
0420: 61 74 65 20 69 6e 74 20 5f 61 63 74 69 76 65 53  ate int _activeS
0430: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 3b 0d 0a  tatementIndex;..
0440: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0450: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65  >..    /// Curre
0460: 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  nt statement bei
0470: 6e 67 20 52 65 61 64 28 29 0d 0a 20 20 20 20 2f  ng Read()..    /
0480: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0490: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
04a0: 65 53 74 61 74 65 6d 65 6e 74 20 5f 61 63 74 69  eStatement _acti
04b0: 76 65 53 74 61 74 65 6d 65 6e 74 3b 0d 0a 20 20  veStatement;..  
04c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
04d0: 0a 20 20 20 20 2f 2f 2f 20 53 74 61 74 65 20 6f  .    /// State o
04e0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  f the current st
04f0: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72  atement being pr
0500: 6f 63 65 73 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  ocessed...    //
0510: 2f 20 2d 31 20 3d 20 46 69 72 73 74 20 53 74 65  / -1 = First Ste
0520: 70 28 29 20 65 78 65 63 75 74 65 64 2c 20 73 6f  p() executed, so
0530: 20 74 68 65 20 66 69 72 73 74 20 52 65 61 64 28   the first Read(
0540: 29 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65  ) will be ignore
0550: 64 0d 0a 20 20 20 20 2f 2f 2f 20 20 30 20 3d 20  d..    ///  0 = 
0560: 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67  Actively reading
0570: 0d 0a 20 20 20 20 2f 2f 2f 20 20 31 20 3d 20 46  ..    ///  1 = F
0580: 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 0d  inished reading.
0590: 0a 20 20 20 20 2f 2f 2f 20 20 32 20 3d 20 4e 6f  .    ///  2 = No
05a0: 6e 2d 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  n-row-returning 
05b0: 73 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 20 72 65  statement, no re
05c0: 63 6f 72 64 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cords..    /// <
05d0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
05e0: 72 69 76 61 74 65 20 69 6e 74 20 5f 72 65 61 64  rivate int _read
05f0: 69 6e 67 53 74 61 74 65 3b 0d 0a 20 20 20 20 2f  ingState;..    /
0600: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0610: 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20    /// Number of 
0620: 72 65 63 6f 72 64 73 20 61 66 66 65 63 74 65 64  records affected
0630: 20 62 79 20 74 68 65 20 69 6e 73 65 72 74 2f 75   by the insert/u
0640: 70 64 61 74 65 20 73 74 61 74 65 6d 65 6e 74 73  pdate statements
0650: 20 65 78 65 63 75 74 65 64 20 6f 6e 20 74 68 65   executed on the
0660: 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 2f 2f   command..    //
0670: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0680: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 5f 72    private int _r
0690: 6f 77 73 41 66 66 65 63 74 65 64 3b 0d 0a 20 20  owsAffected;..  
06a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
06b0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 75 6e 74 20 6f  .    /// Count o
06c0: 66 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d 6e  f fields (column
06d0: 73 29 20 69 6e 20 74 68 65 20 72 6f 77 2d 72 65  s) in the row-re
06e0: 74 75 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e  turning statemen
06f0: 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
0700: 67 20 70 72 6f 63 65 73 73 65 64 0d 0a 20 20 20  g processed..   
0710: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0720: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
0730: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20   _fieldCount;.. 
0740: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0750: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
0760: 6d 62 65 72 20 6f 66 20 63 61 6c 6c 73 20 74 6f  mber of calls to
0770: 20 53 74 65 70 28 29 20 74 68 61 74 20 68 61 76   Step() that hav
0780: 65 20 72 65 74 75 72 6e 65 64 20 74 72 75 65 20  e returned true 
0790: 28 69 2e 65 2e 20 74 68 65 20 6e 75 6d 62 65 72  (i.e. the number
07a0: 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0d 0a 20   of rows that.. 
07b0: 20 20 20 2f 2f 2f 20 68 61 76 65 20 62 65 65 6e     /// have been
07c0: 20 72 65 61 64 20 69 6e 20 74 68 65 20 63 75 72   read in the cur
07d0: 72 65 6e 74 20 72 65 73 75 6c 74 20 73 65 74 29  rent result set)
07e0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
07f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0800: 74 65 20 69 6e 74 20 5f 73 74 65 70 43 6f 75 6e  te int _stepCoun
0810: 74 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  t;..    /// <sum
0820: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d  mary>..    /// M
0830: 61 70 73 20 74 68 65 20 66 69 65 6c 64 20 28 63  aps the field (c
0840: 6f 6c 75 6d 6e 29 20 6e 61 6d 65 73 20 74 6f 20  olumn) names to 
0850: 74 68 65 69 72 20 63 6f 72 72 65 73 70 6f 6e 64  their correspond
0860: 69 6e 67 20 69 6e 64 65 78 65 73 20 77 69 74 68  ing indexes with
0870: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0d  in the results..
0880: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0890: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
08a0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
08b0: 6e 67 2c 20 69 6e 74 3e 20 5f 66 69 65 6c 64 49  ng, int> _fieldI
08c0: 6e 64 65 78 65 73 3b 0d 0a 20 20 20 20 2f 2f 2f  ndexes;..    ///
08d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
08e0: 2f 2f 2f 20 44 61 74 61 74 79 70 65 73 20 6f 66  /// Datatypes of
08f0: 20 61 63 74 69 76 65 20 66 69 65 6c 64 73 20 28   active fields (
0900: 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74 68 65 20  columns) in the 
0910: 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
0920: 74 2c 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  t, used for type
0930: 2d 72 65 73 74 72 69 63 74 69 6e 67 20 64 61 74  -restricting dat
0940: 61 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  a..    /// </sum
0950: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0960: 74 65 20 53 51 4c 69 74 65 54 79 70 65 5b 5d 20  te SQLiteType[] 
0970: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 3b  _fieldTypeArray;
0980: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0990: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
09a0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
09b0: 68 65 20 64 61 74 61 72 65 61 64 65 72 0d 0a 20  he datareader.. 
09c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
09d0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 43  >..    private C
09e0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 5f  ommandBehavior _
09f0: 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 3b  commandBehavior;
0a00: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0a10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
0a20: 66 20 73 65 74 2c 20 74 68 65 6e 20 64 69 73 70  f set, then disp
0a30: 6f 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61  ose of the comma
0a40: 6e 64 20 6f 62 6a 65 63 74 20 77 68 65 6e 20 74  nd object when t
0a50: 68 65 20 72 65 61 64 65 72 20 69 73 20 66 69 6e  he reader is fin
0a60: 69 73 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ished..    /// <
0a70: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
0a80: 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 64 69  nternal bool _di
0a90: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 3b 0d 0a 0d  sposeCommand;...
0aa0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0ab0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73  y>..    /// If s
0ac0: 65 74 2c 20 74 68 65 6e 20 72 61 69 73 65 20 61  et, then raise a
0ad0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 68 65 6e  n exception when
0ae0: 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61   the object is a
0af0: 63 63 65 73 73 65 64 20 61 66 74 65 72 20 62 65  ccessed after be
0b00: 69 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  ing disposed... 
0b10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0b20: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0b30: 62 6f 6f 6c 20 5f 74 68 72 6f 77 4f 6e 44 69 73  bool _throwOnDis
0b40: 70 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  posed;....    //
0b50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0b60: 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66   /// An array of
0b70: 20 72 6f 77 69 64 27 73 20 66 6f 72 20 74 68 65   rowid's for the
0b80: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
0b90: 74 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61  t if CommandBeha
0ba0: 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 20 69 73 20  vior.KeyInfo is 
0bb0: 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
0bc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0bd0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0be0: 65 4b 65 79 52 65 61 64 65 72 20 5f 6b 65 79 49  eKeyReader _keyI
0bf0: 6e 66 6f 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  nfo;....    /// 
0c00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0c10: 2f 2f 20 4d 61 74 63 68 65 73 20 74 68 65 20 76  // Matches the v
0c20: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  ersion of the co
0c30: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
0c40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0c50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6c 6f 6e 67     internal long
0c60: 20 5f 76 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20   _version;....  
0c70: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0c80: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 22 73 74  .    /// The "st
0c90: 75 62 22 20 28 69 2e 65 2e 20 70 6c 61 63 65 68  ub" (i.e. placeh
0ca0: 6f 6c 64 65 72 29 20 62 61 73 65 20 73 63 68 65  older) base sche
0cb0: 6d 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 77  ma name to use w
0cc0: 68 65 6e 20 72 65 74 75 72 6e 69 6e 67 0d 0a 20  hen returning.. 
0cd0: 20 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 73 63     /// column sc
0ce0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
0cf0: 2e 20 20 4d 61 74 63 68 65 73 20 74 68 65 20 62  .  Matches the b
0d00: 61 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20  ase schema name 
0d10: 75 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  used by the..   
0d20: 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20   /// associated 
0d30: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
0d40: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0d50: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72  .    private str
0d60: 69 6e 67 20 5f 62 61 73 65 53 63 68 65 6d 61 4e  ing _baseSchemaN
0d70: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ame;....    /// 
0d80: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0d90: 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73  // Internal cons
0da0: 74 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c  tructor, initial
0db0: 69 7a 65 73 20 74 68 65 20 64 61 74 61 72 65 61  izes the datarea
0dc0: 64 65 72 20 61 6e 64 20 73 65 74 73 20 75 70 20  der and sets up 
0dd0: 74 6f 20 62 65 67 69 6e 20 65 78 65 63 75 74 69  to begin executi
0de0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0d 0a 20  ng statements.. 
0df0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0e00: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0e10: 6d 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65  m name="cmd">The
0e20: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74   SQLiteCommand t
0e30: 68 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20  his data reader 
0e40: 69 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a  is for</param>..
0e50: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
0e60: 61 6d 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65  ame="behave">The
0e70: 20 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69   expected behavi
0e80: 6f 72 20 6f 66 20 74 68 65 20 64 61 74 61 20 72  or of the data r
0e90: 65 61 64 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20  eader</param>.. 
0ea0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69     internal SQLi
0eb0: 74 65 44 61 74 61 52 65 61 64 65 72 28 53 51 4c  teDataReader(SQL
0ec0: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20  iteCommand cmd, 
0ed0: 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20  CommandBehavior 
0ee0: 62 65 68 61 76 65 29 0d 0a 20 20 20 20 7b 0d 0a  behave)..    {..
0ef0: 20 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69        _throwOnDi
0f00: 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
0f10: 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d        _command =
0f20: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 5f 76 65   cmd;..      _ve
0f30: 72 73 69 6f 6e 20 3d 20 5f 63 6f 6d 6d 61 6e 64  rsion = _command
0f40: 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 76 65 72  .Connection._ver
0f50: 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 5f 62 61  sion;..      _ba
0f60: 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 5f  seSchemaName = _
0f70: 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69  command.Connecti
0f80: 6f 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61  on._baseSchemaNa
0f90: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 63 6f  me;....      _co
0fa0: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 3d 20  mmandBehavior = 
0fb0: 62 65 68 61 76 65 3b 0d 0a 20 20 20 20 20 20 5f  behave;..      _
0fc0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49  activeStatementI
0fd0: 6e 64 65 78 20 3d 20 2d 31 3b 0d 0a 20 20 20 20  ndex = -1;..    
0fe0: 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20    _rowsAffected 
0ff0: 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 52  = -1;....      R
1000: 65 66 72 65 73 68 46 6c 61 67 73 28 29 3b 0d 0a  efreshFlags();..
1010: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f  ..      SQLiteCo
1020: 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
1030: 65 64 28 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e  ed(GetConnection
1040: 28 74 68 69 73 29 2c 0d 0a 20 20 20 20 20 20 20  (this),..       
1050: 20 20 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f     new Connectio
1060: 6e 45 76 65 6e 74 41 72 67 73 28 53 51 4c 69 74  nEventArgs(SQLit
1070: 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74  eConnectionEvent
1080: 54 79 70 65 2e 4e 65 77 44 61 74 61 52 65 61 64  Type.NewDataRead
1090: 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 6e  er,..          n
10a0: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d  ull, null, _comm
10b0: 61 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c 2c  and, this, null,
10c0: 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63   null, new objec
10d0: 74 5b 5d 20 7b 20 62 65 68 61 76 65 20 7d 29 29  t[] { behave }))
10e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  ;....      if (_
10f0: 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29  command != null)
1100: 0d 0a 20 20 20 20 20 20 20 20 20 20 4e 65 78 74  ..          Next
1110: 52 65 73 75 6c 74 28 29 3b 0d 0a 20 20 20 20 7d  Result();..    }
1120: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
1190: 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
11a0: 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d  le "Pattern" Mem
11b0: 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74  bers..    privat
11c0: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
11d0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
11e0: 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  id CheckDisposed
11f0: 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  () /* throw */..
1200: 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57      {..#if THROW
1210: 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20  _ON_DISPOSED..  
1220: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
1230: 65 64 20 26 26 20 5f 74 68 72 6f 77 4f 6e 44 69  ed && _throwOnDi
1240: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
1250: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f       throw new O
1260: 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63  bjectDisposedExc
1270: 65 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51  eption(typeof(SQ
1280: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 29 2e  LiteDataReader).
1290: 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  Name);..#endif..
12a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1310: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1320: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f  >..    /// Dispo
1330: 73 65 20 6f 66 20 61 6c 6c 20 72 65 73 6f 75 72  se of all resour
1340: 63 65 73 20 75 73 65 64 20 62 79 20 74 68 69 73  ces used by this
1350: 20 64 61 74 61 72 65 61 64 65 72 2e 0d 0a 20 20   datareader...  
1360: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1370: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1380: 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67   name="disposing
1390: 22 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  "></param>..    
13a0: 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69  protected overri
13b0: 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  de void Dispose(
13c0: 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d  bool disposing).
13d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
13e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
13f0: 2e 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f  .OnChanged(GetCo
1400: 6e 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d  nnection(this),.
1410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
1420: 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74   ConnectionEvent
1430: 41 72 67 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65  Args(SQLiteConne
1440: 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 44  ctionEventType.D
1450: 69 73 70 6f 73 69 6e 67 44 61 74 61 52 65 61 64  isposingDataRead
1460: 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
1470: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f   null, null, _co
1480: 6d 6d 61 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c  mmand, this, nul
1490: 6c 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a  l, null, new obj
14a0: 65 63 74 5b 5d 20 7b 20 64 69 73 70 6f 73 69 6e  ect[] { disposin
14b0: 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
14c0: 64 69 73 70 6f 73 65 64 2c 20 5f 63 6f 6d 6d 61  disposed, _comma
14d0: 6e 64 42 65 68 61 76 69 6f 72 2c 20 5f 72 65 61  ndBehavior, _rea
14e0: 64 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f 77 73  dingState, _rows
14f0: 41 66 66 65 63 74 65 64 2c 20 5f 73 74 65 70 43  Affected, _stepC
1500: 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  ount,..         
1510: 20 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 20     _fieldCount, 
1520: 5f 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 2c  _disposeCommand,
1530: 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65   _throwOnDispose
1540: 64 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  d }));....      
1550: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
1560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1570: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
1580: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1590: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69               //i
15a0: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15c0: 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  /{..            
15d0: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1610: 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65  //    // dispose
1620: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
1630: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
1640: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1650: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
1680: 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20          //}.... 
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
16d0: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
16e0: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
16f0: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1740: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1750: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1760: 4e 4f 54 45 3a 20 46 69 78 20 66 6f 72 20 74 69  NOTE: Fix for ti
1770: 63 6b 65 74 20 5b 65 31 62 32 65 30 66 37 36 39  cket [e1b2e0f769
1780: 5d 2c 20 64 6f 20 4e 4f 54 20 74 68 72 6f 77 20  ], do NOT throw 
1790: 65 78 63 65 70 74 69 6f 6e 73 0d 0a 20 20 20 20  exceptions..    
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
17b0: 20 20 20 20 20 77 68 69 6c 65 20 77 65 20 61 72       while we ar
17c0: 65 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64  e being disposed
17d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17e0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
17f0: 20 20 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44         _throwOnD
1800: 69 73 70 6f 73 65 64 20 3d 20 66 61 6c 73 65 3b  isposed = false;
1810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1820: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1830: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
1840: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1850: 20 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65      base.Dispose
1860: 28 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a  (disposing);....
1870: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1880: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1890: 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20  OTE: Everything 
18a0: 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20  should be fully 
18b0: 64 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73  disposed at this
18c0: 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20   point...       
18d0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
18e0: 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20       disposed = 
18f0: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
1900: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
1910: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1980: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76  ..    internal v
1990: 6f 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20  oid Cancel()..  
19a0: 20 20 7b 0d 0a 20 20 20 20 20 20 5f 76 65 72 73    {..      _vers
19b0: 69 6f 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 7d 0d  ion = 0;..    }.
19c0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
19d0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c  ary>..    /// Cl
19e0: 6f 73 65 73 20 74 68 65 20 64 61 74 61 72 65 61  oses the datarea
19f0: 64 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79  der, potentially
1a00: 20 63 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e   closing the con
1a10: 6e 65 63 74 69 6f 6e 20 61 73 20 77 65 6c 6c 20  nection as well 
1a20: 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69  if CommandBehavi
1a30: 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69  or.CloseConnecti
1a40: 6f 6e 20 77 61 73 20 73 70 65 63 69 66 69 65 64  on was specified
1a50: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1a60: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
1a70: 63 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  c override void 
1a80: 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a  Close()..    {..
1a90: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
1aa0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
1ab0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1ac0: 2e 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f  .OnChanged(GetCo
1ad0: 6e 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d  nnection(this),.
1ae0: 0a 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 43  .          new C
1af0: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72  onnectionEventAr
1b00: 67 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  gs(SQLiteConnect
1b10: 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f  ionEventType.Clo
1b20: 73 69 6e 67 44 61 74 61 52 65 61 64 65 72 2c 0d  singDataReader,.
1b30: 0a 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c  .          null,
1b40: 20 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61 6e 64 2c   null, _command,
1b50: 20 74 68 69 73 2c 20 6e 75 6c 6c 2c 20 6e 75 6c   this, null, nul
1b60: 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20  l, new object[] 
1b70: 7b 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69  { _commandBehavi
1b80: 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 5f  or,..          _
1b90: 72 65 61 64 69 6e 67 53 74 61 74 65 2c 20 5f 72  readingState, _r
1ba0: 6f 77 73 41 66 66 65 63 74 65 64 2c 20 5f 73 74  owsAffected, _st
1bb0: 65 70 43 6f 75 6e 74 2c 20 5f 66 69 65 6c 64 43  epCount, _fieldC
1bc0: 6f 75 6e 74 2c 20 5f 64 69 73 70 6f 73 65 43 6f  ount, _disposeCo
1bd0: 6d 6d 61 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20  mmand,..        
1be0: 20 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73    _throwOnDispos
1bf0: 65 64 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ed }));....     
1c00: 20 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   try..      {.. 
1c10: 20 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d         if (_comm
1c20: 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  and != null)..  
1c30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c40: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
1c50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c60: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
1c70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c80: 20 20 20 2f 2f 20 4d 61 6b 65 20 73 75 72 65 20     // Make sure 
1c90: 77 65 27 76 65 20 6e 6f 74 20 62 65 65 6e 20 63  we've not been c
1ca0: 61 6e 63 65 6c 65 64 0d 0a 20 20 20 20 20 20 20  anceled..       
1cb0: 20 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73         if (_vers
1cc0: 69 6f 6e 20 21 3d 20 30 29 0d 0a 20 20 20 20 20  ion != 0)..     
1cd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1ce0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
1cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d10: 20 20 20 20 20 20 77 68 69 6c 65 20 28 4e 65 78        while (Nex
1d20: 74 52 65 73 75 6c 74 28 29 29 0d 0a 20 20 20 20  tResult())..    
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d50: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1d60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1d70: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 28 53           catch(S
1d80: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 29 0d  QLiteException).
1d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1da0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1db0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1dc0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1dd0: 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43        _command.C
1de0: 6c 65 61 72 44 61 74 61 52 65 61 64 65 72 28 29  learDataReader()
1df0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69  ..            fi
1e10: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
1e20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e30: 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64 61      // If the da
1e40: 74 61 72 65 61 64 65 72 27 73 20 62 65 68 61 76  tareader's behav
1e50: 69 6f 72 20 69 6e 63 6c 75 64 65 73 20 63 6c 6f  ior includes clo
1e60: 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
1e70: 69 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73 6f 20  ion, then do so 
1e80: 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  here...         
1e90: 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61       if ((_comma
1ea0: 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d  ndBehavior & Com
1eb0: 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f  mandBehavior.Clo
1ec0: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 21 3d  seConnection) !=
1ed0: 20 30 20 26 26 20 5f 63 6f 6d 6d 61 6e 64 2e 43   0 && _command.C
1ee0: 6f 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c  onnection != nul
1ef0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1f00: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e      _command.Con
1f10: 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b  nection.Close();
1f20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f30: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
1f40: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
1f50: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
1f60: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 64            if (_d
1f70: 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 29 0d 0a  isposeCommand)..
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63                _c
1f90: 6f 6d 6d 61 6e 64 2e 44 69 73 70 6f 73 65 28 29  ommand.Dispose()
1fa0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
1fb0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1fc0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20       _command = 
1fd0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f  null;..        _
1fe0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20  activeStatement 
1ff0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
2000: 20 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d   _fieldIndexes =
2010: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2020: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20  _fieldTypeArray 
2030: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d  = null;..      }
2040: 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d  ..      finally.
2050: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2060: 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21    if (_keyInfo !
2070: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2080: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b   {..          _k
2090: 65 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29  eyInfo.Dispose()
20a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65  ;..          _ke
20b0: 79 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  yInfo = null;.. 
20c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
20d0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
20e0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
20f0: 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20     /// Throw an 
2100: 65 72 72 6f 72 20 69 66 20 74 68 65 20 64 61 74  error if the dat
2110: 61 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65  areader is close
2120: 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  d..    /// </sum
2130: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
2140: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f  te void CheckClo
2150: 73 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sed()..    {..  
2160: 20 20 20 20 69 66 20 28 21 5f 74 68 72 6f 77 4f      if (!_throwO
2170: 6e 44 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  nDisposed)..    
2180: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
2190: 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e       if (_comman
21a0: 64 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  d == null)..    
21b0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
21c0: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
21d0: 63 65 70 74 69 6f 6e 28 22 44 61 74 61 52 65 61  ception("DataRea
21e0: 64 65 72 20 68 61 73 20 62 65 65 6e 20 63 6c 6f  der has been clo
21f0: 73 65 64 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed");....      
2200: 69 66 20 28 5f 76 65 72 73 69 6f 6e 20 3d 3d 20  if (_version == 
2210: 30 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  0)..        thro
2220: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
2230: 70 74 69 6f 6e 28 22 45 78 65 63 75 74 69 6f 6e  ption("Execution
2240: 20 77 61 73 20 61 62 6f 72 74 65 64 20 62 79 20   was aborted by 
2250: 74 68 65 20 75 73 65 72 22 29 3b 0d 0a 0d 0a 20  the user");.... 
2260: 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e       if (_comman
2270: 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 53 74 61  d.Connection.Sta
2280: 74 65 20 21 3d 20 43 6f 6e 6e 65 63 74 69 6f 6e  te != Connection
2290: 53 74 61 74 65 2e 4f 70 65 6e 20 7c 7c 20 5f 63  State.Open || _c
22a0: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
22b0: 6e 2e 5f 76 65 72 73 69 6f 6e 20 21 3d 20 5f 76  n._version != _v
22c0: 65 72 73 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20  ersion)..       
22d0: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
22e0: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
22f0: 74 69 6f 6e 28 22 43 6f 6e 6e 65 63 74 69 6f 6e  tion("Connection
2300: 20 77 61 73 20 63 6c 6f 73 65 64 2c 20 73 74 61   was closed, sta
2310: 74 65 6d 65 6e 74 20 77 61 73 20 74 65 72 6d 69  tement was termi
2320: 6e 61 74 65 64 22 29 3b 0d 0a 20 20 20 20 7d 0d  nated");..    }.
2330: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2340: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
2350: 72 6f 77 20 61 6e 20 65 72 72 6f 72 20 69 66 20  row an error if 
2360: 61 20 72 6f 77 20 69 73 20 6e 6f 74 20 6c 6f 61  a row is not loa
2370: 64 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ded..    /// </s
2380: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69  ummary>..    pri
2390: 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 56  vate void CheckV
23a0: 61 6c 69 64 52 6f 77 28 29 0d 0a 20 20 20 20 7b  alidRow()..    {
23b0: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 72 65 61  ..      if (_rea
23c0: 64 69 6e 67 53 74 61 74 65 20 21 3d 20 30 29 0d  dingState != 0).
23d0: 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e  .        throw n
23e0: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
23f0: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 4e 6f  ionException("No
2400: 20 63 75 72 72 65 6e 74 20 72 6f 77 22 29 3b 0d   current row");.
2410: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2420: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2430: 20 2f 2f 2f 20 45 6e 75 6d 65 72 61 74 6f 72 20   /// Enumerator 
2440: 73 75 70 70 6f 72 74 0d 0a 20 20 20 20 2f 2f 2f  support..    ///
2450: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2460: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
2470: 74 75 72 6e 73 20 61 20 44 62 45 6e 75 6d 65 72  turns a DbEnumer
2480: 61 74 6f 72 20 6f 62 6a 65 63 74 2e 3c 2f 72 65  ator object.</re
2490: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
24a0: 69 63 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c  ic override Coll
24b0: 65 63 74 69 6f 6e 73 2e 49 45 6e 75 6d 65 72 61  ections.IEnumera
24c0: 74 6f 72 20 47 65 74 45 6e 75 6d 65 72 61 74 6f  tor GetEnumerato
24d0: 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  r()..    {..    
24e0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
24f0: 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  );..      return
2500: 20 6e 65 77 20 44 62 45 6e 75 6d 65 72 61 74 6f   new DbEnumerato
2510: 72 28 74 68 69 73 2c 20 28 28 5f 63 6f 6d 6d 61  r(this, ((_comma
2520: 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d  ndBehavior & Com
2530: 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f  mandBehavior.Clo
2540: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 3d 3d  seConnection) ==
2550: 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72   CommandBehavior
2560: 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  .CloseConnection
2570: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
2580: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2590: 0a 20 20 20 20 2f 2f 2f 20 4e 6f 74 20 69 6d 70  .    /// Not imp
25a0: 6c 65 6d 65 6e 74 65 64 2e 20 20 52 65 74 75 72  lemented.  Retur
25b0: 6e 73 20 30 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ns 0..    /// </
25c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
25d0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e  blic override in
25e0: 74 20 44 65 70 74 68 0d 0a 20 20 20 20 7b 0d 0a  t Depth..    {..
25f0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
2600: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
2610: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
2620: 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65        CheckClose
2630: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  d();..        re
2640: 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 7d  turn 0;..      }
2650: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
2660: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2670: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
2680: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
2690: 6d 6e 73 20 69 6e 20 74 68 65 20 63 75 72 72 65  mns in the curre
26a0: 6e 74 20 72 65 73 75 6c 74 73 65 74 0d 0a 20 20  nt resultset..  
26b0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
26c0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
26d0: 72 72 69 64 65 20 69 6e 74 20 46 69 65 6c 64 43  rride int FieldC
26e0: 6f 75 6e 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ount..    {..   
26f0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
2700: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
2710: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
2720: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
2730: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
2740: 28 5f 6b 65 79 49 6e 66 6f 20 3d 3d 20 6e 75 6c  (_keyInfo == nul
2750: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  l)..          re
2760: 74 75 72 6e 20 5f 66 69 65 6c 64 43 6f 75 6e 74  turn _fieldCount
2770: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
2780: 75 72 6e 20 5f 66 69 65 6c 64 43 6f 75 6e 74 20  urn _fieldCount 
2790: 2b 20 5f 6b 65 79 49 6e 66 6f 2e 43 6f 75 6e 74  + _keyInfo.Count
27a0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
27b0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
27c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
27d0: 46 6f 72 63 65 73 20 74 68 65 20 63 6f 6e 6e 65  Forces the conne
27e0: 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 61 63 68  ction flags cach
27f0: 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61 20  ed by this data 
2800: 72 65 61 64 65 72 20 74 6f 20 62 65 20 72 65 66  reader to be ref
2810: 72 65 73 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  reshed..    /// 
2820: 66 72 6f 6d 20 74 68 65 20 75 6e 64 65 72 6c 79  from the underly
2830: 69 6e 67 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  ing connection..
2840: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2850: 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
2860: 76 6f 69 64 20 52 65 66 72 65 73 68 46 6c 61 67  void RefreshFlag
2870: 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  s()..    {..    
2880: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
2890: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
28a0: 5f 66 6c 61 67 73 20 3d 20 53 51 4c 69 74 65 43  _flags = SQLiteC
28b0: 6f 6d 6d 61 6e 64 2e 47 65 74 46 6c 61 67 73 28  ommand.GetFlags(
28c0: 5f 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 20 20 20 20  _command);..    
28d0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
28e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
28f0: 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  Returns the numb
2900: 65 72 20 6f 66 20 72 6f 77 73 20 73 65 65 6e 20  er of rows seen 
2910: 73 6f 20 66 61 72 20 69 6e 20 74 68 65 20 63 75  so far in the cu
2920: 72 72 65 6e 74 20 72 65 73 75 6c 74 20 73 65 74  rrent result set
2930: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
2940: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
2950: 63 20 69 6e 74 20 53 74 65 70 43 6f 75 6e 74 0d  c int StepCount.
2960: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
2970: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
2980: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
2990: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
29a0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 43            CheckC
29b0: 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  losed();....    
29c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
29d0: 73 74 65 70 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  stepCount;..    
29e0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
29f0: 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20      private int 
2a00: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
2a10: 65 6c 64 43 6f 75 6e 74 0d 0a 20 20 20 20 7b 0d  eldCount..    {.
2a20: 0a 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72  .        get { r
2a30: 65 74 75 72 6e 20 5f 66 69 65 6c 64 43 6f 75 6e  eturn _fieldCoun
2a40: 74 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  t; }..    }.... 
2a50: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2a60: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
2a70: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
2a80: 76 69 73 69 62 6c 65 20 66 69 65 6c 64 73 20 69  visible fields i
2a90: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65  n the current re
2aa0: 73 75 6c 74 73 65 74 0d 0a 20 20 20 20 2f 2f 2f  sultset..    ///
2ab0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2ac0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
2ad0: 20 69 6e 74 20 56 69 73 69 62 6c 65 46 69 65 6c   int VisibleFiel
2ae0: 64 43 6f 75 6e 74 0d 0a 20 20 20 20 7b 0d 0a 20  dCount..    {.. 
2af0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
2b00: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
2b10: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
2b20: 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64       CheckClosed
2b30: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ();..        ret
2b40: 75 72 6e 20 50 72 69 76 61 74 65 56 69 73 69 62  urn PrivateVisib
2b50: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20  leFieldCount;.. 
2b60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2b70: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
2b80: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
2b90: 20 6d 65 74 68 6f 64 20 69 73 20 75 73 65 64 20   method is used 
2ba0: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  to make sure the
2bb0: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 6f   result set is o
2bc0: 70 65 6e 20 61 6e 64 20 61 20 72 6f 77 20 69 73  pen and a row is
2bd0: 20 63 75 72 72 65 6e 74 6c 79 20 61 76 61 69 6c   currently avail
2be0: 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  able...    /// <
2bf0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
2c00: 72 69 76 61 74 65 20 76 6f 69 64 20 56 65 72 69  rivate void Veri
2c10: 66 79 46 6f 72 47 65 74 28 29 0d 0a 20 20 20 20  fyForGet()..    
2c20: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
2c30: 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  Closed();..     
2c40: 20 20 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77     CheckValidRow
2c50: 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ();..    }....  
2c60: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2c70: 0a 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20  .    /// SQLite 
2c80: 69 73 20 69 6e 68 65 72 65 6e 74 6c 79 20 75 6e  is inherently un
2c90: 2d 74 79 70 65 64 2e 20 20 41 6c 6c 20 64 61 74  -typed.  All dat
2ca0: 61 74 79 70 65 73 20 69 6e 20 53 51 4c 69 74 65  atypes in SQLite
2cb0: 20 61 72 65 20 6e 61 74 69 76 65 6c 79 20 73 74   are natively st
2cc0: 72 69 6e 67 73 2e 20 20 54 68 65 20 64 65 66 69  rings.  The defi
2cd0: 6e 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  nition of the co
2ce0: 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65  lumns of a table
2cf0: 0d 0a 20 20 20 20 2f 2f 2f 20 61 6e 64 20 74 68  ..    /// and th
2d00: 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 72 65  e affinity of re
2d10: 74 75 72 6e 65 64 20 74 79 70 65 73 20 61 72 65  turned types are
2d20: 20 61 6c 6c 20 77 65 20 68 61 76 65 20 74 6f 20   all we have to 
2d30: 67 6f 20 6f 6e 20 74 6f 20 74 79 70 65 2d 72 65  go on to type-re
2d40: 73 74 72 69 63 74 20 64 61 74 61 20 69 6e 20 74  strict data in t
2d50: 68 65 20 72 65 61 64 65 72 2e 0d 0a 20 20 20 20  he reader...    
2d60: 2f 2f 2f 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ///..    /// Thi
2d70: 73 20 66 75 6e 63 74 69 6f 6e 20 61 74 74 65 6d  s function attem
2d80: 70 74 73 20 74 6f 20 76 65 72 69 66 79 20 74 68  pts to verify th
2d90: 61 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 64  at the type of d
2da0: 61 74 61 20 62 65 69 6e 67 20 72 65 71 75 65 73  ata being reques
2db0: 74 65 64 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ted of a column 
2dc0: 6d 61 74 63 68 65 73 20 74 68 65 20 64 61 74 61  matches the data
2dd0: 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  type of the colu
2de0: 6d 6e 2e 20 20 49 6e 0d 0a 20 20 20 20 2f 2f 2f  mn.  In..    ///
2df0: 20 74 68 65 20 63 61 73 65 20 6f 66 20 63 6f 6c   the case of col
2e00: 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f  umns that are no
2e10: 74 20 62 61 63 6b 65 64 20 69 6e 74 6f 20 61 20  t backed into a 
2e20: 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
2e30: 2c 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20  , we attempt to 
2e40: 6d 61 74 63 68 20 75 70 20 74 68 65 20 61 66 66  match up the aff
2e50: 69 6e 69 74 79 20 6f 66 20 61 20 63 6f 6c 75 6d  inity of a colum
2e60: 6e 20 28 69 6e 74 2c 20 64 6f 75 62 6c 65 2c 20  n (int, double, 
2e70: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 29 0d  string or blob).
2e80: 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 61 20 73 65  .    /// to a se
2e90: 74 20 6f 66 20 6b 6e 6f 77 6e 20 74 79 70 65 73  t of known types
2ea0: 20 74 68 61 74 20 63 6c 6f 73 65 6c 79 20 6d 61   that closely ma
2eb0: 74 63 68 20 74 68 61 74 20 61 66 66 69 6e 69 74  tch that affinit
2ec0: 79 2e 20 20 49 74 27 73 20 6e 6f 74 20 61 6e 20  y.  It's not an 
2ed0: 65 78 61 63 74 20 73 63 69 65 6e 63 65 2c 20 62  exact science, b
2ee0: 75 74 20 69 74 73 20 74 68 65 20 62 65 73 74 20  ut its the best 
2ef0: 77 65 20 63 61 6e 20 64 6f 2e 0d 0a 20 20 20 20  we can do...    
2f00: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2f10: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
2f20: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
2f30: 66 75 6e 63 74 69 6f 6e 20 74 68 72 6f 77 73 20  function throws 
2f40: 61 6e 20 49 6e 76 61 6c 69 64 54 79 70 65 43 61  an InvalidTypeCa
2f50: 73 74 28 29 20 65 78 63 65 70 74 69 6f 6e 20 69  st() exception i
2f60: 66 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  f the requested 
2f70: 74 79 70 65 20 64 6f 65 73 6e 27 74 20 6d 61 74  type doesn't mat
2f80: 63 68 20 74 68 65 20 63 6f 6c 75 6d 6e 27 73 20  ch the column's 
2f90: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 20 61 66  definition or af
2fa0: 66 69 6e 69 74 79 2e 0d 0a 20 20 20 20 2f 2f 2f  finity...    ///
2fb0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2fc0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2fd0: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
2fe0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
2ff0: 74 79 70 65 2d 63 68 65 63 6b 3c 2f 70 61 72 61  type-check</para
3000: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
3010: 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68  am name="typ">Th
3020: 65 20 74 79 70 65 20 77 65 20 77 61 6e 74 20 74  e type we want t
3030: 6f 20 67 65 74 20 6f 75 74 20 6f 66 20 74 68 65  o get out of the
3040: 20 63 6f 6c 75 6d 6e 3c 2f 70 61 72 61 6d 3e 0d   column</param>.
3050: 0a 20 20 20 20 70 72 69 76 61 74 65 20 54 79 70  .    private Typ
3060: 65 41 66 66 69 6e 69 74 79 20 56 65 72 69 66 79  eAffinity Verify
3070: 54 79 70 65 28 69 6e 74 20 69 2c 20 44 62 54 79  Type(int i, DbTy
3080: 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a  pe typ)..    {..
3090: 20 20 20 20 20 20 20 20 54 79 70 65 41 66 66 69          TypeAffi
30a0: 6e 69 74 79 20 61 66 66 69 6e 69 74 79 20 3d 20  nity affinity = 
30b0: 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 5f 66  GetSQLiteType(_f
30c0: 6c 61 67 73 2c 20 69 29 2e 41 66 66 69 6e 69 74  lags, i).Affinit
30d0: 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77  y;....        sw
30e0: 69 74 63 68 20 28 61 66 66 69 6e 69 74 79 29 0d  itch (affinity).
30f0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
3100: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
3110: 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a  eAffinity.Int64:
3120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3130: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
3140: 79 70 65 2e 49 6e 74 31 36 29 20 72 65 74 75 72  ype.Int16) retur
3150: 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20  n affinity;..   
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
3170: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49  (typ == DbType.I
3180: 6e 74 33 32 29 20 72 65 74 75 72 6e 20 61 66 66  nt32) return aff
3190: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
31a0: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
31b0: 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29  == DbType.Int64)
31c0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
31d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
31e0: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
31f0: 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 20 72 65  Type.Boolean) re
3200: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a  turn affinity;..
3210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3220: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3230: 65 2e 53 42 79 74 65 29 20 72 65 74 75 72 6e 20  e.SByte) return 
3240: 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  affinity;..     
3250: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
3260: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 79 74  yp == DbType.Byt
3270: 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  e) return affini
3280: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
3290: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
32a0: 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29  DbType.DateTime)
32b0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
32c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
32d0: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
32e0: 54 79 70 65 2e 53 69 6e 67 6c 65 29 20 72 65 74  Type.Single) ret
32f0: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3310: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3320: 2e 44 6f 75 62 6c 65 29 20 72 65 74 75 72 6e 20  .Double) return 
3330: 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  affinity;..     
3340: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
3350: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 65 63  yp == DbType.Dec
3360: 69 6d 61 6c 29 20 72 65 74 75 72 6e 20 61 66 66  imal) return aff
3370: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3380: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
3390: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
33a0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
33b0: 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  uble:..         
33c0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
33d0: 3d 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29  = DbType.Single)
33e0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
33f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3400: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
3410: 54 79 70 65 2e 44 6f 75 62 6c 65 29 20 72 65 74  Type.Double) ret
3420: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3440: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3450: 2e 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e  .Decimal) return
3460: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3470: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3480: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 61  typ == DbType.Da
3490: 74 65 54 69 6d 65 29 20 72 65 74 75 72 6e 20 61  teTime) return a
34a0: 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20  ffinity;..      
34b0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
34c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
34d0: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
34e0: 54 65 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 20  Text:..         
34f0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
3500: 3d 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29  = DbType.String)
3510: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
3520: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3530: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
3540: 54 79 70 65 2e 47 75 69 64 29 20 72 65 74 75 72  Type.Guid) retur
3550: 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20  n affinity;..   
3560: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
3570: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44  (typ == DbType.D
3580: 61 74 65 54 69 6d 65 29 20 72 65 74 75 72 6e 20  ateTime) return 
3590: 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  affinity;..     
35a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
35b0: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 65 63  yp == DbType.Dec
35c0: 69 6d 61 6c 29 20 72 65 74 75 72 6e 20 61 66 66  imal) return aff
35d0: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
35e0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
35f0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
3600: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c   TypeAffinity.Bl
3610: 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ob:..           
3620: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
3630: 44 62 54 79 70 65 2e 47 75 69 64 29 20 72 65 74  DbType.Guid) ret
3640: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3660: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3670: 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e 20  .String) return 
3680: 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  affinity;..     
3690: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
36a0: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 69 6e  yp == DbType.Bin
36b0: 61 72 79 29 20 72 65 74 75 72 6e 20 61 66 66 69  ary) return affi
36c0: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
36d0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
36e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
36f0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
3700: 76 61 6c 69 64 43 61 73 74 45 78 63 65 70 74 69  validCastExcepti
3710: 6f 6e 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  on();..    }....
3720: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
3730: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
3740: 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  eves the column 
3750: 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  as a boolean val
3760: 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ue..    /// </su
3770: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3780: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
3790: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
37a0: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
37b0: 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eve</param>..   
37c0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62 6f   /// <returns>bo
37d0: 6f 6c 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  ol</returns>..  
37e0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
37f0: 65 20 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65 61  e bool GetBoolea
3800: 6e 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  n(int i)..    {.
3810: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
3820: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
3830: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
3840: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
3850: 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69   (i >= PrivateVi
3860: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
3870: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
3880: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3890: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
38a0: 6f 2e 47 65 74 42 6f 6f 6c 65 61 6e 28 69 20 2d  o.GetBoolean(i -
38b0: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
38c0: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
38d0: 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70         VerifyTyp
38e0: 65 28 69 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c  e(i, DbType.Bool
38f0: 65 61 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ean);..        r
3900: 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f  eturn Convert.To
3910: 42 6f 6f 6c 65 61 6e 28 47 65 74 56 61 6c 75 65  Boolean(GetValue
3920: 28 69 29 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f  (i), CultureInfo
3930: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 29  .CurrentCulture)
3940: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
3950: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
3960: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
3970: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61   the column as a
3980: 20 73 69 6e 67 6c 65 20 62 79 74 65 20 76 61 6c   single byte val
3990: 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ue..    /// </su
39a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
39b0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
39c0: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
39d0: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
39e0: 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eve</param>..   
39f0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62 79   /// <returns>by
3a00: 74 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  te</returns>..  
3a10: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
3a20: 65 20 62 79 74 65 20 47 65 74 42 79 74 65 28 69  e byte GetByte(i
3a30: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
3a40: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
3a50: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
3a60: 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d  VerifyForGet();.
3a70: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
3a80: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
3a90: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
3aa0: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
3ab0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
3ac0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
3ad0: 65 74 42 79 74 65 28 69 20 2d 20 50 72 69 76 61  etByte(i - Priva
3ae0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
3af0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
3b00: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
3b10: 62 54 79 70 65 2e 42 79 74 65 29 3b 0d 0a 20 20  bType.Byte);..  
3b20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e        return Con
3b30: 76 65 72 74 2e 54 6f 42 79 74 65 28 5f 61 63 74  vert.ToByte(_act
3b40: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
3b50: 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74 69  l.GetInt32(_acti
3b60: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29  veStatement, i))
3b70: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
3b80: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
3b90: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
3ba0: 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20   a column as an 
3bb0: 61 72 72 61 79 20 6f 66 20 62 79 74 65 73 20 28  array of bytes (
3bc0: 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f 2f 20 3c  blob)..    /// <
3bd0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
3be0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3bf0: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
3c00: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
3c10: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a  trieve</param>..
3c20: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
3c30: 61 6d 65 3d 22 66 69 65 6c 64 4f 66 66 73 65 74  ame="fieldOffset
3c40: 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  ">The zero-based
3c50: 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20   index of where 
3c60: 74 6f 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67  to begin reading
3c70: 20 74 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d   the data</param
3c80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3c90: 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 22 3e  m name="buffer">
3ca0: 54 68 65 20 62 75 66 66 65 72 20 74 6f 20 77 72  The buffer to wr
3cb0: 69 74 65 20 74 68 65 20 62 79 74 65 73 20 69 6e  ite the bytes in
3cc0: 74 6f 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  to</param>..    
3cd0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
3ce0: 22 62 75 66 66 65 72 6f 66 66 73 65 74 22 3e 54  "bufferoffset">T
3cf0: 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e  he zero-based in
3d00: 64 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20  dex of where to 
3d10: 62 65 67 69 6e 20 77 72 69 74 69 6e 67 20 69 6e  begin writing in
3d20: 74 6f 20 74 68 65 20 61 72 72 61 79 3c 2f 70 61  to the array</pa
3d30: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
3d40: 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67 74  aram name="lengt
3d50: 68 22 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  h">The number of
3d60: 20 62 79 74 65 73 20 74 6f 20 72 65 74 72 69 65   bytes to retrie
3d70: 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  ve</param>..    
3d80: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
3d90: 20 61 63 74 75 61 6c 20 6e 75 6d 62 65 72 20 6f   actual number o
3da0: 66 20 62 79 74 65 73 20 77 72 69 74 74 65 6e 20  f bytes written 
3db0: 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c 2f  into the array</
3dc0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
3dd0: 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20  / <remarks>..   
3de0: 20 2f 2f 2f 20 54 6f 20 64 65 74 65 72 6d 69 6e   /// To determin
3df0: 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
3e00: 62 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6c  bytes in the col
3e10: 75 6d 6e 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c  umn, pass a null
3e20: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62   value for the b
3e30: 75 66 66 65 72 2e 20 20 54 68 65 20 74 6f 74 61  uffer.  The tota
3e40: 6c 20 6c 65 6e 67 74 68 20 77 69 6c 6c 20 62 65  l length will be
3e50: 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20   returned...    
3e60: 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a  /// </remarks>..
3e70: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
3e80: 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65  ide long GetByte
3e90: 73 28 69 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69  s(int i, long fi
3ea0: 65 6c 64 4f 66 66 73 65 74 2c 20 62 79 74 65 5b  eldOffset, byte[
3eb0: 5d 20 62 75 66 66 65 72 2c 20 69 6e 74 20 62 75  ] buffer, int bu
3ec0: 66 66 65 72 6f 66 66 73 65 74 2c 20 69 6e 74 20  fferoffset, int 
3ed0: 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  length)..    {..
3ee0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
3ef0: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
3f00: 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
3f10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
3f20: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
3f30: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
3f40: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
3f50: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3f60: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
3f70: 2e 47 65 74 42 79 74 65 73 28 69 20 2d 20 50 72  .GetBytes(i - Pr
3f80: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
3f90: 64 43 6f 75 6e 74 2c 20 66 69 65 6c 64 4f 66 66  dCount, fieldOff
3fa0: 73 65 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66  set, buffer, buf
3fb0: 66 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74  feroffset, lengt
3fc0: 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56  h);....        V
3fd0: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
3fe0: 79 70 65 2e 42 69 6e 61 72 79 29 3b 0d 0a 20 20  ype.Binary);..  
3ff0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
4000: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
4010: 71 6c 2e 47 65 74 42 79 74 65 73 28 5f 61 63 74  ql.GetBytes(_act
4020: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c  iveStatement, i,
4030: 20 28 69 6e 74 29 66 69 65 6c 64 4f 66 66 73 65   (int)fieldOffse
4040: 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65  t, buffer, buffe
4050: 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29  roffset, length)
4060: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
4070: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
4080: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
4090: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73  he column as a s
40a0: 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 0d  ingle character.
40b0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
40c0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
40d0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
40e0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
40f0: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
4100: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
4110: 2f 20 3c 72 65 74 75 72 6e 73 3e 63 68 61 72 3c  / <returns>char<
4120: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
4130: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 63  ublic override c
4140: 68 61 72 20 47 65 74 43 68 61 72 28 69 6e 74 20  har GetChar(int 
4150: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
4160: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
4170: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
4180: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
4190: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
41a0: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
41b0: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
41c0: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
41d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
41e0: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 43  rn _keyInfo.GetC
41f0: 68 61 72 28 69 20 2d 20 50 72 69 76 61 74 65 56  har(i - PrivateV
4200: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
4210: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65  );....        Ve
4220: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
4230: 70 65 2e 53 42 79 74 65 29 3b 0d 0a 20 20 20 20  pe.SByte);..    
4240: 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65      return Conve
4250: 72 74 2e 54 6f 43 68 61 72 28 5f 61 63 74 69 76  rt.ToChar(_activ
4260: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
4270: 47 65 74 49 6e 74 33 32 28 5f 61 63 74 69 76 65  GetInt32(_active
4280: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d  Statement, i));.
4290: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
42a0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
42b0: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 61   /// Retrieves a
42c0: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 61 72   column as an ar
42d0: 72 61 79 20 6f 66 20 63 68 61 72 73 20 28 62 6c  ray of chars (bl
42e0: 6f 62 29 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ob)..    /// </s
42f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4300: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
4310: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
4320: 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72  e column to retr
4330: 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ieve</param>..  
4340: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4350: 65 3d 22 66 69 65 6c 64 6f 66 66 73 65 74 22 3e  e="fieldoffset">
4360: 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69  The zero-based i
4370: 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f  ndex of where to
4380: 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67 20 74   begin reading t
4390: 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0d  he data</param>.
43a0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
43b0: 6e 61 6d 65 3d 22 62 75 66 66 65 72 22 3e 54 68  name="buffer">Th
43c0: 65 20 62 75 66 66 65 72 20 74 6f 20 77 72 69 74  e buffer to writ
43d0: 65 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73  e the characters
43e0: 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e 0d 0a 20   into</param>.. 
43f0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
4400: 6d 65 3d 22 62 75 66 66 65 72 6f 66 66 73 65 74  me="bufferoffset
4410: 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  ">The zero-based
4420: 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20   index of where 
4430: 74 6f 20 62 65 67 69 6e 20 77 72 69 74 69 6e 67  to begin writing
4440: 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c   into the array<
4450: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
4460: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65   <param name="le
4470: 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d 62 65 72  ngth">The number
4480: 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72 65 74   of bytes to ret
4490: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rieve</param>.. 
44a0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
44b0: 54 68 65 20 61 63 74 75 61 6c 20 6e 75 6d 62 65  The actual numbe
44c0: 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
44d0: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 74 68 65  written into the
44e0: 20 61 72 72 61 79 3c 2f 72 65 74 75 72 6e 73 3e   array</returns>
44f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72  ..    /// <remar
4500: 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 6f 20  ks>..    /// To 
4510: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
4520: 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
4530: 72 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  rs in the column
4540: 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c 20 76 61  , pass a null va
4550: 6c 75 65 20 66 6f 72 20 74 68 65 20 62 75 66 66  lue for the buff
4560: 65 72 2e 20 20 54 68 65 20 74 6f 74 61 6c 20 6c  er.  The total l
4570: 65 6e 67 74 68 20 77 69 6c 6c 20 62 65 20 72 65  ength will be re
4580: 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  turned...    ///
4590: 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20   </remarks>..   
45a0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
45b0: 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 69   long GetChars(i
45c0: 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65 6c 64  nt i, long field
45d0: 6f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62  offset, char[] b
45e0: 75 66 66 65 72 2c 20 69 6e 74 20 62 75 66 66 65  uffer, int buffe
45f0: 72 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c 65 6e  roffset, int len
4600: 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
4610: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
4620: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
4630: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
4640: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
4650: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
4660: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
4670: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
4680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4690: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
46a0: 74 43 68 61 72 73 28 69 20 2d 20 50 72 69 76 61  tChars(i - Priva
46b0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
46c0: 75 6e 74 2c 20 66 69 65 6c 64 6f 66 66 73 65 74  unt, fieldoffset
46d0: 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72  , buffer, buffer
46e0: 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b  offset, length);
46f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  ....        Veri
4700: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
4710: 2e 53 74 72 69 6e 67 29 3b 0d 0a 20 20 20 20 20  .String);..     
4720: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
4730: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
4740: 47 65 74 43 68 61 72 73 28 5f 61 63 74 69 76 65  GetChars(_active
4750: 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 28 69  Statement, i, (i
4760: 6e 74 29 66 69 65 6c 64 6f 66 66 73 65 74 2c 20  nt)fieldoffset, 
4770: 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66  buffer, bufferof
4780: 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  fset, length);..
4790: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
47a0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
47b0: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
47c0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 62 61  e name of the ba
47d0: 63 6b 2d 65 6e 64 20 64 61 74 61 74 79 70 65 20  ck-end datatype 
47e0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a 20  of the column.. 
47f0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
4800: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
4810: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
4820: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
4830: 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  mn to retrieve</
4840: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
4850: 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c  <returns>string<
4860: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
4870: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73  ublic override s
4880: 74 72 69 6e 67 20 47 65 74 44 61 74 61 54 79 70  tring GetDataTyp
4890: 65 4e 61 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20  eName(int i)..  
48a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
48b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
48c0: 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72         VerifyFor
48d0: 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Get();....      
48e0: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
48f0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
4900: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
4910: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
4920: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
4930: 79 49 6e 66 6f 2e 47 65 74 44 61 74 61 54 79 70  yInfo.GetDataTyp
4940: 65 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61 74  eName(i - Privat
4950: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
4960: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
4970: 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 20 3d  SQLiteType typ =
4980: 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 5f   GetSQLiteType(_
4990: 66 6c 61 67 73 2c 20 69 29 3b 0d 0a 20 20 20 20  flags, i);..    
49a0: 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65      if (typ.Type
49b0: 20 3d 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63   == DbType.Objec
49c0: 74 29 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65  t) return SQLite
49d0: 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79  Convert.SQLiteTy
49e0: 70 65 54 6f 54 79 70 65 28 74 79 70 29 2e 4e 61  peToType(typ).Na
49f0: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  me;..        ret
4a00: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
4a10: 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
4a20: 54 79 70 65 28 5f 61 63 74 69 76 65 53 74 61 74  Type(_activeStat
4a30: 65 6d 65 6e 74 2c 20 69 2c 20 6f 75 74 20 74 79  ement, i, out ty
4a40: 70 2e 41 66 66 69 6e 69 74 79 29 3b 0d 0a 20 20  p.Affinity);..  
4a50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
4a60: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
4a70: 2f 20 52 65 74 72 69 65 76 65 20 74 68 65 20 63  / Retrieve the c
4a80: 6f 6c 75 6d 6e 20 61 73 20 61 20 64 61 74 65 2f  olumn as a date/
4a90: 74 69 6d 65 20 76 61 6c 75 65 0d 0a 20 20 20 20  time value..    
4aa0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
4ab0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
4ac0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
4ad0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  x of the column 
4ae0: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
4af0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
4b00: 74 75 72 6e 73 3e 44 61 74 65 54 69 6d 65 3c 2f  turns>DateTime</
4b10: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
4b20: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 44 61  blic override Da
4b30: 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54 69  teTime GetDateTi
4b40: 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  me(int i)..    {
4b50: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
4b60: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
4b70: 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74      VerifyForGet
4b80: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
4b90: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
4ba0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
4bb0: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
4bc0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4bd0: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
4be0: 66 6f 2e 47 65 74 44 61 74 65 54 69 6d 65 28 69  fo.GetDateTime(i
4bf0: 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c   - PrivateVisibl
4c00: 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d  eFieldCount);...
4c10: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54  .        VerifyT
4c20: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 44 61  ype(i, DbType.Da
4c30: 74 65 54 69 6d 65 29 3b 0d 0a 20 20 20 20 20 20  teTime);..      
4c40: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
4c50: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
4c60: 65 74 44 61 74 65 54 69 6d 65 28 5f 61 63 74 69  etDateTime(_acti
4c70: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
4c80: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
4c90: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
4ca0: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 20 74    /// Retrieve t
4cb0: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 64  he column as a d
4cc0: 65 63 69 6d 61 6c 20 76 61 6c 75 65 0d 0a 20 20  ecimal value..  
4cd0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
4ce0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
4cf0: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
4d00: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
4d10: 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  n to retrieve</p
4d20: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
4d30: 72 65 74 75 72 6e 73 3e 64 65 63 69 6d 61 6c 3c  returns>decimal<
4d40: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
4d50: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64  ublic override d
4d60: 65 63 69 6d 61 6c 20 47 65 74 44 65 63 69 6d 61  ecimal GetDecima
4d70: 6c 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  l(int i)..    {.
4d80: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
4d90: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
4da0: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
4db0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
4dc0: 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69   (i >= PrivateVi
4dd0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
4de0: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
4df0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
4e00: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
4e10: 6f 2e 47 65 74 44 65 63 69 6d 61 6c 28 69 20 2d  o.GetDecimal(i -
4e20: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
4e30: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
4e40: 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70         VerifyTyp
4e50: 65 28 69 2c 20 44 62 54 79 70 65 2e 44 65 63 69  e(i, DbType.Deci
4e60: 6d 61 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  mal);..        r
4e70: 65 74 75 72 6e 20 44 65 63 69 6d 61 6c 2e 50 61  eturn Decimal.Pa
4e80: 72 73 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  rse(_activeState
4e90: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78  ment._sql.GetTex
4ea0: 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  t(_activeStateme
4eb0: 6e 74 2c 20 69 29 2c 20 4e 75 6d 62 65 72 53 74  nt, i), NumberSt
4ec0: 79 6c 65 73 2e 41 6c 6c 6f 77 44 65 63 69 6d 61  yles.AllowDecima
4ed0: 6c 50 6f 69 6e 74 20 7c 20 4e 75 6d 62 65 72 53  lPoint | NumberS
4ee0: 74 79 6c 65 73 2e 41 6c 6c 6f 77 45 78 70 6f 6e  tyles.AllowExpon
4ef0: 65 6e 74 20 7c 20 4e 75 6d 62 65 72 53 74 79 6c  ent | NumberStyl
4f00: 65 73 2e 41 6c 6c 6f 77 4c 65 61 64 69 6e 67 53  es.AllowLeadingS
4f10: 69 67 6e 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f  ign, CultureInfo
4f20: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
4f30: 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
4f40: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
4f50: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
4f60: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61   the column as a
4f70: 20 64 6f 75 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f   double..    ///
4f80: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
4f90: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4fa0: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
4fb0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
4fc0: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
4fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
4fe0: 6e 73 3e 64 6f 75 62 6c 65 3c 2f 72 65 74 75 72  ns>double</retur
4ff0: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
5000: 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20  override double 
5010: 47 65 74 44 6f 75 62 6c 65 28 69 6e 74 20 69 29  GetDouble(int i)
5020: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5030: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5040: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
5050: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
5060: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
5070: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
5080: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
5090: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
50a0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
50b0: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 6f 75   _keyInfo.GetDou
50c0: 62 6c 65 28 69 20 2d 20 50 72 69 76 61 74 65 56  ble(i - PrivateV
50d0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
50e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65  );....        Ve
50f0: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
5100: 70 65 2e 44 6f 75 62 6c 65 29 3b 0d 0a 20 20 20  pe.Double);..   
5110: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
5120: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
5130: 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f 61 63 74  l.GetDouble(_act
5140: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
5150: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5160: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
5170: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
5180: 68 65 20 2e 4e 45 54 20 74 79 70 65 20 6f 66 20  he .NET type of 
5190: 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 0d 0a  a given column..
51a0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
51b0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
51c0: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
51d0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
51e0: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
51f0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
5200: 20 3c 72 65 74 75 72 6e 73 3e 54 79 70 65 3c 2f   <returns>Type</
5210: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
5220: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 54 79  blic override Ty
5230: 70 65 20 47 65 74 46 69 65 6c 64 54 79 70 65 28  pe GetFieldType(
5240: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
5250: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
5260: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
5270: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
5280: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
5290: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
52a0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
52b0: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
52c0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
52d0: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
52e0: 47 65 74 46 69 65 6c 64 54 79 70 65 28 69 20 2d  GetFieldType(i -
52f0: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
5300: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
5310: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
5320: 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69  LiteConvert.SQLi
5330: 74 65 54 79 70 65 54 6f 54 79 70 65 28 47 65 74  teTypeToType(Get
5340: 53 51 4c 69 74 65 54 79 70 65 28 5f 66 6c 61 67  SQLiteType(_flag
5350: 73 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  s, i));..    }..
5360: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5370: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
5380: 75 72 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73  urns a column as
5390: 20 61 20 66 6c 6f 61 74 20 76 61 6c 75 65 0d 0a   a float value..
53a0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
53b0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
53c0: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
53d0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
53e0: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
53f0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
5400: 20 3c 72 65 74 75 72 6e 73 3e 66 6c 6f 61 74 3c   <returns>float<
5410: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
5420: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 66  ublic override f
5430: 6c 6f 61 74 20 47 65 74 46 6c 6f 61 74 28 69 6e  loat GetFloat(in
5440: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
5450: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
5460: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
5470: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
5480: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
5490: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
54a0: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
54b0: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
54c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
54d0: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
54e0: 74 46 6c 6f 61 74 28 69 20 2d 20 50 72 69 76 61  tFloat(i - Priva
54f0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
5500: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
5510: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
5520: 62 54 79 70 65 2e 53 69 6e 67 6c 65 29 3b 0d 0a  bType.Single);..
5530: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43          return C
5540: 6f 6e 76 65 72 74 2e 54 6f 53 69 6e 67 6c 65 28  onvert.ToSingle(
5550: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
5560: 2e 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28  ._sql.GetDouble(
5570: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
5580: 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  , i));..    }...
5590: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
55a0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
55b0: 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  rns the column a
55c0: 73 20 61 20 47 75 69 64 0d 0a 20 20 20 20 2f 2f  s a Guid..    //
55d0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
55e0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
55f0: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
5600: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
5610: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
5620: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
5630: 72 6e 73 3e 47 75 69 64 3c 2f 72 65 74 75 72 6e  rns>Guid</return
5640: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
5650: 76 65 72 72 69 64 65 20 47 75 69 64 20 47 65 74  verride Guid Get
5660: 47 75 69 64 28 69 6e 74 20 69 29 0d 0a 20 20 20  Guid(int i)..   
5670: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
5680: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
5690: 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47        VerifyForG
56a0: 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  et();....       
56b0: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
56c0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
56d0: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
56e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
56f0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
5700: 49 6e 66 6f 2e 47 65 74 47 75 69 64 28 69 20 2d  Info.GetGuid(i -
5710: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
5720: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
5730: 20 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e         TypeAffin
5740: 69 74 79 20 61 66 66 69 6e 69 74 79 20 3d 20 56  ity affinity = V
5750: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
5760: 79 70 65 2e 47 75 69 64 29 3b 0d 0a 20 20 20 20  ype.Guid);..    
5770: 20 20 20 20 69 66 20 28 61 66 66 69 6e 69 74 79      if (affinity
5780: 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
5790: 2e 42 6c 6f 62 29 0d 0a 20 20 20 20 20 20 20 20  .Blob)..        
57a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  {..            b
57b0: 79 74 65 5b 5d 20 62 75 66 66 65 72 20 3d 20 6e  yte[] buffer = n
57c0: 65 77 20 62 79 74 65 5b 31 36 5d 3b 0d 0a 20 20  ew byte[16];..  
57d0: 20 20 20 20 20 20 20 20 20 20 5f 61 63 74 69 76            _activ
57e0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
57f0: 47 65 74 42 79 74 65 73 28 5f 61 63 74 69 76 65  GetBytes(_active
5800: 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 30 2c  Statement, i, 0,
5810: 20 62 75 66 66 65 72 2c 20 30 2c 20 31 36 29 3b   buffer, 0, 16);
5820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
5830: 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28 62 75  turn new Guid(bu
5840: 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  ffer);..        
5850: 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
5860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5870: 75 72 6e 20 6e 65 77 20 47 75 69 64 28 5f 61 63  urn new Guid(_ac
5880: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
5890: 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69  ql.GetText(_acti
58a0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29  veStatement, i))
58b0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
58c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
58d0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
58e0: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73  he column as a s
58f0: 68 6f 72 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  hort..    /// </
5900: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
5910: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
5920: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
5930: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
5940: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rieve</param>.. 
5950: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
5960: 49 6e 74 31 36 3c 2f 72 65 74 75 72 6e 73 3e 0d  Int16</returns>.
5970: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
5980: 72 69 64 65 20 49 6e 74 31 36 20 47 65 74 49 6e  ride Int16 GetIn
5990: 74 31 36 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  t16(int i)..    
59a0: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
59b0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
59c0: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
59d0: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
59e0: 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65  if (i >= Private
59f0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
5a00: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
5a10: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5a20: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
5a30: 6e 66 6f 2e 47 65 74 49 6e 74 31 36 28 69 20 2d  nfo.GetInt16(i -
5a40: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
5a50: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
5a60: 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70         VerifyTyp
5a70: 65 28 69 2c 20 44 62 54 79 70 65 2e 49 6e 74 31  e(i, DbType.Int1
5a80: 36 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  6);..        ret
5a90: 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e  urn Convert.ToIn
5aa0: 74 31 36 28 5f 61 63 74 69 76 65 53 74 61 74 65  t16(_activeState
5ab0: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74  ment._sql.GetInt
5ac0: 33 32 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  32(_activeStatem
5ad0: 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d  ent, i));..    }
5ae0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
5af0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
5b00: 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c  etrieves the col
5b10: 75 6d 6e 20 61 73 20 61 6e 20 69 6e 74 0d 0a 20  umn as an int.. 
5b20: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
5b30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
5b40: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
5b50: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
5b60: 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  mn to retrieve</
5b70: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
5b80: 3c 72 65 74 75 72 6e 73 3e 49 6e 74 33 32 3c 2f  <returns>Int32</
5b90: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
5ba0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e  blic override In
5bb0: 74 33 32 20 47 65 74 49 6e 74 33 32 28 69 6e 74  t32 GetInt32(int
5bc0: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
5bd0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
5be0: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
5bf0: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
5c00: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
5c10: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
5c20: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
5c30: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
5c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5c50: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
5c60: 49 6e 74 33 32 28 69 20 2d 20 50 72 69 76 61 74  Int32(i - Privat
5c70: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
5c80: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
5c90: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
5ca0: 54 79 70 65 2e 49 6e 74 33 32 29 3b 0d 0a 20 20  Type.Int32);..  
5cb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
5cc0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
5cd0: 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74  ql.GetInt32(_act
5ce0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
5cf0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5d00: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
5d10: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
5d20: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61   the column as a
5d30: 20 6c 6f 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c   long..    /// <
5d40: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
5d50: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5d60: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
5d70: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
5d80: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a  trieve</param>..
5d90: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
5da0: 3e 49 6e 74 36 34 3c 2f 72 65 74 75 72 6e 73 3e  >Int64</returns>
5db0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
5dc0: 72 72 69 64 65 20 49 6e 74 36 34 20 47 65 74 49  rride Int64 GetI
5dd0: 6e 74 36 34 28 69 6e 74 20 69 29 0d 0a 20 20 20  nt64(int i)..   
5de0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
5df0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
5e00: 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47        VerifyForG
5e10: 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  et();....       
5e20: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
5e30: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
5e40: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
5e50: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
5e60: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
5e70: 49 6e 66 6f 2e 47 65 74 49 6e 74 36 34 28 69 20  Info.GetInt64(i 
5e80: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
5e90: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
5ea0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79          VerifyTy
5eb0: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 49 6e 74  pe(i, DbType.Int
5ec0: 36 34 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  64);..        re
5ed0: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
5ee0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e  ement._sql.GetIn
5ef0: 74 36 34 28 5f 61 63 74 69 76 65 53 74 61 74 65  t64(_activeState
5f00: 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d  ment, i);..    }
5f10: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
5f20: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
5f30: 65 74 72 69 65 76 65 73 20 74 68 65 20 6e 61 6d  etrieves the nam
5f40: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0d  e of the column.
5f50: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
5f60: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
5f70: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
5f80: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
5f90: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
5fa0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
5fb0: 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e  / <returns>strin
5fc0: 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  g</returns>..   
5fd0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
5fe0: 20 73 74 72 69 6e 67 20 47 65 74 4e 61 6d 65 28   string GetName(
5ff0: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
6000: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
6010: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
6020: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
6030: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
6040: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
6050: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
6060: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
6070: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
6080: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
6090: 47 65 74 4e 61 6d 65 28 69 20 2d 20 50 72 69 76  GetName(i - Priv
60a0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
60b0: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
60c0: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
60d0: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43  Statement._sql.C
60e0: 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63 74 69 76  olumnName(_activ
60f0: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d  eStatement, i);.
6100: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
6110: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6120: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
6130: 68 65 20 69 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  he i of a column
6140: 2c 20 67 69 76 65 6e 20 69 74 73 20 6e 61 6d 65  , given its name
6150: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6160: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
6170: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
6180: 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  >The name of the
6190: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
61a0: 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eve</param>..   
61b0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
61c0: 65 20 69 6e 74 20 69 20 6f 66 20 74 68 65 20 63  e int i of the c
61d0: 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d  olumn</returns>.
61e0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
61f0: 72 69 64 65 20 69 6e 74 20 47 65 74 4f 72 64 69  ride int GetOrdi
6200: 6e 61 6c 28 73 74 72 69 6e 67 20 6e 61 6d 65 29  nal(string name)
6210: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43  ..    {..      C
6220: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
6230: 0a 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72  .      VerifyFor
6240: 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Get();....      
6250: 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70  if (_throwOnDisp
6260: 6f 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d  osed) SQLiteComm
6270: 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61  and.Check(_comma
6280: 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  nd);....      //
6290: 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a  ..      // NOTE:
62a0: 20 46 69 72 73 74 2c 20 63 68 65 63 6b 20 69 66   First, check if
62b0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
62c0: 20 63 61 63 68 65 20 68 61 73 20 62 65 65 6e 20   cache has been 
62d0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 79 65 74 2e  initialized yet.
62e0: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
62f0: 20 49 66 20 6e 6f 74 2c 20 64 6f 20 69 74 20 6e   If not, do it n
6300: 6f 77 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20  ow...      //.. 
6310: 20 20 20 20 20 69 66 20 28 5f 66 69 65 6c 64 49       if (_fieldI
6320: 6e 64 65 78 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  ndexes == null).
6330: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
6340: 20 20 20 20 5f 66 69 65 6c 64 49 6e 64 65 78 65      _fieldIndexe
6350: 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
6360: 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 28  ry<string, int>(
6370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6380: 53 74 72 69 6e 67 43 6f 6d 70 61 72 65 72 2e 4f  StringComparer.O
6390: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
63a0: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  );..      }.... 
63b0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f       //..      /
63c0: 2f 20 4e 4f 54 45 3a 20 4e 65 78 74 2c 20 73 65  / NOTE: Next, se
63d0: 65 20 69 66 20 74 68 65 20 69 6e 64 65 78 20 66  e if the index f
63e0: 6f 72 20 74 68 65 20 72 65 71 75 65 73 74 65 64  or the requested
63f0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 68 61 73   column name has
6400: 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 2f 2f 20   been..      // 
6410: 20 20 20 20 20 20 63 61 63 68 65 64 20 61 6c 72        cached alr
6420: 65 61 64 79 2e 20 20 49 66 20 73 6f 2c 20 72 65  eady.  If so, re
6430: 74 75 72 6e 20 74 68 65 20 63 61 63 68 65 64 20  turn the cached 
6440: 76 61 6c 75 65 2e 20 20 4f 74 68 65 72 77 69 73  value.  Otherwis
6450: 65 2c 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  e,..      //    
6460: 20 20 20 6c 6f 6f 6b 75 70 20 74 68 65 20 76 61     lookup the va
6470: 6c 75 65 20 61 6e 64 20 74 68 65 6e 20 63 61 63  lue and then cac
6480: 68 65 20 74 68 65 20 72 65 73 75 6c 74 20 66 6f  he the result fo
6490: 72 20 66 75 74 75 72 65 20 75 73 65 2e 0d 0a 20  r future use... 
64a0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69       //..      i
64b0: 6e 74 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nt r;....      i
64c0: 66 20 28 21 5f 66 69 65 6c 64 49 6e 64 65 78 65  f (!_fieldIndexe
64d0: 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 6e 61  s.TryGetValue(na
64e0: 6d 65 2c 20 6f 75 74 20 72 29 29 0d 0a 20 20 20  me, out r))..   
64f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6500: 72 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65  r = _activeState
6510: 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
6520: 49 6e 64 65 78 28 5f 61 63 74 69 76 65 53 74 61  Index(_activeSta
6530: 74 65 6d 65 6e 74 2c 20 6e 61 6d 65 29 3b 0d 0a  tement, name);..
6540: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
6550: 72 20 3d 3d 20 2d 31 20 26 26 20 5f 6b 65 79 49  r == -1 && _keyI
6560: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
6570: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6580: 20 20 20 20 20 20 20 20 20 72 20 3d 20 5f 6b 65           r = _ke
6590: 79 49 6e 66 6f 2e 47 65 74 4f 72 64 69 6e 61 6c  yInfo.GetOrdinal
65a0: 28 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  (name);..       
65b0: 20 20 20 20 20 20 20 69 66 20 28 72 20 3e 20 2d         if (r > -
65c0: 31 29 20 72 20 2b 3d 20 50 72 69 76 61 74 65 56  1) r += PrivateV
65d0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
65e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
65f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 66 69 65  ..          _fie
6600: 6c 64 49 6e 64 65 78 65 73 2e 41 64 64 28 6e 61  ldIndexes.Add(na
6610: 6d 65 2c 20 72 29 3b 0d 0a 20 20 20 20 20 20 7d  me, r);..      }
6620: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
6630: 20 72 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20   r;..    }....  
6640: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6650: 0a 20 20 20 20 2f 2f 2f 20 53 63 68 65 6d 61 20  .    /// Schema 
6660: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 53  information in S
6670: 51 4c 69 74 65 20 69 73 20 64 69 66 66 69 63 75  QLite is difficu
6680: 6c 74 20 74 6f 20 6d 61 70 20 69 6e 74 6f 20 2e  lt to map into .
6690: 4e 45 54 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  NET conventions,
66a0: 20 73 6f 20 61 20 6c 6f 74 20 6f 66 20 77 6f 72   so a lot of wor
66b0: 6b 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 0d 0a  k must be done..
66c0: 20 20 20 20 2f 2f 2f 20 74 6f 20 67 61 74 68 65      /// to gathe
66d0: 72 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20  r the necessary 
66e0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 6f 20 69  information so i
66f0: 74 20 63 61 6e 20 62 65 20 72 65 70 72 65 73 65  t can be represe
6700: 6e 74 65 64 20 69 6e 20 61 6e 20 41 44 4f 2e 4e  nted in an ADO.N
6710: 45 54 20 6d 61 6e 6e 65 72 2e 0d 0a 20 20 20 20  ET manner...    
6720: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
6730: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
6740: 3e 52 65 74 75 72 6e 73 20 61 20 44 61 74 61 54  >Returns a DataT
6750: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
6760: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
6770: 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 61  mation for the a
6780: 63 74 69 76 65 20 53 45 4c 45 43 54 20 73 74 61  ctive SELECT sta
6790: 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72 6f  tement being pro
67a0: 63 65 73 73 65 64 2e 3c 2f 72 65 74 75 72 6e 73  cessed.</returns
67b0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
67c0: 65 72 72 69 64 65 20 44 61 74 61 54 61 62 6c 65  erride DataTable
67d0: 20 47 65 74 53 63 68 65 6d 61 54 61 62 6c 65 28   GetSchemaTable(
67e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
67f0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6800: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 47  ..      return G
6810: 65 74 53 63 68 65 6d 61 54 61 62 6c 65 28 74 72  etSchemaTable(tr
6820: 75 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20  ue, false);..   
6830: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
6840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6880: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
6890: 67 69 6f 6e 20 43 6f 6c 75 6d 6e 50 61 72 65 6e  gion ColumnParen
68a0: 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 70 72 69  t Class..    pri
68b0: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
68c0: 73 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 3a  s ColumnParent :
68d0: 20 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61 72   IEqualityCompar
68e0: 65 72 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e  er<ColumnParent>
68f0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
6900: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
6910: 46 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20  Fields..        
6920: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 61  public string Da
6930: 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20 20 20  tabaseName;..   
6940: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
6950: 6e 67 20 54 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20  ng TableName;.. 
6960: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
6970: 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 3b  ring ColumnName;
6980: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
6990: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
69a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
69f0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
6a00: 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
6a10: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 43          public C
6a20: 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 29 0d 0a 20  olumnParent().. 
6a30: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6a40: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
6a50: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
6a60: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
6a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ab0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
6ac0: 62 6c 69 63 20 43 6f 6c 75 6d 6e 50 61 72 65 6e  blic ColumnParen
6ad0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
6ae0: 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 4e  string databaseN
6af0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
6b00: 20 20 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61    string tableNa
6b10: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
6b20: 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61   string columnNa
6b30: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
6b40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 3a  )..            :
6b50: 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20   this()..       
6b60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6b70: 74 68 69 73 2e 44 61 74 61 62 61 73 65 4e 61 6d  this.DatabaseNam
6b80: 65 20 3d 20 64 61 74 61 62 61 73 65 4e 61 6d 65  e = databaseName
6b90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
6ba0: 68 69 73 2e 54 61 62 6c 65 4e 61 6d 65 20 3d 20  his.TableName = 
6bb0: 74 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  tableName;..    
6bc0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 43 6f 6c          this.Col
6bd0: 75 6d 6e 4e 61 6d 65 20 3d 20 63 6f 6c 75 6d 6e  umnName = column
6be0: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  Name;..        }
6bf0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
6c00: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
6c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6c60: 20 20 20 23 72 65 67 69 6f 6e 20 49 45 71 75 61     #region IEqua
6c70: 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 43 6f 6c  lityComparer<Col
6c80: 75 6d 6e 50 61 72 65 6e 74 3e 20 4d 65 6d 62 65  umnParent> Membe
6c90: 72 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  rs..        publ
6ca0: 69 63 20 62 6f 6f 6c 20 45 71 75 61 6c 73 28 43  ic bool Equals(C
6cb0: 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 78 2c 20 43  olumnParent x, C
6cc0: 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 79 29 0d 0a  olumnParent y)..
6cd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6ce0: 20 20 20 20 20 20 20 69 66 20 28 28 78 20 3d 3d         if ((x ==
6cf0: 20 6e 75 6c 6c 29 20 26 26 20 28 79 20 3d 3d 20   null) && (y == 
6d00: 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
6d10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6d20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
6d30: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
6d40: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6d50: 65 6c 73 65 20 69 66 20 28 28 78 20 3d 3d 20 6e  else if ((x == n
6d60: 75 6c 6c 29 20 7c 7c 20 28 79 20 3d 3d 20 6e 75  ull) || (y == nu
6d70: 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
6d80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6d90: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
6da0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6db0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
6dc0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
6dd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6de0: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
6df0: 45 71 75 61 6c 73 28 78 2e 44 61 74 61 62 61 73  Equals(x.Databas
6e00: 65 4e 61 6d 65 2c 20 79 2e 44 61 74 61 62 61 73  eName, y.Databas
6e10: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
6e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e30: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
6e40: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
6e50: 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
6e60: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
6e80: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
6e90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
6ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6eb0: 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75   if (!String.Equ
6ec0: 61 6c 73 28 78 2e 54 61 62 6c 65 4e 61 6d 65 2c  als(x.TableName,
6ed0: 20 79 2e 54 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20   y.TableName,.. 
6ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ef0: 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d         StringCom
6f00: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
6f10: 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20  gnoreCase))..   
6f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f40: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
6f50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6f60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6f70: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
6f80: 69 6e 67 2e 45 71 75 61 6c 73 28 78 2e 43 6f 6c  ing.Equals(x.Col
6f90: 75 6d 6e 4e 61 6d 65 2c 20 79 2e 43 6f 6c 75 6d  umnName, y.Colum
6fa0: 6e 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  nName,..        
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6fc0: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
6fd0: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
6fe0: 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
6ff0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7000: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
7010: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
7020: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7040: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
7050: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7060: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7070: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
7080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
70c0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74        public int
70d0: 20 47 65 74 48 61 73 68 43 6f 64 65 28 43 6f 6c   GetHashCode(Col
70e0: 75 6d 6e 50 61 72 65 6e 74 20 6f 62 6a 29 0d 0a  umnParent obj)..
70f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7100: 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 75 6c         int resul
7110: 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  t = 0;....      
7120: 20 20 20 20 20 20 69 66 20 28 28 6f 62 6a 20 21        if ((obj !
7130: 3d 20 6e 75 6c 6c 29 20 26 26 20 28 6f 62 6a 2e  = null) && (obj.
7140: 44 61 74 61 62 61 73 65 4e 61 6d 65 20 21 3d 20  DatabaseName != 
7150: 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
7160: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 5e          result ^
7170: 3d 20 6f 62 6a 2e 44 61 74 61 62 61 73 65 4e 61  = obj.DatabaseNa
7180: 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28 29  me.GetHashCode()
7190: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
71a0: 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75 6c   if ((obj != nul
71b0: 6c 29 20 26 26 20 28 6f 62 6a 2e 54 61 62 6c 65  l) && (obj.Table
71c0: 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a  Name != null))..
71d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
71e0: 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e 54 61  result ^= obj.Ta
71f0: 62 6c 65 4e 61 6d 65 2e 47 65 74 48 61 73 68 43  bleName.GetHashC
7200: 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ode();....      
7210: 20 20 20 20 20 20 69 66 20 28 28 6f 62 6a 20 21        if ((obj !
7220: 3d 20 6e 75 6c 6c 29 20 26 26 20 28 6f 62 6a 2e  = null) && (obj.
7230: 43 6f 6c 75 6d 6e 4e 61 6d 65 20 21 3d 20 6e 75  ColumnName != nu
7240: 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
7250: 20 20 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20        result ^= 
7260: 6f 62 6a 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2e 47  obj.ColumnName.G
7270: 65 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d  etHashCode();...
7280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7290: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
72a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
72b0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
72c0: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
72d0: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
72e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7320: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72 69 76  ////....    priv
7330: 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
7340: 47 65 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c 75  GetStatementColu
7350: 6d 6e 50 61 72 65 6e 74 73 28 0d 0a 20 20 20 20  mnParents(..    
7360: 20 20 20 20 53 51 4c 69 74 65 42 61 73 65 20 73      SQLiteBase s
7370: 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ql,..        SQL
7380: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
7390: 74 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  t,..        int 
73a0: 66 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a 20 20 20  fieldCount,..   
73b0: 20 20 20 20 20 72 65 66 20 44 69 63 74 69 6f 6e       ref Diction
73c0: 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ary<ColumnParent
73d0: 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20 70 61 72  , List<int>> par
73e0: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 0d 0a 20  entToColumns,.. 
73f0: 20 20 20 20 20 20 20 72 65 66 20 44 69 63 74 69         ref Dicti
7400: 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d  onary<int, Colum
7410: 6e 50 61 72 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54  nParent> columnT
7420: 6f 50 61 72 65 6e 74 0d 0a 20 20 20 20 20 20 20  oParent..       
7430: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
7440: 20 20 20 69 66 20 28 70 61 72 65 6e 74 54 6f 43     if (parentToC
7450: 6f 6c 75 6d 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  olumns == null).
7460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72  .            par
7470: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e  entToColumns = n
7480: 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 43 6f  ew Dictionary<Co
7490: 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73 74  lumnParent, List
74a0: 3c 69 6e 74 3e 3e 28 0d 0a 20 20 20 20 20 20 20  <int>>(..       
74b0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f 6c           new Col
74c0: 75 6d 6e 50 61 72 65 6e 74 28 29 29 3b 0d 0a 0d  umnParent());...
74d0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6c  .        if (col
74e0: 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 3d 20 6e  umnToParent == n
74f0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7500: 20 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74    columnToParent
7510: 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72   = new Dictionar
7520: 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72  y<int, ColumnPar
7530: 65 6e 74 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ent>();....     
7540: 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20     for (int n = 
7550: 30 3b 20 6e 20 3c 20 66 69 65 6c 64 43 6f 75 6e  0; n < fieldCoun
7560: 74 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 20  t; n++)..       
7570: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7580: 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 4e  string databaseN
7590: 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e  ame = sql.Column
75a0: 44 61 74 61 62 61 73 65 4e 61 6d 65 28 73 74 6d  DatabaseName(stm
75b0: 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  t, n);..        
75c0: 20 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c 65      string table
75d0: 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d  Name = sql.Colum
75e0: 6e 54 61 62 6c 65 4e 61 6d 65 28 73 74 6d 74 2c  nTableName(stmt,
75f0: 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   n);..          
7600: 20 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e    string columnN
7610: 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e  ame = sql.Column
7620: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 73 74 6d  OriginalName(stm
7630: 74 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  t, n);....      
7640: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 50 61 72 65        ColumnPare
7650: 6e 74 20 6b 65 79 20 3d 20 6e 65 77 20 43 6f 6c  nt key = new Col
7660: 75 6d 6e 50 61 72 65 6e 74 28 64 61 74 61 62 61  umnParent(databa
7670: 73 65 4e 61 6d 65 2c 20 74 61 62 6c 65 4e 61 6d  seName, tableNam
7680: 65 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  e, null);..     
7690: 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 50 61 72         ColumnPar
76a0: 65 6e 74 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  ent value = new 
76b0: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 64 61 74  ColumnParent(dat
76c0: 61 62 61 73 65 4e 61 6d 65 2c 20 74 61 62 6c 65  abaseName, table
76d0: 4e 61 6d 65 2c 20 63 6f 6c 75 6d 6e 4e 61 6d 65  Name, columnName
76e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
76f0: 20 20 69 66 20 28 21 70 61 72 65 6e 74 54 6f 43    if (!parentToC
7700: 6f 6c 75 6d 6e 73 2e 43 6f 6e 74 61 69 6e 73 4b  olumns.ContainsK
7710: 65 79 28 6b 65 79 29 29 0d 0a 20 20 20 20 20 20  ey(key))..      
7720: 20 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74            parent
7730: 54 6f 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 6b 65  ToColumns.Add(ke
7740: 79 2c 20 6e 65 77 20 4c 69 73 74 3c 69 6e 74 3e  y, new List<int>
7750: 28 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 6e 20 7d  (new int[] { n }
7760: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
7770: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
7780: 20 20 20 20 20 20 20 70 61 72 65 6e 74 54 6f 43         parentToC
7790: 6f 6c 75 6d 6e 73 5b 6b 65 79 5d 2e 41 64 64 28  olumns[key].Add(
77a0: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
77b0: 20 20 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e     columnToParen
77c0: 74 2e 41 64 64 28 6e 2c 20 76 61 6c 75 65 29 3b  t.Add(n, value);
77d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
77e0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
77f0: 61 6c 20 44 61 74 61 54 61 62 6c 65 20 47 65 74  al DataTable Get
7800: 53 63 68 65 6d 61 54 61 62 6c 65 28 62 6f 6f 6c  SchemaTable(bool
7810: 20 77 61 6e 74 55 6e 69 71 75 65 49 6e 66 6f 2c   wantUniqueInfo,
7820: 20 62 6f 6f 6c 20 77 61 6e 74 44 65 66 61 75 6c   bool wantDefaul
7830: 74 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a  tValue)..    {..
7840: 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65        CheckClose
7850: 64 28 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  d();..      if (
7860: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
7870: 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  ) SQLiteCommand.
7880: 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b  Check(_command);
7890: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ....      //..  
78a0: 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 57      // BUGFIX: W
78b0: 65 20 6e 65 65 64 20 74 6f 20 71 75 69 63 6b 6c  e need to quickl
78c0: 79 20 73 63 61 6e 20 61 6c 6c 20 74 68 65 20 66  y scan all the f
78d0: 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63 75 72  ields in the cur
78e0: 72 65 6e 74 0d 0a 20 20 20 20 20 20 2f 2f 20 20  rent..      //  
78f0: 20 20 20 20 20 20 20 22 72 65 73 75 6c 74 20 73         "result s
7900: 65 74 22 20 74 6f 20 73 65 65 20 68 6f 77 20 6d  et" to see how m
7910: 61 6e 79 20 64 69 73 74 69 6e 63 74 20 74 61 62  any distinct tab
7920: 6c 65 73 20 61 72 65 20 61 63 74 75 61 6c 6c 79  les are actually
7930: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
7940: 20 20 20 69 6e 76 6f 6c 76 65 64 2e 20 20 54 68     involved.  Th
7950: 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  is information i
7960: 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74  s necessary so t
7970: 68 61 74 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20  hat some..      
7980: 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 74 65 6c  //         intel
7990: 6c 69 67 65 6e 74 20 64 65 63 69 73 69 6f 6e 73  ligent decisions
79a0: 20 63 61 6e 20 62 65 20 6d 61 64 65 20 77 68 65   can be made whe
79b0: 6e 20 63 6f 6e 73 74 72 75 63 74 69 6e 67 20 74  n constructing t
79c0: 68 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  he..      //    
79d0: 20 20 20 20 20 6d 65 74 61 64 61 74 61 20 62 65       metadata be
79e0: 6c 6f 77 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  low.  For exampl
79f0: 65 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 62 65  e, we need to be
7a00: 20 76 65 72 79 20 63 61 72 65 66 75 6c 0d 0a 20   very careful.. 
7a10: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
7a20: 61 62 6f 75 74 20 66 6c 61 67 67 69 6e 67 20 61  about flagging a
7a30: 20 70 61 72 74 69 63 75 6c 61 72 20 63 6f 6c 75   particular colu
7a40: 6d 6e 20 61 73 20 22 75 6e 69 71 75 65 22 20 6a  mn as "unique" j
7a50: 75 73 74 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  ust..      //   
7a60: 20 20 20 20 20 20 62 65 63 61 75 73 65 20 69 74        because it
7a70: 20 77 61 73 20 69 6e 20 69 74 73 20 6f 72 69 67   was in its orig
7a80: 69 6e 61 6c 20 75 6e 64 65 72 6c 79 69 6e 67 20  inal underlying 
7a90: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0d 0a  database table..
7aa0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
7ab0: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
7ac0: 77 20 6d 75 6c 74 69 70 6c 65 20 74 61 62 6c 65  w multiple table
7ad0: 73 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20 74 68  s involved in th
7ae0: 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  e..      //     
7af0: 20 20 20 20 22 72 65 73 75 6c 74 20 73 65 74 22      "result set"
7b00: 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37  .  See ticket [7
7b10: 65 33 66 61 39 33 37 34 34 5d 20 66 6f 72 20 6d  e3fa93744] for m
7b20: 6f 72 65 20 64 65 74 61 69 6c 65 64 0d 0a 20 20  ore detailed..  
7b30: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69      //         i
7b40: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0d 0a 20 20 20  nformation...   
7b50: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 44 69 63     //..      Dic
7b60: 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61  tionary<ColumnPa
7b70: 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e  rent, List<int>>
7b80: 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73   parentToColumns
7b90: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
7ba0: 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74 2c 20  Dictionary<int, 
7bb0: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20 63 6f  ColumnParent> co
7bc0: 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 20 6e  lumnToParent = n
7bd0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 65  ull;....      Ge
7be0: 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c 75 6d 6e  tStatementColumn
7bf0: 50 61 72 65 6e 74 73 28 0d 0a 20 20 20 20 20 20  Parents(..      
7c00: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e      _command.Con
7c10: 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2c 20 5f 61  nection._sql, _a
7c20: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
7c30: 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a 20 20  _fieldCount,..  
7c40: 20 20 20 20 20 20 20 20 72 65 66 20 70 61 72 65          ref pare
7c50: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 20 72 65 66  ntToColumns, ref
7c60: 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 29   columnToParent)
7c70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 44 61 74 61 54  ;....      DataT
7c80: 61 62 6c 65 20 74 62 6c 20 3d 20 6e 65 77 20 44  able tbl = new D
7c90: 61 74 61 54 61 62 6c 65 28 22 53 63 68 65 6d 61  ataTable("Schema
7ca0: 54 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20 20 20  Table");..      
7cb0: 44 61 74 61 54 61 62 6c 65 20 74 62 6c 49 6e 64  DataTable tblInd
7cc0: 65 78 65 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  exes = null;..  
7cd0: 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 74 62      DataTable tb
7ce0: 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 3b 0d 0a  lIndexColumns;..
7cf0: 20 20 20 20 20 20 44 61 74 61 52 6f 77 20 72 6f        DataRow ro
7d00: 77 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67  w;..      string
7d10: 20 74 65 6d 70 3b 0d 0a 20 20 20 20 20 20 73 74   temp;..      st
7d20: 72 69 6e 67 20 73 74 72 43 61 74 61 6c 6f 67 20  ring strCatalog 
7d30: 3d 20 22 22 3b 0d 0a 20 20 20 20 20 20 73 74 72  = "";..      str
7d40: 69 6e 67 20 73 74 72 54 61 62 6c 65 20 3d 20 22  ing strTable = "
7d50: 22 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67  ";..      string
7d60: 20 73 74 72 43 6f 6c 75 6d 6e 20 3d 20 22 22 3b   strColumn = "";
7d70: 0d 0a 0d 0a 20 20 20 20 20 20 74 62 6c 2e 4c 6f  ....      tbl.Lo
7d80: 63 61 6c 65 20 3d 20 43 75 6c 74 75 72 65 49 6e  cale = CultureIn
7d90: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
7da0: 75 72 65 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  ure;..      tbl.
7db0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
7dc0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f  maTableColumn.Co
7dd0: 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66  lumnName, typeof
7de0: 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (String));..    
7df0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
7e00: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
7e10: 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61  umn.ColumnOrdina
7e20: 6c 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b  l, typeof(int));
7e30: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
7e40: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
7e50: 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
7e60: 53 69 7a 65 2c 20 74 79 70 65 6f 66 28 69 6e 74  Size, typeof(int
7e70: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
7e80: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
7e90: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
7ea0: 65 72 69 63 50 72 65 63 69 73 69 6f 6e 2c 20 74  ericPrecision, t
7eb0: 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20  ypeof(int));..  
7ec0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
7ed0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
7ee0: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61  olumn.NumericSca
7ef0: 6c 65 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29  le, typeof(int))
7f00: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
7f10: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
7f20: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69  ableColumn.IsUni
7f30: 71 75 65 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  que, typeof(Bool
7f40: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ean));..      tb
7f50: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
7f60: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
7f70: 49 73 4b 65 79 2c 20 74 79 70 65 6f 66 28 42 6f  IsKey, typeof(Bo
7f80: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
7f90: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
7fa0: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
7fb0: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 65  nalColumn.BaseSe
7fc0: 72 76 65 72 4e 61 6d 65 2c 20 74 79 70 65 6f 66  rverName, typeof
7fd0: 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (string));..    
7fe0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
7ff0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
8000: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65  ionalColumn.Base
8010: 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 20 74 79 70  CatalogName, typ
8020: 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20  eof(String));.. 
8030: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
8040: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
8050: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d  Column.BaseColum
8060: 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74  nName, typeof(St
8070: 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
8080: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
8090: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
80a0: 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 2c  .BaseSchemaName,
80b0: 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29   typeof(String))
80c0: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
80d0: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
80e0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
80f0: 61 62 6c 65 4e 61 6d 65 2c 20 74 79 70 65 6f 66  ableName, typeof
8100: 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (String));..    
8110: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
8120: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
8130: 75 6d 6e 2e 44 61 74 61 54 79 70 65 2c 20 74 79  umn.DataType, ty
8140: 70 65 6f 66 28 54 79 70 65 29 29 3b 0d 0a 20 20  peof(Type));..  
8150: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
8160: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
8170: 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c  olumn.AllowDBNul
8180: 6c 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  l, typeof(Boolea
8190: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  n));..      tbl.
81a0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
81b0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72  maTableColumn.Pr
81c0: 6f 76 69 64 65 72 54 79 70 65 2c 20 74 79 70 65  oviderType, type
81d0: 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20  of(int));..     
81e0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
81f0: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
8200: 6d 6e 2e 49 73 41 6c 69 61 73 65 64 2c 20 74 79  mn.IsAliased, ty
8210: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d  peof(Boolean));.
8220: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
8230: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
8240: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65  leColumn.IsExpre
8250: 73 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f  ssion, typeof(Bo
8260: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
8270: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
8280: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
8290: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f  nalColumn.IsAuto
82a0: 49 6e 63 72 65 6d 65 6e 74 2c 20 74 79 70 65 6f  Increment, typeo
82b0: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20  f(Boolean));..  
82c0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
82d0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
82e0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
82f0: 52 6f 77 56 65 72 73 69 6f 6e 2c 20 74 79 70 65  RowVersion, type
8300: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
8310: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
8320: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
8330: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
8340: 73 48 69 64 64 65 6e 2c 20 74 79 70 65 6f 66 28  sHidden, typeof(
8350: 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20  Boolean));..    
8360: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
8370: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
8380: 75 6d 6e 2e 49 73 4c 6f 6e 67 2c 20 74 79 70 65  umn.IsLong, type
8390: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
83a0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
83b0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
83c0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
83d0: 73 52 65 61 64 4f 6e 6c 79 2c 20 74 79 70 65 6f  sReadOnly, typeo
83e0: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20  f(Boolean));..  
83f0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
8400: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
8410: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 50 72  ptionalColumn.Pr
8420: 6f 76 69 64 65 72 53 70 65 63 69 66 69 63 44 61  oviderSpecificDa
8430: 74 61 54 79 70 65 2c 20 74 79 70 65 6f 66 28 54  taType, typeof(T
8440: 79 70 65 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ype));..      tb
8450: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
8460: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
8470: 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56  lColumn.DefaultV
8480: 61 6c 75 65 2c 20 74 79 70 65 6f 66 28 6f 62 6a  alue, typeof(obj
8490: 65 63 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ect));..      tb
84a0: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 44  l.Columns.Add("D
84b0: 61 74 61 54 79 70 65 4e 61 6d 65 22 2c 20 74 79  ataTypeName", ty
84c0: 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a  peof(string));..
84d0: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
84e0: 73 2e 41 64 64 28 22 43 6f 6c 6c 61 74 69 6f 6e  s.Add("Collation
84f0: 54 79 70 65 22 2c 20 74 79 70 65 6f 66 28 73 74  Type", typeof(st
8500: 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
8510: 62 6c 2e 42 65 67 69 6e 4c 6f 61 64 44 61 74 61  bl.BeginLoadData
8520: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  ();....      for
8530: 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
8540: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b   _fieldCount; n+
8550: 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  +)..      {..   
8560: 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65 20       SQLiteType 
8570: 73 71 6c 54 79 70 65 20 3d 20 47 65 74 53 51 4c  sqlType = GetSQL
8580: 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20  iteType(_flags, 
8590: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  n);....        r
85a0: 6f 77 20 3d 20 74 62 6c 2e 4e 65 77 52 6f 77 28  ow = tbl.NewRow(
85b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 62  );....        Db
85c0: 54 79 70 65 20 74 79 70 20 3d 20 73 71 6c 54 79  Type typ = sqlTy
85d0: 70 65 2e 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20  pe.Type;....    
85e0: 20 20 20 20 2f 2f 20 44 65 66 61 75 6c 74 20 73      // Default s
85f0: 65 74 74 69 6e 67 73 20 66 6f 72 20 74 68 65 20  ettings for the 
8600: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20  column..        
8610: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
8620: 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65  olumn.ColumnName
8630: 5d 20 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0d  ] = GetName(n);.
8640: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
8650: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43  emaTableColumn.C
8660: 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 5d 20 3d 20  olumnOrdinal] = 
8670: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  n;..        row[
8680: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
8690: 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20  n.ColumnSize] = 
86a0: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44 62  SQLiteConvert.Db
86b0: 54 79 70 65 54 6f 43 6f 6c 75 6d 6e 53 69 7a 65  TypeToColumnSize
86c0: 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
86d0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
86e0: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65  olumn.NumericPre
86f0: 63 69 73 69 6f 6e 5d 20 3d 20 53 51 4c 69 74 65  cision] = SQLite
8700: 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f  Convert.DbTypeTo
8710: 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e  NumericPrecision
8720: 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
8730: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
8740: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61  olumn.NumericSca
8750: 6c 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76  le] = SQLiteConv
8760: 65 72 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65  ert.DbTypeToNume
8770: 72 69 63 53 63 61 6c 65 28 74 79 70 29 3b 0d 0a  ricScale(typ);..
8780: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
8790: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72  maTableColumn.Pr
87a0: 6f 76 69 64 65 72 54 79 70 65 5d 20 3d 20 73 71  oviderType] = sq
87b0: 6c 54 79 70 65 2e 54 79 70 65 3b 0d 0a 20 20 20  lType.Type;..   
87c0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
87d0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e  ableColumn.IsLon
87e0: 67 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  g] = false;..   
87f0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
8800: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77  ableColumn.Allow
8810: 44 42 4e 75 6c 6c 5d 20 3d 20 74 72 75 65 3b 0d  DBNull] = true;.
8820: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
8830: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
8840: 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c  Column.IsReadOnl
8850: 79 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  y] = false;..   
8860: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
8870: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
8880: 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e 5d  mn.IsRowVersion]
8890: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
88a0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
88b0: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75  leColumn.IsUniqu
88c0: 65 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  e] = false;..   
88d0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
88e0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79  ableColumn.IsKey
88f0: 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  ] = false;..    
8900: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
8910: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
8920: 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e  n.IsAutoIncremen
8930: 74 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  t] = false;..   
8940: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
8950: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74 61 54  ableColumn.DataT
8960: 79 70 65 5d 20 3d 20 47 65 74 46 69 65 6c 64 54  ype] = GetFieldT
8970: 79 70 65 28 6e 29 3b 0d 0a 20 20 20 20 20 20 20  ype(n);..       
8980: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
8990: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
89a0: 73 48 69 64 64 65 6e 5d 20 3d 20 66 61 6c 73 65  sHidden] = false
89b0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53  ;..        row[S
89c0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
89d0: 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 5d  .BaseSchemaName]
89e0: 20 3d 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61   = _baseSchemaNa
89f0: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  me;....        s
8a00: 74 72 43 6f 6c 75 6d 6e 20 3d 20 63 6f 6c 75 6d  trColumn = colum
8a10: 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 43 6f 6c  nToParent[n].Col
8a20: 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  umnName;..      
8a30: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
8a40: 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f  ullOrEmpty(strCo
8a50: 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29 20  lumn) == false) 
8a60: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
8a70: 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e  olumn.BaseColumn
8a80: 4e 61 6d 65 5d 20 3d 20 73 74 72 43 6f 6c 75 6d  Name] = strColum
8a90: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 6f  n;....        ro
8aa0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
8ab0: 75 6d 6e 2e 49 73 45 78 70 72 65 73 73 69 6f 6e  umn.IsExpression
8ac0: 5d 20 3d 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c  ] = String.IsNul
8ad0: 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f 6c 75  lOrEmpty(strColu
8ae0: 6d 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f  mn);..        ro
8af0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
8b00: 75 6d 6e 2e 49 73 41 6c 69 61 73 65 64 5d 20 3d  umn.IsAliased] =
8b10: 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65   (String.Compare
8b20: 28 47 65 74 4e 61 6d 65 28 6e 29 2c 20 73 74 72  (GetName(n), str
8b30: 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43 6f  Column, StringCo
8b40: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
8b50: 49 67 6e 6f 72 65 43 61 73 65 29 20 21 3d 20 30  IgnoreCase) != 0
8b60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65  );....        te
8b70: 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72  mp = columnToPar
8b80: 65 6e 74 5b 6e 5d 2e 54 61 62 6c 65 4e 61 6d 65  ent[n].TableName
8b90: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ;..        if (S
8ba0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
8bb0: 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c  pty(temp) == fal
8bc0: 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61  se) row[SchemaTa
8bd0: 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61  bleColumn.BaseTa
8be0: 62 6c 65 4e 61 6d 65 5d 20 3d 20 74 65 6d 70 3b  bleName] = temp;
8bf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65 6d 70  ....        temp
8c00: 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e   = columnToParen
8c10: 74 5b 6e 5d 2e 44 61 74 61 62 61 73 65 4e 61 6d  t[n].DatabaseNam
8c20: 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  e;..        if (
8c30: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
8c40: 6d 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61  mpty(temp) == fa
8c50: 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54  lse) row[SchemaT
8c60: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
8c70: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
8c80: 6d 65 5d 20 3d 20 74 65 6d 70 3b 0d 0a 0d 0a 20  me] = temp;.... 
8c90: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61         string da
8ca0: 74 61 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  taType = null;..
8cb0: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
8cc0: 20 68 61 76 65 20 61 20 74 61 62 6c 65 2d 62 6f   have a table-bo
8cd0: 75 6e 64 20 63 6f 6c 75 6d 6e 2c 20 65 78 74 72  und column, extr
8ce0: 61 63 74 20 74 68 65 20 65 78 74 72 61 20 69 6e  act the extra in
8cf0: 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 69  formation from i
8d00: 74 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  t..        if (S
8d10: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
8d20: 70 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d  pty(strColumn) =
8d30: 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20  = false)..      
8d40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73    {..          s
8d50: 74 72 69 6e 67 20 63 6f 6c 6c 53 65 71 3b 0d 0a  tring collSeq;..
8d60: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 62            bool b
8d70: 4e 6f 74 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  NotNull;..      
8d80: 20 20 20 20 62 6f 6f 6c 20 62 50 72 69 6d 61 72      bool bPrimar
8d90: 79 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  yKey;..         
8da0: 20 62 6f 6f 6c 20 62 41 75 74 6f 49 6e 63 72 65   bool bAutoIncre
8db0: 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ment;..         
8dc0: 20 73 74 72 69 6e 67 5b 5d 20 61 72 53 69 7a 65   string[] arSize
8dd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  ;....          /
8de0: 2f 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e  / Get the column
8df0: 20 6d 65 74 61 20 64 61 74 61 0d 0a 20 20 20 20   meta data..    
8e00: 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43        _command.C
8e10: 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2e 43  onnection._sql.C
8e20: 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 0d 0a  olumnMetaData(..
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72              (str
8e40: 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61  ing)row[SchemaTa
8e50: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
8e60: 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d  n.BaseCatalogNam
8e70: 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e],..           
8e80: 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68   (string)row[Sch
8e90: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
8ea0: 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 2c 0d 0a  aseTableName],..
8eb0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 43              strC
8ec0: 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20 20 20 20  olumn,..        
8ed0: 20 20 20 20 6f 75 74 20 64 61 74 61 54 79 70 65      out dataType
8ee0: 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71 2c 20 6f  , out collSeq, o
8ef0: 75 74 20 62 4e 6f 74 4e 75 6c 6c 2c 20 6f 75 74  ut bNotNull, out
8f00: 20 62 50 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75   bPrimaryKey, ou
8f10: 74 20 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74  t bAutoIncrement
8f20: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8f30: 69 66 20 28 62 4e 6f 74 4e 75 6c 6c 20 7c 7c 20  if (bNotNull || 
8f40: 62 50 72 69 6d 61 72 79 4b 65 79 29 20 72 6f 77  bPrimaryKey) row
8f50: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
8f60: 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20  mn.AllowDBNull] 
8f70: 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  = false;....    
8f80: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
8f90: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65  TableColumn.IsKe
8fa0: 79 5d 20 3d 20 62 50 72 69 6d 61 72 79 4b 65 79  y] = bPrimaryKey
8fb0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 6f 77  ;..          row
8fc0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  [SchemaTableOpti
8fd0: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74  onalColumn.IsAut
8fe0: 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 62 41  oIncrement] = bA
8ff0: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 3b 0d 0a 20  utoIncrement;.. 
9000: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 22 43 6f           row["Co
9010: 6c 6c 61 74 69 6f 6e 54 79 70 65 22 5d 20 3d 20  llationType"] = 
9020: 63 6f 6c 6c 53 65 71 3b 0d 0a 0d 0a 20 20 20 20  collSeq;....    
9030: 20 20 20 20 20 20 2f 2f 20 46 6f 72 20 74 79 70        // For typ
9040: 65 73 20 6c 69 6b 65 20 76 61 72 63 68 61 72 28  es like varchar(
9050: 35 30 29 20 61 6e 64 20 73 75 63 68 2c 20 65 78  50) and such, ex
9060: 74 72 61 63 74 20 74 68 65 20 73 69 7a 65 0d 0a  tract the size..
9070: 20 20 20 20 20 20 20 20 20 20 61 72 53 69 7a 65            arSize
9080: 20 3d 20 64 61 74 61 54 79 70 65 2e 53 70 6c 69   = dataType.Spli
9090: 74 28 27 28 27 29 3b 0d 0a 20 20 20 20 20 20 20  t('(');..       
90a0: 20 20 20 69 66 20 28 61 72 53 69 7a 65 2e 4c 65     if (arSize.Le
90b0: 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20 20 20 20  ngth > 1)..     
90c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
90d0: 20 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 61      dataType = a
90e0: 72 53 69 7a 65 5b 30 5d 3b 0d 0a 20 20 20 20 20  rSize[0];..     
90f0: 20 20 20 20 20 20 20 61 72 53 69 7a 65 20 3d 20         arSize = 
9100: 61 72 53 69 7a 65 5b 31 5d 2e 53 70 6c 69 74 28  arSize[1].Split(
9110: 27 29 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ')');..         
9120: 20 20 20 69 66 20 28 61 72 53 69 7a 65 2e 4c 65     if (arSize.Le
9130: 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20 20 20 20  ngth > 1)..     
9140: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9150: 20 20 20 20 20 20 20 20 61 72 53 69 7a 65 20 3d          arSize =
9160: 20 61 72 53 69 7a 65 5b 30 5d 2e 53 70 6c 69 74   arSize[0].Split
9170: 28 27 2c 27 2c 20 27 2e 27 29 3b 0d 0a 20 20 20  (',', '.');..   
9180: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
9190: 71 6c 54 79 70 65 2e 54 79 70 65 20 3d 3d 20 44  qlType.Type == D
91a0: 62 54 79 70 65 2e 42 69 6e 61 72 79 20 7c 7c 20  bType.Binary || 
91b0: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 49 73  SQLiteConvert.Is
91c0: 53 74 72 69 6e 67 44 62 54 79 70 65 28 73 71 6c  StringDbType(sql
91d0: 54 79 70 65 2e 54 79 70 65 29 29 0d 0a 20 20 20  Type.Type))..   
91e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
91f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
9200: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
9210: 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20  umn.ColumnSize] 
9220: 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33  = Convert.ToInt3
9230: 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20 43 75 6c  2(arSize[0], Cul
9240: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
9250: 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20  ntCulture);..   
9260: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9270: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
9280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9290: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
92a0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
92b0: 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63  leColumn.Numeric
92c0: 50 72 65 63 69 73 69 6f 6e 5d 20 3d 20 43 6f 6e  Precision] = Con
92d0: 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53  vert.ToInt32(arS
92e0: 69 7a 65 5b 30 5d 2c 20 43 75 6c 74 75 72 65 49  ize[0], CultureI
92f0: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
9300: 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  ture);..        
9310: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69          if (arSi
9320: 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a  ze.Length > 1)..
9330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9340: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
9350: 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53  eColumn.NumericS
9360: 63 61 6c 65 5d 20 3d 20 43 6f 6e 76 65 72 74 2e  cale] = Convert.
9370: 54 6f 49 6e 74 33 32 28 61 72 53 69 7a 65 5b 31  ToInt32(arSize[1
9380: 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49  ], CultureInfo.I
9390: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29  nvariantCulture)
93a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
93b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
93c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
93d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
93e0: 77 61 6e 74 44 65 66 61 75 6c 74 56 61 6c 75 65  wantDefaultValue
93f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
9400: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44              // D
9410: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 64 65 66  etermine the def
9420: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74  ault value for t
9430: 68 65 20 63 6f 6c 75 6d 6e 2c 20 77 68 69 63 68  he column, which
9440: 20 73 75 63 6b 73 20 62 65 63 61 75 73 65 20 77   sucks because w
9450: 65 20 68 61 76 65 20 74 6f 20 71 75 65 72 79 20  e have to query 
9460: 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65  the schema for e
9470: 61 63 68 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20  ach column..    
9480: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
9490: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64  QLiteCommand cmd
94a0: 54 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69  Table = new SQLi
94b0: 74 65 43 6f 6d 6d 61 6e 64 28 53 74 72 69 6e 67  teCommand(String
94c0: 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  .Format(CultureI
94d0: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
94e0: 74 75 72 65 2c 20 22 50 52 41 47 4d 41 20 5b 7b  ture, "PRAGMA [{
94f0: 30 7d 5d 2e 54 41 42 4c 45 5f 49 4e 46 4f 28 5b  0}].TABLE_INFO([
9500: 7b 31 7d 5d 29 22 2c 0d 0a 20 20 20 20 20 20 20  {1}])",..       
9510: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
9520: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
9530: 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67  lumn.BaseCatalog
9540: 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20  Name],..        
9550: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
9560: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
9570: 54 61 62 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20  TableName]..    
9580: 20 20 20 20 20 20 20 20 20 20 29 2c 20 5f 63 6f            ), _co
9590: 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
95a0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
95b0: 75 73 69 6e 67 20 28 44 62 44 61 74 61 52 65 61  using (DbDataRea
95c0: 64 65 72 20 72 64 54 61 62 6c 65 20 3d 20 63 6d  der rdTable = cm
95d0: 64 54 61 62 6c 65 2e 45 78 65 63 75 74 65 52 65  dTable.ExecuteRe
95e0: 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20  ader())..       
95f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9600: 20 20 20 20 20 20 2f 2f 20 46 69 6e 64 20 74 68        // Find th
9610: 65 20 6d 61 74 63 68 69 6e 67 20 63 6f 6c 75 6d  e matching colum
9620: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
9630: 20 77 68 69 6c 65 20 28 72 64 54 61 62 6c 65 2e   while (rdTable.
9640: 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20  Read())..       
9650: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9660: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
9670: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 28 73 74  ring.Compare((st
9680: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
9690: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  ableColumn.BaseC
96a0: 6f 6c 75 6d 6e 4e 61 6d 65 5d 2c 20 72 64 54 61  olumnName], rdTa
96b0: 62 6c 65 2e 47 65 74 53 74 72 69 6e 67 28 31 29  ble.GetString(1)
96c0: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
96d0: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
96e0: 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20  Case) == 0)..   
96f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
9700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9710: 20 20 69 66 20 28 72 64 54 61 62 6c 65 2e 49 73    if (rdTable.Is
9720: 44 42 4e 75 6c 6c 28 34 29 20 3d 3d 20 66 61 6c  DBNull(4) == fal
9730: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
9740: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
9750: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
9760: 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56 61  Column.DefaultVa
9770: 6c 75 65 5d 20 3d 20 72 64 54 61 62 6c 65 5b 34  lue] = rdTable[4
9780: 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
9790: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
97a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
97c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
97d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
97e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44  ..          // D
97f0: 65 74 65 72 6d 69 6e 65 20 49 73 55 6e 69 71 75  etermine IsUniqu
9800: 65 20 70 72 6f 70 65 72 6c 79 2c 20 77 68 69 63  e properly, whic
9810: 68 20 69 73 20 61 20 70 61 69 6e 20 69 6e 20 74  h is a pain in t
9820: 68 65 20 62 75 74 74 21 0d 0a 20 20 20 20 20 20  he butt!..      
9830: 20 20 20 20 69 66 20 28 77 61 6e 74 55 6e 69 71      if (wantUniq
9840: 75 65 49 6e 66 6f 29 0d 0a 20 20 20 20 20 20 20  ueInfo)..       
9850: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9860: 20 20 69 66 20 28 28 73 74 72 69 6e 67 29 72 6f    if ((string)ro
9870: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
9880: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65  ionalColumn.Base
9890: 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20 21 3d 20  CatalogName] != 
98a0: 73 74 72 43 61 74 61 6c 6f 67 0d 0a 20 20 20 20  strCatalog..    
98b0: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 73 74            || (st
98c0: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
98d0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
98e0: 61 62 6c 65 4e 61 6d 65 5d 20 21 3d 20 73 74 72  ableName] != str
98f0: 54 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  Table)..        
9900: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9910: 20 20 20 20 20 73 74 72 43 61 74 61 6c 6f 67 20       strCatalog 
9920: 3d 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63  = (string)row[Sc
9930: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
9940: 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61  lColumn.BaseCata
9950: 6c 6f 67 4e 61 6d 65 5d 3b 0d 0a 20 20 20 20 20  logName];..     
9960: 20 20 20 20 20 20 20 20 20 73 74 72 54 61 62 6c           strTabl
9970: 65 20 3d 20 28 73 74 72 69 6e 67 29 72 6f 77 5b  e = (string)row[
9980: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
9990: 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d  n.BaseTableName]
99a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
99b0: 20 20 20 74 62 6c 49 6e 64 65 78 65 73 20 3d 20     tblIndexes = 
99c0: 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74  _command.Connect
99d0: 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28 22 49  ion.GetSchema("I
99e0: 6e 64 65 78 65 73 22 2c 20 6e 65 77 20 73 74 72  ndexes", new str
99f0: 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ing[] {..       
9a00: 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67           (string
9a10: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
9a20: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42  OptionalColumn.B
9a30: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 2c  aseCatalogName],
9a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9a50: 20 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20    null,..       
9a60: 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67           (string
9a70: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
9a80: 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65  Column.BaseTable
9a90: 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20  Name],..        
9aa0: 20 20 20 20 20 20 20 20 6e 75 6c 6c 20 7d 29 3b          null });
9ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9ac0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ...            f
9ad0: 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f 77 20  oreach (DataRow 
9ae0: 72 6f 77 49 6e 64 65 78 65 73 20 69 6e 20 74 62  rowIndexes in tb
9af0: 6c 49 6e 64 65 78 65 73 2e 52 6f 77 73 29 0d 0a  lIndexes.Rows)..
9b00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 62 6c               tbl
9b20: 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 20 3d 20 5f  IndexColumns = _
9b30: 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69  command.Connecti
9b40: 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28 22 49 6e  on.GetSchema("In
9b50: 64 65 78 43 6f 6c 75 6d 6e 73 22 2c 20 6e 65 77  dexColumns", new
9b60: 20 73 74 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20   string[] {..   
9b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74               (st
9b80: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
9b90: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
9ba0: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
9bb0: 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me],..          
9bc0: 20 20 20 20 20 20 6e 75 6c 6c 2c 0d 0a 20 20 20        null,..   
9bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74               (st
9be0: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
9bf0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
9c00: 61 62 6c 65 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20  ableName],..    
9c10: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72              (str
9c20: 69 6e 67 29 72 6f 77 49 6e 64 65 78 65 73 5b 22  ing)rowIndexes["
9c30: 49 4e 44 45 58 5f 4e 41 4d 45 22 5d 2c 0d 0a 20  INDEX_NAME"],.. 
9c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
9c50: 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ull..           
9c60: 20 20 20 20 20 7d 29 3b 0d 0a 20 20 20 20 20 20       });..      
9c70: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
9c80: 28 44 61 74 61 52 6f 77 20 72 6f 77 43 6f 6c 75  (DataRow rowColu
9c90: 6d 6e 49 6e 64 65 78 20 69 6e 20 74 62 6c 49 6e  mnIndex in tblIn
9ca0: 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73 29  dexColumns.Rows)
9cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9cc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9cd0: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
9ce0: 6d 70 61 72 65 28 28 73 74 72 69 6e 67 29 72 6f  mpare((string)ro
9cf0: 77 43 6f 6c 75 6d 6e 49 6e 64 65 78 5b 22 43 4f  wColumnIndex["CO
9d00: 4c 55 4d 4e 5f 4e 41 4d 45 22 5d 2c 20 73 74 72  LUMN_NAME"], str
9d10: 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43 6f  Column, StringCo
9d20: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
9d30: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
9d40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9d50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9d60: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
9d80: 20 42 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 75   BUGFIX: Make su
9d90: 72 65 20 74 68 61 74 20 77 65 20 6f 6e 6c 79 20  re that we only 
9da0: 66 6c 61 67 20 74 68 69 73 20 63 6f 6c 75 6d 6e  flag this column
9db0: 20 61 73 20 22 75 6e 69 71 75 65 22 0d 0a 20 20   as "unique"..  
9dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9dd0: 2f 2f 20 20 20 20 20 20 20 20 20 69 66 20 77 65  //         if we
9de0: 20 61 72 65 20 6e 6f 74 20 70 72 6f 63 65 73 73   are not process
9df0: 69 6e 67 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ing of some kind
9e00: 20 6f 66 20 6d 75 6c 74 69 2d 74 61 62 6c 65 0d   of multi-table.
9e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9e20: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 63 6f     //         co
9e30: 6e 73 74 72 75 63 74 20 28 69 2e 65 2e 20 61 20  nstruct (i.e. a 
9e40: 6a 6f 69 6e 29 20 62 65 63 61 75 73 65 20 69 6e  join) because in
9e50: 20 74 68 61 74 20 63 61 73 65 20 77 65 20 6d 75   that case we mu
9e60: 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..            
9e70: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
9e80: 20 61 6c 6c 6f 77 20 64 75 70 6c 69 63 61 74 65   allow duplicate
9e90: 20 76 61 6c 75 65 73 20 28 72 65 66 65 72 20 74   values (refer t
9ea0: 6f 20 74 69 63 6b 65 74 20 5b 37 65 33 66 61 39  o ticket [7e3fa9
9eb0: 33 37 34 34 5d 29 2e 0d 0a 20 20 20 20 20 20 20  3744])...       
9ec0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
9ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ee0: 20 69 66 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c   if (parentToCol
9ef0: 75 6d 6e 73 2e 43 6f 75 6e 74 20 3d 3d 20 31 20  umns.Count == 1 
9f00: 26 26 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d  && tblIndexColum
9f10: 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74 20 3d 3d  ns.Rows.Count ==
9f20: 20 31 20 26 26 20 28 62 6f 6f 6c 29 72 6f 77 5b   1 && (bool)row[
9f30: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
9f40: 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d  n.AllowDBNull] =
9f50: 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20  = false)..      
9f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
9f70: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
9f80: 75 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 20 3d 20  umn.IsUnique] = 
9f90: 72 6f 77 49 6e 64 65 78 65 73 5b 22 55 4e 49 51  rowIndexes["UNIQ
9fa0: 55 45 22 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  UE"];....       
9fb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66             // If
9fc0: 20 69 74 73 20 61 6e 20 69 6e 74 65 67 65 72 20   its an integer 
9fd0: 70 72 69 6d 61 72 79 20 6b 65 79 20 61 6e 64 20  primary key and 
9fe0: 74 68 65 20 6f 6e 6c 79 20 70 72 69 6d 61 72 79  the only primary
9ff0: 20 6b 65 79 20 69 6e 20 74 68 65 20 74 61 62 6c   key in the tabl
a000: 65 2c 20 74 68 65 6e 20 69 74 73 20 61 20 72 6f  e, then its a ro
a010: 77 69 64 20 61 6c 69 61 73 20 61 6e 64 20 69 73  wid alias and is
a020: 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0d 0a   autoincrement..
a030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a040: 20 20 2f 2f 20 4e 4f 54 45 3a 20 20 43 75 72 72    // NOTE:  Curr
a050: 65 6e 74 6c 79 20 63 6f 6d 6d 65 6e 74 65 64 20  ently commented 
a060: 6f 75 74 20 62 65 63 61 75 73 65 20 74 68 69 73  out because this
a070: 20 69 73 20 6e 6f 74 20 61 6c 77 61 79 73 20 74   is not always t
a080: 68 65 20 64 65 73 69 72 65 64 20 62 65 68 61 76  he desired behav
a090: 69 6f 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ior.  For exampl
a0a0: 65 2c 20 61 20 31 3a 31 20 72 65 6c 61 74 69 6f  e, a 1:1 relatio
a0b0: 6e 73 68 69 70 20 77 69 74 68 0d 0a 20 20 20 20  nship with..    
a0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
a0d0: 20 20 20 20 20 20 20 20 61 6e 6f 74 68 65 72 20          another 
a0e0: 74 61 62 6c 65 2c 20 77 68 65 72 65 20 74 68 65  table, where the
a0f0: 20 6f 74 68 65 72 20 74 61 62 6c 65 20 69 73 20   other table is 
a100: 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 2c 20 62  autoincrement, b
a110: 75 74 20 74 68 69 73 20 6f 6e 65 20 69 73 20 6e  ut this one is n
a120: 6f 74 2c 20 61 6e 64 20 75 73 65 73 20 74 68 65  ot, and uses the
a130: 20 72 6f 77 69 64 20 66 72 6f 6d 20 74 68 65 20   rowid from the 
a140: 6f 74 68 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  other...        
a150: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
a160: 20 20 20 20 49 74 20 69 73 20 73 61 66 65 72 20      It is safer 
a170: 74 6f 20 6f 6e 6c 79 20 73 65 74 20 41 75 74 6f  to only set Auto
a180: 69 6e 63 72 65 6d 65 6e 74 20 6f 6e 20 74 61 62  increment on tab
a190: 6c 65 73 20 77 68 65 72 65 20 77 65 27 72 65 20  les where we're 
a1a0: 53 55 52 45 20 74 68 65 20 75 73 65 72 20 73 70  SURE the user sp
a1b0: 65 63 69 66 69 65 64 20 41 55 54 4f 49 4e 43 52  ecified AUTOINCR
a1c0: 45 4d 45 4e 54 2c 20 65 76 65 6e 20 69 66 20 69  EMENT, even if i
a1d0: 74 73 20 61 20 72 6f 77 69 64 20 63 6f 6c 75 6d  ts a rowid colum
a1e0: 6e 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n.....          
a1f0: 20 20 20 20 20 20 20 20 69 66 20 28 74 62 6c 49          if (tblI
a200: 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73  ndexColumns.Rows
a210: 2e 43 6f 75 6e 74 20 3d 3d 20 31 20 26 26 20 28  .Count == 1 && (
a220: 62 6f 6f 6c 29 72 6f 77 49 6e 64 65 78 65 73 5b  bool)rowIndexes[
a230: 22 50 52 49 4d 41 52 59 5f 4b 45 59 22 5d 20 3d  "PRIMARY_KEY"] =
a240: 3d 20 74 72 75 65 20 26 26 20 53 74 72 69 6e 67  = true && String
a250: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
a260: 61 74 61 54 79 70 65 29 20 3d 3d 20 66 61 6c 73  ataType) == fals
a270: 65 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  e &&..          
a280: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
a290: 2e 43 6f 6d 70 61 72 65 28 64 61 74 61 54 79 70  .Compare(dataTyp
a2a0: 65 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 53 74  e, "integer", St
a2b0: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
a2c0: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
a2d0: 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) == 0)..       
a2e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a300: 20 20 2f 2f 20 20 72 6f 77 5b 53 63 68 65 6d 61    //  row[Schema
a310: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
a320: 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d  umn.IsAutoIncrem
a330: 65 6e 74 5d 20 3d 20 74 72 75 65 3b 0d 0a 20 20  ent] = true;..  
a340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a350: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
a360: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
a370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
a380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a390: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
a3a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
a3b0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53  .          if (S
a3c0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
a3d0: 70 74 79 28 64 61 74 61 54 79 70 65 29 29 0d 0a  pty(dataType))..
a3e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a3f0: 20 20 20 20 20 20 20 20 20 54 79 70 65 41 66 66           TypeAff
a400: 69 6e 69 74 79 20 61 66 66 69 6e 3b 0d 0a 20 20  inity affin;..  
a410: 20 20 20 20 20 20 20 20 20 20 64 61 74 61 54 79            dataTy
a420: 70 65 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74  pe = _activeStat
a430: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d  ement._sql.Colum
a440: 6e 54 79 70 65 28 5f 61 63 74 69 76 65 53 74 61  nType(_activeSta
a450: 74 65 6d 65 6e 74 2c 20 6e 2c 20 6f 75 74 20 61  tement, n, out a
a460: 66 66 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  ffin);..        
a470: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a480: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
a490: 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74 61 54 79  llOrEmpty(dataTy
a4a0: 70 65 29 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20  pe) == false).. 
a4b0: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 22             row["
a4c0: 44 61 74 61 54 79 70 65 4e 61 6d 65 22 5d 20 3d  DataTypeName"] =
a4d0: 20 64 61 74 61 54 79 70 65 3b 0d 0a 20 20 20 20   dataType;..    
a4e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 74      }..        t
a4f0: 62 6c 2e 52 6f 77 73 2e 41 64 64 28 72 6f 77 29  bl.Rows.Add(row)
a500: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
a510: 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f      if (_keyInfo
a520: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
a530: 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 41 70 70 65     _keyInfo.Appe
a540: 6e 64 53 63 68 65 6d 61 54 61 62 6c 65 28 74 62  ndSchemaTable(tb
a550: 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 74 62 6c  l);....      tbl
a560: 2e 41 63 63 65 70 74 43 68 61 6e 67 65 73 28 29  .AcceptChanges()
a570: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 45 6e 64  ;..      tbl.End
a580: 4c 6f 61 64 44 61 74 61 28 29 3b 0d 0a 0d 0a 20  LoadData();.... 
a590: 20 20 20 20 20 72 65 74 75 72 6e 20 74 62 6c 3b       return tbl;
a5a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
a5b0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
a5c0: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
a5d0: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
a5e0: 73 74 72 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20  string..    /// 
a5f0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
a600: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
a610: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
a620: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72   the column to r
a630: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d  etrieve</param>.
a640: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
a650: 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e  s>string</return
a660: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
a670: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
a680: 65 74 53 74 72 69 6e 67 28 69 6e 74 20 69 29 0d  etString(int i).
a690: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
a6a0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
a6b0: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
a6c0: 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  ForGet();....   
a6d0: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
a6e0: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
a6f0: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
a700: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
a710: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a720: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 53 74 72 69  _keyInfo.GetStri
a730: 6e 67 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  ng(i - PrivateVi
a740: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
a750: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ;....        Ver
a760: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
a770: 65 2e 53 74 72 69 6e 67 29 3b 0d 0a 20 20 20 20  e.String);..    
a780: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
a790: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
a7a0: 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65  .GetText(_active
a7b0: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a  Statement, i);..
a7c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
a7d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
a7e0: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
a7f0: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 6f  e column as an o
a800: 62 6a 65 63 74 20 63 6f 72 72 65 73 70 6f 6e 64  bject correspond
a810: 69 6e 67 20 74 6f 20 74 68 65 20 75 6e 64 65 72  ing to the under
a820: 6c 79 69 6e 67 20 64 61 74 61 74 79 70 65 20 6f  lying datatype o
a830: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a 20 20  f the column..  
a840: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
a850: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
a860: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
a870: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
a880: 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  n to retrieve</p
a890: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
a8a0: 72 65 74 75 72 6e 73 3e 6f 62 6a 65 63 74 3c 2f  returns>object</
a8b0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
a8c0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62  blic override ob
a8d0: 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 69 6e  ject GetValue(in
a8e0: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
a8f0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
a900: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
a910: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
a920: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
a930: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
a940: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
a950: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
a960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
a970: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
a980: 74 56 61 6c 75 65 28 69 20 2d 20 50 72 69 76 61  tValue(i - Priva
a990: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
a9a0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
a9b0: 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 20   SQLiteType typ 
a9c0: 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  = GetSQLiteType(
a9d0: 5f 66 6c 61 67 73 2c 20 69 29 3b 0d 0a 0d 0a 20  _flags, i);.... 
a9e0: 20 20 20 20 20 20 20 69 66 20 28 28 28 5f 66 6c         if (((_fl
a9f0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
aa00: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65  ectionFlags.Dete
aa10: 63 74 54 65 78 74 41 66 66 69 6e 69 74 79 29 20  ctTextAffinity) 
aa20: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
aa30: 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63 74 54  ionFlags.DetectT
aa40: 65 78 74 41 66 66 69 6e 69 74 79 29 20 26 26 0d  extAffinity) &&.
aa50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 28 74  .            ((t
aa60: 79 70 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28  yp == null) || (
aa70: 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20  typ.Affinity == 
aa80: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78  TypeAffinity.Tex
aa90: 74 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  t)))..        {.
aaa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70  .            typ
aab0: 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65   = GetSQLiteType
aac0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
aad0: 20 20 20 74 79 70 2c 20 5f 61 63 74 69 76 65 53     typ, _activeS
aae0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
aaf0: 74 54 65 78 74 28 5f 61 63 74 69 76 65 53 74 61  tText(_activeSta
ab00: 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20  tement, i));..  
ab10: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ab20: 20 65 6c 73 65 20 69 66 20 28 28 28 5f 66 6c 61   else if (((_fla
ab30: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
ab40: 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63  ctionFlags.Detec
ab50: 74 53 74 72 69 6e 67 54 79 70 65 29 20 3d 3d 20  tStringType) == 
ab60: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
ab70: 46 6c 61 67 73 2e 44 65 74 65 63 74 53 74 72 69  Flags.DetectStri
ab80: 6e 67 54 79 70 65 29 20 26 26 0d 0a 20 20 20 20  ngType) &&..    
ab90: 20 20 20 20 20 20 20 20 28 28 74 79 70 20 3d 3d          ((typ ==
aba0: 20 6e 75 6c 6c 29 20 7c 7c 20 53 51 4c 69 74 65   null) || SQLite
abb0: 43 6f 6e 76 65 72 74 2e 49 73 53 74 72 69 6e 67  Convert.IsString
abc0: 44 62 54 79 70 65 28 74 79 70 2e 54 79 70 65 29  DbType(typ.Type)
abd0: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
abe0: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 20 3d             typ =
abf0: 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 0d   GetSQLiteType(.
ac00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ac10: 20 74 79 70 2c 20 5f 61 63 74 69 76 65 53 74 61   typ, _activeSta
ac20: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54  tement._sql.GetT
ac30: 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ext(_activeState
ac40: 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20  ment, i));..    
ac50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
ac60: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
ac70: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
ac80: 74 56 61 6c 75 65 28 5f 61 63 74 69 76 65 53 74  tValue(_activeSt
ac90: 61 74 65 6d 65 6e 74 2c 20 5f 66 6c 61 67 73 2c  atement, _flags,
aca0: 20 69 2c 20 74 79 70 29 3b 0d 0a 20 20 20 20 7d   i, typ);..    }
acb0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
acc0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
acd0: 65 74 72 65 69 76 65 73 20 74 68 65 20 76 61 6c  etreives the val
ace0: 75 65 73 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ues of multiple 
acf0: 63 6f 6c 75 6d 6e 73 2c 20 75 70 20 74 6f 20 74  columns, up to t
ad00: 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 73  he size of the s
ad10: 75 70 70 6c 69 65 64 20 61 72 72 61 79 0d 0a 20  upplied array.. 
ad20: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
ad30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
ad40: 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e  m name="values">
ad50: 54 68 65 20 61 72 72 61 79 20 74 6f 20 66 69 6c  The array to fil
ad60: 6c 20 77 69 74 68 20 76 61 6c 75 65 73 20 66 72  l with values fr
ad70: 6f 6d 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69  om the columns i
ad80: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65  n the current re
ad90: 73 75 6c 74 73 65 74 3c 2f 70 61 72 61 6d 3e 0d  sultset</param>.
ada0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
adb0: 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s>The number of 
adc0: 63 6f 6c 75 6d 6e 73 20 72 65 74 72 69 65 76 65  columns retrieve
add0: 64 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  d</returns>..   
ade0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
adf0: 20 69 6e 74 20 47 65 74 56 61 6c 75 65 73 28 6f   int GetValues(o
ae00: 62 6a 65 63 74 5b 5d 20 76 61 6c 75 65 73 29 0d  bject[] values).
ae10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68  .    {..      Ch
ae20: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
ae30: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 4d 61 78  ..      int nMax
ae40: 20 3d 20 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a   = FieldCount;..
ae50: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 73        if (values
ae60: 2e 4c 65 6e 67 74 68 20 3c 20 6e 4d 61 78 29 20  .Length < nMax) 
ae70: 6e 4d 61 78 20 3d 20 76 61 6c 75 65 73 2e 4c 65  nMax = values.Le
ae80: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 66  ngth;....      f
ae90: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
aea0: 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0d 0a 20   < nMax; n++).. 
aeb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
aec0: 76 61 6c 75 65 73 5b 6e 5d 20 3d 20 47 65 74 56  values[n] = GetV
aed0: 61 6c 75 65 28 6e 29 3b 0d 0a 20 20 20 20 20 20  alue(n);..      
aee0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
aef0: 6e 20 6e 4d 61 78 3b 0d 0a 20 20 20 20 7d 0d 0a  n nMax;..    }..
af00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
af10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
af20: 75 72 6e 73 20 61 20 63 6f 6c 6c 65 63 74 69 6f  urns a collectio
af30: 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c  n containing all
af40: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
af50: 73 20 61 6e 64 20 76 61 6c 75 65 73 20 66 6f 72  s and values for
af60: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75   the..    /// cu
af70: 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 64 61 74  rrent row of dat
af80: 61 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  a in the current
af90: 20 72 65 73 75 6c 74 73 65 74 2c 20 69 66 20 61   resultset, if a
afa0: 6e 79 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ny.  If there is
afb0: 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72   no..    /// cur
afc0: 72 65 6e 74 20 72 6f 77 20 6f 72 20 6e 6f 20 63  rent row or no c
afd0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
afe0: 2c 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 6d  , an exception m
aff0: 61 79 20 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20  ay be thrown... 
b000: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
b010: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
b020: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  rns>..    /// Th
b030: 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 63 6f 6e  e collection con
b040: 74 61 69 6e 69 6e 67 20 74 68 65 20 63 6f 6c 75  taining the colu
b050: 6d 6e 20 6e 61 6d 65 20 61 6e 64 20 76 61 6c 75  mn name and valu
b060: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  e information fo
b070: 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63  r the..    /// c
b080: 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 64 61  urrent row of da
b090: 74 61 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  ta in the curren
b0a0: 74 20 72 65 73 75 6c 74 73 65 74 20 6f 72 20 6e  t resultset or n
b0b0: 75 6c 6c 20 69 66 20 74 68 69 73 20 69 6e 66 6f  ull if this info
b0c0: 72 6d 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f  rmation..    ///
b0d0: 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69   cannot be obtai
b0e0: 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ned...    /// </
b0f0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
b100: 62 6c 69 63 20 4e 61 6d 65 56 61 6c 75 65 43 6f  blic NameValueCo
b110: 6c 6c 65 63 74 69 6f 6e 20 47 65 74 56 61 6c 75  llection GetValu
b120: 65 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  es()..    {..   
b130: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
b140: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
b150: 20 69 66 20 28 28 5f 61 63 74 69 76 65 53 74 61   if ((_activeSta
b160: 74 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 20  tement == null) 
b170: 7c 7c 20 28 5f 61 63 74 69 76 65 53 74 61 74 65  || (_activeState
b180: 6d 65 6e 74 2e 5f 73 71 6c 20 3d 3d 20 6e 75 6c  ment._sql == nul
b190: 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
b1a0: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
b1b0: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
b1c0: 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  tion();....     
b1d0: 20 20 20 69 6e 74 20 6e 4d 61 78 20 3d 20 50 72     int nMax = Pr
b1e0: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
b1f0: 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20  dCount;..       
b200: 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63   NameValueCollec
b210: 74 69 6f 6e 20 72 65 73 75 6c 74 20 3d 20 6e 65  tion result = ne
b220: 77 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65  w NameValueColle
b230: 63 74 69 6f 6e 28 6e 4d 61 78 29 3b 0d 0a 0d 0a  ction(nMax);....
b240: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
b250: 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 6e 4d 61 78   n = 0; n < nMax
b260: 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  ; n++)..        
b270: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
b280: 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 5f 61 63  tring name = _ac
b290: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
b2a0: 71 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61  ql.ColumnName(_a
b2b0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
b2c0: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
b2d0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 3d 20   string value = 
b2e0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
b2f0: 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61  ._sql.GetText(_a
b300: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
b310: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
b320: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 6e 61     result.Add(na
b330: 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  me, value);..   
b340: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b350: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
b360: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
b370: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
b380: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72    /// Returns Tr
b390: 75 65 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  ue if the result
b3a0: 73 65 74 20 68 61 73 20 72 6f 77 73 20 74 68 61  set has rows tha
b3b0: 74 20 63 61 6e 20 62 65 20 66 65 74 63 68 65 64  t can be fetched
b3c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
b3d0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
b3e0: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 48   override bool H
b3f0: 61 73 52 6f 77 73 0d 0a 20 20 20 20 7b 0d 0a 20  asRows..    {.. 
b400: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
b410: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
b420: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
b430: 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64       CheckClosed
b440: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ();....        /
b450: 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f  /..        // NO
b460: 54 45 3a 20 49 66 20 74 68 65 20 22 73 74 69 63  TE: If the "stic
b470: 6b 79 22 20 66 6c 61 67 20 68 61 73 20 62 65 65  ky" flag has bee
b480: 6e 20 73 65 74 2c 20 75 73 65 20 74 68 65 20 6e  n set, use the n
b490: 65 77 20 62 65 68 61 76 69 6f 72 2c 0d 0a 20 20  ew behavior,..  
b4a0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77        //       w
b4b0: 68 69 63 68 20 72 65 74 75 72 6e 73 20 6e 6f 6e  hich returns non
b4c0: 2d 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20 77  -zero if there w
b4d0: 65 72 65 20 65 76 65 72 20 61 6e 79 20 72 6f 77  ere ever any row
b4e0: 73 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s in..        //
b4f0: 20 20 20 20 20 20 20 74 68 65 20 61 73 73 6f 63         the assoc
b500: 69 61 74 65 64 20 72 65 73 75 6c 74 20 73 65 74  iated result set
b510: 73 2e 20 20 47 65 6e 65 72 61 6c 6c 79 2c 20 74  s.  Generally, t
b520: 68 69 73 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79  his flag is only
b530: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
b540: 20 20 20 75 73 65 66 75 6c 20 77 68 65 6e 20 69     useful when i
b550: 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74  t is necessary t
b560: 6f 20 72 65 74 61 69 6e 20 63 6f 6d 70 61 74 69  o retain compati
b570: 62 69 6c 69 74 79 20 77 69 74 68 0d 0a 20 20 20  bility with..   
b580: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74       //       ot
b590: 68 65 72 20 41 44 4f 2e 4e 45 54 20 70 72 6f 76  her ADO.NET prov
b5a0: 69 64 65 72 73 20 74 68 61 74 20 75 73 65 20 74  iders that use t
b5b0: 68 65 73 65 20 73 61 6d 65 20 73 65 6d 61 6e 74  hese same semant
b5c0: 69 63 73 20 66 6f 72 0d 0a 20 20 20 20 20 20 20  ics for..       
b5d0: 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 48 61   //       the Ha
b5e0: 73 52 6f 77 73 20 70 72 6f 70 65 72 74 79 2e 0d  sRows property..
b5f0: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
b600: 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73       if ((_flags
b610: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
b620: 69 6f 6e 46 6c 61 67 73 2e 53 74 69 63 6b 79 48  ionFlags.StickyH
b630: 61 73 52 6f 77 73 29 20 3d 3d 20 53 51 4c 69 74  asRows) == SQLit
b640: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
b650: 2e 53 74 69 63 6b 79 48 61 73 52 6f 77 73 29 0d  .StickyHasRows).
b660: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
b670: 6e 20 28 28 5f 72 65 61 64 69 6e 67 53 74 61 74  n ((_readingStat
b680: 65 20 21 3d 20 31 29 20 7c 7c 20 28 5f 73 74 65  e != 1) || (_ste
b690: 70 43 6f 75 6e 74 20 3e 20 30 29 29 3b 0d 0a 0d  pCount > 0));...
b6a0: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
b6b0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
b6c0: 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  is is the defaul
b6d0: 74 20 62 65 68 61 76 69 6f 72 2e 20 20 49 74 20  t behavior.  It 
b6e0: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
b6f0: 20 6f 6e 6c 79 20 69 66 0d 0a 20 20 20 20 20 20   only if..      
b700: 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 72 65 20    //       more 
b710: 72 6f 77 73 20 61 72 65 20 61 76 61 69 6c 61 62  rows are availab
b720: 6c 65 20 28 69 2e 65 2e 20 61 20 63 61 6c 6c 20  le (i.e. a call 
b730: 74 6f 20 74 68 65 20 52 65 61 64 20 6d 65 74 68  to the Read meth
b740: 6f 64 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f  od is..        /
b750: 2f 20 20 20 20 20 20 20 65 78 70 65 63 74 65 64  /       expected
b760: 20 74 6f 20 73 75 63 63 65 65 64 29 2e 20 20 50   to succeed).  P
b770: 72 69 6f 72 20 74 6f 20 74 68 65 20 69 6e 74 72  rior to the intr
b780: 6f 64 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 0d  oduction of the.
b790: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
b7a0: 20 20 22 73 74 69 63 6b 79 22 20 66 6c 61 67 2c    "sticky" flag,
b7b0: 20 74 68 69 73 20 69 73 20 68 6f 77 20 74 68 69   this is how thi
b7c0: 73 20 70 72 6f 70 65 72 74 79 20 68 61 73 20 61  s property has a
b7d0: 6c 77 61 79 73 20 77 6f 72 6b 65 64 2e 0d 0a 20  lways worked... 
b7e0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
b7f0: 20 20 20 72 65 74 75 72 6e 20 28 5f 72 65 61 64     return (_read
b800: 69 6e 67 53 74 61 74 65 20 21 3d 20 31 29 3b 0d  ingState != 1);.
b810: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
b820: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
b830: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
b840: 74 75 72 6e 73 20 54 72 75 65 20 69 66 20 74 68  turns True if th
b850: 65 20 64 61 74 61 20 72 65 61 64 65 72 20 69 73  e data reader is
b860: 20 63 6c 6f 73 65 64 0d 0a 20 20 20 20 2f 2f 2f   closed..    ///
b870: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
b880: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
b890: 20 62 6f 6f 6c 20 49 73 43 6c 6f 73 65 64 0d 0a   bool IsClosed..
b8a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
b8b0: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
b8c0: 28 29 3b 20 72 65 74 75 72 6e 20 28 5f 63 6f 6d  (); return (_com
b8d0: 6d 61 6e 64 20 3d 3d 20 6e 75 6c 6c 29 3b 20 7d  mand == null); }
b8e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
b8f0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
b900: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72    /// Returns Tr
b910: 75 65 20 69 66 20 74 68 65 20 73 70 65 63 69 66  ue if the specif
b920: 69 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 75  ied column is nu
b930: 6c 6c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ll..    /// </su
b940: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
b950: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
b960: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
b970: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
b980: 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eve</param>..   
b990: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72   /// <returns>Tr
b9a0: 75 65 20 6f 72 20 46 61 6c 73 65 3c 2f 72 65 74  ue or False</ret
b9b0: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
b9c0: 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  c override bool 
b9d0: 49 73 44 42 4e 75 6c 6c 28 69 6e 74 20 69 29 0d  IsDBNull(int i).
b9e0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
b9f0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
ba00: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
ba10: 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  ForGet();....   
ba20: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
ba30: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
ba40: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
ba50: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
ba60: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ba70: 5f 6b 65 79 49 6e 66 6f 2e 49 73 44 42 4e 75 6c  _keyInfo.IsDBNul
ba80: 6c 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  l(i - PrivateVis
ba90: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
baa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
bab0: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
bac0: 65 6e 74 2e 5f 73 71 6c 2e 49 73 4e 75 6c 6c 28  ent._sql.IsNull(
bad0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
bae0: 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  , i);..    }....
baf0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
bb00: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d 6f 76 65 73  >..    /// Moves
bb10: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 65 73   to the next res
bb20: 75 6c 74 73 65 74 20 69 6e 20 6d 75 6c 74 69 70  ultset in multip
bb30: 6c 65 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67  le row-returning
bb40: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20   SQL command... 
bb50: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
bb60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
bb70: 72 6e 73 3e 54 72 75 65 20 69 66 20 74 68 65 20  rns>True if the 
bb80: 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 75 63 63  command was succ
bb90: 65 73 73 66 75 6c 20 61 6e 64 20 61 20 6e 65 77  essful and a new
bba0: 20 72 65 73 75 6c 74 73 65 74 20 69 73 20 61 76   resultset is av
bbb0: 61 69 6c 61 62 6c 65 2c 20 46 61 6c 73 65 20 6f  ailable, False o
bbc0: 74 68 65 72 77 69 73 65 2e 3c 2f 72 65 74 75 72  therwise.</retur
bbd0: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
bbe0: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 4e 65  override bool Ne
bbf0: 78 74 52 65 73 75 6c 74 28 29 0d 0a 20 20 20 20  xtResult()..    
bc00: 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69  {..      CheckDi
bc10: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
bc20: 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d   CheckClosed();.
bc30: 0a 20 20 20 20 20 20 69 66 20 28 5f 74 68 72 6f  .      if (_thro
bc40: 77 4f 6e 44 69 73 70 6f 73 65 64 29 20 53 51 4c  wOnDisposed) SQL
bc50: 69 74 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b  iteCommand.Check
bc60: 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a 20  (_command);.... 
bc70: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
bc80: 6d 65 6e 74 20 73 74 6d 74 20 3d 20 6e 75 6c 6c  ment stmt = null
bc90: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 66 69 65  ;..      int fie
bca0: 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20  ldCount;..      
bcb0: 62 6f 6f 6c 20 73 63 68 65 6d 61 4f 6e 6c 79 20  bool schemaOnly 
bcc0: 3d 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61  = ((_commandBeha
bcd0: 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65  vior & CommandBe
bce0: 68 61 76 69 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c  havior.SchemaOnl
bcf0: 79 29 20 21 3d 20 30 29 3b 0d 0a 0d 0a 20 20 20  y) != 0);....   
bd00: 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d     while (true).
bd10: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
bd20: 20 20 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75    if (stmt == nu
bd30: 6c 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74 61  ll && _activeSta
bd40: 74 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 20 26  tement != null &
bd50: 26 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  & _activeStateme
bd60: 6e 74 2e 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 20  nt._sql != null 
bd70: 26 26 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  && _activeStatem
bd80: 65 6e 74 2e 5f 73 71 6c 2e 49 73 4f 70 65 6e 28  ent._sql.IsOpen(
bd90: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
bda0: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 73 65           // Rese
bdb0: 74 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  t the previously
bdc0: 2d 65 78 65 63 75 74 65 64 20 73 74 61 74 65 6d  -executed statem
bdd0: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ent..          i
bde0: 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 29 20  f (!schemaOnly) 
bdf0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
be00: 2e 5f 73 71 6c 2e 52 65 73 65 74 28 5f 61 63 74  ._sql.Reset(_act
be10: 69 76 65 53 74 61 74 65 6d 65 6e 74 29 3b 0d 0a  iveStatement);..
be20: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49  ..          // I
be30: 66 20 77 65 27 72 65 20 6f 6e 6c 79 20 73 75 70  f we're only sup
be40: 70 6f 73 65 64 20 74 6f 20 72 65 74 75 72 6e 20  posed to return 
be50: 61 20 73 69 6e 67 6c 65 20 72 6f 77 73 65 74 2c  a single rowset,
be60: 20 73 74 65 70 20 74 68 72 6f 75 67 68 20 61 6c   step through al
be70: 6c 20 72 65 6d 61 69 6e 69 6e 67 20 73 74 61 74  l remaining stat
be80: 65 6d 65 6e 74 73 20 6f 6e 63 65 20 75 6e 74 69  ements once unti
be90: 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  l..          // 
bea0: 74 68 65 79 20 61 72 65 20 61 6c 6c 20 64 6f 6e  they are all don
beb0: 65 20 61 6e 64 20 72 65 74 75 72 6e 20 66 61 6c  e and return fal
bec0: 73 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 6e  se to indicate n
bed0: 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74 73 65 74  o more resultset
bee0: 73 20 65 78 69 73 74 2e 0d 0a 20 20 20 20 20 20  s exist...      
bef0: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
bf00: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
bf10: 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 69 6e 67  andBehavior.Sing
bf20: 6c 65 52 65 73 75 6c 74 29 20 21 3d 20 30 29 0d  leResult) != 0).
bf30: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
bf40: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 3b            for (;
bf50: 20 3b 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20   ; )..          
bf60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bf70: 20 20 20 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61     stmt = _comma
bf80: 6e 64 2e 47 65 74 53 74 61 74 65 6d 65 6e 74 28  nd.GetStatement(
bf90: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
bfa0: 49 6e 64 65 78 20 2b 20 31 29 3b 0d 0a 20 20 20  Index + 1);..   
bfb0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
bfc0: 74 6d 74 20 3d 3d 20 6e 75 6c 6c 29 20 62 72 65  tmt == null) bre
bfd0: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
bfe0: 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d     _activeStatem
bff0: 65 6e 74 49 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20  entIndex++;.... 
c000: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
c010: 28 21 73 63 68 65 6d 61 4f 6e 6c 79 20 26 26 20  (!schemaOnly && 
c020: 73 74 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28 73  stmt._sql.Step(s
c030: 74 6d 74 29 29 20 5f 73 74 65 70 43 6f 75 6e 74  tmt)) _stepCount
c040: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
c050: 20 20 20 69 66 20 28 73 74 6d 74 2e 5f 73 71 6c     if (stmt._sql
c060: 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d  .ColumnCount(stm
c070: 74 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  t) == 0)..      
c080: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c090: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
c0a0: 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d 3d 20  rowsAffected == 
c0b0: 2d 31 29 20 5f 72 6f 77 73 41 66 66 65 63 74 65  -1) _rowsAffecte
c0c0: 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  d = 0;..        
c0d0: 20 20 20 20 20 20 20 20 69 6e 74 20 63 68 61 6e          int chan
c0e0: 67 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ges = 0;..      
c0f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
c100: 6d 74 2e 54 72 79 47 65 74 43 68 61 6e 67 65 73  mt.TryGetChanges
c110: 28 72 65 66 20 63 68 61 6e 67 65 73 29 29 0d 0a  (ref changes))..
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c130: 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65      _rowsAffecte
c140: 64 20 2b 3d 20 63 68 61 6e 67 65 73 3b 0d 0a 20  d += changes;.. 
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
c160: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
c170: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
c180: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
c190: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c1a0: 20 20 20 20 20 20 20 69 66 20 28 21 73 63 68 65         if (!sche
c1b0: 6d 61 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f 73 71  maOnly) stmt._sq
c1c0: 6c 2e 52 65 73 65 74 28 73 74 6d 74 29 3b 20 2f  l.Reset(stmt); /
c1d0: 2f 20 47 6f 74 74 61 20 72 65 73 65 74 20 61 66  / Gotta reset af
c1e0: 74 65 72 20 65 76 65 72 79 20 73 74 65 70 20 74  ter every step t
c1f0: 6f 20 72 65 6c 65 61 73 65 20 61 6e 79 20 6c 6f  o release any lo
c200: 63 6b 73 20 61 6e 64 20 73 75 63 68 21 0d 0a 20  cks and such!.. 
c210: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
c220: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c230: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
c240: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
c250: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 47 65  ...        // Ge
c260: 74 20 74 68 65 20 6e 65 78 74 20 73 74 61 74 65  t the next state
c270: 6d 65 6e 74 20 74 6f 20 65 78 65 63 75 74 65 0d  ment to execute.
c280: 0a 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20  .        stmt = 
c290: 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61 74  _command.GetStat
c2a0: 65 6d 65 6e 74 28 5f 61 63 74 69 76 65 53 74 61  ement(_activeSta
c2b0: 74 65 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31 29  tementIndex + 1)
c2c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ;....        // 
c2d0: 49 66 20 77 65 27 76 65 20 72 65 61 63 68 65 64  If we've reached
c2e0: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
c2f0: 73 74 61 74 65 6d 65 6e 74 73 2c 20 72 65 74 75  statements, retu
c300: 72 6e 20 66 61 6c 73 65 2c 20 6e 6f 20 6d 6f 72  rn false, no mor
c310: 65 20 72 65 73 75 6c 74 73 65 74 73 0d 0a 20 20  e resultsets..  
c320: 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d        if (stmt =
c330: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
c340: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
c350: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 49  ....        // I
c360: 66 20 77 65 20 77 65 72 65 20 6f 6e 20 61 20 63  f we were on a c
c370: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
c380: 2c 20 73 65 74 20 74 68 65 20 73 74 61 74 65 20  , set the state 
c390: 74 6f 20 22 64 6f 6e 65 20 72 65 61 64 69 6e 67  to "done reading
c3a0: 22 20 66 6f 72 20 69 74 0d 0a 20 20 20 20 20 20  " for it..      
c3b0: 20 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74    if (_readingSt
c3c0: 61 74 65 20 3c 20 31 29 0d 0a 20 20 20 20 20 20  ate < 1)..      
c3d0: 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74      _readingStat
c3e0: 65 20 3d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20  e = 1;....      
c3f0: 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65    _activeStateme
c400: 6e 74 49 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20  ntIndex++;....  
c410: 20 20 20 20 20 20 66 69 65 6c 64 43 6f 75 6e 74        fieldCount
c420: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c   = stmt._sql.Col
c430: 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d  umnCount(stmt);.
c440: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66  ...        // If
c450: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   the statement i
c460: 73 20 6e 6f 74 20 61 20 73 65 6c 65 63 74 20 73  s not a select s
c470: 74 61 74 65 6d 65 6e 74 20 6f 72 20 77 65 27 72  tatement or we'r
c480: 65 20 6e 6f 74 20 72 65 74 72 69 65 76 69 6e 67  e not retrieving
c490: 20 73 63 68 65 6d 61 20 6f 6e 6c 79 2c 20 74 68   schema only, th
c4a0: 65 6e 20 70 65 72 66 6f 72 6d 20 74 68 65 20 69  en perform the i
c4b0: 6e 69 74 69 61 6c 20 73 74 65 70 0d 0a 20 20 20  nitial step..   
c4c0: 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61       if (!schema
c4d0: 4f 6e 6c 79 20 7c 7c 20 28 66 69 65 6c 64 43 6f  Only || (fieldCo
c4e0: 75 6e 74 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20  unt == 0))..    
c4f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c500: 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79   if (!schemaOnly
c510: 20 26 26 20 73 74 6d 74 2e 5f 73 71 6c 2e 53 74   && stmt._sql.St
c520: 65 70 28 73 74 6d 74 29 29 0d 0a 20 20 20 20 20  ep(stmt))..     
c530: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c540: 20 20 20 20 5f 73 74 65 70 43 6f 75 6e 74 2b 2b      _stepCount++
c550: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  ;..            _
c560: 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 2d  readingState = -
c570: 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  1;..          }.
c580: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
c590: 69 66 20 28 66 69 65 6c 64 43 6f 75 6e 74 20 3d  if (fieldCount =
c5a0: 3d 20 30 29 20 2f 2f 20 4e 6f 20 72 6f 77 73 20  = 0) // No rows 
c5b0: 72 65 74 75 72 6e 65 64 2c 20 69 66 20 66 69 65  returned, if fie
c5c0: 6c 64 43 6f 75 6e 74 20 69 73 20 7a 65 72 6f 2c  ldCount is zero,
c5d0: 20 73 6b 69 70 20 74 6f 20 74 68 65 20 6e 65 78   skip to the nex
c5e0: 74 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20  t statement..   
c5f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c600: 20 20 20 20 20 20 69 66 20 28 5f 72 6f 77 73 41        if (_rowsA
c610: 66 66 65 63 74 65 64 20 3d 3d 20 2d 31 29 20 5f  ffected == -1) _
c620: 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d 20 30  rowsAffected = 0
c630: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ;..            i
c640: 6e 74 20 63 68 61 6e 67 65 73 20 3d 20 30 3b 0d  nt changes = 0;.
c650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
c660: 28 73 74 6d 74 2e 54 72 79 47 65 74 43 68 61 6e  (stmt.TryGetChan
c670: 67 65 73 28 72 65 66 20 63 68 61 6e 67 65 73 29  ges(ref changes)
c680: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
c690: 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 2b   _rowsAffected +
c6a0: 3d 20 63 68 61 6e 67 65 73 3b 0d 0a 20 20 20 20  = changes;..    
c6b0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
c6d0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
c6e0: 20 20 20 20 20 20 20 69 66 20 28 21 73 63 68 65         if (!sche
c6f0: 6d 61 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f 73 71  maOnly) stmt._sq
c700: 6c 2e 52 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a  l.Reset(stmt);..
c710: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
c720: 69 6e 75 65 3b 20 2f 2f 20 53 6b 69 70 20 74 68  inue; // Skip th
c730: 69 73 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 6d  is command and m
c740: 6f 76 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2c  ove to the next,
c750: 20 69 74 20 77 61 73 20 6e 6f 74 20 61 20 72 6f   it was not a ro
c760: 77 2d 72 65 74 75 72 6e 69 6e 67 20 72 65 73 75  w-returning resu
c770: 6c 74 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20  ltset..         
c780: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c   }..          el
c790: 73 65 20 2f 2f 20 4e 6f 20 72 6f 77 73 2c 20 66  se // No rows, f
c7a0: 69 65 6c 64 43 6f 75 6e 74 20 69 73 20 6e 6f 6e  ieldCount is non
c7b0: 2d 7a 65 72 6f 20 73 6f 20 73 74 6f 70 20 68 65  -zero so stop he
c7c0: 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  re..          {.
c7d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 65  .            _re
c7e0: 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 20  adingState = 1; 
c7f0: 2f 2f 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20  // This command 
c800: 72 65 74 75 72 6e 65 64 20 63 6f 6c 75 6d 6e 73  returned columns
c810: 20 62 75 74 20 6e 6f 20 72 6f 77 73 2c 20 73 6f   but no rows, so
c820: 20 72 65 74 75 72 6e 20 74 72 75 65 2c 20 62 75   return true, bu
c830: 74 20 48 61 73 52 6f 77 73 20 3d 20 66 61 6c 73  t HasRows = fals
c840: 65 20 61 6e 64 20 52 65 61 64 28 29 20 72 65 74  e and Read() ret
c850: 75 72 6e 73 20 66 61 6c 73 65 0d 0a 20 20 20 20  urns false..    
c860: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c870: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
c880: 20 41 68 68 2c 20 77 65 20 66 6f 75 6e 64 20 61   Ahh, we found a
c890: 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 72   row-returning r
c8a0: 65 73 75 6c 74 73 65 74 20 65 6c 69 67 69 62 6c  esultset eligibl
c8b0: 65 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64  e to be returned
c8c0: 21 0d 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69  !..        _acti
c8d0: 76 65 53 74 61 74 65 6d 65 6e 74 20 3d 20 73 74  veStatement = st
c8e0: 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 69  mt;..        _fi
c8f0: 65 6c 64 43 6f 75 6e 74 20 3d 20 66 69 65 6c 64  eldCount = field
c900: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20  Count;..        
c910: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
c920: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f  null;..        _
c930: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d  fieldTypeArray =
c940: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
c950: 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42    if ((_commandB
c960: 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e  ehavior & Comman
c970: 64 42 65 68 61 76 69 6f 72 2e 4b 65 79 49 6e 66  dBehavior.KeyInf
c980: 6f 29 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  o) != 0)..      
c990: 20 20 20 20 4c 6f 61 64 4b 65 79 49 6e 66 6f 28      LoadKeyInfo(
c9a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
c9b0: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
c9c0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
c9d0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
c9e0: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65  .    /// This me
c9f0: 74 68 6f 64 20 61 74 74 65 6d 70 74 73 20 74 6f  thod attempts to
ca00: 20 71 75 65 72 79 20 74 68 65 20 64 61 74 61 62   query the datab
ca10: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
ca20: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a  ssociated with..
ca30: 20 20 20 20 2f 2f 2f 20 74 68 65 20 64 61 74 61      /// the data
ca40: 20 72 65 61 64 65 72 20 69 6e 20 75 73 65 2e 20   reader in use. 
ca50: 20 49 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69   If the underlyi
ca60: 6e 67 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 63 6f  ng command or co
ca70: 6e 6e 65 63 74 69 6f 6e 20 69 73 0d 0a 20 20 20  nnection is..   
ca80: 20 2f 2f 2f 20 75 6e 61 76 61 69 6c 61 62 6c 65   /// unavailable
ca90: 2c 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20 77  , a null value w
caa0: 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e  ill be returned.
cab0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
cac0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
cad0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
cae0: 20 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   The connection 
caf0: 6f 62 6a 65 63 74 20 2d 4f 52 2d 20 6e 75 6c 6c  object -OR- null
cb00: 20 69 66 20 69 74 20 69 73 20 75 6e 61 76 61 69   if it is unavai
cb10: 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lable...    /// 
cb20: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
cb30: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 53  private static S
cb40: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
cb50: 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a  GetConnection(..
cb60: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
cb70: 74 61 52 65 61 64 65 72 20 64 61 74 61 52 65 61  taReader dataRea
cb80: 64 65 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  der..        )..
cb90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
cba0: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
cbb0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
cbc0: 61 74 61 52 65 61 64 65 72 20 21 3d 20 6e 75 6c  ataReader != nul
cbd0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
cbe0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
cbf0: 20 20 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64     SQLiteCommand
cc00: 20 63 6f 6d 6d 61 6e 64 20 3d 20 64 61 74 61 52   command = dataR
cc10: 65 61 64 65 72 2e 5f 63 6f 6d 6d 61 6e 64 3b 0d  eader._command;.
cc20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
cc30: 20 20 20 69 66 20 28 63 6f 6d 6d 61 6e 64 20 21     if (command !
cc40: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
cc50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc70: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
cc80: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 63 6f   connection = co
cc90: 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
cca0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ccb0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
ccc0: 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29  nection != null)
ccd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cce0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
ccf0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 3b 0d 0a 20 20   connection;..  
cd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
cd10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
cd20: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
cd30: 20 20 20 63 61 74 63 68 20 28 4f 62 6a 65 63 74     catch (Object
cd40: 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
cd50: 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  n)..        {.. 
cd60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
cd70: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
cd80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
cd90: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
cda0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
cdb0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
cdc0: 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20  / Retrieves the 
cdd0: 53 51 4c 69 74 65 54 79 70 65 20 66 6f 72 20 61  SQLiteType for a
cde0: 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 20 61 6e   given column an
cdf0: 64 20 72 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20  d row value...  
ce00: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
ce10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
ce20: 20 6e 61 6d 65 3d 22 6f 6c 64 54 79 70 65 22 3e   name="oldType">
ce30: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72  ..    /// The or
ce40: 69 67 69 6e 61 6c 20 53 51 4c 69 74 65 54 79 70  iginal SQLiteTyp
ce50: 65 20 73 74 72 75 63 74 75 72 65 2c 20 62 61 73  e structure, bas
ce60: 65 64 20 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 63  ed only on the c
ce70: 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  olumn...    /// 
ce80: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
ce90: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
cea0: 65 78 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ext">..    /// T
ceb0: 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65  he textual value
cec0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 66   of the column f
ced0: 6f 72 20 61 20 67 69 76 65 6e 20 72 6f 77 2e 0d  or a given row..
cee0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
cef0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
cf00: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  rns>..    /// Th
cf10: 65 20 53 51 4c 69 74 65 54 79 70 65 20 73 74 72  e SQLiteType str
cf20: 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f  ucture...    ///
cf30: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
cf40: 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 54   private SQLiteT
cf50: 79 70 65 20 47 65 74 53 51 4c 69 74 65 54 79 70  ype GetSQLiteTyp
cf60: 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e(..        SQLi
cf70: 74 65 54 79 70 65 20 6f 6c 64 54 79 70 65 2c 20  teType oldType, 
cf80: 2f 2a 20 50 41 53 53 2d 54 48 52 4f 55 47 48 20  /* PASS-THROUGH 
cf90: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
cfa0: 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20 20 20  ng text..       
cfb0: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
cfc0: 20 20 20 69 66 20 28 53 51 4c 69 74 65 43 6f 6e     if (SQLiteCon
cfd0: 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 4e 75  vert.LooksLikeNu
cfe0: 6c 6c 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20  ll(text))..     
cff0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
d000: 77 20 53 51 4c 69 74 65 54 79 70 65 28 54 79 70  w SQLiteType(Typ
d010: 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c 20  eAffinity.Null, 
d020: 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 3b 0d  DbType.Object);.
d030: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ...        if (S
d040: 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f  QLiteConvert.Loo
d050: 6b 73 4c 69 6b 65 49 6e 74 36 34 28 74 65 78 74  ksLikeInt64(text
d060: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
d070: 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74  return new SQLit
d080: 65 54 79 70 65 28 54 79 70 65 41 66 66 69 6e 69  eType(TypeAffini
d090: 74 79 2e 49 6e 74 36 34 2c 20 44 62 54 79 70 65  ty.Int64, DbType
d0a0: 2e 49 6e 74 36 34 29 3b 0d 0a 0d 0a 20 20 20 20  .Int64);....    
d0b0: 20 20 20 20 69 66 20 28 53 51 4c 69 74 65 43 6f      if (SQLiteCo
d0c0: 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 44  nvert.LooksLikeD
d0d0: 6f 75 62 6c 65 28 74 65 78 74 29 29 0d 0a 20 20  ouble(text))..  
d0e0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
d0f0: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 28   new SQLiteType(
d100: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
d110: 62 6c 65 2c 20 44 62 54 79 70 65 2e 44 6f 75 62  ble, DbType.Doub
d120: 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le);....        
d130: 69 66 20 28 28 5f 61 63 74 69 76 65 53 74 61 74  if ((_activeStat
d140: 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 20 26  ement != null) &
d150: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  &..            S
d160: 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f  QLiteConvert.Loo
d170: 6b 73 4c 69 6b 65 44 61 74 65 54 69 6d 65 28 5f  ksLikeDateTime(_
d180: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
d190: 5f 73 71 6c 2c 20 74 65 78 74 29 29 0d 0a 20 20  _sql, text))..  
d1a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d1b0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
d1c0: 53 51 4c 69 74 65 54 79 70 65 28 54 79 70 65 41  SQLiteType(TypeA
d1d0: 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65  ffinity.DateTime
d1e0: 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d  , DbType.DateTim
d1f0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
d200: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
d210: 20 6f 6c 64 54 79 70 65 3b 0d 0a 20 20 20 20 7d   oldType;..    }
d220: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
d230: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
d240: 65 74 72 69 65 76 65 73 20 74 68 65 20 53 51 4c  etrieves the SQL
d250: 69 74 65 54 79 70 65 20 66 6f 72 20 61 20 67 69  iteType for a gi
d260: 76 65 6e 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20  ven column, and 
d270: 63 61 63 68 65 73 20 69 74 20 74 6f 20 61 76 6f  caches it to avo
d280: 69 64 20 72 65 70 65 74 65 74 69 76 65 20 69 6e  id repetetive in
d290: 74 65 72 6f 70 20 63 61 6c 6c 73 2e 0d 0a 20 20  terop calls...  
d2a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
d2b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
d2c0: 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68   name="flags">Th
d2d0: 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
d2e0: 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65  ed with the pare
d2f0: 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  nt connection ob
d300: 6a 65 63 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  ject.</param>.. 
d310: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
d320: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
d330: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
d340: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
d350: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
d360: 75 72 6e 73 3e 41 20 53 51 4c 69 74 65 54 79 70  urns>A SQLiteTyp
d370: 65 20 73 74 72 75 63 74 75 72 65 3c 2f 72 65 74  e structure</ret
d380: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61  urns>..    priva
d390: 74 65 20 53 51 4c 69 74 65 54 79 70 65 20 47 65  te SQLiteType Ge
d3a0: 74 53 51 4c 69 74 65 54 79 70 65 28 53 51 4c 69  tSQLiteType(SQLi
d3b0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
d3c0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 29 0d  s flags, int i).
d3d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
d3e0: 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 3b 0d  SQLiteType typ;.
d3f0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 6e  ...        // In
d400: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 66 69 65  itialize the fie
d410: 6c 64 20 74 79 70 65 73 20 61 72 72 61 79 20 69  ld types array i
d420: 66 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e  f not already in
d430: 69 74 69 61 6c 69 7a 65 64 0d 0a 20 20 20 20 20  itialized..     
d440: 20 20 20 69 66 20 28 5f 66 69 65 6c 64 54 79 70     if (_fieldTyp
d450: 65 41 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d  eArray == null).
d460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 69  .            _fi
d470: 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d 20 6e  eldTypeArray = n
d480: 65 77 20 53 51 4c 69 74 65 54 79 70 65 5b 50 72  ew SQLiteType[Pr
d490: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
d4a0: 64 43 6f 75 6e 74 5d 3b 0d 0a 0d 0a 20 20 20 20  dCount];....    
d4b0: 20 20 20 20 2f 2f 20 49 6e 69 74 69 61 6c 69 7a      // Initializ
d4c0: 65 20 74 68 69 73 20 63 6f 6c 75 6d 6e 27 73 20  e this column's 
d4d0: 66 69 65 6c 64 20 74 79 70 65 20 69 6e 73 74 61  field type insta
d4e0: 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 69 66 20  nce..        if 
d4f0: 28 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79  (_fieldTypeArray
d500: 5b 69 5d 20 3d 3d 20 6e 75 6c 6c 29 20 5f 66 69  [i] == null) _fi
d510: 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d 20  eldTypeArray[i] 
d520: 3d 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65  = new SQLiteType
d530: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 79 70  ();..        typ
d540: 20 3d 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72   = _fieldTypeArr
d550: 61 79 5b 69 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ay[i];....      
d560: 20 20 2f 2f 20 49 66 20 6e 6f 74 20 69 6e 69 74    // If not init
d570: 69 61 6c 69 7a 65 64 2c 20 74 68 65 6e 20 66 65  ialized, then fe
d580: 74 63 68 20 74 68 65 20 64 65 63 6c 61 72 65 64  tch the declared
d590: 20 63 6f 6c 75 6d 6e 20 64 61 74 61 74 79 70 65   column datatype
d5a0: 20 61 6e 64 20 61 74 74 65 6d 70 74 20 74 6f 20   and attempt to 
d5b0: 63 6f 6e 76 65 72 74 20 69 74 0d 0a 20 20 20 20  convert it..    
d5c0: 20 20 20 20 2f 2f 20 74 6f 20 61 20 6b 6e 6f 77      // to a know
d5d0: 6e 20 44 62 54 79 70 65 2e 0d 0a 20 20 20 20 20  n DbType...     
d5e0: 20 20 20 69 66 20 28 74 79 70 2e 41 66 66 69 6e     if (typ.Affin
d5f0: 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ity == TypeAffin
d600: 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65  ity.Uninitialize
d610: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
d620: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 2e 54             typ.T
d630: 79 70 65 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76  ype = SQLiteConv
d640: 65 72 74 2e 54 79 70 65 4e 61 6d 65 54 6f 44 62  ert.TypeNameToDb
d650: 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Type(..         
d660: 20 20 20 20 20 20 20 47 65 74 43 6f 6e 6e 65 63         GetConnec
d670: 74 69 6f 6e 28 74 68 69 73 29 2c 20 5f 61 63 74  tion(this), _act
d680: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
d690: 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 0d 0a 20  l.ColumnType(.. 
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
d6b0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
d6c0: 20 69 2c 20 6f 75 74 20 74 79 70 2e 41 66 66 69   i, out typ.Affi
d6d0: 6e 69 74 79 29 2c 20 66 6c 61 67 73 29 3b 0d 0a  nity), flags);..
d6e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d6f0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 79 70 3b       return typ;
d700: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
d710: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
d720: 20 20 2f 2f 2f 20 52 65 61 64 73 20 74 68 65 20    /// Reads the 
d730: 6e 65 78 74 20 72 6f 77 20 66 72 6f 6d 20 74 68  next row from th
d740: 65 20 72 65 73 75 6c 74 73 65 74 0d 0a 20 20 20  e resultset..   
d750: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
d760: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
d770: 73 3e 54 72 75 65 20 69 66 20 61 20 6e 65 77 20  s>True if a new 
d780: 72 6f 77 20 77 61 73 20 73 75 63 63 65 73 73 66  row was successf
d790: 75 6c 6c 79 20 6c 6f 61 64 65 64 20 61 6e 64 20  ully loaded and 
d7a0: 69 73 20 72 65 61 64 79 20 66 6f 72 20 70 72 6f  is ready for pro
d7b0: 63 65 73 73 69 6e 67 3c 2f 72 65 74 75 72 6e 73  cessing</returns
d7c0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
d7d0: 65 72 72 69 64 65 20 62 6f 6f 6c 20 52 65 61 64  erride bool Read
d7e0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
d7f0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
d800: 3b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c  ;..      CheckCl
d810: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 69  osed();..      i
d820: 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f  f (_throwOnDispo
d830: 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61  sed) SQLiteComma
d840: 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e  nd.Check(_comman
d850: 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  d);....      if 
d860: 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69  ((_commandBehavi
d870: 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61  or & CommandBeha
d880: 76 69 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29  vior.SchemaOnly)
d890: 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   != 0)..        
d8a0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
d8b0: 0a 20 20 20 20 20 20 69 66 20 28 5f 72 65 61 64  .      if (_read
d8c0: 69 6e 67 53 74 61 74 65 20 3d 3d 20 2d 31 29 20  ingState == -1) 
d8d0: 2f 2f 20 46 69 72 73 74 20 73 74 65 70 20 77 61  // First step wa
d8e0: 73 20 61 6c 72 65 61 64 79 20 64 6f 6e 65 20 61  s already done a
d8f0: 74 20 74 68 65 20 4e 65 78 74 52 65 73 75 6c 74  t the NextResult
d900: 28 29 20 6c 65 76 65 6c 2c 20 73 6f 20 64 6f 6e  () level, so don
d910: 27 74 20 73 74 65 70 20 61 67 61 69 6e 2c 20 6a  't step again, j
d920: 75 73 74 20 72 65 74 75 72 6e 20 74 72 75 65 2e  ust return true.
d930: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
d940: 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65     _readingState
d950: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 72   = 0;..        r
d960: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
d970: 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65     }..      else
d980: 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
d990: 74 65 20 3d 3d 20 30 29 20 2f 2f 20 41 63 74 69  te == 0) // Acti
d9a0: 76 65 6c 79 20 72 65 61 64 69 6e 67 20 72 6f 77  vely reading row
d9b0: 73 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  s..      {..    
d9c0: 20 20 20 20 2f 2f 20 44 6f 6e 27 74 20 72 65 61      // Don't rea
d9d0: 64 20 61 20 6e 65 77 20 72 6f 77 20 69 66 20 74  d a new row if t
d9e0: 68 65 20 63 6f 6d 6d 61 6e 64 20 62 65 68 61 76  he command behav
d9f0: 69 6f 72 20 64 69 63 74 61 74 65 73 20 53 69 6e  ior dictates Sin
da00: 67 6c 65 52 6f 77 2e 20 20 57 65 27 76 65 20 61  gleRow.  We've a
da10: 6c 72 65 61 64 79 20 72 65 61 64 20 74 68 65 20  lready read the 
da20: 66 69 72 73 74 20 72 6f 77 2e 0d 0a 20 20 20 20  first row...    
da30: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
da40: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
da50: 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 69 6e 67  andBehavior.Sing
da60: 6c 65 52 6f 77 29 20 3d 3d 20 30 29 0d 0a 20 20  leRow) == 0)..  
da70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
da80: 20 20 20 69 66 20 28 5f 61 63 74 69 76 65 53 74     if (_activeSt
da90: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 53 74 65  atement._sql.Ste
daa0: 70 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  p(_activeStateme
dab0: 6e 74 29 20 3d 3d 20 74 72 75 65 29 0d 0a 20 20  nt) == true)..  
dac0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
dad0: 20 20 20 20 20 20 20 5f 73 74 65 70 43 6f 75 6e         _stepCoun
dae0: 74 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t++;....        
daf0: 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f      if (_keyInfo
db00: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
db10: 20 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66           _keyInf
db20: 6f 2e 52 65 73 65 74 28 29 3b 0d 0a 0d 0a 20 20  o.Reset();....  
db30: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
db40: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
db50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
db60: 0d 0a 20 20 20 20 20 20 20 20 5f 72 65 61 64 69  ..        _readi
db70: 6e 67 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f 20  ngState = 1; // 
db80: 46 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67  Finished reading
db90: 20 72 6f 77 73 0d 0a 20 20 20 20 20 20 7d 0d 0a   rows..      }..
dba0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66  ..      return f
dbb0: 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alse;..    }....
dbc0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
dbd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
dbe0: 65 76 65 20 74 68 65 20 63 6f 75 6e 74 20 6f 66  eve the count of
dbf0: 20 72 65 63 6f 72 64 73 20 61 66 66 65 63 74 65   records affecte
dc00: 64 20 62 79 20 61 6e 20 75 70 64 61 74 65 2f 69  d by an update/i
dc10: 6e 73 65 72 74 20 63 6f 6d 6d 61 6e 64 2e 20 20  nsert command.  
dc20: 4f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 63 65 20  Only valid once 
dc30: 74 68 65 20 64 61 74 61 20 72 65 61 64 65 72 20  the data reader 
dc40: 69 73 20 63 6c 6f 73 65 64 21 0d 0a 20 20 20 20  is closed!..    
dc50: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
dc60: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
dc70: 69 64 65 20 69 6e 74 20 52 65 63 6f 72 64 73 41  ide int RecordsA
dc80: 66 66 65 63 74 65 64 0d 0a 20 20 20 20 7b 0d 0a  ffected..    {..
dc90: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
dca0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
dcb0: 75 72 6e 20 28 5f 72 6f 77 73 41 66 66 65 63 74  urn (_rowsAffect
dcc0: 65 64 20 3c 20 30 29 20 3f 20 30 20 3a 20 5f 72  ed < 0) ? 0 : _r
dcd0: 6f 77 73 41 66 66 65 63 74 65 64 3b 20 7d 0d 0a  owsAffected; }..
dce0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
dcf0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
dd00: 2f 2f 2f 20 49 6e 64 65 78 65 72 20 74 6f 20 72  /// Indexer to r
dd10: 65 74 72 69 65 76 65 20 64 61 74 61 20 66 72 6f  etrieve data fro
dd20: 6d 20 61 20 63 6f 6c 75 6d 6e 20 67 69 76 65 6e  m a column given
dd30: 20 69 74 73 20 6e 61 6d 65 0d 0a 20 20 20 20 2f   its name..    /
dd40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
dd50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
dd60: 6d 65 3d 22 6e 61 6d 65 22 3e 54 68 65 20 6e 61  me="name">The na
dd70: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  me of the column
dd80: 20 74 6f 20 72 65 74 72 69 65 76 65 20 64 61 74   to retrieve dat
dd90: 61 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20  a for</param>.. 
dda0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
ddb0: 54 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  The value contai
ddc0: 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ned in the colum
ddd0: 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  n</returns>..   
dde0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
ddf0: 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 73 74 72   object this[str
de00: 69 6e 67 20 6e 61 6d 65 5d 0d 0a 20 20 20 20 7b  ing name]..    {
de10: 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43 68  ..      get { Ch
de20: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
de30: 65 74 75 72 6e 20 47 65 74 56 61 6c 75 65 28 47  eturn GetValue(G
de40: 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d 65 29 29  etOrdinal(name))
de50: 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ; }..    }....  
de60: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
de70: 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72  .    /// Indexer
de80: 20 74 6f 20 72 65 74 72 69 65 76 65 20 64 61 74   to retrieve dat
de90: 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20  a from a column 
dea0: 67 69 76 65 6e 20 69 74 73 20 69 0d 0a 20 20 20  given its i..   
deb0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
dec0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
ded0: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
dee0: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
def0: 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
df00: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
df10: 65 74 75 72 6e 73 3e 54 68 65 20 76 61 6c 75 65  eturns>The value
df20: 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
df30: 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
df40: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
df50: 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 74  verride object t
df60: 68 69 73 5b 69 6e 74 20 69 5d 0d 0a 20 20 20 20  his[int i]..    
df70: 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43  {..      get { C
df80: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
df90: 72 65 74 75 72 6e 20 47 65 74 56 61 6c 75 65 28  return GetValue(
dfa0: 69 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  i); }..    }....
dfb0: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
dfc0: 20 4c 6f 61 64 4b 65 79 49 6e 66 6f 28 29 0d 0a   LoadKeyInfo()..
dfd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
dfe0: 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  f (_keyInfo != n
dff0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
e000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6b 65  .            _ke
e010: 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b  yInfo.Dispose();
e020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6b  ..            _k
e030: 65 79 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a  eyInfo = null;..
e040: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
e050: 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 20 3d 20       _keyInfo = 
e060: 6e 65 77 20 53 51 4c 69 74 65 4b 65 79 52 65 61  new SQLiteKeyRea
e070: 64 65 72 28 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e  der(_command.Con
e080: 6e 65 63 74 69 6f 6e 2c 20 74 68 69 73 2c 20 5f  nection, this, _
e090: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 29  activeStatement)
e0a0: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d  ;..    }..  }..}
e0b0: 0d 0a                                            ..