System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 3f3347438fa7c950e60df73b5b67c7ec90f97da4:


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 69 6e 74 20 69 52 6f 77 49 64 20 3d 20 5f 6b   int iRowId = _k
4310: 65 79 49 6e 66 6f 2e 47 65 74 52 6f 77 49 64 49  eyInfo.GetRowIdI
4320: 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20  ndex(..         
4330: 20 20 20 47 65 74 44 61 74 61 62 61 73 65 4e 61     GetDatabaseNa
4340: 6d 65 28 69 29 2c 20 47 65 74 54 61 62 6c 65 4e  me(i), GetTableN
4350: 61 6d 65 28 69 29 29 3b 0d 0a 0d 0a 20 20 20 20  ame(i));....    
4360: 20 20 20 20 69 66 20 28 69 52 6f 77 49 64 20 3d      if (iRowId =
4370: 3d 20 2d 31 29 0d 0a 20 20 20 20 20 20 20 20 20  = -1)..         
4380: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
4390: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
43a0: 6e 20 47 65 74 49 6e 74 36 34 28 69 52 6f 77 49  n GetInt64(iRowI
43b0: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
43c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
43d0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
43e0: 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73  es the column as
43f0: 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51   a <see cref="SQ
4400: 4c 69 74 65 42 6c 6f 62 22 20 2f 3e 20 6f 62 6a  LiteBlob" /> obj
4410: 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ect...    /// Th
4420: 69 73 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b  is will not work
4430: 20 66 6f 72 20 74 61 62 6c 65 73 20 74 68 61 74   for tables that
4440: 20 77 65 72 65 20 63 72 65 61 74 65 64 20 57 49   were created WI
4450: 54 48 4f 55 54 20 52 4f 57 49 44 0d 0a 20 20 20  THOUT ROWID..   
4460: 20 2f 2f 2f 20 2d 4f 52 2d 20 69 66 20 74 68 65   /// -OR- if the
4470: 20 71 75 65 72 79 20 64 6f 65 73 20 6e 6f 74 20   query does not 
4480: 69 6e 63 6c 75 64 65 20 74 68 65 20 22 72 6f 77  include the "row
4490: 69 64 22 20 63 6f 6c 75 6d 6e 20 6f 72 20 6f 6e  id" column or on
44a0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 69 74  e..    /// of it
44b0: 73 20 61 6c 69 61 73 65 73 20 2d 4f 52 2d 20 69  s aliases -OR- i
44c0: 66 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  f the <see cref=
44d0: 22 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65  "SQLiteDataReade
44e0: 72 22 20 2f 3e 20 77 61 73 0d 0a 20 20 20 20 2f  r" /> was..    /
44f0: 2f 2f 20 6e 6f 74 20 63 72 65 61 74 65 64 20 77  // not created w
4500: 69 74 68 20 74 68 65 20 3c 73 65 65 20 63 72 65  ith the <see cre
4510: 66 3d 22 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69  f="CommandBehavi
4520: 6f 72 2e 4b 65 79 49 6e 66 6f 22 20 2f 3e 0d 0a  or.KeyInfo" />..
4530: 20 20 20 20 2f 2f 2f 20 66 6c 61 67 2e 0d 0a 20      /// flag... 
4540: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
4550: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
4560: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
4570: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
4580: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
4590: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
45a0: 3d 22 72 65 61 64 4f 6e 6c 79 22 3e 0d 0a 20 20  ="readOnly">..  
45b0: 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74    /// Non-zero t
45c0: 6f 20 6f 70 65 6e 20 74 68 65 20 62 6c 6f 62 20  o open the blob 
45d0: 6f 62 6a 65 63 74 20 66 6f 72 20 72 65 61 64 2d  object for read-
45e0: 6f 6e 6c 79 20 61 63 63 65 73 73 2e 0d 0a 20 20  only access...  
45f0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
4600: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
4610: 3e 41 20 6e 65 77 20 3c 73 65 65 20 63 72 65 66  >A new <see cref
4620: 3d 22 53 51 4c 69 74 65 42 6c 6f 62 22 20 2f 3e  ="SQLiteBlob" />
4630: 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e   object.</return
4640: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 53  s>..    public S
4650: 51 4c 69 74 65 42 6c 6f 62 20 47 65 74 42 6c 6f  QLiteBlob GetBlo
4660: 62 28 69 6e 74 20 69 2c 20 62 6f 6f 6c 20 72 65  b(int i, bool re
4670: 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 7b 0d 0a  adOnly)..    {..
4680: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
4690: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
46a0: 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
46b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
46c0: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
46d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
46e0: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
46f0: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
4700: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
4710: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
4720: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
4730: 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20  eCallbacks)..   
4740: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4750: 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65      SQLiteDataRe
4760: 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20  aderValue value 
4770: 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61  = new SQLiteData
4780: 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a  ReaderValue();..
4790: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
47a0: 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20   complete;....  
47b0: 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65            Invoke
47c0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
47d0: 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52  k(i, new SQLiteR
47e0: 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67  eadValueEventArg
47f0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
4800: 20 20 20 20 22 47 65 74 42 6c 6f 62 22 2c 20 6e      "GetBlob", n
4810: 65 77 20 53 51 4c 69 74 65 52 65 61 64 42 6c 6f  ew SQLiteReadBlo
4820: 62 45 76 65 6e 74 41 72 67 73 28 72 65 61 64 4f  bEventArgs(readO
4830: 6e 6c 79 29 2c 20 76 61 6c 75 65 29 2c 0d 0a 20  nly), value),.. 
4840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
4850: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
4860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4870: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
4880: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4890: 72 6e 20 28 53 51 4c 69 74 65 42 6c 6f 62 29 76  rn (SQLiteBlob)v
48a0: 61 6c 75 65 2e 42 6c 6f 62 56 61 6c 75 65 3b 0d  alue.BlobValue;.
48b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
48c0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
48d0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
48e0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
48f0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
4900: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4910: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42 6c 6f   _keyInfo.GetBlo
4920: 62 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  b(i - PrivateVis
4930: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20  ibleFieldCount, 
4940: 72 65 61 64 4f 6e 6c 79 29 3b 0d 0a 0d 0a 20 20  readOnly);....  
4950: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4960: 69 74 65 42 6c 6f 62 2e 43 72 65 61 74 65 28 74  iteBlob.Create(t
4970: 68 69 73 2c 20 69 2c 20 72 65 61 64 4f 6e 6c 79  his, i, readOnly
4980: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
4990: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
49a0: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
49b0: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
49c0: 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0d  a boolean value.
49d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
49e0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
49f0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
4a00: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
4a10: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
4a20: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
4a30: 62 6f 6f 6c 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  bool</returns>..
4a40: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
4a50: 69 64 65 20 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c  ide bool GetBool
4a60: 65 61 6e 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ean(int i)..    
4a70: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
4a80: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
4a90: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
4aa0: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
4ab0: 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51  if ((_flags & SQ
4ac0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
4ad0: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
4ae0: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
4af0: 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  cks) == SQLiteCo
4b00: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
4b10: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
4b20: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a  alueCallbacks)..
4b30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4b40: 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74         SQLiteDat
4b50: 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c  aReaderValue val
4b60: 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44  ue = new SQLiteD
4b70: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29  ataReaderValue()
4b80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
4b90: 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d  ool complete;...
4ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76  .            Inv
4bb0: 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  okeReadValueCall
4bc0: 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69  back(i, new SQLi
4bd0: 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74  teReadValueEvent
4be0: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
4bf0: 20 20 20 20 20 20 20 22 47 65 74 42 6f 6f 6c 65         "GetBoole
4c00: 61 6e 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65  an", null, value
4c10: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
4c20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4c30: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
4c40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4c60: 66 20 28 76 61 6c 75 65 2e 42 6f 6f 6c 65 61 6e  f (value.Boolean
4c70: 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Value == null)..
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c90: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
4ca0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d  LiteException("m
4cb0: 69 73 73 69 6e 67 20 62 6f 6f 6c 65 61 6e 20 72  issing boolean r
4cc0: 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a  eturn value");..
4cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ce0: 20 20 72 65 74 75 72 6e 20 28 62 6f 6f 6c 29 76    return (bool)v
4cf0: 61 6c 75 65 2e 42 6f 6f 6c 65 61 6e 56 61 6c 75  alue.BooleanValu
4d00: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
4d10: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
4d20: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
4d30: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
4d40: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
4d50: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
4d60: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4d70: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42  rn _keyInfo.GetB
4d80: 6f 6f 6c 65 61 6e 28 69 20 2d 20 50 72 69 76 61  oolean(i - Priva
4d90: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
4da0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
4db0: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
4dc0: 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 3b 0d  bType.Boolean);.
4dd0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4de0: 43 6f 6e 76 65 72 74 2e 54 6f 42 6f 6f 6c 65 61  Convert.ToBoolea
4df0: 6e 28 47 65 74 56 61 6c 75 65 28 69 29 2c 20 43  n(GetValue(i), C
4e00: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
4e10: 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20  ntCulture);..   
4e20: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
4e30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4e40: 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63   Retrieves the c
4e50: 6f 6c 75 6d 6e 20 61 73 20 61 20 73 69 6e 67 6c  olumn as a singl
4e60: 65 20 62 79 74 65 20 76 61 6c 75 65 0d 0a 20 20  e byte value..  
4e70: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
4e80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
4e90: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
4ea0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
4eb0: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
4ec0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62 79 74  /// <returns>byt
4ed0: 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  e</returns>..   
4ee0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
4ef0: 20 62 79 74 65 20 47 65 74 42 79 74 65 28 69 6e   byte GetByte(in
4f00: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
4f10: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
4f20: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
4f30: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
4f40: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
4f50: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
4f60: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
4f70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
4f80: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
4f90: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
4fa0: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
4fb0: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
4fc0: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
4fd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4fe0: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
4ff0: 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e  rValue value = n
5000: 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  ew SQLiteDataRea
5010: 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20  derValue();..   
5020: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f           bool co
5030: 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20  mplete;....     
5040: 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61         InvokeRea
5050: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69  dValueCallback(i
5060: 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  , new SQLiteRead
5070: 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d  ValueEventArgs(.
5080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5090: 20 22 47 65 74 42 79 74 65 22 2c 20 6e 75 6c 6c   "GetByte", null
50a0: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
50b0: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
50c0: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
50d0: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
50e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
50f0: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
5100: 42 79 74 65 56 61 6c 75 65 20 3d 3d 20 6e 75 6c  ByteValue == nul
5110: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
5120: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
5130: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
5140: 6e 28 22 6d 69 73 73 69 6e 67 20 62 79 74 65 20  n("missing byte 
5150: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
5160: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5170: 20 20 20 72 65 74 75 72 6e 20 28 62 79 74 65 29     return (byte)
5180: 76 61 6c 75 65 2e 42 79 74 65 56 61 6c 75 65 3b  value.ByteValue;
5190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
51a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
51b0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
51c0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
51d0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
51e0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
51f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5200: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42 79 74   _keyInfo.GetByt
5210: 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  e(i - PrivateVis
5220: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
5230: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  ....        Veri
5240: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
5250: 2e 42 79 74 65 29 3b 0d 0a 20 20 20 20 20 20 20  .Byte);..       
5260: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
5270: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
5280: 74 42 79 74 65 28 5f 61 63 74 69 76 65 53 74 61  tByte(_activeSta
5290: 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20  tement, i);..   
52a0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
52b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
52c0: 20 52 65 74 72 69 65 76 65 73 20 61 20 63 6f 6c   Retrieves a col
52d0: 75 6d 6e 20 61 73 20 61 6e 20 61 72 72 61 79 20  umn as an array 
52e0: 6f 66 20 62 79 74 65 73 20 28 62 6c 6f 62 29 0d  of bytes (blob).
52f0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
5300: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
5310: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
5320: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
5330: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
5340: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5350: 6d 65 3d 22 66 69 65 6c 64 4f 66 66 73 65 74 22  me="fieldOffset"
5360: 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20  >The zero-based 
5370: 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20 74  index of where t
5380: 6f 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67 20  o begin reading 
5390: 74 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d 3e  the data</param>
53a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
53b0: 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 22 3e 54   name="buffer">T
53c0: 68 65 20 62 75 66 66 65 72 20 74 6f 20 77 72 69  he buffer to wri
53d0: 74 65 20 74 68 65 20 62 79 74 65 73 20 69 6e 74  te the bytes int
53e0: 6f 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  o</param>..    /
53f0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5400: 62 75 66 66 65 72 6f 66 66 73 65 74 22 3e 54 68  bufferoffset">Th
5410: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64  e zero-based ind
5420: 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62  ex of where to b
5430: 65 67 69 6e 20 77 72 69 74 69 6e 67 20 69 6e 74  egin writing int
5440: 6f 20 74 68 65 20 61 72 72 61 79 3c 2f 70 61 72  o the array</par
5450: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
5460: 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68  ram name="length
5470: 22 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  ">The number of 
5480: 62 79 74 65 73 20 74 6f 20 72 65 74 72 69 65 76  bytes to retriev
5490: 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  e</param>..    /
54a0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
54b0: 61 63 74 75 61 6c 20 6e 75 6d 62 65 72 20 6f 66  actual number of
54c0: 20 62 79 74 65 73 20 77 72 69 74 74 65 6e 20 69   bytes written i
54d0: 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c 2f 72  nto the array</r
54e0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
54f0: 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20   <remarks>..    
5500: 2f 2f 2f 20 54 6f 20 64 65 74 65 72 6d 69 6e 65  /// To determine
5510: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
5520: 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75  ytes in the colu
5530: 6d 6e 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c 20  mn, pass a null 
5540: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62 75  value for the bu
5550: 66 66 65 72 2e 20 20 54 68 65 20 74 6f 74 61 6c  ffer.  The total
5560: 20 6c 65 6e 67 74 68 20 77 69 6c 6c 20 62 65 20   length will be 
5570: 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f  returned...    /
5580: 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20  // </remarks>.. 
5590: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
55a0: 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73  de long GetBytes
55b0: 28 69 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65  (int i, long fie
55c0: 6c 64 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d  ldOffset, byte[]
55d0: 20 62 75 66 66 65 72 2c 20 69 6e 74 20 62 75 66   buffer, int buf
55e0: 66 65 72 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c  feroffset, int l
55f0: 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20  ength)..    {.. 
5600: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
5610: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
5620: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
5630: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
5640: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
5650: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5660: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
5670: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
5680: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
5690: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
56a0: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
56b0: 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20  Callbacks)..    
56c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
56d0: 20 20 20 53 51 4c 69 74 65 52 65 61 64 41 72 72     SQLiteReadArr
56e0: 61 79 45 76 65 6e 74 41 72 67 73 20 65 76 65 6e  ayEventArgs even
56f0: 74 41 72 67 73 20 3d 20 6e 65 77 20 53 51 4c 69  tArgs = new SQLi
5700: 74 65 52 65 61 64 41 72 72 61 79 45 76 65 6e 74  teReadArrayEvent
5710: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
5720: 20 20 20 20 20 20 20 66 69 65 6c 64 4f 66 66 73         fieldOffs
5730: 65 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66  et, buffer, buff
5740: 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68  eroffset, length
5750: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5760: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
5770: 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20  erValue value = 
5780: 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65  new SQLiteDataRe
5790: 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20  aderValue();..  
57a0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
57b0: 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20  omplete;....    
57c0: 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65          InvokeRe
57d0: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28  adValueCallback(
57e0: 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61  i, new SQLiteRea
57f0: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28  dValueEventArgs(
5800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5810: 20 20 22 47 65 74 42 79 74 65 73 22 2c 20 65 76    "GetBytes", ev
5820: 65 6e 74 41 72 67 73 2c 20 76 61 6c 75 65 29 2c  entArgs, value),
5830: 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d   out complete);.
5840: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
5850: 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20  f (complete)..  
5860: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5870: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74               byt
5880: 65 5b 5d 20 62 79 74 65 73 20 3d 20 76 61 6c 75  e[] bytes = valu
5890: 65 2e 42 79 74 65 73 56 61 6c 75 65 3b 0d 0a 0d  e.BytesValue;...
58a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
58b0: 20 69 66 20 28 62 79 74 65 73 20 21 3d 20 6e 75   if (bytes != nu
58c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
58d0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
58e0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
58f0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
5900: 20 20 20 20 20 20 20 20 20 20 20 20 41 72 72 61              Arra
5910: 79 2e 43 6f 70 79 28 62 79 74 65 73 2c 20 2f 2a  y.Copy(bytes, /*
5920: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
5930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5940: 20 20 20 65 76 65 6e 74 41 72 67 73 2e 44 61 74     eventArgs.Dat
5950: 61 4f 66 66 73 65 74 2c 20 65 76 65 6e 74 41 72  aOffset, eventAr
5960: 67 73 2e 42 79 74 65 42 75 66 66 65 72 2c 0d 0a  gs.ByteBuffer,..
5970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5980: 20 20 20 20 20 20 20 20 65 76 65 6e 74 41 72 67          eventArg
5990: 73 2e 42 75 66 66 65 72 4f 66 66 73 65 74 2c 20  s.BufferOffset, 
59a0: 65 76 65 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68  eventArgs.Length
59b0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
59d0: 72 72 61 79 2e 43 6f 70 79 28 62 79 74 65 73 2c  rray.Copy(bytes,
59e0: 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a00: 20 20 20 20 20 20 28 69 6e 74 29 65 76 65 6e 74        (int)event
5a10: 41 72 67 73 2e 44 61 74 61 4f 66 66 73 65 74 2c  Args.DataOffset,
5a20: 20 65 76 65 6e 74 41 72 67 73 2e 42 79 74 65 42   eventArgs.ByteB
5a30: 75 66 66 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  uffer,..        
5a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a50: 65 76 65 6e 74 41 72 67 73 2e 42 75 66 66 65 72  eventArgs.Buffer
5a60: 4f 66 66 73 65 74 2c 20 65 76 65 6e 74 41 72 67  Offset, eventArg
5a70: 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6e 64  s.Length);..#end
5a80: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
5a90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5aa0: 20 65 76 65 6e 74 41 72 67 73 2e 4c 65 6e 67 74   eventArgs.Lengt
5ab0: 68 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h;..            
5ac0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5ad0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
5ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
5af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b00: 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a      return -1;..
5b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b20: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5b30: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
5b40: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
5b50: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
5b60: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
5b70: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
5b80: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5b90: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42 79  n _keyInfo.GetBy
5ba0: 74 65 73 28 69 20 2d 20 50 72 69 76 61 74 65 56  tes(i - PrivateV
5bb0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
5bc0: 2c 20 66 69 65 6c 64 4f 66 66 73 65 74 2c 20 62  , fieldOffset, b
5bd0: 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66  uffer, bufferoff
5be0: 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d  set, length);...
5bf0: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54  .        VerifyT
5c00: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42 69  ype(i, DbType.Bi
5c10: 6e 61 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  nary);..        
5c20: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
5c30: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
5c40: 42 79 74 65 73 28 5f 61 63 74 69 76 65 53 74 61  Bytes(_activeSta
5c50: 74 65 6d 65 6e 74 2c 20 69 2c 20 28 69 6e 74 29  tement, i, (int)
5c60: 66 69 65 6c 64 4f 66 66 73 65 74 2c 20 62 75 66  fieldOffset, buf
5c70: 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65  fer, bufferoffse
5c80: 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  t, length);..   
5c90: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
5ca0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
5cb0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
5cc0: 75 6d 6e 20 61 73 20 61 20 73 69 6e 67 6c 65 20  umn as a single 
5cd0: 63 68 61 72 61 63 74 65 72 0d 0a 20 20 20 20 2f  character..    /
5ce0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
5cf0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5d00: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
5d10: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
5d20: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
5d30: 20 3c 72 65 74 75 72 6e 73 3e 63 68 61 72 3c 2f   <returns>char</
5d40: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
5d50: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 63 68  blic override ch
5d60: 61 72 20 47 65 74 43 68 61 72 28 69 6e 74 20 69  ar GetChar(int i
5d70: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5d80: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
5d90: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
5da0: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
5db0: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
5dc0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
5dd0: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
5de0: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
5df0: 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53  eCallbacks) == S
5e00: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5e10: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
5e20: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
5e30: 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  acks)..        {
5e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
5e50: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
5e60: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
5e70: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
5e80: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
5e90: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
5ea0: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
5eb0: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
5ec0: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
5ed0: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
5ee0: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
5ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
5f00: 65 74 43 68 61 72 22 2c 20 6e 75 6c 6c 2c 20 76  etChar", null, v
5f10: 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c  alue), out compl
5f20: 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ete);....       
5f30: 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74       if (complet
5f40: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
5f50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5f60: 20 20 20 69 66 20 28 76 61 6c 75 65 2e 43 68 61     if (value.Cha
5f70: 72 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  rValue == null).
5f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5f90: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
5fa0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
5fb0: 6d 69 73 73 69 6e 67 20 63 68 61 72 61 63 74 65  missing characte
5fc0: 72 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29  r return value")
5fd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5fe0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 63 68 61       return (cha
5ff0: 72 29 76 61 6c 75 65 2e 43 68 61 72 56 61 6c 75  r)value.CharValu
6000: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6010: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
6020: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
6030: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
6040: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
6050: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
6060: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6070: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 43  rn _keyInfo.GetC
6080: 68 61 72 28 69 20 2d 20 50 72 69 76 61 74 65 56  har(i - PrivateV
6090: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
60a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65  );....        Ve
60b0: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
60c0: 70 65 2e 53 42 79 74 65 29 3b 0d 0a 20 20 20 20  pe.SByte);..    
60d0: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
60e0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
60f0: 2e 47 65 74 43 68 61 72 28 5f 61 63 74 69 76 65  .GetChar(_active
6100: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a  Statement, i);..
6110: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
6120: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
6130: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 61 20  /// Retrieves a 
6140: 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 61 72 72  column as an arr
6150: 61 79 20 6f 66 20 63 68 61 72 73 20 28 62 6c 6f  ay of chars (blo
6160: 62 29 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  b)..    /// </su
6170: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
6180: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
6190: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
61a0: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
61b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
61c0: 20 6e 61 6d 65 3d 22 66 69 65 6c 64 6f 66 66 73   name="fieldoffs
61d0: 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73  et">The zero-bas
61e0: 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72  ed index of wher
61f0: 65 20 74 6f 20 62 65 67 69 6e 20 72 65 61 64 69  e to begin readi
6200: 6e 67 20 74 68 65 20 64 61 74 61 3c 2f 70 61 72  ng the data</par
6210: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
6220: 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72  ram name="buffer
6230: 22 3e 54 68 65 20 62 75 66 66 65 72 20 74 6f 20  ">The buffer to 
6240: 77 72 69 74 65 20 74 68 65 20 63 68 61 72 61 63  write the charac
6250: 74 65 72 73 20 69 6e 74 6f 3c 2f 70 61 72 61 6d  ters into</param
6260: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
6270: 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 6f 66  m name="bufferof
6280: 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62  fset">The zero-b
6290: 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68  ased index of wh
62a0: 65 72 65 20 74 6f 20 62 65 67 69 6e 20 77 72 69  ere to begin wri
62b0: 74 69 6e 67 20 69 6e 74 6f 20 74 68 65 20 61 72  ting into the ar
62c0: 72 61 79 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ray</param>..   
62d0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
62e0: 3d 22 6c 65 6e 67 74 68 22 3e 54 68 65 20 6e 75  ="length">The nu
62f0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f  mber of bytes to
6300: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
6310: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
6320: 72 6e 73 3e 54 68 65 20 61 63 74 75 61 6c 20 6e  rns>The actual n
6330: 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
6340: 65 72 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f  ers written into
6350: 20 74 68 65 20 61 72 72 61 79 3c 2f 72 65 74 75   the array</retu
6360: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  rns>..    /// <r
6370: 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f  emarks>..    ///
6380: 20 54 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   To determine th
6390: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  e number of char
63a0: 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 63 6f  acters in the co
63b0: 6c 75 6d 6e 2c 20 70 61 73 73 20 61 20 6e 75 6c  lumn, pass a nul
63c0: 6c 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  l value for the 
63d0: 62 75 66 66 65 72 2e 20 20 54 68 65 20 74 6f 74  buffer.  The tot
63e0: 61 6c 20 6c 65 6e 67 74 68 20 77 69 6c 6c 20 62  al length will b
63f0: 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20  e returned...   
6400: 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d   /// </remarks>.
6410: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
6420: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43 68 61  ride long GetCha
6430: 72 73 28 69 6e 74 20 69 2c 20 6c 6f 6e 67 20 66  rs(int i, long f
6440: 69 65 6c 64 6f 66 66 73 65 74 2c 20 63 68 61 72  ieldoffset, char
6450: 5b 5d 20 62 75 66 66 65 72 2c 20 69 6e 74 20 62  [] buffer, int b
6460: 75 66 66 65 72 6f 66 66 73 65 74 2c 20 69 6e 74  ufferoffset, int
6470: 20 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d   length)..    {.
6480: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
6490: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
64a0: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
64b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
64c0: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
64d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
64e0: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
64f0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
6500: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
6510: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
6520: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
6530: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
6540: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6550: 20 20 20 20 20 53 51 4c 69 74 65 52 65 61 64 41       SQLiteReadA
6560: 72 72 61 79 45 76 65 6e 74 41 72 67 73 20 65 76  rrayEventArgs ev
6570: 65 6e 74 41 72 67 73 20 3d 20 6e 65 77 20 53 51  entArgs = new SQ
6580: 4c 69 74 65 52 65 61 64 41 72 72 61 79 45 76 65  LiteReadArrayEve
6590: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
65a0: 20 20 20 20 20 20 20 20 20 66 69 65 6c 64 6f 66           fieldof
65b0: 66 73 65 74 2c 20 62 75 66 66 65 72 2c 20 62 75  fset, buffer, bu
65c0: 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67  fferoffset, leng
65d0: 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  th);....        
65e0: 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65      SQLiteDataRe
65f0: 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20  aderValue value 
6600: 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61  = new SQLiteData
6610: 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a  ReaderValue();..
6620: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
6630: 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20   complete;....  
6640: 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65            Invoke
6650: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
6660: 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52  k(i, new SQLiteR
6670: 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67  eadValueEventArg
6680: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
6690: 20 20 20 20 22 47 65 74 43 68 61 72 73 22 2c 20      "GetChars", 
66a0: 65 76 65 6e 74 41 72 67 73 2c 20 76 61 6c 75 65  eventArgs, value
66b0: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
66c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
66d0: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
6700: 68 61 72 5b 5d 20 63 68 61 72 73 20 3d 20 76 61  har[] chars = va
6710: 6c 75 65 2e 43 68 61 72 73 56 61 6c 75 65 3b 0d  lue.CharsValue;.
6720: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6730: 20 20 20 69 66 20 28 63 68 61 72 73 20 21 3d 20     if (chars != 
6740: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6750: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50         {..#if !P
6760: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
6770: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
6780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 72                Ar
6790: 72 61 79 2e 43 6f 70 79 28 63 68 61 72 73 2c 20  ray.Copy(chars, 
67a0: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
67b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67c0: 20 20 20 20 20 65 76 65 6e 74 41 72 67 73 2e 44       eventArgs.D
67d0: 61 74 61 4f 66 66 73 65 74 2c 20 65 76 65 6e 74  ataOffset, event
67e0: 41 72 67 73 2e 43 68 61 72 42 75 66 66 65 72 2c  Args.CharBuffer,
67f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6800: 20 20 20 20 20 20 20 20 20 20 65 76 65 6e 74 41            eventA
6810: 72 67 73 2e 42 75 66 66 65 72 4f 66 66 73 65 74  rgs.BufferOffset
6820: 2c 20 65 76 65 6e 74 41 72 67 73 2e 4c 65 6e 67  , eventArgs.Leng
6830: 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  th);..#else..   
6840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6850: 20 41 72 72 61 79 2e 43 6f 70 79 28 63 68 61 72   Array.Copy(char
6860: 73 2c 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  s, /* throw */..
6870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6880: 20 20 20 20 20 20 20 20 28 69 6e 74 29 65 76 65          (int)eve
6890: 6e 74 41 72 67 73 2e 44 61 74 61 4f 66 66 73 65  ntArgs.DataOffse
68a0: 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 43 68 61  t, eventArgs.Cha
68b0: 72 42 75 66 66 65 72 2c 0d 0a 20 20 20 20 20 20  rBuffer,..      
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68d0: 20 20 65 76 65 6e 74 41 72 67 73 2e 42 75 66 66    eventArgs.Buff
68e0: 65 72 4f 66 66 73 65 74 2c 20 65 76 65 6e 74 41  erOffset, eventA
68f0: 72 67 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65  rgs.Length);..#e
6900: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
6910: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6920: 72 6e 20 65 76 65 6e 74 41 72 67 73 2e 4c 65 6e  rn eventArgs.Len
6930: 67 74 68 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gth;..          
6940: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6950: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
6960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
6970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6980: 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b        return -1;
6990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
69a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
69b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
69c0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
69d0: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
69e0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
69f0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
6a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
6a10: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
6a20: 43 68 61 72 73 28 69 20 2d 20 50 72 69 76 61 74  Chars(i - Privat
6a30: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
6a40: 6e 74 2c 20 66 69 65 6c 64 6f 66 66 73 65 74 2c  nt, fieldoffset,
6a50: 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f   buffer, buffero
6a60: 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d  ffset, length);.
6a70: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
6a80: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
6a90: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e  onnectionFlags.N
6aa0: 6f 56 65 72 69 66 79 54 65 78 74 41 66 66 69 6e  oVerifyTextAffin
6ab0: 69 74 79 29 20 21 3d 20 53 51 4c 69 74 65 43 6f  ity) != SQLiteCo
6ac0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
6ad0: 56 65 72 69 66 79 54 65 78 74 41 66 66 69 6e 69  VerifyTextAffini
6ae0: 74 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty)..           
6af0: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
6b00: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 3b 0d 0a  bType.String);..
6b10: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
6b20: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
6b30: 74 2e 5f 73 71 6c 2e 47 65 74 43 68 61 72 73 28  t._sql.GetChars(
6b40: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
6b50: 2c 20 69 2c 20 28 69 6e 74 29 66 69 65 6c 64 6f  , i, (int)fieldo
6b60: 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c 20 62  ffset, buffer, b
6b70: 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e  ufferoffset, len
6b80: 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  gth);..    }....
6b90: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
6ba0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
6bb0: 65 76 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  eves the name of
6bc0: 20 74 68 65 20 62 61 63 6b 2d 65 6e 64 20 64 61   the back-end da
6bd0: 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f  tatype of the co
6be0: 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  lumn..    /// </
6bf0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
6c00: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
6c10: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
6c20: 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
6c30: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
6c40: 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74  urns>string</ret
6c50: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
6c60: 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  c override strin
6c70: 67 20 47 65 74 44 61 74 61 54 79 70 65 4e 61 6d  g GetDataTypeNam
6c80: 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  e(int i)..    {.
6c90: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
6ca0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
6cb0: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
6cc0: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
6cd0: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
6ce0: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
6cf0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6d00: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 61 74 61  _keyInfo.GetData
6d10: 54 79 70 65 4e 61 6d 65 28 69 20 2d 20 50 72 69  TypeName(i - Pri
6d20: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
6d30: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
6d40: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20     TypeAffinity 
6d50: 61 66 66 69 6e 20 3d 20 54 79 70 65 41 66 66 69  affin = TypeAffi
6d60: 6e 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a  nity.Uninitializ
6d70: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ed;..        ret
6d80: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
6d90: 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
6da0: 54 79 70 65 28 5f 61 63 74 69 76 65 53 74 61 74  Type(_activeStat
6db0: 65 6d 65 6e 74 2c 20 69 2c 20 72 65 66 20 61 66  ement, i, ref af
6dc0: 66 69 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  fin);..    }....
6dd0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
6de0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
6df0: 65 76 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  eve the column a
6e00: 73 20 61 20 64 61 74 65 2f 74 69 6d 65 20 76 61  s a date/time va
6e10: 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  lue..    /// </s
6e20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
6e30: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
6e40: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
6e50: 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d  e column.</param
6e60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
6e70: 72 6e 73 3e 44 61 74 65 54 69 6d 65 3c 2f 72 65  rns>DateTime</re
6e80: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
6e90: 69 63 20 6f 76 65 72 72 69 64 65 20 44 61 74 65  ic override Date
6ea0: 54 69 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65  Time GetDateTime
6eb0: 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
6ec0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
6ed0: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
6ee0: 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
6ef0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
6f00: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
6f10: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6f20: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
6f30: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
6f40: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
6f50: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
6f60: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
6f70: 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20  eCallbacks)..   
6f80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6f90: 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65      SQLiteDataRe
6fa0: 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20  aderValue value 
6fb0: 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61  = new SQLiteData
6fc0: 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a  ReaderValue();..
6fd0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
6fe0: 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20   complete;....  
6ff0: 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65            Invoke
7000: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
7010: 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52  k(i, new SQLiteR
7020: 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67  eadValueEventArg
7030: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
7040: 20 20 20 20 22 47 65 74 44 61 74 65 54 69 6d 65      "GetDateTime
7050: 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c  ", null, value),
7060: 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d   out complete);.
7070: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
7080: 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20  f (complete)..  
7090: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
70b0: 28 76 61 6c 75 65 2e 44 61 74 65 54 69 6d 65 56  (value.DateTimeV
70c0: 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
70d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70e0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
70f0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69  iteException("mi
7100: 73 73 69 6e 67 20 64 61 74 65 2f 74 69 6d 65 20  ssing date/time 
7110: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
7120: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7130: 20 20 20 72 65 74 75 72 6e 20 28 44 61 74 65 54     return (DateT
7140: 69 6d 65 29 76 61 6c 75 65 2e 44 61 74 65 54 69  ime)value.DateTi
7150: 6d 65 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  meValue;..      
7160: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7170: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
7180: 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69   (i >= PrivateVi
7190: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
71a0: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
71b0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
71c0: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
71d0: 6f 2e 47 65 74 44 61 74 65 54 69 6d 65 28 69 20  o.GetDateTime(i 
71e0: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
71f0: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
7200: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79          VerifyTy
7210: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 44 61 74  pe(i, DbType.Dat
7220: 65 54 69 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  eTime);..       
7230: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
7240: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
7250: 74 44 61 74 65 54 69 6d 65 28 5f 61 63 74 69 76  tDateTime(_activ
7260: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d  eStatement, i);.
7270: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
7280: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
7290: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 20 74 68   /// Retrieve th
72a0: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 64 65  e column as a de
72b0: 63 69 6d 61 6c 20 76 61 6c 75 65 0d 0a 20 20 20  cimal value..   
72c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
72d0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
72e0: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
72f0: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
7300: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
7310: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 64 65 63 69  // <returns>deci
7320: 6d 61 6c 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  mal</returns>.. 
7330: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
7340: 64 65 20 64 65 63 69 6d 61 6c 20 47 65 74 44 65  de decimal GetDe
7350: 63 69 6d 61 6c 28 69 6e 74 20 69 29 0d 0a 20 20  cimal(int i)..  
7360: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
7370: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
7380: 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72         VerifyFor
7390: 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Get();....      
73a0: 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20    if ((_flags & 
73b0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
73c0: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
73d0: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
73e0: 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65  backs) == SQLite
73f0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7400: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
7410: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
7420: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
7430: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44           SQLiteD
7440: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76  ataReaderValue v
7450: 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  alue = new SQLit
7460: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
7470: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7480: 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d   bool complete;.
7490: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
74a0: 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61  nvokeReadValueCa
74b0: 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51  llback(i, new SQ
74c0: 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65  LiteReadValueEve
74d0: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
74e0: 20 20 20 20 20 20 20 20 20 22 47 65 74 44 65 63           "GetDec
74f0: 69 6d 61 6c 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c  imal", null, val
7500: 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74  ue), out complet
7510: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
7520: 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29     if (complete)
7530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
7540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7550: 20 69 66 20 28 76 61 6c 75 65 2e 44 65 63 69 6d   if (value.Decim
7560: 61 6c 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29  alValue == null)
7570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7580: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7590: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
75a0: 22 6d 69 73 73 69 6e 67 20 64 65 63 69 6d 61 6c  "missing decimal
75b0: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b   return value");
75c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
75d0: 20 20 20 20 72 65 74 75 72 6e 20 28 64 65 63 69      return (deci
75e0: 6d 61 6c 29 76 61 6c 75 65 2e 44 65 63 69 6d 61  mal)value.Decima
75f0: 6c 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  lValue;..       
7600: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7610: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
7620: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
7630: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
7640: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
7650: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
7660: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
7670: 2e 47 65 74 44 65 63 69 6d 61 6c 28 69 20 2d 20  .GetDecimal(i - 
7680: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
7690: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
76a0: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
76b0: 28 69 2c 20 44 62 54 79 70 65 2e 44 65 63 69 6d  (i, DbType.Decim
76c0: 61 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  al);..        re
76d0: 74 75 72 6e 20 44 65 63 69 6d 61 6c 2e 50 61 72  turn Decimal.Par
76e0: 73 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  se(_activeStatem
76f0: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74  ent._sql.GetText
7700: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
7710: 74 2c 20 69 29 2c 20 4e 75 6d 62 65 72 53 74 79  t, i), NumberSty
7720: 6c 65 73 2e 41 6c 6c 6f 77 44 65 63 69 6d 61 6c  les.AllowDecimal
7730: 50 6f 69 6e 74 20 7c 20 4e 75 6d 62 65 72 53 74  Point | NumberSt
7740: 79 6c 65 73 2e 41 6c 6c 6f 77 45 78 70 6f 6e 65  yles.AllowExpone
7750: 6e 74 20 7c 20 4e 75 6d 62 65 72 53 74 79 6c 65  nt | NumberStyle
7760: 73 2e 41 6c 6c 6f 77 4c 65 61 64 69 6e 67 53 69  s.AllowLeadingSi
7770: 67 6e 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  gn, CultureInfo.
7780: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
7790: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
77a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
77b0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
77c0: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
77d0: 64 6f 75 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20  double..    /// 
77e0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
77f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
7800: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
7810: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
7820: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
7830: 65 74 75 72 6e 73 3e 64 6f 75 62 6c 65 3c 2f 72  eturns>double</r
7840: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
7850: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64 6f 75  lic override dou
7860: 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 69 6e  ble GetDouble(in
7870: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
7880: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
7890: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
78a0: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
78b0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
78c0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
78d0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
78e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
78f0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
7900: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7910: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
7920: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
7930: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
7940: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7950: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
7960: 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e  rValue value = n
7970: 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  ew SQLiteDataRea
7980: 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20  derValue();..   
7990: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f           bool co
79a0: 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20  mplete;....     
79b0: 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61         InvokeRea
79c0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69  dValueCallback(i
79d0: 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  , new SQLiteRead
79e0: 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d  ValueEventArgs(.
79f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7a00: 20 22 47 65 74 44 6f 75 62 6c 65 22 2c 20 6e 75   "GetDouble", nu
7a10: 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20  ll, value), out 
7a20: 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20  complete);....  
7a30: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
7a40: 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20  mplete)..       
7a50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7a60: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
7a70: 65 2e 44 6f 75 62 6c 65 56 61 6c 75 65 20 3d 3d  e.DoubleValue ==
7a80: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
7aa0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
7ab0: 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 64  ption("missing d
7ac0: 6f 75 62 6c 65 20 72 65 74 75 72 6e 20 76 61 6c  ouble return val
7ad0: 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ue");....       
7ae0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7af0: 28 64 6f 75 62 6c 65 29 76 61 6c 75 65 2e 44 6f  (double)value.Do
7b00: 75 62 6c 65 56 61 6c 75 65 3b 0d 0a 20 20 20 20  ubleValue;..    
7b10: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7b20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7b30: 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65  if (i >= Private
7b40: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
7b50: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
7b60: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7b70: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
7b80: 6e 66 6f 2e 47 65 74 44 6f 75 62 6c 65 28 69 20  nfo.GetDouble(i 
7b90: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
7ba0: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
7bb0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79          VerifyTy
7bc0: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 44 6f 75  pe(i, DbType.Dou
7bd0: 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ble);..        r
7be0: 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61  eturn _activeSta
7bf0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44  tement._sql.GetD
7c00: 6f 75 62 6c 65 28 5f 61 63 74 69 76 65 53 74 61  ouble(_activeSta
7c10: 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20  tement, i);..   
7c20: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
7c30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7c40: 20 52 65 74 75 72 6e 73 20 74 68 65 20 2e 4e 45   Returns the .NE
7c50: 54 20 74 79 70 65 20 6f 66 20 61 20 67 69 76 65  T type of a give
7c60: 6e 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f  n column..    //
7c70: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
7c80: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
7c90: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
7ca0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
7cb0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
7cc0: 3c 72 65 74 75 72 6e 73 3e 54 79 70 65 3c 2f 72  <returns>Type</r
7cd0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
7ce0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 54 79 70  lic override Typ
7cf0: 65 20 47 65 74 46 69 65 6c 64 54 79 70 65 28 69  e GetFieldType(i
7d00: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
7d10: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
7d20: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
7d30: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
7d40: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
7d50: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
7d60: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7d70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
7d80: 79 49 6e 66 6f 2e 47 65 74 46 69 65 6c 64 54 79  yInfo.GetFieldTy
7d90: 70 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  pe(i - PrivateVi
7da0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
7db0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
7dc0: 75 72 6e 20 53 51 4c 69 74 65 43 6f 6e 76 65 72  urn SQLiteConver
7dd0: 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79  t.SQLiteTypeToTy
7de0: 70 65 28 47 65 74 53 51 4c 69 74 65 54 79 70 65  pe(GetSQLiteType
7df0: 28 5f 66 6c 61 67 73 2c 20 69 29 29 3b 0d 0a 20  (_flags, i));.. 
7e00: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
7e10: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
7e20: 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 63 6f 6c  // Returns a col
7e30: 75 6d 6e 20 61 73 20 61 20 66 6c 6f 61 74 20 76  umn as a float v
7e40: 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  alue..    /// </
7e50: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
7e60: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
7e70: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
7e80: 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
7e90: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
7ea0: 75 72 6e 73 3e 66 6c 6f 61 74 3c 2f 72 65 74 75  urns>float</retu
7eb0: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
7ec0: 20 6f 76 65 72 72 69 64 65 20 66 6c 6f 61 74 20   override float 
7ed0: 47 65 74 46 6c 6f 61 74 28 69 6e 74 20 69 29 0d  GetFloat(int i).
7ee0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7ef0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
7f00: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
7f10: 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  ForGet();....   
7f20: 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73       if ((_flags
7f30: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
7f40: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
7f50: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
7f60: 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c  allbacks) == SQL
7f70: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7f80: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
7f90: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
7fa0: 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ks)..        {..
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
7fc0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
7fd0: 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51  e value = new SQ
7fe0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
7ff0: 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue();..        
8000: 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74      bool complet
8010: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
8020: 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75    InvokeReadValu
8030: 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77  eCallback(i, new
8040: 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65   SQLiteReadValue
8050: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
8060: 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74              "Get
8070: 46 6c 6f 61 74 22 2c 20 6e 75 6c 6c 2c 20 76 61  Float", null, va
8080: 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65  lue), out comple
8090: 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
80a0: 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65      if (complete
80b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
80c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
80d0: 20 20 69 66 20 28 76 61 6c 75 65 2e 46 6c 6f 61    if (value.Floa
80e0: 74 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  tValue == null).
80f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8100: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
8110: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
8120: 6d 69 73 73 69 6e 67 20 66 6c 6f 61 74 20 72 65  missing float re
8130: 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d  turn value");...
8140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8150: 20 72 65 74 75 72 6e 20 28 66 6c 6f 61 74 29 76   return (float)v
8160: 61 6c 75 65 2e 46 6c 6f 61 74 56 61 6c 75 65 3b  alue.FloatValue;
8170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8180: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
8190: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
81a0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
81b0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
81c0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
81d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
81e0: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 46 6c 6f   _keyInfo.GetFlo
81f0: 61 74 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  at(i - PrivateVi
8200: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
8210: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ;....        Ver
8220: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
8230: 65 2e 53 69 6e 67 6c 65 29 3b 0d 0a 20 20 20 20  e.Single);..    
8240: 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65      return Conve
8250: 72 74 2e 54 6f 53 69 6e 67 6c 65 28 5f 61 63 74  rt.ToSingle(_act
8260: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
8270: 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f 61 63 74  l.GetDouble(_act
8280: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
8290: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
82a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
82b0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
82c0: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
82d0: 47 75 69 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  Guid..    /// </
82e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
82f0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
8300: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
8310: 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
8320: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
8330: 75 72 6e 73 3e 47 75 69 64 3c 2f 72 65 74 75 72  urns>Guid</retur
8340: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
8350: 6f 76 65 72 72 69 64 65 20 47 75 69 64 20 47 65  override Guid Ge
8360: 74 47 75 69 64 28 69 6e 74 20 69 29 0d 0a 20 20  tGuid(int i)..  
8370: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
8380: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
8390: 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72         VerifyFor
83a0: 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Get();....      
83b0: 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20    if ((_flags & 
83c0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
83d0: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
83e0: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
83f0: 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65  backs) == SQLite
8400: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
8410: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
8420: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
8430: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8440: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44           SQLiteD
8450: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76  ataReaderValue v
8460: 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  alue = new SQLit
8470: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
8480: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
8490: 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d   bool complete;.
84a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
84b0: 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61  nvokeReadValueCa
84c0: 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51  llback(i, new SQ
84d0: 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65  LiteReadValueEve
84e0: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
84f0: 20 20 20 20 20 20 20 20 20 22 47 65 74 47 75 69           "GetGui
8500: 64 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29  d", null, value)
8510: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
8520: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8530: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
8540: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8560: 20 28 76 61 6c 75 65 2e 47 75 69 64 56 61 6c 75   (value.GuidValu
8570: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8590: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
85a0: 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69  Exception("missi
85b0: 6e 67 20 67 75 69 64 20 72 65 74 75 72 6e 20 76  ng guid return v
85c0: 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  alue");....     
85d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
85e0: 6e 20 28 47 75 69 64 29 76 61 6c 75 65 2e 47 75  n (Guid)value.Gu
85f0: 69 64 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  idValue;..      
8600: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8610: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
8620: 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69   (i >= PrivateVi
8630: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
8640: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
8650: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
8660: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
8670: 6f 2e 47 65 74 47 75 69 64 28 69 20 2d 20 50 72  o.GetGuid(i - Pr
8680: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
8690: 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
86a0: 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79      TypeAffinity
86b0: 20 61 66 66 69 6e 69 74 79 20 3d 20 56 65 72 69   affinity = Veri
86c0: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
86d0: 2e 47 75 69 64 29 3b 0d 0a 20 20 20 20 20 20 20  .Guid);..       
86e0: 20 69 66 20 28 61 66 66 69 6e 69 74 79 20 3d 3d   if (affinity ==
86f0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c   TypeAffinity.Bl
8700: 6f 62 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ob)..        {..
8710: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
8720: 5b 5d 20 62 75 66 66 65 72 20 3d 20 6e 65 77 20  [] buffer = new 
8730: 62 79 74 65 5b 31 36 5d 3b 0d 0a 20 20 20 20 20  byte[16];..     
8740: 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74         _activeSt
8750: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
8760: 42 79 74 65 73 28 5f 61 63 74 69 76 65 53 74 61  Bytes(_activeSta
8770: 74 65 6d 65 6e 74 2c 20 69 2c 20 30 2c 20 62 75  tement, i, 0, bu
8780: 66 66 65 72 2c 20 30 2c 20 31 36 29 3b 0d 0a 20  ffer, 0, 16);.. 
8790: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
87a0: 6e 20 6e 65 77 20 47 75 69 64 28 62 75 66 66 65  n new Guid(buffe
87b0: 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  r);..        }..
87c0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
87d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
87e0: 20 6e 65 77 20 47 75 69 64 28 5f 61 63 74 69 76   new Guid(_activ
87f0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
8800: 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65 53  GetText(_activeS
8810: 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a  tatement, i));..
8820: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
8830: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8840: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
8850: 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73 68 6f 72  column as a shor
8860: 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  t..    /// </sum
8870: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
8880: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
8890: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
88a0: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
88b0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
88c0: 73 3e 49 6e 74 31 36 3c 2f 72 65 74 75 72 6e 73  s>Int16</returns
88d0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
88e0: 65 72 72 69 64 65 20 49 6e 74 31 36 20 47 65 74  erride Int16 Get
88f0: 49 6e 74 31 36 28 69 6e 74 20 69 29 0d 0a 20 20  Int16(int i)..  
8900: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
8910: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
8920: 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72         VerifyFor
8930: 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Get();....      
8940: 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20    if ((_flags & 
8950: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8960: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
8970: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
8980: 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65  backs) == SQLite
8990: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
89a0: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
89b0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
89c0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
89d0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44           SQLiteD
89e0: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76  ataReaderValue v
89f0: 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  alue = new SQLit
8a00: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
8a10: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
8a20: 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d   bool complete;.
8a30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
8a40: 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61  nvokeReadValueCa
8a50: 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51  llback(i, new SQ
8a60: 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65  LiteReadValueEve
8a70: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
8a80: 20 20 20 20 20 20 20 20 20 22 47 65 74 49 6e 74           "GetInt
8a90: 31 36 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65  16", null, value
8aa0: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
8ab0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8ac0: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
8ad0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
8af0: 66 20 28 76 61 6c 75 65 2e 49 6e 74 31 36 56 61  f (value.Int16Va
8b00: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
8b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b20: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
8b30: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73  teException("mis
8b40: 73 69 6e 67 20 69 6e 74 31 36 20 72 65 74 75 72  sing int16 retur
8b50: 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20  n value");....  
8b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
8b70: 74 75 72 6e 20 28 49 6e 74 31 36 29 76 61 6c 75  turn (Int16)valu
8b80: 65 2e 49 6e 74 31 36 56 61 6c 75 65 3b 0d 0a 20  e.Int16Value;.. 
8b90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8ba0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8bb0: 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76     if (i >= Priv
8bc0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
8bd0: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
8be0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
8bf0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
8c00: 65 79 49 6e 66 6f 2e 47 65 74 49 6e 74 31 36 28  eyInfo.GetInt16(
8c10: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
8c20: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
8c30: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
8c40: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 49  Type(i, DbType.I
8c50: 6e 74 31 36 29 3b 0d 0a 20 20 20 20 20 20 20 20  nt16);..        
8c60: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
8c70: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
8c80: 49 6e 74 31 36 28 5f 61 63 74 69 76 65 53 74 61  Int16(_activeSta
8c90: 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20  tement, i);..   
8ca0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
8cb0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
8cc0: 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63   Retrieves the c
8cd0: 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 69 6e 74 0d  olumn as an int.
8ce0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
8cf0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
8d00: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
8d10: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
8d20: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
8d30: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
8d40: 49 6e 74 33 32 3c 2f 72 65 74 75 72 6e 73 3e 0d  Int32</returns>.
8d50: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
8d60: 72 69 64 65 20 49 6e 74 33 32 20 47 65 74 49 6e  ride Int32 GetIn
8d70: 74 33 32 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  t32(int i)..    
8d80: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
8d90: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
8da0: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
8db0: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
8dc0: 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51  if ((_flags & SQ
8dd0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
8de0: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
8df0: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
8e00: 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  cks) == SQLiteCo
8e10: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
8e20: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
8e30: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a  alueCallbacks)..
8e40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8e50: 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74         SQLiteDat
8e60: 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c  aReaderValue val
8e70: 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44  ue = new SQLiteD
8e80: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29  ataReaderValue()
8e90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
8ea0: 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d  ool complete;...
8eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76  .            Inv
8ec0: 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  okeReadValueCall
8ed0: 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69  back(i, new SQLi
8ee0: 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74  teReadValueEvent
8ef0: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
8f00: 20 20 20 20 20 20 20 22 47 65 74 49 6e 74 33 32         "GetInt32
8f10: 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c  ", null, value),
8f20: 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d   out complete);.
8f30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
8f40: 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20  f (complete)..  
8f50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
8f70: 28 76 61 6c 75 65 2e 49 6e 74 33 32 56 61 6c 75  (value.Int32Valu
8f80: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fa0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
8fb0: 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69  Exception("missi
8fc0: 6e 67 20 69 6e 74 33 32 20 72 65 74 75 72 6e 20  ng int32 return 
8fd0: 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  value");....    
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8ff0: 72 6e 20 28 49 6e 74 33 32 29 76 61 6c 75 65 2e  rn (Int32)value.
9000: 49 6e 74 33 32 56 61 6c 75 65 3b 0d 0a 20 20 20  Int32Value;..   
9010: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
9020: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9030: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
9040: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
9050: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
9060: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9070: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
9080: 49 6e 66 6f 2e 47 65 74 49 6e 74 33 32 28 69 20  Info.GetInt32(i 
9090: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
90a0: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
90b0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79          VerifyTy
90c0: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 49 6e 74  pe(i, DbType.Int
90d0: 33 32 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  32);..        re
90e0: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
90f0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e  ement._sql.GetIn
9100: 74 33 32 28 5f 61 63 74 69 76 65 53 74 61 74 65  t32(_activeState
9110: 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d  ment, i);..    }
9120: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
9130: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
9140: 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c  etrieves the col
9150: 75 6d 6e 20 61 73 20 61 20 6c 6f 6e 67 0d 0a 20  umn as a long.. 
9160: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9170: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
9180: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
9190: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
91a0: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
91b0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 49 6e   /// <returns>In
91c0: 74 36 34 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  t64</returns>.. 
91d0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
91e0: 64 65 20 49 6e 74 36 34 20 47 65 74 49 6e 74 36  de Int64 GetInt6
91f0: 34 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  4(int i)..    {.
9200: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
9210: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
9220: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
9230: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
9240: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
9250: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
9260: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
9270: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
9280: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
9290: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
92a0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
92b0: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
92c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
92d0: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
92e0: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
92f0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
9300: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
9310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
9320: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
9330: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
9340: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
9350: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
9360: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
9370: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
9380: 20 20 20 20 20 22 47 65 74 49 6e 74 36 34 22 2c       "GetInt64",
9390: 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f   null, value), o
93a0: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
93b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
93c0: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
93d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
93e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
93f0: 61 6c 75 65 2e 49 6e 74 36 34 56 61 6c 75 65 20  alue.Int64Value 
9400: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
9420: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
9430: 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67  ception("missing
9440: 20 69 6e 74 36 34 20 72 65 74 75 72 6e 20 76 61   int64 return va
9450: 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lue");....      
9460: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9470: 20 28 49 6e 74 36 34 29 76 61 6c 75 65 2e 49 6e   (Int64)value.In
9480: 74 36 34 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  t64Value;..     
9490: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
94a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
94b0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
94c0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
94d0: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
94e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
94f0: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
9500: 66 6f 2e 47 65 74 49 6e 74 36 34 28 69 20 2d 20  fo.GetInt64(i - 
9510: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
9520: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
9530: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
9540: 28 69 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34  (i, DbType.Int64
9550: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
9560: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
9570: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 36  ent._sql.GetInt6
9580: 34 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  4(_activeStateme
9590: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
95a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
95b0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
95c0: 72 69 65 76 65 73 20 74 68 65 20 6e 61 6d 65 20  rieves the name 
95d0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a 20  of the column.. 
95e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
95f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
9600: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
9610: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
9620: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
9630: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74   /// <returns>st
9640: 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ring</returns>..
9650: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
9660: 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 4e 61  ide string GetNa
9670: 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  me(int i)..    {
9680: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
9690: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
96a0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
96b0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
96c0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
96d0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
96e0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
96f0: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d   _keyInfo.GetNam
9700: 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  e(i - PrivateVis
9710: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
9720: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
9730: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
9740: 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e  ent._sql.ColumnN
9750: 61 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ame(_activeState
9760: 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d  ment, i);..    }
9770: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
9780: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
9790: 65 74 75 72 6e 73 20 74 68 65 20 6e 61 6d 65 20  eturns the name 
97a0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
97b0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
97c0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  the specified co
97d0: 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  lumn...    /// <
97e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
97f0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
9800: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
9810: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
9820: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
9830: 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65  turns>string</re
9840: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
9850: 69 63 20 73 74 72 69 6e 67 20 47 65 74 44 61 74  ic string GetDat
9860: 61 62 61 73 65 4e 61 6d 65 28 69 6e 74 20 69 29  abaseName(int i)
9870: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
9880: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9890: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
98a0: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
98b0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
98c0: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
98d0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
98e0: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
98f0: 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50 72 69  .GetName(i - Pri
9900: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
9910: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
9920: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
9930: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
9940: 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61  ColumnDatabaseNa
9950: 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  me(_activeStatem
9960: 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d  ent, i);..    }.
9970: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
9980: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
9990: 74 75 72 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  turns the name o
99a0: 66 20 74 68 65 20 74 61 62 6c 65 20 61 73 73 6f  f the table asso
99b0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
99c0: 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e  specified column
99d0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
99e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
99f0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
9a00: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
9a10: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
9a20: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
9a30: 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e  s>string</return
9a40: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  s>..    public s
9a50: 74 72 69 6e 67 20 47 65 74 54 61 62 6c 65 4e 61  tring GetTableNa
9a60: 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  me(int i)..    {
9a70: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
9a80: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
9a90: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
9aa0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
9ab0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
9ac0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
9ad0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9ae0: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d   _keyInfo.GetNam
9af0: 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  e(i - PrivateVis
9b00: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
9b10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
9b20: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
9b30: 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54  ent._sql.ColumnT
9b40: 61 62 6c 65 4e 61 6d 65 28 5f 61 63 74 69 76 65  ableName(_active
9b50: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a  Statement, i);..
9b60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
9b70: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
9b80: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
9b90: 6f 72 69 67 69 6e 61 6c 20 6e 61 6d 65 20 6f 66  original name of
9ba0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
9bb0: 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  olumn...    /// 
9bc0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9bd0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
9be0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
9bf0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
9c00: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
9c10: 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72  eturns>string</r
9c20: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
9c30: 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74 4f 72  lic string GetOr
9c40: 69 67 69 6e 61 6c 4e 61 6d 65 28 69 6e 74 20 69  iginalName(int i
9c50: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9c60: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9c70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
9c80: 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69   (i >= PrivateVi
9c90: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
9ca0: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
9cb0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9cc0: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
9cd0: 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50 72  o.GetName(i - Pr
9ce0: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
9cf0: 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
9d00: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
9d10: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
9d20: 2e 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e  .ColumnOriginalN
9d30: 61 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ame(_activeState
9d40: 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d  ment, i);..    }
9d50: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
9d60: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
9d70: 65 74 72 69 65 76 65 73 20 74 68 65 20 69 20 6f  etrieves the i o
9d80: 66 20 61 20 63 6f 6c 75 6d 6e 2c 20 67 69 76 65  f a column, give
9d90: 6e 20 69 74 73 20 6e 61 6d 65 0d 0a 20 20 20 20  n its name..    
9da0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9db0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
9dc0: 61 6d 65 3d 22 6e 61 6d 65 22 3e 54 68 65 20 6e  ame="name">The n
9dd0: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ame of the colum
9de0: 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  n to retrieve</p
9df0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
9e00: 72 65 74 75 72 6e 73 3e 54 68 65 20 69 6e 74 20  returns>The int 
9e10: 69 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 3c  i of the column<
9e20: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
9e30: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
9e40: 6e 74 20 47 65 74 4f 72 64 69 6e 61 6c 28 73 74  nt GetOrdinal(st
9e50: 72 69 6e 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20  ring name)..    
9e60: 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69  {..      CheckDi
9e70: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
9e80: 20 20 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44     if (_throwOnD
9e90: 69 73 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43  isposed) SQLiteC
9ea0: 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f  ommand.Check(_co
9eb0: 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20  mmand);....     
9ec0: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
9ed0: 54 45 3a 20 46 69 72 73 74 2c 20 63 68 65 63 6b  TE: First, check
9ee0: 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   if the column n
9ef0: 61 6d 65 20 63 61 63 68 65 20 68 61 73 20 62 65  ame cache has be
9f00: 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 79  en initialized y
9f10: 65 74 2e 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  et...      //   
9f20: 20 20 20 20 49 66 20 6e 6f 74 2c 20 64 6f 20 69      If not, do i
9f30: 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 2f 2f  t now...      //
9f40: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 66 69 65  ..      if (_fie
9f50: 6c 64 49 6e 64 65 78 65 73 20 3d 3d 20 6e 75 6c  ldIndexes == nul
9f60: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
9f70: 20 20 20 20 20 20 20 5f 66 69 65 6c 64 49 6e 64         _fieldInd
9f80: 65 78 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69  exes = new Dicti
9f90: 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e  onary<string, in
9fa0: 74 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t>(..           
9fb0: 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 65     StringCompare
9fc0: 72 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  r.OrdinalIgnoreC
9fd0: 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ase);..      }..
9fe0: 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20  ..      //..    
9ff0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 65 78 74 2c    // NOTE: Next,
a000: 20 73 65 65 20 69 66 20 74 68 65 20 69 6e 64 65   see if the inde
a010: 78 20 66 6f 72 20 74 68 65 20 72 65 71 75 65 73  x for the reques
a020: 74 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ted column name 
a030: 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20  has been..      
a040: 2f 2f 20 20 20 20 20 20 20 63 61 63 68 65 64 20  //       cached 
a050: 61 6c 72 65 61 64 79 2e 20 20 49 66 20 73 6f 2c  already.  If so,
a060: 20 72 65 74 75 72 6e 20 74 68 65 20 63 61 63 68   return the cach
a070: 65 64 20 76 61 6c 75 65 2e 20 20 4f 74 68 65 72  ed value.  Other
a080: 77 69 73 65 2c 0d 0a 20 20 20 20 20 20 2f 2f 20  wise,..      // 
a090: 20 20 20 20 20 20 6c 6f 6f 6b 75 70 20 74 68 65        lookup the
a0a0: 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 6e 20   value and then 
a0b0: 63 61 63 68 65 20 74 68 65 20 72 65 73 75 6c 74  cache the result
a0c0: 20 66 6f 72 20 66 75 74 75 72 65 20 75 73 65 2e   for future use.
a0d0: 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20  ..      //..    
a0e0: 20 20 69 6e 74 20 72 3b 0d 0a 0d 0a 20 20 20 20    int r;....    
a0f0: 20 20 69 66 20 28 21 5f 66 69 65 6c 64 49 6e 64    if (!_fieldInd
a100: 65 78 65 73 2e 54 72 79 47 65 74 56 61 6c 75 65  exes.TryGetValue
a110: 28 6e 61 6d 65 2c 20 6f 75 74 20 72 29 29 0d 0a  (name, out r))..
a120: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a130: 20 20 20 72 20 3d 20 5f 61 63 74 69 76 65 53 74     r = _activeSt
a140: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c  atement._sql.Col
a150: 75 6d 6e 49 6e 64 65 78 28 5f 61 63 74 69 76 65  umnIndex(_active
a160: 53 74 61 74 65 6d 65 6e 74 2c 20 6e 61 6d 65 29  Statement, name)
a170: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
a180: 66 20 28 72 20 3d 3d 20 2d 31 20 26 26 20 5f 6b  f (r == -1 && _k
a190: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
a1a0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 20 3d 20              r = 
a1c0: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4f 72 64 69  _keyInfo.GetOrdi
a1d0: 6e 61 6c 28 6e 61 6d 65 29 3b 0d 0a 20 20 20 20  nal(name);..    
a1e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 20            if (r 
a1f0: 3e 20 2d 31 29 20 72 20 2b 3d 20 50 72 69 76 61  > -1) r += Priva
a200: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
a210: 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  unt;..          
a220: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 5f  }....          _
a230: 66 69 65 6c 64 49 6e 64 65 78 65 73 2e 41 64 64  fieldIndexes.Add
a240: 28 6e 61 6d 65 2c 20 72 29 3b 0d 0a 20 20 20 20  (name, r);..    
a250: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
a260: 75 72 6e 20 72 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  urn r;..    }...
a270: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
a280: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 63 68 65  y>..    /// Sche
a290: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ma information i
a2a0: 6e 20 53 51 4c 69 74 65 20 69 73 20 64 69 66 66  n SQLite is diff
a2b0: 69 63 75 6c 74 20 74 6f 20 6d 61 70 20 69 6e 74  icult to map int
a2c0: 6f 20 2e 4e 45 54 20 63 6f 6e 76 65 6e 74 69 6f  o .NET conventio
a2d0: 6e 73 2c 20 73 6f 20 61 20 6c 6f 74 20 6f 66 20  ns, so a lot of 
a2e0: 77 6f 72 6b 20 6d 75 73 74 20 62 65 20 64 6f 6e  work must be don
a2f0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 67 61  e..    /// to ga
a300: 74 68 65 72 20 74 68 65 20 6e 65 63 65 73 73 61  ther the necessa
a310: 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73  ry information s
a320: 6f 20 69 74 20 63 61 6e 20 62 65 20 72 65 70 72  o it can be repr
a330: 65 73 65 6e 74 65 64 20 69 6e 20 61 6e 20 41 44  esented in an AD
a340: 4f 2e 4e 45 54 20 6d 61 6e 6e 65 72 2e 0d 0a 20  O.NET manner... 
a350: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
a360: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
a370: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 44 61  rns>Returns a Da
a380: 74 61 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  taTable containi
a390: 6e 67 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  ng the schema in
a3a0: 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68  formation for th
a3b0: 65 20 61 63 74 69 76 65 20 53 45 4c 45 43 54 20  e active SELECT 
a3c0: 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20  statement being 
a3d0: 70 72 6f 63 65 73 73 65 64 2e 3c 2f 72 65 74 75  processed.</retu
a3e0: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
a3f0: 20 6f 76 65 72 72 69 64 65 20 44 61 74 61 54 61   override DataTa
a400: 62 6c 65 20 47 65 74 53 63 68 65 6d 61 54 61 62  ble GetSchemaTab
a410: 6c 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  le()..    {..   
a420: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
a430: 28 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ();..      retur
a440: 6e 20 47 65 74 53 63 68 65 6d 61 54 61 62 6c 65  n GetSchemaTable
a450: 28 74 72 75 65 2c 20 66 61 6c 73 65 29 3b 0d 0a  (true, false);..
a460: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
a470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a4c0: 23 72 65 67 69 6f 6e 20 43 6f 6c 75 6d 6e 50 61  #region ColumnPa
a4d0: 72 65 6e 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  rent Class..    
a4e0: 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
a4f0: 6c 61 73 73 20 43 6f 6c 75 6d 6e 50 61 72 65 6e  lass ColumnParen
a500: 74 20 3a 20 49 45 71 75 61 6c 69 74 79 43 6f 6d  t : IEqualityCom
a510: 70 61 72 65 72 3c 43 6f 6c 75 6d 6e 50 61 72 65  parer<ColumnPare
a520: 6e 74 3e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nt>..    {..    
a530: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
a540: 69 63 20 46 69 65 6c 64 73 0d 0a 20 20 20 20 20  ic Fields..     
a550: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
a560: 20 44 61 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a   DatabaseName;..
a570: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
a580: 74 72 69 6e 67 20 54 61 62 6c 65 4e 61 6d 65 3b  tring TableName;
a590: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
a5a0: 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61   string ColumnNa
a5b0: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  me;..        #en
a5c0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
a5d0: 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a620: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
a630: 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
a640: 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  s..        publi
a650: 63 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 29  c ColumnParent()
a660: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
a670: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
a680: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
a690: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
a6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a6f0: 20 70 75 62 6c 69 63 20 43 6f 6c 75 6d 6e 50 61   public ColumnPa
a700: 72 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rent(..         
a710: 20 20 20 73 74 72 69 6e 67 20 64 61 74 61 62 61     string databa
a720: 73 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  seName,..       
a730: 20 20 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c       string tabl
a740: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
a750: 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d      string colum
a760: 6e 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  nName..         
a770: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
a780: 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20    : this()..    
a790: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a7a0: 20 20 20 74 68 69 73 2e 44 61 74 61 62 61 73 65     this.Database
a7b0: 4e 61 6d 65 20 3d 20 64 61 74 61 62 61 73 65 4e  Name = databaseN
a7c0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
a7d0: 20 20 74 68 69 73 2e 54 61 62 6c 65 4e 61 6d 65    this.TableName
a7e0: 20 3d 20 74 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20   = tableName;.. 
a7f0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
a800: 43 6f 6c 75 6d 6e 4e 61 6d 65 20 3d 20 63 6f 6c  ColumnName = col
a810: 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  umnName;..      
a820: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
a830: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
a840: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a890: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 45        #region IE
a8a0: 71 75 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c  qualityComparer<
a8b0: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20 4d 65  ColumnParent> Me
a8c0: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70  mbers..        p
a8d0: 75 62 6c 69 63 20 62 6f 6f 6c 20 45 71 75 61 6c  ublic bool Equal
a8e0: 73 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 78  s(ColumnParent x
a8f0: 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 79  , ColumnParent y
a900: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
a910: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 78            if ((x
a920: 20 3d 3d 20 6e 75 6c 6c 29 20 26 26 20 28 79 20   == null) && (y 
a930: 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
a940: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a950: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a960: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
a970: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
a980: 20 20 20 65 6c 73 65 20 69 66 20 28 28 78 20 3d     else if ((x =
a990: 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 79 20 3d 3d  = null) || (y ==
a9a0: 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
a9b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a9c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
a9d0: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
a9e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
a9f0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
aa00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
aa10: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
aa20: 6e 67 2e 45 71 75 61 6c 73 28 78 2e 44 61 74 61  ng.Equals(x.Data
aa30: 62 61 73 65 4e 61 6d 65 2c 20 79 2e 44 61 74 61  baseName, y.Data
aa40: 62 61 73 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  baseName,..     
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa60: 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
aa70: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
aa80: 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20 20 20  eCase))..       
aa90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aab0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
aac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
aad0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
aae0: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
aaf0: 45 71 75 61 6c 73 28 78 2e 54 61 62 6c 65 4e 61  Equals(x.TableNa
ab00: 6d 65 2c 20 79 2e 54 61 62 6c 65 4e 61 6d 65 2c  me, y.TableName,
ab10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ab20: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
ab30: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
ab40: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a  alIgnoreCase))..
ab50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ab70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
ab80: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
ab90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
aba0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
abb0: 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 78 2e  String.Equals(x.
abc0: 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 79 2e 43 6f  ColumnName, y.Co
abd0: 6c 75 6d 6e 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  lumnName,..     
abe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abf0: 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
ac00: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
ac10: 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20 20 20  eCase))..       
ac20: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ac30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac40: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
ac60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ac70: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
ac80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ac90: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
aca0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
acb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ace0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
acf0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
ad00: 69 6e 74 20 47 65 74 48 61 73 68 43 6f 64 65 28  int GetHashCode(
ad10: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6f 62 6a  ColumnParent obj
ad20: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
ad30: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 65            int re
ad40: 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20  sult = 0;....   
ad50: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6f 62           if ((ob
ad60: 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28 6f  j != null) && (o
ad70: 62 6a 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 20  bj.DatabaseName 
ad80: 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  != null))..     
ad90: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
ada0: 74 20 5e 3d 20 6f 62 6a 2e 44 61 74 61 62 61 73  t ^= obj.Databas
adb0: 65 4e 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64  eName.GetHashCod
adc0: 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
add0: 20 20 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20      if ((obj != 
ade0: 6e 75 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 54 61  null) && (obj.Ta
adf0: 62 6c 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  bleName != null)
ae00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ae10: 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a     result ^= obj
ae20: 2e 54 61 62 6c 65 4e 61 6d 65 2e 47 65 74 48 61  .TableName.GetHa
ae30: 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20  shCode();....   
ae40: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6f 62           if ((ob
ae50: 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28 6f  j != null) && (o
ae60: 62 6a 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 20 21 3d  bj.ColumnName !=
ae70: 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
ae80: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
ae90: 5e 3d 20 6f 62 6a 2e 43 6f 6c 75 6d 6e 4e 61 6d  ^= obj.ColumnNam
aea0: 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28 29 3b  e.GetHashCode();
aeb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
aec0: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
aed0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
aee0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
aef0: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
af00: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
af10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af50: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70  ///////....    p
af60: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
af70: 69 64 20 47 65 74 53 74 61 74 65 6d 65 6e 74 43  id GetStatementC
af80: 6f 6c 75 6d 6e 50 61 72 65 6e 74 73 28 0d 0a 20  olumnParents(.. 
af90: 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 73         SQLiteBas
afa0: 65 20 73 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20  e sql,..        
afb0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
afc0: 73 74 6d 74 2c 0d 0a 20 20 20 20 20 20 20 20 69  stmt,..        i
afd0: 6e 74 20 66 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a  nt fieldCount,..
afe0: 20 20 20 20 20 20 20 20 72 65 66 20 44 69 63 74          ref Dict
aff0: 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72  ionary<ColumnPar
b000: 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20  ent, List<int>> 
b010: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c  parentToColumns,
b020: 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 44 69  ..        ref Di
b030: 63 74 69 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f  ctionary<int, Co
b040: 6c 75 6d 6e 50 61 72 65 6e 74 3e 20 63 6f 6c 75  lumnParent> colu
b050: 6d 6e 54 6f 50 61 72 65 6e 74 0d 0a 20 20 20 20  mnToParent..    
b060: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
b070: 20 20 20 20 20 20 69 66 20 28 70 61 72 65 6e 74        if (parent
b080: 54 6f 43 6f 6c 75 6d 6e 73 20 3d 3d 20 6e 75 6c  ToColumns == nul
b090: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
b0a0: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20  parentToColumns 
b0b0: 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
b0c0: 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c  <ColumnParent, L
b0d0: 69 73 74 3c 69 6e 74 3e 3e 28 0d 0a 20 20 20 20  ist<int>>(..    
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
b0f0: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 29 29 3b  ColumnParent());
b100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
b110: 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d  columnToParent =
b120: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
b130: 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f 50 61 72       columnToPar
b140: 65 6e 74 20 3d 20 6e 65 77 20 44 69 63 74 69 6f  ent = new Dictio
b150: 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e  nary<int, Column
b160: 50 61 72 65 6e 74 3e 28 29 3b 0d 0a 0d 0a 20 20  Parent>();....  
b170: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e        for (int n
b180: 20 3d 20 30 3b 20 6e 20 3c 20 66 69 65 6c 64 43   = 0; n < fieldC
b190: 6f 75 6e 74 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20  ount; n++)..    
b1a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b1b0: 20 20 20 73 74 72 69 6e 67 20 64 61 74 61 62 61     string databa
b1c0: 73 65 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c  seName = sql.Col
b1d0: 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28  umnDatabaseName(
b1e0: 73 74 6d 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20  stmt, n);..     
b1f0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 61         string ta
b200: 62 6c 65 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f  bleName = sql.Co
b210: 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 73 74  lumnTableName(st
b220: 6d 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20  mt, n);..       
b230: 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6c 75       string colu
b240: 6d 6e 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c  mnName = sql.Col
b250: 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28  umnOriginalName(
b260: 73 74 6d 74 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20  stmt, n);....   
b270: 20 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 50           ColumnP
b280: 61 72 65 6e 74 20 6b 65 79 20 3d 20 6e 65 77 20  arent key = new 
b290: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 64 61 74  ColumnParent(dat
b2a0: 61 62 61 73 65 4e 61 6d 65 2c 20 74 61 62 6c 65  abaseName, table
b2b0: 4e 61 6d 65 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  Name, null);..  
b2c0: 20 20 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e            Column
b2d0: 50 61 72 65 6e 74 20 76 61 6c 75 65 20 3d 20 6e  Parent value = n
b2e0: 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28  ew ColumnParent(
b2f0: 64 61 74 61 62 61 73 65 4e 61 6d 65 2c 20 74 61  databaseName, ta
b300: 62 6c 65 4e 61 6d 65 2c 20 63 6f 6c 75 6d 6e 4e  bleName, columnN
b310: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
b320: 20 20 20 20 20 4c 69 73 74 3c 69 6e 74 3e 20 69       List<int> i
b330: 6e 64 65 78 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20  ndexList;....   
b340: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 70 61           if (!pa
b350: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 54 72  rentToColumns.Tr
b360: 79 47 65 74 56 61 6c 75 65 28 6b 65 79 2c 20 6f  yGetValue(key, o
b370: 75 74 20 69 6e 64 65 78 4c 69 73 74 29 29 0d 0a  ut indexList))..
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e  parentToColumns.
b3a0: 41 64 64 28 6b 65 79 2c 20 6e 65 77 20 4c 69 73  Add(key, new Lis
b3b0: 74 3c 69 6e 74 3e 28 6e 65 77 20 69 6e 74 5b 5d  t<int>(new int[]
b3c0: 20 7b 20 6e 20 7d 29 29 3b 0d 0a 20 20 20 20 20   { n }));..     
b3d0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
b3e0: 69 6e 64 65 78 4c 69 73 74 20 21 3d 20 6e 75 6c  indexList != nul
b3f0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
b400: 20 20 20 20 69 6e 64 65 78 4c 69 73 74 2e 41 64      indexList.Ad
b410: 64 28 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  d(n);..         
b420: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
b430: 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 54           parentT
b440: 6f 43 6f 6c 75 6d 6e 73 5b 6b 65 79 5d 20 3d 20  oColumns[key] = 
b450: 6e 65 77 20 4c 69 73 74 3c 69 6e 74 3e 28 6e 65  new List<int>(ne
b460: 77 20 69 6e 74 5b 5d 20 7b 20 6e 20 7d 29 3b 0d  w int[] { n });.
b470: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ...            c
b480: 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 2e 41 64  olumnToParent.Ad
b490: 64 28 6e 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  d(n, value);..  
b4a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
b4b0: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
b4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b500: 2f 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65  /....    private
b510: 20 73 74 61 74 69 63 20 69 6e 74 20 43 6f 75 6e   static int Coun
b520: 74 50 61 72 65 6e 74 73 28 0d 0a 20 20 20 20 20  tParents(..     
b530: 20 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 43 6f     Dictionary<Co
b540: 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73 74  lumnParent, List
b550: 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54 6f 43  <int>> parentToC
b560: 6f 6c 75 6d 6e 73 0d 0a 20 20 20 20 20 20 20 20  olumns..        
b570: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b580: 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 30    int result = 0
b590: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
b5a0: 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73  (parentToColumns
b5b0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
b5c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b5d0: 20 20 66 6f 72 65 61 63 68 20 28 43 6f 6c 75 6d    foreach (Colum
b5e0: 6e 50 61 72 65 6e 74 20 6b 65 79 20 69 6e 20 70  nParent key in p
b5f0: 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 4b  arentToColumns.K
b600: 65 79 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  eys)..          
b610: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b620: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
b630: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
b640: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
b650: 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
b660: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
b670: 61 62 6c 65 4e 61 6d 65 20 3d 20 6b 65 79 2e 54  ableName = key.T
b680: 61 62 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  ableName;....   
b690: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b6a0: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
b6b0: 45 6d 70 74 79 28 74 61 62 6c 65 4e 61 6d 65 29  Empty(tableName)
b6c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b6d0: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
b6e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b6f0: 20 20 20 20 72 65 73 75 6c 74 2b 2b 3b 0d 0a 20      result++;.. 
b700: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b710: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b720: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
b730: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
b740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b790: 20 20 20 69 6e 74 65 72 6e 61 6c 20 44 61 74 61     internal Data
b7a0: 54 61 62 6c 65 20 47 65 74 53 63 68 65 6d 61 54  Table GetSchemaT
b7b0: 61 62 6c 65 28 62 6f 6f 6c 20 77 61 6e 74 55 6e  able(bool wantUn
b7c0: 69 71 75 65 49 6e 66 6f 2c 20 62 6f 6f 6c 20 77  iqueInfo, bool w
b7d0: 61 6e 74 44 65 66 61 75 6c 74 56 61 6c 75 65 29  antDefaultValue)
b7e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43  ..    {..      C
b7f0: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
b800: 20 20 20 20 20 69 66 20 28 5f 74 68 72 6f 77 4f       if (_throwO
b810: 6e 44 69 73 70 6f 73 65 64 29 20 53 51 4c 69 74  nDisposed) SQLit
b820: 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f  eCommand.Check(_
b830: 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20  command);....   
b840: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20     //..      // 
b850: 42 55 47 46 49 58 3a 20 57 65 20 6e 65 65 64 20  BUGFIX: We need 
b860: 74 6f 20 71 75 69 63 6b 6c 79 20 73 63 61 6e 20  to quickly scan 
b870: 61 6c 6c 20 74 68 65 20 66 69 65 6c 64 73 20 69  all the fields i
b880: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20  n the current.. 
b890: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
b8a0: 22 72 65 73 75 6c 74 20 73 65 74 22 20 74 6f 20  "result set" to 
b8b0: 73 65 65 20 68 6f 77 20 6d 61 6e 79 20 64 69 73  see how many dis
b8c0: 74 69 6e 63 74 20 74 61 62 6c 65 73 20 61 72 65  tinct tables are
b8d0: 20 61 63 74 75 61 6c 6c 79 0d 0a 20 20 20 20 20   actually..     
b8e0: 20 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 76 6f   //         invo
b8f0: 6c 76 65 64 2e 20 20 54 68 69 73 20 69 6e 66 6f  lved.  This info
b900: 72 6d 61 74 69 6f 6e 20 69 73 20 6e 65 63 65 73  rmation is neces
b910: 73 61 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d  sary so that som
b920: 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  e..      //     
b930: 20 20 20 20 69 6e 74 65 6c 6c 69 67 65 6e 74 20      intelligent 
b940: 64 65 63 69 73 69 6f 6e 73 20 63 61 6e 20 62 65  decisions can be
b950: 20 6d 61 64 65 20 77 68 65 6e 20 63 6f 6e 73 74   made when const
b960: 72 75 63 74 69 6e 67 20 74 68 65 0d 0a 20 20 20  ructing the..   
b970: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 6d 65     //         me
b980: 74 61 64 61 74 61 20 62 65 6c 6f 77 2e 20 20 46  tadata below.  F
b990: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 77 65 20 6e  or example, we n
b9a0: 65 65 64 20 74 6f 20 62 65 20 76 65 72 79 20 63  eed to be very c
b9b0: 61 72 65 66 75 6c 0d 0a 20 20 20 20 20 20 2f 2f  areful..      //
b9c0: 20 20 20 20 20 20 20 20 20 61 62 6f 75 74 20 66           about f
b9d0: 6c 61 67 67 69 6e 67 20 61 20 70 61 72 74 69 63  lagging a partic
b9e0: 75 6c 61 72 20 63 6f 6c 75 6d 6e 20 61 73 20 22  ular column as "
b9f0: 75 6e 69 71 75 65 22 20 6a 75 73 74 0d 0a 20 20  unique" just..  
ba00: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 62      //         b
ba10: 65 63 61 75 73 65 20 69 74 20 77 61 73 20 69 6e  ecause it was in
ba20: 20 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 75 6e   its original un
ba30: 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73  derlying databas
ba40: 65 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 2f  e table..      /
ba50: 2f 20 20 20 20 20 20 20 20 20 69 66 20 74 68 65  /         if the
ba60: 72 65 20 61 72 65 20 6e 6f 77 20 6d 75 6c 74 69  re are now multi
ba70: 70 6c 65 20 74 61 62 6c 65 73 20 69 6e 76 6f 6c  ple tables invol
ba80: 76 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ved in the..    
ba90: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 22 72 65    //         "re
baa0: 73 75 6c 74 20 73 65 74 22 2e 20 20 53 65 65 20  sult set".  See 
bab0: 74 69 63 6b 65 74 20 5b 37 65 33 66 61 39 33 37  ticket [7e3fa937
bac0: 34 34 5d 20 66 6f 72 20 6d 6f 72 65 20 64 65 74  44] for more det
bad0: 61 69 6c 65 64 0d 0a 20 20 20 20 20 20 2f 2f 20  ailed..      // 
bae0: 20 20 20 20 20 20 20 20 69 6e 66 6f 72 6d 61 74          informat
baf0: 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  ion...      //..
bb00: 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79        Dictionary
bb10: 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c  <ColumnParent, L
bb20: 69 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74  ist<int>> parent
bb30: 54 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e 75 6c 6c  ToColumns = null
bb40: 3b 0d 0a 20 20 20 20 20 20 44 69 63 74 69 6f 6e  ;..      Diction
bb50: 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50  ary<int, ColumnP
bb60: 61 72 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54 6f 50  arent> columnToP
bb70: 61 72 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  arent = null;...
bb80: 0a 20 20 20 20 20 20 47 65 74 53 74 61 74 65 6d  .      GetStatem
bb90: 65 6e 74 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 73  entColumnParents
bba0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 63 6f  (..          _co
bbb0: 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
bbc0: 2e 5f 73 71 6c 2c 20 5f 61 63 74 69 76 65 53 74  ._sql, _activeSt
bbd0: 61 74 65 6d 65 6e 74 2c 20 5f 66 69 65 6c 64 43  atement, _fieldC
bbe0: 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  ount,..         
bbf0: 20 72 65 66 20 70 61 72 65 6e 74 54 6f 43 6f 6c   ref parentToCol
bc00: 75 6d 6e 73 2c 20 72 65 66 20 63 6f 6c 75 6d 6e  umns, ref column
bc10: 54 6f 50 61 72 65 6e 74 29 3b 0d 0a 0d 0a 20 20  ToParent);....  
bc20: 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 74 62      DataTable tb
bc30: 6c 20 3d 20 6e 65 77 20 44 61 74 61 54 61 62 6c  l = new DataTabl
bc40: 65 28 22 53 63 68 65 6d 61 54 61 62 6c 65 22 29  e("SchemaTable")
bc50: 3b 0d 0a 20 20 20 20 20 20 44 61 74 61 54 61 62  ;..      DataTab
bc60: 6c 65 20 74 62 6c 49 6e 64 65 78 65 73 20 3d 20  le tblIndexes = 
bc70: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 44 61 74  null;..      Dat
bc80: 61 54 61 62 6c 65 20 74 62 6c 49 6e 64 65 78 43  aTable tblIndexC
bc90: 6f 6c 75 6d 6e 73 3b 0d 0a 20 20 20 20 20 20 44  olumns;..      D
bca0: 61 74 61 52 6f 77 20 72 6f 77 3b 0d 0a 20 20 20  ataRow row;..   
bcb0: 20 20 20 73 74 72 69 6e 67 20 74 65 6d 70 3b 0d     string temp;.
bcc0: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74  .      string st
bcd0: 72 43 61 74 61 6c 6f 67 20 3d 20 53 74 72 69 6e  rCatalog = Strin
bce0: 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20  g.Empty;..      
bcf0: 73 74 72 69 6e 67 20 73 74 72 54 61 62 6c 65 20  string strTable 
bd00: 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  = String.Empty;.
bd10: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74  .      string st
bd20: 72 43 6f 6c 75 6d 6e 20 3d 20 53 74 72 69 6e 67  rColumn = String
bd30: 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20  .Empty;....     
bd40: 20 74 62 6c 2e 4c 6f 63 61 6c 65 20 3d 20 43 75   tbl.Locale = Cu
bd50: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
bd60: 61 6e 74 43 75 6c 74 75 72 65 3b 0d 0a 20 20 20  antCulture;..   
bd70: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
bd80: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
bd90: 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  lumn.ColumnName,
bda0: 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29   typeof(String))
bdb0: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
bdc0: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
bdd0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d  ableColumn.Colum
bde0: 6e 4f 72 64 69 6e 61 6c 2c 20 74 79 70 65 6f 66  nOrdinal, typeof
bdf0: 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20 74  (int));..      t
be00: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
be10: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
be20: 2e 43 6f 6c 75 6d 6e 53 69 7a 65 2c 20 74 79 70  .ColumnSize, typ
be30: 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20  eof(int));..    
be40: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
be50: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
be60: 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63 69  umn.NumericPreci
be70: 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 69 6e 74  sion, typeof(int
be80: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
be90: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
bea0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
beb0: 65 72 69 63 53 63 61 6c 65 2c 20 74 79 70 65 6f  ericScale, typeo
bec0: 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20  f(int));..      
bed0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
bee0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
bef0: 6e 2e 49 73 55 6e 69 71 75 65 2c 20 74 79 70 65  n.IsUnique, type
bf00: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
bf10: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
bf20: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
bf30: 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 2c 20 74 79  Column.IsKey, ty
bf40: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d  peof(Boolean));.
bf50: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
bf60: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
bf70: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
bf80: 2e 42 61 73 65 53 65 72 76 65 72 4e 61 6d 65 2c  .BaseServerName,
bf90: 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29   typeof(string))
bfa0: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
bfb0: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
bfc0: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
bfd0: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
bfe0: 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e  me, typeof(Strin
bff0: 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  g));..      tbl.
c000: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
c010: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
c020: 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79  seColumnName, ty
c030: 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a  peof(String));..
c040: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
c050: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
c060: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 63 68 65  eColumn.BaseSche
c070: 6d 61 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53  maName, typeof(S
c080: 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20  tring));..      
c090: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c0a0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c0b0: 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 2c  n.BaseTableName,
c0c0: 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29   typeof(String))
c0d0: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
c0e0: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
c0f0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74 61 54  ableColumn.DataT
c100: 79 70 65 2c 20 74 79 70 65 6f 66 28 54 79 70 65  ype, typeof(Type
c110: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
c120: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
c130: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c  aTableColumn.All
c140: 6f 77 44 42 4e 75 6c 6c 2c 20 74 79 70 65 6f 66  owDBNull, typeof
c150: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20  (Boolean));..   
c160: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
c170: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
c180: 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72 54 79 70  lumn.ProviderTyp
c190: 65 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b  e, typeof(int));
c1a0: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
c1b0: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
c1c0: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 41 6c 69 61  bleColumn.IsAlia
c1d0: 73 65 64 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  sed, typeof(Bool
c1e0: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ean));..      tb
c1f0: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c200: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c210: 49 73 45 78 70 72 65 73 73 69 6f 6e 2c 20 74 79  IsExpression, ty
c220: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d  peof(Boolean));.
c230: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
c240: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
c250: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
c260: 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74  .IsAutoIncrement
c270: 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e  , typeof(Boolean
c280: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
c290: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
c2a0: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
c2b0: 6c 75 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f  lumn.IsRowVersio
c2c0: 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  n, typeof(Boolea
c2d0: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  n));..      tbl.
c2e0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
c2f0: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
c300: 6f 6c 75 6d 6e 2e 49 73 48 69 64 64 65 6e 2c 20  olumn.IsHidden, 
c310: 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29  typeof(Boolean))
c320: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
c330: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
c340: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e  ableColumn.IsLon
c350: 67 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  g, typeof(Boolea
c360: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  n));..      tbl.
c370: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
c380: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
c390: 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79  olumn.IsReadOnly
c3a0: 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e  , typeof(Boolean
c3b0: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
c3c0: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
c3d0: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
c3e0: 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72 53 70 65  lumn.ProviderSpe
c3f0: 63 69 66 69 63 44 61 74 61 54 79 70 65 2c 20 74  cificDataType, t
c400: 79 70 65 6f 66 28 54 79 70 65 29 29 3b 0d 0a 20  ypeof(Type));.. 
c410: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c420: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c430: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44  OptionalColumn.D
c440: 65 66 61 75 6c 74 56 61 6c 75 65 2c 20 74 79 70  efaultValue, typ
c450: 65 6f 66 28 6f 62 6a 65 63 74 29 29 3b 0d 0a 20  eof(object));.. 
c460: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c470: 2e 41 64 64 28 22 44 61 74 61 54 79 70 65 4e 61  .Add("DataTypeNa
c480: 6d 65 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69  me", typeof(stri
c490: 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  ng));..      tbl
c4a0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 43 6f  .Columns.Add("Co
c4b0: 6c 6c 61 74 69 6f 6e 54 79 70 65 22 2c 20 74 79  llationType", ty
c4c0: 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a  peof(string));..
c4d0: 20 20 20 20 20 20 74 62 6c 2e 42 65 67 69 6e 4c        tbl.BeginL
c4e0: 6f 61 64 44 61 74 61 28 29 3b 0d 0a 0d 0a 20 20  oadData();....  
c4f0: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d      for (int n =
c500: 20 30 3b 20 6e 20 3c 20 5f 66 69 65 6c 64 43 6f   0; n < _fieldCo
c510: 75 6e 74 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20  unt; n++)..     
c520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
c530: 74 65 54 79 70 65 20 73 71 6c 54 79 70 65 20 3d  teType sqlType =
c540: 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 5f   GetSQLiteType(_
c550: 66 6c 61 67 73 2c 20 6e 29 3b 0d 0a 0d 0a 20 20  flags, n);....  
c560: 20 20 20 20 20 20 72 6f 77 20 3d 20 74 62 6c 2e        row = tbl.
c570: 4e 65 77 52 6f 77 28 29 3b 0d 0a 0d 0a 20 20 20  NewRow();....   
c580: 20 20 20 20 20 44 62 54 79 70 65 20 74 79 70 20       DbType typ 
c590: 3d 20 73 71 6c 54 79 70 65 2e 54 79 70 65 3b 0d  = sqlType.Type;.
c5a0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 44 65  ...        // De
c5b0: 66 61 75 6c 74 20 73 65 74 74 69 6e 67 73 20 66  fault settings f
c5c0: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a 20  or the column.. 
c5d0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
c5e0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c  aTableColumn.Col
c5f0: 75 6d 6e 4e 61 6d 65 5d 20 3d 20 47 65 74 4e 61  umnName] = GetNa
c600: 6d 65 28 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  me(n);..        
c610: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
c620: 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69  olumn.ColumnOrdi
c630: 6e 61 6c 5d 20 3d 20 6e 3b 0d 0a 20 20 20 20 20  nal] = n;..     
c640: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c650: 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53  leColumn.ColumnS
c660: 69 7a 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e  ize] = SQLiteCon
c670: 76 65 72 74 2e 44 62 54 79 70 65 54 6f 43 6f 6c  vert.DbTypeToCol
c680: 75 6d 6e 53 69 7a 65 28 74 79 70 29 3b 0d 0a 20  umnSize(typ);.. 
c690: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
c6a0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
c6b0: 65 72 69 63 50 72 65 63 69 73 69 6f 6e 5d 20 3d  ericPrecision] =
c6c0: 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44   SQLiteConvert.D
c6d0: 62 54 79 70 65 54 6f 4e 75 6d 65 72 69 63 50 72  bTypeToNumericPr
c6e0: 65 63 69 73 69 6f 6e 28 74 79 70 29 3b 0d 0a 20  ecision(typ);.. 
c6f0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
c700: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
c710: 65 72 69 63 53 63 61 6c 65 5d 20 3d 20 53 51 4c  ericScale] = SQL
c720: 69 74 65 43 6f 6e 76 65 72 74 2e 44 62 54 79 70  iteConvert.DbTyp
c730: 65 54 6f 4e 75 6d 65 72 69 63 53 63 61 6c 65 28  eToNumericScale(
c740: 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  typ);..        r
c750: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
c760: 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72 54 79 70  lumn.ProviderTyp
c770: 65 5d 20 3d 20 73 71 6c 54 79 70 65 2e 54 79 70  e] = sqlType.Typ
c780: 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  e;..        row[
c790: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c7a0: 6e 2e 49 73 4c 6f 6e 67 5d 20 3d 20 66 61 6c 73  n.IsLong] = fals
c7b0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  e;..        row[
c7c0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c7d0: 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d  n.AllowDBNull] =
c7e0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
c7f0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
c800: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
c810: 52 65 61 64 4f 6e 6c 79 5d 20 3d 20 66 61 6c 73  ReadOnly] = fals
c820: 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  e;..        row[
c830: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
c840: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56  nalColumn.IsRowV
c850: 65 72 73 69 6f 6e 5d 20 3d 20 66 61 6c 73 65 3b  ersion] = false;
c860: 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ..        row[Sc
c870: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c880: 49 73 55 6e 69 71 75 65 5d 20 3d 20 66 61 6c 73  IsUnique] = fals
c890: 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  e;..        row[
c8a0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c8b0: 6e 2e 49 73 4b 65 79 5d 20 3d 20 66 61 6c 73 65  n.IsKey] = false
c8c0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53  ;..        row[S
c8d0: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
c8e0: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49  alColumn.IsAutoI
c8f0: 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 66 61 6c 73  ncrement] = fals
c900: 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  e;..        row[
c910: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c920: 6e 2e 44 61 74 61 54 79 70 65 5d 20 3d 20 47 65  n.DataType] = Ge
c930: 74 46 69 65 6c 64 54 79 70 65 28 6e 29 3b 0d 0a  tFieldType(n);..
c940: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
c950: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
c960: 6f 6c 75 6d 6e 2e 49 73 48 69 64 64 65 6e 5d 20  olumn.IsHidden] 
c970: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
c980: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
c990: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 63 68 65  eColumn.BaseSche
c9a0: 6d 61 4e 61 6d 65 5d 20 3d 20 5f 62 61 73 65 53  maName] = _baseS
c9b0: 63 68 65 6d 61 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  chemaName;....  
c9c0: 20 20 20 20 20 20 73 74 72 43 6f 6c 75 6d 6e 20        strColumn 
c9d0: 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74  = columnToParent
c9e0: 5b 6e 5d 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d  [n].ColumnName;.
c9f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72  .        if (Str
ca00: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
ca10: 79 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20  y(strColumn) == 
ca20: 66 61 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d  false) row[Schem
ca30: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
ca40: 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20 3d 20 73  eColumnName] = s
ca50: 74 72 43 6f 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20 20  trColumn;....   
ca60: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
ca70: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45 78 70  ableColumn.IsExp
ca80: 72 65 73 73 69 6f 6e 5d 20 3d 20 53 74 72 69 6e  ression] = Strin
ca90: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
caa0: 73 74 72 43 6f 6c 75 6d 6e 29 3b 0d 0a 20 20 20  strColumn);..   
cab0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
cac0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 41 6c 69  ableColumn.IsAli
cad0: 61 73 65 64 5d 20 3d 20 28 53 74 72 69 6e 67 2e  ased] = (String.
cae0: 43 6f 6d 70 61 72 65 28 47 65 74 4e 61 6d 65 28  Compare(GetName(
caf0: 6e 29 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c 20 53  n), strColumn, S
cb00: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
cb10: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
cb20: 65 29 20 21 3d 20 30 29 3b 0d 0a 0d 0a 20 20 20  e) != 0);....   
cb30: 20 20 20 20 20 74 65 6d 70 20 3d 20 63 6f 6c 75       temp = colu
cb40: 6d 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 54 61  mnToParent[n].Ta
cb50: 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  bleName;..      
cb60: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
cb70: 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65 6d 70 29  ullOrEmpty(temp)
cb80: 20 3d 3d 20 66 61 6c 73 65 29 20 72 6f 77 5b 53   == false) row[S
cb90: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
cba0: 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 20  .BaseTableName] 
cbb0: 3d 20 74 65 6d 70 3b 0d 0a 0d 0a 20 20 20 20 20  = temp;....     
cbc0: 20 20 20 74 65 6d 70 20 3d 20 63 6f 6c 75 6d 6e     temp = column
cbd0: 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 44 61 74 61  ToParent[n].Data
cbe0: 62 61 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  baseName;..     
cbf0: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
cc00: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65 6d 70  NullOrEmpty(temp
cc10: 29 20 3d 3d 20 66 61 6c 73 65 29 20 72 6f 77 5b  ) == false) row[
cc20: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
cc30: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61  nalColumn.BaseCa
cc40: 74 61 6c 6f 67 4e 61 6d 65 5d 20 3d 20 74 65 6d  talogName] = tem
cc50: 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74  p;....        st
cc60: 72 69 6e 67 20 64 61 74 61 54 79 70 65 20 3d 20  ring dataType = 
cc70: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 2f  null;..        /
cc80: 2f 20 49 66 20 77 65 20 68 61 76 65 20 61 20 74  / If we have a t
cc90: 61 62 6c 65 2d 62 6f 75 6e 64 20 63 6f 6c 75 6d  able-bound colum
cca0: 6e 2c 20 65 78 74 72 61 63 74 20 74 68 65 20 65  n, extract the e
ccb0: 78 74 72 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  xtra information
ccc0: 20 66 72 6f 6d 20 69 74 0d 0a 20 20 20 20 20 20   from it..      
ccd0: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
cce0: 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f  ullOrEmpty(strCo
ccf0: 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29 0d  lumn) == false).
cd00: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
cd10: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6c        string col
cd20: 6c 53 65 71 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  lSeq = null;..  
cd30: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 62 4e 6f          bool bNo
cd40: 74 4e 75 6c 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a  tNull = false;..
cd50: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 62            bool b
cd60: 50 72 69 6d 61 72 79 4b 65 79 20 3d 20 66 61 6c  PrimaryKey = fal
cd70: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  se;..          b
cd80: 6f 6f 6c 20 62 41 75 74 6f 49 6e 63 72 65 6d 65  ool bAutoIncreme
cd90: 6e 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  nt = false;..   
cda0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
cdb0: 61 72 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20  arSize;....     
cdc0: 20 20 20 20 20 2f 2f 20 47 65 74 20 74 68 65 20       // Get the 
cdd0: 63 6f 6c 75 6d 6e 20 6d 65 74 61 20 64 61 74 61  column meta data
cde0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6d  ..          _com
cdf0: 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e  mand.Connection.
ce00: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4d 65 74 61 44  _sql.ColumnMetaD
ce10: 61 74 61 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ata(..          
ce20: 20 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63    (string)row[Sc
ce30: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
ce40: 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61  lColumn.BaseCata
ce50: 6c 6f 67 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20  logName],..     
ce60: 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 72         (string)r
ce70: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
ce80: 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61  lumn.BaseTableNa
ce90: 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me],..          
cea0: 20 20 73 74 72 43 6f 6c 75 6d 6e 2c 0d 0a 20 20    strColumn,..  
ceb0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 64 61            ref da
cec0: 74 61 54 79 70 65 2c 20 72 65 66 20 63 6f 6c 6c  taType, ref coll
ced0: 53 65 71 2c 20 72 65 66 20 62 4e 6f 74 4e 75 6c  Seq, ref bNotNul
cee0: 6c 2c 20 72 65 66 20 62 50 72 69 6d 61 72 79 4b  l, ref bPrimaryK
cef0: 65 79 2c 20 72 65 66 20 62 41 75 74 6f 49 6e 63  ey, ref bAutoInc
cf00: 72 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  rement);....    
cf10: 20 20 20 20 20 20 69 66 20 28 62 4e 6f 74 4e 75        if (bNotNu
cf20: 6c 6c 20 7c 7c 20 62 50 72 69 6d 61 72 79 4b 65  ll || bPrimaryKe
cf30: 79 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  y) row[SchemaTab
cf40: 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42  leColumn.AllowDB
cf50: 4e 75 6c 6c 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a  Null] = false;..
cf60: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b  ..          row[
cf70: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
cf80: 6e 2e 49 73 4b 65 79 5d 20 3d 20 62 50 72 69 6d  n.IsKey] = bPrim
cf90: 61 72 79 4b 65 79 20 26 26 20 43 6f 75 6e 74 50  aryKey && CountP
cfa0: 61 72 65 6e 74 73 28 70 61 72 65 6e 74 54 6f 43  arents(parentToC
cfb0: 6f 6c 75 6d 6e 73 29 20 3c 3d 20 31 3b 0d 0a 20  olumns) <= 1;.. 
cfc0: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
cfd0: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
cfe0: 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63  Column.IsAutoInc
cff0: 72 65 6d 65 6e 74 5d 20 3d 20 62 41 75 74 6f 49  rement] = bAutoI
d000: 6e 63 72 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20  ncrement;..     
d010: 20 20 20 20 20 72 6f 77 5b 22 43 6f 6c 6c 61 74       row["Collat
d020: 69 6f 6e 54 79 70 65 22 5d 20 3d 20 63 6f 6c 6c  ionType"] = coll
d030: 53 65 71 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Seq;....        
d040: 20 20 2f 2f 20 46 6f 72 20 74 79 70 65 73 20 6c    // For types l
d050: 69 6b 65 20 76 61 72 63 68 61 72 28 35 30 29 20  ike varchar(50) 
d060: 61 6e 64 20 73 75 63 68 2c 20 65 78 74 72 61 63  and such, extrac
d070: 74 20 74 68 65 20 73 69 7a 65 0d 0a 20 20 20 20  t the size..    
d080: 20 20 20 20 20 20 61 72 53 69 7a 65 20 3d 20 64        arSize = d
d090: 61 74 61 54 79 70 65 2e 53 70 6c 69 74 28 27 28  ataType.Split('(
d0a0: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ');..          i
d0b0: 66 20 28 61 72 53 69 7a 65 2e 4c 65 6e 67 74 68  f (arSize.Length
d0c0: 20 3e 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20   > 1)..         
d0d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d0e0: 64 61 74 61 54 79 70 65 20 3d 20 61 72 53 69 7a  dataType = arSiz
d0f0: 65 5b 30 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20  e[0];..         
d100: 20 20 20 61 72 53 69 7a 65 20 3d 20 61 72 53 69     arSize = arSi
d110: 7a 65 5b 31 5d 2e 53 70 6c 69 74 28 27 29 27 29  ze[1].Split(')')
d120: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ;..            i
d130: 66 20 28 61 72 53 69 7a 65 2e 4c 65 6e 67 74 68  f (arSize.Length
d140: 20 3e 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20   > 1)..         
d150: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d160: 20 20 20 20 61 72 53 69 7a 65 20 3d 20 61 72 53      arSize = arS
d170: 69 7a 65 5b 30 5d 2e 53 70 6c 69 74 28 27 2c 27  ize[0].Split(','
d180: 2c 20 27 2e 27 29 3b 0d 0a 20 20 20 20 20 20 20  , '.');..       
d190: 20 20 20 20 20 20 20 69 66 20 28 73 71 6c 54 79         if (sqlTy
d1a0: 70 65 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70  pe.Type == DbTyp
d1b0: 65 2e 42 69 6e 61 72 79 20 7c 7c 20 53 51 4c 69  e.Binary || SQLi
d1c0: 74 65 43 6f 6e 76 65 72 74 2e 49 73 53 74 72 69  teConvert.IsStri
d1d0: 6e 67 44 62 54 79 70 65 28 73 71 6c 54 79 70 65  ngDbType(sqlType
d1e0: 2e 54 79 70 65 29 29 0d 0a 20 20 20 20 20 20 20  .Type))..       
d1f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d200: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
d210: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
d220: 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20 43 6f  ColumnSize] = Co
d230: 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72  nvert.ToInt32(ar
d240: 53 69 7a 65 5b 30 5d 2c 20 43 75 6c 74 75 72 65  Size[0], Culture
d250: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
d260: 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20  lture);..       
d270: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
d280: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
d290: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d2b0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
d2c0: 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63  lumn.NumericPrec
d2d0: 69 73 69 6f 6e 5d 20 3d 20 43 6f 6e 76 65 72 74  ision] = Convert
d2e0: 2e 54 6f 49 6e 74 33 32 28 61 72 53 69 7a 65 5b  .ToInt32(arSize[
d2f0: 30 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  0], CultureInfo.
d300: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
d310: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
d320: 20 20 20 20 69 66 20 28 61 72 53 69 7a 65 2e 4c      if (arSize.L
d330: 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20 20 20  ength > 1)..    
d340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
d350: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
d360: 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c 65  umn.NumericScale
d370: 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e  ] = Convert.ToIn
d380: 74 33 32 28 61 72 53 69 7a 65 5b 31 5d 2c 20 43  t32(arSize[1], C
d390: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
d3a0: 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20  iantCulture);.. 
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d3d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
d3e0: 20 20 20 20 20 20 20 20 69 66 20 28 77 61 6e 74          if (want
d3f0: 44 65 66 61 75 6c 74 56 61 6c 75 65 29 0d 0a 20  DefaultValue).. 
d400: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d410: 20 20 20 20 20 20 20 20 2f 2f 20 44 65 74 65 72          // Deter
d420: 6d 69 6e 65 20 74 68 65 20 64 65 66 61 75 6c 74  mine the default
d430: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63   value for the c
d440: 6f 6c 75 6d 6e 2c 20 77 68 69 63 68 20 73 75 63  olumn, which suc
d450: 6b 73 20 62 65 63 61 75 73 65 20 77 65 20 68 61  ks because we ha
d460: 76 65 20 74 6f 20 71 75 65 72 79 20 74 68 65 20  ve to query the 
d470: 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20  schema for each 
d480: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20  column..        
d490: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
d4a0: 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 54 61 62 6c  eCommand cmdTabl
d4b0: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  e = new SQLiteCo
d4c0: 6d 6d 61 6e 64 28 48 65 6c 70 65 72 4d 65 74 68  mmand(HelperMeth
d4d0: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
d4e0: 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76  (CultureInfo.Inv
d4f0: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22  ariantCulture, "
d500: 50 52 41 47 4d 41 20 5b 7b 30 7d 5d 2e 54 41 42  PRAGMA [{0}].TAB
d510: 4c 45 5f 49 4e 46 4f 28 5b 7b 31 7d 5d 29 22 2c  LE_INFO([{1}])",
d520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d530: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
d540: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61  ptionalColumn.Ba
d550: 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 2c 0d  seCatalogName],.
d560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
d570: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
d580: 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61  lumn.BaseTableNa
d590: 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me]..           
d5a0: 20 20 20 29 2c 20 5f 63 6f 6d 6d 61 6e 64 2e 43     ), _command.C
d5b0: 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a 20 20 20  onnection))..   
d5c0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
d5d0: 44 62 44 61 74 61 52 65 61 64 65 72 20 72 64 54  DbDataReader rdT
d5e0: 61 62 6c 65 20 3d 20 63 6d 64 54 61 62 6c 65 2e  able = cmdTable.
d5f0: 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29  ExecuteReader())
d600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
d610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  .              /
d620: 2f 20 46 69 6e 64 20 74 68 65 20 6d 61 74 63 68  / Find the match
d630: 69 6e 67 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20  ing column..    
d640: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
d650: 28 72 64 54 61 62 6c 65 2e 52 65 61 64 28 29 29  (rdTable.Read())
d660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d670: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d680: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
d690: 6d 70 61 72 65 28 28 73 74 72 69 6e 67 29 72 6f  mpare((string)ro
d6a0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
d6b0: 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61  umn.BaseColumnNa
d6c0: 6d 65 5d 2c 20 72 64 54 61 62 6c 65 2e 47 65 74  me], rdTable.Get
d6d0: 53 74 72 69 6e 67 28 31 29 2c 20 53 74 72 69 6e  String(1), Strin
d6e0: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
d6f0: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
d700: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
d710: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d720: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
d730: 64 54 61 62 6c 65 2e 49 73 44 42 4e 75 6c 6c 28  dTable.IsDBNull(
d740: 34 29 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20 20  4) == false)..  
d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d760: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
d770: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
d780: 44 65 66 61 75 6c 74 56 61 6c 75 65 5d 20 3d 20  DefaultValue] = 
d790: 72 64 54 61 62 6c 65 5b 34 5d 3b 0d 0a 0d 0a 20  rdTable[4];.... 
d7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7b0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
d7c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d7d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
d7e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d7f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d800: 20 20 20 20 20 2f 2f 20 44 65 74 65 72 6d 69 6e       // Determin
d810: 65 20 49 73 55 6e 69 71 75 65 20 70 72 6f 70 65  e IsUnique prope
d820: 72 6c 79 2c 20 77 68 69 63 68 20 69 73 20 61 20  rly, which is a 
d830: 70 61 69 6e 20 69 6e 20 74 68 65 20 62 75 74 74  pain in the butt
d840: 21 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  !..          if 
d850: 28 77 61 6e 74 55 6e 69 71 75 65 49 6e 66 6f 29  (wantUniqueInfo)
d860: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
d870: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
d880: 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d  string)row[Schem
d890: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
d8a0: 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67  lumn.BaseCatalog
d8b0: 4e 61 6d 65 5d 20 21 3d 20 73 74 72 43 61 74 61  Name] != strCata
d8c0: 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  log..           
d8d0: 20 20 20 7c 7c 20 28 73 74 72 69 6e 67 29 72 6f     || (string)ro
d8e0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
d8f0: 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d  umn.BaseTableNam
d900: 65 5d 20 21 3d 20 73 74 72 54 61 62 6c 65 29 0d  e] != strTable).
d910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
d930: 72 43 61 74 61 6c 6f 67 20 3d 20 28 73 74 72 69  rCatalog = (stri
d940: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
d950: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
d960: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
d970: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
d980: 20 20 73 74 72 54 61 62 6c 65 20 3d 20 28 73 74    strTable = (st
d990: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
d9a0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
d9b0: 61 62 6c 65 4e 61 6d 65 5d 3b 0d 0a 0d 0a 20 20  ableName];....  
d9c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 62 6c 49              tblI
d9d0: 6e 64 65 78 65 73 20 3d 20 5f 63 6f 6d 6d 61 6e  ndexes = _comman
d9e0: 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74  d.Connection.Get
d9f0: 53 63 68 65 6d 61 28 22 49 6e 64 65 78 65 73 22  Schema("Indexes"
da00: 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b  , new string[] {
da10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
da20: 20 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63    (string)row[Sc
da30: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
da40: 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61  lColumn.BaseCata
da50: 6c 6f 67 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20  logName],..     
da60: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
da70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
da80: 20 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63    (string)row[Sc
da90: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
daa0: 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 2c 0d  BaseTableName],.
dab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dac0: 20 6e 75 6c 6c 20 7d 29 3b 0d 0a 20 20 20 20 20   null });..     
dad0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
dae0: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
daf0: 28 44 61 74 61 52 6f 77 20 72 6f 77 49 6e 64 65  (DataRow rowInde
db00: 78 65 73 20 69 6e 20 74 62 6c 49 6e 64 65 78 65  xes in tblIndexe
db10: 73 2e 52 6f 77 73 29 0d 0a 20 20 20 20 20 20 20  s.Rows)..       
db20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
db30: 20 20 20 20 20 20 74 62 6c 49 6e 64 65 78 43 6f        tblIndexCo
db40: 6c 75 6d 6e 73 20 3d 20 5f 63 6f 6d 6d 61 6e 64  lumns = _command
db50: 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53  .Connection.GetS
db60: 63 68 65 6d 61 28 22 49 6e 64 65 78 43 6f 6c 75  chema("IndexColu
db70: 6d 6e 73 22 2c 20 6e 65 77 20 73 74 72 69 6e 67  mns", new string
db80: 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
db90: 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f        (string)ro
dba0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
dbb0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65  ionalColumn.Base
dbc0: 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 2c 0d 0a 20  CatalogName],.. 
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
dbe0: 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
dbf0: 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f        (string)ro
dc00: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
dc10: 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d  umn.BaseTableNam
dc20: 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e],..           
dc30: 20 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77       (string)row
dc40: 49 6e 64 65 78 65 73 5b 22 49 4e 44 45 58 5f 4e  Indexes["INDEX_N
dc50: 41 4d 45 22 5d 2c 0d 0a 20 20 20 20 20 20 20 20  AME"],..        
dc60: 20 20 20 20 20 20 20 20 6e 75 6c 6c 0d 0a 20 20          null..  
dc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29                })
dc80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
dc90: 20 66 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f   foreach (DataRo
dca0: 77 20 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64 65 78  w rowColumnIndex
dcb0: 20 69 6e 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75   in tblIndexColu
dcc0: 6d 6e 73 2e 52 6f 77 73 29 0d 0a 20 20 20 20 20  mns.Rows)..     
dcd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
dcf0: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 53  String.Compare(S
dd00: 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 47 65 74  QLiteConvert.Get
dd10: 53 74 72 69 6e 67 4f 72 4e 75 6c 6c 28 72 6f 77  StringOrNull(row
dd20: 43 6f 6c 75 6d 6e 49 6e 64 65 78 5b 22 43 4f 4c  ColumnIndex["COL
dd30: 55 4d 4e 5f 4e 41 4d 45 22 5d 29 2c 20 73 74 72  UMN_NAME"]), str
dd40: 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43 6f  Column, StringCo
dd50: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
dd60: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
dd70: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
dd80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
dd90: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ddb0: 20 42 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 75   BUGFIX: Make su
ddc0: 72 65 20 74 68 61 74 20 77 65 20 6f 6e 6c 79 20  re that we only 
ddd0: 66 6c 61 67 20 74 68 69 73 20 63 6f 6c 75 6d 6e  flag this column
dde0: 20 61 73 20 22 75 6e 69 71 75 65 22 0d 0a 20 20   as "unique"..  
ddf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de00: 2f 2f 20 20 20 20 20 20 20 20 20 69 66 20 77 65  //         if we
de10: 20 61 72 65 20 6e 6f 74 20 70 72 6f 63 65 73 73   are not process
de20: 69 6e 67 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ing of some kind
de30: 20 6f 66 20 6d 75 6c 74 69 2d 74 61 62 6c 65 0d   of multi-table.
de40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de50: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 63 6f     //         co
de60: 6e 73 74 72 75 63 74 20 28 69 2e 65 2e 20 61 20  nstruct (i.e. a 
de70: 6a 6f 69 6e 29 20 62 65 63 61 75 73 65 20 69 6e  join) because in
de80: 20 74 68 61 74 20 63 61 73 65 20 77 65 20 6d 75   that case we mu
de90: 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..            
dea0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
deb0: 20 61 6c 6c 6f 77 20 64 75 70 6c 69 63 61 74 65   allow duplicate
dec0: 20 76 61 6c 75 65 73 20 28 72 65 66 65 72 20 74   values (refer t
ded0: 6f 20 74 69 63 6b 65 74 20 5b 37 65 33 66 61 39  o ticket [7e3fa9
dee0: 33 37 34 34 5d 29 2e 0d 0a 20 20 20 20 20 20 20  3744])...       
def0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df10: 20 69 66 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c   if (parentToCol
df20: 75 6d 6e 73 2e 43 6f 75 6e 74 20 3d 3d 20 31 20  umns.Count == 1 
df30: 26 26 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d  && tblIndexColum
df40: 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74 20 3d 3d  ns.Rows.Count ==
df50: 20 31 20 26 26 20 28 62 6f 6f 6c 29 72 6f 77 5b   1 && (bool)row[
df60: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
df70: 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d  n.AllowDBNull] =
df80: 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20  = false)..      
df90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
dfa0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
dfb0: 75 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 20 3d 20  umn.IsUnique] = 
dfc0: 72 6f 77 49 6e 64 65 78 65 73 5b 22 55 4e 49 51  rowIndexes["UNIQ
dfd0: 55 45 22 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  UE"];....       
dfe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66             // If
dff0: 20 69 74 73 20 61 6e 20 69 6e 74 65 67 65 72 20   its an integer 
e000: 70 72 69 6d 61 72 79 20 6b 65 79 20 61 6e 64 20  primary key and 
e010: 74 68 65 20 6f 6e 6c 79 20 70 72 69 6d 61 72 79  the only primary
e020: 20 6b 65 79 20 69 6e 20 74 68 65 20 74 61 62 6c   key in the tabl
e030: 65 2c 20 74 68 65 6e 20 69 74 73 20 61 20 72 6f  e, then its a ro
e040: 77 69 64 20 61 6c 69 61 73 20 61 6e 64 20 69 73  wid alias and is
e050: 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0d 0a   autoincrement..
e060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e070: 20 20 2f 2f 20 4e 4f 54 45 3a 20 20 43 75 72 72    // NOTE:  Curr
e080: 65 6e 74 6c 79 20 63 6f 6d 6d 65 6e 74 65 64 20  ently commented 
e090: 6f 75 74 20 62 65 63 61 75 73 65 20 74 68 69 73  out because this
e0a0: 20 69 73 20 6e 6f 74 20 61 6c 77 61 79 73 20 74   is not always t
e0b0: 68 65 20 64 65 73 69 72 65 64 20 62 65 68 61 76  he desired behav
e0c0: 69 6f 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ior.  For exampl
e0d0: 65 2c 20 61 20 31 3a 31 20 72 65 6c 61 74 69 6f  e, a 1:1 relatio
e0e0: 6e 73 68 69 70 20 77 69 74 68 0d 0a 20 20 20 20  nship with..    
e0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
e100: 20 20 20 20 20 20 20 20 61 6e 6f 74 68 65 72 20          another 
e110: 74 61 62 6c 65 2c 20 77 68 65 72 65 20 74 68 65  table, where the
e120: 20 6f 74 68 65 72 20 74 61 62 6c 65 20 69 73 20   other table is 
e130: 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 2c 20 62  autoincrement, b
e140: 75 74 20 74 68 69 73 20 6f 6e 65 20 69 73 20 6e  ut this one is n
e150: 6f 74 2c 20 61 6e 64 20 75 73 65 73 20 74 68 65  ot, and uses the
e160: 20 72 6f 77 69 64 20 66 72 6f 6d 20 74 68 65 20   rowid from the 
e170: 6f 74 68 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  other...        
e180: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
e190: 20 20 20 20 49 74 20 69 73 20 73 61 66 65 72 20      It is safer 
e1a0: 74 6f 20 6f 6e 6c 79 20 73 65 74 20 41 75 74 6f  to only set Auto
e1b0: 69 6e 63 72 65 6d 65 6e 74 20 6f 6e 20 74 61 62  increment on tab
e1c0: 6c 65 73 20 77 68 65 72 65 20 77 65 27 72 65 20  les where we're 
e1d0: 53 55 52 45 20 74 68 65 20 75 73 65 72 20 73 70  SURE the user sp
e1e0: 65 63 69 66 69 65 64 20 41 55 54 4f 49 4e 43 52  ecified AUTOINCR
e1f0: 45 4d 45 4e 54 2c 20 65 76 65 6e 20 69 66 20 69  EMENT, even if i
e200: 74 73 20 61 20 72 6f 77 69 64 20 63 6f 6c 75 6d  ts a rowid colum
e210: 6e 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n.....          
e220: 20 20 20 20 20 20 20 20 69 66 20 28 74 62 6c 49          if (tblI
e230: 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73  ndexColumns.Rows
e240: 2e 43 6f 75 6e 74 20 3d 3d 20 31 20 26 26 20 28  .Count == 1 && (
e250: 62 6f 6f 6c 29 72 6f 77 49 6e 64 65 78 65 73 5b  bool)rowIndexes[
e260: 22 50 52 49 4d 41 52 59 5f 4b 45 59 22 5d 20 3d  "PRIMARY_KEY"] =
e270: 3d 20 74 72 75 65 20 26 26 20 53 74 72 69 6e 67  = true && String
e280: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
e290: 61 74 61 54 79 70 65 29 20 3d 3d 20 66 61 6c 73  ataType) == fals
e2a0: 65 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  e &&..          
e2b0: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
e2c0: 2e 43 6f 6d 70 61 72 65 28 64 61 74 61 54 79 70  .Compare(dataTyp
e2d0: 65 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 53 74  e, "integer", St
e2e0: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
e2f0: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
e300: 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) == 0)..       
e310: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e330: 20 20 2f 2f 20 20 72 6f 77 5b 53 63 68 65 6d 61    //  row[Schema
e340: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
e350: 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d  umn.IsAutoIncrem
e360: 65 6e 74 5d 20 3d 20 74 72 75 65 3b 0d 0a 20 20  ent] = true;..  
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e380: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
e390: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
e3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
e3b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e3c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
e3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
e3e0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53  .          if (S
e3f0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
e400: 70 74 79 28 64 61 74 61 54 79 70 65 29 29 0d 0a  pty(dataType))..
e410: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e420: 20 20 20 20 20 20 20 20 20 54 79 70 65 41 66 66           TypeAff
e430: 69 6e 69 74 79 20 61 66 66 69 6e 20 3d 20 54 79  inity affin = Ty
e440: 70 65 41 66 66 69 6e 69 74 79 2e 55 6e 69 6e 69  peAffinity.Unini
e450: 74 69 61 6c 69 7a 65 64 3b 0d 0a 20 20 20 20 20  tialized;..     
e460: 20 20 20 20 20 20 20 64 61 74 61 54 79 70 65 20         dataType 
e470: 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  = _activeStateme
e480: 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79  nt._sql.ColumnTy
e490: 70 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  pe(_activeStatem
e4a0: 65 6e 74 2c 20 6e 2c 20 72 65 66 20 61 66 66 69  ent, n, ref affi
e4b0: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n);..          }
e4c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
e4d0: 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
e4e0: 72 45 6d 70 74 79 28 64 61 74 61 54 79 70 65 29  rEmpty(dataType)
e4f0: 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20   == false)..    
e500: 20 20 20 20 20 20 20 20 72 6f 77 5b 22 44 61 74          row["Dat
e510: 61 54 79 70 65 4e 61 6d 65 22 5d 20 3d 20 64 61  aTypeName"] = da
e520: 74 61 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20  taType;..       
e530: 20 7d 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e   }..        tbl.
e540: 52 6f 77 73 2e 41 64 64 28 72 6f 77 29 3b 0d 0a  Rows.Add(row);..
e550: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e560: 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
e570: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
e580: 5f 6b 65 79 49 6e 66 6f 2e 41 70 70 65 6e 64 53  _keyInfo.AppendS
e590: 63 68 65 6d 61 54 61 62 6c 65 28 74 62 6c 29 3b  chemaTable(tbl);
e5a0: 0d 0a 0d 0a 20 20 20 20 20 20 74 62 6c 2e 41 63  ....      tbl.Ac
e5b0: 63 65 70 74 43 68 61 6e 67 65 73 28 29 3b 0d 0a  ceptChanges();..
e5c0: 20 20 20 20 20 20 74 62 6c 2e 45 6e 64 4c 6f 61        tbl.EndLoa
e5d0: 64 44 61 74 61 28 29 3b 0d 0a 0d 0a 20 20 20 20  dData();....    
e5e0: 20 20 72 65 74 75 72 6e 20 74 62 6c 3b 0d 0a 20    return tbl;.. 
e5f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
e600: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
e610: 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65  // Retrieves the
e620: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73 74 72   column as a str
e630: 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ing..    /// </s
e640: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
e650: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
e660: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
e670: 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d  e column.</param
e680: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
e690: 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75  rns>string</retu
e6a0: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
e6b0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
e6c0: 20 47 65 74 53 74 72 69 6e 67 28 69 6e 74 20 69   GetString(int i
e6d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
e6e0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
e6f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
e700: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
e710: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
e720: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
e730: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
e740: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
e750: 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53  eCallbacks) == S
e760: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e770: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
e780: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
e790: 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  acks)..        {
e7a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
e7b0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
e7c0: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
e7d0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
e7e0: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
e7f0: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
e800: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
e810: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
e820: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
e830: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
e840: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
e850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
e860: 65 74 53 74 72 69 6e 67 22 2c 20 6e 75 6c 6c 2c  etString", null,
e870: 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d   value), out com
e880: 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  plete);....     
e890: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c         if (compl
e8a0: 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ete)..          
e8b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
e8c0: 75 65 2e 53 74 72 69 6e 67 56 61 6c 75 65 3b 0d  ue.StringValue;.
e8d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
e8e0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
e8f0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
e900: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
e910: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
e920: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
e930: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 53 74 72   _keyInfo.GetStr
e940: 69 6e 67 28 69 20 2d 20 50 72 69 76 61 74 65 56  ing(i - PrivateV
e950: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
e960: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
e970: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
e980: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
e990: 73 2e 4e 6f 56 65 72 69 66 79 54 65 78 74 41 66  s.NoVerifyTextAf
e9a0: 66 69 6e 69 74 79 29 20 21 3d 20 53 51 4c 69 74  finity) != SQLit
e9b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
e9c0: 2e 4e 6f 56 65 72 69 66 79 54 65 78 74 41 66 66  .NoVerifyTextAff
e9d0: 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20  inity)..        
e9e0: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
e9f0: 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29  , DbType.String)
ea00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
ea10: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
ea20: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78  ment._sql.GetTex
ea30: 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  t(_activeStateme
ea40: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
ea50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
ea60: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
ea70: 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d  rieves the colum
ea80: 6e 20 61 73 20 61 6e 20 6f 62 6a 65 63 74 20 63  n as an object c
ea90: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
eaa0: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
eab0: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 63  atatype of the c
eac0: 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  olumn..    /// <
ead0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
eae0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
eaf0: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
eb00: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
eb10: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
eb20: 74 75 72 6e 73 3e 6f 62 6a 65 63 74 3c 2f 72 65  turns>object</re
eb30: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
eb40: 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65  ic override obje
eb50: 63 74 20 47 65 74 56 61 6c 75 65 28 69 6e 74 20  ct GetValue(int 
eb60: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
eb70: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
eb80: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
eb90: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
eba0: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
ebb0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
ebc0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
ebd0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
ebe0: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
ebf0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
ec00: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
ec10: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
ec20: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
ec30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
ec40: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
ec50: 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77  alue value = new
ec60: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
ec70: 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20  rValue();..     
ec80: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70         bool comp
ec90: 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lete;....       
eca0: 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56       InvokeReadV
ecb0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20  alueCallback(i, 
ecc0: 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61  new SQLiteReadVa
ecd0: 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  lueEventArgs(.. 
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
ecf0: 47 65 74 56 61 6c 75 65 22 2c 20 6e 75 6c 6c 2c  GetValue", null,
ed00: 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d   value), out com
ed10: 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  plete);....     
ed20: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c         if (compl
ed30: 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ete)..          
ed40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
ed50: 75 65 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ue.Value;..     
ed60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
ed70: 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65  if (i >= Private
ed80: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
ed90: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
eda0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
edb0: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
edc0: 6e 66 6f 2e 47 65 74 56 61 6c 75 65 28 69 20 2d  nfo.GetValue(i -
edd0: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
ede0: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
edf0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70         SQLiteTyp
ee00: 65 20 74 79 70 20 3d 20 47 65 74 53 51 4c 69 74  e typ = GetSQLit
ee10: 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 69 29  eType(_flags, i)
ee20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
ee30: 28 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69  (((_flags & SQLi
ee40: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
ee50: 73 2e 44 65 74 65 63 74 54 65 78 74 41 66 66 69  s.DetectTextAffi
ee60: 6e 69 74 79 29 20 3d 3d 20 53 51 4c 69 74 65 43  nity) == SQLiteC
ee70: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44  onnectionFlags.D
ee80: 65 74 65 63 74 54 65 78 74 41 66 66 69 6e 69 74  etectTextAffinit
ee90: 79 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  y) &&..         
eea0: 20 20 20 28 28 74 79 70 20 3d 3d 20 6e 75 6c 6c     ((typ == null
eeb0: 29 20 7c 7c 20 28 74 79 70 2e 41 66 66 69 6e 69  ) || (typ.Affini
eec0: 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69  ty == TypeAffini
eed0: 74 79 2e 54 65 78 74 29 29 29 0d 0a 20 20 20 20  ty.Text)))..    
eee0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
eef0: 20 20 20 74 79 70 20 3d 20 47 65 74 53 51 4c 69     typ = GetSQLi
ef00: 74 65 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20  teType(..       
ef10: 20 20 20 20 20 20 20 20 20 74 79 70 2c 20 5f 61           typ, _a
ef20: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
ef30: 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74  sql.GetText(_act
ef40: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
ef50: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
ef60: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
ef70: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
ef80: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
ef90: 2e 44 65 74 65 63 74 53 74 72 69 6e 67 54 79 70  .DetectStringTyp
efa0: 65 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  e) == SQLiteConn
efb0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65  ectionFlags.Dete
efc0: 63 74 53 74 72 69 6e 67 54 79 70 65 29 20 26 26  ctStringType) &&
efd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 28  ..            ((
efe0: 74 79 70 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  typ == null) || 
eff0: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 49 73  SQLiteConvert.Is
f000: 53 74 72 69 6e 67 44 62 54 79 70 65 28 74 79 70  StringDbType(typ
f010: 2e 54 79 70 65 29 29 29 0d 0a 20 20 20 20 20 20  .Type)))..      
f020: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
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 0d 0a 20 20 20 20 20 20 20 20 20  Type(..         
f050: 20 20 20 20 20 20 20 74 79 70 2c 20 5f 61 63 74         typ, _act
f060: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
f070: 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76  l.GetText(_activ
f080: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b  eStatement, i));
f090: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
f0a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
f0b0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
f0c0: 73 71 6c 2e 47 65 74 56 61 6c 75 65 28 5f 61 63  sql.GetValue(_ac
f0d0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 5f  tiveStatement, _
f0e0: 66 6c 61 67 73 2c 20 69 2c 20 74 79 70 29 3b 0d  flags, i, typ);.
f0f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
f100: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
f110: 20 2f 2f 2f 20 52 65 74 72 65 69 76 65 73 20 74   /// Retreives t
f120: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 6d 75 6c  he values of mul
f130: 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 73 2c 20 75  tiple columns, u
f140: 70 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66  p to the size of
f150: 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 61 72   the supplied ar
f160: 72 61 79 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ray..    /// </s
f170: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
f180: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
f190: 6c 75 65 73 22 3e 54 68 65 20 61 72 72 61 79 20  lues">The array 
f1a0: 74 6f 20 66 69 6c 6c 20 77 69 74 68 20 76 61 6c  to fill with val
f1b0: 75 65 73 20 66 72 6f 6d 20 74 68 65 20 63 6f 6c  ues from the col
f1c0: 75 6d 6e 73 20 69 6e 20 74 68 65 20 63 75 72 72  umns in the curr
f1d0: 65 6e 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 70  ent resultset</p
f1e0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
f1f0: 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62  returns>The numb
f200: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65  er of columns re
f210: 74 72 69 65 76 65 64 3c 2f 72 65 74 75 72 6e 73  trieved</returns
f220: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
f230: 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 56 61  erride int GetVa
f240: 6c 75 65 73 28 6f 62 6a 65 63 74 5b 5d 20 76 61  lues(object[] va
f250: 6c 75 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  lues)..    {..  
f260: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
f270: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e  d();....      in
f280: 74 20 6e 4d 61 78 20 3d 20 46 69 65 6c 64 43 6f  t nMax = FieldCo
f290: 75 6e 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  unt;..      if (
f2a0: 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 20 3c 20  values.Length < 
f2b0: 6e 4d 61 78 29 20 6e 4d 61 78 20 3d 20 76 61 6c  nMax) nMax = val
f2c0: 75 65 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20  ues.Length;.... 
f2d0: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20       for (int n 
f2e0: 3d 20 30 3b 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e  = 0; n < nMax; n
f2f0: 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ++)..      {..  
f300: 20 20 20 20 20 20 76 61 6c 75 65 73 5b 6e 5d 20        values[n] 
f310: 3d 20 47 65 74 56 61 6c 75 65 28 6e 29 3b 0d 0a  = GetValue(n);..
f320: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f330: 20 72 65 74 75 72 6e 20 6e 4d 61 78 3b 0d 0a 20   return nMax;.. 
f340: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
f350: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
f360: 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 63 6f 6c  // Returns a col
f370: 6c 65 63 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 69  lection containi
f380: 6e 67 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d  ng all the colum
f390: 6e 20 6e 61 6d 65 73 20 61 6e 64 20 76 61 6c 75  n names and valu
f3a0: 65 73 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  es for the..    
f3b0: 2f 2f 2f 20 63 75 72 72 65 6e 74 20 72 6f 77 20  /// current row 
f3c0: 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65 20 63  of data in the c
f3d0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
f3e0: 2c 20 69 66 20 61 6e 79 2e 20 20 49 66 20 74 68  , if any.  If th
f3f0: 65 72 65 20 69 73 20 6e 6f 0d 0a 20 20 20 20 2f  ere is no..    /
f400: 2f 2f 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f  // current row o
f410: 72 20 6e 6f 20 63 75 72 72 65 6e 74 20 72 65 73  r no current res
f420: 75 6c 74 73 65 74 2c 20 61 6e 20 65 78 63 65 70  ultset, an excep
f430: 74 69 6f 6e 20 6d 61 79 20 62 65 20 74 68 72 6f  tion may be thro
f440: 77 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  wn...    /// </s
f450: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
f460: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
f470: 2f 2f 2f 20 54 68 65 20 63 6f 6c 6c 65 63 74 69  /// The collecti
f480: 6f 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  on containing th
f490: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 61 6e  e column name an
f4a0: 64 20 76 61 6c 75 65 20 69 6e 66 6f 72 6d 61 74  d value informat
f4b0: 69 6f 6e 20 66 6f 72 20 74 68 65 0d 0a 20 20 20  ion for the..   
f4c0: 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 72 6f 77   /// current row
f4d0: 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65 20   of data in the 
f4e0: 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65  current resultse
f4f0: 74 20 6f 72 20 6e 75 6c 6c 20 69 66 20 74 68 69  t or null if thi
f500: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0d 0a 20  s information.. 
f510: 20 20 20 2f 2f 2f 20 63 61 6e 6e 6f 74 20 62 65     /// cannot be
f520: 20 6f 62 74 61 69 6e 65 64 2e 0d 0a 20 20 20 20   obtained...    
f530: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
f540: 20 20 20 20 70 75 62 6c 69 63 20 4e 61 6d 65 56      public NameV
f550: 61 6c 75 65 43 6f 6c 6c 65 63 74 69 6f 6e 20 47  alueCollection G
f560: 65 74 56 61 6c 75 65 73 28 29 0d 0a 20 20 20 20  etValues()..    
f570: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
f580: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
f590: 20 20 20 20 20 20 20 69 66 20 28 28 5f 61 63 74         if ((_act
f5a0: 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d 3d 20  iveStatement == 
f5b0: 6e 75 6c 6c 29 20 7c 7c 20 28 5f 61 63 74 69 76  null) || (_activ
f5c0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 20  eStatement._sql 
f5d0: 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
f5e0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
f5f0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
f600: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
f610: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 4d 61  .        int nMa
f620: 78 20 3d 20 50 72 69 76 61 74 65 56 69 73 69 62  x = PrivateVisib
f630: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20  leFieldCount;.. 
f640: 20 20 20 20 20 20 20 4e 61 6d 65 56 61 6c 75 65         NameValue
f650: 43 6f 6c 6c 65 63 74 69 6f 6e 20 72 65 73 75 6c  Collection resul
f660: 74 20 3d 20 6e 65 77 20 4e 61 6d 65 56 61 6c 75  t = new NameValu
f670: 65 43 6f 6c 6c 65 63 74 69 6f 6e 28 6e 4d 61 78  eCollection(nMax
f680: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f  );....        fo
f690: 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20  r (int n = 0; n 
f6a0: 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20  < nMax; n++)..  
f6b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f6c0: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
f6d0: 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d   = _activeStatem
f6e0: 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e  ent._sql.ColumnN
f6f0: 61 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ame(_activeState
f700: 6d 65 6e 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20  ment, n);..     
f710: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61         string va
f720: 6c 75 65 20 3d 20 5f 61 63 74 69 76 65 53 74 61  lue = _activeSta
f730: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54  tement._sql.GetT
f740: 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ext(_activeState
f750: 6d 65 6e 74 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20  ment, n);....   
f760: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
f770: 41 64 64 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29  Add(name, value)
f780: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
f790: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
f7a0: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  esult;..    }...
f7b0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
f7c0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
f7d0: 72 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20  rns True if the 
f7e0: 72 65 73 75 6c 74 73 65 74 20 68 61 73 20 72 6f  resultset has ro
f7f0: 77 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 66  ws that can be f
f800: 65 74 63 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  etched..    /// 
f810: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
f820: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
f830: 62 6f 6f 6c 20 48 61 73 52 6f 77 73 0d 0a 20 20  bool HasRows..  
f840: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
f850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f860: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
f870: 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  ;..        Check
f880: 43 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  Closed();....   
f890: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
f8a0: 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65   // NOTE: If the
f8b0: 20 22 73 74 69 63 6b 79 22 20 66 6c 61 67 20 68   "sticky" flag h
f8c0: 61 73 20 62 65 65 6e 20 73 65 74 2c 20 75 73 65  as been set, use
f8d0: 20 74 68 65 20 6e 65 77 20 62 65 68 61 76 69 6f   the new behavio
f8e0: 72 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  r,..        //  
f8f0: 20 20 20 20 20 77 68 69 63 68 20 72 65 74 75 72       which retur
f900: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  ns non-zero if t
f910: 68 65 72 65 20 77 65 72 65 20 65 76 65 72 20 61  here were ever a
f920: 6e 79 20 72 6f 77 73 20 69 6e 0d 0a 20 20 20 20  ny rows in..    
f930: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
f940: 20 61 73 73 6f 63 69 61 74 65 64 20 72 65 73 75   associated resu
f950: 6c 74 20 73 65 74 73 2e 20 20 47 65 6e 65 72 61  lt sets.  Genera
f960: 6c 6c 79 2c 20 74 68 69 73 20 66 6c 61 67 20 69  lly, this flag i
f970: 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  s only..        
f980: 2f 2f 20 20 20 20 20 20 20 75 73 65 66 75 6c 20  //       useful 
f990: 77 68 65 6e 20 69 74 20 69 73 20 6e 65 63 65 73  when it is neces
f9a0: 73 61 72 79 20 74 6f 20 72 65 74 61 69 6e 20 63  sary to retain c
f9b0: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74  ompatibility wit
f9c0: 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  h..        //   
f9d0: 20 20 20 20 6f 74 68 65 72 20 41 44 4f 2e 4e 45      other ADO.NE
f9e0: 54 20 70 72 6f 76 69 64 65 72 73 20 74 68 61 74  T providers that
f9f0: 20 75 73 65 20 74 68 65 73 65 20 73 61 6d 65 20   use these same 
fa00: 73 65 6d 61 6e 74 69 63 73 20 66 6f 72 0d 0a 20  semantics for.. 
fa10: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
fa20: 74 68 65 20 48 61 73 52 6f 77 73 20 70 72 6f 70  the HasRows prop
fa30: 65 72 74 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  erty...        /
fa40: 2f 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  /..        if ((
fa50: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
fa60: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 53  onnectionFlags.S
fa70: 74 69 63 6b 79 48 61 73 52 6f 77 73 29 20 3d 3d  tickyHasRows) ==
fa80: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
fa90: 6e 46 6c 61 67 73 2e 53 74 69 63 6b 79 48 61 73  nFlags.StickyHas
faa0: 52 6f 77 73 29 0d 0a 20 20 20 20 20 20 20 20 20  Rows)..         
fab0: 20 72 65 74 75 72 6e 20 28 28 5f 72 65 61 64 69   return ((_readi
fac0: 6e 67 53 74 61 74 65 20 21 3d 20 31 29 20 7c 7c  ngState != 1) ||
fad0: 20 28 5f 73 74 65 70 43 6f 75 6e 74 20 3e 20 30   (_stepCount > 0
fae0: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ));....        /
faf0: 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f  /..        // NO
fb00: 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65 20  TE: This is the 
fb10: 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72  default behavior
fb20: 2e 20 20 49 74 20 72 65 74 75 72 6e 73 20 6e 6f  .  It returns no
fb30: 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 0d 0a  n-zero only if..
fb40: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
fb50: 20 6d 6f 72 65 20 72 6f 77 73 20 61 72 65 20 61   more rows are a
fb60: 76 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e 20 61  vailable (i.e. a
fb70: 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 52 65 61   call to the Rea
fb80: 64 20 6d 65 74 68 6f 64 20 69 73 0d 0a 20 20 20  d method is..   
fb90: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78       //       ex
fba0: 70 65 63 74 65 64 20 74 6f 20 73 75 63 63 65 65  pected to succee
fbb0: 64 29 2e 20 20 50 72 69 6f 72 20 74 6f 20 74 68  d).  Prior to th
fbc0: 65 20 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 6f  e introduction o
fbd0: 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  f the..        /
fbe0: 2f 20 20 20 20 20 20 20 22 73 74 69 63 6b 79 22  /       "sticky"
fbf0: 20 66 6c 61 67 2c 20 74 68 69 73 20 69 73 20 68   flag, this is h
fc00: 6f 77 20 74 68 69 73 20 70 72 6f 70 65 72 74 79  ow this property
fc10: 20 68 61 73 20 61 6c 77 61 79 73 20 77 6f 72 6b   has always work
fc20: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  ed...        //.
fc30: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
fc40: 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 21  (_readingState !
fc50: 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  = 1);..      }..
fc60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
fc70: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
fc80: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75 65  /// Returns True
fc90: 20 69 66 20 74 68 65 20 64 61 74 61 20 72 65 61   if the data rea
fca0: 64 65 72 20 69 73 20 63 6c 6f 73 65 64 0d 0a 20  der is closed.. 
fcb0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
fcc0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
fcd0: 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 43 6c  erride bool IsCl
fce0: 6f 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  osed..    {..   
fcf0: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
fd00: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
fd10: 20 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d 20 6e 75   (_command == nu
fd20: 6c 6c 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d  ll); }..    }...
fd30: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
fd40: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
fd50: 72 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20  rns True if the 
fd60: 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e  specified column
fd70: 20 69 73 20 6e 75 6c 6c 0d 0a 20 20 20 20 2f 2f   is null..    //
fd80: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
fd90: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
fda0: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
fdb0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
fdc0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
fdd0: 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20 6f 72  <returns>True or
fde0: 20 46 61 6c 73 65 3c 2f 72 65 74 75 72 6e 73 3e   False</returns>
fdf0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
fe00: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 44 42 4e  rride bool IsDBN
fe10: 75 6c 6c 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ull(int i)..    
fe20: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
fe30: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
fe40: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
fe50: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
fe60: 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65  if (i >= Private
fe70: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
fe80: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
fe90: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
fea0: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
feb0: 6e 66 6f 2e 49 73 44 42 4e 75 6c 6c 28 69 20 2d  nfo.IsDBNull(i -
fec0: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
fed0: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
fee0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
fef0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
ff00: 73 71 6c 2e 49 73 4e 75 6c 6c 28 5f 61 63 74 69  sql.IsNull(_acti
ff10: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
ff20: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
ff30: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
ff40: 20 20 2f 2f 2f 20 4d 6f 76 65 73 20 74 6f 20 74    /// Moves to t
ff50: 68 65 20 6e 65 78 74 20 72 65 73 75 6c 74 73 65  he next resultse
ff60: 74 20 69 6e 20 6d 75 6c 74 69 70 6c 65 20 72 6f  t in multiple ro
ff70: 77 2d 72 65 74 75 72 6e 69 6e 67 20 53 51 4c 20  w-returning SQL 
ff80: 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 2f 2f  command...    //
ff90: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
ffa0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
ffb0: 72 75 65 20 69 66 20 74 68 65 20 63 6f 6d 6d 61  rue if the comma
ffc0: 6e 64 20 77 61 73 20 73 75 63 63 65 73 73 66 75  nd was successfu
ffd0: 6c 20 61 6e 64 20 61 20 6e 65 77 20 72 65 73 75  l and a new resu
ffe0: 6c 74 73 65 74 20 69 73 20 61 76 61 69 6c 61 62  ltset is availab
fff0: 6c 65 2c 20 46 61 6c 73 65 20 6f 74 68 65 72 77  le, False otherw
10000 69 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ise.</returns>..
10010 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
10020 69 64 65 20 62 6f 6f 6c 20 4e 65 78 74 52 65 73  ide bool NextRes
10030 75 6c 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ult()..    {..  
10040 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
10050 64 28 29 3b 0d 0a 20 20 20 20 20 20 43 68 65 63  d();..      Chec
10060 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  kClosed();..    
10070 20 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69    if (_throwOnDi
10080 73 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43 6f  sposed) SQLiteCo
10090 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d  mmand.Check(_com
100a0 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mand);....      
100b0 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
100c0 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  stmt = null;..  
100d0 20 20 20 20 69 6e 74 20 66 69 65 6c 64 43 6f 75      int fieldCou
100e0 6e 74 3b 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20  nt;..      bool 
100f0 73 63 68 65 6d 61 4f 6e 6c 79 20 3d 20 28 28 5f  schemaOnly = ((_
10100 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20  commandBehavior 
10110 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  & CommandBehavio
10120 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29 20 21 3d  r.SchemaOnly) !=
10130 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68   0);....      wh
10140 69 6c 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20  ile (true)..    
10150 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
10160 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c 20 26 26  (stmt == null &&
10170 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
10180 74 20 21 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63  t != null && _ac
10190 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
101a0 71 6c 20 21 3d 20 6e 75 6c 6c 20 26 26 20 5f 61  ql != null && _a
101b0 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
101c0 73 71 6c 2e 49 73 4f 70 65 6e 28 29 29 0d 0a 20  sql.IsOpen()).. 
101d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
101e0 20 20 20 20 2f 2f 20 52 65 73 65 74 20 74 68 65      // Reset the
101f0 20 70 72 65 76 69 6f 75 73 6c 79 2d 65 78 65 63   previously-exec
10200 75 74 65 64 20 73 74 61 74 65 6d 65 6e 74 0d 0a  uted statement..
10210 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73            if (!s
10220 63 68 65 6d 61 4f 6e 6c 79 29 20 5f 61 63 74 69  chemaOnly) _acti
10230 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
10240 2e 52 65 73 65 74 28 5f 61 63 74 69 76 65 53 74  .Reset(_activeSt
10250 61 74 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20  atement);....   
10260 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27         // If we'
10270 72 65 20 6f 6e 6c 79 20 73 75 70 70 6f 73 65 64  re only supposed
10280 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e   to return a sin
10290 67 6c 65 20 72 6f 77 73 65 74 2c 20 73 74 65 70  gle rowset, step
102a0 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 72 65 6d   through all rem
102b0 61 69 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  aining statement
102c0 73 20 6f 6e 63 65 20 75 6e 74 69 6c 0d 0a 20 20  s once until..  
102d0 20 20 20 20 20 20 20 20 2f 2f 20 74 68 65 79 20          // they 
102e0 61 72 65 20 61 6c 6c 20 64 6f 6e 65 20 61 6e 64  are all done and
102f0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 74 6f   return false to
10300 20 69 6e 64 69 63 61 74 65 20 6e 6f 20 6d 6f 72   indicate no mor
10310 65 20 72 65 73 75 6c 74 73 65 74 73 20 65 78 69  e resultsets exi
10320 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 69  st...          i
10330 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61  f ((_commandBeha
10340 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65  vior & CommandBe
10350 68 61 76 69 6f 72 2e 53 69 6e 67 6c 65 52 65 73  havior.SingleRes
10360 75 6c 74 29 20 21 3d 20 30 29 0d 0a 20 20 20 20  ult) != 0)..    
10370 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10380 20 20 20 20 20 66 6f 72 20 28 3b 20 3b 20 29 0d       for (; ; ).
10390 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
103a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
103b0 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 47 65  mt = _command.Ge
103c0 74 53 74 61 74 65 6d 65 6e 74 28 5f 61 63 74 69  tStatement(_acti
103d0 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78  veStatementIndex
103e0 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20   + 1);..        
103f0 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d        if (stmt =
10400 3d 20 6e 75 6c 6c 29 20 62 72 65 61 6b 3b 0d 0a  = null) break;..
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 61                _a
10420 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
10430 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20  dex++;....      
10440 20 20 20 20 20 20 20 20 69 66 20 28 21 73 63 68          if (!sch
10450 65 6d 61 4f 6e 6c 79 20 26 26 20 73 74 6d 74 2e  emaOnly && stmt.
10460 5f 73 71 6c 2e 53 74 65 70 28 73 74 6d 74 29 29  _sql.Step(stmt))
10470 20 5f 73 74 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a   _stepCount++;..
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
10490 20 28 73 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75   (stmt._sql.Colu
104a0 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 20 3d 3d  mnCount(stmt) ==
104b0 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
104c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
104d0 20 20 20 20 20 20 69 6e 74 20 63 68 61 6e 67 65        int change
104e0 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  s = 0;..        
104f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
10500 64 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  dOnly = false;..
10510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10520 69 66 20 28 73 74 6d 74 2e 54 72 79 47 65 74 43  if (stmt.TryGetC
10530 68 61 6e 67 65 73 28 72 65 66 20 63 68 61 6e 67  hanges(ref chang
10540 65 73 2c 20 72 65 66 20 72 65 61 64 4f 6e 6c 79  es, ref readOnly
10550 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
10560 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10570 20 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65           if (!re
10580 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20  adOnly)..       
10590 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
105a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105b0 20 20 69 66 20 28 5f 72 6f 77 73 41 66 66 65 63    if (_rowsAffec
105c0 74 65 64 20 3d 3d 20 2d 31 29 20 5f 72 6f 77 73  ted == -1) _rows
105d0 41 66 66 65 63 74 65 64 20 3d 20 30 3b 0d 0a 20  Affected = 0;.. 
105e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105f0 20 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64     _rowsAffected
10600 20 2b 3d 20 63 68 61 6e 67 65 73 3b 0d 0a 20 20   += changes;..  
10610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10620 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
10630 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10640 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
10650 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10670 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10690 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
106a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
106b0 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c    if (!schemaOnl
106c0 79 29 20 73 74 6d 74 2e 5f 73 71 6c 2e 52 65 73  y) stmt._sql.Res
106d0 65 74 28 73 74 6d 74 29 3b 20 2f 2f 20 47 6f 74  et(stmt); // Got
106e0 74 61 20 72 65 73 65 74 20 61 66 74 65 72 20 65  ta reset after e
106f0 76 65 72 79 20 73 74 65 70 20 74 6f 20 72 65 6c  very step to rel
10700 65 61 73 65 20 61 6e 79 20 6c 6f 63 6b 73 20 61  ease any locks a
10710 6e 64 20 73 75 63 68 21 0d 0a 20 20 20 20 20 20  nd such!..      
10720 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
10730 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
10740 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e;..          }.
10750 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
10760 20 20 20 20 20 20 2f 2f 20 47 65 74 20 74 68 65        // Get the
10770 20 6e 65 78 74 20 73 74 61 74 65 6d 65 6e 74 20   next statement 
10780 74 6f 20 65 78 65 63 75 74 65 0d 0a 20 20 20 20  to execute..    
10790 20 20 20 20 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d      stmt = _comm
107a0 61 6e 64 2e 47 65 74 53 74 61 74 65 6d 65 6e 74  and.GetStatement
107b0 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
107c0 74 49 6e 64 65 78 20 2b 20 31 29 3b 0d 0a 0d 0a  tIndex + 1);....
107d0 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
107e0 27 76 65 20 72 65 61 63 68 65 64 20 74 68 65 20  've reached the 
107f0 65 6e 64 20 6f 66 20 74 68 65 20 73 74 61 74 65  end of the state
10800 6d 65 6e 74 73 2c 20 72 65 74 75 72 6e 20 66 61  ments, return fa
10810 6c 73 65 2c 20 6e 6f 20 6d 6f 72 65 20 72 65 73  lse, no more res
10820 75 6c 74 73 65 74 73 0d 0a 20 20 20 20 20 20 20  ultsets..       
10830 20 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c   if (stmt == nul
10840 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  l)..          re
10850 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
10860 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 20         // If we 
10870 77 65 72 65 20 6f 6e 20 61 20 63 75 72 72 65 6e  were on a curren
10880 74 20 72 65 73 75 6c 74 73 65 74 2c 20 73 65 74  t resultset, set
10890 20 74 68 65 20 73 74 61 74 65 20 74 6f 20 22 64   the state to "d
108a0 6f 6e 65 20 72 65 61 64 69 6e 67 22 20 66 6f 72  one reading" for
108b0 20 69 74 0d 0a 20 20 20 20 20 20 20 20 69 66 20   it..        if 
108c0 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3c  (_readingState <
108d0 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 5f   1)..          _
108e0 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31  readingState = 1
108f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 61 63  ;....        _ac
10900 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64  tiveStatementInd
10910 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ex++;....       
10920 20 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20 73 74   fieldCount = st
10930 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f  mt._sql.ColumnCo
10940 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20  unt(stmt);....  
10950 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20        // If the 
10960 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74  statement is not
10970 20 61 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d   a select statem
10980 65 6e 74 20 6f 72 20 77 65 27 72 65 20 6e 6f 74  ent or we're not
10990 20 72 65 74 72 69 65 76 69 6e 67 20 73 63 68 65   retrieving sche
109a0 6d 61 20 6f 6e 6c 79 2c 20 74 68 65 6e 20 70 65  ma only, then pe
109b0 72 66 6f 72 6d 20 74 68 65 20 69 6e 69 74 69 61  rform the initia
109c0 6c 20 73 74 65 70 0d 0a 20 20 20 20 20 20 20 20  l step..        
109d0 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 20  if (!schemaOnly 
109e0 7c 7c 20 28 66 69 65 6c 64 43 6f 75 6e 74 20 3d  || (fieldCount =
109f0 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  = 0))..        {
10a00 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
10a10 21 73 63 68 65 6d 61 4f 6e 6c 79 20 26 26 20 73  !schemaOnly && s
10a20 74 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28 73 74  tmt._sql.Step(st
10a30 6d 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  mt))..          
10a40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  {..            _
10a50 73 74 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 20 20  stepCount++;..  
10a60 20 20 20 20 20 20 20 20 20 20 5f 72 65 61 64 69            _readi
10a70 6e 67 53 74 61 74 65 20 3d 20 2d 31 3b 0d 0a 20  ngState = -1;.. 
10a80 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10a90 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 66        else if (f
10aa0 69 65 6c 64 43 6f 75 6e 74 20 3d 3d 20 30 29 20  ieldCount == 0) 
10ab0 2f 2f 20 4e 6f 20 72 6f 77 73 20 72 65 74 75 72  // No rows retur
10ac0 6e 65 64 2c 20 69 66 20 66 69 65 6c 64 43 6f 75  ned, if fieldCou
10ad0 6e 74 20 69 73 20 7a 65 72 6f 2c 20 73 6b 69 70  nt is zero, skip
10ae0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73 74 61   to the next sta
10af0 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  tement..        
10b00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10b10 20 69 6e 74 20 63 68 61 6e 67 65 73 20 3d 20 30   int changes = 0
10b20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
10b30 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 20 3d 20 66  ool readOnly = f
10b40 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
10b50 20 20 20 69 66 20 28 73 74 6d 74 2e 54 72 79 47     if (stmt.TryG
10b60 65 74 43 68 61 6e 67 65 73 28 72 65 66 20 63 68  etChanges(ref ch
10b70 61 6e 67 65 73 2c 20 72 65 66 20 72 65 61 64 4f  anges, ref readO
10b80 6e 6c 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nly))..         
10b90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10ba0 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c      if (!readOnl
10bb0 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
10bc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10bd0 20 20 20 20 20 69 66 20 28 5f 72 6f 77 73 41 66       if (_rowsAf
10be0 66 65 63 74 65 64 20 3d 3d 20 2d 31 29 20 5f 72  fected == -1) _r
10bf0 6f 77 73 41 66 66 65 63 74 65 64 20 3d 20 30 3b  owsAffected = 0;
10c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10c10 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20    _rowsAffected 
10c20 2b 3d 20 63 68 61 6e 67 65 73 3b 0d 0a 20 20 20  += changes;..   
10c30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
10c40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
10c50 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
10c60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10c70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10c80 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
10c90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10ca0 20 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d        if (!schem
10cb0 61 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f 73 71 6c  aOnly) stmt._sql
10cc0 2e 52 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 20  .Reset(stmt);.. 
10cd0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
10ce0 6e 75 65 3b 20 2f 2f 20 53 6b 69 70 20 74 68 69  nue; // Skip thi
10cf0 73 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 6d 6f  s command and mo
10d00 76 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20  ve to the next, 
10d10 69 74 20 77 61 73 20 6e 6f 74 20 61 20 72 6f 77  it was not a row
10d20 2d 72 65 74 75 72 6e 69 6e 67 20 72 65 73 75 6c  -returning resul
10d30 74 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20  tset..          
10d40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  }..          els
10d50 65 20 2f 2f 20 4e 6f 20 72 6f 77 73 2c 20 66 69  e // No rows, fi
10d60 65 6c 64 43 6f 75 6e 74 20 69 73 20 6e 6f 6e 2d  eldCount is non-
10d70 7a 65 72 6f 20 73 6f 20 73 74 6f 70 20 68 65 72  zero so stop her
10d80 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  e..          {..
10d90 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 65 61              _rea
10da0 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 20 2f  dingState = 1; /
10db0 2f 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 72  / This command r
10dc0 65 74 75 72 6e 65 64 20 63 6f 6c 75 6d 6e 73 20  eturned columns 
10dd0 62 75 74 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20  but no rows, so 
10de0 72 65 74 75 72 6e 20 74 72 75 65 2c 20 62 75 74  return true, but
10df0 20 48 61 73 52 6f 77 73 20 3d 20 66 61 6c 73 65   HasRows = false
10e00 20 61 6e 64 20 52 65 61 64 28 29 20 72 65 74 75   and Read() retu
10e10 72 6e 73 20 66 61 6c 73 65 0d 0a 20 20 20 20 20  rns false..     
10e20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10e30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  }....        // 
10e40 41 68 68 2c 20 77 65 20 66 6f 75 6e 64 20 61 20  Ahh, we found a 
10e50 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 72 65  row-returning re
10e60 73 75 6c 74 73 65 74 20 65 6c 69 67 69 62 6c 65  sultset eligible
10e70 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 21   to be returned!
10e80 0d 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69 76  ..        _activ
10e90 65 53 74 61 74 65 6d 65 6e 74 20 3d 20 73 74 6d  eStatement = stm
10ea0 74 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 69 65  t;..        _fie
10eb0 6c 64 43 6f 75 6e 74 20 3d 20 66 69 65 6c 64 43  ldCount = fieldC
10ec0 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 5f  ount;..        _
10ed0 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20 6e  fieldIndexes = n
10ee0 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74  ew Dictionary<st
10ef0 72 69 6e 67 2c 20 69 6e 74 3e 28 53 74 72 69 6e  ring, int>(Strin
10f00 67 43 6f 6d 70 61 72 65 72 2e 4f 72 64 69 6e 61  gComparer.Ordina
10f10 6c 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 20  lIgnoreCase);.. 
10f20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 54 79 70         _fieldTyp
10f30 65 41 72 72 61 79 20 3d 20 6e 65 77 20 53 51 4c  eArray = new SQL
10f40 69 74 65 54 79 70 65 5b 50 72 69 76 61 74 65 56  iteType[PrivateV
10f50 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
10f60 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  ];....        if
10f70 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
10f80 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
10f90 61 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 29 20 21  avior.KeyInfo) !
10fa0 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
10fb0 4c 6f 61 64 4b 65 79 49 6e 66 6f 28 29 3b 0d 0a  LoadKeyInfo();..
10fc0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
10fd0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 7d 0d   true;..      }.
10fe0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
10ff0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
11000 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
11010 20 61 74 74 65 6d 70 74 73 20 74 6f 20 71 75 65   attempts to que
11020 72 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ry the database 
11030 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63  connection assoc
11040 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20  iated with..    
11050 2f 2f 2f 20 74 68 65 20 64 61 74 61 20 72 65 61  /// the data rea
11060 64 65 72 20 69 6e 20 75 73 65 2e 20 20 49 66 20  der in use.  If 
11070 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63  the underlying c
11080 6f 6d 6d 61 6e 64 20 6f 72 20 63 6f 6e 6e 65 63  ommand or connec
11090 74 69 6f 6e 20 69 73 0d 0a 20 20 20 20 2f 2f 2f  tion is..    ///
110a0 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 61 20   unavailable, a 
110b0 6e 75 6c 6c 20 76 61 6c 75 65 20 77 69 6c 6c 20  null value will 
110c0 62 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20  be returned...  
110d0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
110e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
110f0 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
11100 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65   connection obje
11110 63 74 20 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20  ct -OR- null if 
11120 69 74 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  it is unavailabl
11130 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
11140 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
11150 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69  rnal static SQLi
11160 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 47 65 74  teConnection Get
11170 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
11180 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
11190 65 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72  eader dataReader
111a0 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
111b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d   {..        try.
111c0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
111d0 20 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61          if (data
111e0 52 65 61 64 65 72 20 21 3d 20 6e 75 6c 6c 29 0d  Reader != null).
111f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
11200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11210 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
11220 6d 6d 61 6e 64 20 3d 20 64 61 74 61 52 65 61 64  mmand = dataRead
11230 65 72 2e 5f 63 6f 6d 6d 61 6e 64 3b 0d 0a 0d 0a  er._command;....
11240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11250 69 66 20 28 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e  if (command != n
11260 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
11270 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
11290 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
112a0 6e 6e 65 63 74 69 6f 6e 20 3d 20 63 6f 6d 6d 61  nnection = comma
112b0 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 3b 0d 0a  nd.Connection;..
112c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
112d0 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63        if (connec
112e0 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  tion != null).. 
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11300 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f         return co
11310 6e 6e 65 63 74 69 6f 6e 3b 0d 0a 20 20 20 20 20  nnection;..     
11320 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11330 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11340 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11350 63 61 74 63 68 20 28 4f 62 6a 65 63 74 44 69 73  catch (ObjectDis
11360 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 29 0d  posedException).
11370 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
11380 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
11390 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
113a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
113b0 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 7d  urn null;..    }
113c0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
113d0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
113e0 65 74 72 69 65 76 65 73 20 74 68 65 20 53 51 4c  etrieves the SQL
113f0 69 74 65 54 79 70 65 20 66 6f 72 20 61 20 67 69  iteType for a gi
11400 76 65 6e 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 72  ven column and r
11410 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f  ow value...    /
11420 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
11430 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
11440 6d 65 3d 22 6f 6c 64 54 79 70 65 22 3e 0d 0a 20  me="oldType">.. 
11450 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69     /// The origi
11460 6e 61 6c 20 53 51 4c 69 74 65 54 79 70 65 20 73  nal SQLiteType s
11470 74 72 75 63 74 75 72 65 2c 20 62 61 73 65 64 20  tructure, based 
11480 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 63 6f 6c 75  only on the colu
11490 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  mn...    /// </p
114a0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
114b0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 65 78 74  param name="text
114c0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
114d0 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20 6f 66  textual value of
114e0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 66 6f 72 20   the column for 
114f0 61 20 67 69 76 65 6e 20 72 6f 77 2e 0d 0a 20 20  a given row...  
11500 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
11510 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
11520 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 53  >..    /// The S
11530 51 4c 69 74 65 54 79 70 65 20 73 74 72 75 63 74  QLiteType struct
11540 75 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ure...    /// </
11550 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72  returns>..    pr
11560 69 76 61 74 65 20 53 51 4c 69 74 65 54 79 70 65  ivate SQLiteType
11570 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 0d   GetSQLiteType(.
11580 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 54  .        SQLiteT
11590 79 70 65 20 6f 6c 64 54 79 70 65 2c 20 2f 2a 20  ype oldType, /* 
115a0 50 41 53 53 2d 54 48 52 4f 55 47 48 20 2a 2f 0d  PASS-THROUGH */.
115b0 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
115c0 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20 29 0d  text..        ).
115d0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
115e0 69 66 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72  if (SQLiteConver
115f0 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 4e 75 6c 6c 28  t.LooksLikeNull(
11600 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20  text))..        
11610 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53      return new S
11620 51 4c 69 74 65 54 79 70 65 28 54 79 70 65 41 66  QLiteType(TypeAf
11630 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c 20 44 62 54  finity.Null, DbT
11640 79 70 65 2e 4f 62 6a 65 63 74 29 3b 0d 0a 0d 0a  ype.Object);....
11650 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69          if (SQLi
11660 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c  teConvert.LooksL
11670 69 6b 65 49 6e 74 36 34 28 74 65 78 74 29 29 0d  ikeInt64(text)).
11680 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
11690 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 54 79  urn new SQLiteTy
116a0 70 65 28 54 79 70 65 41 66 66 69 6e 69 74 79 2e  pe(TypeAffinity.
116b0 49 6e 74 36 34 2c 20 44 62 54 79 70 65 2e 49 6e  Int64, DbType.In
116c0 74 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  t64);....       
116d0 20 69 66 20 28 53 51 4c 69 74 65 43 6f 6e 76 65   if (SQLiteConve
116e0 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 44 6f 75 62  rt.LooksLikeDoub
116f0 6c 65 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20  le(text))..     
11700 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
11710 77 20 53 51 4c 69 74 65 54 79 70 65 28 54 79 70  w SQLiteType(Typ
11720 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65  eAffinity.Double
11730 2c 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29  , DbType.Double)
11740 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
11750 28 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  ((_activeStateme
11760 6e 74 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a  nt != null) &&..
11770 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
11780 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c  teConvert.LooksL
11790 69 6b 65 44 61 74 65 54 69 6d 65 28 5f 61 63 74  ikeDateTime(_act
117a0 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
117b0 6c 2c 20 74 65 78 74 29 29 0d 0a 20 20 20 20 20  l, text))..     
117c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
117d0 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c    return new SQL
117e0 69 74 65 54 79 70 65 28 54 79 70 65 41 66 66 69  iteType(TypeAffi
117f0 6e 69 74 79 2e 44 61 74 65 54 69 6d 65 2c 20 44  nity.DateTime, D
11800 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29 3b  bType.DateTime);
11810 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
11820 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6f 6c         return ol
11830 64 54 79 70 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  dType;..    }...
11840 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
11850 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  y>..    /// Retr
11860 69 65 76 65 73 20 74 68 65 20 53 51 4c 69 74 65  ieves the SQLite
11870 54 79 70 65 20 66 6f 72 20 61 20 67 69 76 65 6e  Type for a given
11880 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 63 61 63   column, and cac
11890 68 65 73 20 69 74 20 74 6f 20 61 76 6f 69 64 20  hes it to avoid 
118a0 72 65 70 65 74 65 74 69 76 65 20 69 6e 74 65 72  repetetive inter
118b0 6f 70 20 63 61 6c 6c 73 2e 0d 0a 20 20 20 20 2f  op calls...    /
118c0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
118d0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
118e0 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66  me="flags">The f
118f0 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
11900 77 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20  with the parent 
11910 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
11920 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  t.</param>..    
11930 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
11940 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
11950 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
11960 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
11970 65 74 75 72 6e 73 3e 41 20 53 51 4c 69 74 65 54  eturns>A SQLiteT
11980 79 70 65 20 73 74 72 75 63 74 75 72 65 3c 2f 72  ype structure</r
11990 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69  eturns>..    pri
119a0 76 61 74 65 20 53 51 4c 69 74 65 54 79 70 65 20  vate SQLiteType 
119b0 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 53 51  GetSQLiteType(SQ
119c0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
119d0 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
119e0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
119f0 20 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70    SQLiteType typ
11a00 20 3d 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72   = _fieldTypeArr
11a10 61 79 5b 69 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ay[i];....      
11a20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 6e 75 6c    if (typ == nul
11a30 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
11a40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 6e             // In
11a50 69 74 69 61 6c 69 7a 65 20 74 68 69 73 20 63 6f  itialize this co
11a60 6c 75 6d 6e 27 73 20 66 69 65 6c 64 20 74 79 70  lumn's field typ
11a70 65 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20  e instance..    
11a80 20 20 20 20 20 20 20 20 74 79 70 20 3d 20 5f 66          typ = _f
11a90 69 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d  ieldTypeArray[i]
11aa0 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70   = new SQLiteTyp
11ab0 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e();..        }.
11ac0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66  ...        // If
11ad0 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64   not initialized
11ae0 2c 20 74 68 65 6e 20 66 65 74 63 68 20 74 68 65  , then fetch the
11af0 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e   declared column
11b00 20 64 61 74 61 74 79 70 65 20 61 6e 64 20 61 74   datatype and at
11b10 74 65 6d 70 74 20 74 6f 20 63 6f 6e 76 65 72 74  tempt to convert
11b20 20 69 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   it..        // 
11b30 74 6f 20 61 20 6b 6e 6f 77 6e 20 44 62 54 79 70  to a known DbTyp
11b40 65 2e 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  e...        if (
11b50 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20  typ.Affinity == 
11b60 54 79 70 65 41 66 66 69 6e 69 74 79 2e 55 6e 69  TypeAffinity.Uni
11b70 6e 69 74 69 61 6c 69 7a 65 64 29 0d 0a 20 20 20  nitialized)..   
11b80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11b90 20 20 20 20 74 79 70 2e 54 79 70 65 20 3d 20 53      typ.Type = S
11ba0 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54 79 70  QLiteConvert.Typ
11bb0 65 4e 61 6d 65 54 6f 44 62 54 79 70 65 28 0d 0a  eNameToDbType(..
11bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bd0 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 74 68  GetConnection(th
11be0 69 73 29 2c 20 5f 61 63 74 69 76 65 53 74 61 74  is), _activeStat
11bf0 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d  ement._sql.Colum
11c00 6e 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20  nType(..        
11c10 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
11c20 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 72 65 66  tatement, i, ref
11c30 20 74 79 70 2e 41 66 66 69 6e 69 74 79 29 2c 20   typ.Affinity), 
11c40 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20  flags);..       
11c50 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
11c60 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
11c70 20 20 20 20 20 20 20 20 20 74 79 70 2e 41 66 66           typ.Aff
11c80 69 6e 69 74 79 20 3d 20 5f 61 63 74 69 76 65 53  inity = _activeS
11c90 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f  tatement._sql.Co
11ca0 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 0d 0a 20  lumnAffinity(.. 
11cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
11cc0 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
11cd0 20 69 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d   i);..        }.
11ce0 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
11cf0 6e 20 74 79 70 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  n typ;..    }...
11d00 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
11d10 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 61 64  y>..    /// Read
11d20 73 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 66  s the next row f
11d30 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 73 65  rom the resultse
11d40 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  t..    /// </sum
11d50 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
11d60 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20  returns>True if 
11d70 61 20 6e 65 77 20 72 6f 77 20 77 61 73 20 73 75  a new row was su
11d80 63 63 65 73 73 66 75 6c 6c 79 20 6c 6f 61 64 65  ccessfully loade
11d90 64 20 61 6e 64 20 69 73 20 72 65 61 64 79 20 66  d and is ready f
11da0 6f 72 20 70 72 6f 63 65 73 73 69 6e 67 3c 2f 72  or processing</r
11db0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
11dc0 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
11dd0 6c 20 52 65 61 64 28 29 0d 0a 20 20 20 20 7b 0d  l Read()..    {.
11de0 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70  .      CheckDisp
11df0 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 43  osed();..      C
11e00 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
11e10 20 20 20 20 20 69 66 20 28 5f 74 68 72 6f 77 4f       if (_throwO
11e20 6e 44 69 73 70 6f 73 65 64 29 20 53 51 4c 69 74  nDisposed) SQLit
11e30 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f  eCommand.Check(_
11e40 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20  command);....   
11e50 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64     if ((_command
11e60 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61  Behavior & Comma
11e70 6e 64 42 65 68 61 76 69 6f 72 2e 53 63 68 65 6d  ndBehavior.Schem
11e80 61 4f 6e 6c 79 29 20 21 3d 20 30 29 0d 0a 20 20  aOnly) != 0)..  
11e90 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
11ea0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  se;....      if 
11eb0 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d  (_readingState =
11ec0 3d 20 2d 31 29 20 2f 2f 20 46 69 72 73 74 20 73  = -1) // First s
11ed0 74 65 70 20 77 61 73 20 61 6c 72 65 61 64 79 20  tep was already 
11ee0 64 6f 6e 65 20 61 74 20 74 68 65 20 4e 65 78 74  done at the Next
11ef0 52 65 73 75 6c 74 28 29 20 6c 65 76 65 6c 2c 20  Result() level, 
11f00 73 6f 20 64 6f 6e 27 74 20 73 74 65 70 20 61 67  so don't step ag
11f10 61 69 6e 2c 20 6a 75 73 74 20 72 65 74 75 72 6e  ain, just return
11f20 20 74 72 75 65 2e 0d 0a 20 20 20 20 20 20 7b 0d   true...      {.
11f30 0a 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e  .        _readin
11f40 67 53 74 61 74 65 20 3d 20 30 3b 0d 0a 20 20 20  gState = 0;..   
11f50 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
11f60 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
11f70 20 20 65 6c 73 65 20 69 66 20 28 5f 72 65 61 64    else if (_read
11f80 69 6e 67 53 74 61 74 65 20 3d 3d 20 30 29 20 2f  ingState == 0) /
11f90 2f 20 41 63 74 69 76 65 6c 79 20 72 65 61 64 69  / Actively readi
11fa0 6e 67 20 72 6f 77 73 0d 0a 20 20 20 20 20 20 7b  ng rows..      {
11fb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 44 6f 6e  ..        // Don
11fc0 27 74 20 72 65 61 64 20 61 20 6e 65 77 20 72 6f  't read a new ro
11fd0 77 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64  w if the command
11fe0 20 62 65 68 61 76 69 6f 72 20 64 69 63 74 61 74   behavior dictat
11ff0 65 73 20 53 69 6e 67 6c 65 52 6f 77 2e 20 20 57  es SingleRow.  W
12000 65 27 76 65 20 61 6c 72 65 61 64 79 20 72 65 61  e've already rea
12010 64 20 74 68 65 20 66 69 72 73 74 20 72 6f 77 2e  d the first row.
12020 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
12030 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20  commandBehavior 
12040 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  & CommandBehavio
12050 72 2e 53 69 6e 67 6c 65 52 6f 77 29 20 3d 3d 20  r.SingleRow) == 
12060 30 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  0)..        {.. 
12070 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 61 63           if (_ac
12080 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
12090 71 6c 2e 53 74 65 70 28 5f 61 63 74 69 76 65 53  ql.Step(_activeS
120a0 74 61 74 65 6d 65 6e 74 29 20 3d 3d 20 74 72 75  tatement) == tru
120b0 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  e)..          {.
120c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 74  .            _st
120d0 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 0d 0a 20 20  epCount++;....  
120e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 6b            if (_k
120f0 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
12100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
12110 6b 65 79 49 6e 66 6f 2e 52 65 73 65 74 28 29 3b  keyInfo.Reset();
12120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12130 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
12140 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
12150 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12160 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20  _readingState = 
12170 31 3b 20 2f 2f 20 46 69 6e 69 73 68 65 64 20 72  1; // Finished r
12180 65 61 64 69 6e 67 20 72 6f 77 73 0d 0a 20 20 20  eading rows..   
12190 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
121a0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
121b0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
121c0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
121d0 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   Returns the num
121e0 62 65 72 20 6f 66 20 72 6f 77 73 20 61 66 66 65  ber of rows affe
121f0 63 74 65 64 20 62 79 20 74 68 65 20 73 74 61 74  cted by the stat
12200 65 6d 65 6e 74 20 62 65 69 6e 67 20 65 78 65 63  ement being exec
12210 75 74 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54  uted...    /// T
12220 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
12230 64 20 6d 61 79 20 6e 6f 74 20 62 65 20 61 63 63  d may not be acc
12240 75 72 61 74 65 20 66 6f 72 20 44 44 4c 20 73 74  urate for DDL st
12250 61 74 65 6d 65 6e 74 73 2e 20 20 41 6c 73 6f 2c  atements.  Also,
12260 20 69 74 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 6c   it..    /// wil
12270 6c 20 62 65 20 2d 31 20 66 6f 72 20 61 6e 79 20  l be -1 for any 
12280 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 64  statement that d
12290 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74  oes not modify t
122a0 68 65 20 64 61 74 61 62 61 73 65 20 28 65 2e 67  he database (e.g
122b0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 53 45 4c 45 43  ...    /// SELEC
122c0 54 29 2e 20 20 49 66 20 61 6e 20 6f 74 68 65 72  T).  If an other
122d0 77 69 73 65 20 72 65 61 64 2d 6f 6e 6c 79 20 73  wise read-only s
122e0 74 61 74 65 6d 65 6e 74 20 6d 6f 64 69 66 69 65  tatement modifie
122f0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a  s the database..
12300 20 20 20 20 2f 2f 2f 20 69 6e 64 69 72 65 63 74      /// indirect
12310 6c 79 20 28 65 2e 67 2e 20 76 69 61 20 61 20 76  ly (e.g. via a v
12320 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 72 20  irtual table or 
12330 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
12340 63 74 69 6f 6e 29 2c 20 74 68 65 0d 0a 20 20 20  ction), the..   
12350 20 2f 2f 2f 20 76 61 6c 75 65 20 72 65 74 75 72   /// value retur
12360 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ned is undefined
12370 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
12380 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
12390 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52  c override int R
123a0 65 63 6f 72 64 73 41 66 66 65 63 74 65 64 0d 0a  ecordsAffected..
123b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
123c0 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
123d0 28 29 3b 20 72 65 74 75 72 6e 20 5f 72 6f 77 73  (); return _rows
123e0 41 66 66 65 63 74 65 64 3b 20 7d 0d 0a 20 20 20  Affected; }..   
123f0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
12400 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
12410 20 49 6e 64 65 78 65 72 20 74 6f 20 72 65 74 72   Indexer to retr
12420 69 65 76 65 20 64 61 74 61 20 66 72 6f 6d 20 61  ieve data from a
12430 20 63 6f 6c 75 6d 6e 20 67 69 76 65 6e 20 69 74   column given it
12440 73 20 6e 61 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20  s name..    /// 
12450 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
12460 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
12470 22 6e 61 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20  "name">The name 
12480 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
12490 20 72 65 74 72 69 65 76 65 20 64 61 74 61 20 66   retrieve data f
124a0 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  or</param>..    
124b0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
124c0 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64   value contained
124d0 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f   in the column</
124e0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
124f0 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62  blic override ob
12500 6a 65 63 74 20 74 68 69 73 5b 73 74 72 69 6e 67  ject this[string
12510 20 6e 61 6d 65 5d 0d 0a 20 20 20 20 7b 0d 0a 20   name]..    {.. 
12520 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
12530 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
12540 72 6e 20 47 65 74 56 61 6c 75 65 28 47 65 74 4f  rn GetValue(GetO
12550 72 64 69 6e 61 6c 28 6e 61 6d 65 29 29 3b 20 7d  rdinal(name)); }
12560 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
12570 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
12580 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72 20 74 6f    /// Indexer to
12590 20 72 65 74 72 69 65 76 65 20 64 61 74 61 20 66   retrieve data f
125a0 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 67 69 76  rom a column giv
125b0 65 6e 20 69 74 73 20 69 0d 0a 20 20 20 20 2f 2f  en its i..    //
125c0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
125d0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
125e0 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
125f0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
12600 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
12610 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 76 61 6c  <returns>The val
12620 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ue contained in 
12630 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75  the column</retu
12640 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
12650 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
12660 20 74 68 69 73 5b 69 6e 74 20 69 5d 0d 0a 20 20   this[int i]..  
12670 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b    {..      get {
12680 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
12690 3b 20 72 65 74 75 72 6e 20 47 65 74 56 61 6c 75  ; return GetValu
126a0 65 28 69 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a  e(i); }..    }..
126b0 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
126c0 69 64 20 4c 6f 61 64 4b 65 79 49 6e 66 6f 28 29  id LoadKeyInfo()
126d0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
126e0 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
126f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
12700 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  {..            _
12710 6b 65 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28  keyInfo.Dispose(
12720 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
12730 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b  _keyInfo = null;
12740 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
12750 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 20         _keyInfo 
12760 3d 20 6e 65 77 20 53 51 4c 69 74 65 4b 65 79 52  = new SQLiteKeyR
12770 65 61 64 65 72 28 5f 63 6f 6d 6d 61 6e 64 2e 43  eader(_command.C
12780 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 69 73 2c  onnection, this,
12790 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
127a0 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  t);..    }..  }.
127b0 0a 7d 0d 0a                                      .}..