System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 2e99d97079113e9164a700fcb7cbed977f5a715a:


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 69 6e 74 20     internal int 
0c60: 5f 76 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  _version;....   
0c70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0c80: 20 20 20 20 2f 2f 2f 20 54 68 65 20 22 73 74 75      /// The "stu
0c90: 62 22 20 28 69 2e 65 2e 20 70 6c 61 63 65 68 6f  b" (i.e. placeho
0ca0: 6c 64 65 72 29 20 62 61 73 65 20 73 63 68 65 6d  lder) base schem
0cb0: 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 77 68  a name to use wh
0cc0: 65 6e 20 72 65 74 75 72 6e 69 6e 67 0d 0a 20 20  en returning..  
0cd0: 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 73 63 68    /// column sch
0ce0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ema information.
0cf0: 20 20 4d 61 74 63 68 65 73 20 74 68 65 20 62 61    Matches the ba
0d00: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 75  se schema name u
0d10: 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  sed by the..    
0d20: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 63  /// associated c
0d30: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
0d40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0d50: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
0d60: 6e 67 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61  ng _baseSchemaNa
0d70: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  me;....    /// <
0d80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0d90: 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74  / Internal const
0da0: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
0db0: 7a 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  zes the dataread
0dc0: 65 72 20 61 6e 64 20 73 65 74 73 20 75 70 20 74  er and sets up t
0dd0: 6f 20 62 65 67 69 6e 20 65 78 65 63 75 74 69 6e  o begin executin
0de0: 67 20 73 74 61 74 65 6d 65 6e 74 73 0d 0a 20 20  g statements..  
0df0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0e00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0e10: 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65 20   name="cmd">The 
0e20: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74 68  SQLiteCommand th
0e30: 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20 69  is data reader i
0e40: 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20  s for</param>.. 
0e50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e60: 6d 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20  me="behave">The 
0e70: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
0e80: 72 20 6f 66 20 74 68 65 20 64 61 74 61 20 72 65  r of the data re
0e90: 61 64 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ader</param>..  
0ea0: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
0eb0: 65 44 61 74 61 52 65 61 64 65 72 28 53 51 4c 69  eDataReader(SQLi
0ec0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43  teCommand cmd, C
0ed0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 62  ommandBehavior b
0ee0: 65 68 61 76 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ehave)..    {.. 
0ef0: 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69 73       _throwOnDis
0f00: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
0f10: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20       _command = 
0f20: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 5f 76 65 72  cmd;..      _ver
0f30: 73 69 6f 6e 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  sion = _command.
0f40: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 76 65 72 73  Connection._vers
0f50: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 5f 62 61 73  ion;..      _bas
0f60: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 5f 63  eSchemaName = _c
0f70: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
0f80: 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  n._baseSchemaNam
0f90: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 63 6f 6d  e;....      _com
0fa0: 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 3d 20 62  mandBehavior = b
0fb0: 65 68 61 76 65 3b 0d 0a 20 20 20 20 20 20 5f 61  ehave;..      _a
0fc0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
0fd0: 64 65 78 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  dex = -1;..     
0fe0: 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d   _rowsAffected =
0ff0: 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65   -1;....      Re
1000: 66 72 65 73 68 46 6c 61 67 73 28 29 3b 0d 0a 0d  freshFlags();...
1010: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
1020: 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
1030: 64 28 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  d(GetConnection(
1040: 74 68 69 73 29 2c 0d 0a 20 20 20 20 20 20 20 20  this),..        
1050: 20 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e    new Connection
1060: 45 76 65 6e 74 41 72 67 73 28 53 51 4c 69 74 65  EventArgs(SQLite
1070: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
1080: 79 70 65 2e 4e 65 77 44 61 74 61 52 65 61 64 65  ype.NewDataReade
1090: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 75  r,..          nu
10a0: 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61  ll, null, _comma
10b0: 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c 2c 20  nd, this, null, 
10c0: 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  null, new object
10d0: 5b 5d 20 7b 20 62 65 68 61 76 65 20 7d 29 29 3b  [] { behave }));
10e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 63  ....      if (_c
10f0: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
1100: 0a 20 20 20 20 20 20 20 20 20 20 4e 65 78 74 52  .          NextR
1110: 65 73 75 6c 74 28 29 3b 0d 0a 20 20 20 20 7d 0d  esult();..    }.
1120: 0a 0d 0a 20 20 20 20 2f 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 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1190: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
11a0: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
11b0: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
11c0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
11d0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
11e0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
11f0: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
1200: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
1210: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
1220: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
1230: 64 20 26 26 20 5f 74 68 72 6f 77 4f 6e 44 69 73  d && _throwOnDis
1240: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
1250: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
1260: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
1270: 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c  ption(typeof(SQL
1280: 69 74 65 44 61 74 61 52 65 61 64 65 72 29 2e 4e  iteDataReader).N
1290: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
12a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 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 0d 0a 0d 0a 20  ///////////.... 
1310: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1320: 0d 0a 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73  ..    /// Dispos
1330: 65 20 6f 66 20 61 6c 6c 20 72 65 73 6f 75 72 63  e of all resourc
1340: 65 73 20 75 73 65 64 20 62 79 20 74 68 69 73 20  es used by this 
1350: 64 61 74 61 72 65 61 64 65 72 2e 0d 0a 20 20 20  datareader...   
1360: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1380: 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22  name="disposing"
1390: 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70  ></param>..    p
13a0: 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64  rotected overrid
13b0: 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  e void Dispose(b
13c0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
13d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
13e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
13f0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1400: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1410: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1420: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
1430: 72 67 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  rgs(SQLiteConnec
1440: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 44 69  tionEventType.Di
1450: 73 70 6f 73 69 6e 67 44 61 74 61 52 65 61 64 65  sposingDataReade
1460: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
1470: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d  null, null, _com
1480: 6d 61 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c  mand, this, null
1490: 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65  , null, new obje
14a0: 63 74 5b 5d 20 7b 20 64 69 73 70 6f 73 69 6e 67  ct[] { disposing
14b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ,..            d
14c0: 69 73 70 6f 73 65 64 2c 20 5f 63 6f 6d 6d 61 6e  isposed, _comman
14d0: 64 42 65 68 61 76 69 6f 72 2c 20 5f 72 65 61 64  dBehavior, _read
14e0: 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f 77 73 41  ingState, _rowsA
14f0: 66 66 65 63 74 65 64 2c 20 5f 73 74 65 70 43 6f  ffected, _stepCo
1500: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
1510: 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 20 5f    _fieldCount, _
1520: 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 2c 20  disposeCommand, 
1530: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
1540: 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   }));....       
1550: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1570: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1580: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
15a0: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15d0: 20 20 20 2f 2f 20 20 20 20 2f 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 0d 0a 20  /////////////.. 
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1610: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1620: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1630: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1640: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1650: 20 2f 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 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1680: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 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 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
16d0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
16e0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
16f0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1740: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1760: 4f 54 45 3a 20 46 69 78 20 66 6f 72 20 74 69 63  OTE: Fix for tic
1770: 6b 65 74 20 5b 65 31 62 32 65 30 66 37 36 39 5d  ket [e1b2e0f769]
1780: 2c 20 64 6f 20 4e 4f 54 20 74 68 72 6f 77 20 65  , do NOT throw e
1790: 78 63 65 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20  xceptions..     
17a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17b0: 20 20 20 20 77 68 69 6c 65 20 77 65 20 61 72 65      while we are
17c0: 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64 2e   being disposed.
17d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
17f0: 20 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69        _throwOnDi
1800: 73 70 6f 73 65 64 20 3d 20 66 61 6c 73 65 3b 0d  sposed = false;.
1810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1820: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1830: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
1840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1850: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
1860: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20  disposing);.... 
1870: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1880: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1890: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
18a0: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
18b0: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
18c0: 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  point...        
18d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
18e0: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
18f0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1900: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1910: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
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 0d 0a 0d  /////////////...
1980: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f  .    internal vo
1990: 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  id Cancel()..   
19a0: 20 7b 0d 0a 20 20 20 20 20 20 5f 76 65 72 73 69   {..      _versi
19b0: 6f 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  on = 0;..    }..
19c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
19d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c 6f  ry>..    /// Clo
19e0: 73 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  ses the dataread
19f0: 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20  er, potentially 
1a00: 63 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  closing the conn
1a10: 65 63 74 69 6f 6e 20 61 73 20 77 65 6c 6c 20 69  ection as well i
1a20: 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  f CommandBehavio
1a30: 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f  r.CloseConnectio
1a40: 6e 20 77 61 73 20 73 70 65 63 69 66 69 65 64 2e  n was specified.
1a50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1a60: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
1a70: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
1a80: 6c 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  lose()..    {.. 
1a90: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
1aa0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53  ed();....      S
1ab0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
1ac0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1ad0: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1ae0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f            new Co
1af0: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
1b00: 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  s(SQLiteConnecti
1b10: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73  onEventType.Clos
1b20: 69 6e 67 44 61 74 61 52 65 61 64 65 72 2c 0d 0a  ingDataReader,..
1b30: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
1b40: 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61 6e 64 2c 20  null, _command, 
1b50: 74 68 69 73 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  this, null, null
1b60: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
1b70: 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f   _commandBehavio
1b80: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 72  r,..          _r
1b90: 65 61 64 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f  eadingState, _ro
1ba0: 77 73 41 66 66 65 63 74 65 64 2c 20 5f 73 74 65  wsAffected, _ste
1bb0: 70 43 6f 75 6e 74 2c 20 5f 66 69 65 6c 64 43 6f  pCount, _fieldCo
1bc0: 75 6e 74 2c 20 5f 64 69 73 70 6f 73 65 43 6f 6d  unt, _disposeCom
1bd0: 6d 61 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  mand,..         
1be0: 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65   _throwOnDispose
1bf0: 64 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  d }));....      
1c00: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
1c10: 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61        if (_comma
1c20: 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nd != null)..   
1c30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c40: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1c50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c60: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1c70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c80: 20 20 2f 2f 20 4d 61 6b 65 20 73 75 72 65 20 77    // Make sure w
1c90: 65 27 76 65 20 6e 6f 74 20 62 65 65 6e 20 63 61  e've not been ca
1ca0: 6e 63 65 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  nceled..        
1cb0: 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73 69        if (_versi
1cc0: 6f 6e 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  on != 0)..      
1cd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ce0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d10: 20 20 20 20 20 77 68 69 6c 65 20 28 4e 65 78 74       while (Next
1d20: 52 65 73 75 6c 74 28 29 29 0d 0a 20 20 20 20 20  Result())..     
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d70: 20 20 20 20 20 20 20 20 63 61 74 63 68 28 53 51          catch(SQ
1d80: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 29 0d 0a  LiteException)..
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1db0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1dc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1dd0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 52 65       _command.Re
1de0: 73 65 74 44 61 74 61 52 65 61 64 65 72 28 29 3b  setDataReader();
1df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
1e10: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e30: 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64 61 74     // If the dat
1e40: 61 72 65 61 64 65 72 27 73 20 62 65 68 61 76 69  areader's behavi
1e50: 6f 72 20 69 6e 63 6c 75 64 65 73 20 63 6c 6f 73  or includes clos
1e60: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
1e70: 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73 6f 20 68  on, then do so h
1e80: 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ere...          
1e90: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
1ea0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
1eb0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73  andBehavior.Clos
1ec0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 21 3d 20  eConnection) != 
1ed0: 30 20 26 26 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  0 && _command.Co
1ee0: 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  nnection != null
1ef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f00: 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e     _command.Conn
1f10: 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d  ection.Close();.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f40: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
1f50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f60: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 64 69           if (_di
1f70: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 29 0d 0a 20  sposeCommand).. 
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63 6f               _co
1f90: 6d 6d 61 6e 64 2e 44 69 73 70 6f 73 65 28 29 3b  mmand.Dispose();
1fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
1fb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fc0: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 6e      _command = n
1fd0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f 61  ull;..        _a
1fe0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d  ctiveStatement =
1ff0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2000: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
2010: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f  null;..        _
2020: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d  fieldTypeArray =
2030: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d   null;..      }.
2040: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
2050: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2060: 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
2070: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2080: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65  {..          _ke
2090: 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b  yInfo.Dispose();
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79  ..          _key
20b0: 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Info = null;..  
20c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
20d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
20e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20f0: 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20 65    /// Throw an e
2100: 72 72 6f 72 20 69 66 20 74 68 65 20 64 61 74 61  rror if the data
2110: 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
2120: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2130: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
2140: 65 20 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73  e void CheckClos
2150: 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
2160: 20 20 20 69 66 20 28 21 5f 74 68 72 6f 77 4f 6e     if (!_throwOn
2170: 44 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  Disposed)..     
2180: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
2190: 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64      if (_command
21a0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
21b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
21c0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
21d0: 65 70 74 69 6f 6e 28 22 44 61 74 61 52 65 61 64  eption("DataRead
21e0: 65 72 20 68 61 73 20 62 65 65 6e 20 63 6c 6f 73  er has been clos
21f0: 65 64 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ed");....      i
2200: 66 20 28 5f 76 65 72 73 69 6f 6e 20 3d 3d 20 30  f (_version == 0
2210: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
2220: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2230: 74 69 6f 6e 28 22 45 78 65 63 75 74 69 6f 6e 20  tion("Execution 
2240: 77 61 73 20 61 62 6f 72 74 65 64 20 62 79 20 74  was aborted by t
2250: 68 65 20 75 73 65 72 22 29 3b 0d 0a 0d 0a 20 20  he user");....  
2260: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2270: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
2280: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
2290: 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ction;....      
22a0: 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  if (connection._
22b0: 76 65 72 73 69 6f 6e 20 21 3d 20 5f 76 65 72 73  version != _vers
22c0: 69 6f 6e 20 7c 7c 20 63 6f 6e 6e 65 63 74 69 6f  ion || connectio
22d0: 6e 2e 53 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65  n.State != Conne
22e0: 63 74 69 6f 6e 53 74 61 74 65 2e 4f 70 65 6e 29  ctionState.Open)
22f0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
2300: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
2310: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 43  tionException("C
2320: 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 63 6c  onnection was cl
2330: 6f 73 65 64 2c 20 73 74 61 74 65 6d 65 6e 74 20  osed, statement 
2340: 77 61 73 20 74 65 72 6d 69 6e 61 74 65 64 22 29  was terminated")
2350: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
2360: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2370: 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20     /// Throw an 
2380: 65 72 72 6f 72 20 69 66 20 61 20 72 6f 77 20 69  error if a row i
2390: 73 20 6e 6f 74 20 6c 6f 61 64 65 64 0d 0a 20 20  s not loaded..  
23a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
23b0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
23c0: 69 64 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77  id CheckValidRow
23d0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
23e0: 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
23f0: 74 65 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  te != 0)..      
2400: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
2410: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
2420: 70 74 69 6f 6e 28 22 4e 6f 20 63 75 72 72 65 6e  ption("No curren
2430: 74 20 72 6f 77 22 29 3b 0d 0a 20 20 20 20 7d 0d  t row");..    }.
2440: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2450: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
2460: 75 6d 65 72 61 74 6f 72 20 73 75 70 70 6f 72 74  umerator support
2470: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2480: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
2490: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
24a0: 20 44 62 45 6e 75 6d 65 72 61 74 6f 72 20 6f 62   DbEnumerator ob
24b0: 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ject.</returns>.
24c0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
24d0: 72 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 73  ride Collections
24e0: 2e 49 45 6e 75 6d 65 72 61 74 6f 72 20 47 65 74  .IEnumerator Get
24f0: 45 6e 75 6d 65 72 61 74 6f 72 28 29 0d 0a 20 20  Enumerator()..  
2500: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
2510: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
2520: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 62     return new Db
2530: 45 6e 75 6d 65 72 61 74 6f 72 28 74 68 69 73 2c  Enumerator(this,
2540: 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
2550: 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
2560: 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65  avior.CloseConne
2570: 63 74 69 6f 6e 29 20 3d 3d 20 43 6f 6d 6d 61 6e  ction) == Comman
2580: 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43  dBehavior.CloseC
2590: 6f 6e 6e 65 63 74 69 6f 6e 29 29 3b 0d 0a 20 20  onnection));..  
25a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
25b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
25c0: 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65  / Not implemente
25d0: 64 2e 20 20 52 65 74 75 72 6e 73 20 30 0d 0a 20  d.  Returns 0.. 
25e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
25f0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
2600: 65 72 72 69 64 65 20 69 6e 74 20 44 65 70 74 68  erride int Depth
2610: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
2620: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
2630: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2640: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43  ed();..        C
2650: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
2660: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
2670: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2680: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2690: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
26a0: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
26b0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
26c0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75  the current resu
26d0: 6c 74 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ltset..    /// <
26e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
26f0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
2700: 6e 74 20 46 69 65 6c 64 43 6f 75 6e 74 0d 0a 20  nt FieldCount.. 
2710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
2720: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2730: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
2740: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2750: 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  kClosed();....  
2760: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
2770: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
2780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66         return _f
2790: 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  ieldCount;....  
27a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69        return _fi
27b0: 65 6c 64 43 6f 75 6e 74 20 2b 20 5f 6b 65 79 49  eldCount + _keyI
27c0: 6e 66 6f 2e 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  nfo.Count;..    
27d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
27e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
27f0: 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 63 65 73 20  .    /// Forces 
2800: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
2810: 6c 61 67 73 20 63 61 63 68 65 64 20 62 79 20 74  lags cached by t
2820: 68 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20  his data reader 
2830: 74 6f 20 62 65 20 72 65 66 72 65 73 68 65 64 0d  to be refreshed.
2840: 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68  .    /// from th
2850: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6e  e underlying con
2860: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
2870: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2880: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 52 65    public void Re
2890: 66 72 65 73 68 46 6c 61 67 73 28 29 0d 0a 20 20  freshFlags()..  
28a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
28b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
28c0: 0a 20 20 20 20 20 20 20 20 5f 66 6c 61 67 73 20  .        _flags 
28d0: 3d 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  = SQLiteCommand.
28e0: 47 65 74 46 6c 61 67 73 28 5f 63 6f 6d 6d 61 6e  GetFlags(_comman
28f0: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
2900: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2910: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
2920: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2930: 6f 77 73 20 73 65 65 6e 20 73 6f 20 66 61 72 20  ows seen so far 
2940: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  in the current r
2950: 65 73 75 6c 74 20 73 65 74 2e 0d 0a 20 20 20 20  esult set...    
2960: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2970: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 53      public int S
2980: 74 65 70 43 6f 75 6e 74 0d 0a 20 20 20 20 7b 0d  tepCount..    {.
2990: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
29a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29b0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
29c0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
29d0: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
29e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29f0: 20 72 65 74 75 72 6e 20 5f 73 74 65 70 43 6f 75   return _stepCou
2a00: 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  nt;..        }..
2a10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
2a20: 76 61 74 65 20 69 6e 74 20 50 72 69 76 61 74 65  vate int Private
2a30: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
2a40: 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
2a50: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
2a60: 66 69 65 6c 64 43 6f 75 6e 74 3b 20 7d 0d 0a 20  fieldCount; }.. 
2a70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
2a80: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
2a90: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
2aa0: 75 6d 62 65 72 20 6f 66 20 76 69 73 69 62 6c 65  umber of visible
2ab0: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
2ac0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
2ad0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2ae0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
2af0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 69   override int Vi
2b00: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 0d  sibleFieldCount.
2b10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2b20: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2b30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
2b40: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68  d();..        Ch
2b50: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20  eckClosed();..  
2b60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 72 69        return Pri
2b70: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
2b80: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 7d 0d  Count;..      }.
2b90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2ba0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2bb0: 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
2bc0: 20 69 73 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   is used to make
2bd0: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
2be0: 20 73 65 74 20 69 73 20 6f 70 65 6e 20 61 6e 64   set is open and
2bf0: 20 61 20 72 6f 77 20 69 73 20 63 75 72 72 65 6e   a row is curren
2c00: 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a  tly available...
2c10: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2c20: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
2c30: 76 6f 69 64 20 56 65 72 69 66 79 46 6f 72 47 65  void VerifyForGe
2c40: 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t()..    {..    
2c50: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
2c60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2c70: 6b 56 61 6c 69 64 52 6f 77 28 29 3b 0d 0a 20 20  kValidRow();..  
2c80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2c90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2ca0: 2f 20 53 51 4c 69 74 65 20 69 73 20 69 6e 68 65  / SQLite is inhe
2cb0: 72 65 6e 74 6c 79 20 75 6e 2d 74 79 70 65 64 2e  rently un-typed.
2cc0: 20 20 41 6c 6c 20 64 61 74 61 74 79 70 65 73 20    All datatypes 
2cd0: 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20 6e 61  in SQLite are na
2ce0: 74 69 76 65 6c 79 20 73 74 72 69 6e 67 73 2e 20  tively strings. 
2cf0: 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   The definition 
2d00: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  of the columns o
2d10: 66 20 61 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  f a table..    /
2d20: 2f 2f 20 61 6e 64 20 74 68 65 20 61 66 66 69 6e  // and the affin
2d30: 69 74 79 20 6f 66 20 72 65 74 75 72 6e 65 64 20  ity of returned 
2d40: 74 79 70 65 73 20 61 72 65 20 61 6c 6c 20 77 65  types are all we
2d50: 20 68 61 76 65 20 74 6f 20 67 6f 20 6f 6e 20 74   have to go on t
2d60: 6f 20 74 79 70 65 2d 72 65 73 74 72 69 63 74 20  o type-restrict 
2d70: 64 61 74 61 20 69 6e 20 74 68 65 20 72 65 61 64  data in the read
2d80: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 0d 0a 20 20  er...    ///..  
2d90: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
2da0: 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ion attempts to 
2db0: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
2dc0: 74 79 70 65 20 6f 66 20 64 61 74 61 20 62 65 69  type of data bei
2dd0: 6e 67 20 72 65 71 75 65 73 74 65 64 20 6f 66 20  ng requested of 
2de0: 61 20 63 6f 6c 75 6d 6e 20 6d 61 74 63 68 65 73  a column matches
2df0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
2e00: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 6e   the column.  In
2e10: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63 61  ..    /// the ca
2e20: 73 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  se of columns th
2e30: 61 74 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  at are not backe
2e40: 64 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 64  d into a table d
2e50: 65 66 69 6e 69 74 69 6f 6e 2c 20 77 65 20 61 74  efinition, we at
2e60: 74 65 6d 70 74 20 74 6f 20 6d 61 74 63 68 20 75  tempt to match u
2e70: 70 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  p the affinity o
2e80: 66 20 61 20 63 6f 6c 75 6d 6e 20 28 69 6e 74 2c  f a column (int,
2e90: 20 64 6f 75 62 6c 65 2c 20 73 74 72 69 6e 67 20   double, string 
2ea0: 6f 72 20 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f  or blob)..    //
2eb0: 2f 20 74 6f 20 61 20 73 65 74 20 6f 66 20 6b 6e  / to a set of kn
2ec0: 6f 77 6e 20 74 79 70 65 73 20 74 68 61 74 20 63  own types that c
2ed0: 6c 6f 73 65 6c 79 20 6d 61 74 63 68 20 74 68 61  losely match tha
2ee0: 74 20 61 66 66 69 6e 69 74 79 2e 20 20 49 74 27  t affinity.  It'
2ef0: 73 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 73  s not an exact s
2f00: 63 69 65 6e 63 65 2c 20 62 75 74 20 69 74 73 20  cience, but its 
2f10: 74 68 65 20 62 65 73 74 20 77 65 20 63 61 6e 20  the best we can 
2f20: 64 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  do...    /// </s
2f30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2f40: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2f50: 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f  /// This functio
2f60: 6e 20 74 68 72 6f 77 73 20 61 6e 20 49 6e 76 61  n throws an Inva
2f70: 6c 69 64 54 79 70 65 43 61 73 74 28 29 20 65 78  lidTypeCast() ex
2f80: 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 72  ception if the r
2f90: 65 71 75 65 73 74 65 64 20 74 79 70 65 20 64 6f  equested type do
2fa0: 65 73 6e 27 74 20 6d 61 74 63 68 20 74 68 65 20  esn't match the 
2fb0: 63 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e 69 74  column's definit
2fc0: 69 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74 79 2e  ion or affinity.
2fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
2fe0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  rns>..    /// <p
2ff0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
3000: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
3010: 6f 6c 75 6d 6e 20 74 6f 20 74 79 70 65 2d 63 68  olumn to type-ch
3020: 65 63 6b 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eck</param>..   
3030: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3040: 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
3050: 77 65 20 77 61 6e 74 20 74 6f 20 67 65 74 20 6f  we want to get o
3060: 75 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ut of the column
3070: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 72  </param>..    pr
3080: 69 76 61 74 65 20 54 79 70 65 41 66 66 69 6e 69  ivate TypeAffini
3090: 74 79 20 56 65 72 69 66 79 54 79 70 65 28 69 6e  ty VerifyType(in
30a0: 74 20 69 2c 20 44 62 54 79 70 65 20 74 79 70 29  t i, DbType typ)
30b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
30c0: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
30d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
30e0: 6c 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 79 70  lags.NoVerifyTyp
30f0: 65 41 66 66 69 6e 69 74 79 29 20 3d 3d 20 53 51  eAffinity) == SQ
3100: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3110: 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 79 70 65  ags.NoVerifyType
3120: 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20  Affinity)..     
3130: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79         return Ty
3140: 70 65 41 66 66 69 6e 69 74 79 2e 4e 6f 6e 65 3b  peAffinity.None;
3150: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70 65  ....        Type
3160: 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e 69 74  Affinity affinit
3170: 79 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70  y = GetSQLiteTyp
3180: 65 28 5f 66 6c 61 67 73 2c 20 69 29 2e 41 66 66  e(_flags, i).Aff
3190: 69 6e 69 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  inity;....      
31a0: 20 20 73 77 69 74 63 68 20 28 61 66 66 69 6e 69    switch (affini
31b0: 74 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ty)..        {..
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
31d0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
31e0: 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  t64:..          
31f0: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
3200: 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29 20 72   DbType.Int64) r
3210: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3230: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3240: 70 65 2e 49 6e 74 33 32 29 20 72 65 74 75 72 6e  pe.Int32) return
3250: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3260: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3270: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e  typ == DbType.In
3280: 74 31 36 29 20 72 65 74 75 72 6e 20 61 66 66 69  t16) return affi
3290: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
32a0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
32b0: 3d 20 44 62 54 79 70 65 2e 42 79 74 65 29 20 72  = DbType.Byte) r
32c0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
32d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32e0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
32f0: 70 65 2e 53 42 79 74 65 29 20 72 65 74 75 72 6e  pe.SByte) return
3300: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3310: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3320: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 6f  typ == DbType.Bo
3330: 6f 6c 65 61 6e 29 20 72 65 74 75 72 6e 20 61 66  olean) return af
3340: 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20  finity;..       
3350: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
3360: 20 3d 3d 20 44 62 54 79 70 65 2e 44 61 74 65 54   == DbType.DateT
3370: 69 6d 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  ime) return affi
3380: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
3390: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
33a0: 3d 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29  = DbType.Double)
33b0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
33c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33d0: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
33e0: 54 79 70 65 2e 53 69 6e 67 6c 65 29 20 72 65 74  Type.Single) ret
33f0: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3410: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3420: 2e 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e  .Decimal) return
3430: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3440: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3450: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
3460: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
3470: 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
3480: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
3490: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 6f 75  yp == DbType.Dou
34a0: 62 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  ble) return affi
34b0: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
34c0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
34d0: 3d 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29  = DbType.Single)
34e0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
34f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3500: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
3510: 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72 65  Type.Decimal) re
3520: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a  turn affinity;..
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3540: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3550: 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74 75  e.DateTime) retu
3560: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20  rn affinity;..  
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
3580: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
3590: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
35a0: 69 74 79 2e 54 65 78 74 3a 0d 0a 20 20 20 20 20  ity.Text:..     
35b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
35c0: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 74 72  yp == DbType.Str
35d0: 69 6e 67 29 20 72 65 74 75 72 6e 20 61 66 66 69  ing) return affi
35e0: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
35f0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
3600: 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29 20 72  = DbType.Guid) r
3610: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3630: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3640: 70 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74  pe.DateTime) ret
3650: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3670: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3680: 2e 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e  .Decimal) return
3690: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
36a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
36b0: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
36c0: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
36d0: 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20  y.Blob:..       
36e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
36f0: 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29   == DbType.Guid)
3700: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
3710: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3720: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
3730: 54 79 70 65 2e 42 69 6e 61 72 79 29 20 72 65 74  Type.Binary) ret
3740: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3760: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3770: 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e 20  .String) return 
3780: 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  affinity;..     
3790: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
37a0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
37b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
37c0: 77 20 49 6e 76 61 6c 69 64 43 61 73 74 45 78 63  w InvalidCastExc
37d0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 7d  eption();..    }
37e0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
37f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
3800: 6e 76 6f 6b 65 73 20 74 68 65 20 64 61 74 61 20  nvokes the data 
3810: 72 65 61 64 65 72 20 76 61 6c 75 65 20 63 61 6c  reader value cal
3820: 6c 62 61 63 6b 20 63 6f 6e 66 69 67 75 72 65 64  lback configured
3830: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
3840: 65 0d 0a 20 20 20 20 2f 2f 2f 20 74 79 70 65 20  e..    /// type 
3850: 6e 61 6d 65 20 61 73 73 6f 63 69 61 74 65 64 20  name associated 
3860: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
3870: 65 64 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 6e  ed column.  If n
3880: 6f 20 64 61 74 61 20 72 65 61 64 65 72 0d 0a 20  o data reader.. 
3890: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 63 61 6c     /// value cal
38a0: 6c 62 61 63 6b 20 69 73 20 61 76 61 69 6c 61 62  lback is availab
38b0: 6c 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  le for the datab
38c0: 61 73 65 20 74 79 70 65 20 6e 61 6d 65 2c 20 64  ase type name, d
38d0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
38e0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
38f0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
3900: 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20  ame="index">..  
3910: 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78 20    /// The index 
3920: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65  of the column be
3930: 69 6e 67 20 72 65 61 64 2e 0d 0a 20 20 20 20 2f  ing read...    /
3940: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
3950: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3960: 3d 22 65 76 65 6e 74 41 72 67 73 22 3e 0d 0a 20  ="eventArgs">.. 
3970: 20 20 20 2f 2f 2f 20 54 68 65 20 65 78 74 72 61     /// The extra
3980: 20 65 76 65 6e 74 20 64 61 74 61 20 74 6f 20 70   event data to p
3990: 61 73 73 20 69 6e 74 6f 20 74 68 65 20 63 61 6c  ass into the cal
39a0: 6c 62 61 63 6b 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lback...    /// 
39b0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
39c0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
39d0: 6f 6d 70 6c 65 74 65 22 3e 0d 0a 20 20 20 20 2f  omplete">..    /
39e0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
39f0: 68 65 20 64 65 66 61 75 6c 74 20 68 61 6e 64 6c  he default handl
3a00: 69 6e 67 20 66 6f 72 20 74 68 65 20 64 61 74 61  ing for the data
3a10: 20 72 65 61 64 65 72 20 63 61 6c 6c 20 73 68 6f   reader call sho
3a20: 75 6c 64 20 62 65 0d 0a 20 20 20 20 2f 2f 2f 20  uld be..    /// 
3a30: 73 6b 69 70 70 65 64 2e 20 20 49 66 20 74 68 69  skipped.  If thi
3a40: 73 20 69 73 20 73 65 74 20 74 6f 20 6e 6f 6e 2d  s is set to non-
3a50: 7a 65 72 6f 20 61 6e 64 20 74 68 65 20 6e 65 63  zero and the nec
3a60: 65 73 73 61 72 79 20 72 65 74 75 72 6e 20 76 61  essary return va
3a70: 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 73 20  lue..    /// is 
3a80: 75 6e 61 76 61 69 6c 61 62 6c 65 20 6f 72 20 75  unavailable or u
3a90: 6e 73 75 69 74 61 62 6c 65 2c 20 61 6e 20 65 78  nsuitable, an ex
3aa0: 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ception will be 
3ab0: 74 68 72 6f 77 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  thrown...    ///
3ac0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70   </param>..    p
3ad0: 72 69 76 61 74 65 20 76 6f 69 64 20 49 6e 76 6f  rivate void Invo
3ae0: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
3af0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 69 6e  ack(..        in
3b00: 74 20 69 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20  t index,..      
3b10: 20 20 53 51 4c 69 74 65 52 65 61 64 45 76 65 6e    SQLiteReadEven
3b20: 74 41 72 67 73 20 65 76 65 6e 74 41 72 67 73 2c  tArgs eventArgs,
3b30: 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20 62 6f  ..        out bo
3b40: 6f 6c 20 63 6f 6d 70 6c 65 74 65 0d 0a 20 20 20  ol complete..   
3b50: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
3b60: 20 20 20 20 20 20 20 63 6f 6d 70 6c 65 74 65 20         complete 
3b70: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
3b80: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
3b90: 6f 6e 46 6c 61 67 73 20 6f 6c 64 46 6c 61 67 73  onFlags oldFlags
3ba0: 20 3d 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20   = _flags;..    
3bb0: 20 20 20 20 5f 66 6c 61 67 73 20 26 3d 20 7e 53      _flags &= ~S
3bc0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
3bd0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
3be0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
3bf0: 61 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  acks;....       
3c00: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
3c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
3c20: 69 6e 67 20 74 79 70 65 4e 61 6d 65 20 3d 20 47  ing typeName = G
3c30: 65 74 44 61 74 61 54 79 70 65 4e 61 6d 65 28 69  etDataTypeName(i
3c40: 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
3c50: 20 20 20 20 20 20 69 66 20 28 74 79 70 65 4e 61        if (typeNa
3c60: 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
3c80: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
3c90: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
3ca0: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
3cb0: 3d 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  = GetConnection(
3cc0: 74 68 69 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  this);....      
3cd0: 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63        if (connec
3ce0: 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3d00: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
3d10: 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65        SQLiteType
3d20: 43 61 6c 6c 62 61 63 6b 73 20 63 61 6c 6c 62 61  Callbacks callba
3d30: 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  cks;....        
3d40: 20 20 20 20 69 66 20 28 21 63 6f 6e 6e 65 63 74      if (!connect
3d50: 69 6f 6e 2e 54 72 79 47 65 74 54 79 70 65 43 61  ion.TryGetTypeCa
3d60: 6c 6c 62 61 63 6b 73 28 74 79 70 65 4e 61 6d 65  llbacks(typeName
3d70: 2c 20 6f 75 74 20 63 61 6c 6c 62 61 63 6b 73 29  , out callbacks)
3d80: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
3d90: 20 20 20 20 20 28 63 61 6c 6c 62 61 63 6b 73 20       (callbacks 
3da0: 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
3db0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3dc0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3dd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3de0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3df0: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 43  SQLiteReadValueC
3e00: 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
3e10: 20 3d 20 63 61 6c 6c 62 61 63 6b 73 2e 52 65 61   = callbacks.Rea
3e20: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 3b 0d  dValueCallback;.
3e30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
3e40: 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
3e50: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3e60: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
3e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
3e80: 65 63 74 20 75 73 65 72 44 61 74 61 20 3d 20 63  ect userData = c
3e90: 61 6c 6c 62 61 63 6b 73 2e 52 65 61 64 56 61 6c  allbacks.ReadVal
3ea0: 75 65 55 73 65 72 44 61 74 61 3b 0d 0a 0d 0a 20  ueUserData;.... 
3eb0: 20 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62             callb
3ec0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
3ed0: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
3ee0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2c 20 74 68 69  tement._sql, thi
3ef0: 73 2c 20 6f 6c 64 46 6c 61 67 73 2c 20 65 76 65  s, oldFlags, eve
3f00: 6e 74 41 72 67 73 2c 20 74 79 70 65 4e 61 6d 65  ntArgs, typeName
3f10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3f20: 20 20 20 69 6e 64 65 78 2c 20 75 73 65 72 44 61     index, userDa
3f30: 74 61 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  ta, out complete
3f40: 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
3f50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3f60: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
3f70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3f80: 20 20 20 5f 66 6c 61 67 73 20 7c 3d 20 53 51 4c     _flags |= SQL
3f90: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
3fa0: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
3fb0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
3fc0: 6b 73 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ks;..        }..
3fd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
3fe0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3ff0: 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20  /// Attempts to 
4000: 71 75 65 72 79 20 74 68 65 20 69 6e 74 65 67 65  query the intege
4010: 72 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72  r identifier for
4020: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
4030: 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 2f 2f 2f  .  This..    ///
4040: 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 66   will not work f
4050: 6f 72 20 74 61 62 6c 65 73 20 74 68 61 74 20 77  or tables that w
4060: 65 72 65 20 63 72 65 61 74 65 64 20 57 49 54 48  ere created WITH
4070: 4f 55 54 20 52 4f 57 49 44 20 2d 4f 52 2d 20 69  OUT ROWID -OR- i
4080: 66 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 71  f the..    /// q
4090: 75 65 72 79 20 64 6f 65 73 20 6e 6f 74 20 69 6e  uery does not in
40a0: 63 6c 75 64 65 20 74 68 65 20 22 72 6f 77 69 64  clude the "rowid
40b0: 22 20 63 6f 6c 75 6d 6e 20 6f 72 20 6f 6e 65 20  " column or one 
40c0: 6f 66 20 69 74 73 20 61 6c 69 61 73 65 73 20 2d  of its aliases -
40d0: 4f 52 2d 0d 0a 20 20 20 20 2f 2f 2f 20 69 66 20  OR-..    /// if 
40e0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
40f0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 22  QLiteDataReader"
4100: 20 2f 3e 20 77 61 73 20 6e 6f 74 20 63 72 65 61   /> was not crea
4110: 74 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20  ted with the..  
4120: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
4130: 22 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72  "CommandBehavior
4140: 2e 4b 65 79 49 6e 66 6f 22 2f 3e 20 66 6c 61 67  .KeyInfo"/> flag
4150: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
4160: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
4170: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 0d  param name="i">.
4180: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64  .    /// The ind
4190: 65 78 20 6f 66 20 74 68 65 20 42 4c 4f 42 20 63  ex of the BLOB c
41a0: 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  olumn...    /// 
41b0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
41c0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
41d0: 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72   /// The integer
41e0: 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20   identifier for 
41f0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
4200: 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20  -OR- null if it 
4210: 63 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 2f  could not..    /
4220: 2f 2f 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64  // be determined
4230: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
4240: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
4250: 6e 61 6c 20 6c 6f 6e 67 3f 20 47 65 74 52 6f 77  nal long? GetRow
4260: 49 64 28 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  Id(..        int
4270: 20 69 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20   i..        ).. 
4280: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
4290: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
42a0: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
42b0: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
42c0: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
42d0: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
42e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
42f0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
4300: 20 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65   string database
4310: 4e 61 6d 65 20 3d 20 47 65 74 44 61 74 61 62 61  Name = GetDataba
4320: 73 65 4e 61 6d 65 28 69 29 3b 0d 0a 20 20 20 20  seName(i);..    
4330: 20 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c 65      string table
4340: 4e 61 6d 65 20 3d 20 47 65 74 54 61 62 6c 65 4e  Name = GetTableN
4350: 61 6d 65 28 69 29 3b 0d 0a 20 20 20 20 20 20 20  ame(i);..       
4360: 20 69 6e 74 20 69 52 6f 77 49 64 20 3d 20 5f 6b   int iRowId = _k
4370: 65 79 49 6e 66 6f 2e 47 65 74 52 6f 77 49 64 49  eyInfo.GetRowIdI
4380: 6e 64 65 78 28 64 61 74 61 62 61 73 65 4e 61 6d  ndex(databaseNam
4390: 65 2c 20 74 61 62 6c 65 4e 61 6d 65 29 3b 0d 0a  e, tableName);..
43a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 52  ..        if (iR
43b0: 6f 77 49 64 20 21 3d 20 2d 31 29 0d 0a 20 20 20  owId != -1)..   
43c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
43d0: 47 65 74 49 6e 74 36 34 28 69 52 6f 77 49 64 29  GetInt64(iRowId)
43e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
43f0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
4400: 52 6f 77 49 64 28 64 61 74 61 62 61 73 65 4e 61  RowId(databaseNa
4410: 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65 29 3b 0d  me, tableName);.
4420: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
4430: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
4440: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
4450: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 3c  he column as a <
4460: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
4470: 42 6c 6f 62 22 20 2f 3e 20 6f 62 6a 65 63 74 2e  Blob" /> object.
4480: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 77  ..    /// This w
4490: 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 72  ill not work for
44a0: 20 74 61 62 6c 65 73 20 74 68 61 74 20 77 65 72   tables that wer
44b0: 65 20 63 72 65 61 74 65 64 20 57 49 54 48 4f 55  e created WITHOU
44c0: 54 20 52 4f 57 49 44 0d 0a 20 20 20 20 2f 2f 2f  T ROWID..    ///
44d0: 20 2d 4f 52 2d 20 69 66 20 74 68 65 20 71 75 65   -OR- if the que
44e0: 72 79 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63 6c  ry does not incl
44f0: 75 64 65 20 74 68 65 20 22 72 6f 77 69 64 22 20  ude the "rowid" 
4500: 63 6f 6c 75 6d 6e 20 6f 72 20 6f 6e 65 0d 0a 20  column or one.. 
4510: 20 20 20 2f 2f 2f 20 6f 66 20 69 74 73 20 61 6c     /// of its al
4520: 69 61 73 65 73 20 2d 4f 52 2d 20 69 66 20 74 68  iases -OR- if th
4530: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
4540: 69 74 65 44 61 74 61 52 65 61 64 65 72 22 20 2f  iteDataReader" /
4550: 3e 20 77 61 73 0d 0a 20 20 20 20 2f 2f 2f 20 6e  > was..    /// n
4560: 6f 74 20 63 72 65 61 74 65 64 20 77 69 74 68 20  ot created with 
4570: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43  the <see cref="C
4580: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 4b  ommandBehavior.K
4590: 65 79 49 6e 66 6f 22 20 2f 3e 0d 0a 20 20 20 20  eyInfo" />..    
45a0: 2f 2f 2f 20 66 6c 61 67 2e 0d 0a 20 20 20 20 2f  /// flag...    /
45b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
45c0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
45d0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
45e0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
45f0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
4600: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65   <param name="re
4610: 61 64 4f 6e 6c 79 22 3e 0d 0a 20 20 20 20 2f 2f  adOnly">..    //
4620: 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6f 70  / Non-zero to op
4630: 65 6e 20 74 68 65 20 62 6c 6f 62 20 6f 62 6a 65  en the blob obje
4640: 63 74 20 66 6f 72 20 72 65 61 64 2d 6f 6e 6c 79  ct for read-only
4650: 20 61 63 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f   access...    //
4660: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
4670: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 6e  /// <returns>A n
4680: 65 77 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ew <see cref="SQ
4690: 4c 69 74 65 42 6c 6f 62 22 20 2f 3e 20 6f 62 6a  LiteBlob" /> obj
46a0: 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ect.</returns>..
46b0: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
46c0: 65 42 6c 6f 62 20 47 65 74 42 6c 6f 62 28 69 6e  eBlob GetBlob(in
46d0: 74 20 69 2c 20 62 6f 6f 6c 20 72 65 61 64 4f 6e  t i, bool readOn
46e0: 6c 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ly)..    {..    
46f0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
4700: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
4710: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
4720: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
4730: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
4740: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
4750: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
4760: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
4770: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
4780: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
4790: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
47a0: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
47b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
47c0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
47d0: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
47e0: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
47f0: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
4800: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
4810: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
4820: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
4830: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
4840: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
4850: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
4860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4870: 22 47 65 74 42 6c 6f 62 22 2c 20 6e 65 77 20 53  "GetBlob", new S
4880: 51 4c 69 74 65 52 65 61 64 42 6c 6f 62 45 76 65  QLiteReadBlobEve
4890: 6e 74 41 72 67 73 28 72 65 61 64 4f 6e 6c 79 29  ntArgs(readOnly)
48a0: 2c 20 76 61 6c 75 65 29 2c 0d 0a 20 20 20 20 20  , value),..     
48b0: 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 20 63             out c
48c0: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
48d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
48e0: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
48f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
4900: 53 51 4c 69 74 65 42 6c 6f 62 29 76 61 6c 75 65  SQLiteBlob)value
4910: 2e 42 6c 6f 62 56 61 6c 75 65 3b 0d 0a 20 20 20  .BlobValue;..   
4920: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4930: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
4940: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
4950: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
4960: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
4970: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
4980: 79 49 6e 66 6f 2e 47 65 74 42 6c 6f 62 28 69 20  yInfo.GetBlob(i 
4990: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
49a0: 46 69 65 6c 64 43 6f 75 6e 74 2c 20 72 65 61 64  FieldCount, read
49b0: 4f 6e 6c 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Only);....      
49c0: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42    return SQLiteB
49d0: 6c 6f 62 2e 43 72 65 61 74 65 28 74 68 69 73 2c  lob.Create(this,
49e0: 20 69 2c 20 72 65 61 64 4f 6e 6c 79 29 3b 0d 0a   i, readOnly);..
49f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
4a00: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
4a10: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
4a20: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 62 6f  e column as a bo
4a30: 6f 6c 65 61 6e 20 76 61 6c 75 65 0d 0a 20 20 20  olean value..   
4a40: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
4a50: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
4a60: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
4a70: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
4a80: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
4a90: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62 6f 6f 6c  // <returns>bool
4aa0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4ab0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
4ac0: 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65 61 6e 28  bool GetBoolean(
4ad0: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
4ae0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
4af0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
4b00: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
4b10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
4b20: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
4b30: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
4b40: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
4b50: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
4b60: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
4b70: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
4b80: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
4b90: 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20  Callbacks)..    
4ba0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4bb0: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
4bc0: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
4bd0: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
4be0: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
4bf0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
4c00: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
4c10: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
4c20: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
4c30: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
4c40: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
4c50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4c60: 20 20 20 22 47 65 74 42 6f 6f 6c 65 61 6e 22 2c     "GetBoolean",
4c70: 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f   null, value), o
4c80: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
4c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4ca0: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
4cb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4cc0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
4cd0: 61 6c 75 65 2e 42 6f 6f 6c 65 61 6e 56 61 6c 75  alue.BooleanValu
4ce0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d00: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
4d10: 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69  Exception("missi
4d20: 6e 67 20 62 6f 6f 6c 65 61 6e 20 72 65 74 75 72  ng boolean retur
4d30: 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20  n value");....  
4d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4d50: 74 75 72 6e 20 28 62 6f 6f 6c 29 76 61 6c 75 65  turn (bool)value
4d60: 2e 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 3b 0d 0a  .BooleanValue;..
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4d80: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4d90: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
4da0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
4db0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
4dc0: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
4dd0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
4de0: 6b 65 79 49 6e 66 6f 2e 47 65 74 42 6f 6f 6c 65  keyInfo.GetBoole
4df0: 61 6e 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  an(i - PrivateVi
4e00: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
4e10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ;....        Ver
4e20: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
4e30: 65 2e 42 6f 6f 6c 65 61 6e 29 3b 0d 0a 20 20 20  e.Boolean);..   
4e40: 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
4e50: 65 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28 47 65  ert.ToBoolean(Ge
4e60: 74 56 61 6c 75 65 28 69 29 2c 20 43 75 6c 74 75  tValue(i), Cultu
4e70: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
4e80: 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lture);..    }..
4e90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
4ea0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
4eb0: 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d  rieves the colum
4ec0: 6e 20 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79  n as a single by
4ed0: 74 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f  te value..    //
4ee0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
4ef0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4f00: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
4f10: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
4f20: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
4f30: 3c 72 65 74 75 72 6e 73 3e 62 79 74 65 3c 2f 72  <returns>byte</r
4f40: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
4f50: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 79 74  lic override byt
4f60: 65 20 47 65 74 42 79 74 65 28 69 6e 74 20 69 29  e GetByte(int i)
4f70: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4f80: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
4f90: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
4fa0: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
4fb0: 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
4fc0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
4fd0: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
4fe0: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
4ff0: 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51  Callbacks) == SQ
5000: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
5010: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
5020: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
5030: 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  cks)..        {.
5040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
5050: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
5060: 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53  ue value = new S
5070: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
5080: 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  alue();..       
5090: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65       bool comple
50a0: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
50b0: 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c     InvokeReadVal
50c0: 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65  ueCallback(i, ne
50d0: 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75  w SQLiteReadValu
50e0: 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  eEventArgs(..   
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
5100: 74 42 79 74 65 22 2c 20 6e 75 6c 6c 2c 20 76 61  tByte", null, va
5110: 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65  lue), out comple
5120: 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
5130: 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65      if (complete
5140: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5160: 20 20 69 66 20 28 76 61 6c 75 65 2e 42 79 74 65    if (value.Byte
5170: 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Value == null)..
5180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5190: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
51a0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d  LiteException("m
51b0: 69 73 73 69 6e 67 20 62 79 74 65 20 72 65 74 75  issing byte retu
51c0: 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  rn value");.... 
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
51e0: 65 74 75 72 6e 20 28 62 79 74 65 29 76 61 6c 75  eturn (byte)valu
51f0: 65 2e 42 79 74 65 56 61 6c 75 65 3b 0d 0a 20 20  e.ByteValue;..  
5200: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5210: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5220: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
5230: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
5240: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
5250: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
5260: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
5270: 79 49 6e 66 6f 2e 47 65 74 42 79 74 65 28 69 20  yInfo.GetByte(i 
5280: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
5290: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
52a0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79          VerifyTy
52b0: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42 79 74  pe(i, DbType.Byt
52c0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
52d0: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
52e0: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74  ment._sql.GetByt
52f0: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
5300: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
5310: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5320: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
5330: 72 69 65 76 65 73 20 61 20 63 6f 6c 75 6d 6e 20  rieves a column 
5340: 61 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20 62  as an array of b
5350: 79 74 65 73 20 28 62 6c 6f 62 29 0d 0a 20 20 20  ytes (blob)..   
5360: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
5380: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
5390: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
53a0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
53b0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
53c0: 66 69 65 6c 64 4f 66 66 73 65 74 22 3e 54 68 65  fieldOffset">The
53d0: 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65   zero-based inde
53e0: 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65  x of where to be
53f0: 67 69 6e 20 72 65 61 64 69 6e 67 20 74 68 65 20  gin reading the 
5400: 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  data</param>..  
5410: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5420: 65 3d 22 62 75 66 66 65 72 22 3e 54 68 65 20 62  e="buffer">The b
5430: 75 66 66 65 72 20 74 6f 20 77 72 69 74 65 20 74  uffer to write t
5440: 68 65 20 62 79 74 65 73 20 69 6e 74 6f 3c 2f 70  he bytes into</p
5450: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5460: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66  param name="buff
5470: 65 72 6f 66 66 73 65 74 22 3e 54 68 65 20 7a 65  eroffset">The ze
5480: 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f  ro-based index o
5490: 66 20 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e  f where to begin
54a0: 20 77 72 69 74 69 6e 67 20 69 6e 74 6f 20 74 68   writing into th
54b0: 65 20 61 72 72 61 79 3c 2f 70 61 72 61 6d 3e 0d  e array</param>.
54c0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
54d0: 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 54 68  name="length">Th
54e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
54f0: 73 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  s to retrieve</p
5500: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5510: 72 65 74 75 72 6e 73 3e 54 68 65 20 61 63 74 75  returns>The actu
5520: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
5530: 65 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  es written into 
5540: 74 68 65 20 61 72 72 61 79 3c 2f 72 65 74 75 72  the array</retur
5550: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ns>..    /// <re
5560: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
5570: 54 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  To determine the
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
5590: 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20   in the column, 
55a0: 70 61 73 73 20 61 20 6e 75 6c 6c 20 76 61 6c 75  pass a null valu
55b0: 65 20 66 6f 72 20 74 68 65 20 62 75 66 66 65 72  e for the buffer
55c0: 2e 20 20 54 68 65 20 74 6f 74 61 6c 20 6c 65 6e  .  The total len
55d0: 67 74 68 20 77 69 6c 6c 20 62 65 20 72 65 74 75  gth will be retu
55e0: 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  rned...    /// <
55f0: 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 70  /remarks>..    p
5600: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6c  ublic override l
5610: 6f 6e 67 20 47 65 74 42 79 74 65 73 28 69 6e 74  ong GetBytes(int
5620: 20 69 2c 20 6c 6f 6e 67 20 66 69 65 6c 64 4f 66   i, long fieldOf
5630: 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 75 66  fset, byte[] buf
5640: 66 65 72 2c 20 69 6e 74 20 62 75 66 66 65 72 6f  fer, int buffero
5650: 66 66 73 65 74 2c 20 69 6e 74 20 6c 65 6e 67 74  ffset, int lengt
5660: 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  h)..    {..     
5670: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
5680: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
5690: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
56a0: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
56b0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
56c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
56d0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
56e0: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
56f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5700: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
5710: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
5720: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
5730: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
5740: 51 4c 69 74 65 52 65 61 64 41 72 72 61 79 45 76  QLiteReadArrayEv
5750: 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41 72 67  entArgs eventArg
5760: 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 52 65  s = new SQLiteRe
5770: 61 64 41 72 72 61 79 45 76 65 6e 74 41 72 67 73  adArrayEventArgs
5780: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5790: 20 20 20 66 69 65 6c 64 4f 66 66 73 65 74 2c 20     fieldOffset, 
57a0: 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66  buffer, bufferof
57b0: 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  fset, length);..
57c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
57d0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
57e0: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
57f0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
5800: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
5810: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
5820: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
5830: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
5840: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
5850: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
5860: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
5870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
5880: 65 74 42 79 74 65 73 22 2c 20 65 76 65 6e 74 41  etBytes", eventA
5890: 72 67 73 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74  rgs, value), out
58a0: 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20   complete);.... 
58b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
58c0: 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20  omplete)..      
58d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
58e0: 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
58f0: 62 79 74 65 73 20 3d 20 76 61 6c 75 65 2e 42 79  bytes = value.By
5900: 74 65 73 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  tesValue;....   
5910: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
5920: 28 62 79 74 65 73 20 21 3d 20 6e 75 6c 6c 29 0d  (bytes != null).
5930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5940: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
5950: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
5960: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
5970: 20 20 20 20 20 20 20 20 41 72 72 61 79 2e 43 6f          Array.Co
5980: 70 79 28 62 79 74 65 73 2c 20 2f 2a 20 74 68 72  py(bytes, /* thr
5990: 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
59b0: 76 65 6e 74 41 72 67 73 2e 44 61 74 61 4f 66 66  ventArgs.DataOff
59c0: 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 42  set, eventArgs.B
59d0: 79 74 65 42 75 66 66 65 72 2c 0d 0a 20 20 20 20  yteBuffer,..    
59e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59f0: 20 20 20 20 65 76 65 6e 74 41 72 67 73 2e 42 75      eventArgs.Bu
5a00: 66 66 65 72 4f 66 66 73 65 74 2c 20 65 76 65 6e  fferOffset, even
5a10: 74 41 72 67 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  tArgs.Length);..
5a20: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
5a30: 20 20 20 20 20 20 20 20 20 20 20 41 72 72 61 79             Array
5a40: 2e 43 6f 70 79 28 62 79 74 65 73 2c 20 2f 2a 20  .Copy(bytes, /* 
5a50: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a70: 20 20 28 69 6e 74 29 65 76 65 6e 74 41 72 67 73    (int)eventArgs
5a80: 2e 44 61 74 61 4f 66 66 73 65 74 2c 20 65 76 65  .DataOffset, eve
5a90: 6e 74 41 72 67 73 2e 42 79 74 65 42 75 66 66 65  ntArgs.ByteBuffe
5aa0: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 65 76 65 6e              even
5ac0: 74 41 72 67 73 2e 42 75 66 66 65 72 4f 66 66 73  tArgs.BufferOffs
5ad0: 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 4c 65  et, eventArgs.Le
5ae0: 6e 67 74 68 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ngth);..#endif..
5af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 65 76 65        return eve
5b10: 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a  ntArgs.Length;..
5b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b30: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
5b40: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
5b50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b70: 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20  return -1;..    
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5b90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5ba0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5bb0: 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76     if (i >= Priv
5bc0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
5bd0: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
5be0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
5bf0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
5c00: 65 79 49 6e 66 6f 2e 47 65 74 42 79 74 65 73 28  eyInfo.GetBytes(
5c10: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
5c20: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20 66 69  leFieldCount, fi
5c30: 65 6c 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65  eldOffset, buffe
5c40: 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c  r, bufferoffset,
5c50: 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20   length);....   
5c60: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
5c70: 69 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79  i, DbType.Binary
5c80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
5c90: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
5ca0: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65  ent._sql.GetByte
5cb0: 73 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  s(_activeStateme
5cc0: 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69 65 6c  nt, i, (int)fiel
5cd0: 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c  dOffset, buffer,
5ce0: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c   bufferoffset, l
5cf0: 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ength);..    }..
5d00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5d10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
5d20: 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  urns the column 
5d30: 61 73 20 61 20 73 69 6e 67 6c 65 20 63 68 61 72  as a single char
5d40: 61 63 74 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c  acter..    /// <
5d50: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
5d60: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5d70: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
5d80: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
5d90: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
5da0: 74 75 72 6e 73 3e 63 68 61 72 3c 2f 72 65 74 75  turns>char</retu
5db0: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
5dc0: 20 6f 76 65 72 72 69 64 65 20 63 68 61 72 20 47   override char G
5dd0: 65 74 43 68 61 72 28 69 6e 74 20 69 29 0d 0a 20  etChar(int i).. 
5de0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
5df0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
5e00: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
5e10: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
5e20: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
5e30: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5e40: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
5e50: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
5e60: 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74  lbacks) == SQLit
5e70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5e80: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
5e90: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
5ea0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
5eb0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
5ec0: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
5ed0: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
5ee0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
5ef0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
5f00: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
5f10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5f20: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
5f30: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
5f40: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
5f50: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
5f60: 20 20 20 20 20 20 20 20 20 20 22 47 65 74 43 68            "GetCh
5f70: 61 72 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65  ar", null, value
5f80: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
5f90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5fa0: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
5fb0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5fd0: 66 20 28 76 61 6c 75 65 2e 43 68 61 72 56 61 6c  f (value.CharVal
5fe0: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6000: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
6010: 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73  eException("miss
6020: 69 6e 67 20 63 68 61 72 61 63 74 65 72 20 72 65  ing character re
6030: 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d  turn value");...
6040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6050: 20 72 65 74 75 72 6e 20 28 63 68 61 72 29 76 61   return (char)va
6060: 6c 75 65 2e 43 68 61 72 56 61 6c 75 65 3b 0d 0a  lue.CharValue;..
6070: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6080: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6090: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
60a0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
60b0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
60c0: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
60d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
60e0: 6b 65 79 49 6e 66 6f 2e 47 65 74 43 68 61 72 28  keyInfo.GetChar(
60f0: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
6100: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
6110: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
6120: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53  Type(i, DbType.S
6130: 42 79 74 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Byte);..        
6140: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
6150: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
6160: 43 68 61 72 28 5f 61 63 74 69 76 65 53 74 61 74  Char(_activeStat
6170: 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20  ement, i);..    
6180: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
6190: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
61a0: 52 65 74 72 69 65 76 65 73 20 61 20 63 6f 6c 75  Retrieves a colu
61b0: 6d 6e 20 61 73 20 61 6e 20 61 72 72 61 79 20 6f  mn as an array o
61c0: 66 20 63 68 61 72 73 20 28 62 6c 6f 62 29 0d 0a  f chars (blob)..
61d0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
61e0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
61f0: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
6200: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
6210: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
6220: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
6230: 65 3d 22 66 69 65 6c 64 6f 66 66 73 65 74 22 3e  e="fieldoffset">
6240: 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69  The zero-based i
6250: 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f  ndex of where to
6260: 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67 20 74   begin reading t
6270: 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0d  he data</param>.
6280: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
6290: 6e 61 6d 65 3d 22 62 75 66 66 65 72 22 3e 54 68  name="buffer">Th
62a0: 65 20 62 75 66 66 65 72 20 74 6f 20 77 72 69 74  e buffer to writ
62b0: 65 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73  e the characters
62c0: 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e 0d 0a 20   into</param>.. 
62d0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
62e0: 6d 65 3d 22 62 75 66 66 65 72 6f 66 66 73 65 74  me="bufferoffset
62f0: 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  ">The zero-based
6300: 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20   index of where 
6310: 74 6f 20 62 65 67 69 6e 20 77 72 69 74 69 6e 67  to begin writing
6320: 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c   into the array<
6330: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
6340: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65   <param name="le
6350: 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d 62 65 72  ngth">The number
6360: 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72 65 74   of bytes to ret
6370: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rieve</param>.. 
6380: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
6390: 54 68 65 20 61 63 74 75 61 6c 20 6e 75 6d 62 65  The actual numbe
63a0: 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
63b0: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 74 68 65  written into the
63c0: 20 61 72 72 61 79 3c 2f 72 65 74 75 72 6e 73 3e   array</returns>
63d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72  ..    /// <remar
63e0: 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 6f 20  ks>..    /// To 
63f0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
6400: 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
6410: 72 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  rs in the column
6420: 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c 20 76 61  , pass a null va
6430: 6c 75 65 20 66 6f 72 20 74 68 65 20 62 75 66 66  lue for the buff
6440: 65 72 2e 20 20 54 68 65 20 74 6f 74 61 6c 20 6c  er.  The total l
6450: 65 6e 67 74 68 20 77 69 6c 6c 20 62 65 20 72 65  ength will be re
6460: 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  turned...    ///
6470: 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20   </remarks>..   
6480: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
6490: 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 69   long GetChars(i
64a0: 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65 6c 64  nt i, long field
64b0: 6f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62  offset, char[] b
64c0: 75 66 66 65 72 2c 20 69 6e 74 20 62 75 66 66 65  uffer, int buffe
64d0: 72 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c 65 6e  roffset, int len
64e0: 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
64f0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6500: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
6510: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
6520: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
6530: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
6540: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
6550: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
6560: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
6570: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
6580: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
6590: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
65a0: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
65b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
65c0: 20 53 51 4c 69 74 65 52 65 61 64 41 72 72 61 79   SQLiteReadArray
65d0: 45 76 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41  EventArgs eventA
65e0: 72 67 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  rgs = new SQLite
65f0: 52 65 61 64 41 72 72 61 79 45 76 65 6e 74 41 72  ReadArrayEventAr
6600: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
6610: 20 20 20 20 20 66 69 65 6c 64 6f 66 66 73 65 74       fieldoffset
6620: 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72  , buffer, buffer
6630: 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b  offset, length);
6640: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6650: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
6660: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
6670: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
6680: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
6690: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
66a0: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
66b0: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
66c0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
66d0: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
66e0: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6700: 22 47 65 74 43 68 61 72 73 22 2c 20 65 76 65 6e  "GetChars", even
6710: 74 41 72 67 73 2c 20 76 61 6c 75 65 29 2c 20 6f  tArgs, value), o
6720: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
6730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
6740: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
6750: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6760: 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 5b             char[
6770: 5d 20 63 68 61 72 73 20 3d 20 76 61 6c 75 65 2e  ] chars = value.
6780: 43 68 61 72 73 56 61 6c 75 65 3b 0d 0a 0d 0a 20  CharsValue;.... 
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
67a0: 66 20 28 63 68 61 72 73 20 21 3d 20 6e 75 6c 6c  f (chars != null
67b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
67c0: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
67d0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
67e0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
67f0: 20 20 20 20 20 20 20 20 20 20 41 72 72 61 79 2e            Array.
6800: 43 6f 70 79 28 63 68 61 72 73 2c 20 2f 2a 20 74  Copy(chars, /* t
6810: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6830: 20 65 76 65 6e 74 41 72 67 73 2e 44 61 74 61 4f   eventArgs.DataO
6840: 66 66 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73  ffset, eventArgs
6850: 2e 43 68 61 72 42 75 66 66 65 72 2c 0d 0a 20 20  .CharBuffer,..  
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6870: 20 20 20 20 20 20 65 76 65 6e 74 41 72 67 73 2e        eventArgs.
6880: 42 75 66 66 65 72 4f 66 66 73 65 74 2c 20 65 76  BufferOffset, ev
6890: 65 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 29 3b  entArgs.Length);
68a0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 72 72               Arr
68c0: 61 79 2e 43 6f 70 79 28 63 68 61 72 73 2c 20 2f  ay.Copy(chars, /
68d0: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
68e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68f0: 20 20 20 20 28 69 6e 74 29 65 76 65 6e 74 41 72      (int)eventAr
6900: 67 73 2e 44 61 74 61 4f 66 66 73 65 74 2c 20 65  gs.DataOffset, e
6910: 76 65 6e 74 41 72 67 73 2e 43 68 61 72 42 75 66  ventArgs.CharBuf
6920: 66 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fer,..          
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76                ev
6940: 65 6e 74 41 72 67 73 2e 42 75 66 66 65 72 4f 66  entArgs.BufferOf
6950: 66 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e  fset, eventArgs.
6960: 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6e 64 69 66  Length);..#endif
6970: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6980: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 65          return e
6990: 76 65 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 3b  ventArgs.Length;
69a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
69b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
69c0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
69d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
69e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69f0: 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20    return -1;..  
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6a20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6a30: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
6a40: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
6a50: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
6a60: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
6a70: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6a80: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 43 68 61 72  _keyInfo.GetChar
6a90: 73 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  s(i - PrivateVis
6aa0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20  ibleFieldCount, 
6ab0: 66 69 65 6c 64 6f 66 66 73 65 74 2c 20 62 75 66  fieldoffset, buf
6ac0: 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65  fer, bufferoffse
6ad0: 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20  t, length);.... 
6ae0: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
6af0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
6b00: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72  ctionFlags.NoVer
6b10: 69 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29  ifyTextAffinity)
6b20: 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   != SQLiteConnec
6b30: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69  tionFlags.NoVeri
6b40: 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29 0d  fyTextAffinity).
6b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
6b60: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
6b70: 65 2e 53 74 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20  e.String);....  
6b80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
6b90: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
6ba0: 71 6c 2e 47 65 74 43 68 61 72 73 28 5f 61 63 74  ql.GetChars(_act
6bb0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c  iveStatement, i,
6bc0: 20 28 69 6e 74 29 66 69 65 6c 64 6f 66 66 73 65   (int)fieldoffse
6bd0: 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65  t, buffer, buffe
6be0: 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29  roffset, length)
6bf0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6c00: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6c10: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
6c20: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
6c30: 20 62 61 63 6b 2d 65 6e 64 20 64 61 74 61 74 79   back-end dataty
6c40: 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  pe of the column
6c50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6c60: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
6c70: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
6c80: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
6c90: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
6ca0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
6cb0: 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73  >string</returns
6cc0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
6cd0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
6ce0: 74 44 61 74 61 54 79 70 65 4e 61 6d 65 28 69 6e  tDataTypeName(in
6cf0: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
6d00: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6d10: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6d20: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
6d30: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
6d40: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
6d50: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6d60: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
6d70: 49 6e 66 6f 2e 47 65 74 44 61 74 61 54 79 70 65  Info.GetDataType
6d80: 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65  Name(i - Private
6d90: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
6da0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54  t);....        T
6db0: 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66 69  ypeAffinity affi
6dc0: 6e 20 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79  n = TypeAffinity
6dd0: 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3b 0d  .Uninitialized;.
6de0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6df0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
6e00: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65  ._sql.ColumnType
6e10: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
6e20: 74 2c 20 69 2c 20 72 65 66 20 61 66 66 69 6e 29  t, i, ref affin)
6e30: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6e40: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6e50: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 20     /// Retrieve 
6e60: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
6e70: 64 61 74 65 2f 74 69 6d 65 20 76 61 6c 75 65 0d  date/time value.
6e80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
6e90: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
6ea0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
6eb0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
6ec0: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
6ed0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
6ee0: 44 61 74 65 54 69 6d 65 3c 2f 72 65 74 75 72 6e  DateTime</return
6ef0: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
6f00: 76 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65  verride DateTime
6f10: 20 47 65 74 44 61 74 65 54 69 6d 65 28 69 6e 74   GetDateTime(int
6f20: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
6f30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6f40: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
6f50: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
6f60: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
6f70: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
6f80: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
6f90: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
6fa0: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
6fb0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6fc0: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
6fd0: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
6fe0: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
6ff0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7000: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
7010: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
7020: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
7030: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
7040: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
7050: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
7060: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
7070: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
7080: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
7090: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70b0: 22 47 65 74 44 61 74 65 54 69 6d 65 22 2c 20 6e  "GetDateTime", n
70c0: 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74  ull, value), out
70d0: 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20   complete);.... 
70e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
70f0: 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20  omplete)..      
7100: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7110: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
7120: 75 65 2e 44 61 74 65 54 69 6d 65 56 61 6c 75 65  ue.DateTimeValue
7130: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
7140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
7150: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7160: 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e  xception("missin
7170: 67 20 64 61 74 65 2f 74 69 6d 65 20 72 65 74 75  g date/time retu
7180: 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  rn value");.... 
7190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
71a0: 65 74 75 72 6e 20 28 44 61 74 65 54 69 6d 65 29  eturn (DateTime)
71b0: 76 61 6c 75 65 2e 44 61 74 65 54 69 6d 65 56 61  value.DateTimeVa
71c0: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
71d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
71e0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
71f0: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
7200: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
7210: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
7220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
7230: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
7240: 74 44 61 74 65 54 69 6d 65 28 69 20 2d 20 50 72  tDateTime(i - Pr
7250: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
7260: 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
7270: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
7280: 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d  , DbType.DateTim
7290: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
72a0: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
72b0: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 61 74  ment._sql.GetDat
72c0: 65 54 69 6d 65 28 5f 61 63 74 69 76 65 53 74 61  eTime(_activeSta
72d0: 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20  tement, i);..   
72e0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
72f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7300: 20 52 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   Retrieve the co
7310: 6c 75 6d 6e 20 61 73 20 61 20 64 65 63 69 6d 61  lumn as a decima
7320: 6c 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f  l value..    ///
7330: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
7340: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
7350: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
7360: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
7370: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
7380: 72 65 74 75 72 6e 73 3e 64 65 63 69 6d 61 6c 3c  returns>decimal<
7390: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
73a0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64  ublic override d
73b0: 65 63 69 6d 61 6c 20 47 65 74 44 65 63 69 6d 61  ecimal GetDecima
73c0: 6c 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  l(int i)..    {.
73d0: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
73e0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
73f0: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
7400: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
7410: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
7420: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7430: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
7440: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
7450: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
7460: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
7470: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
7480: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
7490: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
74a0: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
74b0: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
74c0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
74d0: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
74e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
74f0: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
7500: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
7510: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
7520: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
7530: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
7540: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
7550: 20 20 20 20 20 22 47 65 74 44 65 63 69 6d 61 6c       "GetDecimal
7560: 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c  ", null, value),
7570: 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d   out complete);.
7580: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
7590: 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20  f (complete)..  
75a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
75b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
75c0: 28 76 61 6c 75 65 2e 44 65 63 69 6d 61 6c 56 61  (value.DecimalVa
75d0: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75f0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
7600: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73  teException("mis
7610: 73 69 6e 67 20 64 65 63 69 6d 61 6c 20 72 65 74  sing decimal ret
7620: 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a  urn value");....
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7640: 72 65 74 75 72 6e 20 28 64 65 63 69 6d 61 6c 29  return (decimal)
7650: 76 61 6c 75 65 2e 44 65 63 69 6d 61 6c 56 61 6c  value.DecimalVal
7660: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
7670: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
7680: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
7690: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
76a0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
76b0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
76c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
76d0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
76e0: 44 65 63 69 6d 61 6c 28 69 20 2d 20 50 72 69 76  Decimal(i - Priv
76f0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
7700: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
7710: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
7720: 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 3b  DbType.Decimal);
7730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 43 75 6c 74  ....        Cult
7740: 75 72 65 49 6e 66 6f 20 63 75 6c 74 75 72 65 49  ureInfo cultureI
7750: 6e 66 6f 20 3d 20 43 75 6c 74 75 72 65 49 6e 66  nfo = CultureInf
7760: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
7770: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
7780: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
7790: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
77a0: 2e 47 65 74 49 6e 76 61 72 69 61 6e 74 44 65 63  .GetInvariantDec
77b0: 69 6d 61 6c 29 20 3d 3d 20 53 51 4c 69 74 65 43  imal) == SQLiteC
77c0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47  onnectionFlags.G
77d0: 65 74 49 6e 76 61 72 69 61 6e 74 44 65 63 69 6d  etInvariantDecim
77e0: 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  al)..           
77f0: 20 63 75 6c 74 75 72 65 49 6e 66 6f 20 3d 20 43   cultureInfo = C
7800: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
7810: 69 61 6e 74 43 75 6c 74 75 72 65 3b 0d 0a 0d 0a  iantCulture;....
7820: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
7830: 65 63 69 6d 61 6c 2e 50 61 72 73 65 28 5f 61 63  ecimal.Parse(_ac
7840: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
7850: 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69  ql.GetText(_acti
7860: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 2c  veStatement, i),
7870: 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c   NumberStyles.Al
7880: 6c 6f 77 44 65 63 69 6d 61 6c 50 6f 69 6e 74 20  lowDecimalPoint 
7890: 7c 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41  | NumberStyles.A
78a0: 6c 6c 6f 77 45 78 70 6f 6e 65 6e 74 20 7c 20 4e  llowExponent | N
78b0: 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f  umberStyles.Allo
78c0: 77 4c 65 61 64 69 6e 67 53 69 67 6e 2c 20 63 75  wLeadingSign, cu
78d0: 6c 74 75 72 65 49 6e 66 6f 29 3b 0d 0a 20 20 20  ltureInfo);..   
78e0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
78f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7900: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
7910: 75 6d 6e 20 61 73 20 61 20 64 6f 75 62 6c 65 0d  umn as a double.
7920: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
7930: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
7940: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
7950: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
7960: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
7970: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
7980: 64 6f 75 62 6c 65 3c 2f 72 65 74 75 72 6e 73 3e  double</returns>
7990: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
79a0: 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74  rride double Get
79b0: 44 6f 75 62 6c 65 28 69 6e 74 20 69 29 0d 0a 20  Double(int i).. 
79c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
79d0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
79e0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
79f0: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
7a00: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
7a10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7a20: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
7a30: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
7a40: 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74  lbacks) == SQLit
7a50: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7a60: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
7a70: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
7a80: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7a90: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
7aa0: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
7ab0: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
7ac0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
7ad0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
7ae0: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
7af0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7b00: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
7b10: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
7b20: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
7b30: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
7b40: 20 20 20 20 20 20 20 20 20 20 22 47 65 74 44 6f            "GetDo
7b50: 75 62 6c 65 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c  uble", null, val
7b60: 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74  ue), out complet
7b70: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
7b80: 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29     if (complete)
7b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
7ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7bb0: 20 69 66 20 28 76 61 6c 75 65 2e 44 6f 75 62 6c   if (value.Doubl
7bc0: 65 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  eValue == null).
7bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7be0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
7bf0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
7c00: 6d 69 73 73 69 6e 67 20 64 6f 75 62 6c 65 20 72  missing double r
7c10: 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a  eturn value");..
7c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7c30: 20 20 72 65 74 75 72 6e 20 28 64 6f 75 62 6c 65    return (double
7c40: 29 76 61 6c 75 65 2e 44 6f 75 62 6c 65 56 61 6c  )value.DoubleVal
7c50: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
7c60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
7c70: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
7c80: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
7c90: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
7ca0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
7cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7cc0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
7cd0: 44 6f 75 62 6c 65 28 69 20 2d 20 50 72 69 76 61  Double(i - Priva
7ce0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
7cf0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
7d00: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
7d10: 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b 0d 0a  bType.Double);..
7d20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
7d30: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
7d40: 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f  _sql.GetDouble(_
7d50: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
7d60: 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   i);..    }.... 
7d70: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
7d80: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
7d90: 73 20 74 68 65 20 2e 4e 45 54 20 74 79 70 65 20  s the .NET type 
7da0: 6f 66 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d  of a given colum
7db0: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  n..    /// </sum
7dc0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
7dd0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
7de0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
7df0: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
7e00: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
7e10: 73 3e 54 79 70 65 3c 2f 72 65 74 75 72 6e 73 3e  s>Type</returns>
7e20: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
7e30: 72 72 69 64 65 20 54 79 70 65 20 47 65 74 46 69  rride Type GetFi
7e40: 65 6c 64 54 79 70 65 28 69 6e 74 20 69 29 0d 0a  eldType(int i)..
7e50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
7e60: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
7e70: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
7e80: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
7e90: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
7ea0: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
7eb0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
7ec0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
7ed0: 65 74 46 69 65 6c 64 54 79 70 65 28 69 20 2d 20  etFieldType(i - 
7ee0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
7ef0: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
7f00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7f10: 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74  iteConvert.SQLit
7f20: 65 54 79 70 65 54 6f 54 79 70 65 28 47 65 74 53  eTypeToType(GetS
7f30: 51 4c 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73  QLiteType(_flags
7f40: 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  , i));..    }...
7f50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
7f60: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
7f70: 72 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20  rns a column as 
7f80: 61 20 66 6c 6f 61 74 20 76 61 6c 75 65 0d 0a 20  a float value.. 
7f90: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7fa0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
7fb0: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
7fc0: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
7fd0: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
7fe0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 66 6c   /// <returns>fl
7ff0: 6f 61 74 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  oat</returns>.. 
8000: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
8010: 64 65 20 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61  de float GetFloa
8020: 74 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  t(int i)..    {.
8030: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
8040: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
8050: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
8060: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
8070: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
8080: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8090: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
80a0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
80b0: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
80c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
80d0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
80e0: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
80f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8100: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
8110: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
8120: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
8130: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
8140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
8150: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
8160: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
8170: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
8180: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
8190: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
81a0: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
81b0: 20 20 20 20 20 22 47 65 74 46 6c 6f 61 74 22 2c       "GetFloat",
81c0: 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f   null, value), o
81d0: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
81e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
81f0: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
8200: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8210: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
8220: 61 6c 75 65 2e 46 6c 6f 61 74 56 61 6c 75 65 20  alue.FloatValue 
8230: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
8250: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8260: 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67  ception("missing
8270: 20 66 6c 6f 61 74 20 72 65 74 75 72 6e 20 76 61   float return va
8280: 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lue");....      
8290: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
82a0: 20 28 66 6c 6f 61 74 29 76 61 6c 75 65 2e 46 6c   (float)value.Fl
82b0: 6f 61 74 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  oatValue;..     
82c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
82d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
82e0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
82f0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
8300: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
8310: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8320: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
8330: 66 6f 2e 47 65 74 46 6c 6f 61 74 28 69 20 2d 20  fo.GetFloat(i - 
8340: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
8350: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
8360: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
8370: 28 69 2c 20 44 62 54 79 70 65 2e 53 69 6e 67 6c  (i, DbType.Singl
8380: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
8390: 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 53 69  urn Convert.ToSi
83a0: 6e 67 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74  ngle(_activeStat
83b0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f  ement._sql.GetDo
83c0: 75 62 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74  uble(_activeStat
83d0: 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20  ement, i));..   
83e0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
83f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
8400: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
8410: 75 6d 6e 20 61 73 20 61 20 47 75 69 64 0d 0a 20  umn as a Guid.. 
8420: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8430: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
8440: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
8450: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
8460: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
8470: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 47 75   /// <returns>Gu
8480: 69 64 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  id</returns>..  
8490: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
84a0: 65 20 47 75 69 64 20 47 65 74 47 75 69 64 28 69  e Guid GetGuid(i
84b0: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
84c0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
84d0: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
84e0: 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d  VerifyForGet();.
84f0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
8500: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
8510: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
8520: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
8530: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20  ValueCallbacks) 
8540: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8550: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
8560: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
8570: 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20  allbacks)..     
8580: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8590: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
85a0: 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20  erValue value = 
85b0: 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65  new SQLiteDataRe
85c0: 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20  aderValue();..  
85d0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
85e0: 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20  omplete;....    
85f0: 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65          InvokeRe
8600: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28  adValueCallback(
8610: 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61  i, new SQLiteRea
8620: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28  dValueEventArgs(
8630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8640: 20 20 22 47 65 74 47 75 69 64 22 2c 20 6e 75 6c    "GetGuid", nul
8650: 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63  l, value), out c
8660: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
8670: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
8680: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
8690: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
86a0: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
86b0: 2e 47 75 69 64 56 61 6c 75 65 20 3d 3d 20 6e 75  .GuidValue == nu
86c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
86d0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
86e0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
86f0: 6f 6e 28 22 6d 69 73 73 69 6e 67 20 67 75 69 64  on("missing guid
8700: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b   return value");
8710: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8720: 20 20 20 20 72 65 74 75 72 6e 20 28 47 75 69 64      return (Guid
8730: 29 76 61 6c 75 65 2e 47 75 69 64 56 61 6c 75 65  )value.GuidValue
8740: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8750: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
8760: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
8770: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
8780: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
8790: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
87a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
87b0: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 47 75  n _keyInfo.GetGu
87c0: 69 64 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  id(i - PrivateVi
87d0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
87e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70  ;....        Typ
87f0: 65 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e 69  eAffinity affini
8800: 74 79 20 3d 20 56 65 72 69 66 79 54 79 70 65 28  ty = VerifyType(
8810: 69 2c 20 44 62 54 79 70 65 2e 47 75 69 64 29 3b  i, DbType.Guid);
8820: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 66  ..        if (af
8830: 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66  finity == TypeAf
8840: 66 69 6e 69 74 79 2e 42 6c 6f 62 29 0d 0a 20 20  finity.Blob)..  
8850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8860: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 75 66 66       byte[] buff
8870: 65 72 20 3d 20 6e 65 77 20 62 79 74 65 5b 31 36  er = new byte[16
8880: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
8890: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
88a0: 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65 73 28 5f  ._sql.GetBytes(_
88b0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
88c0: 20 69 2c 20 30 2c 20 62 75 66 66 65 72 2c 20 30   i, 0, buffer, 0
88d0: 2c 20 31 36 29 3b 0d 0a 20 20 20 20 20 20 20 20  , 16);..        
88e0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47      return new G
88f0: 75 69 64 28 62 75 66 66 65 72 29 3b 0d 0a 20 20  uid(buffer);..  
8900: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8910: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
8920: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
8930: 69 64 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  id(_activeStatem
8940: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74  ent._sql.GetText
8950: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
8960: 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  t, i));..    }..
8970: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
8980: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
8990: 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  urns the column 
89a0: 61 73 20 61 20 73 68 6f 72 74 0d 0a 20 20 20 20  as a short..    
89b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
89c0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
89d0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
89e0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
89f0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
8a00: 2f 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74 31 36  / <returns>Int16
8a10: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
8a20: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
8a30: 49 6e 74 31 36 20 47 65 74 49 6e 74 31 36 28 69  Int16 GetInt16(i
8a40: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
8a50: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
8a60: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
8a70: 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d  VerifyForGet();.
8a80: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
8a90: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
8aa0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
8ab0: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
8ac0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20  ValueCallbacks) 
8ad0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8ae0: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
8af0: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
8b00: 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20  allbacks)..     
8b10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8b20: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
8b30: 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20  erValue value = 
8b40: 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65  new SQLiteDataRe
8b50: 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20  aderValue();..  
8b60: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
8b70: 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20  omplete;....    
8b80: 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65          InvokeRe
8b90: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28  adValueCallback(
8ba0: 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61  i, new SQLiteRea
8bb0: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28  dValueEventArgs(
8bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8bd0: 20 20 22 47 65 74 49 6e 74 31 36 22 2c 20 6e 75    "GetInt16", nu
8be0: 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20  ll, value), out 
8bf0: 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20  complete);....  
8c00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
8c10: 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20  mplete)..       
8c20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8c30: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
8c40: 65 2e 49 6e 74 31 36 56 61 6c 75 65 20 3d 3d 20  e.Int16Value == 
8c50: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8c60: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
8c70: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8c80: 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e  tion("missing in
8c90: 74 31 36 20 72 65 74 75 72 6e 20 76 61 6c 75 65  t16 return value
8ca0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
8cb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49         return (I
8cc0: 6e 74 31 36 29 76 61 6c 75 65 2e 49 6e 74 31 36  nt16)value.Int16
8cd0: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
8ce0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
8cf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
8d00: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
8d10: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
8d20: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
8d30: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8d40: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
8d50: 47 65 74 49 6e 74 31 36 28 69 20 2d 20 50 72 69  GetInt16(i - Pri
8d60: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
8d70: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
8d80: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
8d90: 20 44 62 54 79 70 65 2e 49 6e 74 31 36 29 3b 0d   DbType.Int16);.
8da0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8db0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
8dc0: 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 31 36 28 5f  ._sql.GetInt16(_
8dd0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
8de0: 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   i);..    }.... 
8df0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
8e00: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  ..    /// Retrie
8e10: 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  ves the column a
8e20: 73 20 61 6e 20 69 6e 74 0d 0a 20 20 20 20 2f 2f  s an int..    //
8e30: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
8e40: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
8e50: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
8e60: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
8e70: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
8e80: 3c 72 65 74 75 72 6e 73 3e 49 6e 74 33 32 3c 2f  <returns>Int32</
8e90: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
8ea0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e  blic override In
8eb0: 74 33 32 20 47 65 74 49 6e 74 33 32 28 69 6e 74  t32 GetInt32(int
8ec0: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
8ed0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
8ee0: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
8ef0: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
8f00: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
8f10: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
8f20: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
8f30: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
8f40: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
8f50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8f60: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
8f70: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
8f80: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
8f90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8fa0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
8fb0: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
8fc0: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
8fd0: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
8fe0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
8ff0: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
9000: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
9010: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
9020: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
9030: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9050: 22 47 65 74 49 6e 74 33 32 22 2c 20 6e 75 6c 6c  "GetInt32", null
9060: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
9070: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
9080: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
9090: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
90a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
90b0: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
90c0: 49 6e 74 33 32 56 61 6c 75 65 20 3d 3d 20 6e 75  Int32Value == nu
90d0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
90e0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
90f0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
9100: 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 33  on("missing int3
9110: 32 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29  2 return value")
9120: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9130: 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74       return (Int
9140: 33 32 29 76 61 6c 75 65 2e 49 6e 74 33 32 56 61  32)value.Int32Va
9150: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
9160: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
9170: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
9180: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
9190: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
91a0: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
91b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
91c0: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
91d0: 74 49 6e 74 33 32 28 69 20 2d 20 50 72 69 76 61  tInt32(i - Priva
91e0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
91f0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
9200: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
9210: 62 54 79 70 65 2e 49 6e 74 33 32 29 3b 0d 0a 20  bType.Int32);.. 
9220: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
9230: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
9240: 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63  sql.GetInt32(_ac
9250: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
9260: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9270: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
9280: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
9290: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
92a0: 61 20 6c 6f 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20  a long..    /// 
92b0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
92c0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
92d0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
92e0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
92f0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
9300: 65 74 75 72 6e 73 3e 49 6e 74 36 34 3c 2f 72 65  eturns>Int64</re
9310: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
9320: 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 36  ic override Int6
9330: 34 20 47 65 74 49 6e 74 36 34 28 69 6e 74 20 69  4 GetInt64(int i
9340: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9350: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9360: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
9370: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
9380: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
9390: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
93a0: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
93b0: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
93c0: 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53  eCallbacks) == S
93d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
93e0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
93f0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
9400: 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  acks)..        {
9410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
9420: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
9430: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
9440: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
9450: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
9460: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
9470: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
9480: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
9490: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
94a0: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
94b0: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
94d0: 65 74 49 6e 74 36 34 22 2c 20 6e 75 6c 6c 2c 20  etInt64", null, 
94e0: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
94f0: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
9500: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
9510: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
9520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9530: 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 49 6e      if (value.In
9540: 74 36 34 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  t64Value == null
9550: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9560: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
9570: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
9580: 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 36 34 20  ("missing int64 
9590: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
95a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
95b0: 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74 36 34     return (Int64
95c0: 29 76 61 6c 75 65 2e 49 6e 74 36 34 56 61 6c 75  )value.Int64Valu
95d0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
95e0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
95f0: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
9600: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
9610: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
9620: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
9630: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9640: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49  rn _keyInfo.GetI
9650: 6e 74 36 34 28 69 20 2d 20 50 72 69 76 61 74 65  nt64(i - Private
9660: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
9670: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56  t);....        V
9680: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
9690: 79 70 65 2e 49 6e 74 36 34 29 3b 0d 0a 20 20 20  ype.Int64);..   
96a0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
96b0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
96c0: 6c 2e 47 65 74 49 6e 74 36 34 28 5f 61 63 74 69  l.GetInt64(_acti
96d0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
96e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
96f0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
9700: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
9710: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
9720: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20  column..    /// 
9730: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9740: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
9750: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
9760: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
9770: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
9780: 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72  eturns>string</r
9790: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
97a0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
97b0: 69 6e 67 20 47 65 74 4e 61 6d 65 28 69 6e 74 20  ing GetName(int 
97c0: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
97d0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
97e0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
97f0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
9800: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
9810: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
9820: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
9830: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
9840: 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50  fo.GetName(i - P
9850: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
9860: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
9870: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
9880: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
9890: 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63  l.ColumnName(_ac
98a0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
98b0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
98c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
98d0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
98e0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
98f0: 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
9900: 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
9910: 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a  cified column...
9920: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
9930: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
9940: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
9950: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
9960: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
9970: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73    /// <returns>s
9980: 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d  tring</returns>.
9990: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69  .    public stri
99a0: 6e 67 20 47 65 74 44 61 74 61 62 61 73 65 4e 61  ng GetDatabaseNa
99b0: 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  me(int i)..    {
99c0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
99d0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
99e0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
99f0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
9a00: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
9a10: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
9a20: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9a30: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d   _keyInfo.GetNam
9a40: 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  e(i - PrivateVis
9a50: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
9a60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
9a70: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
9a80: 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 44  ent._sql.ColumnD
9a90: 61 74 61 62 61 73 65 4e 61 6d 65 28 5f 61 63 74  atabaseName(_act
9aa0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
9ab0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9ac0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
9ad0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
9ae0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
9af0: 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20  able associated 
9b00: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
9b10: 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20  ed column...    
9b20: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9b30: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
9b40: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
9b50: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
9b60: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
9b70: 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e  / <returns>strin
9b80: 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  g</returns>..   
9b90: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47   public string G
9ba0: 65 74 54 61 62 6c 65 4e 61 6d 65 28 69 6e 74 20  etTableName(int 
9bb0: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
9bc0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
9bd0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
9be0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
9bf0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
9c00: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
9c10: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
9c20: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
9c30: 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50  fo.GetName(i - P
9c40: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
9c50: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
9c60: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
9c70: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
9c80: 6c 2e 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d  l.ColumnTableNam
9c90: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
9ca0: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
9cb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
9cc0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
9cd0: 75 72 6e 73 20 74 68 65 20 6f 72 69 67 69 6e 61  urns the origina
9ce0: 6c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 70  l name of the sp
9cf0: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d  ecified column..
9d00: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
9d10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
9d20: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
9d30: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
9d40: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
9d50: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
9d60: 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e  string</returns>
9d70: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72  ..    public str
9d80: 69 6e 67 20 47 65 74 4f 72 69 67 69 6e 61 6c 4e  ing GetOriginalN
9d90: 61 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ame(int i)..    
9da0: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
9db0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
9dc0: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
9dd0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
9de0: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
9df0: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
9e00: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9e10: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61  n _keyInfo.GetNa
9e20: 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  me(i - PrivateVi
9e30: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
9e40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
9e50: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
9e60: 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
9e70: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 5f 61 63  OriginalName(_ac
9e80: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
9e90: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9ea0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
9eb0: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
9ec0: 73 20 74 68 65 20 69 20 6f 66 20 61 20 63 6f 6c  s the i of a col
9ed0: 75 6d 6e 2c 20 67 69 76 65 6e 20 69 74 73 20 6e  umn, given its n
9ee0: 61 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ame..    /// </s
9ef0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
9f00: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61   <param name="na
9f10: 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20  me">The name of 
9f20: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
9f30: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a  trieve</param>..
9f40: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
9f50: 3e 54 68 65 20 69 6e 74 20 69 20 6f 66 20 74 68  >The int i of th
9f60: 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
9f70: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
9f80: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 4f  verride int GetO
9f90: 72 64 69 6e 61 6c 28 73 74 72 69 6e 67 20 6e 61  rdinal(string na
9fa0: 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
9fb0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9fc0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
9fd0: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
9fe0: 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  ) SQLiteCommand.
9ff0: 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b  Check(_command);
a000: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ....      //..  
a010: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 72      // NOTE: Fir
a020: 73 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65  st, check if the
a030: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 63   column name cac
a040: 68 65 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  he has been init
a050: 69 61 6c 69 7a 65 64 20 79 65 74 2e 0d 0a 20 20  ialized yet...  
a060: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20      //       If 
a070: 6e 6f 74 2c 20 64 6f 20 69 74 20 6e 6f 77 2e 0d  not, do it now..
a080: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
a090: 20 69 66 20 28 5f 66 69 65 6c 64 49 6e 64 65 78   if (_fieldIndex
a0a0: 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
a0b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a0c0: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
a0d0: 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73  new Dictionary<s
a0e0: 74 72 69 6e 67 2c 20 69 6e 74 3e 28 0d 0a 20 20  tring, int>(..  
a0f0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
a100: 6e 67 43 6f 6d 70 61 72 65 72 2e 4f 72 64 69 6e  ngComparer.Ordin
a110: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a  alIgnoreCase);..
a120: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a130: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
a140: 54 45 3a 20 4e 65 78 74 2c 20 73 65 65 20 69 66  TE: Next, see if
a150: 20 74 68 65 20 69 6e 64 65 78 20 66 6f 72 20 74   the index for t
a160: 68 65 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c  he requested col
a170: 75 6d 6e 20 6e 61 6d 65 20 68 61 73 20 62 65 65  umn name has bee
a180: 6e 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  n..      //     
a190: 20 20 63 61 63 68 65 64 20 61 6c 72 65 61 64 79    cached already
a1a0: 2e 20 20 49 66 20 73 6f 2c 20 72 65 74 75 72 6e  .  If so, return
a1b0: 20 74 68 65 20 63 61 63 68 65 64 20 76 61 6c 75   the cached valu
a1c0: 65 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 0d 0a  e.  Otherwise,..
a1d0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
a1e0: 6f 6f 6b 75 70 20 74 68 65 20 76 61 6c 75 65 20  ookup the value 
a1f0: 61 6e 64 20 74 68 65 6e 20 63 61 63 68 65 20 74  and then cache t
a200: 68 65 20 72 65 73 75 6c 74 20 66 6f 72 20 66 75  he result for fu
a210: 74 75 72 65 20 75 73 65 2e 0d 0a 20 20 20 20 20  ture use...     
a220: 20 2f 2f 0d 0a 20 20 20 20 20 20 69 6e 74 20 72   //..      int r
a230: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 21  ;....      if (!
a240: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 2e 54 72  _fieldIndexes.Tr
a250: 79 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  yGetValue(name, 
a260: 6f 75 74 20 72 29 29 0d 0a 20 20 20 20 20 20 7b  out r))..      {
a270: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 20 3d 20  ..          r = 
a280: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
a290: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 49 6e 64 65  ._sql.ColumnInde
a2a0: 78 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  x(_activeStateme
a2b0: 6e 74 2c 20 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  nt, name);....  
a2c0: 20 20 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d          if (r ==
a2d0: 20 2d 31 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20   -1 && _keyInfo 
a2e0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
a2f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a300: 20 20 20 20 20 72 20 3d 20 5f 6b 65 79 49 6e 66       r = _keyInf
a310: 6f 2e 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d  o.GetOrdinal(nam
a320: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
a330: 20 20 20 69 66 20 28 72 20 3e 20 2d 31 29 20 72     if (r > -1) r
a340: 20 2b 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   += PrivateVisib
a350: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20  leFieldCount;.. 
a360: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
a370: 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 49 6e          _fieldIn
a380: 64 65 78 65 73 2e 41 64 64 28 6e 61 6d 65 2c 20  dexes.Add(name, 
a390: 72 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  r);..      }....
a3a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 3b 0d        return r;.
a3b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
a3c0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
a3d0: 20 2f 2f 2f 20 53 63 68 65 6d 61 20 69 6e 66 6f   /// Schema info
a3e0: 72 6d 61 74 69 6f 6e 20 69 6e 20 53 51 4c 69 74  rmation in SQLit
a3f0: 65 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 74  e is difficult t
a400: 6f 20 6d 61 70 20 69 6e 74 6f 20 2e 4e 45 54 20  o map into .NET 
a410: 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 73 6f 20  conventions, so 
a420: 61 20 6c 6f 74 20 6f 66 20 77 6f 72 6b 20 6d 75  a lot of work mu
a430: 73 74 20 62 65 20 64 6f 6e 65 0d 0a 20 20 20 20  st be done..    
a440: 2f 2f 2f 20 74 6f 20 67 61 74 68 65 72 20 74 68  /// to gather th
a450: 65 20 6e 65 63 65 73 73 61 72 79 20 69 6e 66 6f  e necessary info
a460: 72 6d 61 74 69 6f 6e 20 73 6f 20 69 74 20 63 61  rmation so it ca
a470: 6e 20 62 65 20 72 65 70 72 65 73 65 6e 74 65 64  n be represented
a480: 20 69 6e 20 61 6e 20 41 44 4f 2e 4e 45 54 20 6d   in an ADO.NET m
a490: 61 6e 6e 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  anner...    /// 
a4a0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
a4b0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
a4c0: 75 72 6e 73 20 61 20 44 61 74 61 54 61 62 6c 65  urns a DataTable
a4d0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
a4e0: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
a4f0: 6f 6e 20 66 6f 72 20 74 68 65 20 61 63 74 69 76  on for the activ
a500: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
a510: 6e 74 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nt being process
a520: 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ed.</returns>.. 
a530: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
a540: 64 65 20 44 61 74 61 54 61 62 6c 65 20 47 65 74  de DataTable Get
a550: 53 63 68 65 6d 61 54 61 62 6c 65 28 29 0d 0a 20  SchemaTable().. 
a560: 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63     {..      Chec
a570: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
a580: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 53 63      return GetSc
a590: 68 65 6d 61 54 61 62 6c 65 28 74 72 75 65 2c 20  hemaTable(true, 
a5a0: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  false);..    }..
a5b0: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
a5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a600: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
a610: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 43 6c   ColumnParent Cl
a620: 61 73 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ass..    private
a630: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43 6f   sealed class Co
a640: 6c 75 6d 6e 50 61 72 65 6e 74 20 3a 20 49 45 71  lumnParent : IEq
a650: 75 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 43  ualityComparer<C
a660: 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 0d 0a 20 20  olumnParent>..  
a670: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
a680: 67 69 6f 6e 20 50 75 62 6c 69 63 20 46 69 65 6c  gion Public Fiel
a690: 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ds..        publ
a6a0: 69 63 20 73 74 72 69 6e 67 20 44 61 74 61 62 61  ic string Databa
a6b0: 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  seName;..       
a6c0: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54   public string T
a6d0: 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  ableName;..     
a6e0: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
a6f0: 20 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20   ColumnName;..  
a700: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
a710: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a760: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
a770: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
a780: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
a790: 20 20 20 20 70 75 62 6c 69 63 20 43 6f 6c 75 6d      public Colum
a7a0: 6e 50 61 72 65 6e 74 28 29 0d 0a 20 20 20 20 20  nParent()..     
a7b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a7c0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
a7d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
a7e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a830: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
a840: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 0d 0a   ColumnParent(..
a850: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
a860: 6e 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65 2c  ng databaseName,
a870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
a880: 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 2c 0d  ring tableName,.
a890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
a8a0: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 0d 0a  ing columnName..
a8b0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
a8c0: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
a8d0: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s()..        {..
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
a8f0: 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 20 3d 20  .DatabaseName = 
a900: 64 61 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20  databaseName;.. 
a910: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
a920: 54 61 62 6c 65 4e 61 6d 65 20 3d 20 74 61 62 6c  TableName = tabl
a930: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
a940: 20 20 20 20 74 68 69 73 2e 43 6f 6c 75 6d 6e 4e      this.ColumnN
a950: 61 6d 65 20 3d 20 63 6f 6c 75 6d 6e 4e 61 6d 65  ame = columnName
a960: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
a970: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
a980: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
a9e0: 72 65 67 69 6f 6e 20 49 45 71 75 61 6c 69 74 79  region IEquality
a9f0: 43 6f 6d 70 61 72 65 72 3c 43 6f 6c 75 6d 6e 50  Comparer<ColumnP
aa00: 61 72 65 6e 74 3e 20 4d 65 6d 62 65 72 73 0d 0a  arent> Members..
aa10: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
aa20: 6f 6f 6c 20 45 71 75 61 6c 73 28 43 6f 6c 75 6d  ool Equals(Colum
aa30: 6e 50 61 72 65 6e 74 20 78 2c 20 43 6f 6c 75 6d  nParent x, Colum
aa40: 6e 50 61 72 65 6e 74 20 79 29 0d 0a 20 20 20 20  nParent y)..    
aa50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
aa60: 20 20 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c     if ((x == nul
aa70: 6c 29 20 26 26 20 28 79 20 3d 3d 20 6e 75 6c 6c  l) && (y == null
aa80: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
aa90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
aaa0: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
aab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
aac0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
aad0: 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29   if ((x == null)
aae0: 20 7c 7c 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29   || (y == null))
aaf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
ab00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ab10: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ab30: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
ab40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ab50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab60: 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
ab70: 6c 73 28 78 2e 44 61 74 61 62 61 73 65 4e 61 6d  ls(x.DatabaseNam
ab80: 65 2c 20 79 2e 44 61 74 61 62 61 73 65 4e 61 6d  e, y.DatabaseNam
ab90: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
abb0: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
abc0: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29  inalIgnoreCase))
abd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
abe0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
abf0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ac00: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
ac10: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ac20: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ac30: 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
ac40: 78 2e 54 61 62 6c 65 4e 61 6d 65 2c 20 79 2e 54  x.TableName, y.T
ac50: 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  ableName,..     
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac70: 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
ac80: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
ac90: 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20 20 20  eCase))..       
aca0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acc0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
ace0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
acf0: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
ad00: 45 71 75 61 6c 73 28 78 2e 43 6f 6c 75 6d 6e 4e  Equals(x.ColumnN
ad10: 61 6d 65 2c 20 79 2e 43 6f 6c 75 6d 6e 4e 61 6d  ame, y.ColumnNam
ad20: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
ad40: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
ad50: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29  inalIgnoreCase))
ad60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ad70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ad80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ad90: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
ada0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
adb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
adc0: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
add0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ade0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
adf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae30: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
ae40: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 47 65 74    public int Get
ae50: 48 61 73 68 43 6f 64 65 28 43 6f 6c 75 6d 6e 50  HashCode(ColumnP
ae60: 61 72 65 6e 74 20 6f 62 6a 29 0d 0a 20 20 20 20  arent obj)..    
ae70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ae80: 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20     int result = 
ae90: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
aea0: 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75    if ((obj != nu
aeb0: 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 44 61 74 61  ll) && (obj.Data
aec0: 62 61 73 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  baseName != null
aed0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
aee0: 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62      result ^= ob
aef0: 6a 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 2e 47  j.DatabaseName.G
af00: 65 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d  etHashCode();...
af10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
af20: 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26  ((obj != null) &
af30: 26 20 28 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d 65  & (obj.TableName
af40: 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   != null))..    
af50: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
af60: 6c 74 20 5e 3d 20 6f 62 6a 2e 54 61 62 6c 65 4e  lt ^= obj.TableN
af70: 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28  ame.GetHashCode(
af80: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
af90: 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75    if ((obj != nu
afa0: 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 43 6f 6c 75  ll) && (obj.Colu
afb0: 6d 6e 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29  mnName != null))
afc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
afd0: 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e    result ^= obj.
afe0: 43 6f 6c 75 6d 6e 4e 61 6d 65 2e 47 65 74 48 61  ColumnName.GetHa
aff0: 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20  shCode();....   
b000: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
b010: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
b020: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
b030: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
b040: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
b050: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
b060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0a0: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
b0b0: 73 74 61 74 69 63 20 76 6f 69 64 20 47 65 74 53  static void GetS
b0c0: 74 61 74 65 6d 65 6e 74 43 6f 6c 75 6d 6e 50 61  tatementColumnPa
b0d0: 72 65 6e 74 73 28 0d 0a 20 20 20 20 20 20 20 20  rents(..        
b0e0: 53 51 4c 69 74 65 42 61 73 65 20 73 71 6c 2c 0d  SQLiteBase sql,.
b0f0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
b100: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 0d 0a  tatement stmt,..
b110: 20 20 20 20 20 20 20 20 69 6e 74 20 66 69 65 6c          int fiel
b120: 64 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  dCount,..       
b130: 20 72 65 66 20 44 69 63 74 69 6f 6e 61 72 79 3c   ref Dictionary<
b140: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69  ColumnParent, Li
b150: 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54  st<int>> parentT
b160: 6f 43 6f 6c 75 6d 6e 73 2c 0d 0a 20 20 20 20 20  oColumns,..     
b170: 20 20 20 72 65 66 20 44 69 63 74 69 6f 6e 61 72     ref Dictionar
b180: 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72  y<int, ColumnPar
b190: 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54 6f 50 61 72  ent> columnToPar
b1a0: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ent..        )..
b1b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
b1c0: 66 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  f (parentToColum
b1d0: 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
b1e0: 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 54           parentT
b1f0: 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e 65 77 20 44  oColumns = new D
b200: 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e  ictionary<Column
b210: 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74  Parent, List<int
b220: 3e 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  >>(..           
b230: 20 20 20 20 20 6e 65 77 20 43 6f 6c 75 6d 6e 50       new ColumnP
b240: 61 72 65 6e 74 28 29 29 3b 0d 0a 0d 0a 20 20 20  arent());....   
b250: 20 20 20 20 20 69 66 20 28 63 6f 6c 75 6d 6e 54       if (columnT
b260: 6f 50 61 72 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  oParent == null)
b270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
b280: 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 20 6e  lumnToParent = n
b290: 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e  ew Dictionary<in
b2a0: 74 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e  t, ColumnParent>
b2b0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  ();....        f
b2c0: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
b2d0: 20 3c 20 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e   < fieldCount; n
b2e0: 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ++)..        {..
b2f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
b300: 6e 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65 20  ng databaseName 
b310: 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 44 61 74 61  = sql.ColumnData
b320: 62 61 73 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e  baseName(stmt, n
b330: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b340: 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65  string tableName
b350: 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 54 61 62   = sql.ColumnTab
b360: 6c 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b  leName(stmt, n);
b370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
b380: 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 20  ring columnName 
b390: 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67  = sql.ColumnOrig
b3a0: 69 6e 61 6c 4e 61 6d 65 28 73 74 6d 74 2c 20 6e  inalName(stmt, n
b3b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
b3c0: 20 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6b    ColumnParent k
b3d0: 65 79 20 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e 50  ey = new ColumnP
b3e0: 61 72 65 6e 74 28 64 61 74 61 62 61 73 65 4e 61  arent(databaseNa
b3f0: 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65 2c 20 6e  me, tableName, n
b400: 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ull);..         
b410: 20 20 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20     ColumnParent 
b420: 76 61 6c 75 65 20 3d 20 6e 65 77 20 43 6f 6c 75  value = new Colu
b430: 6d 6e 50 61 72 65 6e 74 28 64 61 74 61 62 61 73  mnParent(databas
b440: 65 4e 61 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65  eName, tableName
b450: 2c 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0d 0a  , columnName);..
b460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 69  ..            Li
b470: 73 74 3c 69 6e 74 3e 20 69 6e 64 65 78 4c 69 73  st<int> indexLis
b480: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
b490: 20 20 69 66 20 28 21 70 61 72 65 6e 74 54 6f 43    if (!parentToC
b4a0: 6f 6c 75 6d 6e 73 2e 54 72 79 47 65 74 56 61 6c  olumns.TryGetVal
b4b0: 75 65 28 6b 65 79 2c 20 6f 75 74 20 69 6e 64 65  ue(key, out inde
b4c0: 78 4c 69 73 74 29 29 0d 0a 20 20 20 20 20 20 20  xList))..       
b4d0: 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 54           parentT
b4e0: 6f 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 6b 65 79  oColumns.Add(key
b4f0: 2c 20 6e 65 77 20 4c 69 73 74 3c 69 6e 74 3e 28  , new List<int>(
b500: 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 6e 20 7d 29  new int[] { n })
b510: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b520: 65 6c 73 65 20 69 66 20 28 69 6e 64 65 78 4c 69  else if (indexLi
b530: 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st != null)..   
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
b550: 65 78 4c 69 73 74 2e 41 64 64 28 6e 29 3b 0d 0a  exList.Add(n);..
b560: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
b570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b580: 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e    parentToColumn
b590: 73 5b 6b 65 79 5d 20 3d 20 6e 65 77 20 4c 69 73  s[key] = new Lis
b5a0: 74 3c 69 6e 74 3e 28 6e 65 77 20 69 6e 74 5b 5d  t<int>(new int[]
b5b0: 20 7b 20 6e 20 7d 29 3b 0d 0a 0d 0a 20 20 20 20   { n });....    
b5c0: 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f          columnTo
b5d0: 50 61 72 65 6e 74 2e 41 64 64 28 6e 2c 20 76 61  Parent.Add(n, va
b5e0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
b5f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
b600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b650: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
b660: 20 69 6e 74 20 43 6f 75 6e 74 50 61 72 65 6e 74   int CountParent
b670: 73 28 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74  s(..        Dict
b680: 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72  ionary<ColumnPar
b690: 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20  ent, List<int>> 
b6a0: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 0d  parentToColumns.
b6b0: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
b6c0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72  {..        int r
b6d0: 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  esult = 0;....  
b6e0: 20 20 20 20 20 20 69 66 20 28 70 61 72 65 6e 74        if (parent
b6f0: 54 6f 43 6f 6c 75 6d 6e 73 20 21 3d 20 6e 75 6c  ToColumns != nul
b700: 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
b710: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
b720: 63 68 20 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ch (ColumnParent
b730: 20 6b 65 79 20 69 6e 20 70 61 72 65 6e 74 54 6f   key in parentTo
b740: 43 6f 6c 75 6d 6e 73 2e 4b 65 79 73 29 0d 0a 20  Columns.Keys).. 
b750: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b770: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b790: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
b7a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b7b0: 20 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d   string tableNam
b7c0: 65 20 3d 20 6b 65 79 2e 54 61 62 6c 65 4e 61 6d  e = key.TableNam
b7d0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
b7e0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
b7f0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
b800: 61 62 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  ableName))..    
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b820: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
b830: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
b840: 75 6c 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ult++;..        
b850: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
b860: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
b870: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
b880: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
b890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ////....    inte
b8e0: 72 6e 61 6c 20 44 61 74 61 54 61 62 6c 65 20 47  rnal DataTable G
b8f0: 65 74 53 63 68 65 6d 61 54 61 62 6c 65 28 62 6f  etSchemaTable(bo
b900: 6f 6c 20 77 61 6e 74 55 6e 69 71 75 65 49 6e 66  ol wantUniqueInf
b910: 6f 2c 20 62 6f 6f 6c 20 77 61 6e 74 44 65 66 61  o, bool wantDefa
b920: 75 6c 74 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ultValue)..    {
b930: 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  ..      CheckClo
b940: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 69 66  sed();..      if
b950: 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73   (_throwOnDispos
b960: 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ed) SQLiteComman
b970: 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64  d.Check(_command
b980: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  );....      //..
b990: 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a        // BUGFIX:
b9a0: 20 57 65 20 6e 65 65 64 20 74 6f 20 71 75 69 63   We need to quic
b9b0: 6b 6c 79 20 73 63 61 6e 20 61 6c 6c 20 74 68 65  kly scan all the
b9c0: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
b9d0: 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 2f 2f  urrent..      //
b9e0: 20 20 20 20 20 20 20 20 20 22 72 65 73 75 6c 74           "result
b9f0: 20 73 65 74 22 20 74 6f 20 73 65 65 20 68 6f 77   set" to see how
ba00: 20 6d 61 6e 79 20 64 69 73 74 69 6e 63 74 20 74   many distinct t
ba10: 61 62 6c 65 73 20 61 72 65 20 61 63 74 75 61 6c  ables are actual
ba20: 6c 79 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  ly..      //    
ba30: 20 20 20 20 20 69 6e 76 6f 6c 76 65 64 2e 20 20       involved.  
ba40: 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  This information
ba50: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f   is necessary so
ba60: 20 74 68 61 74 20 73 6f 6d 65 0d 0a 20 20 20 20   that some..    
ba70: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 74    //         int
ba80: 65 6c 6c 69 67 65 6e 74 20 64 65 63 69 73 69 6f  elligent decisio
ba90: 6e 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 77  ns can be made w
baa0: 68 65 6e 20 63 6f 6e 73 74 72 75 63 74 69 6e 67  hen constructing
bab0: 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20   the..      //  
bac0: 20 20 20 20 20 20 20 6d 65 74 61 64 61 74 61 20         metadata 
bad0: 62 65 6c 6f 77 2e 20 20 46 6f 72 20 65 78 61 6d  below.  For exam
bae0: 70 6c 65 2c 20 77 65 20 6e 65 65 64 20 74 6f 20  ple, we need to 
baf0: 62 65 20 76 65 72 79 20 63 61 72 65 66 75 6c 0d  be very careful.
bb00: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
bb10: 20 20 61 62 6f 75 74 20 66 6c 61 67 67 69 6e 67    about flagging
bb20: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 63 6f   a particular co
bb30: 6c 75 6d 6e 20 61 73 20 22 75 6e 69 71 75 65 22  lumn as "unique"
bb40: 20 6a 75 73 74 0d 0a 20 20 20 20 20 20 2f 2f 20   just..      // 
bb50: 20 20 20 20 20 20 20 20 62 65 63 61 75 73 65 20          because 
bb60: 69 74 20 77 61 73 20 69 6e 20 69 74 73 20 6f 72  it was in its or
bb70: 69 67 69 6e 61 6c 20 75 6e 64 65 72 6c 79 69 6e  iginal underlyin
bb80: 67 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  g database table
bb90: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
bba0: 20 20 20 69 66 20 74 68 65 72 65 20 61 72 65 20     if there are 
bbb0: 6e 6f 77 20 6d 75 6c 74 69 70 6c 65 20 74 61 62  now multiple tab
bbc0: 6c 65 73 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20  les involved in 
bbd0: 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  the..      //   
bbe0: 20 20 20 20 20 20 22 72 65 73 75 6c 74 20 73 65        "result se
bbf0: 74 22 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20  t".  See ticket 
bc00: 5b 37 65 33 66 61 39 33 37 34 34 5d 20 66 6f 72  [7e3fa93744] for
bc10: 20 6d 6f 72 65 20 64 65 74 61 69 6c 65 64 0d 0a   more detailed..
bc20: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
bc30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0d 0a 20   information... 
bc40: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 44       //..      D
bc50: 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e  ictionary<Column
bc60: 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74  Parent, List<int
bc70: 3e 3e 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  >> parentToColum
bc80: 6e 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ns = null;..    
bc90: 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74    Dictionary<int
bca0: 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20  , ColumnParent> 
bcb0: 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d  columnToParent =
bcc0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
bcd0: 47 65 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c 75  GetStatementColu
bce0: 6d 6e 50 61 72 65 6e 74 73 28 0d 0a 20 20 20 20  mnParents(..    
bcf0: 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43        _command.C
bd00: 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2c 20  onnection._sql, 
bd10: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
bd20: 2c 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a  , _fieldCount,..
bd30: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 70 61            ref pa
bd40: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 20 72  rentToColumns, r
bd50: 65 66 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e  ef columnToParen
bd60: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 44 61 74  t);....      Dat
bd70: 61 54 61 62 6c 65 20 74 62 6c 20 3d 20 6e 65 77  aTable tbl = new
bd80: 20 44 61 74 61 54 61 62 6c 65 28 22 53 63 68 65   DataTable("Sche
bd90: 6d 61 54 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20  maTable");..    
bda0: 20 20 44 61 74 61 54 61 62 6c 65 20 74 62 6c 49    DataTable tblI
bdb0: 6e 64 65 78 65 73 20 3d 20 6e 75 6c 6c 3b 0d 0a  ndexes = null;..
bdc0: 20 20 20 20 20 20 44 61 74 61 54 61 62 6c 65 20        DataTable 
bdd0: 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 3b  tblIndexColumns;
bde0: 0d 0a 20 20 20 20 20 20 44 61 74 61 52 6f 77 20  ..      DataRow 
bdf0: 72 6f 77 3b 0d 0a 20 20 20 20 20 20 73 74 72 69  row;..      stri
be00: 6e 67 20 74 65 6d 70 3b 0d 0a 20 20 20 20 20 20  ng temp;..      
be10: 73 74 72 69 6e 67 20 73 74 72 43 61 74 61 6c 6f  string strCatalo
be20: 67 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  g = String.Empty
be30: 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ;..      string 
be40: 73 74 72 54 61 62 6c 65 20 3d 20 53 74 72 69 6e  strTable = Strin
be50: 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20  g.Empty;..      
be60: 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 75 6d 6e  string strColumn
be70: 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b   = String.Empty;
be80: 0d 0a 0d 0a 20 20 20 20 20 20 74 62 6c 2e 4c 6f  ....      tbl.Lo
be90: 63 61 6c 65 20 3d 20 43 75 6c 74 75 72 65 49 6e  cale = CultureIn
bea0: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
beb0: 75 72 65 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  ure;..      tbl.
bec0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
bed0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f  maTableColumn.Co
bee0: 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66  lumnName, typeof
bef0: 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (String));..    
bf00: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
bf10: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
bf20: 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61  umn.ColumnOrdina
bf30: 6c 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b  l, typeof(int));
bf40: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
bf50: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
bf60: 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
bf70: 53 69 7a 65 2c 20 74 79 70 65 6f 66 28 69 6e 74  Size, typeof(int
bf80: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
bf90: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
bfa0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
bfb0: 65 72 69 63 50 72 65 63 69 73 69 6f 6e 2c 20 74  ericPrecision, t
bfc0: 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20  ypeof(int));..  
bfd0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
bfe0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
bff0: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61  olumn.NumericSca
c000: 6c 65 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29  le, typeof(int))
c010: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
c020: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
c030: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69  ableColumn.IsUni
c040: 71 75 65 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  que, typeof(Bool
c050: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ean));..      tb
c060: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c070: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c080: 49 73 4b 65 79 2c 20 74 79 70 65 6f 66 28 42 6f  IsKey, typeof(Bo
c090: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
c0a0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c0b0: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
c0c0: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 65  nalColumn.BaseSe
c0d0: 72 76 65 72 4e 61 6d 65 2c 20 74 79 70 65 6f 66  rverName, typeof
c0e0: 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (string));..    
c0f0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c100: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
c110: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65  ionalColumn.Base
c120: 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 20 74 79 70  CatalogName, typ
c130: 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20  eof(String));.. 
c140: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c150: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c160: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d  Column.BaseColum
c170: 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74  nName, typeof(St
c180: 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
c190: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
c1a0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
c1b0: 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 2c  .BaseSchemaName,
c1c0: 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29   typeof(String))
c1d0: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
c1e0: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
c1f0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
c200: 61 62 6c 65 4e 61 6d 65 2c 20 74 79 70 65 6f 66  ableName, typeof
c210: 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (String));..    
c220: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c230: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
c240: 75 6d 6e 2e 44 61 74 61 54 79 70 65 2c 20 74 79  umn.DataType, ty
c250: 70 65 6f 66 28 54 79 70 65 29 29 3b 0d 0a 20 20  peof(Type));..  
c260: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c270: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
c280: 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c  olumn.AllowDBNul
c290: 6c 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  l, typeof(Boolea
c2a0: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  n));..      tbl.
c2b0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
c2c0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72  maTableColumn.Pr
c2d0: 6f 76 69 64 65 72 54 79 70 65 2c 20 74 79 70 65  oviderType, type
c2e0: 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20  of(int));..     
c2f0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c300: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
c310: 6d 6e 2e 49 73 41 6c 69 61 73 65 64 2c 20 74 79  mn.IsAliased, ty
c320: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d  peof(Boolean));.
c330: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
c340: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
c350: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65  leColumn.IsExpre
c360: 73 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f  ssion, typeof(Bo
c370: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
c380: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c390: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
c3a0: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f  nalColumn.IsAuto
c3b0: 49 6e 63 72 65 6d 65 6e 74 2c 20 74 79 70 65 6f  Increment, typeo
c3c0: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20  f(Boolean));..  
c3d0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c3e0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
c3f0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
c400: 52 6f 77 56 65 72 73 69 6f 6e 2c 20 74 79 70 65  RowVersion, type
c410: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
c420: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c430: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c440: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
c450: 73 48 69 64 64 65 6e 2c 20 74 79 70 65 6f 66 28  sHidden, typeof(
c460: 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20  Boolean));..    
c470: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c480: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
c490: 75 6d 6e 2e 49 73 4c 6f 6e 67 2c 20 74 79 70 65  umn.IsLong, type
c4a0: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
c4b0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c4c0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c4d0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
c4e0: 73 52 65 61 64 4f 6e 6c 79 2c 20 74 79 70 65 6f  sReadOnly, typeo
c4f0: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20  f(Boolean));..  
c500: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c510: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
c520: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 50 72  ptionalColumn.Pr
c530: 6f 76 69 64 65 72 53 70 65 63 69 66 69 63 44 61  oviderSpecificDa
c540: 74 61 54 79 70 65 2c 20 74 79 70 65 6f 66 28 54  taType, typeof(T
c550: 79 70 65 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ype));..      tb
c560: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c570: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
c580: 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56  lColumn.DefaultV
c590: 61 6c 75 65 2c 20 74 79 70 65 6f 66 28 6f 62 6a  alue, typeof(obj
c5a0: 65 63 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ect));..      tb
c5b0: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 44  l.Columns.Add("D
c5c0: 61 74 61 54 79 70 65 4e 61 6d 65 22 2c 20 74 79  ataTypeName", ty
c5d0: 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a  peof(string));..
c5e0: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
c5f0: 73 2e 41 64 64 28 22 43 6f 6c 6c 61 74 69 6f 6e  s.Add("Collation
c600: 54 79 70 65 22 2c 20 74 79 70 65 6f 66 28 73 74  Type", typeof(st
c610: 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
c620: 62 6c 2e 42 65 67 69 6e 4c 6f 61 64 44 61 74 61  bl.BeginLoadData
c630: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  ();....      for
c640: 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
c650: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b   _fieldCount; n+
c660: 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  +)..      {..   
c670: 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65 20       SQLiteType 
c680: 73 71 6c 54 79 70 65 20 3d 20 47 65 74 53 51 4c  sqlType = GetSQL
c690: 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20  iteType(_flags, 
c6a0: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  n);....        r
c6b0: 6f 77 20 3d 20 74 62 6c 2e 4e 65 77 52 6f 77 28  ow = tbl.NewRow(
c6c0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 62  );....        Db
c6d0: 54 79 70 65 20 74 79 70 20 3d 20 73 71 6c 54 79  Type typ = sqlTy
c6e0: 70 65 2e 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20  pe.Type;....    
c6f0: 20 20 20 20 2f 2f 20 44 65 66 61 75 6c 74 20 73      // Default s
c700: 65 74 74 69 6e 67 73 20 66 6f 72 20 74 68 65 20  ettings for the 
c710: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20  column..        
c720: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
c730: 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65  olumn.ColumnName
c740: 5d 20 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0d  ] = GetName(n);.
c750: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
c760: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43  emaTableColumn.C
c770: 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 5d 20 3d 20  olumnOrdinal] = 
c780: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  n;..        row[
c790: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c7a0: 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20  n.ColumnSize] = 
c7b0: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44 62  SQLiteConvert.Db
c7c0: 54 79 70 65 54 6f 43 6f 6c 75 6d 6e 53 69 7a 65  TypeToColumnSize
c7d0: 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
c7e0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
c7f0: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65  olumn.NumericPre
c800: 63 69 73 69 6f 6e 5d 20 3d 20 53 51 4c 69 74 65  cision] = SQLite
c810: 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f  Convert.DbTypeTo
c820: 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e  NumericPrecision
c830: 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
c840: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
c850: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61  olumn.NumericSca
c860: 6c 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76  le] = SQLiteConv
c870: 65 72 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65  ert.DbTypeToNume
c880: 72 69 63 53 63 61 6c 65 28 74 79 70 29 3b 0d 0a  ricScale(typ);..
c890: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
c8a0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72  maTableColumn.Pr
c8b0: 6f 76 69 64 65 72 54 79 70 65 5d 20 3d 20 73 71  oviderType] = sq
c8c0: 6c 54 79 70 65 2e 54 79 70 65 3b 0d 0a 20 20 20  lType.Type;..   
c8d0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
c8e0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e  ableColumn.IsLon
c8f0: 67 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  g] = false;..   
c900: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
c910: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77  ableColumn.Allow
c920: 44 42 4e 75 6c 6c 5d 20 3d 20 74 72 75 65 3b 0d  DBNull] = true;.
c930: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
c940: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
c950: 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c  Column.IsReadOnl
c960: 79 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  y] = false;..   
c970: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
c980: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
c990: 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e 5d  mn.IsRowVersion]
c9a0: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
c9b0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c9c0: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75  leColumn.IsUniqu
c9d0: 65 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  e] = false;..   
c9e0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
c9f0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79  ableColumn.IsKey
ca00: 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  ] = false;..    
ca10: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
ca20: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
ca30: 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e  n.IsAutoIncremen
ca40: 74 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  t] = false;..   
ca50: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
ca60: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74 61 54  ableColumn.DataT
ca70: 79 70 65 5d 20 3d 20 47 65 74 46 69 65 6c 64 54  ype] = GetFieldT
ca80: 79 70 65 28 6e 29 3b 0d 0a 20 20 20 20 20 20 20  ype(n);..       
ca90: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
caa0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
cab0: 73 48 69 64 64 65 6e 5d 20 3d 20 66 61 6c 73 65  sHidden] = false
cac0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53  ;..        row[S
cad0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
cae0: 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 5d  .BaseSchemaName]
caf0: 20 3d 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61   = _baseSchemaNa
cb00: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  me;....        s
cb10: 74 72 43 6f 6c 75 6d 6e 20 3d 20 63 6f 6c 75 6d  trColumn = colum
cb20: 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 43 6f 6c  nToParent[n].Col
cb30: 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  umnName;..      
cb40: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
cb50: 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f  ullOrEmpty(strCo
cb60: 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29 20  lumn) == false) 
cb70: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
cb80: 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e  olumn.BaseColumn
cb90: 4e 61 6d 65 5d 20 3d 20 73 74 72 43 6f 6c 75 6d  Name] = strColum
cba0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 6f  n;....        ro
cbb0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
cbc0: 75 6d 6e 2e 49 73 45 78 70 72 65 73 73 69 6f 6e  umn.IsExpression
cbd0: 5d 20 3d 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c  ] = String.IsNul
cbe0: 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f 6c 75  lOrEmpty(strColu
cbf0: 6d 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f  mn);..        ro
cc00: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
cc10: 75 6d 6e 2e 49 73 41 6c 69 61 73 65 64 5d 20 3d  umn.IsAliased] =
cc20: 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65   (String.Compare
cc30: 28 47 65 74 4e 61 6d 65 28 6e 29 2c 20 73 74 72  (GetName(n), str
cc40: 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43 6f  Column, StringCo
cc50: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
cc60: 49 67 6e 6f 72 65 43 61 73 65 29 20 21 3d 20 30  IgnoreCase) != 0
cc70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65  );....        te
cc80: 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72  mp = columnToPar
cc90: 65 6e 74 5b 6e 5d 2e 54 61 62 6c 65 4e 61 6d 65  ent[n].TableName
cca0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ;..        if (S
ccb0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
ccc0: 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c  pty(temp) == fal
ccd0: 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61  se) row[SchemaTa
cce0: 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61  bleColumn.BaseTa
ccf0: 62 6c 65 4e 61 6d 65 5d 20 3d 20 74 65 6d 70 3b  bleName] = temp;
cd00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65 6d 70  ....        temp
cd10: 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e   = columnToParen
cd20: 74 5b 6e 5d 2e 44 61 74 61 62 61 73 65 4e 61 6d  t[n].DatabaseNam
cd30: 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  e;..        if (
cd40: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
cd50: 6d 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61  mpty(temp) == fa
cd60: 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54  lse) row[SchemaT
cd70: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
cd80: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
cd90: 6d 65 5d 20 3d 20 74 65 6d 70 3b 0d 0a 0d 0a 20  me] = temp;.... 
cda0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61         string da
cdb0: 74 61 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  taType = null;..
cdc0: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
cdd0: 20 68 61 76 65 20 61 20 74 61 62 6c 65 2d 62 6f   have a table-bo
cde0: 75 6e 64 20 63 6f 6c 75 6d 6e 2c 20 65 78 74 72  und column, extr
cdf0: 61 63 74 20 74 68 65 20 65 78 74 72 61 20 69 6e  act the extra in
ce00: 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 69  formation from i
ce10: 74 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  t..        if (S
ce20: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
ce30: 70 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d  pty(strColumn) =
ce40: 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20  = false)..      
ce50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73    {..          s
ce60: 74 72 69 6e 67 20 62 61 73 65 43 61 74 61 6c 6f  tring baseCatalo
ce70: 67 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 45  gName = String.E
ce80: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
ce90: 20 20 20 69 66 20 28 72 6f 77 5b 53 63 68 65 6d     if (row[Schem
cea0: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
ceb0: 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67  lumn.BaseCatalog
cec0: 4e 61 6d 65 5d 20 21 3d 20 44 42 4e 75 6c 6c 2e  Name] != DBNull.
ced0: 56 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20  Value)..        
cee0: 20 20 20 20 20 20 62 61 73 65 43 61 74 61 6c 6f        baseCatalo
cef0: 67 4e 61 6d 65 20 3d 20 28 73 74 72 69 6e 67 29  gName = (string)
cf00: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
cf10: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61  ptionalColumn.Ba
cf20: 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 3b 0d  seCatalogName];.
cf30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  ...          str
cf40: 69 6e 67 20 62 61 73 65 54 61 62 6c 65 4e 61 6d  ing baseTableNam
cf50: 65 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  e = String.Empty
cf60: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
cf70: 66 20 28 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  f (row[SchemaTab
cf80: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62  leColumn.BaseTab
cf90: 6c 65 4e 61 6d 65 5d 20 21 3d 20 44 42 4e 75 6c  leName] != DBNul
cfa0: 6c 2e 56 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  l.Value)..      
cfb0: 20 20 20 20 20 20 20 20 62 61 73 65 54 61 62 6c          baseTabl
cfc0: 65 4e 61 6d 65 20 3d 20 28 73 74 72 69 6e 67 29  eName = (string)
cfd0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
cfe0: 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e  olumn.BaseTableN
cff0: 61 6d 65 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame];....       
d000: 20 20 20 73 74 72 69 6e 67 20 62 61 73 65 43 6f     string baseCo
d010: 6c 75 6d 6e 4e 61 6d 65 20 3d 20 53 74 72 69 6e  lumnName = Strin
d020: 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20  g.Empty;....    
d030: 20 20 20 20 20 20 69 66 20 28 72 6f 77 5b 53 63        if (row[Sc
d040: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
d050: 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20  BaseColumnName] 
d060: 21 3d 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 29  != DBNull.Value)
d070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d080: 62 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 20 3d  baseColumnName =
d090: 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68   (string)row[Sch
d0a0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
d0b0: 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 3b 0d  aseColumnName];.
d0c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  ...          str
d0d0: 69 6e 67 20 63 6f 6c 6c 53 65 71 20 3d 20 6e 75  ing collSeq = nu
d0e0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  ll;..          b
d0f0: 6f 6f 6c 20 62 4e 6f 74 4e 75 6c 6c 20 3d 20 66  ool bNotNull = f
d100: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
d110: 20 62 6f 6f 6c 20 62 50 72 69 6d 61 72 79 4b 65   bool bPrimaryKe
d120: 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  y = false;..    
d130: 20 20 20 20 20 20 62 6f 6f 6c 20 62 41 75 74 6f        bool bAuto
d140: 49 6e 63 72 65 6d 65 6e 74 20 3d 20 66 61 6c 73  Increment = fals
d150: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  e;..          st
d160: 72 69 6e 67 5b 5d 20 61 72 53 69 7a 65 3b 0d 0a  ring[] arSize;..
d170: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 47  ..          // G
d180: 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 65  et the column me
d190: 74 61 20 64 61 74 61 0d 0a 20 20 20 20 20 20 20  ta data..       
d1a0: 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e     _command.Conn
d1b0: 65 63 74 69 6f 6e 2e 5f 73 71 6c 2e 43 6f 6c 75  ection._sql.Colu
d1c0: 6d 6e 4d 65 74 61 44 61 74 61 28 0d 0a 20 20 20  mnMetaData(..   
d1d0: 20 20 20 20 20 20 20 20 20 62 61 73 65 43 61 74           baseCat
d1e0: 61 6c 6f 67 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  alogName,..     
d1f0: 20 20 20 20 20 20 20 62 61 73 65 54 61 62 6c 65         baseTable
d200: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
d210: 20 20 20 73 74 72 43 6f 6c 75 6d 6e 2c 0d 0a 20     strColumn,.. 
d220: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 64             ref d
d230: 61 74 61 54 79 70 65 2c 20 72 65 66 20 63 6f 6c  ataType, ref col
d240: 6c 53 65 71 2c 20 72 65 66 20 62 4e 6f 74 4e 75  lSeq, ref bNotNu
d250: 6c 6c 2c 20 72 65 66 20 62 50 72 69 6d 61 72 79  ll, ref bPrimary
d260: 4b 65 79 2c 20 72 65 66 20 62 41 75 74 6f 49 6e  Key, ref bAutoIn
d270: 63 72 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20  crement);....   
d280: 20 20 20 20 20 20 20 69 66 20 28 62 4e 6f 74 4e         if (bNotN
d290: 75 6c 6c 20 7c 7c 20 62 50 72 69 6d 61 72 79 4b  ull || bPrimaryK
d2a0: 65 79 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61  ey) row[SchemaTa
d2b0: 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44  bleColumn.AllowD
d2c0: 42 4e 75 6c 6c 5d 20 3d 20 66 61 6c 73 65 3b 0d  BNull] = false;.
d2d0: 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  .          bool 
d2e0: 61 6c 6c 6f 77 44 62 4e 75 6c 6c 20 3d 20 28 62  allowDbNull = (b
d2f0: 6f 6f 6c 29 72 6f 77 5b 53 63 68 65 6d 61 54 61  ool)row[SchemaTa
d300: 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44  bleColumn.AllowD
d310: 42 4e 75 6c 6c 5d 3b 0d 0a 0d 0a 20 20 20 20 20  BNull];....     
d320: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
d330: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79  ableColumn.IsKey
d340: 5d 20 3d 20 62 50 72 69 6d 61 72 79 4b 65 79 20  ] = bPrimaryKey 
d350: 26 26 20 43 6f 75 6e 74 50 61 72 65 6e 74 73 28  && CountParents(
d360: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 29  parentToColumns)
d370: 20 3c 3d 20 31 3b 0d 0a 20 20 20 20 20 20 20 20   <= 1;..        
d380: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
d390: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
d3a0: 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d  IsAutoIncrement]
d3b0: 20 3d 20 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e   = bAutoIncremen
d3c0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 6f  t;..          ro
d3d0: 77 5b 22 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65  w["CollationType
d3e0: 22 5d 20 3d 20 63 6f 6c 6c 53 65 71 3b 0d 0a 0d  "] = collSeq;...
d3f0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 6f  .          // Fo
d400: 72 20 74 79 70 65 73 20 6c 69 6b 65 20 76 61 72  r types like var
d410: 63 68 61 72 28 35 30 29 20 61 6e 64 20 73 75 63  char(50) and suc
d420: 68 2c 20 65 78 74 72 61 63 74 20 74 68 65 20 73  h, extract the s
d430: 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61  ize..          a
d440: 72 53 69 7a 65 20 3d 20 64 61 74 61 54 79 70 65  rSize = dataType
d450: 2e 53 70 6c 69 74 28 27 28 27 29 3b 0d 0a 20 20  .Split('(');..  
d460: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69          if (arSi
d470: 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a  ze.Length > 1)..
d480: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d490: 20 20 20 20 20 20 20 20 20 64 61 74 61 54 79 70           dataTyp
d4a0: 65 20 3d 20 61 72 53 69 7a 65 5b 30 5d 3b 0d 0a  e = arSize[0];..
d4b0: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 53 69              arSi
d4c0: 7a 65 20 3d 20 61 72 53 69 7a 65 5b 31 5d 2e 53  ze = arSize[1].S
d4d0: 70 6c 69 74 28 27 29 27 29 3b 0d 0a 20 20 20 20  plit(')');..    
d4e0: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69          if (arSi
d4f0: 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a  ze.Length > 1)..
d500: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 53               arS
d520: 69 7a 65 20 3d 20 61 72 53 69 7a 65 5b 30 5d 2e  ize = arSize[0].
d530: 53 70 6c 69 74 28 27 2c 27 2c 20 27 2e 27 29 3b  Split(',', '.');
d540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d550: 69 66 20 28 73 71 6c 54 79 70 65 2e 54 79 70 65  if (sqlType.Type
d560: 20 3d 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72   == DbType.Binar
d570: 79 20 7c 7c 20 53 51 4c 69 74 65 43 6f 6e 76 65  y || SQLiteConve
d580: 72 74 2e 49 73 53 74 72 69 6e 67 44 62 54 79 70  rt.IsStringDbTyp
d590: 65 28 73 71 6c 54 79 70 65 2e 54 79 70 65 29 29  e(sqlType.Type))
d5a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d5b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d5c0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
d5d0: 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53  leColumn.ColumnS
d5e0: 69 7a 65 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54  ize] = Convert.T
d5f0: 6f 49 6e 74 33 32 28 61 72 53 69 7a 65 5b 30 5d  oInt32(arSize[0]
d600: 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  , CultureInfo.In
d610: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b  variantCulture);
d620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d630: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
d640: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
d650: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d660: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
d670: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75  maTableColumn.Nu
d680: 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e 5d 20  mericPrecision] 
d690: 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33  = Convert.ToInt3
d6a0: 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20 43 75 6c  2(arSize[0], Cul
d6b0: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
d6c0: 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20  ntCulture);..   
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
d6e0: 28 61 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e  (arSize.Length >
d6f0: 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   1)..           
d700: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
d710: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
d720: 65 72 69 63 53 63 61 6c 65 5d 20 3d 20 43 6f 6e  ericScale] = Con
d730: 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53  vert.ToInt32(arS
d740: 69 7a 65 5b 31 5d 2c 20 43 75 6c 74 75 72 65 49  ize[1], CultureI
d750: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
d760: 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  ture);..        
d770: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
d780: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d790: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
d7a0: 20 69 66 20 28 77 61 6e 74 44 65 66 61 75 6c 74   if (wantDefault
d7b0: 56 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20  Value)..        
d7c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d7d0: 20 2f 2f 20 44 65 74 65 72 6d 69 6e 65 20 74 68   // Determine th
d7e0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
d7f0: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20  for the column, 
d800: 77 68 69 63 68 20 73 75 63 6b 73 20 62 65 63 61  which sucks beca
d810: 75 73 65 20 77 65 20 68 61 76 65 20 74 6f 20 71  use we have to q
d820: 75 65 72 79 20 74 68 65 20 73 63 68 65 6d 61 20  uery the schema 
d830: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 0d  for each column.
d840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
d850: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
d860: 64 20 63 6d 64 54 61 62 6c 65 20 3d 20 6e 65 77  d cmdTable = new
d870: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 48   SQLiteCommand(H
d880: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
d890: 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ingFormat(Cultur
d8a0: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
d8b0: 75 6c 74 75 72 65 2c 20 22 50 52 41 47 4d 41 20  ulture, "PRAGMA 
d8c0: 5b 7b 30 7d 5d 2e 54 41 42 4c 45 5f 49 4e 46 4f  [{0}].TABLE_INFO
d8d0: 28 5b 7b 31 7d 5d 29 22 2c 0d 0a 20 20 20 20 20  ([{1}])",..     
d8e0: 20 20 20 20 20 20 20 20 20 62 61 73 65 43 61 74           baseCat
d8f0: 61 6c 6f 67 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  alogName,..     
d900: 20 20 20 20 20 20 20 20 20 62 61 73 65 54 61 62           baseTab
d910: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
d920: 20 20 20 20 20 20 29 2c 20 5f 63 6f 6d 6d 61 6e        ), _comman
d930: 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a  d.Connection))..
d940: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
d950: 67 20 28 44 62 44 61 74 61 52 65 61 64 65 72 20  g (DbDataReader 
d960: 72 64 54 61 62 6c 65 20 3d 20 63 6d 64 54 61 62  rdTable = cmdTab
d970: 6c 65 2e 45 78 65 63 75 74 65 52 65 61 64 65 72  le.ExecuteReader
d980: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
d990: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d9a0: 20 20 2f 2f 20 46 69 6e 64 20 74 68 65 20 6d 61    // Find the ma
d9b0: 74 63 68 69 6e 67 20 63 6f 6c 75 6d 6e 0d 0a 20  tching column.. 
d9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
d9d0: 6c 65 20 28 72 64 54 61 62 6c 65 2e 52 65 61 64  le (rdTable.Read
d9e0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
d9f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
da00: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
da10: 2e 43 6f 6d 70 61 72 65 28 62 61 73 65 43 6f 6c  .Compare(baseCol
da20: 75 6d 6e 4e 61 6d 65 2c 20 72 64 54 61 62 6c 65  umnName, rdTable
da30: 2e 47 65 74 53 74 72 69 6e 67 28 31 29 2c 20 53  .GetString(1), S
da40: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
da50: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
da60: 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
da70: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
da80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
da90: 66 20 28 72 64 54 61 62 6c 65 2e 49 73 44 42 4e  f (rdTable.IsDBN
daa0: 75 6c 6c 28 34 29 20 3d 3d 20 66 61 6c 73 65 29  ull(4) == false)
dab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dac0: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
dad0: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
dae0: 75 6d 6e 2e 44 65 66 61 75 6c 74 56 61 6c 75 65  umn.DefaultValue
daf0: 5d 20 3d 20 72 64 54 61 62 6c 65 5b 34 5d 3b 0d  ] = rdTable[4];.
db00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
db10: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
db20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
db30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
db40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
db50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
db60: 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65 74 65           // Dete
db70: 72 6d 69 6e 65 20 49 73 55 6e 69 71 75 65 20 70  rmine IsUnique p
db80: 72 6f 70 65 72 6c 79 2c 20 77 68 69 63 68 20 69  roperly, which i
db90: 73 20 61 20 70 61 69 6e 20 69 6e 20 74 68 65 20  s a pain in the 
dba0: 62 75 74 74 21 0d 0a 20 20 20 20 20 20 20 20 20  butt!..         
dbb0: 20 69 66 20 28 77 61 6e 74 55 6e 69 71 75 65 49   if (wantUniqueI
dbc0: 6e 66 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nfo)..          
dbd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
dbe0: 66 20 28 62 61 73 65 43 61 74 61 6c 6f 67 4e 61  f (baseCatalogNa
dbf0: 6d 65 20 21 3d 20 73 74 72 43 61 74 61 6c 6f 67  me != strCatalog
dc00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dc10: 7c 7c 20 62 61 73 65 54 61 62 6c 65 4e 61 6d 65  || baseTableName
dc20: 20 21 3d 20 73 74 72 54 61 62 6c 65 29 0d 0a 20   != strTable).. 
dc30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 43              strC
dc50: 61 74 61 6c 6f 67 20 3d 20 62 61 73 65 43 61 74  atalog = baseCat
dc60: 61 6c 6f 67 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  alogName;..     
dc70: 20 20 20 20 20 20 20 20 20 73 74 72 54 61 62 6c           strTabl
dc80: 65 20 3d 20 62 61 73 65 54 61 62 6c 65 4e 61 6d  e = baseTableNam
dc90: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
dca0: 20 20 20 20 74 62 6c 49 6e 64 65 78 65 73 20 3d      tblIndexes =
dcb0: 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63   _command.Connec
dcc0: 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28 22  tion.GetSchema("
dcd0: 49 6e 64 65 78 65 73 22 2c 20 6e 65 77 20 73 74  Indexes", new st
dce0: 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ring[] {..      
dcf0: 20 20 20 20 20 20 20 20 20 20 62 61 73 65 43 61            baseCa
dd00: 74 61 6c 6f 67 4e 61 6d 65 2c 0d 0a 20 20 20 20  talogName,..    
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
dd20: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
dd30: 20 20 20 62 61 73 65 54 61 62 6c 65 4e 61 6d 65     baseTableName
dd40: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
dd50: 20 20 20 6e 75 6c 6c 20 7d 29 3b 0d 0a 20 20 20     null });..   
dd60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
dd70: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
dd80: 68 20 28 44 61 74 61 52 6f 77 20 72 6f 77 49 6e  h (DataRow rowIn
dd90: 64 65 78 65 73 20 69 6e 20 74 62 6c 49 6e 64 65  dexes in tblInde
dda0: 78 65 73 2e 52 6f 77 73 29 0d 0a 20 20 20 20 20  xes.Rows)..     
ddb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ddc0: 20 20 20 20 20 20 20 20 74 62 6c 49 6e 64 65 78          tblIndex
ddd0: 43 6f 6c 75 6d 6e 73 20 3d 20 5f 63 6f 6d 6d 61  Columns = _comma
dde0: 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65  nd.Connection.Ge
ddf0: 74 53 63 68 65 6d 61 28 22 49 6e 64 65 78 43 6f  tSchema("IndexCo
de00: 6c 75 6d 6e 73 22 2c 20 6e 65 77 20 73 74 72 69  lumns", new stri
de10: 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ng[] {..        
de20: 20 20 20 20 20 20 20 20 62 61 73 65 43 61 74 61          baseCata
de30: 6c 6f 67 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  logName,..      
de40: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 0d            null,.
de50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de60: 20 62 61 73 65 54 61 62 6c 65 4e 61 6d 65 2c 0d   baseTableName,.
de70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de80: 20 28 73 74 72 69 6e 67 29 72 6f 77 49 6e 64 65   (string)rowInde
de90: 78 65 73 5b 22 49 4e 44 45 58 5f 4e 41 4d 45 22  xes["INDEX_NAME"
dea0: 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ],..            
deb0: 20 20 20 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20      null..      
dec0: 20 20 20 20 20 20 20 20 20 20 7d 29 3b 0d 0a 20            });.. 
ded0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
dee0: 65 61 63 68 20 28 44 61 74 61 52 6f 77 20 72 6f  each (DataRow ro
def0: 77 43 6f 6c 75 6d 6e 49 6e 64 65 78 20 69 6e 20  wColumnIndex in 
df00: 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e  tblIndexColumns.
df10: 52 6f 77 73 29 0d 0a 20 20 20 20 20 20 20 20 20  Rows)..         
df20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
df30: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
df40: 6e 67 2e 43 6f 6d 70 61 72 65 28 53 51 4c 69 74  ng.Compare(SQLit
df50: 65 43 6f 6e 76 65 72 74 2e 47 65 74 53 74 72 69  eConvert.GetStri
df60: 6e 67 4f 72 4e 75 6c 6c 28 72 6f 77 43 6f 6c 75  ngOrNull(rowColu
df70: 6d 6e 49 6e 64 65 78 5b 22 43 4f 4c 55 4d 4e 5f  mnIndex["COLUMN_
df80: 4e 41 4d 45 22 5d 29 2c 20 73 74 72 43 6f 6c 75  NAME"]), strColu
df90: 6d 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  mn, StringCompar
dfa0: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
dfb0: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
dfd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dfe0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
dff0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47            // BUG
e000: 46 49 58 3a 20 4d 61 6b 65 20 73 75 72 65 20 74  FIX: Make sure t
e010: 68 61 74 20 77 65 20 6f 6e 6c 79 20 66 6c 61 67  hat we only flag
e020: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 61 73 20   this column as 
e030: 22 75 6e 69 71 75 65 22 0d 0a 20 20 20 20 20 20  "unique"..      
e040: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
e050: 20 20 20 20 20 20 20 69 66 20 77 65 20 61 72 65         if we are
e060: 20 6e 6f 74 20 70 72 6f 63 65 73 73 69 6e 67 20   not processing 
e070: 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20  of some kind of 
e080: 6d 75 6c 74 69 2d 74 61 62 6c 65 0d 0a 20 20 20  multi-table..   
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e0a0: 2f 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 72  /         constr
e0b0: 75 63 74 20 28 69 2e 65 2e 20 61 20 6a 6f 69 6e  uct (i.e. a join
e0c0: 29 20 62 65 63 61 75 73 65 20 69 6e 20 74 68 61  ) because in tha
e0d0: 74 20 63 61 73 65 20 77 65 20 6d 75 73 74 0d 0a  t case we must..
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0f0: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 61 6c 6c    //         all
e100: 6f 77 20 64 75 70 6c 69 63 61 74 65 20 76 61 6c  ow duplicate val
e110: 75 65 73 20 28 72 65 66 65 72 20 74 6f 20 74 69  ues (refer to ti
e120: 63 6b 65 74 20 5b 37 65 33 66 61 39 33 37 34 34  cket [7e3fa93744
e130: 5d 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ])...           
e140: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
e150: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e160: 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73  (parentToColumns
e170: 2e 43 6f 75 6e 74 20 3d 3d 20 31 20 26 26 20 74  .Count == 1 && t
e180: 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52  blIndexColumns.R
e190: 6f 77 73 2e 43 6f 75 6e 74 20 3d 3d 20 31 20 26  ows.Count == 1 &
e1a0: 26 20 61 6c 6c 6f 77 44 62 4e 75 6c 6c 20 3d 3d  & allowDbNull ==
e1b0: 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 20   false)..       
e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
e1d0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
e1e0: 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 20 3d 20 72  mn.IsUnique] = r
e1f0: 6f 77 49 6e 64 65 78 65 73 5b 22 55 4e 49 51 55  owIndexes["UNIQU
e200: 45 22 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  E"];....        
e210: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20            // If 
e220: 69 74 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70  its an integer p
e230: 72 69 6d 61 72 79 20 6b 65 79 20 61 6e 64 20 74  rimary key and t
e240: 68 65 20 6f 6e 6c 79 20 70 72 69 6d 61 72 79 20  he only primary 
e250: 6b 65 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65  key in the table
e260: 2c 20 74 68 65 6e 20 69 74 73 20 61 20 72 6f 77  , then its a row
e270: 69 64 20 61 6c 69 61 73 20 61 6e 64 20 69 73 20  id alias and is 
e280: 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0d 0a 20  autoincrement.. 
e290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2a0: 20 2f 2f 20 4e 4f 54 45 3a 20 20 43 75 72 72 65   // NOTE:  Curre
e2b0: 6e 74 6c 79 20 63 6f 6d 6d 65 6e 74 65 64 20 6f  ntly commented o
e2c0: 75 74 20 62 65 63 61 75 73 65 20 74 68 69 73 20  ut because this 
e2d0: 69 73 20 6e 6f 74 20 61 6c 77 61 79 73 20 74 68  is not always th
e2e0: 65 20 64 65 73 69 72 65 64 20 62 65 68 61 76 69  e desired behavi
e2f0: 6f 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  or.  For example
e300: 2c 20 61 20 31 3a 31 20 72 65 6c 61 74 69 6f 6e  , a 1:1 relation
e310: 73 68 69 70 20 77 69 74 68 0d 0a 20 20 20 20 20  ship with..     
e320: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
e330: 20 20 20 20 20 20 20 61 6e 6f 74 68 65 72 20 74         another t
e340: 61 62 6c 65 2c 20 77 68 65 72 65 20 74 68 65 20  able, where the 
e350: 6f 74 68 65 72 20 74 61 62 6c 65 20 69 73 20 61  other table is a
e360: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 2c 20 62 75  utoincrement, bu
e370: 74 20 74 68 69 73 20 6f 6e 65 20 69 73 20 6e 6f  t this one is no
e380: 74 2c 20 61 6e 64 20 75 73 65 73 20 74 68 65 20  t, and uses the 
e390: 72 6f 77 69 64 20 66 72 6f 6d 20 74 68 65 20 6f  rowid from the o
e3a0: 74 68 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  ther...         
e3b0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
e3c0: 20 20 20 49 74 20 69 73 20 73 61 66 65 72 20 74     It is safer t
e3d0: 6f 20 6f 6e 6c 79 20 73 65 74 20 41 75 74 6f 69  o only set Autoi
e3e0: 6e 63 72 65 6d 65 6e 74 20 6f 6e 20 74 61 62 6c  ncrement on tabl
e3f0: 65 73 20 77 68 65 72 65 20 77 65 27 72 65 20 53  es where we're S
e400: 55 52 45 20 74 68 65 20 75 73 65 72 20 73 70 65  URE the user spe
e410: 63 69 66 69 65 64 20 41 55 54 4f 49 4e 43 52 45  cified AUTOINCRE
e420: 4d 45 4e 54 2c 20 65 76 65 6e 20 69 66 20 69 74  MENT, even if it
e430: 73 20 61 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e  s a rowid column
e440: 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
e450: 20 20 20 20 20 20 20 69 66 20 28 74 62 6c 49 6e         if (tblIn
e460: 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73 2e  dexColumns.Rows.
e470: 43 6f 75 6e 74 20 3d 3d 20 31 20 26 26 20 28 62  Count == 1 && (b
e480: 6f 6f 6c 29 72 6f 77 49 6e 64 65 78 65 73 5b 22  ool)rowIndexes["
e490: 50 52 49 4d 41 52 59 5f 4b 45 59 22 5d 20 3d 3d  PRIMARY_KEY"] ==
e4a0: 20 74 72 75 65 20 26 26 20 53 74 72 69 6e 67 2e   true && String.
e4b0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61  IsNullOrEmpty(da
e4c0: 74 61 54 79 70 65 29 20 3d 3d 20 66 61 6c 73 65  taType) == false
e4d0: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
e4e0: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
e4f0: 43 6f 6d 70 61 72 65 28 64 61 74 61 54 79 70 65  Compare(dataType
e500: 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 53 74 72  , "integer", Str
e510: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
e520: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
e530: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
e540: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e560: 20 2f 2f 20 20 72 6f 77 5b 53 63 68 65 6d 61 54   //  row[SchemaT
e570: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
e580: 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65  mn.IsAutoIncreme
e590: 6e 74 5d 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  nt] = true;..   
e5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
e5b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e5c0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
e5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
e5f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e600: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
e610: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
e620: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
e630: 74 79 28 64 61 74 61 54 79 70 65 29 29 0d 0a 20  ty(dataType)).. 
e640: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e650: 20 20 20 20 20 20 20 20 54 79 70 65 41 66 66 69          TypeAffi
e660: 6e 69 74 79 20 61 66 66 69 6e 20 3d 20 54 79 70  nity affin = Typ
e670: 65 41 66 66 69 6e 69 74 79 2e 55 6e 69 6e 69 74  eAffinity.Uninit
e680: 69 61 6c 69 7a 65 64 3b 0d 0a 20 20 20 20 20 20  ialized;..      
e690: 20 20 20 20 20 20 64 61 74 61 54 79 70 65 20 3d        dataType =
e6a0: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
e6b0: 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70  t._sql.ColumnTyp
e6c0: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
e6d0: 6e 74 2c 20 6e 2c 20 72 65 66 20 61 66 66 69 6e  nt, n, ref affin
e6e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
e6f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
e700: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
e710: 45 6d 70 74 79 28 64 61 74 61 54 79 70 65 29 20  Empty(dataType) 
e720: 3d 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20  == false)..     
e730: 20 20 20 20 20 20 20 72 6f 77 5b 22 44 61 74 61         row["Data
e740: 54 79 70 65 4e 61 6d 65 22 5d 20 3d 20 64 61 74  TypeName"] = dat
e750: 61 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20 20  aType;..        
e760: 7d 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 52  }..        tbl.R
e770: 6f 77 73 2e 41 64 64 28 72 6f 77 29 3b 0d 0a 20  ows.Add(row);.. 
e780: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
e790: 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20  if (_keyInfo != 
e7a0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 5f  null)..        _
e7b0: 6b 65 79 49 6e 66 6f 2e 41 70 70 65 6e 64 53 63  keyInfo.AppendSc
e7c0: 68 65 6d 61 54 61 62 6c 65 28 74 62 6c 29 3b 0d  hemaTable(tbl);.
e7d0: 0a 0d 0a 20 20 20 20 20 20 74 62 6c 2e 41 63 63  ...      tbl.Acc
e7e0: 65 70 74 43 68 61 6e 67 65 73 28 29 3b 0d 0a 20  eptChanges();.. 
e7f0: 20 20 20 20 20 74 62 6c 2e 45 6e 64 4c 6f 61 64       tbl.EndLoad
e800: 44 61 74 61 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Data();....     
e810: 20 72 65 74 75 72 6e 20 74 62 6c 3b 0d 0a 20 20   return tbl;..  
e820: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
e830: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
e840: 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20  / Retrieves the 
e850: 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73 74 72 69  column as a stri
e860: 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ng..    /// </su
e870: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
e880: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
e890: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
e8a0: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
e8b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
e8c0: 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72  ns>string</retur
e8d0: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
e8e0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
e8f0: 47 65 74 53 74 72 69 6e 67 28 69 6e 74 20 69 29  GetString(int i)
e900: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
e910: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
e920: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
e930: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
e940: 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
e950: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
e960: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
e970: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
e980: 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51  Callbacks) == SQ
e990: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
e9a0: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
e9b0: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
e9c0: 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  cks)..        {.
e9d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
e9e0: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
e9f0: 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53  ue value = new S
ea00: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
ea10: 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  alue();..       
ea20: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65       bool comple
ea30: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
ea40: 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c     InvokeReadVal
ea50: 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65  ueCallback(i, ne
ea60: 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75  w SQLiteReadValu
ea70: 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  eEventArgs(..   
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
ea90: 74 53 74 72 69 6e 67 22 2c 20 6e 75 6c 6c 2c 20  tString", null, 
eaa0: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
eab0: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
eac0: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
ead0: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
eae0: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
eaf0: 65 2e 53 74 72 69 6e 67 56 61 6c 75 65 3b 0d 0a  e.StringValue;..
eb00: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
eb10: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
eb20: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
eb30: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
eb40: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
eb50: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
eb60: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 53 74 72 69  _keyInfo.GetStri
eb70: 6e 67 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  ng(i - PrivateVi
eb80: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
eb90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
eba0: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
ebb0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
ebc0: 2e 4e 6f 56 65 72 69 66 79 54 65 78 74 41 66 66  .NoVerifyTextAff
ebd0: 69 6e 69 74 79 29 20 21 3d 20 53 51 4c 69 74 65  inity) != SQLite
ebe0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
ebf0: 4e 6f 56 65 72 69 66 79 54 65 78 74 41 66 66 69  NoVerifyTextAffi
ec00: 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 20  nity)..         
ec10: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
ec20: 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 3b   DbType.String);
ec30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
ec40: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
ec50: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74  ent._sql.GetText
ec60: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
ec70: 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  t, i);..    }...
ec80: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
ec90: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  y>..    /// Retr
eca0: 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  ieves the column
ecb0: 20 61 73 20 61 6e 20 6f 62 6a 65 63 74 20 63 6f   as an object co
ecc0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74  rresponding to t
ecd0: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61  he underlying da
ece0: 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f  tatype of the co
ecf0: 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  lumn..    /// </
ed00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
ed10: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
ed20: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
ed30: 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
ed40: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
ed50: 75 72 6e 73 3e 6f 62 6a 65 63 74 3c 2f 72 65 74  urns>object</ret
ed60: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
ed70: 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63  c override objec
ed80: 74 20 47 65 74 56 61 6c 75 65 28 69 6e 74 20 69  t GetValue(int i
ed90: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
eda0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
edb0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
edc0: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
edd0: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
ede0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
edf0: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
ee00: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
ee10: 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53  eCallbacks) == S
ee20: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
ee30: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
ee40: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
ee50: 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  acks)..        {
ee60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
ee70: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
ee80: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
ee90: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
eea0: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
eeb0: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
eec0: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
eed0: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
eee0: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
eef0: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
ef00: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
ef10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
ef20: 65 74 56 61 6c 75 65 22 2c 20 6e 75 6c 6c 2c 20  etValue", null, 
ef30: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
ef40: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
ef50: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
ef60: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
ef70: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
ef80: 65 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  e.Value;..      
ef90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
efa0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
efb0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
efc0: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
efd0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
efe0: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
eff0: 66 6f 2e 47 65 74 56 61 6c 75 65 28 69 20 2d 20  fo.GetValue(i - 
f000: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
f010: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
f020: 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65        SQLiteType
f030: 20 74 79 70 20 3d 20 47 65 74 53 51 4c 69 74 65   typ = GetSQLite
f040: 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 69 29 3b  Type(_flags, i);
f050: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
f060: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
f070: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
f080: 2e 44 65 74 65 63 74 54 65 78 74 41 66 66 69 6e  .DetectTextAffin
f090: 69 74 79 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ity) == SQLiteCo
f0a0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65  nnectionFlags.De
f0b0: 74 65 63 74 54 65 78 74 41 66 66 69 6e 69 74 79  tectTextAffinity
f0c0: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
f0d0: 20 20 28 28 74 79 70 20 3d 3d 20 6e 75 6c 6c 29    ((typ == null)
f0e0: 20 7c 7c 20 28 74 79 70 2e 41 66 66 69 6e 69 74   || (typ.Affinit
f0f0: 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74  y == TypeAffinit
f100: 79 2e 54 65 78 74 29 29 29 0d 0a 20 20 20 20 20  y.Text)))..     
f110: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f120: 20 20 74 79 70 20 3d 20 47 65 74 53 51 4c 69 74    typ = GetSQLit
f130: 65 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20  eType(..        
f140: 20 20 20 20 20 20 20 20 74 79 70 2c 20 5f 61 63          typ, _ac
f150: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
f160: 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69  ql.GetText(_acti
f170: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29  veStatement, i))
f180: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
f190: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28        else if ((
f1a0: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
f1b0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
f1c0: 44 65 74 65 63 74 53 74 72 69 6e 67 54 79 70 65  DetectStringType
f1d0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
f1e0: 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63  ctionFlags.Detec
f1f0: 74 53 74 72 69 6e 67 54 79 70 65 29 20 26 26 0d  tStringType) &&.
f200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 28 74  .            ((t
f210: 79 70 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 53  yp == null) || S
f220: 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 49 73 53  QLiteConvert.IsS
f230: 74 72 69 6e 67 44 62 54 79 70 65 28 74 79 70 2e  tringDbType(typ.
f240: 54 79 70 65 29 29 29 0d 0a 20 20 20 20 20 20 20  Type)))..       
f250: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f260: 74 79 70 20 3d 20 47 65 74 53 51 4c 69 74 65 54  typ = GetSQLiteT
f270: 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ype(..          
f280: 20 20 20 20 20 20 74 79 70 2c 20 5f 61 63 74 69        typ, _acti
f290: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
f2a0: 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65  .GetText(_active
f2b0: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d  Statement, i));.
f2c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
f2d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
f2e0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
f2f0: 71 6c 2e 47 65 74 56 61 6c 75 65 28 5f 61 63 74  ql.GetValue(_act
f300: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 5f 66  iveStatement, _f
f310: 6c 61 67 73 2c 20 69 2c 20 74 79 70 29 3b 0d 0a  lags, i, typ);..
f320: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
f330: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
f340: 2f 2f 2f 20 52 65 74 72 65 69 76 65 73 20 74 68  /// Retreives th
f350: 65 20 76 61 6c 75 65 73 20 6f 66 20 6d 75 6c 74  e values of mult
f360: 69 70 6c 65 20 63 6f 6c 75 6d 6e 73 2c 20 75 70  iple columns, up
f370: 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66 20   to the size of 
f380: 74 68 65 20 73 75 70 70 6c 69 65 64 20 61 72 72  the supplied arr
f390: 61 79 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ay..    /// </su
f3a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
f3b0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
f3c0: 75 65 73 22 3e 54 68 65 20 61 72 72 61 79 20 74  ues">The array t
f3d0: 6f 20 66 69 6c 6c 20 77 69 74 68 20 76 61 6c 75  o fill with valu
f3e0: 65 73 20 66 72 6f 6d 20 74 68 65 20 63 6f 6c 75  es from the colu
f3f0: 6d 6e 73 20 69 6e 20 74 68 65 20 63 75 72 72 65  mns in the curre
f400: 6e 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 70 61  nt resultset</pa
f410: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
f420: 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65  eturns>The numbe
f430: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74  r of columns ret
f440: 72 69 65 76 65 64 3c 2f 72 65 74 75 72 6e 73 3e  rieved</returns>
f450: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
f460: 72 72 69 64 65 20 69 6e 74 20 47 65 74 56 61 6c  rride int GetVal
f470: 75 65 73 28 6f 62 6a 65 63 74 5b 5d 20 76 61 6c  ues(object[] val
f480: 75 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ues)..    {..   
f490: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
f4a0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74  ();....      int
f4b0: 20 6e 4d 61 78 20 3d 20 46 69 65 6c 64 43 6f 75   nMax = FieldCou
f4c0: 6e 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 76  nt;..      if (v
f4d0: 61 6c 75 65 73 2e 4c 65 6e 67 74 68 20 3c 20 6e  alues.Length < n
f4e0: 4d 61 78 29 20 6e 4d 61 78 20 3d 20 76 61 6c 75  Max) nMax = valu
f4f0: 65 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  es.Length;....  
f500: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d      for (int n =
f510: 20 30 3b 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e 2b   0; n < nMax; n+
f520: 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  +)..      {..   
f530: 20 20 20 20 20 76 61 6c 75 65 73 5b 6e 5d 20 3d       values[n] =
f540: 20 47 65 74 56 61 6c 75 65 28 6e 29 3b 0d 0a 20   GetValue(n);.. 
f550: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f560: 72 65 74 75 72 6e 20 6e 4d 61 78 3b 0d 0a 20 20  return nMax;..  
f570: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
f580: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
f590: 2f 20 52 65 74 75 72 6e 73 20 61 20 63 6f 6c 6c  / Returns a coll
f5a0: 65 63 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 69 6e  ection containin
f5b0: 67 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e  g all the column
f5c0: 20 6e 61 6d 65 73 20 61 6e 64 20 76 61 6c 75 65   names and value
f5d0: 73 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f  s for the..    /
f5e0: 2f 2f 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f  // current row o
f5f0: 66 20 64 61 74 61 20 69 6e 20 74 68 65 20 63 75  f data in the cu
f600: 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 2c  rrent resultset,
f610: 20 69 66 20 61 6e 79 2e 20 20 49 66 20 74 68 65   if any.  If the
f620: 72 65 20 69 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f  re is no..    //
f630: 2f 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 72  / current row or
f640: 20 6e 6f 20 63 75 72 72 65 6e 74 20 72 65 73 75   no current resu
f650: 6c 74 73 65 74 2c 20 61 6e 20 65 78 63 65 70 74  ltset, an except
f660: 69 6f 6e 20 6d 61 79 20 62 65 20 74 68 72 6f 77  ion may be throw
f670: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
f680: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
f690: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
f6a0: 2f 2f 20 54 68 65 20 63 6f 6c 6c 65 63 74 69 6f  // The collectio
f6b0: 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  n containing the
f6c0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 61 6e 64   column name and
f6d0: 20 76 61 6c 75 65 20 69 6e 66 6f 72 6d 61 74 69   value informati
f6e0: 6f 6e 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  on for the..    
f6f0: 2f 2f 2f 20 63 75 72 72 65 6e 74 20 72 6f 77 20  /// current row 
f700: 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65 20 63  of data in the c
f710: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
f720: 20 6f 72 20 6e 75 6c 6c 20 69 66 20 74 68 69 73   or null if this
f730: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0d 0a 20 20   information..  
f740: 20 20 2f 2f 2f 20 63 61 6e 6e 6f 74 20 62 65 20    /// cannot be 
f750: 6f 62 74 61 69 6e 65 64 2e 0d 0a 20 20 20 20 2f  obtained...    /
f760: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
f770: 20 20 20 70 75 62 6c 69 63 20 4e 61 6d 65 56 61     public NameVa
f780: 6c 75 65 43 6f 6c 6c 65 63 74 69 6f 6e 20 47 65  lueCollection Ge
f790: 74 56 61 6c 75 65 73 28 29 0d 0a 20 20 20 20 7b  tValues()..    {
f7a0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
f7b0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
f7c0: 20 20 20 20 20 20 69 66 20 28 28 5f 61 63 74 69        if ((_acti
f7d0: 76 65 53 74 61 74 65 6d 65 6e 74 20 3d 3d 20 6e  veStatement == n
f7e0: 75 6c 6c 29 20 7c 7c 20 28 5f 61 63 74 69 76 65  ull) || (_active
f7f0: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 20 3d  Statement._sql =
f800: 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
f810: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
f820: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
f830: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a  Exception();....
f840: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 4d 61 78          int nMax
f850: 20 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c   = PrivateVisibl
f860: 65 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20  eFieldCount;..  
f870: 20 20 20 20 20 20 4e 61 6d 65 56 61 6c 75 65 43        NameValueC
f880: 6f 6c 6c 65 63 74 69 6f 6e 20 72 65 73 75 6c 74  ollection result
f890: 20 3d 20 6e 65 77 20 4e 61 6d 65 56 61 6c 75 65   = new NameValue
f8a0: 43 6f 6c 6c 65 63 74 69 6f 6e 28 6e 4d 61 78 29  Collection(nMax)
f8b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  ;....        for
f8c0: 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
f8d0: 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20   nMax; n++)..   
f8e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f8f0: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 20      string name 
f900: 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  = _activeStateme
f910: 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e 61  nt._sql.ColumnNa
f920: 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  me(_activeStatem
f930: 65 6e 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20  ent, n);..      
f940: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
f950: 75 65 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74  ue = _activeStat
f960: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65  ement._sql.GetTe
f970: 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  xt(_activeStatem
f980: 65 6e 74 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ent, n);....    
f990: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
f9a0: 64 64 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b  dd(name, value);
f9b0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
f9c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
f9d0: 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sult;..    }....
f9e0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
f9f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
fa00: 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20 72  ns True if the r
fa10: 65 73 75 6c 74 73 65 74 20 68 61 73 20 72 6f 77  esultset has row
fa20: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 66 65  s that can be fe
fa30: 74 63 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tched..    /// <
fa40: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
fa50: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62  ublic override b
fa60: 6f 6f 6c 20 48 61 73 52 6f 77 73 0d 0a 20 20 20  ool HasRows..   
fa70: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
fa80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fa90: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
faa0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 43  ..        CheckC
fab0: 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  losed();....    
fac0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
fad0: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
fae0: 22 73 74 69 63 6b 79 22 20 66 6c 61 67 20 68 61  "sticky" flag ha
faf0: 73 20 62 65 65 6e 20 73 65 74 2c 20 75 73 65 20  s been set, use 
fb00: 74 68 65 20 6e 65 77 20 62 65 68 61 76 69 6f 72  the new behavior
fb10: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  ,..        //   
fb20: 20 20 20 20 77 68 69 63 68 20 72 65 74 75 72 6e      which return
fb30: 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  s non-zero if th
fb40: 65 72 65 20 77 65 72 65 20 65 76 65 72 20 61 6e  ere were ever an
fb50: 79 20 72 6f 77 73 20 69 6e 0d 0a 20 20 20 20 20  y rows in..     
fb60: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
fb70: 61 73 73 6f 63 69 61 74 65 64 20 72 65 73 75 6c  associated resul
fb80: 74 20 73 65 74 73 2e 20 20 47 65 6e 65 72 61 6c  t sets.  General
fb90: 6c 79 2c 20 74 68 69 73 20 66 6c 61 67 20 69 73  ly, this flag is
fba0: 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f   only..        /
fbb0: 2f 20 20 20 20 20 20 20 75 73 65 66 75 6c 20 77  /       useful w
fbc0: 68 65 6e 20 69 74 20 69 73 20 6e 65 63 65 73 73  hen it is necess
fbd0: 61 72 79 20 74 6f 20 72 65 74 61 69 6e 20 63 6f  ary to retain co
fbe0: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
fbf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
fc00: 20 20 20 6f 74 68 65 72 20 41 44 4f 2e 4e 45 54     other ADO.NET
fc10: 20 70 72 6f 76 69 64 65 72 73 20 74 68 61 74 20   providers that 
fc20: 75 73 65 20 74 68 65 73 65 20 73 61 6d 65 20 73  use these same s
fc30: 65 6d 61 6e 74 69 63 73 20 66 6f 72 0d 0a 20 20  emantics for..  
fc40: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
fc50: 68 65 20 48 61 73 52 6f 77 73 20 70 72 6f 70 65  he HasRows prope
fc60: 72 74 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rty...        //
fc70: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
fc80: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
fc90: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 53 74  nnectionFlags.St
fca0: 69 63 6b 79 48 61 73 52 6f 77 73 29 20 3d 3d 20  ickyHasRows) == 
fcb0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
fcc0: 46 6c 61 67 73 2e 53 74 69 63 6b 79 48 61 73 52  Flags.StickyHasR
fcd0: 6f 77 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ows)..          
fce0: 72 65 74 75 72 6e 20 28 28 5f 72 65 61 64 69 6e  return ((_readin
fcf0: 67 53 74 61 74 65 20 21 3d 20 31 29 20 7c 7c 20  gState != 1) || 
fd00: 28 5f 73 74 65 70 43 6f 75 6e 74 20 3e 20 30 29  (_stepCount > 0)
fd10: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
fd20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
fd30: 45 3a 20 54 68 69 73 20 69 73 20 74 68 65 20 64  E: This is the d
fd40: 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72 2e  efault behavior.
fd50: 20 20 49 74 20 72 65 74 75 72 6e 73 20 6e 6f 6e    It returns non
fd60: 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 0d 0a 20  -zero only if.. 
fd70: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
fd80: 6d 6f 72 65 20 72 6f 77 73 20 61 72 65 20 61 76  more rows are av
fd90: 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e 20 61 20  ailable (i.e. a 
fda0: 63 61 6c 6c 20 74 6f 20 74 68 65 20 52 65 61 64  call to the Read
fdb0: 20 6d 65 74 68 6f 64 20 69 73 0d 0a 20 20 20 20   method is..    
fdc0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 70      //       exp
fdd0: 65 63 74 65 64 20 74 6f 20 73 75 63 63 65 65 64  ected to succeed
fde0: 29 2e 20 20 50 72 69 6f 72 20 74 6f 20 74 68 65  ).  Prior to the
fdf0: 20 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 6f 66   introduction of
fe00: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
fe10: 20 20 20 20 20 20 20 22 73 74 69 63 6b 79 22 20         "sticky" 
fe20: 66 6c 61 67 2c 20 74 68 69 73 20 69 73 20 68 6f  flag, this is ho
fe30: 77 20 74 68 69 73 20 70 72 6f 70 65 72 74 79 20  w this property 
fe40: 68 61 73 20 61 6c 77 61 79 73 20 77 6f 72 6b 65  has always worke
fe50: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  d...        //..
fe60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
fe70: 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 21 3d  _readingState !=
fe80: 20 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20   1);..      }.. 
fe90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
fea0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
feb0: 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75 65 20  // Returns True 
fec0: 69 66 20 74 68 65 20 64 61 74 61 20 72 65 61 64  if the data read
fed0: 65 72 20 69 73 20 63 6c 6f 73 65 64 0d 0a 20 20  er is closed..  
fee0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
fef0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
ff00: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 43 6c 6f  rride bool IsClo
ff10: 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  sed..    {..    
ff20: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
ff30: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
ff40: 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d 20 6e 75 6c  (_command == nul
ff50: 6c 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  l); }..    }....
ff60: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
ff70: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
ff80: 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20 73  ns True if the s
ff90: 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20  pecified column 
ffa0: 69 73 20 6e 75 6c 6c 0d 0a 20 20 20 20 2f 2f 2f  is null..    ///
ffb0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
ffc0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
ffd0: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
ffe0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
fff0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
10000 72 65 74 75 72 6e 73 3e 54 72 75 65 20 6f 72 20  returns>True or 
10010 46 61 6c 73 65 3c 2f 72 65 74 75 72 6e 73 3e 0d  False</returns>.
10020 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
10030 72 69 64 65 20 62 6f 6f 6c 20 49 73 44 42 4e 75  ride bool IsDBNu
10040 6c 6c 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  ll(int i)..    {
10050 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
10060 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
10070 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74      VerifyForGet
10080 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
10090 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
100a0 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
100b0 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
100c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
100d0 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
100e0 66 6f 2e 49 73 44 42 4e 75 6c 6c 28 69 20 2d 20  fo.IsDBNull(i - 
100f0 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
10100 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
10110 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
10120 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
10130 71 6c 2e 49 73 4e 75 6c 6c 28 5f 61 63 74 69 76  ql.IsNull(_activ
10140 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d  eStatement, i);.
10150 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
10160 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
10170 20 2f 2f 2f 20 4d 6f 76 65 73 20 74 6f 20 74 68   /// Moves to th
10180 65 20 6e 65 78 74 20 72 65 73 75 6c 74 73 65 74  e next resultset
10190 20 69 6e 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77   in multiple row
101a0 2d 72 65 74 75 72 6e 69 6e 67 20 53 51 4c 20 63  -returning SQL c
101b0 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f  ommand...    ///
101c0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
101d0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72   /// <returns>Tr
101e0 75 65 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e  ue if the comman
101f0 64 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  d was successful
10200 20 61 6e 64 20 61 20 6e 65 77 20 72 65 73 75 6c   and a new resul
10210 74 73 65 74 20 69 73 20 61 76 61 69 6c 61 62 6c  tset is availabl
10220 65 2c 20 46 61 6c 73 65 20 6f 74 68 65 72 77 69  e, False otherwi
10230 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  se.</returns>.. 
10240 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
10250 64 65 20 62 6f 6f 6c 20 4e 65 78 74 52 65 73 75  de bool NextResu
10260 6c 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lt()..    {..   
10270 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
10280 28 29 3b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b  ();..      Check
10290 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  Closed();..     
102a0 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73   if (_throwOnDis
102b0 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d  posed) SQLiteCom
102c0 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d  mand.Check(_comm
102d0 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53  and);....      S
102e0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
102f0 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  tmt = null;..   
10300 20 20 20 69 6e 74 20 66 69 65 6c 64 43 6f 75 6e     int fieldCoun
10310 74 3b 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20 73  t;..      bool s
10320 63 68 65 6d 61 4f 6e 6c 79 20 3d 20 28 28 5f 63  chemaOnly = ((_c
10330 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26  ommandBehavior &
10340 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72   CommandBehavior
10350 2e 53 63 68 65 6d 61 4f 6e 6c 79 29 20 21 3d 20  .SchemaOnly) != 
10360 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69  0);....      whi
10370 6c 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20  le (true)..     
10380 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
10390 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c 20 26 26 20  stmt == null && 
103a0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
103b0 20 21 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74   != null && _act
103c0 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
103d0 6c 20 21 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63  l != null && _ac
103e0 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
103f0 71 6c 2e 49 73 4f 70 65 6e 28 29 29 0d 0a 20 20  ql.IsOpen())..  
10400 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10410 20 20 20 2f 2f 20 52 65 73 65 74 20 74 68 65 20     // Reset the 
10420 70 72 65 76 69 6f 75 73 6c 79 2d 65 78 65 63 75  previously-execu
10430 74 65 64 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20  ted statement.. 
10440 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73 63           if (!sc
10450 68 65 6d 61 4f 6e 6c 79 29 20 5f 61 63 74 69 76  hemaOnly) _activ
10460 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
10470 52 65 73 65 74 28 5f 61 63 74 69 76 65 53 74 61  Reset(_activeSta
10480 74 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  tement);....    
10490 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 72        // If we'r
104a0 65 20 6f 6e 6c 79 20 73 75 70 70 6f 73 65 64 20  e only supposed 
104b0 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e 67  to return a sing
104c0 6c 65 20 72 6f 77 73 65 74 2c 20 73 74 65 70 20  le rowset, step 
104d0 74 68 72 6f 75 67 68 20 61 6c 6c 20 72 65 6d 61  through all rema
104e0 69 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73  ining statements
104f0 20 6f 6e 63 65 20 75 6e 74 69 6c 0d 0a 20 20 20   once until..   
10500 20 20 20 20 20 20 20 2f 2f 20 74 68 65 79 20 61         // they a
10510 72 65 20 61 6c 6c 20 64 6f 6e 65 20 61 6e 64 20  re all done and 
10520 72 65 74 75 72 6e 20 66 61 6c 73 65 20 74 6f 20  return false to 
10530 69 6e 64 69 63 61 74 65 20 6e 6f 20 6d 6f 72 65  indicate no more
10540 20 72 65 73 75 6c 74 73 65 74 73 20 65 78 69 73   resultsets exis
10550 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  t...          if
10560 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
10570 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
10580 61 76 69 6f 72 2e 53 69 6e 67 6c 65 52 65 73 75  avior.SingleResu
10590 6c 74 29 20 21 3d 20 30 29 0d 0a 20 20 20 20 20  lt) != 0)..     
105a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
105b0 20 20 20 20 66 6f 72 20 28 3b 20 3b 20 29 0d 0a      for (; ; )..
105c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d               stm
105e0 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74  t = _command.Get
105f0 53 74 61 74 65 6d 65 6e 74 28 5f 61 63 74 69 76  Statement(_activ
10600 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 20  eStatementIndex 
10610 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  + 1);..         
10620 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d 3d       if (stmt ==
10630 20 6e 75 6c 6c 29 20 62 72 65 61 6b 3b 0d 0a 20   null) break;.. 
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 61 63               _ac
10650 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64  tiveStatementInd
10660 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ex++;....       
10670 20 20 20 20 20 20 20 69 66 20 28 21 73 63 68 65         if (!sche
10680 6d 61 4f 6e 6c 79 20 26 26 20 73 74 6d 74 2e 5f  maOnly && stmt._
10690 73 71 6c 2e 53 74 65 70 28 73 74 6d 74 29 29 20  sql.Step(stmt)) 
106a0 5f 73 74 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 20  _stepCount++;.. 
106b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
106c0 28 73 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d  (stmt._sql.Colum
106d0 6e 43 6f 75 6e 74 28 73 74 6d 74 29 20 3d 3d 20  nCount(stmt) == 
106e0 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
106f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10700 20 20 20 20 20 69 6e 74 20 63 68 61 6e 67 65 73       int changes
10710 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
10720 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64         bool read
10730 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  Only = false;.. 
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10750 66 20 28 73 74 6d 74 2e 54 72 79 47 65 74 43 68  f (stmt.TryGetCh
10760 61 6e 67 65 73 28 72 65 66 20 63 68 61 6e 67 65  anges(ref change
10770 73 2c 20 72 65 66 20 72 65 61 64 4f 6e 6c 79 29  s, ref readOnly)
10780 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10790 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
107a0 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61          if (!rea
107b0 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
107c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
107d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107e0 20 69 66 20 28 5f 72 6f 77 73 41 66 66 65 63 74   if (_rowsAffect
107f0 65 64 20 3d 3d 20 2d 31 29 20 5f 72 6f 77 73 41  ed == -1) _rowsA
10800 66 66 65 63 74 65 64 20 3d 20 30 3b 0d 0a 20 20  ffected = 0;..  
10810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10820 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20    _rowsAffected 
10830 2b 3d 20 63 68 61 6e 67 65 73 3b 0d 0a 20 20 20  += changes;..   
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
10850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10860 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
10870 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
10880 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
108b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
108c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
108d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
108e0 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79   if (!schemaOnly
108f0 29 20 73 74 6d 74 2e 5f 73 71 6c 2e 52 65 73 65  ) stmt._sql.Rese
10900 74 28 73 74 6d 74 29 3b 20 2f 2f 20 47 6f 74 74  t(stmt); // Gott
10910 61 20 72 65 73 65 74 20 61 66 74 65 72 20 65 76  a reset after ev
10920 65 72 79 20 73 74 65 70 20 74 6f 20 72 65 6c 65  ery step to rele
10930 61 73 65 20 61 6e 79 20 6c 6f 63 6b 73 20 61 6e  ase any locks an
10940 64 20 73 75 63 68 21 0d 0a 20 20 20 20 20 20 20  d such!..       
10950 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10960 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
10970 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
10980 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
10990 20 20 20 20 20 2f 2f 20 47 65 74 20 74 68 65 20       // Get the 
109a0 6e 65 78 74 20 73 74 61 74 65 6d 65 6e 74 20 74  next statement t
109b0 6f 20 65 78 65 63 75 74 65 0d 0a 20 20 20 20 20  o execute..     
109c0 20 20 20 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61     stmt = _comma
109d0 6e 64 2e 47 65 74 53 74 61 74 65 6d 65 6e 74 28  nd.GetStatement(
109e0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
109f0 49 6e 64 65 78 20 2b 20 31 29 3b 0d 0a 0d 0a 20  Index + 1);.... 
10a00 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27         // If we'
10a10 76 65 20 72 65 61 63 68 65 64 20 74 68 65 20 65  ve reached the e
10a20 6e 64 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d  nd of the statem
10a30 65 6e 74 73 2c 20 72 65 74 75 72 6e 20 66 61 6c  ents, return fal
10a40 73 65 2c 20 6e 6f 20 6d 6f 72 65 20 72 65 73 75  se, no more resu
10a50 6c 74 73 65 74 73 0d 0a 20 20 20 20 20 20 20 20  ltsets..        
10a60 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c  if (stmt == null
10a70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  )..          ret
10a80 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
10a90 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 20 77        // If we w
10aa0 65 72 65 20 6f 6e 20 61 20 63 75 72 72 65 6e 74  ere on a current
10ab0 20 72 65 73 75 6c 74 73 65 74 2c 20 73 65 74 20   resultset, set 
10ac0 74 68 65 20 73 74 61 74 65 20 74 6f 20 22 64 6f  the state to "do
10ad0 6e 65 20 72 65 61 64 69 6e 67 22 20 66 6f 72 20  ne reading" for 
10ae0 69 74 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  it..        if (
10af0 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3c 20  _readingState < 
10b00 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 72  1)..          _r
10b10 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b  eadingState = 1;
10b20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 61 63 74  ....        _act
10b30 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65  iveStatementInde
10b40 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x++;....        
10b50 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20 73 74 6d  fieldCount = stm
10b60 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f 75  t._sql.ColumnCou
10b70 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20  nt(stmt);....   
10b80 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20 73       // If the s
10b90 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 20  tatement is not 
10ba0 61 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  a select stateme
10bb0 6e 74 20 6f 72 20 77 65 27 72 65 20 6e 6f 74 20  nt or we're not 
10bc0 72 65 74 72 69 65 76 69 6e 67 20 73 63 68 65 6d  retrieving schem
10bd0 61 20 6f 6e 6c 79 2c 20 74 68 65 6e 20 70 65 72  a only, then per
10be0 66 6f 72 6d 20 74 68 65 20 69 6e 69 74 69 61 6c  form the initial
10bf0 20 73 74 65 70 0d 0a 20 20 20 20 20 20 20 20 69   step..        i
10c00 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 20 7c  f (!schemaOnly |
10c10 7c 20 28 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d  | (fieldCount ==
10c20 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d   0))..        {.
10c30 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21  .          if (!
10c40 73 63 68 65 6d 61 4f 6e 6c 79 20 26 26 20 73 74  schemaOnly && st
10c50 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28 73 74 6d  mt._sql.Step(stm
10c60 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  t))..          {
10c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 73  ..            _s
10c80 74 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20  tepCount++;..   
10c90 20 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e           _readin
10ca0 67 53 74 61 74 65 20 3d 20 2d 31 3b 0d 0a 20 20  gState = -1;..  
10cb0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
10cc0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 66 69       else if (fi
10cd0 65 6c 64 43 6f 75 6e 74 20 3d 3d 20 30 29 20 2f  eldCount == 0) /
10ce0 2f 20 4e 6f 20 72 6f 77 73 20 72 65 74 75 72 6e  / No rows return
10cf0 65 64 2c 20 69 66 20 66 69 65 6c 64 43 6f 75 6e  ed, if fieldCoun
10d00 74 20 69 73 20 7a 65 72 6f 2c 20 73 6b 69 70 20  t is zero, skip 
10d10 74 6f 20 74 68 65 20 6e 65 78 74 20 73 74 61 74  to the next stat
10d20 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  ement..         
10d30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10d40 69 6e 74 20 63 68 61 6e 67 65 73 20 3d 20 30 3b  int changes = 0;
10d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
10d60 6f 6c 20 72 65 61 64 4f 6e 6c 79 20 3d 20 66 61  ol readOnly = fa
10d70 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
10d80 20 20 69 66 20 28 73 74 6d 74 2e 54 72 79 47 65    if (stmt.TryGe
10d90 74 43 68 61 6e 67 65 73 28 72 65 66 20 63 68 61  tChanges(ref cha
10da0 6e 67 65 73 2c 20 72 65 66 20 72 65 61 64 4f 6e  nges, ref readOn
10db0 6c 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ly))..          
10dc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10dd0 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c 79     if (!readOnly
10de0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10df0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10e00 20 20 20 20 69 66 20 28 5f 72 6f 77 73 41 66 66      if (_rowsAff
10e10 65 63 74 65 64 20 3d 3d 20 2d 31 29 20 5f 72 6f  ected == -1) _ro
10e20 77 73 41 66 66 65 63 74 65 64 20 3d 20 30 3b 0d  wsAffected = 0;.
10e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10e40 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 2b   _rowsAffected +
10e50 3d 20 63 68 61 6e 67 65 73 3b 0d 0a 20 20 20 20  = changes;..    
10e60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
10e70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10e80 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
10e90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10ea0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10eb0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
10ec0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
10ed0 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61       if (!schema
10ee0 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f 73 71 6c 2e  Only) stmt._sql.
10ef0 52 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 20 20  Reset(stmt);..  
10f00 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
10f10 75 65 3b 20 2f 2f 20 53 6b 69 70 20 74 68 69 73  ue; // Skip this
10f20 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 6d 6f 76   command and mov
10f30 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 69  e to the next, i
10f40 74 20 77 61 73 20 6e 6f 74 20 61 20 72 6f 77 2d  t was not a row-
10f50 72 65 74 75 72 6e 69 6e 67 20 72 65 73 75 6c 74  returning result
10f60 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  set..          }
10f70 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
10f80 20 2f 2f 20 4e 6f 20 72 6f 77 73 2c 20 66 69 65   // No rows, fie
10f90 6c 64 43 6f 75 6e 74 20 69 73 20 6e 6f 6e 2d 7a  ldCount is non-z
10fa0 65 72 6f 20 73 6f 20 73 74 6f 70 20 68 65 72 65  ero so stop here
10fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
10fc0 20 20 20 20 20 20 20 20 20 20 20 5f 72 65 61 64             _read
10fd0 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f  ingState = 1; //
10fe0 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65   This command re
10ff0 74 75 72 6e 65 64 20 63 6f 6c 75 6d 6e 73 20 62  turned columns b
11000 75 74 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 72  ut no rows, so r
11010 65 74 75 72 6e 20 74 72 75 65 2c 20 62 75 74 20  eturn true, but 
11020 48 61 73 52 6f 77 73 20 3d 20 66 61 6c 73 65 20  HasRows = false 
11030 61 6e 64 20 52 65 61 64 28 29 20 72 65 74 75 72  and Read() retur
11040 6e 73 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  ns false..      
11050 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
11060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 41  ....        // A
11070 68 68 2c 20 77 65 20 66 6f 75 6e 64 20 61 20 72  hh, we found a r
11080 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 72 65 73  ow-returning res
11090 75 6c 74 73 65 74 20 65 6c 69 67 69 62 6c 65 20  ultset eligible 
110a0 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 21 0d  to be returned!.
110b0 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65  .        _active
110c0 53 74 61 74 65 6d 65 6e 74 20 3d 20 73 74 6d 74  Statement = stmt
110d0 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 69 65 6c  ;..        _fiel
110e0 64 43 6f 75 6e 74 20 3d 20 66 69 65 6c 64 43 6f  dCount = fieldCo
110f0 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66  unt;..        _f
11100 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20 6e 65  ieldIndexes = ne
11110 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72  w Dictionary<str
11120 69 6e 67 2c 20 69 6e 74 3e 28 53 74 72 69 6e 67  ing, int>(String
11130 43 6f 6d 70 61 72 65 72 2e 4f 72 64 69 6e 61 6c  Comparer.Ordinal
11140 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 20 20  IgnoreCase);..  
11150 20 20 20 20 20 20 5f 66 69 65 6c 64 54 79 70 65        _fieldType
11160 41 72 72 61 79 20 3d 20 6e 65 77 20 53 51 4c 69  Array = new SQLi
11170 74 65 54 79 70 65 5b 50 72 69 76 61 74 65 56 69  teType[PrivateVi
11180 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 5d  sibleFieldCount]
11190 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
111a0 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69  ((_commandBehavi
111b0 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61  or & CommandBeha
111c0 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 29 20 21 3d  vior.KeyInfo) !=
111d0 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 4c   0)..          L
111e0 6f 61 64 4b 65 79 49 6e 66 6f 28 29 3b 0d 0a 0d  oadKeyInfo();...
111f0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
11200 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  true;..      }..
11210 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
11220 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
11230 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
11240 61 74 74 65 6d 70 74 73 20 74 6f 20 71 75 65 72  attempts to quer
11250 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  y the database c
11260 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69  onnection associ
11270 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20 2f  ated with..    /
11280 2f 2f 20 74 68 65 20 64 61 74 61 20 72 65 61 64  // the data read
11290 65 72 20 69 6e 20 75 73 65 2e 20 20 49 66 20 74  er in use.  If t
112a0 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f  he underlying co
112b0 6d 6d 61 6e 64 20 6f 72 20 63 6f 6e 6e 65 63 74  mmand or connect
112c0 69 6f 6e 20 69 73 0d 0a 20 20 20 20 2f 2f 2f 20  ion is..    /// 
112d0 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 61 20 6e  unavailable, a n
112e0 75 6c 6c 20 76 61 6c 75 65 20 77 69 6c 6c 20 62  ull value will b
112f0 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20  e returned...   
11300 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
11310 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
11320 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  s>..    /// The 
11330 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
11340 74 20 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 69  t -OR- null if i
11350 74 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  t is unavailable
11360 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
11370 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
11380 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74  nal static SQLit
11390 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 47 65 74 43  eConnection GetC
113a0 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20  onnection(..    
113b0 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65      SQLiteDataRe
113c0 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72 0d  ader dataReader.
113d0 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
113e0 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  {..        try..
113f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11400 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61 52         if (dataR
11410 65 61 64 65 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a  eader != null)..
11420 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
11440 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
11450 6d 61 6e 64 20 3d 20 64 61 74 61 52 65 61 64 65  mand = dataReade
11460 72 2e 5f 63 6f 6d 6d 61 6e 64 3b 0d 0a 0d 0a 20  r._command;.... 
11470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11480 66 20 28 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75  f (command != nu
11490 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
114a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
114b0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
114c0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
114d0 6e 65 63 74 69 6f 6e 20 3d 20 63 6f 6d 6d 61 6e  nection = comman
114e0 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 3b 0d 0a 0d  d.Connection;...
114f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11500 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74       if (connect
11510 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion != null)..  
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11530 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6e        return con
11540 6e 65 63 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  nection;..      
11550 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11560 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11570 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63      }..        c
11580 61 74 63 68 20 28 4f 62 6a 65 63 74 44 69 73 70  atch (ObjectDisp
11590 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a  osedException)..
115a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
115b0 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
115c0 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
115d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
115e0 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 7d 0d  rn null;..    }.
115f0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
11600 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
11610 74 72 69 65 76 65 73 20 74 68 65 20 53 51 4c 69  trieves the SQLi
11620 74 65 54 79 70 65 20 66 6f 72 20 61 20 67 69 76  teType for a giv
11630 65 6e 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 72 6f  en column and ro
11640 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f  w value...    //
11650 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
11660 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
11670 65 3d 22 6f 6c 64 54 79 70 65 22 3e 0d 0a 20 20  e="oldType">..  
11680 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e    /// The origin
11690 61 6c 20 53 51 4c 69 74 65 54 79 70 65 20 73 74  al SQLiteType st
116a0 72 75 63 74 75 72 65 2c 20 62 61 73 65 64 20 6f  ructure, based o
116b0 6e 6c 79 20 6f 6e 20 74 68 65 20 63 6f 6c 75 6d  nly on the colum
116c0 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  n...    /// </pa
116d0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
116e0 61 72 61 6d 20 6e 61 6d 65 3d 22 74 65 78 74 22  aram name="text"
116f0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 74  >..    /// The t
11700 65 78 74 75 61 6c 20 76 61 6c 75 65 20 6f 66 20  extual value of 
11710 74 68 65 20 63 6f 6c 75 6d 6e 20 66 6f 72 20 61  the column for a
11720 20 67 69 76 65 6e 20 72 6f 77 2e 0d 0a 20 20 20   given row...   
11730 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
11740 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
11750 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 53 51  ..    /// The SQ
11760 4c 69 74 65 54 79 70 65 20 73 74 72 75 63 74 75  LiteType structu
11770 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  re...    /// </r
11780 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69  eturns>..    pri
11790 76 61 74 65 20 53 51 4c 69 74 65 54 79 70 65 20  vate SQLiteType 
117a0 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 0d 0a  GetSQLiteType(..
117b0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 54 79          SQLiteTy
117c0 70 65 20 6f 6c 64 54 79 70 65 2c 20 2f 2a 20 50  pe oldType, /* P
117d0 41 53 53 2d 54 48 52 4f 55 47 48 20 2a 2f 0d 0a  ASS-THROUGH */..
117e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
117f0 65 78 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ext..        )..
11800 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
11810 66 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  f (SQLiteConvert
11820 2e 4c 6f 6f 6b 73 4c 69 6b 65 4e 75 6c 6c 28 74  .LooksLikeNull(t
11830 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ext))..         
11840 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51     return new SQ
11850 4c 69 74 65 54 79 70 65 28 54 79 70 65 41 66 66  LiteType(TypeAff
11860 69 6e 69 74 79 2e 4e 75 6c 6c 2c 20 44 62 54 79  inity.Null, DbTy
11870 70 65 2e 4f 62 6a 65 63 74 29 3b 0d 0a 0d 0a 20  pe.Object);.... 
11880 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69 74         if (SQLit
11890 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69  eConvert.LooksLi
118a0 6b 65 49 6e 74 36 34 28 74 65 78 74 29 29 0d 0a  keInt64(text))..
118b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
118c0 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70  rn new SQLiteTyp
118d0 65 28 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49  e(TypeAffinity.I
118e0 6e 74 36 34 2c 20 44 62 54 79 70 65 2e 49 6e 74  nt64, DbType.Int
118f0 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
11900 69 66 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72  if (SQLiteConver
11910 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 44 6f 75 62 6c  t.LooksLikeDoubl
11920 65 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20  e(text))..      
11930 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
11940 20 53 51 4c 69 74 65 54 79 70 65 28 54 79 70 65   SQLiteType(Type
11950 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 2c  Affinity.Double,
11960 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b   DbType.Double);
11970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
11980 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
11990 74 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20  t != null) &&.. 
119a0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
119b0 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69  eConvert.LooksLi
119c0 6b 65 44 61 74 65 54 69 6d 65 28 5f 61 63 74 69  keDateTime(_acti
119d0 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
119e0 2c 20 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20  , text))..      
119f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11a00 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69   return new SQLi
11a10 74 65 54 79 70 65 28 54 79 70 65 41 66 66 69 6e  teType(TypeAffin
11a20 69 74 79 2e 44 61 74 65 54 69 6d 65 2c 20 44 62  ity.DateTime, Db
11a30 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29 3b 0d  Type.DateTime);.
11a40 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
11a50 20 20 20 20 20 20 72 65 74 75 72 6e 20 6f 6c 64        return old
11a60 54 79 70 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  Type;..    }....
11a70 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
11a80 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
11a90 65 76 65 73 20 74 68 65 20 53 51 4c 69 74 65 54  eves the SQLiteT
11aa0 79 70 65 20 66 6f 72 20 61 20 67 69 76 65 6e 20  ype for a given 
11ab0 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 63 61 63 68  column, and cach
11ac0 65 73 20 69 74 20 74 6f 20 61 76 6f 69 64 20 72  es it to avoid r
11ad0 65 70 65 74 65 74 69 76 65 20 69 6e 74 65 72 6f  epetetive intero
11ae0 70 20 63 61 6c 6c 73 2e 0d 0a 20 20 20 20 2f 2f  p calls...    //
11af0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
11b00 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
11b10 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c  e="flags">The fl
11b20 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
11b30 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63  ith the parent c
11b40 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74  onnection object
11b50 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
11b60 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
11b70 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
11b80 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
11b90 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
11ba0 74 75 72 6e 73 3e 41 20 53 51 4c 69 74 65 54 79  turns>A SQLiteTy
11bb0 70 65 20 73 74 72 75 63 74 75 72 65 3c 2f 72 65  pe structure</re
11bc0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76  turns>..    priv
11bd0 61 74 65 20 53 51 4c 69 74 65 54 79 70 65 20 47  ate SQLiteType G
11be0 65 74 53 51 4c 69 74 65 54 79 70 65 28 53 51 4c  etSQLiteType(SQL
11bf0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
11c00 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 29  gs flags, int i)
11c10 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
11c20 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 20   SQLiteType typ 
11c30 3d 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61  = _fieldTypeArra
11c40 79 5b 69 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  y[i];....       
11c50 20 69 66 20 28 74 79 70 20 3d 3d 20 6e 75 6c 6c   if (typ == null
11c60 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
11c70 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 6e 69            // Ini
11c80 74 69 61 6c 69 7a 65 20 74 68 69 73 20 63 6f 6c  tialize this col
11c90 75 6d 6e 27 73 20 66 69 65 6c 64 20 74 79 70 65  umn's field type
11ca0 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20   instance..     
11cb0 20 20 20 20 20 20 20 74 79 70 20 3d 20 5f 66 69         typ = _fi
11cc0 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d 20  eldTypeArray[i] 
11cd0 3d 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65  = new SQLiteType
11ce0 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ();..        }..
11cf0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20  ..        // If 
11d00 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c  not initialized,
11d10 20 74 68 65 6e 20 66 65 74 63 68 20 74 68 65 20   then fetch the 
11d20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 20  declared column 
11d30 64 61 74 61 74 79 70 65 20 61 6e 64 20 61 74 74  datatype and att
11d40 65 6d 70 74 20 74 6f 20 63 6f 6e 76 65 72 74 20  empt to convert 
11d50 69 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 74  it..        // t
11d60 6f 20 61 20 6b 6e 6f 77 6e 20 44 62 54 79 70 65  o a known DbType
11d70 2e 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 74  ...        if (t
11d80 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54  yp.Affinity == T
11d90 79 70 65 41 66 66 69 6e 69 74 79 2e 55 6e 69 6e  ypeAffinity.Unin
11da0 69 74 69 61 6c 69 7a 65 64 29 0d 0a 20 20 20 20  itialized)..    
11db0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11dc0 20 20 20 74 79 70 2e 54 79 70 65 20 3d 20 53 51     typ.Type = SQ
11dd0 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54 79 70 65  LiteConvert.Type
11de0 4e 61 6d 65 54 6f 44 62 54 79 70 65 28 0d 0a 20  NameToDbType(.. 
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
11e00 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 74 68 69  etConnection(thi
11e10 73 29 2c 20 5f 61 63 74 69 76 65 53 74 61 74 65  s), _activeState
11e20 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
11e30 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Type(..         
11e40 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74         _activeSt
11e50 61 74 65 6d 65 6e 74 2c 20 69 2c 20 72 65 66 20  atement, i, ref 
11e60 74 79 70 2e 41 66 66 69 6e 69 74 79 29 2c 20 66  typ.Affinity), f
11e70 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  lags);..        
11e80 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
11e90 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
11ea0 20 20 20 20 20 20 20 20 74 79 70 2e 41 66 66 69          typ.Affi
11eb0 6e 69 74 79 20 3d 20 5f 61 63 74 69 76 65 53 74  nity = _activeSt
11ec0 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c  atement._sql.Col
11ed0 75 6d 6e 41 66 66 69 6e 69 74 79 28 0d 0a 20 20  umnAffinity(..  
11ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 61                _a
11ef0 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
11f00 69 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  i);..        }..
11f10 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
11f20 20 74 79 70 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a   typ;..    }....
11f30 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
11f40 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 61 64 73  >..    /// Reads
11f50 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 66 72   the next row fr
11f60 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 73 65 74  om the resultset
11f70 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
11f80 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
11f90 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20 61  eturns>True if a
11fa0 20 6e 65 77 20 72 6f 77 20 77 61 73 20 73 75 63   new row was suc
11fb0 63 65 73 73 66 75 6c 6c 79 20 6c 6f 61 64 65 64  cessfully loaded
11fc0 20 61 6e 64 20 69 73 20 72 65 61 64 79 20 66 6f   and is ready fo
11fd0 72 20 70 72 6f 63 65 73 73 69 6e 67 3c 2f 72 65  r processing</re
11fe0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
11ff0 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
12000 20 52 65 61 64 28 29 0d 0a 20 20 20 20 7b 0d 0a   Read()..    {..
12010 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
12020 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 43 68  sed();..      Ch
12030 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20  eckClosed();..  
12040 20 20 20 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e      if (_throwOn
12050 44 69 73 70 6f 73 65 64 29 20 53 51 4c 69 74 65  Disposed) SQLite
12060 43 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63  Command.Check(_c
12070 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20  ommand);....    
12080 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42    if ((_commandB
12090 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e  ehavior & Comman
120a0 64 42 65 68 61 76 69 6f 72 2e 53 63 68 65 6d 61  dBehavior.Schema
120b0 4f 6e 6c 79 29 20 21 3d 20 30 29 0d 0a 20 20 20  Only) != 0)..   
120c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
120d0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  e;....      if (
120e0 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 3d  _readingState ==
120f0 20 2d 31 29 20 2f 2f 20 46 69 72 73 74 20 73 74   -1) // First st
12100 65 70 20 77 61 73 20 61 6c 72 65 61 64 79 20 64  ep was already d
12110 6f 6e 65 20 61 74 20 74 68 65 20 4e 65 78 74 52  one at the NextR
12120 65 73 75 6c 74 28 29 20 6c 65 76 65 6c 2c 20 73  esult() level, s
12130 6f 20 64 6f 6e 27 74 20 73 74 65 70 20 61 67 61  o don't step aga
12140 69 6e 2c 20 6a 75 73 74 20 72 65 74 75 72 6e 20  in, just return 
12150 74 72 75 65 2e 0d 0a 20 20 20 20 20 20 7b 0d 0a  true...      {..
12160 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67          _reading
12170 53 74 61 74 65 20 3d 20 30 3b 0d 0a 20 20 20 20  State = 0;..    
12180 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
12190 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
121a0 20 65 6c 73 65 20 69 66 20 28 5f 72 65 61 64 69   else if (_readi
121b0 6e 67 53 74 61 74 65 20 3d 3d 20 30 29 20 2f 2f  ngState == 0) //
121c0 20 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e   Actively readin
121d0 67 20 72 6f 77 73 0d 0a 20 20 20 20 20 20 7b 0d  g rows..      {.
121e0 0a 20 20 20 20 20 20 20 20 2f 2f 20 44 6f 6e 27  .        // Don'
121f0 74 20 72 65 61 64 20 61 20 6e 65 77 20 72 6f 77  t read a new row
12200 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20   if the command 
12210 62 65 68 61 76 69 6f 72 20 64 69 63 74 61 74 65  behavior dictate
12220 73 20 53 69 6e 67 6c 65 52 6f 77 2e 20 20 57 65  s SingleRow.  We
12230 27 76 65 20 61 6c 72 65 61 64 79 20 72 65 61 64  've already read
12240 20 74 68 65 20 66 69 72 73 74 20 72 6f 77 2e 0d   the first row..
12250 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 63  .        if ((_c
12260 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26  ommandBehavior &
12270 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72   CommandBehavior
12280 2e 53 69 6e 67 6c 65 52 6f 77 29 20 3d 3d 20 30  .SingleRow) == 0
12290 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
122a0 20 20 20 20 20 20 20 20 69 66 20 28 5f 61 63 74          if (_act
122b0 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
122c0 6c 2e 53 74 65 70 28 5f 61 63 74 69 76 65 53 74  l.Step(_activeSt
122d0 61 74 65 6d 65 6e 74 29 20 3d 3d 20 74 72 75 65  atement) == true
122e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
122f0 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 74 65              _ste
12300 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 0d 0a 20 20 20  pCount++;....   
12310 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 6b 65           if (_ke
12320 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
12330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 6b                _k
12340 65 79 49 6e 66 6f 2e 52 65 73 65 74 28 29 3b 0d  eyInfo.Reset();.
12350 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
12360 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
12370 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
12380 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f    }....        _
12390 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31  readingState = 1
123a0 3b 20 2f 2f 20 46 69 6e 69 73 68 65 64 20 72 65  ; // Finished re
123b0 61 64 69 6e 67 20 72 6f 77 73 0d 0a 20 20 20 20  ading rows..    
123c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
123d0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
123e0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
123f0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
12400 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  Returns the numb
12410 65 72 20 6f 66 20 72 6f 77 73 20 61 66 66 65 63  er of rows affec
12420 74 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  ted by the state
12430 6d 65 6e 74 20 62 65 69 6e 67 20 65 78 65 63 75  ment being execu
12440 74 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ted...    /// Th
12450 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
12460 20 6d 61 79 20 6e 6f 74 20 62 65 20 61 63 63 75   may not be accu
12470 72 61 74 65 20 66 6f 72 20 44 44 4c 20 73 74 61  rate for DDL sta
12480 74 65 6d 65 6e 74 73 2e 20 20 41 6c 73 6f 2c 20  tements.  Also, 
12490 69 74 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 6c 6c  it..    /// will
124a0 20 62 65 20 2d 31 20 66 6f 72 20 61 6e 79 20 73   be -1 for any s
124b0 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 64 6f  tatement that do
124c0 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68  es not modify th
124d0 65 20 64 61 74 61 62 61 73 65 20 28 65 2e 67 2e  e database (e.g.
124e0 0d 0a 20 20 20 20 2f 2f 2f 20 53 45 4c 45 43 54  ..    /// SELECT
124f0 29 2e 20 20 49 66 20 61 6e 20 6f 74 68 65 72 77  ).  If an otherw
12500 69 73 65 20 72 65 61 64 2d 6f 6e 6c 79 20 73 74  ise read-only st
12510 61 74 65 6d 65 6e 74 20 6d 6f 64 69 66 69 65 73  atement modifies
12520 20 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20   the database.. 
12530 20 20 20 2f 2f 2f 20 69 6e 64 69 72 65 63 74 6c     /// indirectl
12540 79 20 28 65 2e 67 2e 20 76 69 61 20 61 20 76 69  y (e.g. via a vi
12550 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 72 20 75  rtual table or u
12560 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
12570 74 69 6f 6e 29 2c 20 74 68 65 0d 0a 20 20 20 20  tion), the..    
12580 2f 2f 2f 20 76 61 6c 75 65 20 72 65 74 75 72 6e  /// value return
12590 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  ed is undefined.
125a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
125b0 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
125c0 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52 65   override int Re
125d0 63 6f 72 64 73 41 66 66 65 63 74 65 64 0d 0a 20  cordsAffected.. 
125e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20     {..      get 
125f0 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
12600 29 3b 20 72 65 74 75 72 6e 20 5f 72 6f 77 73 41  ); return _rowsA
12610 66 66 65 63 74 65 64 3b 20 7d 0d 0a 20 20 20 20  ffected; }..    
12620 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
12630 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
12640 49 6e 64 65 78 65 72 20 74 6f 20 72 65 74 72 69  Indexer to retri
12650 65 76 65 20 64 61 74 61 20 66 72 6f 6d 20 61 20  eve data from a 
12660 63 6f 6c 75 6d 6e 20 67 69 76 65 6e 20 69 74 73  column given its
12670 20 6e 61 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c   name..    /// <
12680 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
12690 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
126a0 6e 61 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20 6f  name">The name o
126b0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
126c0 72 65 74 72 69 65 76 65 20 64 61 74 61 20 66 6f  retrieve data fo
126d0 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  r</param>..    /
126e0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
126f0 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
12700 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72  in the column</r
12710 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
12720 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a  lic override obj
12730 65 63 74 20 74 68 69 73 5b 73 74 72 69 6e 67 20  ect this[string 
12740 6e 61 6d 65 5d 0d 0a 20 20 20 20 7b 0d 0a 20 20  name]..    {..  
12750 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
12760 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
12770 6e 20 47 65 74 56 61 6c 75 65 28 47 65 74 4f 72  n GetValue(GetOr
12780 64 69 6e 61 6c 28 6e 61 6d 65 29 29 3b 20 7d 0d  dinal(name)); }.
12790 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
127a0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
127b0 20 2f 2f 2f 20 49 6e 64 65 78 65 72 20 74 6f 20   /// Indexer to 
127c0 72 65 74 72 69 65 76 65 20 64 61 74 61 20 66 72  retrieve data fr
127d0 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 67 69 76 65  om a column give
127e0 6e 20 69 74 73 20 69 0d 0a 20 20 20 20 2f 2f 2f  n its i..    ///
127f0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
12800 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
12810 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
12820 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
12830 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
12840 72 65 74 75 72 6e 73 3e 54 68 65 20 76 61 6c 75  returns>The valu
12850 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
12860 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72  he column</retur
12870 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
12880 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20  override object 
12890 74 68 69 73 5b 69 6e 74 20 69 5d 0d 0a 20 20 20  this[int i]..   
128a0 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20   {..      get { 
128b0 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
128c0 20 72 65 74 75 72 6e 20 47 65 74 56 61 6c 75 65   return GetValue
128d0 28 69 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d  (i); }..    }...
128e0 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
128f0 64 20 4c 6f 61 64 4b 65 79 49 6e 66 6f 28 29 0d  d LoadKeyInfo().
12900 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
12910 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20  if (_keyInfo != 
12920 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
12930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6b  ..            _k
12940 65 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29  eyInfo.Dispose()
12950 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  ;..            _
12960 6b 65 79 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d  keyInfo = null;.
12970 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
12980 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 20 3d        _keyInfo =
12990 20 6e 65 77 20 53 51 4c 69 74 65 4b 65 79 52 65   new SQLiteKeyRe
129a0 61 64 65 72 28 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  ader(_command.Co
129b0 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 69 73 2c 20  nnection, this, 
129c0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
129d0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  );..    }..  }..
129e0 7d 0d 0a                                         }..