System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact fc52a79b6c3a6526413736676585545c4e5fdd4a:


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 2e 0d  of its aliases..
40d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
40e0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
40f0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
4100: 54 68 65 20 69 6e 74 65 67 65 72 20 69 64 65 6e  The integer iden
4110: 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 63  tifier for the c
4120: 75 72 72 65 6e 74 20 72 6f 77 20 2d 4f 52 2d 20  urrent row -OR- 
4130: 6e 75 6c 6c 20 69 66 20 69 74 20 63 6f 75 6c 64  null if it could
4140: 20 6e 6f 74 0d 0a 20 20 20 20 2f 2f 2f 20 62 65   not..    /// be
4150: 20 64 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20 20   determined...  
4160: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
4170: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6c  ..    internal l
4180: 6f 6e 67 3f 20 47 65 74 52 6f 77 49 64 28 69 6e  ong? GetRowId(in
4190: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
41a0: 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
41b0: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
41c0: 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
41d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
41e0: 28 5f 6b 65 79 49 6e 66 6f 20 3d 3d 20 6e 75 6c  (_keyInfo == nul
41f0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
4200: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
4210: 20 20 20 20 20 20 20 20 69 6e 74 20 69 52 6f 77          int iRow
4220: 49 64 20 3d 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  Id = _keyInfo.Ge
4230: 74 52 6f 77 49 64 49 6e 64 65 78 28 0d 0a 20 20  tRowIdIndex(..  
4240: 20 20 20 20 20 20 20 20 20 20 47 65 74 44 61 74            GetDat
4250: 61 62 61 73 65 4e 61 6d 65 28 69 29 2c 20 47 65  abaseName(i), Ge
4260: 74 54 61 62 6c 65 4e 61 6d 65 28 69 29 29 3b 0d  tTableName(i));.
4270: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
4280: 52 6f 77 49 64 20 3d 3d 20 2d 31 29 0d 0a 20 20  RowId == -1)..  
4290: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
42a0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
42b0: 20 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36    return GetInt6
42c0: 34 28 69 52 6f 77 49 64 29 3b 0d 0a 20 20 20 20  4(iRowId);..    
42d0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
42e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
42f0: 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f  Retrieves the co
4300: 6c 75 6d 6e 20 61 73 20 61 20 3c 73 65 65 20 63  lumn as a <see c
4310: 72 65 66 3d 22 53 51 4c 69 74 65 42 6c 6f 62 22  ref="SQLiteBlob"
4320: 20 2f 3e 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20   /> object...   
4330: 20 2f 2f 2f 20 54 68 69 73 20 77 69 6c 6c 20 6e   /// This will n
4340: 6f 74 20 77 6f 72 6b 20 66 6f 72 20 74 61 62 6c  ot work for tabl
4350: 65 73 20 74 68 61 74 20 77 65 72 65 20 63 72 65  es that were cre
4360: 61 74 65 64 20 57 49 54 48 4f 55 54 20 52 4f 57  ated WITHOUT ROW
4370: 49 44 0d 0a 20 20 20 20 2f 2f 2f 20 2d 4f 52 2d  ID..    /// -OR-
4380: 20 69 66 20 74 68 65 20 71 75 65 72 79 20 64 6f   if the query do
4390: 65 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 74  es not include t
43a0: 68 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d  he "rowid" colum
43b0: 6e 20 6f 72 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f  n or one..    //
43c0: 2f 20 6f 66 20 69 74 73 20 61 6c 69 61 73 65 73  / of its aliases
43d0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
43e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
43f0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
4400: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
4410: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
4420: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
4430: 6e 61 6d 65 3d 22 72 65 61 64 4f 6e 6c 79 22 3e  name="readOnly">
4440: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
4450: 72 6f 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 62  ro to open the b
4460: 6c 6f 62 20 6f 62 6a 65 63 74 20 66 6f 72 20 72  lob object for r
4470: 65 61 64 2d 6f 6e 6c 79 20 61 63 63 65 73 73 2e  ead-only access.
4480: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
4490: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
44a0: 75 72 6e 73 3e 41 20 6e 65 77 20 3c 73 65 65 20  urns>A new <see 
44b0: 63 72 65 66 3d 22 53 51 4c 69 74 65 42 6c 6f 62  cref="SQLiteBlob
44c0: 22 20 2f 3e 20 6f 62 6a 65 63 74 2e 3c 2f 72 65  " /> object.</re
44d0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
44e0: 69 63 20 53 51 4c 69 74 65 42 6c 6f 62 20 47 65  ic SQLiteBlob Ge
44f0: 74 42 6c 6f 62 28 69 6e 74 20 69 2c 20 62 6f 6f  tBlob(int i, boo
4500: 6c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20  l readOnly)..   
4510: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
4520: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
4530: 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47        VerifyForG
4540: 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  et();....       
4550: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
4560: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
4570: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
4580: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
4590: 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43  acks) == SQLiteC
45a0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
45b0: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
45c0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d  ValueCallbacks).
45d0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
45e0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
45f0: 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61  taReaderValue va
4600: 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  lue = new SQLite
4610: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28  DataReaderValue(
4620: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4630: 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a  bool complete;..
4640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
4650: 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c  vokeReadValueCal
4660: 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c  lback(i, new SQL
4670: 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e  iteReadValueEven
4680: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
4690: 20 20 20 20 20 20 20 20 22 47 65 74 42 6c 6f 62          "GetBlob
46a0: 22 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61  ", new SQLiteRea
46b0: 64 42 6c 6f 62 45 76 65 6e 74 41 72 67 73 28 72  dBlobEventArgs(r
46c0: 65 61 64 4f 6e 6c 79 29 2c 20 76 61 6c 75 65 29  eadOnly), value)
46d0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
46e0: 20 20 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29     out complete)
46f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4700: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
4710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4720: 72 65 74 75 72 6e 20 28 53 51 4c 69 74 65 42 6c  return (SQLiteBl
4730: 6f 62 29 76 61 6c 75 65 2e 42 6c 6f 62 56 61 6c  ob)value.BlobVal
4740: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
4750: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
4760: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
4770: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
4780: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
4790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
47a0: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
47b0: 74 42 6c 6f 62 28 69 20 2d 20 50 72 69 76 61 74  tBlob(i - Privat
47c0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
47d0: 6e 74 2c 20 72 65 61 64 4f 6e 6c 79 29 3b 0d 0a  nt, readOnly);..
47e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
47f0: 20 53 51 4c 69 74 65 42 6c 6f 62 2e 43 72 65 61   SQLiteBlob.Crea
4800: 74 65 28 74 68 69 73 2c 20 69 2c 20 72 65 61 64  te(this, i, read
4810: 4f 6e 6c 79 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Only);..    }...
4820: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
4830: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  y>..    /// Retr
4840: 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  ieves the column
4850: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
4860: 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  lue..    /// </s
4870: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4880: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
4890: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
48a0: 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d  e column.</param
48b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
48c0: 72 6e 73 3e 62 6f 6f 6c 3c 2f 72 65 74 75 72 6e  rns>bool</return
48d0: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
48e0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 47 65 74  verride bool Get
48f0: 42 6f 6f 6c 65 61 6e 28 69 6e 74 20 69 29 0d 0a  Boolean(int i)..
4900: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
4910: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
4920: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46  .        VerifyF
4930: 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  orGet();....    
4940: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
4950: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
4960: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
4970: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
4980: 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69  llbacks) == SQLi
4990: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
49a0: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
49b0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
49c0: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
49d0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
49e0: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
49f0: 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c   value = new SQL
4a00: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
4a10: 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ue();..         
4a20: 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65     bool complete
4a30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4a40: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
4a50: 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20  Callback(i, new 
4a60: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45  SQLiteReadValueE
4a70: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
4a80: 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 42             "GetB
4a90: 6f 6f 6c 65 61 6e 22 2c 20 6e 75 6c 6c 2c 20 76  oolean", null, v
4aa0: 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c  alue), out compl
4ab0: 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ete);....       
4ac0: 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74       if (complet
4ad0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
4ae0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4af0: 20 20 20 69 66 20 28 76 61 6c 75 65 2e 42 6f 6f     if (value.Boo
4b00: 6c 65 61 6e 56 61 6c 75 65 20 3d 3d 20 6e 75 6c  leanValue == nul
4b10: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
4b20: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
4b30: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
4b40: 6e 28 22 6d 69 73 73 69 6e 67 20 62 6f 6f 6c 65  n("missing boole
4b50: 61 6e 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22  an return value"
4b60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4b70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 62 6f        return (bo
4b80: 6f 6c 29 76 61 6c 75 65 2e 42 6f 6f 6c 65 61 6e  ol)value.Boolean
4b90: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
4ba0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
4bb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
4bc0: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
4bd0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
4be0: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
4bf0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
4c00: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
4c10: 47 65 74 42 6f 6f 6c 65 61 6e 28 69 20 2d 20 50  GetBoolean(i - P
4c20: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
4c30: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
4c40: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
4c50: 69 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61  i, DbType.Boolea
4c60: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n);..        ret
4c70: 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42 6f  urn Convert.ToBo
4c80: 6f 6c 65 61 6e 28 47 65 74 56 61 6c 75 65 28 69  olean(GetValue(i
4c90: 29 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43  ), CultureInfo.C
4ca0: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 29 3b 0d  urrentCulture);.
4cb0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
4cc0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
4cd0: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
4ce0: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73  he column as a s
4cf0: 69 6e 67 6c 65 20 62 79 74 65 20 76 61 6c 75 65  ingle byte value
4d00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
4d10: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
4d20: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
4d30: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
4d40: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
4d50: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
4d60: 3e 62 79 74 65 3c 2f 72 65 74 75 72 6e 73 3e 0d  >byte</returns>.
4d70: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
4d80: 72 69 64 65 20 62 79 74 65 20 47 65 74 42 79 74  ride byte GetByt
4d90: 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  e(int i)..    {.
4da0: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
4db0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
4dc0: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
4dd0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
4de0: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
4df0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
4e00: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
4e10: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
4e20: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
4e30: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
4e40: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
4e50: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
4e60: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4e70: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
4e80: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
4e90: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
4ea0: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
4eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
4ec0: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
4ed0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
4ee0: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
4ef0: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
4f00: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
4f10: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
4f20: 20 20 20 20 20 22 47 65 74 42 79 74 65 22 2c 20       "GetByte", 
4f30: 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75  null, value), ou
4f40: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a  t complete);....
4f50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4f60: 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20  complete)..     
4f70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4f80: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
4f90: 6c 75 65 2e 42 79 74 65 56 61 6c 75 65 20 3d 3d  lue.ByteValue ==
4fa0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4fb0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
4fc0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
4fd0: 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 62  ption("missing b
4fe0: 79 74 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  yte return value
4ff0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
5000: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 62         return (b
5010: 79 74 65 29 76 61 6c 75 65 2e 42 79 74 65 56 61  yte)value.ByteVa
5020: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
5030: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
5040: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
5050: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
5060: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
5070: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
5080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
5090: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
50a0: 74 42 79 74 65 28 69 20 2d 20 50 72 69 76 61 74  tByte(i - Privat
50b0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
50c0: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
50d0: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
50e0: 54 79 70 65 2e 42 79 74 65 29 3b 0d 0a 20 20 20  Type.Byte);..   
50f0: 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
5100: 65 72 74 2e 54 6f 42 79 74 65 28 5f 61 63 74 69  ert.ToByte(_acti
5110: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
5120: 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74 69 76  .GetInt32(_activ
5130: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b  eStatement, i));
5140: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
5150: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
5160: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
5170: 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 61  a column as an a
5180: 72 72 61 79 20 6f 66 20 62 79 74 65 73 20 28 62  rray of bytes (b
5190: 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  lob)..    /// </
51a0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
51b0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
51c0: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
51d0: 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
51e0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
51f0: 61 6d 20 6e 61 6d 65 3d 22 66 69 65 6c 64 4f 66  am name="fieldOf
5200: 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62  fset">The zero-b
5210: 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68  ased index of wh
5220: 65 72 65 20 74 6f 20 62 65 67 69 6e 20 72 65 61  ere to begin rea
5230: 64 69 6e 67 20 74 68 65 20 64 61 74 61 3c 2f 70  ding the data</p
5240: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5250: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66  param name="buff
5260: 65 72 22 3e 54 68 65 20 62 75 66 66 65 72 20 74  er">The buffer t
5270: 6f 20 77 72 69 74 65 20 74 68 65 20 62 79 74 65  o write the byte
5280: 73 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e 0d 0a  s into</param>..
5290: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
52a0: 61 6d 65 3d 22 62 75 66 66 65 72 6f 66 66 73 65  ame="bufferoffse
52b0: 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65  t">The zero-base
52c0: 64 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65  d index of where
52d0: 20 74 6f 20 62 65 67 69 6e 20 77 72 69 74 69 6e   to begin writin
52e0: 67 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79  g into the array
52f0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
5300: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
5310: 65 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d 62 65  ength">The numbe
5320: 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72 65  r of bytes to re
5330: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a  trieve</param>..
5340: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
5350: 3e 54 68 65 20 61 63 74 75 61 6c 20 6e 75 6d 62  >The actual numb
5360: 65 72 20 6f 66 20 62 79 74 65 73 20 77 72 69 74  er of bytes writ
5370: 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 61 72 72  ten into the arr
5380: 61 79 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  ay</returns>..  
5390: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d    /// <remarks>.
53a0: 0a 20 20 20 20 2f 2f 2f 20 54 6f 20 64 65 74 65  .    /// To dete
53b0: 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72  rmine the number
53c0: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
53d0: 20 63 6f 6c 75 6d 6e 2c 20 70 61 73 73 20 61 20   column, pass a 
53e0: 6e 75 6c 6c 20 76 61 6c 75 65 20 66 6f 72 20 74  null value for t
53f0: 68 65 20 62 75 66 66 65 72 2e 20 20 54 68 65 20  he buffer.  The 
5400: 74 6f 74 61 6c 20 6c 65 6e 67 74 68 20 77 69 6c  total length wil
5410: 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a  l be returned...
5420: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
5430: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
5440: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
5450: 42 79 74 65 73 28 69 6e 74 20 69 2c 20 6c 6f 6e  Bytes(int i, lon
5460: 67 20 66 69 65 6c 64 4f 66 66 73 65 74 2c 20 62  g fieldOffset, b
5470: 79 74 65 5b 5d 20 62 75 66 66 65 72 2c 20 69 6e  yte[] buffer, in
5480: 74 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20  t bufferoffset, 
5490: 69 6e 74 20 6c 65 6e 67 74 68 29 0d 0a 20 20 20  int length)..   
54a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
54b0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
54c0: 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47        VerifyForG
54d0: 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  et();....       
54e0: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
54f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5500: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
5510: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
5520: 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43  acks) == SQLiteC
5530: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
5540: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
5550: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d  ValueCallbacks).
5560: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
5570: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 52 65          SQLiteRe
5580: 61 64 41 72 72 61 79 45 76 65 6e 74 41 72 67 73  adArrayEventArgs
5590: 20 65 76 65 6e 74 41 72 67 73 20 3d 20 6e 65 77   eventArgs = new
55a0: 20 53 51 4c 69 74 65 52 65 61 64 41 72 72 61 79   SQLiteReadArray
55b0: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
55c0: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 65 6c              fiel
55d0: 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c  dOffset, buffer,
55e0: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c   bufferoffset, l
55f0: 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20  ength);....     
5600: 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74         SQLiteDat
5610: 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c  aReaderValue val
5620: 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44  ue = new SQLiteD
5630: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29  ataReaderValue()
5640: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
5650: 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d  ool complete;...
5660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76  .            Inv
5670: 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  okeReadValueCall
5680: 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69  back(i, new SQLi
5690: 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74  teReadValueEvent
56a0: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
56b0: 20 20 20 20 20 20 20 22 47 65 74 42 79 74 65 73         "GetBytes
56c0: 22 2c 20 65 76 65 6e 74 41 72 67 73 2c 20 76 61  ", eventArgs, va
56d0: 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65  lue), out comple
56e0: 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
56f0: 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65      if (complete
5700: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5720: 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d    byte[] bytes =
5730: 20 76 61 6c 75 65 2e 42 79 74 65 73 56 61 6c 75   value.BytesValu
5740: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
5750: 20 20 20 20 20 20 69 66 20 28 62 79 74 65 73 20        if (bytes 
5760: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
5770: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66            {..#if
5780: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
5790: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
57a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57b0: 20 41 72 72 61 79 2e 43 6f 70 79 28 62 79 74 65   Array.Copy(byte
57c0: 73 2c 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  s, /* throw */..
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57e0: 20 20 20 20 20 20 20 20 65 76 65 6e 74 41 72 67          eventArg
57f0: 73 2e 44 61 74 61 4f 66 66 73 65 74 2c 20 65 76  s.DataOffset, ev
5800: 65 6e 74 41 72 67 73 2e 42 79 74 65 42 75 66 66  entArgs.ByteBuff
5810: 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76 65               eve
5830: 6e 74 41 72 67 73 2e 42 75 66 66 65 72 4f 66 66  ntArgs.BufferOff
5840: 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 4c  set, eventArgs.L
5850: 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ength);..#else..
5860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5870: 20 20 20 20 41 72 72 61 79 2e 43 6f 70 79 28 62      Array.Copy(b
5880: 79 74 65 73 2c 20 2f 2a 20 74 68 72 6f 77 20 2a  ytes, /* throw *
5890: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
58a0: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
58b0: 65 76 65 6e 74 41 72 67 73 2e 44 61 74 61 4f 66  eventArgs.DataOf
58c0: 66 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e  fset, eventArgs.
58d0: 42 79 74 65 42 75 66 66 65 72 2c 0d 0a 20 20 20  ByteBuffer,..   
58e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58f0: 20 20 20 20 20 65 76 65 6e 74 41 72 67 73 2e 42       eventArgs.B
5900: 75 66 66 65 72 4f 66 66 73 65 74 2c 20 65 76 65  ufferOffset, eve
5910: 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 29 3b 0d  ntArgs.Length);.
5920: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
5930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5940: 65 74 75 72 6e 20 65 76 65 6e 74 41 72 67 73 2e  eturn eventArgs.
5950: 4c 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20 20 20  Length;..       
5960: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5970: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
5980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5990: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
59a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
59b0: 2d 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  -1;..           
59c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
59d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
59e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
59f0: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
5a00: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
5a10: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
5a20: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
5a30: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
5a40: 47 65 74 42 79 74 65 73 28 69 20 2d 20 50 72 69  GetBytes(i - Pri
5a50: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
5a60: 43 6f 75 6e 74 2c 20 66 69 65 6c 64 4f 66 66 73  Count, fieldOffs
5a70: 65 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66  et, buffer, buff
5a80: 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68  eroffset, length
5a90: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65  );....        Ve
5aa0: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
5ab0: 70 65 2e 42 69 6e 61 72 79 29 3b 0d 0a 20 20 20  pe.Binary);..   
5ac0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
5ad0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
5ae0: 6c 2e 47 65 74 42 79 74 65 73 28 5f 61 63 74 69  l.GetBytes(_acti
5af0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20  veStatement, i, 
5b00: 28 69 6e 74 29 66 69 65 6c 64 4f 66 66 73 65 74  (int)fieldOffset
5b10: 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72  , buffer, buffer
5b20: 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b  offset, length);
5b30: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
5b40: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
5b50: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
5b60: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73 69  e column as a si
5b70: 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 0d 0a  ngle character..
5b80: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5b90: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
5ba0: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
5bb0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
5bc0: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
5bd0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 63    /// <returns>c
5be0: 68 61 72 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  har</returns>.. 
5bf0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
5c00: 64 65 20 63 68 61 72 20 47 65 74 43 68 61 72 28  de char GetChar(
5c10: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
5c20: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
5c30: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
5c40: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
5c50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
5c60: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
5c70: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5c80: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
5c90: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
5ca0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
5cb0: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
5cc0: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
5cd0: 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20  Callbacks)..    
5ce0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5cf0: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
5d00: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
5d10: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
5d20: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
5d30: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
5d40: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
5d50: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
5d60: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
5d70: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
5d80: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
5d90: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5da0: 20 20 20 22 47 65 74 43 68 61 72 22 2c 20 6e 75     "GetChar", nu
5db0: 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20  ll, value), out 
5dc0: 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20  complete);....  
5dd0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
5de0: 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20  mplete)..       
5df0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5e00: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
5e10: 65 2e 43 68 61 72 56 61 6c 75 65 20 3d 3d 20 6e  e.CharValue == n
5e20: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5e30: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
5e40: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
5e50: 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 63 68 61  ion("missing cha
5e60: 72 61 63 74 65 72 20 72 65 74 75 72 6e 20 76 61  racter return va
5e70: 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lue");....      
5e80: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5e90: 20 28 63 68 61 72 29 76 61 6c 75 65 2e 43 68 61   (char)value.Cha
5ea0: 72 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  rValue;..       
5eb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5ec0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
5ed0: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
5ee0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
5ef0: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
5f00: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5f10: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
5f20: 2e 47 65 74 43 68 61 72 28 69 20 2d 20 50 72 69  .GetChar(i - Pri
5f30: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
5f40: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
5f50: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
5f60: 20 44 62 54 79 70 65 2e 53 42 79 74 65 29 3b 0d   DbType.SByte);.
5f70: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
5f80: 43 6f 6e 76 65 72 74 2e 54 6f 43 68 61 72 28 5f  Convert.ToChar(_
5f90: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
5fa0: 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61  _sql.GetInt32(_a
5fb0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
5fc0: 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  i));..    }.... 
5fd0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5fe0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  ..    /// Retrie
5ff0: 76 65 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20  ves a column as 
6000: 61 6e 20 61 72 72 61 79 20 6f 66 20 63 68 61 72  an array of char
6010: 73 20 28 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f  s (blob)..    //
6020: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6030: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
6040: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
6050: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
6060: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
6070: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 65  <param name="fie
6080: 6c 64 6f 66 66 73 65 74 22 3e 54 68 65 20 7a 65  ldoffset">The ze
6090: 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f  ro-based index o
60a0: 66 20 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e  f where to begin
60b0: 20 72 65 61 64 69 6e 67 20 74 68 65 20 64 61 74   reading the dat
60c0: 61 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  a</param>..    /
60d0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
60e0: 62 75 66 66 65 72 22 3e 54 68 65 20 62 75 66 66  buffer">The buff
60f0: 65 72 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  er to write the 
6100: 63 68 61 72 61 63 74 65 72 73 20 69 6e 74 6f 3c  characters into<
6110: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
6120: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75   <param name="bu
6130: 66 66 65 72 6f 66 66 73 65 74 22 3e 54 68 65 20  fferoffset">The 
6140: 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78  zero-based index
6150: 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65 67   of where to beg
6160: 69 6e 20 77 72 69 74 69 6e 67 20 69 6e 74 6f 20  in writing into 
6170: 74 68 65 20 61 72 72 61 79 3c 2f 70 61 72 61 6d  the array</param
6180: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
6190: 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e  m name="length">
61a0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  The number of by
61b0: 74 65 73 20 74 6f 20 72 65 74 72 69 65 76 65 3c  tes to retrieve<
61c0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
61d0: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 61 63   <returns>The ac
61e0: 74 75 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63  tual number of c
61f0: 68 61 72 61 63 74 65 72 73 20 77 72 69 74 74 65  haracters writte
6200: 6e 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79  n into the array
6210: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
6220: 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20  /// <remarks>.. 
6230: 20 20 20 2f 2f 2f 20 54 6f 20 64 65 74 65 72 6d     /// To determ
6240: 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ine the number o
6250: 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  f characters in 
6260: 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 70 61 73 73  the column, pass
6270: 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20 66 6f   a null value fo
6280: 72 20 74 68 65 20 62 75 66 66 65 72 2e 20 20 54  r the buffer.  T
6290: 68 65 20 74 6f 74 61 6c 20 6c 65 6e 67 74 68 20  he total length 
62a0: 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64  will be returned
62b0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d  ...    /// </rem
62c0: 61 72 6b 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  arks>..    publi
62d0: 63 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  c override long 
62e0: 47 65 74 43 68 61 72 73 28 69 6e 74 20 69 2c 20  GetChars(int i, 
62f0: 6c 6f 6e 67 20 66 69 65 6c 64 6f 66 66 73 65 74  long fieldoffset
6300: 2c 20 63 68 61 72 5b 5d 20 62 75 66 66 65 72 2c  , char[] buffer,
6310: 20 69 6e 74 20 62 75 66 66 65 72 6f 66 66 73 65   int bufferoffse
6320: 74 2c 20 69 6e 74 20 6c 65 6e 67 74 68 29 0d 0a  t, int length)..
6330: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
6340: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
6350: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46  .        VerifyF
6360: 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  orGet();....    
6370: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
6380: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
6390: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
63a0: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
63b0: 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69  llbacks) == SQLi
63c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
63d0: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
63e0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
63f0: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
6400: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
6410: 65 52 65 61 64 41 72 72 61 79 45 76 65 6e 74 41  eReadArrayEventA
6420: 72 67 73 20 65 76 65 6e 74 41 72 67 73 20 3d 20  rgs eventArgs = 
6430: 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 41 72  new SQLiteReadAr
6440: 72 61 79 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  rayEventArgs(.. 
6450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
6460: 69 65 6c 64 6f 66 66 73 65 74 2c 20 62 75 66 66  ieldoffset, buff
6470: 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74  er, bufferoffset
6480: 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20  , length);....  
6490: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
64a0: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
64b0: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
64c0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
64d0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
64e0: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
64f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6500: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
6510: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
6520: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
6530: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
6540: 20 20 20 20 20 20 20 20 20 20 22 47 65 74 43 68            "GetCh
6550: 61 72 73 22 2c 20 65 76 65 6e 74 41 72 67 73 2c  ars", eventArgs,
6560: 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d   value), out com
6570: 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  plete);....     
6580: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c         if (compl
6590: 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ete)..          
65a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
65b0: 20 20 20 20 20 63 68 61 72 5b 5d 20 63 68 61 72       char[] char
65c0: 73 20 3d 20 76 61 6c 75 65 2e 43 68 61 72 73 56  s = value.CharsV
65d0: 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
65e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 68 61           if (cha
65f0: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6610: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
6620: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
6630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6640: 20 20 20 20 41 72 72 61 79 2e 43 6f 70 79 28 63      Array.Copy(c
6650: 68 61 72 73 2c 20 2f 2a 20 74 68 72 6f 77 20 2a  hars, /* throw *
6660: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
6670: 20 20 20 20 20 20 20 20 20 20 20 65 76 65 6e 74             event
6680: 41 72 67 73 2e 44 61 74 61 4f 66 66 73 65 74 2c  Args.DataOffset,
6690: 20 65 76 65 6e 74 41 72 67 73 2e 43 68 61 72 42   eventArgs.CharB
66a0: 75 66 66 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  uffer,..        
66b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66c0: 65 76 65 6e 74 41 72 67 73 2e 42 75 66 66 65 72  eventArgs.Buffer
66d0: 4f 66 66 73 65 74 2c 20 65 76 65 6e 74 41 72 67  Offset, eventArg
66e0: 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73  s.Length);..#els
66f0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
6700: 20 20 20 20 20 20 20 41 72 72 61 79 2e 43 6f 70         Array.Cop
6710: 79 28 63 68 61 72 73 2c 20 2f 2a 20 74 68 72 6f  y(chars, /* thro
6720: 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
6730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
6740: 6e 74 29 65 76 65 6e 74 41 72 67 73 2e 44 61 74  nt)eventArgs.Dat
6750: 61 4f 66 66 73 65 74 2c 20 65 76 65 6e 74 41 72  aOffset, eventAr
6760: 67 73 2e 43 68 61 72 42 75 66 66 65 72 2c 0d 0a  gs.CharBuffer,..
6770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6780: 20 20 20 20 20 20 20 20 65 76 65 6e 74 41 72 67          eventArg
6790: 73 2e 42 75 66 66 65 72 4f 66 66 73 65 74 2c 20  s.BufferOffset, 
67a0: 65 76 65 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68  eventArgs.Length
67b0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
67c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67d0: 20 20 72 65 74 75 72 6e 20 65 76 65 6e 74 41 72    return eventAr
67e0: 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 20 20 20 20  gs.Length;..    
67f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
6810: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
6820: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6830: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6840: 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20 20  rn -1;..        
6850: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6860: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6870: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
6880: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
6890: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
68a0: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
68b0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
68c0: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
68d0: 66 6f 2e 47 65 74 43 68 61 72 73 28 69 20 2d 20  fo.GetChars(i - 
68e0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
68f0: 65 6c 64 43 6f 75 6e 74 2c 20 66 69 65 6c 64 6f  eldCount, fieldo
6900: 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c 20 62  ffset, buffer, b
6910: 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e  ufferoffset, len
6920: 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gth);....       
6930: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
6940: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6950: 6c 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 65 78  lags.NoVerifyTex
6960: 74 41 66 66 69 6e 69 74 79 29 20 21 3d 20 53 51  tAffinity) != SQ
6970: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6980: 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 65 78 74  ags.NoVerifyText
6990: 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20  Affinity)..     
69a0: 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70         VerifyTyp
69b0: 65 28 69 2c 20 44 62 54 79 70 65 2e 53 74 72 69  e(i, DbType.Stri
69c0: 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ng);....        
69d0: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
69e0: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
69f0: 43 68 61 72 73 28 5f 61 63 74 69 76 65 53 74 61  Chars(_activeSta
6a00: 74 65 6d 65 6e 74 2c 20 69 2c 20 28 69 6e 74 29  tement, i, (int)
6a10: 66 69 65 6c 64 6f 66 66 73 65 74 2c 20 62 75 66  fieldoffset, buf
6a20: 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65  fer, bufferoffse
6a30: 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  t, length);..   
6a40: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
6a50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
6a60: 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20 6e   Retrieves the n
6a70: 61 6d 65 20 6f 66 20 74 68 65 20 62 61 63 6b 2d  ame of the back-
6a80: 65 6e 64 20 64 61 74 61 74 79 70 65 20 6f 66 20  end datatype of 
6a90: 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20  the column..    
6aa0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
6ab0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
6ac0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
6ad0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
6ae0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
6af0: 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e  / <returns>strin
6b00: 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  g</returns>..   
6b10: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
6b20: 20 73 74 72 69 6e 67 20 47 65 74 44 61 74 61 54   string GetDataT
6b30: 79 70 65 4e 61 6d 65 28 69 6e 74 20 69 29 0d 0a  ypeName(int i)..
6b40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
6b50: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
6b60: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
6b70: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
6b80: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
6b90: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
6ba0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
6bb0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
6bc0: 65 74 44 61 74 61 54 79 70 65 4e 61 6d 65 28 69  etDataTypeName(i
6bd0: 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c   - PrivateVisibl
6be0: 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d  eFieldCount);...
6bf0: 0a 20 20 20 20 20 20 20 20 54 79 70 65 41 66 66  .        TypeAff
6c00: 69 6e 69 74 79 20 61 66 66 69 6e 20 3d 20 54 79  inity affin = Ty
6c10: 70 65 41 66 66 69 6e 69 74 79 2e 55 6e 69 6e 69  peAffinity.Unini
6c20: 74 69 61 6c 69 7a 65 64 3b 0d 0a 20 20 20 20 20  tialized;..     
6c30: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
6c40: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
6c50: 43 6f 6c 75 6d 6e 54 79 70 65 28 5f 61 63 74 69  ColumnType(_acti
6c60: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20  veStatement, i, 
6c70: 72 65 66 20 61 66 66 69 6e 29 3b 0d 0a 20 20 20  ref affin);..   
6c80: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
6c90: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
6ca0: 20 52 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   Retrieve the co
6cb0: 6c 75 6d 6e 20 61 73 20 61 20 64 61 74 65 2f 74  lumn as a date/t
6cc0: 69 6d 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f  ime value..    /
6cd0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
6ce0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
6cf0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
6d00: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
6d10: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
6d20: 20 3c 72 65 74 75 72 6e 73 3e 44 61 74 65 54 69   <returns>DateTi
6d30: 6d 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  me</returns>..  
6d40: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
6d50: 65 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61  e DateTime GetDa
6d60: 74 65 54 69 6d 65 28 69 6e 74 20 69 29 0d 0a 20  teTime(int i).. 
6d70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
6d80: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
6d90: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
6da0: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
6db0: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
6dc0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6dd0: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
6de0: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
6df0: 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74  lbacks) == SQLit
6e00: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6e10: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
6e20: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
6e30: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6e40: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
6e50: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
6e60: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
6e70: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
6e80: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
6e90: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
6ea0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6eb0: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
6ec0: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
6ed0: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
6ee0: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
6ef0: 20 20 20 20 20 20 20 20 20 20 22 47 65 74 44 61            "GetDa
6f00: 74 65 54 69 6d 65 22 2c 20 6e 75 6c 6c 2c 20 76  teTime", null, v
6f10: 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c  alue), out compl
6f20: 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ete);....       
6f30: 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74       if (complet
6f40: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
6f50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6f60: 20 20 20 69 66 20 28 76 61 6c 75 65 2e 44 61 74     if (value.Dat
6f70: 65 54 69 6d 65 56 61 6c 75 65 20 3d 3d 20 6e 75  eTimeValue == nu
6f80: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
6f90: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
6fa0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
6fb0: 6f 6e 28 22 6d 69 73 73 69 6e 67 20 64 61 74 65  on("missing date
6fc0: 2f 74 69 6d 65 20 72 65 74 75 72 6e 20 76 61 6c  /time return val
6fd0: 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ue");....       
6fe0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6ff0: 28 44 61 74 65 54 69 6d 65 29 76 61 6c 75 65 2e  (DateTime)value.
7000: 44 61 74 65 54 69 6d 65 56 61 6c 75 65 3b 0d 0a  DateTimeValue;..
7010: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7020: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7030: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
7040: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
7050: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
7060: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
7070: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
7080: 6b 65 79 49 6e 66 6f 2e 47 65 74 44 61 74 65 54  keyInfo.GetDateT
7090: 69 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65 56  ime(i - PrivateV
70a0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
70b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65  );....        Ve
70c0: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
70d0: 70 65 2e 44 61 74 65 54 69 6d 65 29 3b 0d 0a 20  pe.DateTime);.. 
70e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
70f0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
7100: 73 71 6c 2e 47 65 74 44 61 74 65 54 69 6d 65 28  sql.GetDateTime(
7110: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
7120: 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  , i);..    }....
7130: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
7140: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
7150: 65 76 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  eve the column a
7160: 73 20 61 20 64 65 63 69 6d 61 6c 20 76 61 6c 75  s a decimal valu
7170: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
7180: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
7190: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
71a0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
71b0: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
71c0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
71d0: 73 3e 64 65 63 69 6d 61 6c 3c 2f 72 65 74 75 72  s>decimal</retur
71e0: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
71f0: 6f 76 65 72 72 69 64 65 20 64 65 63 69 6d 61 6c  override decimal
7200: 20 47 65 74 44 65 63 69 6d 61 6c 28 69 6e 74 20   GetDecimal(int 
7210: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
7220: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
7230: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
7240: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
7250: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
7260: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
7270: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
7280: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
7290: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
72a0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
72b0: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
72c0: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
72d0: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
72e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
72f0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
7300: 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77  alue value = new
7310: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
7320: 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20  rValue();..     
7330: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70         bool comp
7340: 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lete;....       
7350: 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56       InvokeReadV
7360: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20  alueCallback(i, 
7370: 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61  new SQLiteReadVa
7380: 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  lueEventArgs(.. 
7390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
73a0: 47 65 74 44 65 63 69 6d 61 6c 22 2c 20 6e 75 6c  GetDecimal", nul
73b0: 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63  l, value), out c
73c0: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
73d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
73e0: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
73f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7400: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
7410: 2e 44 65 63 69 6d 61 6c 56 61 6c 75 65 20 3d 3d  .DecimalValue ==
7420: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7430: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
7440: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
7450: 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 64  ption("missing d
7460: 65 63 69 6d 61 6c 20 72 65 74 75 72 6e 20 76 61  ecimal return va
7470: 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lue");....      
7480: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7490: 20 28 64 65 63 69 6d 61 6c 29 76 61 6c 75 65 2e   (decimal)value.
74a0: 44 65 63 69 6d 61 6c 56 61 6c 75 65 3b 0d 0a 20  DecimalValue;.. 
74b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
74c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
74d0: 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76     if (i >= Priv
74e0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
74f0: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
7500: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
7510: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
7520: 65 79 49 6e 66 6f 2e 47 65 74 44 65 63 69 6d 61  eyInfo.GetDecima
7530: 6c 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  l(i - PrivateVis
7540: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
7550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  ....        Veri
7560: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
7570: 2e 44 65 63 69 6d 61 6c 29 3b 0d 0a 20 20 20 20  .Decimal);..    
7580: 20 20 20 20 72 65 74 75 72 6e 20 44 65 63 69 6d      return Decim
7590: 61 6c 2e 50 61 72 73 65 28 5f 61 63 74 69 76 65  al.Parse(_active
75a0: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
75b0: 65 74 54 65 78 74 28 5f 61 63 74 69 76 65 53 74  etText(_activeSt
75c0: 61 74 65 6d 65 6e 74 2c 20 69 29 2c 20 4e 75 6d  atement, i), Num
75d0: 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f 77 44  berStyles.AllowD
75e0: 65 63 69 6d 61 6c 50 6f 69 6e 74 20 7c 20 4e 75  ecimalPoint | Nu
75f0: 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f 77  mberStyles.Allow
7600: 45 78 70 6f 6e 65 6e 74 20 7c 20 4e 75 6d 62 65  Exponent | Numbe
7610: 72 53 74 79 6c 65 73 2e 41 6c 6c 6f 77 4c 65 61  rStyles.AllowLea
7620: 64 69 6e 67 53 69 67 6e 2c 20 43 75 6c 74 75 72  dingSign, Cultur
7630: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
7640: 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 7d 0d  ulture);..    }.
7650: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
7660: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
7670: 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e  turns the column
7680: 20 61 73 20 61 20 64 6f 75 62 6c 65 0d 0a 20 20   as a double..  
7690: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
76a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
76b0: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
76c0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
76d0: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
76e0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 64 6f 75  /// <returns>dou
76f0: 62 6c 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ble</returns>.. 
7700: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
7710: 64 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75  de double GetDou
7720: 62 6c 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ble(int i)..    
7730: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
7740: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
7750: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
7760: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
7770: 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51  if ((_flags & SQ
7780: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7790: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
77a0: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
77b0: 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  cks) == SQLiteCo
77c0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
77d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
77e0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a  alueCallbacks)..
77f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7800: 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74         SQLiteDat
7810: 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c  aReaderValue val
7820: 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44  ue = new SQLiteD
7830: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29  ataReaderValue()
7840: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
7850: 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d  ool complete;...
7860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76  .            Inv
7870: 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  okeReadValueCall
7880: 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69  back(i, new SQLi
7890: 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74  teReadValueEvent
78a0: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
78b0: 20 20 20 20 20 20 20 22 47 65 74 44 6f 75 62 6c         "GetDoubl
78c0: 65 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29  e", null, value)
78d0: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
78e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
78f0: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
7900: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7920: 20 28 76 61 6c 75 65 2e 44 6f 75 62 6c 65 56 61   (value.DoubleVa
7930: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7950: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
7960: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73  teException("mis
7970: 73 69 6e 67 20 64 6f 75 62 6c 65 20 72 65 74 75  sing double retu
7980: 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  rn value");.... 
7990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
79a0: 65 74 75 72 6e 20 28 64 6f 75 62 6c 65 29 76 61  eturn (double)va
79b0: 6c 75 65 2e 44 6f 75 62 6c 65 56 61 6c 75 65 3b  lue.DoubleValue;
79c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
79d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
79e0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
79f0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
7a00: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
7a10: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
7a20: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7a30: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 6f 75   _keyInfo.GetDou
7a40: 62 6c 65 28 69 20 2d 20 50 72 69 76 61 74 65 56  ble(i - PrivateV
7a50: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
7a60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65  );....        Ve
7a70: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
7a80: 70 65 2e 44 6f 75 62 6c 65 29 3b 0d 0a 20 20 20  pe.Double);..   
7a90: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
7aa0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
7ab0: 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f 61 63 74  l.GetDouble(_act
7ac0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
7ad0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7ae0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
7af0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
7b00: 68 65 20 2e 4e 45 54 20 74 79 70 65 20 6f 66 20  he .NET type of 
7b10: 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 0d 0a  a given column..
7b20: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
7b30: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
7b40: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
7b50: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
7b60: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
7b70: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
7b80: 79 70 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ype</returns>.. 
7b90: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
7ba0: 64 65 20 54 79 70 65 20 47 65 74 46 69 65 6c 64  de Type GetField
7bb0: 54 79 70 65 28 69 6e 74 20 69 29 0d 0a 20 20 20  Type(int i)..   
7bc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
7bd0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
7be0: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
7bf0: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
7c00: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
7c10: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
7c30: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 46  rn _keyInfo.GetF
7c40: 69 65 6c 64 54 79 70 65 28 69 20 2d 20 50 72 69  ieldType(i - Pri
7c50: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
7c60: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
7c70: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
7c80: 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79  Convert.SQLiteTy
7c90: 70 65 54 6f 54 79 70 65 28 47 65 74 53 51 4c 69  peToType(GetSQLi
7ca0: 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 69  teType(_flags, i
7cb0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
7cc0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
7cd0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
7ce0: 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 66   a column as a f
7cf0: 6c 6f 61 74 20 76 61 6c 75 65 0d 0a 20 20 20 20  loat value..    
7d00: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
7d10: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
7d20: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
7d30: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
7d40: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
7d50: 2f 20 3c 72 65 74 75 72 6e 73 3e 66 6c 6f 61 74  / <returns>float
7d60: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
7d70: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
7d80: 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61 74 28 69  float GetFloat(i
7d90: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
7da0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
7db0: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
7dc0: 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d  VerifyForGet();.
7dd0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
7de0: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
7df0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
7e00: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
7e10: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20  ValueCallbacks) 
7e20: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
7e30: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
7e40: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
7e50: 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20  allbacks)..     
7e60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7e70: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
7e80: 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20  erValue value = 
7e90: 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65  new SQLiteDataRe
7ea0: 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20  aderValue();..  
7eb0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
7ec0: 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20  omplete;....    
7ed0: 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65          InvokeRe
7ee0: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28  adValueCallback(
7ef0: 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61  i, new SQLiteRea
7f00: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28  dValueEventArgs(
7f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7f20: 20 20 22 47 65 74 46 6c 6f 61 74 22 2c 20 6e 75    "GetFloat", nu
7f30: 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20  ll, value), out 
7f40: 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20  complete);....  
7f50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
7f60: 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20  mplete)..       
7f70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7f80: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
7f90: 65 2e 46 6c 6f 61 74 56 61 6c 75 65 20 3d 3d 20  e.FloatValue == 
7fa0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7fb0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
7fc0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
7fd0: 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 66 6c  tion("missing fl
7fe0: 6f 61 74 20 72 65 74 75 72 6e 20 76 61 6c 75 65  oat return value
7ff0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
8000: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 66         return (f
8010: 6c 6f 61 74 29 76 61 6c 75 65 2e 46 6c 6f 61 74  loat)value.Float
8020: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
8030: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
8040: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
8050: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
8060: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
8070: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
8080: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8090: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
80a0: 47 65 74 46 6c 6f 61 74 28 69 20 2d 20 50 72 69  GetFloat(i - Pri
80b0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
80c0: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
80d0: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
80e0: 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29 3b   DbType.Single);
80f0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
8100: 20 43 6f 6e 76 65 72 74 2e 54 6f 53 69 6e 67 6c   Convert.ToSingl
8110: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
8120: 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c  nt._sql.GetDoubl
8130: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
8140: 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d  nt, i));..    }.
8150: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
8160: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
8170: 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e  turns the column
8180: 20 61 73 20 61 20 47 75 69 64 0d 0a 20 20 20 20   as a Guid..    
8190: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
81a0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
81b0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
81c0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
81d0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
81e0: 2f 20 3c 72 65 74 75 72 6e 73 3e 47 75 69 64 3c  / <returns>Guid<
81f0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
8200: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 47  ublic override G
8210: 75 69 64 20 47 65 74 47 75 69 64 28 69 6e 74 20  uid GetGuid(int 
8220: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
8230: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
8240: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
8250: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
8260: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
8270: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
8280: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
8290: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
82a0: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
82b0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
82c0: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
82d0: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
82e0: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
82f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
8300: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
8310: 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77  alue value = new
8320: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
8330: 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20  rValue();..     
8340: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70         bool comp
8350: 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lete;....       
8360: 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56       InvokeReadV
8370: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20  alueCallback(i, 
8380: 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61  new SQLiteReadVa
8390: 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  lueEventArgs(.. 
83a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
83b0: 47 65 74 47 75 69 64 22 2c 20 6e 75 6c 6c 2c 20  GetGuid", null, 
83c0: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
83d0: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
83e0: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
83f0: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
8400: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8410: 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 47 75      if (value.Gu
8420: 69 64 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29  idValue == null)
8430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8440: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
8450: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
8460: 22 6d 69 73 73 69 6e 67 20 67 75 69 64 20 72 65  "missing guid re
8470: 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d  turn value");...
8480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8490: 20 72 65 74 75 72 6e 20 28 47 75 69 64 29 76 61   return (Guid)va
84a0: 6c 75 65 2e 47 75 69 64 56 61 6c 75 65 3b 0d 0a  lue.GuidValue;..
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
84c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
84d0: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
84e0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
84f0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
8500: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
8510: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
8520: 6b 65 79 49 6e 66 6f 2e 47 65 74 47 75 69 64 28  keyInfo.GetGuid(
8530: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
8540: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
8550: 0d 0a 20 20 20 20 20 20 20 20 54 79 70 65 41 66  ..        TypeAf
8560: 66 69 6e 69 74 79 20 61 66 66 69 6e 69 74 79 20  finity affinity 
8570: 3d 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20  = VerifyType(i, 
8580: 44 62 54 79 70 65 2e 47 75 69 64 29 3b 0d 0a 20  DbType.Guid);.. 
8590: 20 20 20 20 20 20 20 69 66 20 28 61 66 66 69 6e         if (affin
85a0: 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ity == TypeAffin
85b0: 69 74 79 2e 42 6c 6f 62 29 0d 0a 20 20 20 20 20  ity.Blob)..     
85c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
85d0: 20 20 62 79 74 65 5b 5d 20 62 75 66 66 65 72 20    byte[] buffer 
85e0: 3d 20 6e 65 77 20 62 79 74 65 5b 31 36 5d 3b 0d  = new byte[16];.
85f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 61 63  .            _ac
8600: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
8610: 71 6c 2e 47 65 74 42 79 74 65 73 28 5f 61 63 74  ql.GetBytes(_act
8620: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c  iveStatement, i,
8630: 20 30 2c 20 62 75 66 66 65 72 2c 20 30 2c 20 31   0, buffer, 0, 1
8640: 36 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  6);..           
8650: 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64   return new Guid
8660: 28 62 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20  (buffer);..     
8670: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
8680: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
8690: 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28  return new Guid(
86a0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
86b0: 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61  ._sql.GetText(_a
86c0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
86d0: 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  i));..    }.... 
86e0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
86f0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
8700: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
8710: 61 20 73 68 6f 72 74 0d 0a 20 20 20 20 2f 2f 2f  a short..    ///
8720: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8730: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
8740: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
8750: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
8760: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
8770: 72 65 74 75 72 6e 73 3e 49 6e 74 31 36 3c 2f 72  returns>Int16</r
8780: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
8790: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74  lic override Int
87a0: 31 36 20 47 65 74 49 6e 74 31 36 28 69 6e 74 20  16 GetInt16(int 
87b0: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
87c0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
87d0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
87e0: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
87f0: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
8800: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
8810: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
8820: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
8830: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
8840: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8850: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
8860: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
8870: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
8880: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
8890: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
88a0: 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77  alue value = new
88b0: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
88c0: 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20  rValue();..     
88d0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70         bool comp
88e0: 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lete;....       
88f0: 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56       InvokeReadV
8900: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20  alueCallback(i, 
8910: 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61  new SQLiteReadVa
8920: 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  lueEventArgs(.. 
8930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
8940: 47 65 74 49 6e 74 31 36 22 2c 20 6e 75 6c 6c 2c  GetInt16", null,
8950: 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d   value), out com
8960: 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  plete);....     
8970: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c         if (compl
8980: 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ete)..          
8990: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
89a0: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 49       if (value.I
89b0: 6e 74 31 36 56 61 6c 75 65 20 3d 3d 20 6e 75 6c  nt16Value == nul
89c0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
89d0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
89e0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
89f0: 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 31 36  n("missing int16
8a00: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b   return value");
8a10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8a20: 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74 31      return (Int1
8a30: 36 29 76 61 6c 75 65 2e 49 6e 74 31 36 56 61 6c  6)value.Int16Val
8a40: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
8a50: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
8a60: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
8a70: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
8a80: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
8a90: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
8aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
8ab0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
8ac0: 49 6e 74 31 36 28 69 20 2d 20 50 72 69 76 61 74  Int16(i - Privat
8ad0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
8ae0: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
8af0: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
8b00: 54 79 70 65 2e 49 6e 74 31 36 29 3b 0d 0a 20 20  Type.Int16);..  
8b10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e        return Con
8b20: 76 65 72 74 2e 54 6f 49 6e 74 31 36 28 5f 61 63  vert.ToInt16(_ac
8b30: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
8b40: 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74  ql.GetInt32(_act
8b50: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
8b60: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
8b70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8b80: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
8b90: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
8ba0: 61 6e 20 69 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20  an int..    /// 
8bb0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8bc0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
8bd0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
8be0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
8bf0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
8c00: 65 74 75 72 6e 73 3e 49 6e 74 33 32 3c 2f 72 65  eturns>Int32</re
8c10: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
8c20: 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 33  ic override Int3
8c30: 32 20 47 65 74 49 6e 74 33 32 28 69 6e 74 20 69  2 GetInt32(int i
8c40: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8c50: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
8c60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
8c70: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
8c80: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
8c90: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
8ca0: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
8cb0: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
8cc0: 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53  eCallbacks) == S
8cd0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8ce0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
8cf0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
8d00: 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  acks)..        {
8d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
8d20: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
8d30: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
8d40: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
8d50: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
8d60: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
8d70: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
8d80: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
8d90: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
8da0: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
8db0: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
8dd0: 65 74 49 6e 74 33 32 22 2c 20 6e 75 6c 6c 2c 20  etInt32", null, 
8de0: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
8df0: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
8e00: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
8e10: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
8e20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8e30: 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 49 6e      if (value.In
8e40: 74 33 32 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  t32Value == null
8e50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8e60: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
8e70: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
8e80: 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 33 32 20  ("missing int32 
8e90: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
8ea0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8eb0: 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74 33 32     return (Int32
8ec0: 29 76 61 6c 75 65 2e 49 6e 74 33 32 56 61 6c 75  )value.Int32Valu
8ed0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
8ee0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
8ef0: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
8f00: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
8f10: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
8f20: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
8f30: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8f40: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49  rn _keyInfo.GetI
8f50: 6e 74 33 32 28 69 20 2d 20 50 72 69 76 61 74 65  nt32(i - Private
8f60: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
8f70: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56  t);....        V
8f80: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
8f90: 79 70 65 2e 49 6e 74 33 32 29 3b 0d 0a 20 20 20  ype.Int32);..   
8fa0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
8fb0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
8fc0: 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74 69  l.GetInt32(_acti
8fd0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
8fe0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
8ff0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
9000: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
9010: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
9020: 6c 6f 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  long..    /// </
9030: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
9040: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
9050: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
9060: 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
9070: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
9080: 75 72 6e 73 3e 49 6e 74 36 34 3c 2f 72 65 74 75  urns>Int64</retu
9090: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
90a0: 20 6f 76 65 72 72 69 64 65 20 49 6e 74 36 34 20   override Int64 
90b0: 47 65 74 49 6e 74 36 34 28 69 6e 74 20 69 29 0d  GetInt64(int i).
90c0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
90d0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
90e0: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
90f0: 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  ForGet();....   
9100: 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73       if ((_flags
9110: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
9120: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
9130: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
9140: 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c  allbacks) == SQL
9150: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9160: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
9170: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
9180: 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ks)..        {..
9190: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
91a0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
91b0: 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51  e value = new SQ
91c0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
91d0: 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue();..        
91e0: 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74      bool complet
91f0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
9200: 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75    InvokeReadValu
9210: 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77  eCallback(i, new
9220: 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65   SQLiteReadValue
9230: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
9240: 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74              "Get
9250: 49 6e 74 36 34 22 2c 20 6e 75 6c 6c 2c 20 76 61  Int64", null, va
9260: 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65  lue), out comple
9270: 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
9280: 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65      if (complete
9290: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
92a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
92b0: 20 20 69 66 20 28 76 61 6c 75 65 2e 49 6e 74 36    if (value.Int6
92c0: 34 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  4Value == null).
92d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
92e0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
92f0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
9300: 6d 69 73 73 69 6e 67 20 69 6e 74 36 34 20 72 65  missing int64 re
9310: 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d  turn value");...
9320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9330: 20 72 65 74 75 72 6e 20 28 49 6e 74 36 34 29 76   return (Int64)v
9340: 61 6c 75 65 2e 49 6e 74 36 34 56 61 6c 75 65 3b  alue.Int64Value;
9350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9360: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
9370: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
9380: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
9390: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
93a0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
93b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
93c0: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49 6e 74   _keyInfo.GetInt
93d0: 36 34 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  64(i - PrivateVi
93e0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
93f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ;....        Ver
9400: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
9410: 65 2e 49 6e 74 36 34 29 3b 0d 0a 20 20 20 20 20  e.Int64);..     
9420: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
9430: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
9440: 47 65 74 49 6e 74 36 34 28 5f 61 63 74 69 76 65  GetInt64(_active
9450: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a  Statement, i);..
9460: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
9470: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
9480: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
9490: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  e name of the co
94a0: 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  lumn..    /// </
94b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
94c0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
94d0: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
94e0: 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
94f0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
9500: 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74  urns>string</ret
9510: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
9520: 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  c override strin
9530: 67 20 47 65 74 4e 61 6d 65 28 69 6e 74 20 69 29  g GetName(int i)
9540: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
9550: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9560: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
9570: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
9580: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
9590: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
95a0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
95b0: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
95c0: 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50 72 69  .GetName(i - Pri
95d0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
95e0: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
95f0: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
9600: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
9610: 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63 74 69  ColumnName(_acti
9620: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
9630: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
9640: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
9650: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
9660: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61  e name of the da
9670: 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65  tabase associate
9680: 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  d with the speci
9690: 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20  fied column...  
96a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
96b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
96c0: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
96d0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
96e0: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
96f0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72  /// <returns>str
9700: 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ing</returns>.. 
9710: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
9720: 20 47 65 74 44 61 74 61 62 61 73 65 4e 61 6d 65   GetDatabaseName
9730: 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
9740: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
9750: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
9760: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
9770: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
9780: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
9790: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
97a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
97b0: 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d 65 28  keyInfo.GetName(
97c0: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
97d0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
97e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
97f0: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
9800: 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 44 61 74  t._sql.ColumnDat
9810: 61 62 61 73 65 4e 61 6d 65 28 5f 61 63 74 69 76  abaseName(_activ
9820: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d  eStatement, i);.
9830: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
9840: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
9850: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
9860: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
9870: 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  le associated wi
9880: 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
9890: 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f   column...    //
98a0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
98b0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
98c0: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
98d0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
98e0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
98f0: 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c  <returns>string<
9900: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
9910: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74  ublic string Get
9920: 54 61 62 6c 65 4e 61 6d 65 28 69 6e 74 20 69 29  TableName(int i)
9930: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
9940: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9950: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
9960: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
9970: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
9980: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
9990: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
99a0: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
99b0: 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50 72 69  .GetName(i - Pri
99c0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
99d0: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
99e0: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
99f0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
9a00: 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28  ColumnTableName(
9a10: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
9a20: 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  , i);..    }....
9a30: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9a40: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
9a50: 6e 73 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  ns the original 
9a60: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 70 65 63  name of the spec
9a70: 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20  ified column... 
9a80: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9a90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
9aa0: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
9ab0: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
9ac0: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
9ad0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74   /// <returns>st
9ae0: 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ring</returns>..
9af0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
9b00: 67 20 47 65 74 4f 72 69 67 69 6e 61 6c 4e 61 6d  g GetOriginalNam
9b10: 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  e(int i)..    {.
9b20: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
9b30: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
9b40: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
9b50: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
9b60: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
9b70: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
9b80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9b90: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d 65  _keyInfo.GetName
9ba0: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
9bb0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d  bleFieldCount);.
9bc0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
9bd0: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
9be0: 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4f 72  nt._sql.ColumnOr
9bf0: 69 67 69 6e 61 6c 4e 61 6d 65 28 5f 61 63 74 69  iginalName(_acti
9c00: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
9c10: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
9c20: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
9c30: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
9c40: 74 68 65 20 69 20 6f 66 20 61 20 63 6f 6c 75 6d  the i of a colum
9c50: 6e 2c 20 67 69 76 65 6e 20 69 74 73 20 6e 61 6d  n, given its nam
9c60: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
9c70: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
9c80: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65  param name="name
9c90: 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  ">The name of th
9ca0: 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72  e column to retr
9cb0: 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ieve</param>..  
9cc0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
9cd0: 68 65 20 69 6e 74 20 69 20 6f 66 20 74 68 65 20  he int i of the 
9ce0: 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e  column</returns>
9cf0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
9d00: 72 72 69 64 65 20 69 6e 74 20 47 65 74 4f 72 64  rride int GetOrd
9d10: 69 6e 61 6c 28 73 74 72 69 6e 67 20 6e 61 6d 65  inal(string name
9d20: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9d30: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9d40: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 74  ....      if (_t
9d50: 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29 20  hrowOnDisposed) 
9d60: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43 68  SQLiteCommand.Ch
9d70: 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d 0a  eck(_command);..
9d80: 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20  ..      //..    
9d90: 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 72 73 74    // NOTE: First
9da0: 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 63  , check if the c
9db0: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 63 68 65  olumn name cache
9dc0: 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61   has been initia
9dd0: 6c 69 7a 65 64 20 79 65 74 2e 0d 0a 20 20 20 20  lized yet...    
9de0: 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20 6e 6f    //       If no
9df0: 74 2c 20 64 6f 20 69 74 20 6e 6f 77 2e 0d 0a 20  t, do it now... 
9e00: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69       //..      i
9e10: 66 20 28 5f 66 69 65 6c 64 49 6e 64 65 78 65 73  f (_fieldIndexes
9e20: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
9e30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 66   {..          _f
9e40: 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20 6e 65  ieldIndexes = ne
9e50: 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72  w Dictionary<str
9e60: 69 6e 67 2c 20 69 6e 74 3e 28 0d 0a 20 20 20 20  ing, int>(..    
9e70: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
9e80: 43 6f 6d 70 61 72 65 72 2e 4f 72 64 69 6e 61 6c  Comparer.Ordinal
9e90: 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 20 20  IgnoreCase);..  
9ea0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f      }....      /
9eb0: 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  /..      // NOTE
9ec0: 3a 20 4e 65 78 74 2c 20 73 65 65 20 69 66 20 74  : Next, see if t
9ed0: 68 65 20 69 6e 64 65 78 20 66 6f 72 20 74 68 65  he index for the
9ee0: 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c 75 6d   requested colum
9ef0: 6e 20 6e 61 6d 65 20 68 61 73 20 62 65 65 6e 0d  n name has been.
9f00: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
9f10: 63 61 63 68 65 64 20 61 6c 72 65 61 64 79 2e 20  cached already. 
9f20: 20 49 66 20 73 6f 2c 20 72 65 74 75 72 6e 20 74   If so, return t
9f30: 68 65 20 63 61 63 68 65 64 20 76 61 6c 75 65 2e  he cached value.
9f40: 20 20 4f 74 68 65 72 77 69 73 65 2c 0d 0a 20 20    Otherwise,..  
9f50: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 6f 6f      //       loo
9f60: 6b 75 70 20 74 68 65 20 76 61 6c 75 65 20 61 6e  kup the value an
9f70: 64 20 74 68 65 6e 20 63 61 63 68 65 20 74 68 65  d then cache the
9f80: 20 72 65 73 75 6c 74 20 66 6f 72 20 66 75 74 75   result for futu
9f90: 72 65 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 2f  re use...      /
9fa0: 2f 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 3b 0d  /..      int r;.
9fb0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 21 5f 66  ...      if (!_f
9fc0: 69 65 6c 64 49 6e 64 65 78 65 73 2e 54 72 79 47  ieldIndexes.TryG
9fd0: 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 6f 75  etValue(name, ou
9fe0: 74 20 72 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  t r))..      {..
9ff0: 20 20 20 20 20 20 20 20 20 20 72 20 3d 20 5f 61            r = _a
a000: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
a010: 73 71 6c 2e 43 6f 6c 75 6d 6e 49 6e 64 65 78 28  sql.ColumnIndex(
a020: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
a030: 2c 20 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  , name);....    
a040: 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d 20 2d        if (r == -
a050: 31 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  1 && _keyInfo !=
a060: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
a070: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a080: 20 20 20 72 20 3d 20 5f 6b 65 79 49 6e 66 6f 2e     r = _keyInfo.
a090: 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d 65 29  GetOrdinal(name)
a0a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a0b0: 20 69 66 20 28 72 20 3e 20 2d 31 29 20 72 20 2b   if (r > -1) r +
a0c0: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
a0d0: 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20  FieldCount;..   
a0e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a0f0: 20 20 20 20 20 20 5f 66 69 65 6c 64 49 6e 64 65        _fieldInde
a100: 78 65 73 2e 41 64 64 28 6e 61 6d 65 2c 20 72 29  xes.Add(name, r)
a110: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
a120: 20 20 20 20 72 65 74 75 72 6e 20 72 3b 0d 0a 20      return r;.. 
a130: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
a140: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
a150: 2f 2f 20 53 63 68 65 6d 61 20 69 6e 66 6f 72 6d  // Schema inform
a160: 61 74 69 6f 6e 20 69 6e 20 53 51 4c 69 74 65 20  ation in SQLite 
a170: 69 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20  is difficult to 
a180: 6d 61 70 20 69 6e 74 6f 20 2e 4e 45 54 20 63 6f  map into .NET co
a190: 6e 76 65 6e 74 69 6f 6e 73 2c 20 73 6f 20 61 20  nventions, so a 
a1a0: 6c 6f 74 20 6f 66 20 77 6f 72 6b 20 6d 75 73 74  lot of work must
a1b0: 20 62 65 20 64 6f 6e 65 0d 0a 20 20 20 20 2f 2f   be done..    //
a1c0: 2f 20 74 6f 20 67 61 74 68 65 72 20 74 68 65 20  / to gather the 
a1d0: 6e 65 63 65 73 73 61 72 79 20 69 6e 66 6f 72 6d  necessary inform
a1e0: 61 74 69 6f 6e 20 73 6f 20 69 74 20 63 61 6e 20  ation so it can 
a1f0: 62 65 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  be represented i
a200: 6e 20 61 6e 20 41 44 4f 2e 4e 45 54 20 6d 61 6e  n an ADO.NET man
a210: 6e 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ner...    /// </
a220: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
a230: 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
a240: 6e 73 20 61 20 44 61 74 61 54 61 62 6c 65 20 63  ns a DataTable c
a250: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73 63  ontaining the sc
a260: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
a270: 20 66 6f 72 20 74 68 65 20 61 63 74 69 76 65 20   for the active 
a280: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
a290: 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73 65 64   being processed
a2a0: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
a2b0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
a2c0: 20 44 61 74 61 54 61 62 6c 65 20 47 65 74 53 63   DataTable GetSc
a2d0: 68 65 6d 61 54 61 62 6c 65 28 29 0d 0a 20 20 20  hemaTable()..   
a2e0: 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44   {..      CheckD
a2f0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
a300: 20 20 72 65 74 75 72 6e 20 47 65 74 53 63 68 65    return GetSche
a310: 6d 61 54 61 62 6c 65 28 74 72 75 65 2c 20 66 61  maTable(true, fa
a320: 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lse);..    }....
a330: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a380: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 43  ...    #region C
a390: 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 43 6c 61 73  olumnParent Clas
a3a0: 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  s..    private s
a3b0: 65 61 6c 65 64 20 63 6c 61 73 73 20 43 6f 6c 75  ealed class Colu
a3c0: 6d 6e 50 61 72 65 6e 74 20 3a 20 49 45 71 75 61  mnParent : IEqua
a3d0: 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 43 6f 6c  lityComparer<Col
a3e0: 75 6d 6e 50 61 72 65 6e 74 3e 0d 0a 20 20 20 20  umnParent>..    
a3f0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
a400: 6f 6e 20 50 75 62 6c 69 63 20 46 69 65 6c 64 73  on Public Fields
a410: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
a420: 20 73 74 72 69 6e 67 20 44 61 74 61 62 61 73 65   string Database
a430: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 70  Name;..        p
a440: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54 61 62  ublic string Tab
a450: 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
a460: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43   public string C
a470: 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20  olumnName;..    
a480: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
a490: 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
a4f0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
a500: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
a510: 20 20 70 75 62 6c 69 63 20 43 6f 6c 75 6d 6e 50    public ColumnP
a520: 61 72 65 6e 74 28 29 0d 0a 20 20 20 20 20 20 20  arent()..       
a530: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a540: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
a550: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a560: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a5b0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 43          public C
a5c0: 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 0d 0a 20 20  olumnParent(..  
a5d0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
a5e0: 20 64 61 74 61 62 61 73 65 4e 61 6d 65 2c 0d 0a   databaseName,..
a5f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
a600: 6e 67 20 74 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20  ng tableName,.. 
a610: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
a620: 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 0d 0a 20 20  g columnName..  
a630: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
a640: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
a650: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
a660: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 44            this.D
a670: 61 74 61 62 61 73 65 4e 61 6d 65 20 3d 20 64 61  atabaseName = da
a680: 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20 20 20  tabaseName;..   
a690: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 54 61           this.Ta
a6a0: 62 6c 65 4e 61 6d 65 20 3d 20 74 61 62 6c 65 4e  bleName = tableN
a6b0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
a6c0: 20 20 74 68 69 73 2e 43 6f 6c 75 6d 6e 4e 61 6d    this.ColumnNam
a6d0: 65 20 3d 20 63 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d  e = columnName;.
a6e0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
a6f0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
a700: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
a710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
a760: 67 69 6f 6e 20 49 45 71 75 61 6c 69 74 79 43 6f  gion IEqualityCo
a770: 6d 70 61 72 65 72 3c 43 6f 6c 75 6d 6e 50 61 72  mparer<ColumnPar
a780: 65 6e 74 3e 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ent> Members..  
a790: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
a7a0: 6c 20 45 71 75 61 6c 73 28 43 6f 6c 75 6d 6e 50  l Equals(ColumnP
a7b0: 61 72 65 6e 74 20 78 2c 20 43 6f 6c 75 6d 6e 50  arent x, ColumnP
a7c0: 61 72 65 6e 74 20 79 29 0d 0a 20 20 20 20 20 20  arent y)..      
a7d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a7e0: 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29   if ((x == null)
a7f0: 20 26 26 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29   && (y == null))
a800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a820: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
a830: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a840: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
a850: 66 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c  f ((x == null) |
a860: 7c 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  | (y == null))..
a870: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
a890: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
a8a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
a8b0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
a8c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a8e0: 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
a8f0: 28 78 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 2c  (x.DatabaseName,
a900: 20 79 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 2c   y.DatabaseName,
a910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a920: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
a930: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
a940: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a  alIgnoreCase))..
a950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a960: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a970: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
a980: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
a990: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a9a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
a9b0: 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 78 2e  String.Equals(x.
a9c0: 54 61 62 6c 65 4e 61 6d 65 2c 20 79 2e 54 61 62  TableName, y.Tab
a9d0: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
a9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9f0: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
aa00: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
aa10: 61 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ase))..         
aa20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
aa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
aa40: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
aa60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aa70: 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71    if (!String.Eq
aa80: 75 61 6c 73 28 78 2e 43 6f 6c 75 6d 6e 4e 61 6d  uals(x.ColumnNam
aa90: 65 2c 20 79 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  e, y.ColumnName,
aaa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aab0: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
aac0: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
aad0: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a  alIgnoreCase))..
aae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aaf0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ab00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
ab10: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
ab20: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ab30: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
ab40: 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
ab50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
ab60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
ab70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abb0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
abc0: 70 75 62 6c 69 63 20 69 6e 74 20 47 65 74 48 61  public int GetHa
abd0: 73 68 43 6f 64 65 28 43 6f 6c 75 6d 6e 50 61 72  shCode(ColumnPar
abe0: 65 6e 74 20 6f 62 6a 29 0d 0a 20 20 20 20 20 20  ent obj)..      
abf0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ac00: 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 30 3b   int result = 0;
ac10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ac20: 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c  if ((obj != null
ac30: 29 20 26 26 20 28 6f 62 6a 2e 44 61 74 61 62 61  ) && (obj.Databa
ac40: 73 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29  seName != null))
ac50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ac60: 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e    result ^= obj.
ac70: 44 61 74 61 62 61 73 65 4e 61 6d 65 2e 47 65 74  DatabaseName.Get
ac80: 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20  HashCode();.... 
ac90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
aca0: 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20  obj != null) && 
acb0: 28 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d 65 20 21  (obj.TableName !
acc0: 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
acd0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
ace0: 20 5e 3d 20 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d   ^= obj.TableNam
acf0: 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28 29 3b  e.GetHashCode();
ad00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ad10: 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c  if ((obj != null
ad20: 29 20 26 26 20 28 6f 62 6a 2e 43 6f 6c 75 6d 6e  ) && (obj.Column
ad30: 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a  Name != null))..
ad40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad50: 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e 43 6f  result ^= obj.Co
ad60: 6c 75 6d 6e 4e 61 6d 65 2e 47 65 74 48 61 73 68  lumnName.GetHash
ad70: 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Code();....     
ad80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
ad90: 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
ada0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
adb0: 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
adc0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
add0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ade0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
ae20: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
ae30: 61 74 69 63 20 76 6f 69 64 20 47 65 74 53 74 61  atic void GetSta
ae40: 74 65 6d 65 6e 74 43 6f 6c 75 6d 6e 50 61 72 65  tementColumnPare
ae50: 6e 74 73 28 0d 0a 20 20 20 20 20 20 20 20 53 51  nts(..        SQ
ae60: 4c 69 74 65 42 61 73 65 20 73 71 6c 2c 0d 0a 20  LiteBase sql,.. 
ae70: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
ae80: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 0d 0a 20 20  tement stmt,..  
ae90: 20 20 20 20 20 20 69 6e 74 20 66 69 65 6c 64 43        int fieldC
aea0: 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 72  ount,..        r
aeb0: 65 66 20 44 69 63 74 69 6f 6e 61 72 79 3c 43 6f  ef Dictionary<Co
aec0: 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73 74  lumnParent, List
aed0: 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54 6f 43  <int>> parentToC
aee0: 6f 6c 75 6d 6e 73 2c 0d 0a 20 20 20 20 20 20 20  olumns,..       
aef0: 20 72 65 66 20 44 69 63 74 69 6f 6e 61 72 79 3c   ref Dictionary<
af00: 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e  int, ColumnParen
af10: 74 3e 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e  t> columnToParen
af20: 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  t..        )..  
af30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
af40: 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73  (parentToColumns
af50: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
af60: 20 20 20 20 20 20 20 70 61 72 65 6e 74 54 6f 43         parentToC
af70: 6f 6c 75 6d 6e 73 20 3d 20 6e 65 77 20 44 69 63  olumns = new Dic
af80: 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61  tionary<ColumnPa
af90: 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e  rent, List<int>>
afa0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
afb0: 20 20 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61 72     new ColumnPar
afc0: 65 6e 74 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ent());....     
afd0: 20 20 20 69 66 20 28 63 6f 6c 75 6d 6e 54 6f 50     if (columnToP
afe0: 61 72 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  arent == null)..
aff0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 75              colu
b000: 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 20 6e 65 77  mnToParent = new
b010: 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74 2c   Dictionary<int,
b020: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 28 29   ColumnParent>()
b030: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  ;....        for
b040: 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
b050: 20 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b   fieldCount; n++
b060: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
b070: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
b080: 20 64 61 74 61 62 61 73 65 4e 61 6d 65 20 3d 20   databaseName = 
b090: 73 71 6c 2e 43 6f 6c 75 6d 6e 44 61 74 61 62 61  sql.ColumnDataba
b0a0: 73 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b  seName(stmt, n);
b0b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
b0c0: 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 20 3d  ring tableName =
b0d0: 20 73 71 6c 2e 43 6f 6c 75 6d 6e 54 61 62 6c 65   sql.ColumnTable
b0e0: 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a  Name(stmt, n);..
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
b100: 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 20 3d 20  ng columnName = 
b110: 73 71 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e  sql.ColumnOrigin
b120: 61 6c 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b  alName(stmt, n);
b130: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b140: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6b 65 79  ColumnParent key
b150: 20 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61 72   = new ColumnPar
b160: 65 6e 74 28 64 61 74 61 62 61 73 65 4e 61 6d 65  ent(databaseName
b170: 2c 20 74 61 62 6c 65 4e 61 6d 65 2c 20 6e 75 6c  , tableName, nul
b180: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l);..           
b190: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 76 61   ColumnParent va
b1a0: 6c 75 65 20 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e  lue = new Column
b1b0: 50 61 72 65 6e 74 28 64 61 74 61 62 61 73 65 4e  Parent(databaseN
b1c0: 61 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65 2c 20  ame, tableName, 
b1d0: 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0d 0a 0d 0a  columnName);....
b1e0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 69 73 74              List
b1f0: 3c 69 6e 74 3e 20 69 6e 64 65 78 4c 69 73 74 3b  <int> indexList;
b200: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b210: 69 66 20 28 21 70 61 72 65 6e 74 54 6f 43 6f 6c  if (!parentToCol
b220: 75 6d 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65  umns.TryGetValue
b230: 28 6b 65 79 2c 20 6f 75 74 20 69 6e 64 65 78 4c  (key, out indexL
b240: 69 73 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ist))..         
b250: 20 20 20 20 20 20 20 70 61 72 65 6e 74 54 6f 43         parentToC
b260: 6f 6c 75 6d 6e 73 2e 41 64 64 28 6b 65 79 2c 20  olumns.Add(key, 
b270: 6e 65 77 20 4c 69 73 74 3c 69 6e 74 3e 28 6e 65  new List<int>(ne
b280: 77 20 69 6e 74 5b 5d 20 7b 20 6e 20 7d 29 29 3b  w int[] { n }));
b290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
b2a0: 73 65 20 69 66 20 28 69 6e 64 65 78 4c 69 73 74  se if (indexList
b2b0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
b2c0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
b2d0: 4c 69 73 74 2e 41 64 64 28 6e 29 3b 0d 0a 20 20  List.Add(n);..  
b2e0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
b2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b300: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 5b  parentToColumns[
b310: 6b 65 79 5d 20 3d 20 6e 65 77 20 4c 69 73 74 3c  key] = new List<
b320: 69 6e 74 3e 28 6e 65 77 20 69 6e 74 5b 5d 20 7b  int>(new int[] {
b330: 20 6e 20 7d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   n });....      
b340: 20 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f 50 61        columnToPa
b350: 72 65 6e 74 2e 41 64 64 28 6e 2c 20 76 61 6c 75  rent.Add(n, valu
b360: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
b370: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
b380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3c0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b3d0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
b3e0: 6e 74 20 43 6f 75 6e 74 50 61 72 65 6e 74 73 28  nt CountParents(
b3f0: 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74 69 6f  ..        Dictio
b400: 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e  nary<ColumnParen
b410: 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20 70 61  t, List<int>> pa
b420: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 0d 0a 20  rentToColumns.. 
b430: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
b440: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73  .        int res
b450: 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  ult = 0;....    
b460: 20 20 20 20 69 66 20 28 70 61 72 65 6e 74 54 6f      if (parentTo
b470: 43 6f 6c 75 6d 6e 73 20 21 3d 20 6e 75 6c 6c 29  Columns != null)
b480: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
b490: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
b4a0: 20 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6b   (ColumnParent k
b4b0: 65 79 20 69 6e 20 70 61 72 65 6e 74 54 6f 43 6f  ey in parentToCo
b4c0: 6c 75 6d 6e 73 2e 4b 65 79 73 29 0d 0a 20 20 20  lumns.Keys)..   
b4d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b4e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b4f0: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
b500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b510: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
b520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
b530: 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 20  tring tableName 
b540: 3d 20 6b 65 79 2e 54 61 62 6c 65 4e 61 6d 65 3b  = key.TableName;
b550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b560: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
b570: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 61 62  sNullOrEmpty(tab
b580: 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
b590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
b5a0: 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
b5b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
b5c0: 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t++;..          
b5d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
b5e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
b5f0: 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d   result;..    }.
b600: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
b610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b650: 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  //....    intern
b660: 61 6c 20 44 61 74 61 54 61 62 6c 65 20 47 65 74  al DataTable Get
b670: 53 63 68 65 6d 61 54 61 62 6c 65 28 62 6f 6f 6c  SchemaTable(bool
b680: 20 77 61 6e 74 55 6e 69 71 75 65 49 6e 66 6f 2c   wantUniqueInfo,
b690: 20 62 6f 6f 6c 20 77 61 6e 74 44 65 66 61 75 6c   bool wantDefaul
b6a0: 74 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a  tValue)..    {..
b6b0: 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65        CheckClose
b6c0: 64 28 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  d();..      if (
b6d0: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
b6e0: 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  ) SQLiteCommand.
b6f0: 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b  Check(_command);
b700: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ....      //..  
b710: 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 57      // BUGFIX: W
b720: 65 20 6e 65 65 64 20 74 6f 20 71 75 69 63 6b 6c  e need to quickl
b730: 79 20 73 63 61 6e 20 61 6c 6c 20 74 68 65 20 66  y scan all the f
b740: 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63 75 72  ields in the cur
b750: 72 65 6e 74 0d 0a 20 20 20 20 20 20 2f 2f 20 20  rent..      //  
b760: 20 20 20 20 20 20 20 22 72 65 73 75 6c 74 20 73         "result s
b770: 65 74 22 20 74 6f 20 73 65 65 20 68 6f 77 20 6d  et" to see how m
b780: 61 6e 79 20 64 69 73 74 69 6e 63 74 20 74 61 62  any distinct tab
b790: 6c 65 73 20 61 72 65 20 61 63 74 75 61 6c 6c 79  les are actually
b7a0: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
b7b0: 20 20 20 69 6e 76 6f 6c 76 65 64 2e 20 20 54 68     involved.  Th
b7c0: 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  is information i
b7d0: 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74  s necessary so t
b7e0: 68 61 74 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20  hat some..      
b7f0: 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 74 65 6c  //         intel
b800: 6c 69 67 65 6e 74 20 64 65 63 69 73 69 6f 6e 73  ligent decisions
b810: 20 63 61 6e 20 62 65 20 6d 61 64 65 20 77 68 65   can be made whe
b820: 6e 20 63 6f 6e 73 74 72 75 63 74 69 6e 67 20 74  n constructing t
b830: 68 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  he..      //    
b840: 20 20 20 20 20 6d 65 74 61 64 61 74 61 20 62 65       metadata be
b850: 6c 6f 77 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  low.  For exampl
b860: 65 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 62 65  e, we need to be
b870: 20 76 65 72 79 20 63 61 72 65 66 75 6c 0d 0a 20   very careful.. 
b880: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
b890: 61 62 6f 75 74 20 66 6c 61 67 67 69 6e 67 20 61  about flagging a
b8a0: 20 70 61 72 74 69 63 75 6c 61 72 20 63 6f 6c 75   particular colu
b8b0: 6d 6e 20 61 73 20 22 75 6e 69 71 75 65 22 20 6a  mn as "unique" j
b8c0: 75 73 74 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  ust..      //   
b8d0: 20 20 20 20 20 20 62 65 63 61 75 73 65 20 69 74        because it
b8e0: 20 77 61 73 20 69 6e 20 69 74 73 20 6f 72 69 67   was in its orig
b8f0: 69 6e 61 6c 20 75 6e 64 65 72 6c 79 69 6e 67 20  inal underlying 
b900: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0d 0a  database table..
b910: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
b920: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
b930: 77 20 6d 75 6c 74 69 70 6c 65 20 74 61 62 6c 65  w multiple table
b940: 73 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20 74 68  s involved in th
b950: 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  e..      //     
b960: 20 20 20 20 22 72 65 73 75 6c 74 20 73 65 74 22      "result set"
b970: 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37  .  See ticket [7
b980: 65 33 66 61 39 33 37 34 34 5d 20 66 6f 72 20 6d  e3fa93744] for m
b990: 6f 72 65 20 64 65 74 61 69 6c 65 64 0d 0a 20 20  ore detailed..  
b9a0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69      //         i
b9b0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0d 0a 20 20 20  nformation...   
b9c0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 44 69 63     //..      Dic
b9d0: 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61  tionary<ColumnPa
b9e0: 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e  rent, List<int>>
b9f0: 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73   parentToColumns
ba00: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
ba10: 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74 2c 20  Dictionary<int, 
ba20: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20 63 6f  ColumnParent> co
ba30: 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 20 6e  lumnToParent = n
ba40: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 65  ull;....      Ge
ba50: 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c 75 6d 6e  tStatementColumn
ba60: 50 61 72 65 6e 74 73 28 0d 0a 20 20 20 20 20 20  Parents(..      
ba70: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e      _command.Con
ba80: 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2c 20 5f 61  nection._sql, _a
ba90: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
baa0: 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a 20 20  _fieldCount,..  
bab0: 20 20 20 20 20 20 20 20 72 65 66 20 70 61 72 65          ref pare
bac0: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 20 72 65 66  ntToColumns, ref
bad0: 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 29   columnToParent)
bae0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 44 61 74 61 54  ;....      DataT
baf0: 61 62 6c 65 20 74 62 6c 20 3d 20 6e 65 77 20 44  able tbl = new D
bb00: 61 74 61 54 61 62 6c 65 28 22 53 63 68 65 6d 61  ataTable("Schema
bb10: 54 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20 20 20  Table");..      
bb20: 44 61 74 61 54 61 62 6c 65 20 74 62 6c 49 6e 64  DataTable tblInd
bb30: 65 78 65 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  exes = null;..  
bb40: 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 74 62      DataTable tb
bb50: 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 3b 0d 0a  lIndexColumns;..
bb60: 20 20 20 20 20 20 44 61 74 61 52 6f 77 20 72 6f        DataRow ro
bb70: 77 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67  w;..      string
bb80: 20 74 65 6d 70 3b 0d 0a 20 20 20 20 20 20 73 74   temp;..      st
bb90: 72 69 6e 67 20 73 74 72 43 61 74 61 6c 6f 67 20  ring strCatalog 
bba0: 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  = String.Empty;.
bbb0: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74  .      string st
bbc0: 72 54 61 62 6c 65 20 3d 20 53 74 72 69 6e 67 2e  rTable = String.
bbd0: 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20 73 74  Empty;..      st
bbe0: 72 69 6e 67 20 73 74 72 43 6f 6c 75 6d 6e 20 3d  ring strColumn =
bbf0: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a   String.Empty;..
bc00: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 4c 6f 63 61  ..      tbl.Loca
bc10: 6c 65 20 3d 20 43 75 6c 74 75 72 65 49 6e 66 6f  le = CultureInfo
bc20: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
bc30: 65 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  e;..      tbl.Co
bc40: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
bc50: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75  TableColumn.Colu
bc60: 6d 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53  mnName, typeof(S
bc70: 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20  tring));..      
bc80: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
bc90: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
bca0: 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 2c  n.ColumnOrdinal,
bcb0: 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a   typeof(int));..
bcc0: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
bcd0: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
bce0: 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69  eColumn.ColumnSi
bcf0: 7a 65 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29  ze, typeof(int))
bd00: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
bd10: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
bd20: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72  ableColumn.Numer
bd30: 69 63 50 72 65 63 69 73 69 6f 6e 2c 20 74 79 70  icPrecision, typ
bd40: 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20  eof(int));..    
bd50: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
bd60: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
bd70: 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c 65  umn.NumericScale
bd80: 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d  , typeof(int));.
bd90: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
bda0: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
bdb0: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75  leColumn.IsUniqu
bdc0: 65 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  e, typeof(Boolea
bdd0: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  n));..      tbl.
bde0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
bdf0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
be00: 4b 65 79 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  Key, typeof(Bool
be10: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ean));..      tb
be20: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
be30: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
be40: 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 65 72 76  lColumn.BaseServ
be50: 65 72 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 73  erName, typeof(s
be60: 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20  tring));..      
be70: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
be80: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
be90: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61  nalColumn.BaseCa
bea0: 74 61 6c 6f 67 4e 61 6d 65 2c 20 74 79 70 65 6f  talogName, typeo
beb0: 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20  f(String));..   
bec0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
bed0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
bee0: 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e  lumn.BaseColumnN
bef0: 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69  ame, typeof(Stri
bf00: 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  ng));..      tbl
bf10: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
bf20: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
bf30: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 2c 20 74  aseSchemaName, t
bf40: 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d  ypeof(String));.
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 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62  leColumn.BaseTab
bf80: 6c 65 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53  leName, typeof(S
bf90: 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20  tring));..      
bfa0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
bfb0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
bfc0: 6e 2e 44 61 74 61 54 79 70 65 2c 20 74 79 70 65  n.DataType, type
bfd0: 6f 66 28 54 79 70 65 29 29 3b 0d 0a 20 20 20 20  of(Type));..    
bfe0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
bff0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
c000: 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 2c  umn.AllowDBNull,
c010: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
c020: 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
c030: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
c040: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f 76  TableColumn.Prov
c050: 69 64 65 72 54 79 70 65 2c 20 74 79 70 65 6f 66  iderType, typeof
c060: 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20 74  (int));..      t
c070: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
c080: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
c090: 2e 49 73 41 6c 69 61 73 65 64 2c 20 74 79 70 65  .IsAliased, type
c0a0: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
c0b0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c0c0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c0d0: 43 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65 73 73  Column.IsExpress
c0e0: 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  ion, typeof(Bool
c0f0: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ean));..      tb
c100: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c110: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
c120: 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e  lColumn.IsAutoIn
c130: 63 72 65 6d 65 6e 74 2c 20 74 79 70 65 6f 66 28  crement, typeof(
c140: 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20  Boolean));..    
c150: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c160: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
c170: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f  ionalColumn.IsRo
c180: 77 56 65 72 73 69 6f 6e 2c 20 74 79 70 65 6f 66  wVersion, typeof
c190: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20  (Boolean));..   
c1a0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
c1b0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  dd(SchemaTableOp
c1c0: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 48  tionalColumn.IsH
c1d0: 69 64 64 65 6e 2c 20 74 79 70 65 6f 66 28 42 6f  idden, typeof(Bo
c1e0: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
c1f0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c200: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c210: 6e 2e 49 73 4c 6f 6e 67 2c 20 74 79 70 65 6f 66  n.IsLong, typeof
c220: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20  (Boolean));..   
c230: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
c240: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  dd(SchemaTableOp
c250: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52  tionalColumn.IsR
c260: 65 61 64 4f 6e 6c 79 2c 20 74 79 70 65 6f 66 28  eadOnly, typeof(
c270: 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20  Boolean));..    
c280: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c290: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
c2a0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 50 72 6f 76  ionalColumn.Prov
c2b0: 69 64 65 72 53 70 65 63 69 66 69 63 44 61 74 61  iderSpecificData
c2c0: 54 79 70 65 2c 20 74 79 70 65 6f 66 28 54 79 70  Type, typeof(Typ
c2d0: 65 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  e));..      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 44 65 66 61 75 6c 74 56 61 6c  olumn.DefaultVal
c310: 75 65 2c 20 74 79 70 65 6f 66 28 6f 62 6a 65 63  ue, typeof(objec
c320: 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  t));..      tbl.
c330: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 44 61 74  Columns.Add("Dat
c340: 61 54 79 70 65 4e 61 6d 65 22 2c 20 74 79 70 65  aTypeName", type
c350: 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20  of(string));..  
c360: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c370: 41 64 64 28 22 43 6f 6c 6c 61 74 69 6f 6e 54 79  Add("CollationTy
c380: 70 65 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69  pe", typeof(stri
c390: 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  ng));..      tbl
c3a0: 2e 42 65 67 69 6e 4c 6f 61 64 44 61 74 61 28 29  .BeginLoadData()
c3b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28  ;....      for (
c3c0: 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f  int n = 0; n < _
c3d0: 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b 29  fieldCount; n++)
c3e0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
c3f0: 20 20 20 53 51 4c 69 74 65 54 79 70 65 20 73 71     SQLiteType sq
c400: 6c 54 79 70 65 20 3d 20 47 65 74 53 51 4c 69 74  lType = GetSQLit
c410: 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 6e 29  eType(_flags, n)
c420: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 6f 77  ;....        row
c430: 20 3d 20 74 62 6c 2e 4e 65 77 52 6f 77 28 29 3b   = tbl.NewRow();
c440: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 62 54 79  ....        DbTy
c450: 70 65 20 74 79 70 20 3d 20 73 71 6c 54 79 70 65  pe typ = sqlType
c460: 2e 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Type;....      
c470: 20 20 2f 2f 20 44 65 66 61 75 6c 74 20 73 65 74    // Default set
c480: 74 69 6e 67 73 20 66 6f 72 20 74 68 65 20 63 6f  tings for the co
c490: 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20 72 6f  lumn..        ro
c4a0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
c4b0: 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20  umn.ColumnName] 
c4c0: 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0d 0a 20  = GetName(n);.. 
c4d0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
c4e0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c  aTableColumn.Col
c4f0: 75 6d 6e 4f 72 64 69 6e 61 6c 5d 20 3d 20 6e 3b  umnOrdinal] = n;
c500: 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ..        row[Sc
c510: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c520: 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20 53 51  ColumnSize] = SQ
c530: 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44 62 54 79  LiteConvert.DbTy
c540: 70 65 54 6f 43 6f 6c 75 6d 6e 53 69 7a 65 28 74  peToColumnSize(t
c550: 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f  yp);..        ro
c560: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
c570: 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63 69  umn.NumericPreci
c580: 73 69 6f 6e 5d 20 3d 20 53 51 4c 69 74 65 43 6f  sion] = SQLiteCo
c590: 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f 4e 75  nvert.DbTypeToNu
c5a0: 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e 28 74  mericPrecision(t
c5b0: 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f  yp);..        ro
c5c0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
c5d0: 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c 65  umn.NumericScale
c5e0: 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72  ] = SQLiteConver
c5f0: 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65 72 69  t.DbTypeToNumeri
c600: 63 53 63 61 6c 65 28 74 79 70 29 3b 0d 0a 20 20  cScale(typ);..  
c610: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
c620: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f 76  TableColumn.Prov
c630: 69 64 65 72 54 79 70 65 5d 20 3d 20 73 71 6c 54  iderType] = sqlT
c640: 79 70 65 2e 54 79 70 65 3b 0d 0a 20 20 20 20 20  ype.Type;..     
c650: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c660: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e 67 5d  leColumn.IsLong]
c670: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
c680: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c690: 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42  leColumn.AllowDB
c6a0: 4e 75 6c 6c 5d 20 3d 20 74 72 75 65 3b 0d 0a 20  Null] = true;.. 
c6b0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
c6c0: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
c6d0: 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 5d  lumn.IsReadOnly]
c6e0: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
c6f0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c700: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
c710: 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e 5d 20 3d  .IsRowVersion] =
c720: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
c730: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
c740: 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 5d  Column.IsUnique]
c750: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
c760: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c770: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20  leColumn.IsKey] 
c780: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
c790: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
c7a0: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
c7b0: 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d  IsAutoIncrement]
c7c0: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
c7d0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c7e0: 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74 61 54 79 70  leColumn.DataTyp
c7f0: 65 5d 20 3d 20 47 65 74 46 69 65 6c 64 54 79 70  e] = GetFieldTyp
c800: 65 28 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  e(n);..        r
c810: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
c820: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 48  tionalColumn.IsH
c830: 69 64 64 65 6e 5d 20 3d 20 66 61 6c 73 65 3b 0d  idden] = false;.
c840: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
c850: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
c860: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 5d 20 3d  aseSchemaName] =
c870: 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65   _baseSchemaName
c880: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72  ;....        str
c890: 43 6f 6c 75 6d 6e 20 3d 20 63 6f 6c 75 6d 6e 54  Column = columnT
c8a0: 6f 50 61 72 65 6e 74 5b 6e 5d 2e 43 6f 6c 75 6d  oParent[n].Colum
c8b0: 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  nName;..        
c8c0: 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
c8d0: 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f 6c 75  lOrEmpty(strColu
c8e0: 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29 20 72 6f  mn) == false) ro
c8f0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
c900: 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61  umn.BaseColumnNa
c910: 6d 65 5d 20 3d 20 73 74 72 43 6f 6c 75 6d 6e 3b  me] = strColumn;
c920: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  ....        row[
c930: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c940: 6e 2e 49 73 45 78 70 72 65 73 73 69 6f 6e 5d 20  n.IsExpression] 
c950: 3d 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  = String.IsNullO
c960: 72 45 6d 70 74 79 28 73 74 72 43 6f 6c 75 6d 6e  rEmpty(strColumn
c970: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  );..        row[
c980: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c990: 6e 2e 49 73 41 6c 69 61 73 65 64 5d 20 3d 20 28  n.IsAliased] = (
c9a0: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47  String.Compare(G
c9b0: 65 74 4e 61 6d 65 28 6e 29 2c 20 73 74 72 43 6f  etName(n), strCo
c9c0: 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70  lumn, StringComp
c9d0: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
c9e0: 6e 6f 72 65 43 61 73 65 29 20 21 3d 20 30 29 3b  noreCase) != 0);
c9f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65 6d 70  ....        temp
ca00: 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e   = columnToParen
ca10: 74 5b 6e 5d 2e 54 61 62 6c 65 4e 61 6d 65 3b 0d  t[n].TableName;.
ca20: 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72  .        if (Str
ca30: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
ca40: 79 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c 73 65  y(temp) == false
ca50: 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  ) row[SchemaTabl
ca60: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c  eColumn.BaseTabl
ca70: 65 4e 61 6d 65 5d 20 3d 20 74 65 6d 70 3b 0d 0a  eName] = temp;..
ca80: 0d 0a 20 20 20 20 20 20 20 20 74 65 6d 70 20 3d  ..        temp =
ca90: 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 5b   columnToParent[
caa0: 6e 5d 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 3b  n].DatabaseName;
cab0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74  ..        if (St
cac0: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
cad0: 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c 73  ty(temp) == fals
cae0: 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  e) row[SchemaTab
caf0: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
cb00: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
cb10: 5d 20 3d 20 74 65 6d 70 3b 0d 0a 0d 0a 20 20 20  ] = temp;....   
cb20: 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74 61       string data
cb30: 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Type = null;..  
cb40: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 20 68        // If we h
cb50: 61 76 65 20 61 20 74 61 62 6c 65 2d 62 6f 75 6e  ave a table-boun
cb60: 64 20 63 6f 6c 75 6d 6e 2c 20 65 78 74 72 61 63  d column, extrac
cb70: 74 20 74 68 65 20 65 78 74 72 61 20 69 6e 66 6f  t the extra info
cb80: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 69 74 0d  rmation from it.
cb90: 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72  .        if (Str
cba0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
cbb0: 79 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20  y(strColumn) == 
cbc0: 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 20 20  false)..        
cbd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  {..          str
cbe0: 69 6e 67 20 63 6f 6c 6c 53 65 71 20 3d 20 6e 75  ing collSeq = nu
cbf0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  ll;..          b
cc00: 6f 6f 6c 20 62 4e 6f 74 4e 75 6c 6c 20 3d 20 66  ool bNotNull = f
cc10: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
cc20: 20 62 6f 6f 6c 20 62 50 72 69 6d 61 72 79 4b 65   bool bPrimaryKe
cc30: 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  y = false;..    
cc40: 20 20 20 20 20 20 62 6f 6f 6c 20 62 41 75 74 6f        bool bAuto
cc50: 49 6e 63 72 65 6d 65 6e 74 20 3d 20 66 61 6c 73  Increment = fals
cc60: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  e;..          st
cc70: 72 69 6e 67 5b 5d 20 61 72 53 69 7a 65 3b 0d 0a  ring[] arSize;..
cc80: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 47  ..          // G
cc90: 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 65  et the column me
cca0: 74 61 20 64 61 74 61 0d 0a 20 20 20 20 20 20 20  ta data..       
ccb0: 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e     _command.Conn
ccc0: 65 63 74 69 6f 6e 2e 5f 73 71 6c 2e 43 6f 6c 75  ection._sql.Colu
ccd0: 6d 6e 4d 65 74 61 44 61 74 61 28 0d 0a 20 20 20  mnMetaData(..   
cce0: 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67           (string
ccf0: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
cd00: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42  OptionalColumn.B
cd10: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 2c  aseCatalogName],
cd20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73  ..            (s
cd30: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
cd40: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
cd50: 54 61 62 6c 65 4e 61 6d 65 5d 2c 0d 0a 20 20 20  TableName],..   
cd60: 20 20 20 20 20 20 20 20 20 73 74 72 43 6f 6c 75           strColu
cd70: 6d 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mn,..           
cd80: 20 72 65 66 20 64 61 74 61 54 79 70 65 2c 20 72   ref dataType, r
cd90: 65 66 20 63 6f 6c 6c 53 65 71 2c 20 72 65 66 20  ef collSeq, ref 
cda0: 62 4e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 62 50  bNotNull, ref bP
cdb0: 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 62  rimaryKey, ref b
cdc0: 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 3b 0d  AutoIncrement);.
cdd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
cde0: 28 62 4e 6f 74 4e 75 6c 6c 20 7c 7c 20 62 50 72  (bNotNull || bPr
cdf0: 69 6d 61 72 79 4b 65 79 29 20 72 6f 77 5b 53 63  imaryKey) row[Sc
ce00: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
ce10: 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 20 66  AllowDBNull] = f
ce20: 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
ce30: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
ce40: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20  leColumn.IsKey] 
ce50: 3d 20 62 50 72 69 6d 61 72 79 4b 65 79 20 26 26  = bPrimaryKey &&
ce60: 20 43 6f 75 6e 74 50 61 72 65 6e 74 73 28 70 61   CountParents(pa
ce70: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 29 20 3c  rentToColumns) <
ce80: 3d 20 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 1;..          
ce90: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
cea0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
ceb0: 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d  AutoIncrement] =
cec0: 20 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 3b   bAutoIncrement;
ced0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b  ..          row[
cee0: 22 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 22 5d  "CollationType"]
cef0: 20 3d 20 63 6f 6c 6c 53 65 71 3b 0d 0a 0d 0a 20   = collSeq;.... 
cf00: 20 20 20 20 20 20 20 20 20 2f 2f 20 46 6f 72 20           // For 
cf10: 74 79 70 65 73 20 6c 69 6b 65 20 76 61 72 63 68  types like varch
cf20: 61 72 28 35 30 29 20 61 6e 64 20 73 75 63 68 2c  ar(50) and such,
cf30: 20 65 78 74 72 61 63 74 20 74 68 65 20 73 69 7a   extract the siz
cf40: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61 72 53  e..          arS
cf50: 69 7a 65 20 3d 20 64 61 74 61 54 79 70 65 2e 53  ize = dataType.S
cf60: 70 6c 69 74 28 27 28 27 29 3b 0d 0a 20 20 20 20  plit('(');..    
cf70: 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a 65        if (arSize
cf80: 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20  .Length > 1)..  
cf90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
cfa0: 20 20 20 20 20 20 20 64 61 74 61 54 79 70 65 20         dataType 
cfb0: 3d 20 61 72 53 69 7a 65 5b 30 5d 3b 0d 0a 20 20  = arSize[0];..  
cfc0: 20 20 20 20 20 20 20 20 20 20 61 72 53 69 7a 65            arSize
cfd0: 20 3d 20 61 72 53 69 7a 65 5b 31 5d 2e 53 70 6c   = arSize[1].Spl
cfe0: 69 74 28 27 29 27 29 3b 0d 0a 20 20 20 20 20 20  it(')');..      
cff0: 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a 65        if (arSize
d000: 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20  .Length > 1)..  
d010: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d020: 20 20 20 20 20 20 20 20 20 20 20 61 72 53 69 7a             arSiz
d030: 65 20 3d 20 61 72 53 69 7a 65 5b 30 5d 2e 53 70  e = arSize[0].Sp
d040: 6c 69 74 28 27 2c 27 2c 20 27 2e 27 29 3b 0d 0a  lit(',', '.');..
d050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d060: 20 28 73 71 6c 54 79 70 65 2e 54 79 70 65 20 3d   (sqlType.Type =
d070: 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 20  = DbType.Binary 
d080: 7c 7c 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  || SQLiteConvert
d090: 2e 49 73 53 74 72 69 6e 67 44 62 54 79 70 65 28  .IsStringDbType(
d0a0: 73 71 6c 54 79 70 65 2e 54 79 70 65 29 29 0d 0a  sqlType.Type))..
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
d0c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d0d0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
d0e0: 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a  Column.ColumnSiz
d0f0: 65 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49  e] = Convert.ToI
d100: 6e 74 33 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20  nt32(arSize[0], 
d110: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
d120: 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a  riantCulture);..
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
d140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65  .              e
d150: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
d160: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d170: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
d180: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65  TableColumn.Nume
d190: 72 69 63 50 72 65 63 69 73 69 6f 6e 5d 20 3d 20  ricPrecision] = 
d1a0: 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28  Convert.ToInt32(
d1b0: 61 72 53 69 7a 65 5b 30 5d 2c 20 43 75 6c 74 75  arSize[0], Cultu
d1c0: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
d1d0: 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20  Culture);..     
d1e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
d1f0: 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31  rSize.Length > 1
d200: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
d210: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
d220: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72  ableColumn.Numer
d230: 69 63 53 63 61 6c 65 5d 20 3d 20 43 6f 6e 76 65  icScale] = Conve
d240: 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53 69 7a  rt.ToInt32(arSiz
d250: 65 5b 31 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66  e[1], CultureInf
d260: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
d270: 72 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  re);..          
d280: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
d290: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
d2a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  }....          i
d2b0: 66 20 28 77 61 6e 74 44 65 66 61 75 6c 74 56 61  f (wantDefaultVa
d2c0: 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  lue)..          
d2d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
d2e0: 2f 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20  / Determine the 
d2f0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
d300: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 77 68  r the column, wh
d310: 69 63 68 20 73 75 63 6b 73 20 62 65 63 61 75 73  ich sucks becaus
d320: 65 20 77 65 20 68 61 76 65 20 74 6f 20 71 75 65  e we have to que
d330: 72 79 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f  ry the schema fo
d340: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 0d 0a 20  r each column.. 
d350: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
d360: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
d370: 63 6d 64 54 61 62 6c 65 20 3d 20 6e 65 77 20 53  cmdTable = new S
d380: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 48 65 6c  QLiteCommand(Hel
d390: 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
d3a0: 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  gFormat(CultureI
d3b0: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
d3c0: 74 75 72 65 2c 20 22 50 52 41 47 4d 41 20 5b 7b  ture, "PRAGMA [{
d3d0: 30 7d 5d 2e 54 41 42 4c 45 5f 49 4e 46 4f 28 5b  0}].TABLE_INFO([
d3e0: 7b 31 7d 5d 29 22 2c 0d 0a 20 20 20 20 20 20 20  {1}])",..       
d3f0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
d400: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
d410: 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67  lumn.BaseCatalog
d420: 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20  Name],..        
d430: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
d440: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
d450: 54 61 62 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20  TableName]..    
d460: 20 20 20 20 20 20 20 20 20 20 29 2c 20 5f 63 6f            ), _co
d470: 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
d480: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
d490: 75 73 69 6e 67 20 28 44 62 44 61 74 61 52 65 61  using (DbDataRea
d4a0: 64 65 72 20 72 64 54 61 62 6c 65 20 3d 20 63 6d  der rdTable = cm
d4b0: 64 54 61 62 6c 65 2e 45 78 65 63 75 74 65 52 65  dTable.ExecuteRe
d4c0: 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20  ader())..       
d4d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d4e0: 20 20 20 20 20 20 2f 2f 20 46 69 6e 64 20 74 68        // Find th
d4f0: 65 20 6d 61 74 63 68 69 6e 67 20 63 6f 6c 75 6d  e matching colum
d500: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
d510: 20 77 68 69 6c 65 20 28 72 64 54 61 62 6c 65 2e   while (rdTable.
d520: 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20  Read())..       
d530: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d540: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
d550: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 28 73 74  ring.Compare((st
d560: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
d570: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  ableColumn.BaseC
d580: 6f 6c 75 6d 6e 4e 61 6d 65 5d 2c 20 72 64 54 61  olumnName], rdTa
d590: 62 6c 65 2e 47 65 74 53 74 72 69 6e 67 28 31 29  ble.GetString(1)
d5a0: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
d5b0: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
d5c0: 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20  Case) == 0)..   
d5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
d5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5f0: 20 20 69 66 20 28 72 64 54 61 62 6c 65 2e 49 73    if (rdTable.Is
d600: 44 42 4e 75 6c 6c 28 34 29 20 3d 3d 20 66 61 6c  DBNull(4) == fal
d610: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
d620: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
d630: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
d640: 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56 61  Column.DefaultVa
d650: 6c 75 65 5d 20 3d 20 72 64 54 61 62 6c 65 5b 34  lue] = rdTable[4
d660: 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
d670: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
d680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d690: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
d6a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
d6b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
d6c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44  ..          // D
d6d0: 65 74 65 72 6d 69 6e 65 20 49 73 55 6e 69 71 75  etermine IsUniqu
d6e0: 65 20 70 72 6f 70 65 72 6c 79 2c 20 77 68 69 63  e properly, whic
d6f0: 68 20 69 73 20 61 20 70 61 69 6e 20 69 6e 20 74  h is a pain in t
d700: 68 65 20 62 75 74 74 21 0d 0a 20 20 20 20 20 20  he butt!..      
d710: 20 20 20 20 69 66 20 28 77 61 6e 74 55 6e 69 71      if (wantUniq
d720: 75 65 49 6e 66 6f 29 0d 0a 20 20 20 20 20 20 20  ueInfo)..       
d730: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d740: 20 20 69 66 20 28 28 73 74 72 69 6e 67 29 72 6f    if ((string)ro
d750: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
d760: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65  ionalColumn.Base
d770: 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20 21 3d 20  CatalogName] != 
d780: 73 74 72 43 61 74 61 6c 6f 67 0d 0a 20 20 20 20  strCatalog..    
d790: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 73 74            || (st
d7a0: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
d7b0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
d7c0: 61 62 6c 65 4e 61 6d 65 5d 20 21 3d 20 73 74 72  ableName] != str
d7d0: 54 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  Table)..        
d7e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d7f0: 20 20 20 20 20 73 74 72 43 61 74 61 6c 6f 67 20       strCatalog 
d800: 3d 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63  = (string)row[Sc
d810: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
d820: 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61  lColumn.BaseCata
d830: 6c 6f 67 4e 61 6d 65 5d 3b 0d 0a 20 20 20 20 20  logName];..     
d840: 20 20 20 20 20 20 20 20 20 73 74 72 54 61 62 6c           strTabl
d850: 65 20 3d 20 28 73 74 72 69 6e 67 29 72 6f 77 5b  e = (string)row[
d860: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
d870: 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d  n.BaseTableName]
d880: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d890: 20 20 20 74 62 6c 49 6e 64 65 78 65 73 20 3d 20     tblIndexes = 
d8a0: 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74  _command.Connect
d8b0: 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28 22 49  ion.GetSchema("I
d8c0: 6e 64 65 78 65 73 22 2c 20 6e 65 77 20 73 74 72  ndexes", new str
d8d0: 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ing[] {..       
d8e0: 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67           (string
d8f0: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
d900: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42  OptionalColumn.B
d910: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 2c  aseCatalogName],
d920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d930: 20 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20    null,..       
d940: 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67           (string
d950: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
d960: 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65  Column.BaseTable
d970: 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20  Name],..        
d980: 20 20 20 20 20 20 20 20 6e 75 6c 6c 20 7d 29 3b          null });
d990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
d9a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ...            f
d9b0: 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f 77 20  oreach (DataRow 
d9c0: 72 6f 77 49 6e 64 65 78 65 73 20 69 6e 20 74 62  rowIndexes in tb
d9d0: 6c 49 6e 64 65 78 65 73 2e 52 6f 77 73 29 0d 0a  lIndexes.Rows)..
d9e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 62 6c               tbl
da00: 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 20 3d 20 5f  IndexColumns = _
da10: 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69  command.Connecti
da20: 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28 22 49 6e  on.GetSchema("In
da30: 64 65 78 43 6f 6c 75 6d 6e 73 22 2c 20 6e 65 77  dexColumns", new
da40: 20 73 74 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20   string[] {..   
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74               (st
da60: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
da70: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
da80: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
da90: 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me],..          
daa0: 20 20 20 20 20 20 6e 75 6c 6c 2c 0d 0a 20 20 20        null,..   
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74               (st
dac0: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
dad0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
dae0: 61 62 6c 65 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20  ableName],..    
daf0: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72              (str
db00: 69 6e 67 29 72 6f 77 49 6e 64 65 78 65 73 5b 22  ing)rowIndexes["
db10: 49 4e 44 45 58 5f 4e 41 4d 45 22 5d 2c 0d 0a 20  INDEX_NAME"],.. 
db20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
db30: 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ull..           
db40: 20 20 20 20 20 7d 29 3b 0d 0a 20 20 20 20 20 20       });..      
db50: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
db60: 28 44 61 74 61 52 6f 77 20 72 6f 77 43 6f 6c 75  (DataRow rowColu
db70: 6d 6e 49 6e 64 65 78 20 69 6e 20 74 62 6c 49 6e  mnIndex in tblIn
db80: 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73 29  dexColumns.Rows)
db90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dba0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
dbb0: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
dbc0: 6d 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 76  mpare(SQLiteConv
dbd0: 65 72 74 2e 47 65 74 53 74 72 69 6e 67 4f 72 4e  ert.GetStringOrN
dbe0: 75 6c 6c 28 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64  ull(rowColumnInd
dbf0: 65 78 5b 22 43 4f 4c 55 4d 4e 5f 4e 41 4d 45 22  ex["COLUMN_NAME"
dc00: 5d 29 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c 20 53  ]), strColumn, S
dc10: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
dc20: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
dc30: 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
dc40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
dc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dc60: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
dc70: 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20       // BUGFIX: 
dc80: 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 77  Make sure that w
dc90: 65 20 6f 6e 6c 79 20 66 6c 61 67 20 74 68 69 73  e only flag this
dca0: 20 63 6f 6c 75 6d 6e 20 61 73 20 22 75 6e 69 71   column as "uniq
dcb0: 75 65 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue"..           
dcc0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
dcd0: 20 20 69 66 20 77 65 20 61 72 65 20 6e 6f 74 20    if we are not 
dce0: 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 73 6f  processing of so
dcf0: 6d 65 20 6b 69 6e 64 20 6f 66 20 6d 75 6c 74 69  me kind of multi
dd00: 2d 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  -table..        
dd10: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
dd20: 20 20 20 20 20 63 6f 6e 73 74 72 75 63 74 20 28       construct (
dd30: 69 2e 65 2e 20 61 20 6a 6f 69 6e 29 20 62 65 63  i.e. a join) bec
dd40: 61 75 73 65 20 69 6e 20 74 68 61 74 20 63 61 73  ause in that cas
dd50: 65 20 77 65 20 6d 75 73 74 0d 0a 20 20 20 20 20  e we must..     
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
dd70: 20 20 20 20 20 20 20 20 61 6c 6c 6f 77 20 64 75          allow du
dd80: 70 6c 69 63 61 74 65 20 76 61 6c 75 65 73 20 28  plicate values (
dd90: 72 65 66 65 72 20 74 6f 20 74 69 63 6b 65 74 20  refer to ticket 
dda0: 5b 37 65 33 66 61 39 33 37 34 34 5d 29 2e 0d 0a  [7e3fa93744])...
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddc0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
ddd0: 20 20 20 20 20 20 20 20 69 66 20 28 70 61 72 65          if (pare
dde0: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e  ntToColumns.Coun
ddf0: 74 20 3d 3d 20 31 20 26 26 20 74 62 6c 49 6e 64  t == 1 && tblInd
de00: 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73 2e 43  exColumns.Rows.C
de10: 6f 75 6e 74 20 3d 3d 20 31 20 26 26 20 28 62 6f  ount == 1 && (bo
de20: 6f 6c 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ol)row[SchemaTab
de30: 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42  leColumn.AllowDB
de40: 4e 75 6c 6c 5d 20 3d 3d 20 66 61 6c 73 65 29 0d  Null] == false).
de50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de60: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
de70: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69  ableColumn.IsUni
de80: 71 75 65 5d 20 3d 20 72 6f 77 49 6e 64 65 78 65  que] = rowIndexe
de90: 73 5b 22 55 4e 49 51 55 45 22 5d 3b 0d 0a 0d 0a  s["UNIQUE"];....
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 20 20 2f 2f 20 49 66 20 69 74 73 20 61 6e 20 69    // If its an i
dec0: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
ded0: 65 79 20 61 6e 64 20 74 68 65 20 6f 6e 6c 79 20  ey and the only 
dee0: 70 72 69 6d 61 72 79 20 6b 65 79 20 69 6e 20 74  primary key in t
def0: 68 65 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 69  he table, then i
df00: 74 73 20 61 20 72 6f 77 69 64 20 61 6c 69 61 73  ts a rowid alias
df10: 20 61 6e 64 20 69 73 20 61 75 74 6f 69 6e 63 72   and is autoincr
df20: 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  ement..         
df30: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
df40: 3a 20 20 43 75 72 72 65 6e 74 6c 79 20 63 6f 6d  :  Currently com
df50: 6d 65 6e 74 65 64 20 6f 75 74 20 62 65 63 61 75  mented out becau
df60: 73 65 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61  se this is not a
df70: 6c 77 61 79 73 20 74 68 65 20 64 65 73 69 72 65  lways the desire
df80: 64 20 62 65 68 61 76 69 6f 72 2e 20 20 46 6f 72  d behavior.  For
df90: 20 65 78 61 6d 70 6c 65 2c 20 61 20 31 3a 31 20   example, a 1:1 
dfa0: 72 65 6c 61 74 69 6f 6e 73 68 69 70 20 77 69 74  relationship wit
dfb0: 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
dfc0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 61       //        a
dfd0: 6e 6f 74 68 65 72 20 74 61 62 6c 65 2c 20 77 68  nother table, wh
dfe0: 65 72 65 20 74 68 65 20 6f 74 68 65 72 20 74 61  ere the other ta
dff0: 62 6c 65 20 69 73 20 61 75 74 6f 69 6e 63 72 65  ble is autoincre
e000: 6d 65 6e 74 2c 20 62 75 74 20 74 68 69 73 20 6f  ment, but this o
e010: 6e 65 20 69 73 20 6e 6f 74 2c 20 61 6e 64 20 75  ne is not, and u
e020: 73 65 73 20 74 68 65 20 72 6f 77 69 64 20 66 72  ses the rowid fr
e030: 6f 6d 20 74 68 65 20 6f 74 68 65 72 2e 0d 0a 20  om the other... 
e040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e050: 20 2f 2f 20 20 20 20 20 20 20 20 49 74 20 69 73   //        It is
e060: 20 73 61 66 65 72 20 74 6f 20 6f 6e 6c 79 20 73   safer to only s
e070: 65 74 20 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  et Autoincrement
e080: 20 6f 6e 20 74 61 62 6c 65 73 20 77 68 65 72 65   on tables where
e090: 20 77 65 27 72 65 20 53 55 52 45 20 74 68 65 20   we're SURE the 
e0a0: 75 73 65 72 20 73 70 65 63 69 66 69 65 64 20 41  user specified A
e0b0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 65 76  UTOINCREMENT, ev
e0c0: 65 6e 20 69 66 20 69 74 73 20 61 20 72 6f 77 69  en if its a rowi
e0d0: 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 0d 0a 20 20 20  d column.....   
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
e0f0: 66 20 28 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d  f (tblIndexColum
e100: 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74 20 3d 3d  ns.Rows.Count ==
e110: 20 31 20 26 26 20 28 62 6f 6f 6c 29 72 6f 77 49   1 && (bool)rowI
e120: 6e 64 65 78 65 73 5b 22 50 52 49 4d 41 52 59 5f  ndexes["PRIMARY_
e130: 4b 45 59 22 5d 20 3d 3d 20 74 72 75 65 20 26 26  KEY"] == true &&
e140: 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72   String.IsNullOr
e150: 45 6d 70 74 79 28 64 61 74 61 54 79 70 65 29 20  Empty(dataType) 
e160: 3d 3d 20 66 61 6c 73 65 20 26 26 0d 0a 20 20 20  == false &&..   
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e180: 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28   String.Compare(
e190: 64 61 74 61 54 79 70 65 2c 20 22 69 6e 74 65 67  dataType, "integ
e1a0: 65 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  er", StringCompa
e1b0: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
e1c0: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a  oreCase) == 0)..
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e1f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 72 6f 77           //  row
e200: 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  [SchemaTableOpti
e210: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74  onalColumn.IsAut
e220: 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 74 72  oIncrement] = tr
e230: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
e240: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
e260: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
e270: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e280: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e290: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e2a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e2b0: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
e2c0: 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74 61 54  ullOrEmpty(dataT
e2d0: 79 70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ype))..         
e2e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e2f0: 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66  TypeAffinity aff
e300: 69 6e 20 3d 20 54 79 70 65 41 66 66 69 6e 69 74  in = TypeAffinit
e310: 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3b  y.Uninitialized;
e320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 61  ..            da
e330: 74 61 54 79 70 65 20 3d 20 5f 61 63 74 69 76 65  taType = _active
e340: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43  Statement._sql.C
e350: 6f 6c 75 6d 6e 54 79 70 65 28 5f 61 63 74 69 76  olumnType(_activ
e360: 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e 2c 20 72  eStatement, n, r
e370: 65 66 20 61 66 66 69 6e 29 3b 0d 0a 20 20 20 20  ef affin);..    
e380: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e390: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
e3a0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61  IsNullOrEmpty(da
e3b0: 74 61 54 79 70 65 29 20 3d 3d 20 66 61 6c 73 65  taType) == false
e3c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
e3d0: 6f 77 5b 22 44 61 74 61 54 79 70 65 4e 61 6d 65  ow["DataTypeName
e3e0: 22 5d 20 3d 20 64 61 74 61 54 79 70 65 3b 0d 0a  "] = dataType;..
e3f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e400: 20 20 20 74 62 6c 2e 52 6f 77 73 2e 41 64 64 28     tbl.Rows.Add(
e410: 72 6f 77 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  row);..      }..
e420: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79  ..      if (_key
e430: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
e440: 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e         _keyInfo.
e450: 41 70 70 65 6e 64 53 63 68 65 6d 61 54 61 62 6c  AppendSchemaTabl
e460: 65 28 74 62 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20  e(tbl);....     
e470: 20 74 62 6c 2e 41 63 63 65 70 74 43 68 61 6e 67   tbl.AcceptChang
e480: 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  es();..      tbl
e490: 2e 45 6e 64 4c 6f 61 64 44 61 74 61 28 29 3b 0d  .EndLoadData();.
e4a0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
e4b0: 74 62 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tbl;..    }.... 
e4c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
e4d0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  ..    /// Retrie
e4e0: 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  ves the column a
e4f0: 73 20 61 20 73 74 72 69 6e 67 0d 0a 20 20 20 20  s a string..    
e500: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
e510: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
e520: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
e530: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
e540: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
e550: 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e  / <returns>strin
e560: 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  g</returns>..   
e570: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
e580: 20 73 74 72 69 6e 67 20 47 65 74 53 74 72 69 6e   string GetStrin
e590: 67 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  g(int i)..    {.
e5a0: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
e5b0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
e5c0: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
e5d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
e5e0: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
e5f0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
e600: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
e610: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
e620: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
e630: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
e640: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
e650: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
e660: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e670: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
e680: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
e690: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
e6a0: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
e6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
e6c0: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
e6d0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
e6e0: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
e6f0: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
e700: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
e710: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
e720: 20 20 20 20 20 22 47 65 74 53 74 72 69 6e 67 22       "GetString"
e730: 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20  , null, value), 
e740: 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a  out complete);..
e750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
e760: 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20   (complete)..   
e770: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
e780: 75 72 6e 20 76 61 6c 75 65 2e 53 74 72 69 6e 67  urn value.String
e790: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
e7a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
e7b0: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
e7c0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
e7d0: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
e7e0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
e7f0: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
e800: 2e 47 65 74 53 74 72 69 6e 67 28 69 20 2d 20 50  .GetString(i - P
e810: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
e820: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
e830: 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73       if ((_flags
e840: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
e850: 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69 66  ionFlags.NoVerif
e860: 79 54 65 78 74 41 66 66 69 6e 69 74 79 29 20 21  yTextAffinity) !
e870: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
e880: 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69 66 79  onFlags.NoVerify
e890: 54 65 78 74 41 66 66 69 6e 69 74 79 29 0d 0a 20  TextAffinity).. 
e8a0: 20 20 20 20 20 20 20 20 20 20 20 56 65 72 69 66             Verif
e8b0: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
e8c0: 53 74 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  String);....    
e8d0: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
e8e0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
e8f0: 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65  .GetText(_active
e900: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a  Statement, i);..
e910: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
e920: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
e930: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
e940: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 6f  e column as an o
e950: 62 6a 65 63 74 20 63 6f 72 72 65 73 70 6f 6e 64  bject correspond
e960: 69 6e 67 20 74 6f 20 74 68 65 20 75 6e 64 65 72  ing to the under
e970: 6c 79 69 6e 67 20 64 61 74 61 74 79 70 65 20 6f  lying datatype o
e980: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a 20 20  f the column..  
e990: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e9a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
e9b0: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
e9c0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
e9d0: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
e9e0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 6f 62 6a  /// <returns>obj
e9f0: 65 63 74 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ect</returns>.. 
ea00: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
ea10: 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c  de object GetVal
ea20: 75 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  ue(int i)..    {
ea30: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
ea40: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
ea50: 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74      VerifyForGet
ea60: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
ea70: 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  f ((_flags & SQL
ea80: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
ea90: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
eaa0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
eab0: 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  ks) == SQLiteCon
eac0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
ead0: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
eae0: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20  lueCallbacks).. 
eaf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
eb00: 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61        SQLiteData
eb10: 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75  ReaderValue valu
eb20: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61  e = new SQLiteDa
eb30: 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b  taReaderValue();
eb40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
eb50: 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a  ol complete;....
eb60: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f              Invo
eb70: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
eb80: 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74  ack(i, new SQLit
eb90: 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41  eReadValueEventA
eba0: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
ebb0: 20 20 20 20 20 20 22 47 65 74 56 61 6c 75 65 22        "GetValue"
ebc0: 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20  , null, value), 
ebd0: 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a  out complete);..
ebe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
ebf0: 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20   (complete)..   
ec00: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ec10: 75 72 6e 20 76 61 6c 75 65 2e 56 61 6c 75 65 3b  urn value.Value;
ec20: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
ec30: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
ec40: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
ec50: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
ec60: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
ec70: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
ec80: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 56 61  n _keyInfo.GetVa
ec90: 6c 75 65 28 69 20 2d 20 50 72 69 76 61 74 65 56  lue(i - PrivateV
eca0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
ecb0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
ecc0: 4c 69 74 65 54 79 70 65 20 74 79 70 20 3d 20 47  LiteType typ = G
ecd0: 65 74 53 51 4c 69 74 65 54 79 70 65 28 5f 66 6c  etSQLiteType(_fl
ece0: 61 67 73 2c 20 69 29 3b 0d 0a 0d 0a 20 20 20 20  ags, i);....    
ecf0: 20 20 20 20 69 66 20 28 28 28 5f 66 6c 61 67 73      if (((_flags
ed00: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
ed10: 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63 74 54  ionFlags.DetectT
ed20: 65 78 74 41 66 66 69 6e 69 74 79 29 20 3d 3d 20  extAffinity) == 
ed30: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
ed40: 46 6c 61 67 73 2e 44 65 74 65 63 74 54 65 78 74  Flags.DetectText
ed50: 41 66 66 69 6e 69 74 79 29 20 26 26 0d 0a 20 20  Affinity) &&..  
ed60: 20 20 20 20 20 20 20 20 20 20 28 28 74 79 70 20            ((typ 
ed70: 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 74 79 70  == null) || (typ
ed80: 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70  .Affinity == Typ
ed90: 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 29 29  eAffinity.Text))
eda0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
edb0: 20 20 20 20 20 20 20 20 20 20 74 79 70 20 3d 20            typ = 
edc0: 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 0d 0a  GetSQLiteType(..
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ede0: 74 79 70 2c 20 5f 61 63 74 69 76 65 53 74 61 74  typ, _activeStat
edf0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65  ement._sql.GetTe
ee00: 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  xt(_activeStatem
ee10: 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 20  ent, i));..     
ee20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
ee30: 73 65 20 69 66 20 28 28 28 5f 66 6c 61 67 73 20  se if (((_flags 
ee40: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
ee50: 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63 74 53 74  onFlags.DetectSt
ee60: 72 69 6e 67 54 79 70 65 29 20 3d 3d 20 53 51 4c  ringType) == SQL
ee70: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
ee80: 67 73 2e 44 65 74 65 63 74 53 74 72 69 6e 67 54  gs.DetectStringT
ee90: 79 70 65 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ype) &&..       
eea0: 20 20 20 20 20 28 28 74 79 70 20 3d 3d 20 6e 75       ((typ == nu
eeb0: 6c 6c 29 20 7c 7c 20 53 51 4c 69 74 65 43 6f 6e  ll) || SQLiteCon
eec0: 76 65 72 74 2e 49 73 53 74 72 69 6e 67 44 62 54  vert.IsStringDbT
eed0: 79 70 65 28 74 79 70 2e 54 79 70 65 29 29 29 0d  ype(typ.Type))).
eee0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
eef0: 20 20 20 20 20 20 20 20 74 79 70 20 3d 20 47 65          typ = Ge
ef00: 74 53 51 4c 69 74 65 54 79 70 65 28 0d 0a 20 20  tSQLiteType(..  
ef10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
ef20: 70 2c 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  p, _activeStatem
ef30: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74  ent._sql.GetText
ef40: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
ef50: 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 20 20 20  t, i));..       
ef60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
ef70: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
ef80: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 56 61  ement._sql.GetVa
ef90: 6c 75 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  lue(_activeState
efa0: 6d 65 6e 74 2c 20 5f 66 6c 61 67 73 2c 20 69 2c  ment, _flags, i,
efb0: 20 74 79 70 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d   typ);..    }...
efc0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
efd0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  y>..    /// Retr
efe0: 65 69 76 65 73 20 74 68 65 20 76 61 6c 75 65 73  eives the values
eff0: 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6c   of multiple col
f000: 75 6d 6e 73 2c 20 75 70 20 74 6f 20 74 68 65 20  umns, up to the 
f010: 73 69 7a 65 20 6f 66 20 74 68 65 20 73 75 70 70  size of the supp
f020: 6c 69 65 64 20 61 72 72 61 79 0d 0a 20 20 20 20  lied array..    
f030: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
f040: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
f050: 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 54 68 65  ame="values">The
f060: 20 61 72 72 61 79 20 74 6f 20 66 69 6c 6c 20 77   array to fill w
f070: 69 74 68 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  ith values from 
f080: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  the columns in t
f090: 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c  he current resul
f0a0: 74 73 65 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  tset</param>..  
f0b0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
f0c0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
f0d0: 75 6d 6e 73 20 72 65 74 72 69 65 76 65 64 3c 2f  umns retrieved</
f0e0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
f0f0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e  blic override in
f100: 74 20 47 65 74 56 61 6c 75 65 73 28 6f 62 6a 65  t GetValues(obje
f110: 63 74 5b 5d 20 76 61 6c 75 65 73 29 0d 0a 20 20  ct[] values)..  
f120: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
f130: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
f140: 20 20 20 20 20 69 6e 74 20 6e 4d 61 78 20 3d 20       int nMax = 
f150: 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20  FieldCount;..   
f160: 20 20 20 69 66 20 28 76 61 6c 75 65 73 2e 4c 65     if (values.Le
f170: 6e 67 74 68 20 3c 20 6e 4d 61 78 29 20 6e 4d 61  ngth < nMax) nMa
f180: 78 20 3d 20 76 61 6c 75 65 73 2e 4c 65 6e 67 74  x = values.Lengt
f190: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20  h;....      for 
f1a0: 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20  (int n = 0; n < 
f1b0: 6e 4d 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20  nMax; n++)..    
f1c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 76 61 6c    {..        val
f1d0: 75 65 73 5b 6e 5d 20 3d 20 47 65 74 56 61 6c 75  ues[n] = GetValu
f1e0: 65 28 6e 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  e(n);..      }..
f1f0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ..      return n
f200: 4d 61 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  Max;..    }.... 
f210: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
f220: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
f230: 73 20 61 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 63  s a collection c
f240: 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 74 68  ontaining all th
f250: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  e column names a
f260: 6e 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  nd values for th
f270: 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65  e..    /// curre
f280: 6e 74 20 72 6f 77 20 6f 66 20 64 61 74 61 20 69  nt row of data i
f290: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65  n the current re
f2a0: 73 75 6c 74 73 65 74 2c 20 69 66 20 61 6e 79 2e  sultset, if any.
f2b0: 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
f2c0: 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e  ..    /// curren
f2d0: 74 20 72 6f 77 20 6f 72 20 6e 6f 20 63 75 72 72  t row or no curr
f2e0: 65 6e 74 20 72 65 73 75 6c 74 73 65 74 2c 20 61  ent resultset, a
f2f0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 6d 61 79 20  n exception may 
f300: 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20 20 20  be thrown...    
f310: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
f320: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
f330: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63  >..    /// The c
f340: 6f 6c 6c 65 63 74 69 6f 6e 20 63 6f 6e 74 61 69  ollection contai
f350: 6e 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ning the column 
f360: 6e 61 6d 65 20 61 6e 64 20 76 61 6c 75 65 20 69  name and value i
f370: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74  nformation for t
f380: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72  he..    /// curr
f390: 65 6e 74 20 72 6f 77 20 6f 66 20 64 61 74 61 20  ent row of data 
f3a0: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  in the current r
f3b0: 65 73 75 6c 74 73 65 74 20 6f 72 20 6e 75 6c 6c  esultset or null
f3c0: 20 69 66 20 74 68 69 73 20 69 6e 66 6f 72 6d 61   if this informa
f3d0: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 63 61  tion..    /// ca
f3e0: 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
f3f0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
f400: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
f410: 63 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65  c NameValueColle
f420: 63 74 69 6f 6e 20 47 65 74 56 61 6c 75 65 73 28  ction GetValues(
f430: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
f440: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
f450: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
f460: 20 28 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d   ((_activeStatem
f470: 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ent == null) || 
f480: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
f490: 74 2e 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 29  t._sql == null))
f4a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
f4b0: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
f4c0: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
f4d0: 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n();....        
f4e0: 69 6e 74 20 6e 4d 61 78 20 3d 20 50 72 69 76 61  int nMax = Priva
f4f0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
f500: 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 4e 61  unt;..        Na
f510: 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63 74 69 6f  meValueCollectio
f520: 6e 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 4e  n result = new N
f530: 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63 74 69  ameValueCollecti
f540: 6f 6e 28 6e 4d 61 78 29 3b 0d 0a 0d 0a 20 20 20  on(nMax);....   
f550: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20       for (int n 
f560: 3d 20 30 3b 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e  = 0; n < nMax; n
f570: 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ++)..        {..
f580: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
f590: 6e 67 20 6e 61 6d 65 20 3d 20 5f 61 63 74 69 76  ng name = _activ
f5a0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
f5b0: 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63 74 69  ColumnName(_acti
f5c0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e 29 3b  veStatement, n);
f5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
f5e0: 72 69 6e 67 20 76 61 6c 75 65 20 3d 20 5f 61 63  ring value = _ac
f5f0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
f600: 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69  ql.GetText(_acti
f610: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e 29 3b  veStatement, n);
f620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f630: 72 65 73 75 6c 74 2e 41 64 64 28 6e 61 6d 65 2c  result.Add(name,
f640: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
f650: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
f660: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
f670: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
f680: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
f690: 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75 65 20  // Returns True 
f6a0: 69 66 20 74 68 65 20 72 65 73 75 6c 74 73 65 74  if the resultset
f6b0: 20 68 61 73 20 72 6f 77 73 20 74 68 61 74 20 63   has rows that c
f6c0: 61 6e 20 62 65 20 66 65 74 63 68 65 64 0d 0a 20  an be fetched.. 
f6d0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
f6e0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
f6f0: 65 72 72 69 64 65 20 62 6f 6f 6c 20 48 61 73 52  erride bool HasR
f700: 6f 77 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ows..    {..    
f710: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
f720: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
f730: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
f740: 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b    CheckClosed();
f750: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  ....        //..
f760: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
f770: 20 49 66 20 74 68 65 20 22 73 74 69 63 6b 79 22   If the "sticky"
f780: 20 66 6c 61 67 20 68 61 73 20 62 65 65 6e 20 73   flag has been s
f790: 65 74 2c 20 75 73 65 20 74 68 65 20 6e 65 77 20  et, use the new 
f7a0: 62 65 68 61 76 69 6f 72 2c 0d 0a 20 20 20 20 20  behavior,..     
f7b0: 20 20 20 2f 2f 20 20 20 20 20 20 20 77 68 69 63     //       whic
f7c0: 68 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  h returns non-ze
f7d0: 72 6f 20 69 66 20 74 68 65 72 65 20 77 65 72 65  ro if there were
f7e0: 20 65 76 65 72 20 61 6e 79 20 72 6f 77 73 20 69   ever any rows i
f7f0: 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  n..        //   
f800: 20 20 20 20 74 68 65 20 61 73 73 6f 63 69 61 74      the associat
f810: 65 64 20 72 65 73 75 6c 74 20 73 65 74 73 2e 20  ed result sets. 
f820: 20 47 65 6e 65 72 61 6c 6c 79 2c 20 74 68 69 73   Generally, this
f830: 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 0d 0a 20   flag is only.. 
f840: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
f850: 75 73 65 66 75 6c 20 77 68 65 6e 20 69 74 20 69  useful when it i
f860: 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 72  s necessary to r
f870: 65 74 61 69 6e 20 63 6f 6d 70 61 74 69 62 69 6c  etain compatibil
f880: 69 74 79 20 77 69 74 68 0d 0a 20 20 20 20 20 20  ity with..      
f890: 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68 65 72    //       other
f8a0: 20 41 44 4f 2e 4e 45 54 20 70 72 6f 76 69 64 65   ADO.NET provide
f8b0: 72 73 20 74 68 61 74 20 75 73 65 20 74 68 65 73  rs that use thes
f8c0: 65 20 73 61 6d 65 20 73 65 6d 61 6e 74 69 63 73  e same semantics
f8d0: 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f   for..        //
f8e0: 20 20 20 20 20 20 20 74 68 65 20 48 61 73 52 6f         the HasRo
f8f0: 77 73 20 70 72 6f 70 65 72 74 79 2e 0d 0a 20 20  ws property...  
f900: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
f910: 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20    if ((_flags & 
f920: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f930: 46 6c 61 67 73 2e 53 74 69 63 6b 79 48 61 73 52  Flags.StickyHasR
f940: 6f 77 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ows) == SQLiteCo
f950: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 53 74  nnectionFlags.St
f960: 69 63 6b 79 48 61 73 52 6f 77 73 29 0d 0a 20 20  ickyHasRows)..  
f970: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
f980: 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 21  (_readingState !
f990: 3d 20 31 29 20 7c 7c 20 28 5f 73 74 65 70 43 6f  = 1) || (_stepCo
f9a0: 75 6e 74 20 3e 20 30 29 29 3b 0d 0a 0d 0a 20 20  unt > 0));....  
f9b0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
f9c0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
f9d0: 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  is the default b
f9e0: 65 68 61 76 69 6f 72 2e 20 20 49 74 20 72 65 74  ehavior.  It ret
f9f0: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e  urns non-zero on
fa00: 6c 79 20 69 66 0d 0a 20 20 20 20 20 20 20 20 2f  ly if..        /
fa10: 2f 20 20 20 20 20 20 20 6d 6f 72 65 20 72 6f 77  /       more row
fa20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
fa30: 28 69 2e 65 2e 20 61 20 63 61 6c 6c 20 74 6f 20  (i.e. a call to 
fa40: 74 68 65 20 52 65 61 64 20 6d 65 74 68 6f 64 20  the Read method 
fa50: 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  is..        //  
fa60: 20 20 20 20 20 65 78 70 65 63 74 65 64 20 74 6f       expected to
fa70: 20 73 75 63 63 65 65 64 29 2e 20 20 50 72 69 6f   succeed).  Prio
fa80: 72 20 74 6f 20 74 68 65 20 69 6e 74 72 6f 64 75  r to the introdu
fa90: 63 74 69 6f 6e 20 6f 66 20 74 68 65 0d 0a 20 20  ction of the..  
faa0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22        //       "
fab0: 73 74 69 63 6b 79 22 20 66 6c 61 67 2c 20 74 68  sticky" flag, th
fac0: 69 73 20 69 73 20 68 6f 77 20 74 68 69 73 20 70  is is how this p
fad0: 72 6f 70 65 72 74 79 20 68 61 73 20 61 6c 77 61  roperty has alwa
fae0: 79 73 20 77 6f 72 6b 65 64 2e 0d 0a 20 20 20 20  ys worked...    
faf0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
fb00: 72 65 74 75 72 6e 20 28 5f 72 65 61 64 69 6e 67  return (_reading
fb10: 53 74 61 74 65 20 21 3d 20 31 29 3b 0d 0a 20 20  State != 1);..  
fb20: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
fb30: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
fb40: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
fb50: 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20 64  ns True if the d
fb60: 61 74 61 20 72 65 61 64 65 72 20 69 73 20 63 6c  ata reader is cl
fb70: 6f 73 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  osed..    /// </
fb80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
fb90: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f  blic override bo
fba0: 6f 6c 20 49 73 43 6c 6f 73 65 64 0d 0a 20 20 20  ol IsClosed..   
fbb0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20   {..      get { 
fbc0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
fbd0: 20 72 65 74 75 72 6e 20 28 5f 63 6f 6d 6d 61 6e   return (_comman
fbe0: 64 20 3d 3d 20 6e 75 6c 6c 29 3b 20 7d 0d 0a 20  d == null); }.. 
fbf0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
fc00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
fc10: 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75 65 20  // Returns True 
fc20: 69 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  if the specified
fc30: 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 75 6c 6c 0d   column is null.
fc40: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
fc50: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
fc60: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
fc70: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
fc80: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
fc90: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
fca0: 54 72 75 65 20 6f 72 20 46 61 6c 73 65 3c 2f 72  True or False</r
fcb0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
fcc0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
fcd0: 6c 20 49 73 44 42 4e 75 6c 6c 28 69 6e 74 20 69  l IsDBNull(int i
fce0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
fcf0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
fd00: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
fd10: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
fd20: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
fd30: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
fd40: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
fd50: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
fd60: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
fd70: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 49 73 44 42 4e  n _keyInfo.IsDBN
fd80: 75 6c 6c 28 69 20 2d 20 50 72 69 76 61 74 65 56  ull(i - PrivateV
fd90: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
fda0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
fdb0: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
fdc0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4e 75 6c  ement._sql.IsNul
fdd0: 6c 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  l(_activeStateme
fde0: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
fdf0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
fe00: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d 6f 76  ry>..    /// Mov
fe10: 65 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72  es to the next r
fe20: 65 73 75 6c 74 73 65 74 20 69 6e 20 6d 75 6c 74  esultset in mult
fe30: 69 70 6c 65 20 72 6f 77 2d 72 65 74 75 72 6e 69  iple row-returni
fe40: 6e 67 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 0d  ng SQL command..
fe50: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
fe60: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
fe70: 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20 74 68  turns>True if th
fe80: 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 75  e command was su
fe90: 63 63 65 73 73 66 75 6c 20 61 6e 64 20 61 20 6e  ccessful and a n
fea0: 65 77 20 72 65 73 75 6c 74 73 65 74 20 69 73 20  ew resultset is 
feb0: 61 76 61 69 6c 61 62 6c 65 2c 20 46 61 6c 73 65  available, False
fec0: 20 6f 74 68 65 72 77 69 73 65 2e 3c 2f 72 65 74   otherwise.</ret
fed0: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
fee0: 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  c override bool 
fef0: 4e 65 78 74 52 65 73 75 6c 74 28 29 0d 0a 20 20  NextResult()..  
ff00: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
ff10: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
ff20: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
ff30: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 74 68  ;..      if (_th
ff40: 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29 20 53  rowOnDisposed) S
ff50: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43 68 65  QLiteCommand.Che
ff60: 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d  ck(_command);...
ff70: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61  .      SQLiteSta
ff80: 74 65 6d 65 6e 74 20 73 74 6d 74 20 3d 20 6e 75  tement stmt = nu
ff90: 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 66  ll;..      int f
ffa0: 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  ieldCount;..    
ffb0: 20 20 62 6f 6f 6c 20 73 63 68 65 6d 61 4f 6e 6c    bool schemaOnl
ffc0: 79 20 3d 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65  y = ((_commandBe
ffd0: 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64  havior & Command
ffe0: 42 65 68 61 76 69 6f 72 2e 53 63 68 65 6d 61 4f  Behavior.SchemaO
fff0: 6e 6c 79 29 20 21 3d 20 30 29 3b 0d 0a 0d 0a 20  nly) != 0);.... 
10000 20 20 20 20 20 77 68 69 6c 65 20 28 74 72 75 65       while (true
10010 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
10020 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d 3d 20      if (stmt == 
10030 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76 65 53  null && _activeS
10040 74 61 74 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c  tatement != null
10050 20 26 26 20 5f 61 63 74 69 76 65 53 74 61 74 65   && _activeState
10060 6d 65 6e 74 2e 5f 73 71 6c 20 21 3d 20 6e 75 6c  ment._sql != nul
10070 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74 61 74  l && _activeStat
10080 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4f 70 65  ement._sql.IsOpe
10090 6e 28 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  n())..        {.
100a0 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65  .          // Re
100b0 73 65 74 20 74 68 65 20 70 72 65 76 69 6f 75 73  set the previous
100c0 6c 79 2d 65 78 65 63 75 74 65 64 20 73 74 61 74  ly-executed stat
100d0 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  ement..         
100e0 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79   if (!schemaOnly
100f0 29 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  ) _activeStateme
10100 6e 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28 5f 61  nt._sql.Reset(_a
10110 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 29 3b  ctiveStatement);
10120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
10130 20 49 66 20 77 65 27 72 65 20 6f 6e 6c 79 20 73   If we're only s
10140 75 70 70 6f 73 65 64 20 74 6f 20 72 65 74 75 72  upposed to retur
10150 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 73 65  n a single rowse
10160 74 2c 20 73 74 65 70 20 74 68 72 6f 75 67 68 20  t, step through 
10170 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 73 74  all remaining st
10180 61 74 65 6d 65 6e 74 73 20 6f 6e 63 65 20 75 6e  atements once un
10190 74 69 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  til..          /
101a0 2f 20 74 68 65 79 20 61 72 65 20 61 6c 6c 20 64  / they are all d
101b0 6f 6e 65 20 61 6e 64 20 72 65 74 75 72 6e 20 66  one and return f
101c0 61 6c 73 65 20 74 6f 20 69 6e 64 69 63 61 74 65  alse to indicate
101d0 20 6e 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74 73   no more results
101e0 65 74 73 20 65 78 69 73 74 2e 0d 0a 20 20 20 20  ets exist...    
101f0 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d        if ((_comm
10200 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f  andBehavior & Co
10210 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 69  mmandBehavior.Si
10220 6e 67 6c 65 52 65 73 75 6c 74 29 20 21 3d 20 30  ngleResult) != 0
10230 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
10240 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
10250 28 3b 20 3b 20 29 0d 0a 20 20 20 20 20 20 20 20  (; ; )..        
10260 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10270 20 20 20 20 20 73 74 6d 74 20 3d 20 5f 63 6f 6d       stmt = _com
10280 6d 61 6e 64 2e 47 65 74 53 74 61 74 65 6d 65 6e  mand.GetStatemen
10290 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  t(_activeStateme
102a0 6e 74 49 6e 64 65 78 20 2b 20 31 29 3b 0d 0a 20  ntIndex + 1);.. 
102b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
102c0 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c 29 20 62  (stmt == null) b
102d0 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
102e0 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74       _activeStat
102f0 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b 0d 0a 0d  ementIndex++;...
10300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
10310 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 20 26  f (!schemaOnly &
10320 26 20 73 74 6d 74 2e 5f 73 71 6c 2e 53 74 65 70  & stmt._sql.Step
10330 28 73 74 6d 74 29 29 20 5f 73 74 65 70 43 6f 75  (stmt)) _stepCou
10340 6e 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  nt++;..         
10350 20 20 20 20 20 69 66 20 28 73 74 6d 74 2e 5f 73       if (stmt._s
10360 71 6c 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73  ql.ColumnCount(s
10370 74 6d 74 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20  tmt) == 0)..    
10380 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
103a0 20 63 68 61 6e 67 65 73 20 3d 20 30 3b 0d 0a 20   changes = 0;.. 
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
103c0 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 20 3d 20 66  ool readOnly = f
103d0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
103e0 20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 2e         if (stmt.
103f0 54 72 79 47 65 74 43 68 61 6e 67 65 73 28 72 65  TryGetChanges(re
10400 66 20 63 68 61 6e 67 65 73 2c 20 72 65 66 20 72  f changes, ref r
10410 65 61 64 4f 6e 6c 79 29 29 0d 0a 20 20 20 20 20  eadOnly))..     
10420 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10440 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a  if (!readOnly)..
10450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10460 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10470 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 72 6f           if (_ro
10480 77 73 41 66 66 65 63 74 65 64 20 3d 3d 20 2d 31  wsAffected == -1
10490 29 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20  ) _rowsAffected 
104a0 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
104b0 20 20 20 20 20 20 20 20 20 20 5f 72 6f 77 73 41            _rowsA
104c0 66 66 65 63 74 65 64 20 2b 3d 20 63 68 61 6e 67  ffected += chang
104d0 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es;..           
104e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
104f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
10510 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
10520 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10530 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
10540 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
10550 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10560 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
10570 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73 63           if (!sc
10580 68 65 6d 61 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f  hemaOnly) stmt._
10590 73 71 6c 2e 52 65 73 65 74 28 73 74 6d 74 29 3b  sql.Reset(stmt);
105a0 20 2f 2f 20 47 6f 74 74 61 20 72 65 73 65 74 20   // Gotta reset 
105b0 61 66 74 65 72 20 65 76 65 72 79 20 73 74 65 70  after every step
105c0 20 74 6f 20 72 65 6c 65 61 73 65 20 61 6e 79 20   to release any 
105d0 6c 6f 63 6b 73 20 61 6e 64 20 73 75 63 68 21 0d  locks and such!.
105e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
105f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10600 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
10610 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10620 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  }....        // 
10630 47 65 74 20 74 68 65 20 6e 65 78 74 20 73 74 61  Get the next sta
10640 74 65 6d 65 6e 74 20 74 6f 20 65 78 65 63 75 74  tement to execut
10650 65 0d 0a 20 20 20 20 20 20 20 20 73 74 6d 74 20  e..        stmt 
10660 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74 53 74  = _command.GetSt
10670 61 74 65 6d 65 6e 74 28 5f 61 63 74 69 76 65 53  atement(_activeS
10680 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 20 2b 20  tatementIndex + 
10690 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  1);....        /
106a0 2f 20 49 66 20 77 65 27 76 65 20 72 65 61 63 68  / If we've reach
106b0 65 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  ed the end of th
106c0 65 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 72 65  e statements, re
106d0 74 75 72 6e 20 66 61 6c 73 65 2c 20 6e 6f 20 6d  turn false, no m
106e0 6f 72 65 20 72 65 73 75 6c 74 73 65 74 73 0d 0a  ore resultsets..
106f0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74          if (stmt
10700 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
10710 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
10720 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e;....        //
10730 20 49 66 20 77 65 20 77 65 72 65 20 6f 6e 20 61   If we were on a
10740 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73   current results
10750 65 74 2c 20 73 65 74 20 74 68 65 20 73 74 61 74  et, set the stat
10760 65 20 74 6f 20 22 64 6f 6e 65 20 72 65 61 64 69  e to "done readi
10770 6e 67 22 20 66 6f 72 20 69 74 0d 0a 20 20 20 20  ng" for it..    
10780 20 20 20 20 69 66 20 28 5f 72 65 61 64 69 6e 67      if (_reading
10790 53 74 61 74 65 20 3c 20 31 29 0d 0a 20 20 20 20  State < 1)..    
107a0 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74        _readingSt
107b0 61 74 65 20 3d 20 31 3b 0d 0a 0d 0a 20 20 20 20  ate = 1;....    
107c0 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65      _activeState
107d0 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a  mentIndex++;....
107e0 20 20 20 20 20 20 20 20 66 69 65 6c 64 43 6f 75          fieldCou
107f0 6e 74 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 2e 43  nt = stmt._sql.C
10800 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29  olumnCount(stmt)
10810 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ;....        // 
10820 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
10830 20 69 73 20 6e 6f 74 20 61 20 73 65 6c 65 63 74   is not a select
10840 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 77 65   statement or we
10850 27 72 65 20 6e 6f 74 20 72 65 74 72 69 65 76 69  're not retrievi
10860 6e 67 20 73 63 68 65 6d 61 20 6f 6e 6c 79 2c 20  ng schema only, 
10870 74 68 65 6e 20 70 65 72 66 6f 72 6d 20 74 68 65  then perform the
10880 20 69 6e 69 74 69 61 6c 20 73 74 65 70 0d 0a 20   initial step.. 
10890 20 20 20 20 20 20 20 69 66 20 28 21 73 63 68 65         if (!sche
108a0 6d 61 4f 6e 6c 79 20 7c 7c 20 28 66 69 65 6c 64  maOnly || (field
108b0 43 6f 75 6e 74 20 3d 3d 20 30 29 29 0d 0a 20 20  Count == 0))..  
108c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
108d0 20 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e     if (!schemaOn
108e0 6c 79 20 26 26 20 73 74 6d 74 2e 5f 73 71 6c 2e  ly && stmt._sql.
108f0 53 74 65 70 28 73 74 6d 74 29 29 0d 0a 20 20 20  Step(stmt))..   
10900 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10910 20 20 20 20 20 20 5f 73 74 65 70 43 6f 75 6e 74        _stepCount
10920 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
10930 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d   _readingState =
10940 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   -1;..          
10950 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  }..          els
10960 65 20 69 66 20 28 66 69 65 6c 64 43 6f 75 6e 74  e if (fieldCount
10970 20 3d 3d 20 30 29 20 2f 2f 20 4e 6f 20 72 6f 77   == 0) // No row
10980 73 20 72 65 74 75 72 6e 65 64 2c 20 69 66 20 66  s returned, if f
10990 69 65 6c 64 43 6f 75 6e 74 20 69 73 20 7a 65 72  ieldCount is zer
109a0 6f 2c 20 73 6b 69 70 20 74 6f 20 74 68 65 20 6e  o, skip to the n
109b0 65 78 74 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20  ext statement.. 
109c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
109d0 20 20 20 20 20 20 20 20 69 6e 74 20 63 68 61 6e          int chan
109e0 67 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ges = 0;..      
109f0 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f        bool readO
10a00 6e 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  nly = false;..  
10a10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
10a20 6d 74 2e 54 72 79 47 65 74 43 68 61 6e 67 65 73  mt.TryGetChanges
10a30 28 72 65 66 20 63 68 61 6e 67 65 73 2c 20 72 65  (ref changes, re
10a40 66 20 72 65 61 64 4f 6e 6c 79 29 29 0d 0a 20 20  f readOnly))..  
10a50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10a60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
10a70 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20  readOnly)..     
10a80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10a90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10aa0 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d 3d  _rowsAffected ==
10ab0 20 2d 31 29 20 5f 72 6f 77 73 41 66 66 65 63 74   -1) _rowsAffect
10ac0 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  ed = 0;..       
10ad0 20 20 20 20 20 20 20 20 20 5f 72 6f 77 73 41 66           _rowsAf
10ae0 66 65 63 74 65 64 20 2b 3d 20 63 68 61 6e 67 65  fected += change
10af0 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
10b00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
10b10 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
10b20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
10b30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10b40 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
10b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
10b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
10b70 28 21 73 63 68 65 6d 61 4f 6e 6c 79 29 20 73 74  (!schemaOnly) st
10b80 6d 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28 73 74  mt._sql.Reset(st
10b90 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mt);..          
10ba0 20 20 63 6f 6e 74 69 6e 75 65 3b 20 2f 2f 20 53    continue; // S
10bb0 6b 69 70 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  kip this command
10bc0 20 61 6e 64 20 6d 6f 76 65 20 74 6f 20 74 68 65   and move to the
10bd0 20 6e 65 78 74 2c 20 69 74 20 77 61 73 20 6e 6f   next, it was no
10be0 74 20 61 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e  t a row-returnin
10bf0 67 20 72 65 73 75 6c 74 73 65 74 0d 0a 20 20 20  g resultset..   
10c00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10c10 20 20 20 20 65 6c 73 65 20 2f 2f 20 4e 6f 20 72      else // No r
10c20 6f 77 73 2c 20 66 69 65 6c 64 43 6f 75 6e 74 20  ows, fieldCount 
10c30 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 73 6f 20 73  is non-zero so s
10c40 74 6f 70 20 68 65 72 65 0d 0a 20 20 20 20 20 20  top here..      
10c50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10c60 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65     _readingState
10c70 20 3d 20 31 3b 20 2f 2f 20 54 68 69 73 20 63 6f   = 1; // This co
10c80 6d 6d 61 6e 64 20 72 65 74 75 72 6e 65 64 20 63  mmand returned c
10c90 6f 6c 75 6d 6e 73 20 62 75 74 20 6e 6f 20 72 6f  olumns but no ro
10ca0 77 73 2c 20 73 6f 20 72 65 74 75 72 6e 20 74 72  ws, so return tr
10cb0 75 65 2c 20 62 75 74 20 48 61 73 52 6f 77 73 20  ue, but HasRows 
10cc0 3d 20 66 61 6c 73 65 20 61 6e 64 20 52 65 61 64  = false and Read
10cd0 28 29 20 72 65 74 75 72 6e 73 20 66 61 6c 73 65  () returns false
10ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
10cf0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
10d00 20 20 20 20 2f 2f 20 41 68 68 2c 20 77 65 20 66      // Ahh, we f
10d10 6f 75 6e 64 20 61 20 72 6f 77 2d 72 65 74 75 72  ound a row-retur
10d20 6e 69 6e 67 20 72 65 73 75 6c 74 73 65 74 20 65  ning resultset e
10d30 6c 69 67 69 62 6c 65 20 74 6f 20 62 65 20 72 65  ligible to be re
10d40 74 75 72 6e 65 64 21 0d 0a 20 20 20 20 20 20 20  turned!..       
10d50 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
10d60 74 20 3d 20 73 74 6d 74 3b 0d 0a 20 20 20 20 20  t = stmt;..     
10d70 20 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74 20 3d     _fieldCount =
10d80 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20   fieldCount;..  
10d90 20 20 20 20 20 20 5f 66 69 65 6c 64 49 6e 64 65        _fieldInde
10da0 78 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f  xes = new Dictio
10db0 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74  nary<string, int
10dc0 3e 28 53 74 72 69 6e 67 43 6f 6d 70 61 72 65 72  >(StringComparer
10dd0 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
10de0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66  se);..        _f
10df0 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d 20  ieldTypeArray = 
10e00 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 5b 50  new SQLiteType[P
10e10 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
10e20 6c 64 43 6f 75 6e 74 5d 3b 0d 0a 0d 0a 20 20 20  ldCount];....   
10e30 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61       if ((_comma
10e40 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d  ndBehavior & Com
10e50 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 4b 65 79  mandBehavior.Key
10e60 49 6e 66 6f 29 20 21 3d 20 30 29 0d 0a 20 20 20  Info) != 0)..   
10e70 20 20 20 20 20 20 20 4c 6f 61 64 4b 65 79 49 6e         LoadKeyIn
10e80 66 6f 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  fo();....       
10e90 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
10ea0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
10eb0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
10ec0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
10ed0 20 6d 65 74 68 6f 64 20 61 74 74 65 6d 70 74 73   method attempts
10ee0 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 64 61   to query the da
10ef0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10f00 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
10f10 68 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 64  h..    /// the d
10f20 61 74 61 20 72 65 61 64 65 72 20 69 6e 20 75 73  ata reader in us
10f30 65 2e 20 20 49 66 20 74 68 65 20 75 6e 64 65 72  e.  If the under
10f40 6c 79 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6f 72  lying command or
10f50 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 0d 0a   connection is..
10f60 20 20 20 20 2f 2f 2f 20 75 6e 61 76 61 69 6c 61      /// unavaila
10f70 62 6c 65 2c 20 61 20 6e 75 6c 6c 20 76 61 6c 75  ble, a null valu
10f80 65 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e  e will be return
10f90 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ed...    /// </s
10fa0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
10fb0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
10fc0 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74 69  /// The connecti
10fd0 6f 6e 20 6f 62 6a 65 63 74 20 2d 4f 52 2d 20 6e  on object -OR- n
10fe0 75 6c 6c 20 69 66 20 69 74 20 69 73 20 75 6e 61  ull if it is una
10ff0 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 2f  vailable...    /
11000 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
11010 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
11020 69 63 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ic SQLiteConnect
11030 69 6f 6e 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f  ion GetConnectio
11040 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  n(..        SQLi
11050 74 65 44 61 74 61 52 65 61 64 65 72 20 64 61 74  teDataReader dat
11060 61 52 65 61 64 65 72 0d 0a 20 20 20 20 20 20 20  aReader..       
11070 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
11080 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
11090 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
110a0 66 20 28 64 61 74 61 52 65 61 64 65 72 20 21 3d  f (dataReader !=
110b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
110c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
110d0 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6d         SQLiteCom
110e0 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 64  mand command = d
110f0 61 74 61 52 65 61 64 65 72 2e 5f 63 6f 6d 6d 61  ataReader._comma
11100 6e 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  nd;....         
11110 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 6d 61         if (comma
11120 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nd != null)..   
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11150 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
11160 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
11170 3d 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63  = command.Connec
11180 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tion;....       
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
111a0 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e  (connection != n
111b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
111c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
111d0 74 75 72 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 3b  turn connection;
111e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
111f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
11200 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
11210 20 20 20 20 20 20 20 63 61 74 63 68 20 28 4f 62         catch (Ob
11220 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
11230 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ption)..        
11240 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
11250 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
11260 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11270 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
11280 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
11290 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
112a0 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
112b0 74 68 65 20 53 51 4c 69 74 65 54 79 70 65 20 66  the SQLiteType f
112c0 6f 72 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d  or a given colum
112d0 6e 20 61 6e 64 20 72 6f 77 20 76 61 6c 75 65 2e  n and row value.
112e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
112f0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
11300 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 6c 64 54 79  aram name="oldTy
11310 70 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  pe">..    /// Th
11320 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 69 74  e original SQLit
11330 65 54 79 70 65 20 73 74 72 75 63 74 75 72 65 2c  eType structure,
11340 20 62 61 73 65 64 20 6f 6e 6c 79 20 6f 6e 20 74   based only on t
11350 68 65 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20  he column...    
11360 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
11370 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
11380 65 3d 22 74 65 78 74 22 3e 0d 0a 20 20 20 20 2f  e="text">..    /
11390 2f 2f 20 54 68 65 20 74 65 78 74 75 61 6c 20 76  // The textual v
113a0 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  alue of the colu
113b0 6d 6e 20 66 6f 72 20 61 20 67 69 76 65 6e 20 72  mn for a given r
113c0 6f 77 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ow...    /// </p
113d0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
113e0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
113f0 2f 20 54 68 65 20 53 51 4c 69 74 65 54 79 70 65  / The SQLiteType
11400 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
11410 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
11420 0a 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c  .    private SQL
11430 69 74 65 54 79 70 65 20 47 65 74 53 51 4c 69 74  iteType GetSQLit
11440 65 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20  eType(..        
11450 53 51 4c 69 74 65 54 79 70 65 20 6f 6c 64 54 79  SQLiteType oldTy
11460 70 65 2c 20 2f 2a 20 50 41 53 53 2d 54 48 52 4f  pe, /* PASS-THRO
11470 55 47 48 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  UGH */..        
11480 73 74 72 69 6e 67 20 74 65 78 74 0d 0a 20 20 20  string text..   
11490 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
114a0 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69 74         if (SQLit
114b0 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69  eConvert.LooksLi
114c0 6b 65 4e 75 6c 6c 28 74 65 78 74 29 29 0d 0a 20  keNull(text)).. 
114d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
114e0 6e 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65  n new SQLiteType
114f0 28 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75  (TypeAffinity.Nu
11500 6c 6c 2c 20 44 62 54 79 70 65 2e 4f 62 6a 65 63  ll, DbType.Objec
11510 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  t);....        i
11520 66 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  f (SQLiteConvert
11530 2e 4c 6f 6f 6b 73 4c 69 6b 65 49 6e 74 36 34 28  .LooksLikeInt64(
11540 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20  text))..        
11550 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53      return new S
11560 51 4c 69 74 65 54 79 70 65 28 54 79 70 65 41 66  QLiteType(TypeAf
11570 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 20 44 62  finity.Int64, Db
11580 54 79 70 65 2e 49 6e 74 36 34 29 3b 0d 0a 0d 0a  Type.Int64);....
11590 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69          if (SQLi
115a0 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c  teConvert.LooksL
115b0 69 6b 65 44 6f 75 62 6c 65 28 74 65 78 74 29 29  ikeDouble(text))
115c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
115d0 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 54  turn new SQLiteT
115e0 79 70 65 28 54 79 70 65 41 66 66 69 6e 69 74 79  ype(TypeAffinity
115f0 2e 44 6f 75 62 6c 65 2c 20 44 62 54 79 70 65 2e  .Double, DbType.
11600 44 6f 75 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20  Double);....    
11610 20 20 20 20 69 66 20 28 28 5f 61 63 74 69 76 65      if ((_active
11620 53 74 61 74 65 6d 65 6e 74 20 21 3d 20 6e 75 6c  Statement != nul
11630 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  l) &&..         
11640 20 20 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74     SQLiteConvert
11650 2e 4c 6f 6f 6b 73 4c 69 6b 65 44 61 74 65 54 69  .LooksLikeDateTi
11660 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  me(_activeStatem
11670 65 6e 74 2e 5f 73 71 6c 2c 20 74 65 78 74 29 29  ent._sql, text))
11680 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
11690 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
116a0 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 28 54  new SQLiteType(T
116b0 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65  ypeAffinity.Date
116c0 54 69 6d 65 2c 20 44 62 54 79 70 65 2e 44 61 74  Time, DbType.Dat
116d0 65 54 69 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  eTime);..       
116e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
116f0 74 75 72 6e 20 6f 6c 64 54 79 70 65 3b 0d 0a 20  turn oldType;.. 
11700 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
11710 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
11720 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65  // Retrieves the
11730 20 53 51 4c 69 74 65 54 79 70 65 20 66 6f 72 20   SQLiteType for 
11740 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 2c 20  a given column, 
11750 61 6e 64 20 63 61 63 68 65 73 20 69 74 20 74 6f  and caches it to
11760 20 61 76 6f 69 64 20 72 65 70 65 74 65 74 69 76   avoid repetetiv
11770 65 20 69 6e 74 65 72 6f 70 20 63 61 6c 6c 73 2e  e interop calls.
11780 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
11790 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
117a0 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73  aram name="flags
117b0 22 3e 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f  ">The flags asso
117c0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
117d0 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f  parent connectio
117e0 6e 20 6f 62 6a 65 63 74 2e 3c 2f 70 61 72 61 6d  n object.</param
117f0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
11800 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
11810 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
11820 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
11830 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20   /// <returns>A 
11840 53 51 4c 69 74 65 54 79 70 65 20 73 74 72 75 63  SQLiteType struc
11850 74 75 72 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ture</returns>..
11860 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
11870 74 65 54 79 70 65 20 47 65 74 53 51 4c 69 74 65  teType GetSQLite
11880 54 79 70 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65  Type(SQLiteConne
11890 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
118a0 2c 20 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  , int i)..    {.
118b0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 54  .        SQLiteT
118c0 79 70 65 20 74 79 70 20 3d 20 5f 66 69 65 6c 64  ype typ = _field
118d0 54 79 70 65 41 72 72 61 79 5b 69 5d 3b 0d 0a 0d  TypeArray[i];...
118e0 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70  .        if (typ
118f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
11900 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11910 20 20 2f 2f 20 49 6e 69 74 69 61 6c 69 7a 65 20    // Initialize 
11920 74 68 69 73 20 63 6f 6c 75 6d 6e 27 73 20 66 69  this column's fi
11930 65 6c 64 20 74 79 70 65 20 69 6e 73 74 61 6e 63  eld type instanc
11940 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  e..            t
11950 79 70 20 3d 20 5f 66 69 65 6c 64 54 79 70 65 41  yp = _fieldTypeA
11960 72 72 61 79 5b 69 5d 20 3d 20 6e 65 77 20 53 51  rray[i] = new SQ
11970 4c 69 74 65 54 79 70 65 28 29 3b 0d 0a 20 20 20  LiteType();..   
11980 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11990 20 20 2f 2f 20 49 66 20 6e 6f 74 20 69 6e 69 74    // If not init
119a0 69 61 6c 69 7a 65 64 2c 20 74 68 65 6e 20 66 65  ialized, then fe
119b0 74 63 68 20 74 68 65 20 64 65 63 6c 61 72 65 64  tch the declared
119c0 20 63 6f 6c 75 6d 6e 20 64 61 74 61 74 79 70 65   column datatype
119d0 20 61 6e 64 20 61 74 74 65 6d 70 74 20 74 6f 20   and attempt to 
119e0 63 6f 6e 76 65 72 74 20 69 74 0d 0a 20 20 20 20  convert it..    
119f0 20 20 20 20 2f 2f 20 74 6f 20 61 20 6b 6e 6f 77      // to a know
11a00 6e 20 44 62 54 79 70 65 2e 0d 0a 20 20 20 20 20  n DbType...     
11a10 20 20 20 69 66 20 28 74 79 70 2e 41 66 66 69 6e     if (typ.Affin
11a20 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ity == TypeAffin
11a30 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65  ity.Uninitialize
11a40 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
11a50 20 20 20 20 20 20 20 20 20 20 20 74 79 70 2e 54             typ.T
11a60 79 70 65 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76  ype = SQLiteConv
11a70 65 72 74 2e 54 79 70 65 4e 61 6d 65 54 6f 44 62  ert.TypeNameToDb
11a80 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Type(..         
11a90 20 20 20 20 20 20 20 47 65 74 43 6f 6e 6e 65 63         GetConnec
11aa0 74 69 6f 6e 28 74 68 69 73 29 2c 20 5f 61 63 74  tion(this), _act
11ab0 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
11ac0 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 0d 0a 20  l.ColumnType(.. 
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
11ae0 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
11af0 20 69 2c 20 72 65 66 20 74 79 70 2e 41 66 66 69   i, ref typ.Affi
11b00 6e 69 74 79 29 2c 20 66 6c 61 67 73 29 3b 0d 0a  nity), flags);..
11b10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11b20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
11b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11b40 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 20 5f  typ.Affinity = _
11b50 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
11b60 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 41 66 66 69 6e  _sql.ColumnAffin
11b70 69 74 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ity(..          
11b80 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
11b90 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20  tement, i);..   
11ba0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11bb0 20 20 72 65 74 75 72 6e 20 74 79 70 3b 0d 0a 20    return typ;.. 
11bc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
11bd0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
11be0 2f 2f 20 52 65 61 64 73 20 74 68 65 20 6e 65 78  // Reads the nex
11bf0 74 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 72  t row from the r
11c00 65 73 75 6c 74 73 65 74 0d 0a 20 20 20 20 2f 2f  esultset..    //
11c10 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
11c20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
11c30 72 75 65 20 69 66 20 61 20 6e 65 77 20 72 6f 77  rue if a new row
11c40 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 6c   was successfull
11c50 79 20 6c 6f 61 64 65 64 20 61 6e 64 20 69 73 20  y loaded and is 
11c60 72 65 61 64 79 20 66 6f 72 20 70 72 6f 63 65 73  ready for proces
11c70 73 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  sing</returns>..
11c80 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
11c90 69 64 65 20 62 6f 6f 6c 20 52 65 61 64 28 29 0d  ide bool Read().
11ca0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68  .    {..      Ch
11cb0 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
11cc0 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65        CheckClose
11cd0 64 28 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  d();..      if (
11ce0 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
11cf0 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  ) SQLiteCommand.
11d00 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b  Check(_command);
11d10 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28 5f  ....      if ((_
11d20 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20  commandBehavior 
11d30 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  & CommandBehavio
11d40 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29 20 21 3d  r.SchemaOnly) !=
11d50 20 30 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74   0)..        ret
11d60 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
11d70 20 20 20 20 69 66 20 28 5f 72 65 61 64 69 6e 67      if (_reading
11d80 53 74 61 74 65 20 3d 3d 20 2d 31 29 20 2f 2f 20  State == -1) // 
11d90 46 69 72 73 74 20 73 74 65 70 20 77 61 73 20 61  First step was a
11da0 6c 72 65 61 64 79 20 64 6f 6e 65 20 61 74 20 74  lready done at t
11db0 68 65 20 4e 65 78 74 52 65 73 75 6c 74 28 29 20  he NextResult() 
11dc0 6c 65 76 65 6c 2c 20 73 6f 20 64 6f 6e 27 74 20  level, so don't 
11dd0 73 74 65 70 20 61 67 61 69 6e 2c 20 6a 75 73 74  step again, just
11de0 20 72 65 74 75 72 6e 20 74 72 75 65 2e 0d 0a 20   return true... 
11df0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11e00 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20  _readingState = 
11e10 30 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  0;..        retu
11e20 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
11e30 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  }..      else if
11e40 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20   (_readingState 
11e50 3d 3d 20 30 29 20 2f 2f 20 41 63 74 69 76 65 6c  == 0) // Activel
11e60 79 20 72 65 61 64 69 6e 67 20 72 6f 77 73 0d 0a  y reading rows..
11e70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11e80 20 2f 2f 20 44 6f 6e 27 74 20 72 65 61 64 20 61   // Don't read a
11e90 20 6e 65 77 20 72 6f 77 20 69 66 20 74 68 65 20   new row if the 
11ea0 63 6f 6d 6d 61 6e 64 20 62 65 68 61 76 69 6f 72  command behavior
11eb0 20 64 69 63 74 61 74 65 73 20 53 69 6e 67 6c 65   dictates Single
11ec0 52 6f 77 2e 20 20 57 65 27 76 65 20 61 6c 72 65  Row.  We've alre
11ed0 61 64 79 20 72 65 61 64 20 74 68 65 20 66 69 72  ady read the fir
11ee0 73 74 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20 20  st row...       
11ef0 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65   if ((_commandBe
11f00 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64  havior & Command
11f10 42 65 68 61 76 69 6f 72 2e 53 69 6e 67 6c 65 52  Behavior.SingleR
11f20 6f 77 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  ow) == 0)..     
11f30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11f40 69 66 20 28 5f 61 63 74 69 76 65 53 74 61 74 65  if (_activeState
11f50 6d 65 6e 74 2e 5f 73 71 6c 2e 53 74 65 70 28 5f  ment._sql.Step(_
11f60 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 29  activeStatement)
11f70 20 3d 3d 20 74 72 75 65 29 0d 0a 20 20 20 20 20   == true)..     
11f80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11f90 20 20 20 20 5f 73 74 65 70 43 6f 75 6e 74 2b 2b      _stepCount++
11fa0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11fb0 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
11fc0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
11fd0 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 52        _keyInfo.R
11fe0 65 73 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  eset();....     
11ff0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
12000 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ue;..          }
12010 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
12020 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53         _readingS
12030 74 61 74 65 20 3d 20 31 3b 20 2f 2f 20 46 69 6e  tate = 1; // Fin
12040 69 73 68 65 64 20 72 65 61 64 69 6e 67 20 72 6f  ished reading ro
12050 77 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ws..      }.... 
12060 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
12070 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
12080 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
12090 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
120a0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
120b0 77 73 20 61 66 66 65 63 74 65 64 20 62 79 20 74  ws affected by t
120c0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
120d0 6e 67 20 65 78 65 63 75 74 65 64 2e 0d 0a 20 20  ng executed...  
120e0 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20    /// The value 
120f0 72 65 74 75 72 6e 65 64 20 6d 61 79 20 6e 6f 74  returned may not
12100 20 62 65 20 61 63 63 75 72 61 74 65 20 66 6f 72   be accurate for
12110 20 44 44 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   DDL statements.
12120 20 20 41 6c 73 6f 2c 20 69 74 0d 0a 20 20 20 20    Also, it..    
12130 2f 2f 2f 20 77 69 6c 6c 20 62 65 20 2d 31 20 66  /// will be -1 f
12140 6f 72 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74  or any statement
12150 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 6d   that does not m
12160 6f 64 69 66 79 20 74 68 65 20 64 61 74 61 62 61  odify the databa
12170 73 65 20 28 65 2e 67 2e 0d 0a 20 20 20 20 2f 2f  se (e.g...    //
12180 2f 20 53 45 4c 45 43 54 29 2e 20 20 49 66 20 61  / SELECT).  If a
12190 6e 20 6f 74 68 65 72 77 69 73 65 20 72 65 61 64  n otherwise read
121a0 2d 6f 6e 6c 79 20 73 74 61 74 65 6d 65 6e 74 20  -only statement 
121b0 6d 6f 64 69 66 69 65 73 20 74 68 65 20 64 61 74  modifies the dat
121c0 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 69  abase..    /// i
121d0 6e 64 69 72 65 63 74 6c 79 20 28 65 2e 67 2e 20  ndirectly (e.g. 
121e0 76 69 61 20 61 20 76 69 72 74 75 61 6c 20 74 61  via a virtual ta
121f0 62 6c 65 20 6f 72 20 75 73 65 72 2d 64 65 66 69  ble or user-defi
12200 6e 65 64 20 66 75 6e 63 74 69 6f 6e 29 2c 20 74  ned function), t
12210 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75  he..    /// valu
12220 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e  e returned is un
12230 64 65 66 69 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f  defined...    //
12240 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
12250 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
12260 65 20 69 6e 74 20 52 65 63 6f 72 64 73 41 66 66  e int RecordsAff
12270 65 63 74 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20  ected..    {..  
12280 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
12290 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
122a0 6e 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 3b  n _rowsAffected;
122b0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
122c0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
122d0 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72 20      /// Indexer 
122e0 74 6f 20 72 65 74 72 69 65 76 65 20 64 61 74 61  to retrieve data
122f0 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 67   from a column g
12300 69 76 65 6e 20 69 74 73 20 6e 61 6d 65 0d 0a 20  iven its name.. 
12310 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
12320 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
12330 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 54 68  m name="name">Th
12340 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  e name of the co
12350 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
12360 20 64 61 74 61 20 66 6f 72 3c 2f 70 61 72 61 6d   data for</param
12370 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
12380 72 6e 73 3e 54 68 65 20 76 61 6c 75 65 20 63 6f  rns>The value co
12390 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63  ntained in the c
123a0 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d  olumn</returns>.
123b0 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
123c0 72 69 64 65 20 6f 62 6a 65 63 74 20 74 68 69 73  ride object this
123d0 5b 73 74 72 69 6e 67 20 6e 61 6d 65 5d 0d 0a 20  [string name].. 
123e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20     {..      get 
123f0 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
12400 29 3b 20 72 65 74 75 72 6e 20 47 65 74 56 61 6c  ); return GetVal
12410 75 65 28 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61  ue(GetOrdinal(na
12420 6d 65 29 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a  me)); }..    }..
12430 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
12440 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 64  ry>..    /// Ind
12450 65 78 65 72 20 74 6f 20 72 65 74 72 69 65 76 65  exer to retrieve
12460 20 64 61 74 61 20 66 72 6f 6d 20 61 20 63 6f 6c   data from a col
12470 75 6d 6e 20 67 69 76 65 6e 20 69 74 73 20 69 0d  umn given its i.
12480 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
12490 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
124a0 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
124b0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
124c0 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
124d0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
124e0 54 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  The value contai
124f0 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ned in the colum
12500 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  n</returns>..   
12510 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
12520 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 69 6e 74   object this[int
12530 20 69 5d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i]..    {..    
12540 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
12550 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
12560 47 65 74 56 61 6c 75 65 28 69 29 3b 20 7d 0d 0a  GetValue(i); }..
12570 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
12580 76 61 74 65 20 76 6f 69 64 20 4c 6f 61 64 4b 65  vate void LoadKe
12590 79 49 6e 66 6f 28 29 0d 0a 20 20 20 20 7b 0d 0a  yInfo()..    {..
125a0 20 20 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79          if (_key
125b0 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
125c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
125d0 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 44        _keyInfo.D
125e0 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
125f0 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 20         _keyInfo 
12600 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
12610 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 6b   }....        _k
12620 65 79 49 6e 66 6f 20 3d 20 6e 65 77 20 53 51 4c  eyInfo = new SQL
12630 69 74 65 4b 65 79 52 65 61 64 65 72 28 5f 63 6f  iteKeyReader(_co
12640 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
12650 2c 20 74 68 69 73 2c 20 5f 61 63 74 69 76 65 53  , this, _activeS
12660 74 61 74 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20  tatement);..    
12670 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a                 }..  }..}..