System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 1f21d1c016358ae06de90a4efddb9757be0e8a0c:


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 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66   TypeAffinity af
30d0: 66 69 6e 69 74 79 20 3d 20 47 65 74 53 51 4c 69  finity = GetSQLi
30e0: 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 69  teType(_flags, i
30f0: 29 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 0d 0a 20  ).Affinity;.... 
3100: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61         switch (a
3110: 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20  ffinity)..      
3120: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3130: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
3140: 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
3150: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
3160: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74  yp == DbType.Int
3170: 36 34 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  64) return affin
3180: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3190: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
31a0: 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29 20 72   DbType.Int32) r
31b0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
31c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31d0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
31e0: 70 65 2e 49 6e 74 31 36 29 20 72 65 74 75 72 6e  pe.Int16) return
31f0: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3200: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3210: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 79  typ == DbType.By
3220: 74 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  te) return affin
3230: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3240: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
3250: 20 44 62 54 79 70 65 2e 53 42 79 74 65 29 20 72   DbType.SByte) r
3260: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3280: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3290: 70 65 2e 42 6f 6f 6c 65 61 6e 29 20 72 65 74 75  pe.Boolean) retu
32a0: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20  rn affinity;..  
32b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
32c0: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
32d0: 44 61 74 65 54 69 6d 65 29 20 72 65 74 75 72 6e  DateTime) return
32e0: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3300: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 6f  typ == DbType.Do
3310: 75 62 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66  uble) return aff
3320: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3330: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3340: 3d 3d 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65  == DbType.Single
3350: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
3360: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
3370: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
3380: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72  bType.Decimal) r
3390: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
33a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33b0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
33c0: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
33d0: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a  finity.Double:..
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f0: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3400: 65 2e 44 6f 75 62 6c 65 29 20 72 65 74 75 72 6e  e.Double) return
3410: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3420: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3430: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 69  typ == DbType.Si
3440: 6e 67 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66  ngle) return aff
3450: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3460: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3470: 3d 3d 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61  == DbType.Decima
3480: 6c 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  l) return affini
3490: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
34a0: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
34b0: 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29  DbType.DateTime)
34c0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
34d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
34e0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
34f0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
3500: 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0d 0a  Affinity.Text:..
3510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3520: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3530: 65 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e  e.String) return
3540: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3550: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3560: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 47 75  typ == DbType.Gu
3570: 69 64 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  id) return affin
3580: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3590: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
35a0: 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65   DbType.DateTime
35b0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
35c0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
35d0: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
35e0: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72  bType.Decimal) r
35f0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3610: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
3620: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
3630: 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
3640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
3650: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
3660: 47 75 69 64 29 20 72 65 74 75 72 6e 20 61 66 66  Guid) return aff
3670: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3680: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3690: 3d 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79  == DbType.Binary
36a0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
36b0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
36c0: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
36d0: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 20 72 65  bType.String) re
36e0: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a  turn affinity;..
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3700: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
3710: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 68 72  }....        thr
3720: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 43 61  ow new InvalidCa
3730: 73 74 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  stException();..
3740: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
3750: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3760: 2f 2f 2f 20 49 6e 76 6f 6b 65 73 20 74 68 65 20  /// Invokes the 
3770: 64 61 74 61 20 72 65 61 64 65 72 20 76 61 6c 75  data reader valu
3780: 65 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 66 69  e callback confi
3790: 67 75 72 65 64 20 66 6f 72 20 74 68 65 20 64 61  gured for the da
37a0: 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20  tabase..    /// 
37b0: 74 79 70 65 20 6e 61 6d 65 20 61 73 73 6f 63 69  type name associ
37c0: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70  ated with the sp
37d0: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 20  ecified column. 
37e0: 20 49 66 20 6e 6f 20 64 61 74 61 20 72 65 61 64   If no data read
37f0: 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75  er..    /// valu
3800: 65 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 61 76  e callback is av
3810: 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
3820: 64 61 74 61 62 61 73 65 20 74 79 70 65 20 6e 61  database type na
3830: 6d 65 2c 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d  me, do nothing..
3840: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3850: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
3860: 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22  ram name="index"
3870: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 69  >..    /// The i
3880: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
3890: 6d 6e 20 62 65 69 6e 67 20 72 65 61 64 2e 0d 0a  mn being read...
38a0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
38b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
38c0: 20 6e 61 6d 65 3d 22 65 76 65 6e 74 41 72 67 73   name="eventArgs
38d0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
38e0: 65 78 74 72 61 20 65 76 65 6e 74 20 64 61 74 61  extra event data
38f0: 20 74 6f 20 70 61 73 73 20 69 6e 74 6f 20 74 68   to pass into th
3900: 65 20 63 61 6c 6c 62 61 63 6b 2e 0d 0a 20 20 20  e callback...   
3910: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
3920: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3930: 6d 65 3d 22 63 6f 6d 70 6c 65 74 65 22 3e 0d 0a  me="complete">..
3940: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
3950: 20 69 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   if the default 
3960: 68 61 6e 64 6c 69 6e 67 20 66 6f 72 20 74 68 65  handling for the
3970: 20 64 61 74 61 20 72 65 61 64 65 72 20 63 61 6c   data reader cal
3980: 6c 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20  l should be..   
3990: 20 2f 2f 2f 20 73 6b 69 70 70 65 64 2e 20 20 49   /// skipped.  I
39a0: 66 20 74 68 69 73 20 69 73 20 73 65 74 20 74 6f  f this is set to
39b0: 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 74 68   non-zero and th
39c0: 65 20 6e 65 63 65 73 73 61 72 79 20 72 65 74 75  e necessary retu
39d0: 72 6e 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f  rn value..    //
39e0: 2f 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  / is unavailable
39f0: 20 6f 72 20 75 6e 73 75 69 74 61 62 6c 65 2c 20   or unsuitable, 
3a00: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 69 6c  an exception wil
3a10: 6c 20 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20  l be thrown...  
3a20: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
3a30: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
3a40: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
3a50: 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20  Callback(..     
3a60: 20 20 20 69 6e 74 20 69 6e 64 65 78 2c 0d 0a 20     int index,.. 
3a70: 20 20 20 20 20 20 20 53 51 4c 69 74 65 52 65 61         SQLiteRea
3a80: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 20  dValueEventArgs 
3a90: 65 76 65 6e 74 41 72 67 73 2c 0d 0a 20 20 20 20  eventArgs,..    
3aa0: 20 20 20 20 6f 75 74 20 62 6f 6f 6c 20 63 6f 6d      out bool com
3ab0: 70 6c 65 74 65 0d 0a 20 20 20 20 20 20 20 20 29  plete..        )
3ac0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
3ad0: 20 63 6f 6d 70 6c 65 74 65 20 3d 20 66 61 6c 73   complete = fals
3ae0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 6c 61  e;..        _fla
3af0: 67 73 20 26 3d 20 7e 53 51 4c 69 74 65 43 6f 6e  gs &= ~SQLiteCon
3b00: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
3b10: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
3b20: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 3b 0d 0a 0d  lueCallbacks;...
3b30: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
3b40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3b50: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
3b60: 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ction connection
3b70: 20 3d 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e   = GetConnection
3b80: 28 74 68 69 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  (this);....     
3b90: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65         if (conne
3ba0: 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ction == null)..
3bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bc0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
3bd0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79         string ty
3be0: 70 65 4e 61 6d 65 20 3d 20 47 65 74 44 61 74 61  peName = GetData
3bf0: 54 79 70 65 4e 61 6d 65 28 69 6e 64 65 78 29 3b  TypeName(index);
3c00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3c10: 69 66 20 28 74 79 70 65 4e 61 6d 65 20 3d 3d 20  if (typeName == 
3c20: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3c30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
3c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
3c50: 4c 69 74 65 54 79 70 65 43 61 6c 6c 62 61 63 6b  LiteTypeCallback
3c60: 73 20 63 61 6c 6c 62 61 63 6b 73 3b 0d 0a 0d 0a  s callbacks;....
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3c80: 21 63 6f 6e 6e 65 63 74 69 6f 6e 2e 54 72 79 47  !connection.TryG
3c90: 65 74 54 79 70 65 43 61 6c 6c 62 61 63 6b 73 28  etTypeCallbacks(
3ca0: 74 79 70 65 4e 61 6d 65 2c 20 6f 75 74 20 63 61  typeName, out ca
3cb0: 6c 6c 62 61 63 6b 73 29 20 7c 7c 0d 0a 20 20 20  llbacks) ||..   
3cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61               (ca
3cd0: 6c 6c 62 61 63 6b 73 20 3d 3d 20 6e 75 6c 6c 29  llbacks == null)
3ce0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3d00: 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20    return;..     
3d10: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3d20: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 52 65          SQLiteRe
3d30: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 20  adValueCallback 
3d40: 63 61 6c 6c 62 61 63 6b 20 3d 20 63 61 6c 6c 62  callback = callb
3d50: 61 63 6b 73 2e 52 65 61 64 56 61 6c 75 65 43 61  acks.ReadValueCa
3d60: 6c 6c 62 61 63 6b 3b 0d 0a 20 20 20 20 20 20 20  llback;..       
3d70: 20 20 20 20 20 6f 62 6a 65 63 74 20 75 73 65 72       object user
3d80: 44 61 74 61 20 3d 20 63 61 6c 6c 62 61 63 6b 73  Data = callbacks
3d90: 2e 52 65 61 64 56 61 6c 75 65 55 73 65 72 44 61  .ReadValueUserDa
3da0: 74 61 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ta;....         
3db0: 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20     if (callback 
3dc0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
3dd0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3de0: 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63           callbac
3df0: 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
3e00: 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
3e10: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2c 20 74  tatement._sql, t
3e20: 68 69 73 2c 20 5f 66 6c 61 67 73 2c 20 65 76 65  his, _flags, eve
3e30: 6e 74 41 72 67 73 2c 20 69 6e 64 65 78 2c 0d 0a  ntArgs, index,..
3e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e50: 20 20 20 20 75 73 65 72 44 61 74 61 2c 20 6f 75      userData, ou
3e60: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 20 2f 2a 20  t complete); /* 
3e70: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
3e80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3e90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
3ea0: 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lly..        {..
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 6c 61              _fla
3ec0: 67 73 20 7c 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  gs |= SQLiteConn
3ed0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
3ee0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
3ef0: 75 65 43 61 6c 6c 62 61 63 6b 73 3b 0d 0a 20 20  ueCallbacks;..  
3f00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3f10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3f20: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
3f30: 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d  rieves the colum
3f40: 6e 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76  n as a boolean v
3f50: 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  alue..    /// </
3f60: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
3f70: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
3f80: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
3f90: 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
3fa0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
3fb0: 75 72 6e 73 3e 62 6f 6f 6c 3c 2f 72 65 74 75 72  urns>bool</retur
3fc0: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
3fd0: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 47 65  override bool Ge
3fe0: 74 42 6f 6f 6c 65 61 6e 28 69 6e 74 20 69 29 0d  tBoolean(int i).
3ff0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4000: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
4010: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
4020: 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  ForGet();....   
4030: 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73       if ((_flags
4040: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
4050: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
4060: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
4070: 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c  allbacks) == SQL
4080: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
4090: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
40a0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
40b0: 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ks)..        {..
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
40d0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
40e0: 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51  e value = new SQ
40f0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
4100: 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue();..        
4110: 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74      bool complet
4120: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
4130: 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75    InvokeReadValu
4140: 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77  eCallback(i, new
4150: 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65   SQLiteReadValue
4160: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
4170: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
4180: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
4190: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
41a0: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
41b0: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
41c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
41d0: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
41e0: 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 20 3d 3d 20  BooleanValue == 
41f0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4200: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
4210: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
4220: 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 62 6f  tion("missing bo
4230: 6f 6c 65 61 6e 20 72 65 74 75 72 6e 20 76 61 6c  olean return val
4240: 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ue");....       
4250: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4260: 28 62 6f 6f 6c 29 76 61 6c 75 65 2e 42 6f 6f 6c  (bool)value.Bool
4270: 65 61 6e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  eanValue;..     
4280: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4290: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
42a0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
42b0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
42c0: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
42d0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
42e0: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
42f0: 66 6f 2e 47 65 74 42 6f 6f 6c 65 61 6e 28 69 20  fo.GetBoolean(i 
4300: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
4310: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
4320: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79          VerifyTy
4330: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42 6f 6f  pe(i, DbType.Boo
4340: 6c 65 61 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  lean);..        
4350: 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54  return Convert.T
4360: 6f 42 6f 6f 6c 65 61 6e 28 47 65 74 56 61 6c 75  oBoolean(GetValu
4370: 65 28 69 29 2c 20 43 75 6c 74 75 72 65 49 6e 66  e(i), CultureInf
4380: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
4390: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
43a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
43b0: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
43c0: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
43d0: 61 20 73 69 6e 67 6c 65 20 62 79 74 65 20 76 61  a single byte va
43e0: 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  lue..    /// </s
43f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4400: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
4410: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
4420: 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d  e column.</param
4430: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
4440: 72 6e 73 3e 62 79 74 65 3c 2f 72 65 74 75 72 6e  rns>byte</return
4450: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
4460: 76 65 72 72 69 64 65 20 62 79 74 65 20 47 65 74  verride byte Get
4470: 42 79 74 65 28 69 6e 74 20 69 29 0d 0a 20 20 20  Byte(int i)..   
4480: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
4490: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
44a0: 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47        VerifyForG
44b0: 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  et();....       
44c0: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
44d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
44e0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
44f0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
4500: 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43  acks) == SQLiteC
4510: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
4520: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
4530: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d  ValueCallbacks).
4540: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4550: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
4560: 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61  taReaderValue va
4570: 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  lue = new SQLite
4580: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28  DataReaderValue(
4590: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
45a0: 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a  bool complete;..
45b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
45c0: 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c  vokeReadValueCal
45d0: 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c  lback(i, new SQL
45e0: 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e  iteReadValueEven
45f0: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
4600: 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 76 61          null, va
4610: 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65  lue), out comple
4620: 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
4630: 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65      if (complete
4640: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
4650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4660: 20 20 69 66 20 28 76 61 6c 75 65 2e 42 79 74 65    if (value.Byte
4670: 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Value == null)..
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4690: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
46a0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d  LiteException("m
46b0: 69 73 73 69 6e 67 20 62 79 74 65 20 72 65 74 75  issing byte retu
46c0: 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  rn value");.... 
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
46e0: 65 74 75 72 6e 20 28 62 79 74 65 29 76 61 6c 75  eturn (byte)valu
46f0: 65 2e 42 79 74 65 56 61 6c 75 65 3b 0d 0a 20 20  e.ByteValue;..  
4700: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4710: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4720: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
4730: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
4740: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
4750: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
4760: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
4770: 79 49 6e 66 6f 2e 47 65 74 42 79 74 65 28 69 20  yInfo.GetByte(i 
4780: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
4790: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
47a0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79          VerifyTy
47b0: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42 79 74  pe(i, DbType.Byt
47c0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
47d0: 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42 79  urn Convert.ToBy
47e0: 74 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  te(_activeStatem
47f0: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 33  ent._sql.GetInt3
4800: 32 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  2(_activeStateme
4810: 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d  nt, i));..    }.
4820: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
4830: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
4840: 74 72 69 65 76 65 73 20 61 20 63 6f 6c 75 6d 6e  trieves a column
4850: 20 61 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20   as an array of 
4860: 62 79 74 65 73 20 28 62 6c 6f 62 29 0d 0a 20 20  bytes (blob)..  
4870: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
4880: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
4890: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
48a0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
48b0: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
48c0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
48d0: 22 66 69 65 6c 64 4f 66 66 73 65 74 22 3e 54 68  "fieldOffset">Th
48e0: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64  e zero-based ind
48f0: 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62  ex of where to b
4900: 65 67 69 6e 20 72 65 61 64 69 6e 67 20 74 68 65  egin reading the
4910: 20 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0d 0a 20   data</param>.. 
4920: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
4930: 6d 65 3d 22 62 75 66 66 65 72 22 3e 54 68 65 20  me="buffer">The 
4940: 62 75 66 66 65 72 20 74 6f 20 77 72 69 74 65 20  buffer to write 
4950: 74 68 65 20 62 79 74 65 73 20 69 6e 74 6f 3c 2f  the bytes into</
4960: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
4970: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66  <param name="buf
4980: 66 65 72 6f 66 66 73 65 74 22 3e 54 68 65 20 7a  feroffset">The z
4990: 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20  ero-based index 
49a0: 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65 67 69  of where to begi
49b0: 6e 20 77 72 69 74 69 6e 67 20 69 6e 74 6f 20 74  n writing into t
49c0: 68 65 20 61 72 72 61 79 3c 2f 70 61 72 61 6d 3e  he array</param>
49d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
49e0: 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 54   name="length">T
49f0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
4a00: 65 73 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  es to retrieve</
4a10: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
4a20: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 61 63 74  <returns>The act
4a30: 75 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  ual number of by
4a40: 74 65 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f  tes written into
4a50: 20 74 68 65 20 61 72 72 61 79 3c 2f 72 65 74 75   the array</retu
4a60: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  rns>..    /// <r
4a70: 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f  emarks>..    ///
4a80: 20 54 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   To determine th
4a90: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
4aa0: 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2c  s in the column,
4ab0: 20 70 61 73 73 20 61 20 6e 75 6c 6c 20 76 61 6c   pass a null val
4ac0: 75 65 20 66 6f 72 20 74 68 65 20 62 75 66 66 65  ue for the buffe
4ad0: 72 2e 20 20 54 68 65 20 74 6f 74 61 6c 20 6c 65  r.  The total le
4ae0: 6e 67 74 68 20 77 69 6c 6c 20 62 65 20 72 65 74  ngth will be ret
4af0: 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  urned...    /// 
4b00: 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20  </remarks>..    
4b10: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
4b20: 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28 69 6e  long GetBytes(in
4b30: 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65 6c 64 4f  t i, long fieldO
4b40: 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 75  ffset, byte[] bu
4b50: 66 66 65 72 2c 20 69 6e 74 20 62 75 66 66 65 72  ffer, int buffer
4b60: 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c 65 6e 67  offset, int leng
4b70: 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
4b80: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
4b90: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
4ba0: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
4bb0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
4bc0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
4bd0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
4be0: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
4bf0: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
4c00: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
4c10: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
4c20: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
4c30: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
4c40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4c50: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
4c60: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
4c70: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
4c80: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
4c90: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
4ca0: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
4cb0: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
4cc0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
4cd0: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
4ce0: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d00: 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 41 72  new SQLiteReadAr
4d10: 72 61 79 45 76 65 6e 74 41 72 67 73 28 66 69 65  rayEventArgs(fie
4d20: 6c 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65 72  ldOffset, buffer
4d30: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4d40: 20 20 20 20 20 20 20 62 75 66 66 65 72 6f 66 66         bufferoff
4d50: 73 65 74 2c 20 6c 65 6e 67 74 68 29 2c 20 76 61  set, length), va
4d60: 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65  lue), out comple
4d70: 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
4d80: 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65      if (complete
4d90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
4da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4db0: 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d    byte[] bytes =
4dc0: 20 76 61 6c 75 65 2e 42 79 74 65 73 56 61 6c 75   value.BytesValu
4dd0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
4de0: 20 20 20 20 20 20 69 66 20 28 62 79 74 65 73 20        if (bytes 
4df0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
4e00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e20: 20 41 72 72 61 79 2e 43 6f 70 79 28 62 79 74 65   Array.Copy(byte
4e30: 73 2c 20 30 2c 20 62 75 66 66 65 72 2c 20 62 75  s, 0, buffer, bu
4e40: 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67  fferoffset, leng
4e50: 74 68 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  th);..          
4e60: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4e70: 20 62 79 74 65 73 2e 4c 6f 6e 67 4c 65 6e 67 74   bytes.LongLengt
4e80: 68 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h;..            
4e90: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4ea0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
4eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
4ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ed0: 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a      return -1;..
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ef0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
4f00: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
4f10: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
4f20: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
4f30: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
4f40: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
4f50: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4f60: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42 79  n _keyInfo.GetBy
4f70: 74 65 73 28 69 20 2d 20 50 72 69 76 61 74 65 56  tes(i - PrivateV
4f80: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
4f90: 2c 20 66 69 65 6c 64 4f 66 66 73 65 74 2c 20 62  , fieldOffset, b
4fa0: 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66  uffer, bufferoff
4fb0: 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d  set, length);...
4fc0: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54  .        VerifyT
4fd0: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42 69  ype(i, DbType.Bi
4fe0: 6e 61 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  nary);..        
4ff0: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
5000: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
5010: 42 79 74 65 73 28 5f 61 63 74 69 76 65 53 74 61  Bytes(_activeSta
5020: 74 65 6d 65 6e 74 2c 20 69 2c 20 28 69 6e 74 29  tement, i, (int)
5030: 66 69 65 6c 64 4f 66 66 73 65 74 2c 20 62 75 66  fieldOffset, buf
5040: 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65  fer, bufferoffse
5050: 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  t, length);..   
5060: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
5070: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
5080: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
5090: 75 6d 6e 20 61 73 20 61 20 73 69 6e 67 6c 65 20  umn as a single 
50a0: 63 68 61 72 61 63 74 65 72 0d 0a 20 20 20 20 2f  character..    /
50b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
50c0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
50d0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
50e0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
50f0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
5100: 20 3c 72 65 74 75 72 6e 73 3e 63 68 61 72 3c 2f   <returns>char</
5110: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
5120: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 63 68  blic override ch
5130: 61 72 20 47 65 74 43 68 61 72 28 69 6e 74 20 69  ar GetChar(int i
5140: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5150: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
5160: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
5170: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
5180: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
5190: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
51a0: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
51b0: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
51c0: 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53  eCallbacks) == S
51d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
51e0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
51f0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
5200: 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  acks)..        {
5210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
5220: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
5230: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
5240: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
5250: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
5260: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
5270: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
5280: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
5290: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
52a0: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
52b0: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
52c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75                nu
52d0: 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20  ll, value), out 
52e0: 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20  complete);....  
52f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
5300: 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20  mplete)..       
5310: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5320: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
5330: 65 2e 43 68 61 72 56 61 6c 75 65 20 3d 3d 20 6e  e.CharValue == n
5340: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5350: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
5360: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
5370: 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 63 68 61  ion("missing cha
5380: 72 61 63 74 65 72 20 72 65 74 75 72 6e 20 76 61  racter return va
5390: 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lue");....      
53a0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
53b0: 20 28 63 68 61 72 29 76 61 6c 75 65 2e 43 68 61   (char)value.Cha
53c0: 72 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  rValue;..       
53d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
53e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
53f0: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
5400: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
5410: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
5420: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5430: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
5440: 2e 47 65 74 43 68 61 72 28 69 20 2d 20 50 72 69  .GetChar(i - Pri
5450: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
5460: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
5470: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
5480: 20 44 62 54 79 70 65 2e 53 42 79 74 65 29 3b 0d   DbType.SByte);.
5490: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
54a0: 43 6f 6e 76 65 72 74 2e 54 6f 43 68 61 72 28 5f  Convert.ToChar(_
54b0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
54c0: 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61  _sql.GetInt32(_a
54d0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
54e0: 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  i));..    }.... 
54f0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5500: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  ..    /// Retrie
5510: 76 65 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20  ves a column as 
5520: 61 6e 20 61 72 72 61 79 20 6f 66 20 63 68 61 72  an array of char
5530: 73 20 28 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f  s (blob)..    //
5540: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
5550: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5560: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
5570: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
5580: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
5590: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 65  <param name="fie
55a0: 6c 64 6f 66 66 73 65 74 22 3e 54 68 65 20 7a 65  ldoffset">The ze
55b0: 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f  ro-based index o
55c0: 66 20 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e  f where to begin
55d0: 20 72 65 61 64 69 6e 67 20 74 68 65 20 64 61 74   reading the dat
55e0: 61 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  a</param>..    /
55f0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5600: 62 75 66 66 65 72 22 3e 54 68 65 20 62 75 66 66  buffer">The buff
5610: 65 72 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  er to write the 
5620: 63 68 61 72 61 63 74 65 72 73 20 69 6e 74 6f 3c  characters into<
5630: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
5640: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75   <param name="bu
5650: 66 66 65 72 6f 66 66 73 65 74 22 3e 54 68 65 20  fferoffset">The 
5660: 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78  zero-based index
5670: 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65 67   of where to beg
5680: 69 6e 20 77 72 69 74 69 6e 67 20 69 6e 74 6f 20  in writing into 
5690: 74 68 65 20 61 72 72 61 79 3c 2f 70 61 72 61 6d  the array</param
56a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
56b0: 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e  m name="length">
56c0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  The number of by
56d0: 74 65 73 20 74 6f 20 72 65 74 72 69 65 76 65 3c  tes to retrieve<
56e0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
56f0: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 61 63   <returns>The ac
5700: 74 75 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63  tual number of c
5710: 68 61 72 61 63 74 65 72 73 20 77 72 69 74 74 65  haracters writte
5720: 6e 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79  n into the array
5730: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
5740: 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20  /// <remarks>.. 
5750: 20 20 20 2f 2f 2f 20 54 6f 20 64 65 74 65 72 6d     /// To determ
5760: 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ine the number o
5770: 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  f characters in 
5780: 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 70 61 73 73  the column, pass
5790: 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20 66 6f   a null value fo
57a0: 72 20 74 68 65 20 62 75 66 66 65 72 2e 20 20 54  r the buffer.  T
57b0: 68 65 20 74 6f 74 61 6c 20 6c 65 6e 67 74 68 20  he total length 
57c0: 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64  will be returned
57d0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d  ...    /// </rem
57e0: 61 72 6b 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  arks>..    publi
57f0: 63 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  c override long 
5800: 47 65 74 43 68 61 72 73 28 69 6e 74 20 69 2c 20  GetChars(int i, 
5810: 6c 6f 6e 67 20 66 69 65 6c 64 6f 66 66 73 65 74  long fieldoffset
5820: 2c 20 63 68 61 72 5b 5d 20 62 75 66 66 65 72 2c  , char[] buffer,
5830: 20 69 6e 74 20 62 75 66 66 65 72 6f 66 66 73 65   int bufferoffse
5840: 74 2c 20 69 6e 74 20 6c 65 6e 67 74 68 29 0d 0a  t, int length)..
5850: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
5860: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
5870: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46  .        VerifyF
5880: 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  orGet();....    
5890: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
58a0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
58b0: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
58c0: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
58d0: 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69  llbacks) == SQLi
58e0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
58f0: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
5900: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
5910: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
5920: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
5930: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
5940: 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c   value = new SQL
5950: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
5960: 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ue();..         
5970: 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65     bool complete
5980: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5990: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
59a0: 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20  Callback(i, new 
59b0: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45  SQLiteReadValueE
59c0: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
59d0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
59e0: 51 4c 69 74 65 52 65 61 64 41 72 72 61 79 45 76  QLiteReadArrayEv
59f0: 65 6e 74 41 72 67 73 28 66 69 65 6c 64 6f 66 66  entArgs(fieldoff
5a00: 73 65 74 2c 20 62 75 66 66 65 72 2c 0d 0a 20 20  set, buffer,..  
5a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a20: 20 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20    bufferoffset, 
5a30: 6c 65 6e 67 74 68 29 2c 20 76 61 6c 75 65 29 2c  length), value),
5a40: 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d   out complete);.
5a50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
5a60: 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20  f (complete)..  
5a70: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61               cha
5a90: 72 5b 5d 20 63 68 61 72 73 20 3d 20 76 61 6c 75  r[] chars = valu
5aa0: 65 2e 43 68 61 72 73 56 61 6c 75 65 3b 0d 0a 0d  e.CharsValue;...
5ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5ac0: 20 69 66 20 28 63 68 61 72 73 20 21 3d 20 6e 75   if (chars != nu
5ad0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5ae0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5af0: 20 20 20 20 20 20 20 20 20 20 20 20 41 72 72 61              Arra
5b00: 79 2e 43 6f 70 79 28 63 68 61 72 73 2c 20 30 2c  y.Copy(chars, 0,
5b10: 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f   buffer, buffero
5b20: 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d  ffset, length);.
5b30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5b40: 20 20 20 20 20 72 65 74 75 72 6e 20 63 68 61 72       return char
5b50: 73 2e 4c 6f 6e 67 4c 65 6e 67 74 68 3b 0d 0a 20  s.LongLength;.. 
5b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5b70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b80: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
5b90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5bb0: 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 20  eturn -1;..     
5bc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5bd0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5be0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5bf0: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
5c00: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
5c10: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
5c20: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
5c30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
5c40: 79 49 6e 66 6f 2e 47 65 74 43 68 61 72 73 28 69  yInfo.GetChars(i
5c50: 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c   - PrivateVisibl
5c60: 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20 66 69 65  eFieldCount, fie
5c70: 6c 64 6f 66 66 73 65 74 2c 20 62 75 66 66 65 72  ldoffset, buffer
5c80: 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20  , bufferoffset, 
5c90: 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20  length);....    
5ca0: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
5cb0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
5cc0: 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69 66 79  onFlags.NoVerify
5cd0: 54 65 78 74 41 66 66 69 6e 69 74 79 29 20 21 3d  TextAffinity) !=
5ce0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5cf0: 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69 66 79 54  nFlags.NoVerifyT
5d00: 65 78 74 41 66 66 69 6e 69 74 79 29 0d 0a 20 20  extAffinity)..  
5d10: 20 20 20 20 20 20 20 20 20 20 56 65 72 69 66 79            Verify
5d20: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53  Type(i, DbType.S
5d30: 74 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20  tring);....     
5d40: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
5d50: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
5d60: 47 65 74 43 68 61 72 73 28 5f 61 63 74 69 76 65  GetChars(_active
5d70: 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 28 69  Statement, i, (i
5d80: 6e 74 29 66 69 65 6c 64 6f 66 66 73 65 74 2c 20  nt)fieldoffset, 
5d90: 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66  buffer, bufferof
5da0: 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  fset, length);..
5db0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
5dc0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
5dd0: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
5de0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 62 61  e name of the ba
5df0: 63 6b 2d 65 6e 64 20 64 61 74 61 74 79 70 65 20  ck-end datatype 
5e00: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a 20  of the column.. 
5e10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
5e20: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
5e30: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
5e40: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
5e50: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
5e60: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74   /// <returns>st
5e70: 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ring</returns>..
5e80: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
5e90: 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 44 61  ide string GetDa
5ea0: 74 61 54 79 70 65 4e 61 6d 65 28 69 6e 74 20 69  taTypeName(int i
5eb0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5ec0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
5ed0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
5ee0: 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69   (i >= PrivateVi
5ef0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
5f00: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
5f10: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5f20: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
5f30: 6f 2e 47 65 74 44 61 74 61 54 79 70 65 4e 61 6d  o.GetDataTypeNam
5f40: 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  e(i - PrivateVis
5f50: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
5f60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70 65  ....        Type
5f70: 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e 20 3d  Affinity affin =
5f80: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 55 6e   TypeAffinity.Un
5f90: 69 6e 69 74 69 61 6c 69 7a 65 64 3b 0d 0a 20 20  initialized;..  
5fa0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
5fb0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
5fc0: 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 5f 61  ql.ColumnType(_a
5fd0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
5fe0: 69 2c 20 72 65 66 20 61 66 66 69 6e 29 3b 0d 0a  i, ref affin);..
5ff0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
6000: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
6010: 2f 2f 2f 20 52 65 74 72 69 65 76 65 20 74 68 65  /// Retrieve the
6020: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 64 61 74   column as a dat
6030: 65 2f 74 69 6d 65 20 76 61 6c 75 65 0d 0a 20 20  e/time value..  
6040: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6050: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
6060: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
6070: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
6080: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
6090: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 44 61 74  /// <returns>Dat
60a0: 65 54 69 6d 65 3c 2f 72 65 74 75 72 6e 73 3e 0d  eTime</returns>.
60b0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
60c0: 72 69 64 65 20 44 61 74 65 54 69 6d 65 20 47 65  ride DateTime Ge
60d0: 74 44 61 74 65 54 69 6d 65 28 69 6e 74 20 69 29  tDateTime(int i)
60e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
60f0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
6100: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
6110: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
6120: 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
6130: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
6140: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
6150: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
6160: 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51  Callbacks) == SQ
6170: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6180: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
6190: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
61a0: 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  cks)..        {.
61b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
61c0: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
61d0: 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53  ue value = new S
61e0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
61f0: 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  alue();..       
6200: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65       bool comple
6210: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
6220: 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c     InvokeReadVal
6230: 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65  ueCallback(i, ne
6240: 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75  w SQLiteReadValu
6250: 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  eEventArgs(..   
6260: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
6270: 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63  l, value), out c
6280: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
6290: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
62a0: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
62b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
62c0: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
62d0: 2e 44 61 74 65 54 69 6d 65 56 61 6c 75 65 20 3d  .DateTimeValue =
62e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
62f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
6300: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
6310: 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20  eption("missing 
6320: 64 61 74 65 2f 74 69 6d 65 20 72 65 74 75 72 6e  date/time return
6330: 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20   value");....   
6340: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
6350: 75 72 6e 20 28 44 61 74 65 54 69 6d 65 29 76 61  urn (DateTime)va
6360: 6c 75 65 2e 44 61 74 65 54 69 6d 65 56 61 6c 75  lue.DateTimeValu
6370: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6380: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
6390: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
63a0: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
63b0: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
63c0: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
63d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
63e0: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44  rn _keyInfo.GetD
63f0: 61 74 65 54 69 6d 65 28 69 20 2d 20 50 72 69 76  ateTime(i - Priv
6400: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
6410: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
6420: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
6430: 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29  DbType.DateTime)
6440: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
6450: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
6460: 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 61 74 65 54  nt._sql.GetDateT
6470: 69 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ime(_activeState
6480: 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d  ment, i);..    }
6490: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
64a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
64b0: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 75  etrieve the colu
64c0: 6d 6e 20 61 73 20 61 20 64 65 63 69 6d 61 6c 20  mn as a decimal 
64d0: 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  value..    /// <
64e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
64f0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
6500: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
6510: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
6520: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
6530: 74 75 72 6e 73 3e 64 65 63 69 6d 61 6c 3c 2f 72  turns>decimal</r
6540: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
6550: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64 65 63  lic override dec
6560: 69 6d 61 6c 20 47 65 74 44 65 63 69 6d 61 6c 28  imal GetDecimal(
6570: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
6580: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
6590: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
65a0: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
65b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
65c0: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
65d0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
65e0: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
65f0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
6600: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
6610: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
6620: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
6630: 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20  Callbacks)..    
6640: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6650: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
6660: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
6670: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
6680: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
6690: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
66a0: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
66b0: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
66c0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
66d0: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
66e0: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
66f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
6700: 20 20 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c     null, value),
6710: 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d   out complete);.
6720: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
6730: 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20  f (complete)..  
6740: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6750: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6760: 28 76 61 6c 75 65 2e 44 65 63 69 6d 61 6c 56 61  (value.DecimalVa
6770: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
6780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6790: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
67a0: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73  teException("mis
67b0: 73 69 6e 67 20 64 65 63 69 6d 61 6c 20 72 65 74  sing decimal ret
67c0: 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a  urn value");....
67d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67e0: 72 65 74 75 72 6e 20 28 64 65 63 69 6d 61 6c 29  return (decimal)
67f0: 76 61 6c 75 65 2e 44 65 63 69 6d 61 6c 56 61 6c  value.DecimalVal
6800: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
6810: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
6820: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
6830: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
6840: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
6850: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
6860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
6870: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
6880: 44 65 63 69 6d 61 6c 28 69 20 2d 20 50 72 69 76  Decimal(i - Priv
6890: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
68a0: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
68b0: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
68c0: 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 3b  DbType.Decimal);
68d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
68e0: 20 44 65 63 69 6d 61 6c 2e 50 61 72 73 65 28 5f   Decimal.Parse(_
68f0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
6900: 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63  _sql.GetText(_ac
6910: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
6920: 29 2c 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e  ), NumberStyles.
6930: 41 6c 6c 6f 77 44 65 63 69 6d 61 6c 50 6f 69 6e  AllowDecimalPoin
6940: 74 20 7c 20 4e 75 6d 62 65 72 53 74 79 6c 65 73  t | NumberStyles
6950: 2e 41 6c 6c 6f 77 45 78 70 6f 6e 65 6e 74 20 7c  .AllowExponent |
6960: 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c   NumberStyles.Al
6970: 6c 6f 77 4c 65 61 64 69 6e 67 53 69 67 6e 2c 20  lowLeadingSign, 
6980: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
6990: 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a  riantCulture);..
69a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
69b0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
69c0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
69d0: 63 6f 6c 75 6d 6e 20 61 73 20 61 20 64 6f 75 62  column as a doub
69e0: 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  le..    /// </su
69f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
6a00: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
6a10: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
6a20: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
6a30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
6a40: 6e 73 3e 64 6f 75 62 6c 65 3c 2f 72 65 74 75 72  ns>double</retur
6a50: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
6a60: 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20  override double 
6a70: 47 65 74 44 6f 75 62 6c 65 28 69 6e 74 20 69 29  GetDouble(int i)
6a80: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
6a90: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
6aa0: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
6ab0: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
6ac0: 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
6ad0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
6ae0: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
6af0: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
6b00: 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51  Callbacks) == SQ
6b10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6b20: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
6b30: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
6b40: 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  cks)..        {.
6b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
6b60: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
6b70: 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53  ue value = new S
6b80: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
6b90: 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  alue();..       
6ba0: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65       bool comple
6bb0: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
6bc0: 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c     InvokeReadVal
6bd0: 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65  ueCallback(i, ne
6be0: 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75  w SQLiteReadValu
6bf0: 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  eEventArgs(..   
6c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
6c10: 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63  l, value), out c
6c20: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
6c30: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
6c40: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
6c50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6c60: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
6c70: 2e 44 6f 75 62 6c 65 56 61 6c 75 65 20 3d 3d 20  .DoubleValue == 
6c80: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6c90: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
6ca0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
6cb0: 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 64 6f  tion("missing do
6cc0: 75 62 6c 65 20 72 65 74 75 72 6e 20 76 61 6c 75  uble return valu
6cd0: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
6ce0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
6cf0: 64 6f 75 62 6c 65 29 76 61 6c 75 65 2e 44 6f 75  double)value.Dou
6d00: 62 6c 65 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  bleValue;..     
6d10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6d20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
6d30: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
6d40: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
6d50: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
6d60: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6d70: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
6d80: 66 6f 2e 47 65 74 44 6f 75 62 6c 65 28 69 20 2d  fo.GetDouble(i -
6d90: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
6da0: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
6db0: 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70         VerifyTyp
6dc0: 65 28 69 2c 20 44 62 54 79 70 65 2e 44 6f 75 62  e(i, DbType.Doub
6dd0: 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  le);..        re
6de0: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
6df0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f  ement._sql.GetDo
6e00: 75 62 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74  uble(_activeStat
6e10: 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20  ement, i);..    
6e20: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
6e30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
6e40: 52 65 74 75 72 6e 73 20 74 68 65 20 2e 4e 45 54  Returns the .NET
6e50: 20 74 79 70 65 20 6f 66 20 61 20 67 69 76 65 6e   type of a given
6e60: 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f   column..    ///
6e70: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
6e80: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
6e90: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
6ea0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
6eb0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
6ec0: 72 65 74 75 72 6e 73 3e 54 79 70 65 3c 2f 72 65  returns>Type</re
6ed0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
6ee0: 69 63 20 6f 76 65 72 72 69 64 65 20 54 79 70 65  ic override Type
6ef0: 20 47 65 74 46 69 65 6c 64 54 79 70 65 28 69 6e   GetFieldType(in
6f00: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
6f10: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6f20: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6f30: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
6f40: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
6f50: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
6f60: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6f70: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
6f80: 49 6e 66 6f 2e 47 65 74 46 69 65 6c 64 54 79 70  Info.GetFieldTyp
6f90: 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  e(i - PrivateVis
6fa0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
6fb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
6fc0: 72 6e 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  rn SQLiteConvert
6fd0: 2e 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70  .SQLiteTypeToTyp
6fe0: 65 28 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  e(GetSQLiteType(
6ff0: 5f 66 6c 61 67 73 2c 20 69 29 29 3b 0d 0a 20 20  _flags, i));..  
7000: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
7010: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
7020: 2f 20 52 65 74 75 72 6e 73 20 61 20 63 6f 6c 75  / Returns a colu
7030: 6d 6e 20 61 73 20 61 20 66 6c 6f 61 74 20 76 61  mn as a float va
7040: 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  lue..    /// </s
7050: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7060: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
7070: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
7080: 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d  e column.</param
7090: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
70a0: 72 6e 73 3e 66 6c 6f 61 74 3c 2f 72 65 74 75 72  rns>float</retur
70b0: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
70c0: 6f 76 65 72 72 69 64 65 20 66 6c 6f 61 74 20 47  override float G
70d0: 65 74 46 6c 6f 61 74 28 69 6e 74 20 69 29 0d 0a  etFloat(int i)..
70e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
70f0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
7100: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46  .        VerifyF
7110: 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  orGet();....    
7120: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
7130: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
7140: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
7150: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
7160: 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69  llbacks) == SQLi
7170: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7180: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
7190: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
71a0: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
71b0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
71c0: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
71d0: 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c   value = new SQL
71e0: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
71f0: 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ue();..         
7200: 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65     bool complete
7210: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
7220: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
7230: 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20  Callback(i, new 
7240: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45  SQLiteReadValueE
7250: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
7260: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
7270: 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d   value), out com
7280: 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  plete);....     
7290: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c         if (compl
72a0: 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ete)..          
72b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
72c0: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 46       if (value.F
72d0: 6c 6f 61 74 56 61 6c 75 65 20 3d 3d 20 6e 75 6c  loatValue == nul
72e0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
72f0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
7300: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
7310: 6e 28 22 6d 69 73 73 69 6e 67 20 66 6c 6f 61 74  n("missing float
7320: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b   return value");
7330: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7340: 20 20 20 20 72 65 74 75 72 6e 20 28 66 6c 6f 61      return (floa
7350: 74 29 76 61 6c 75 65 2e 46 6c 6f 61 74 56 61 6c  t)value.FloatVal
7360: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
7370: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
7380: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
7390: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
73a0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
73b0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
73c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
73d0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
73e0: 46 6c 6f 61 74 28 69 20 2d 20 50 72 69 76 61 74  Float(i - Privat
73f0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
7400: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
7410: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
7420: 54 79 70 65 2e 53 69 6e 67 6c 65 29 3b 0d 0a 20  Type.Single);.. 
7430: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f         return Co
7440: 6e 76 65 72 74 2e 54 6f 53 69 6e 67 6c 65 28 5f  nvert.ToSingle(_
7450: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
7460: 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f  _sql.GetDouble(_
7470: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
7480: 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a   i));..    }....
7490: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
74a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
74b0: 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73  ns the column as
74c0: 20 61 20 47 75 69 64 0d 0a 20 20 20 20 2f 2f 2f   a Guid..    ///
74d0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
74e0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
74f0: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
7500: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
7510: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
7520: 72 65 74 75 72 6e 73 3e 47 75 69 64 3c 2f 72 65  returns>Guid</re
7530: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
7540: 69 63 20 6f 76 65 72 72 69 64 65 20 47 75 69 64  ic override Guid
7550: 20 47 65 74 47 75 69 64 28 69 6e 74 20 69 29 0d   GetGuid(int i).
7560: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7570: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
7580: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
7590: 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  ForGet();....   
75a0: 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73       if ((_flags
75b0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
75c0: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
75d0: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
75e0: 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c  allbacks) == SQL
75f0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7600: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
7610: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
7620: 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ks)..        {..
7630: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
7640: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
7650: 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51  e value = new SQ
7660: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
7670: 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue();..        
7680: 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74      bool complet
7690: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
76a0: 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75    InvokeReadValu
76b0: 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77  eCallback(i, new
76c0: 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65   SQLiteReadValue
76d0: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
76f0: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
7700: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
7710: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
7720: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
7730: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7740: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
7750: 47 75 69 64 56 61 6c 75 65 20 3d 3d 20 6e 75 6c  GuidValue == nul
7760: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7770: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
7780: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
7790: 6e 28 22 6d 69 73 73 69 6e 67 20 67 75 69 64 20  n("missing guid 
77a0: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
77b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
77c0: 20 20 20 72 65 74 75 72 6e 20 28 47 75 69 64 29     return (Guid)
77d0: 76 61 6c 75 65 2e 47 75 69 64 56 61 6c 75 65 3b  value.GuidValue;
77e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
77f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
7800: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
7810: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
7820: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
7830: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
7840: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7850: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 47 75 69   _keyInfo.GetGui
7860: 64 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  d(i - PrivateVis
7870: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
7880: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70 65  ....        Type
7890: 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e 69 74  Affinity affinit
78a0: 79 20 3d 20 56 65 72 69 66 79 54 79 70 65 28 69  y = VerifyType(i
78b0: 2c 20 44 62 54 79 70 65 2e 47 75 69 64 29 3b 0d  , DbType.Guid);.
78c0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 66 66  .        if (aff
78d0: 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66  inity == TypeAff
78e0: 69 6e 69 74 79 2e 42 6c 6f 62 29 0d 0a 20 20 20  inity.Blob)..   
78f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7900: 20 20 20 20 62 79 74 65 5b 5d 20 62 75 66 66 65      byte[] buffe
7910: 72 20 3d 20 6e 65 77 20 62 79 74 65 5b 31 36 5d  r = new byte[16]
7920: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  ;..            _
7930: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
7940: 5f 73 71 6c 2e 47 65 74 42 79 74 65 73 28 5f 61  _sql.GetBytes(_a
7950: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
7960: 69 2c 20 30 2c 20 62 75 66 66 65 72 2c 20 30 2c  i, 0, buffer, 0,
7970: 20 31 36 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   16);..         
7980: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
7990: 69 64 28 62 75 66 66 65 72 29 3b 0d 0a 20 20 20  id(buffer);..   
79a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
79b0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
79c0: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
79d0: 64 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  d(_activeStateme
79e0: 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28  nt._sql.GetText(
79f0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
7a00: 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  , i));..    }...
7a10: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
7a20: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
7a30: 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  rns the column a
7a40: 73 20 61 20 73 68 6f 72 74 0d 0a 20 20 20 20 2f  s a short..    /
7a50: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
7a60: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
7a70: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
7a80: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
7a90: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
7aa0: 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74 31 36 3c   <returns>Int16<
7ab0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
7ac0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49  ublic override I
7ad0: 6e 74 31 36 20 47 65 74 49 6e 74 31 36 28 69 6e  nt16 GetInt16(in
7ae0: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
7af0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
7b00: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
7b10: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
7b20: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
7b30: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
7b40: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
7b50: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
7b60: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
7b70: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7b80: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
7b90: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
7ba0: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
7bb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7bc0: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
7bd0: 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e  rValue value = n
7be0: 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  ew SQLiteDataRea
7bf0: 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20  derValue();..   
7c00: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f           bool co
7c10: 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20  mplete;....     
7c20: 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61         InvokeRea
7c30: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69  dValueCallback(i
7c40: 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  , new SQLiteRead
7c50: 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d  ValueEventArgs(.
7c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7c70: 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f   null, value), o
7c80: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
7c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
7ca0: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
7cb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7cc0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
7cd0: 61 6c 75 65 2e 49 6e 74 31 36 56 61 6c 75 65 20  alue.Int16Value 
7ce0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
7d00: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
7d10: 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67  ception("missing
7d20: 20 69 6e 74 31 36 20 72 65 74 75 72 6e 20 76 61   int16 return va
7d30: 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lue");....      
7d40: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7d50: 20 28 49 6e 74 31 36 29 76 61 6c 75 65 2e 49 6e   (Int16)value.In
7d60: 74 31 36 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  t16Value;..     
7d70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7d80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
7d90: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
7da0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
7db0: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
7dc0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7dd0: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
7de0: 66 6f 2e 47 65 74 49 6e 74 31 36 28 69 20 2d 20  fo.GetInt16(i - 
7df0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
7e00: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
7e10: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
7e20: 28 69 2c 20 44 62 54 79 70 65 2e 49 6e 74 31 36  (i, DbType.Int16
7e30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
7e40: 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74  rn Convert.ToInt
7e50: 31 36 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  16(_activeStatem
7e60: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 33  ent._sql.GetInt3
7e70: 32 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  2(_activeStateme
7e80: 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d  nt, i));..    }.
7e90: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
7ea0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
7eb0: 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75  trieves the colu
7ec0: 6d 6e 20 61 73 20 61 6e 20 69 6e 74 0d 0a 20 20  mn as an int..  
7ed0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
7ee0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
7ef0: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
7f00: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
7f10: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
7f20: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74  /// <returns>Int
7f30: 33 32 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  32</returns>..  
7f40: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
7f50: 65 20 49 6e 74 33 32 20 47 65 74 49 6e 74 33 32  e Int32 GetInt32
7f60: 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
7f70: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
7f80: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
7f90: 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
7fa0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
7fb0: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
7fc0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7fd0: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
7fe0: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
7ff0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
8000: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
8010: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
8020: 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20  eCallbacks)..   
8030: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8040: 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65      SQLiteDataRe
8050: 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20  aderValue value 
8060: 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61  = new SQLiteData
8070: 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a  ReaderValue();..
8080: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
8090: 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20   complete;....  
80a0: 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65            Invoke
80b0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
80c0: 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52  k(i, new SQLiteR
80d0: 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67  eadValueEventArg
80e0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
80f0: 20 20 20 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29      null, value)
8100: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
8110: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8120: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
8130: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8150: 20 28 76 61 6c 75 65 2e 49 6e 74 33 32 56 61 6c   (value.Int32Val
8160: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
8170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8180: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
8190: 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73  eException("miss
81a0: 69 6e 67 20 69 6e 74 33 32 20 72 65 74 75 72 6e  ing int32 return
81b0: 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20   value");....   
81c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
81d0: 75 72 6e 20 28 49 6e 74 33 32 29 76 61 6c 75 65  urn (Int32)value
81e0: 2e 49 6e 74 33 32 56 61 6c 75 65 3b 0d 0a 20 20  .Int32Value;..  
81f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8200: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8210: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
8220: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
8230: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
8240: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
8250: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
8260: 79 49 6e 66 6f 2e 47 65 74 49 6e 74 33 32 28 69  yInfo.GetInt32(i
8270: 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c   - PrivateVisibl
8280: 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d  eFieldCount);...
8290: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54  .        VerifyT
82a0: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 49 6e  ype(i, DbType.In
82b0: 74 33 32 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  t32);..        r
82c0: 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61  eturn _activeSta
82d0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49  tement._sql.GetI
82e0: 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74 61 74  nt32(_activeStat
82f0: 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20  ement, i);..    
8300: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
8310: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
8320: 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f  Retrieves the co
8330: 6c 75 6d 6e 20 61 73 20 61 20 6c 6f 6e 67 0d 0a  lumn as a long..
8340: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8350: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
8360: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
8370: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
8380: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
8390: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 49    /// <returns>I
83a0: 6e 74 36 34 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  nt64</returns>..
83b0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
83c0: 69 64 65 20 49 6e 74 36 34 20 47 65 74 49 6e 74  ide Int64 GetInt
83d0: 36 34 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  64(int i)..    {
83e0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
83f0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
8400: 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74      VerifyForGet
8410: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
8420: 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  f ((_flags & SQL
8430: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8440: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
8450: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
8460: 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  ks) == SQLiteCon
8470: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
8480: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
8490: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20  lueCallbacks).. 
84a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
84b0: 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61        SQLiteData
84c0: 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75  ReaderValue valu
84d0: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61  e = new SQLiteDa
84e0: 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b  taReaderValue();
84f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
8500: 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a  ol complete;....
8510: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f              Invo
8520: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
8530: 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74  ack(i, new SQLit
8540: 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41  eReadValueEventA
8550: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
8560: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 76 61 6c 75        null, valu
8570: 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  e), out complete
8580: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8590: 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d    if (complete).
85a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
85b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85c0: 69 66 20 28 76 61 6c 75 65 2e 49 6e 74 36 34 56  if (value.Int64V
85d0: 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85f0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
8600: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69  iteException("mi
8610: 73 73 69 6e 67 20 69 6e 74 36 34 20 72 65 74 75  ssing int64 retu
8620: 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  rn value");.... 
8630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8640: 65 74 75 72 6e 20 28 49 6e 74 36 34 29 76 61 6c  eturn (Int64)val
8650: 75 65 2e 49 6e 74 36 34 56 61 6c 75 65 3b 0d 0a  ue.Int64Value;..
8660: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8670: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8680: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
8690: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
86a0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
86b0: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
86c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
86d0: 6b 65 79 49 6e 66 6f 2e 47 65 74 49 6e 74 36 34  keyInfo.GetInt64
86e0: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
86f0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d  bleFieldCount);.
8700: 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ...        Verif
8710: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
8720: 49 6e 74 36 34 29 3b 0d 0a 20 20 20 20 20 20 20  Int64);..       
8730: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
8740: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
8750: 74 49 6e 74 36 34 28 5f 61 63 74 69 76 65 53 74  tInt64(_activeSt
8760: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20  atement, i);..  
8770: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
8780: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
8790: 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20  / Retrieves the 
87a0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  name of the colu
87b0: 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  mn..    /// </su
87c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
87d0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
87e0: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
87f0: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
8800: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
8810: 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72  ns>string</retur
8820: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
8830: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
8840: 47 65 74 4e 61 6d 65 28 69 6e 74 20 69 29 0d 0a  GetName(int i)..
8850: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
8860: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
8870: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
8880: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
8890: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
88a0: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
88b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
88c0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
88d0: 65 74 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61  etName(i - Priva
88e0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
88f0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
8900: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
8910: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f  tatement._sql.Co
8920: 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63 74 69 76 65  lumnName(_active
8930: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a  Statement, i);..
8940: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
8950: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8960: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
8970: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
8980: 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20  base associated 
8990: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
89a0: 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20  ed column...    
89b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
89c0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
89d0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
89e0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
89f0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
8a00: 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e  / <returns>strin
8a10: 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  g</returns>..   
8a20: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47   public string G
8a30: 65 74 44 61 74 61 62 61 73 65 4e 61 6d 65 28 69  etDatabaseName(i
8a40: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
8a50: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
8a60: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
8a70: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
8a80: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
8a90: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
8aa0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
8ab0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
8ac0: 79 49 6e 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20  yInfo.GetName(i 
8ad0: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
8ae0: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
8af0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
8b00: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
8b10: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 44 61 74 61 62  _sql.ColumnDatab
8b20: 61 73 65 4e 61 6d 65 28 5f 61 63 74 69 76 65 53  aseName(_activeS
8b30: 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20  tatement, i);.. 
8b40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
8b50: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
8b60: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
8b70: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
8b80: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
8b90: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
8ba0: 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  olumn...    /// 
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 73 74 72 69 6e 67 3c 2f 72  eturns>string</r
8c10: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
8c20: 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74 54 61  lic string GetTa
8c30: 62 6c 65 4e 61 6d 65 28 69 6e 74 20 69 29 0d 0a  bleName(int i)..
8c40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
8c50: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
8c60: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
8c70: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
8c80: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
8c90: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
8ca0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
8cb0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
8cc0: 65 74 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61  etName(i - Priva
8cd0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
8ce0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
8cf0: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
8d00: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f  tatement._sql.Co
8d10: 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 5f 61  lumnTableName(_a
8d20: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
8d30: 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  i);..    }....  
8d40: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
8d50: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
8d60: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6e 61   the original na
8d70: 6d 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 66  me of the specif
8d80: 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20  ied column...   
8d90: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8da0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
8db0: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
8dc0: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
8dd0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
8de0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69  // <returns>stri
8df0: 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  ng</returns>..  
8e00: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
8e10: 47 65 74 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28  GetOriginalName(
8e20: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
8e30: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
8e40: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
8e50: 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76     if (i >= Priv
8e60: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
8e70: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
8e80: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
8e90: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
8ea0: 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d 65 28 69  eyInfo.GetName(i
8eb0: 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c   - PrivateVisibl
8ec0: 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d  eFieldCount);...
8ed0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8ee0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
8ef0: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67  ._sql.ColumnOrig
8f00: 69 6e 61 6c 4e 61 6d 65 28 5f 61 63 74 69 76 65  inalName(_active
8f10: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a  Statement, i);..
8f20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
8f30: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8f40: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
8f50: 65 20 69 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 2c  e i of a column,
8f60: 20 67 69 76 65 6e 20 69 74 73 20 6e 61 6d 65 0d   given its name.
8f70: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
8f80: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
8f90: 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e  ram name="name">
8fa0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
8fb0: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
8fc0: 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  ve</param>..    
8fd0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
8fe0: 20 69 6e 74 20 69 20 6f 66 20 74 68 65 20 63 6f   int i of the co
8ff0: 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  lumn</returns>..
9000: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
9010: 69 64 65 20 69 6e 74 20 47 65 74 4f 72 64 69 6e  ide int GetOrdin
9020: 61 6c 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d  al(string name).
9030: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68  .    {..      Ch
9040: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
9050: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 74 68 72  ..      if (_thr
9060: 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29 20 53 51  owOnDisposed) SQ
9070: 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63  LiteCommand.Chec
9080: 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a  k(_command);....
9090: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
90a0: 2f 2f 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20  // NOTE: First, 
90b0: 63 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f 6c  check if the col
90c0: 75 6d 6e 20 6e 61 6d 65 20 63 61 63 68 65 20 68  umn name cache h
90d0: 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  as been initiali
90e0: 7a 65 64 20 79 65 74 2e 0d 0a 20 20 20 20 20 20  zed yet...      
90f0: 2f 2f 20 20 20 20 20 20 20 49 66 20 6e 6f 74 2c  //       If not,
9100: 20 64 6f 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20   do it now...   
9110: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20     //..      if 
9120: 28 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d  (_fieldIndexes =
9130: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
9140: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 66 69 65  ..          _fie
9150: 6c 64 49 6e 64 65 78 65 73 20 3d 20 6e 65 77 20  ldIndexes = new 
9160: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
9170: 67 2c 20 69 6e 74 3e 28 0d 0a 20 20 20 20 20 20  g, int>(..      
9180: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f          StringCo
9190: 6d 70 61 72 65 72 2e 4f 72 64 69 6e 61 6c 49 67  mparer.OrdinalIg
91a0: 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 20 20 20 20  noreCase);..    
91b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d    }....      //.
91c0: 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20  .      // NOTE: 
91d0: 4e 65 78 74 2c 20 73 65 65 20 69 66 20 74 68 65  Next, see if the
91e0: 20 69 6e 64 65 78 20 66 6f 72 20 74 68 65 20 72   index for the r
91f0: 65 71 75 65 73 74 65 64 20 63 6f 6c 75 6d 6e 20  equested column 
9200: 6e 61 6d 65 20 68 61 73 20 62 65 65 6e 0d 0a 20  name has been.. 
9210: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61       //       ca
9220: 63 68 65 64 20 61 6c 72 65 61 64 79 2e 20 20 49  ched already.  I
9230: 66 20 73 6f 2c 20 72 65 74 75 72 6e 20 74 68 65  f so, return the
9240: 20 63 61 63 68 65 64 20 76 61 6c 75 65 2e 20 20   cached value.  
9250: 4f 74 68 65 72 77 69 73 65 2c 0d 0a 20 20 20 20  Otherwise,..    
9260: 20 20 2f 2f 20 20 20 20 20 20 20 6c 6f 6f 6b 75    //       looku
9270: 70 20 74 68 65 20 76 61 6c 75 65 20 61 6e 64 20  p the value and 
9280: 74 68 65 6e 20 63 61 63 68 65 20 74 68 65 20 72  then cache the r
9290: 65 73 75 6c 74 20 66 6f 72 20 66 75 74 75 72 65  esult for future
92a0: 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d   use...      //.
92b0: 0a 20 20 20 20 20 20 69 6e 74 20 72 3b 0d 0a 0d  .      int r;...
92c0: 0a 20 20 20 20 20 20 69 66 20 28 21 5f 66 69 65  .      if (!_fie
92d0: 6c 64 49 6e 64 65 78 65 73 2e 54 72 79 47 65 74  ldIndexes.TryGet
92e0: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 6f 75 74 20  Value(name, out 
92f0: 72 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  r))..      {..  
9300: 20 20 20 20 20 20 20 20 72 20 3d 20 5f 61 63 74          r = _act
9310: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
9320: 6c 2e 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 5f 61  l.ColumnIndex(_a
9330: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
9340: 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  name);....      
9350: 20 20 20 20 69 66 20 28 72 20 3d 3d 20 2d 31 20      if (r == -1 
9360: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
9370: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9380: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9390: 20 72 20 3d 20 5f 6b 65 79 49 6e 66 6f 2e 47 65   r = _keyInfo.Ge
93a0: 74 4f 72 64 69 6e 61 6c 28 6e 61 6d 65 29 3b 0d  tOrdinal(name);.
93b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
93c0: 66 20 28 72 20 3e 20 2d 31 29 20 72 20 2b 3d 20  f (r > -1) r += 
93d0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
93e0: 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20  eldCount;..     
93f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9400: 20 20 20 20 5f 66 69 65 6c 64 49 6e 64 65 78 65      _fieldIndexe
9410: 73 2e 41 64 64 28 6e 61 6d 65 2c 20 72 29 3b 0d  s.Add(name, r);.
9420: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
9430: 20 20 72 65 74 75 72 6e 20 72 3b 0d 0a 20 20 20    return r;..   
9440: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
9450: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
9460: 20 53 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   Schema informat
9470: 69 6f 6e 20 69 6e 20 53 51 4c 69 74 65 20 69 73  ion in SQLite is
9480: 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20 6d 61   difficult to ma
9490: 70 20 69 6e 74 6f 20 2e 4e 45 54 20 63 6f 6e 76  p into .NET conv
94a0: 65 6e 74 69 6f 6e 73 2c 20 73 6f 20 61 20 6c 6f  entions, so a lo
94b0: 74 20 6f 66 20 77 6f 72 6b 20 6d 75 73 74 20 62  t of work must b
94c0: 65 20 64 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20  e done..    /// 
94d0: 74 6f 20 67 61 74 68 65 72 20 74 68 65 20 6e 65  to gather the ne
94e0: 63 65 73 73 61 72 79 20 69 6e 66 6f 72 6d 61 74  cessary informat
94f0: 69 6f 6e 20 73 6f 20 69 74 20 63 61 6e 20 62 65  ion so it can be
9500: 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
9510: 61 6e 20 41 44 4f 2e 4e 45 54 20 6d 61 6e 6e 65  an ADO.NET manne
9520: 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  r...    /// </su
9530: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9540: 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73  <returns>Returns
9550: 20 61 20 44 61 74 61 54 61 62 6c 65 20 63 6f 6e   a DataTable con
9560: 74 61 69 6e 69 6e 67 20 74 68 65 20 73 63 68 65  taining the sche
9570: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ma information f
9580: 6f 72 20 74 68 65 20 61 63 74 69 76 65 20 53 45  or the active SE
9590: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 62  LECT statement b
95a0: 65 69 6e 67 20 70 72 6f 63 65 73 73 65 64 2e 3c  eing processed.<
95b0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
95c0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 44  ublic override D
95d0: 61 74 61 54 61 62 6c 65 20 47 65 74 53 63 68 65  ataTable GetSche
95e0: 6d 61 54 61 62 6c 65 28 29 0d 0a 20 20 20 20 7b  maTable()..    {
95f0: 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73  ..      CheckDis
9600: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
9610: 72 65 74 75 72 6e 20 47 65 74 53 63 68 65 6d 61  return GetSchema
9620: 54 61 62 6c 65 28 74 72 75 65 2c 20 66 61 6c 73  Table(true, fals
9630: 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
9640: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9690: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6c  .    #region Col
96a0: 75 6d 6e 50 61 72 65 6e 74 20 43 6c 61 73 73 0d  umnParent Class.
96b0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61  .    private sea
96c0: 6c 65 64 20 63 6c 61 73 73 20 43 6f 6c 75 6d 6e  led class Column
96d0: 50 61 72 65 6e 74 20 3a 20 49 45 71 75 61 6c 69  Parent : IEquali
96e0: 74 79 43 6f 6d 70 61 72 65 72 3c 43 6f 6c 75 6d  tyComparer<Colum
96f0: 6e 50 61 72 65 6e 74 3e 0d 0a 20 20 20 20 7b 0d  nParent>..    {.
9700: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
9710: 20 50 75 62 6c 69 63 20 46 69 65 6c 64 73 0d 0a   Public Fields..
9720: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
9730: 74 72 69 6e 67 20 44 61 74 61 62 61 73 65 4e 61  tring DatabaseNa
9740: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62  me;..        pub
9750: 6c 69 63 20 73 74 72 69 6e 67 20 54 61 62 6c 65  lic string Table
9760: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 70  Name;..        p
9770: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 6c  ublic string Col
9780: 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  umnName;..      
9790: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
97a0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
97b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
97f0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
9800: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
9810: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
9820: 70 75 62 6c 69 63 20 43 6f 6c 75 6d 6e 50 61 72  public ColumnPar
9830: 65 6e 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ent()..        {
9840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
9850: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
9860: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9870: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
98c0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 43 6f 6c        public Col
98d0: 75 6d 6e 50 61 72 65 6e 74 28 0d 0a 20 20 20 20  umnParent(..    
98e0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
98f0: 61 74 61 62 61 73 65 4e 61 6d 65 2c 0d 0a 20 20  atabaseName,..  
9900: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9910: 20 74 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20   tableName,..   
9920: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
9930: 63 6f 6c 75 6d 6e 4e 61 6d 65 0d 0a 20 20 20 20  columnName..    
9940: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
9950: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d         : this().
9960: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9970: 20 20 20 20 20 20 20 20 74 68 69 73 2e 44 61 74          this.Dat
9980: 61 62 61 73 65 4e 61 6d 65 20 3d 20 64 61 74 61  abaseName = data
9990: 62 61 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  baseName;..     
99a0: 20 20 20 20 20 20 20 74 68 69 73 2e 54 61 62 6c         this.Tabl
99b0: 65 4e 61 6d 65 20 3d 20 74 61 62 6c 65 4e 61 6d  eName = tableNam
99c0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
99d0: 74 68 69 73 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 20  this.ColumnName 
99e0: 3d 20 63 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20  = columnName;.. 
99f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9a00: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
9a10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9a60: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
9a70: 6f 6e 20 49 45 71 75 61 6c 69 74 79 43 6f 6d 70  on IEqualityComp
9a80: 61 72 65 72 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e  arer<ColumnParen
9a90: 74 3e 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  t> Members..    
9aa0: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
9ab0: 45 71 75 61 6c 73 28 43 6f 6c 75 6d 6e 50 61 72  Equals(ColumnPar
9ac0: 65 6e 74 20 78 2c 20 43 6f 6c 75 6d 6e 50 61 72  ent x, ColumnPar
9ad0: 65 6e 74 20 79 29 0d 0a 20 20 20 20 20 20 20 20  ent y)..        
9ae0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
9af0: 66 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29 20 26  f ((x == null) &
9b00: 26 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  & (y == null))..
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9b30: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
9b40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
9b50: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
9b60: 28 28 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ((x == null) || 
9b70: 28 79 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  (y == null))..  
9b80: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9ba0: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
9bb0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9bc0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
9bd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9bf0: 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 78  !String.Equals(x
9c00: 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 2c 20 79  .DatabaseName, y
9c10: 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 2c 0d 0a  .DatabaseName,..
9c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c30: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f          StringCo
9c40: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
9c50: 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20  IgnoreCase))..  
9c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
9c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9c80: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
9c90: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
9ca0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9cb0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
9cc0: 72 69 6e 67 2e 45 71 75 61 6c 73 28 78 2e 54 61  ring.Equals(x.Ta
9cd0: 62 6c 65 4e 61 6d 65 2c 20 79 2e 54 61 62 6c 65  bleName, y.Table
9ce0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
9d00: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
9d10: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
9d20: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
9d30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9d50: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
9d60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d80: 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
9d90: 6c 73 28 78 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  ls(x.ColumnName,
9da0: 20 79 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 0d 0a   y.ColumnName,..
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9dc0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f          StringCo
9dd0: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
9de0: 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20  IgnoreCase))..  
9df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
9e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9e10: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
9e20: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
9e30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9e40: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9e50: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
9e60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
9e70: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
9e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ec0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
9ed0: 62 6c 69 63 20 69 6e 74 20 47 65 74 48 61 73 68  blic int GetHash
9ee0: 43 6f 64 65 28 43 6f 6c 75 6d 6e 50 61 72 65 6e  Code(ColumnParen
9ef0: 74 20 6f 62 6a 29 0d 0a 20 20 20 20 20 20 20 20  t obj)..        
9f00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
9f10: 6e 74 20 72 65 73 75 6c 74 20 3d 20 30 3b 0d 0a  nt result = 0;..
9f20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
9f30: 20 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20   ((obj != null) 
9f40: 26 26 20 28 6f 62 6a 2e 44 61 74 61 62 61 73 65  && (obj.Database
9f50: 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a  Name != null))..
9f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f70: 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e 44 61  result ^= obj.Da
9f80: 74 61 62 61 73 65 4e 61 6d 65 2e 47 65 74 48 61  tabaseName.GetHa
9f90: 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20  shCode();....   
9fa0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6f 62           if ((ob
9fb0: 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28 6f  j != null) && (o
9fc0: 62 6a 2e 54 61 62 6c 65 4e 61 6d 65 20 21 3d 20  bj.TableName != 
9fd0: 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
9fe0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 5e          result ^
9ff0: 3d 20 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d 65 2e  = obj.TableName.
a000: 47 65 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a  GetHashCode();..
a010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
a020: 20 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20   ((obj != null) 
a030: 26 26 20 28 6f 62 6a 2e 43 6f 6c 75 6d 6e 4e 61  && (obj.ColumnNa
a040: 6d 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  me != null))..  
a050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
a060: 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e 43 6f 6c 75  sult ^= obj.Colu
a070: 6d 6e 4e 61 6d 65 2e 47 65 74 48 61 73 68 43 6f  mnName.GetHashCo
a080: 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de();....       
a090: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
a0a0: 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lt;..        }..
a0b0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
a0c0: 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
a0d0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
a0e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a130: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
a140: 69 63 20 76 6f 69 64 20 47 65 74 53 74 61 74 65  ic void GetState
a150: 6d 65 6e 74 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  mentColumnParent
a160: 73 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s(..        SQLi
a170: 74 65 42 61 73 65 20 73 71 6c 2c 0d 0a 20 20 20  teBase sql,..   
a180: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
a190: 6d 65 6e 74 20 73 74 6d 74 2c 0d 0a 20 20 20 20  ment stmt,..    
a1a0: 20 20 20 20 69 6e 74 20 66 69 65 6c 64 43 6f 75      int fieldCou
a1b0: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66  nt,..        ref
a1c0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75   Dictionary<Colu
a1d0: 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69  mnParent, List<i
a1e0: 6e 74 3e 3e 20 70 61 72 65 6e 74 54 6f 43 6f 6c  nt>> parentToCol
a1f0: 75 6d 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20 72  umns,..        r
a200: 65 66 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e  ef Dictionary<in
a210: 74 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e  t, ColumnParent>
a220: 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 0d   columnToParent.
a230: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
a240: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 70  {..        if (p
a250: 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d  arentToColumns =
a260: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a270: 20 20 20 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c       parentToCol
a280: 75 6d 6e 73 20 3d 20 6e 65 77 20 44 69 63 74 69  umns = new Dicti
a290: 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65  onary<ColumnPare
a2a0: 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 28 0d  nt, List<int>>(.
a2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a2c0: 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65 6e   new ColumnParen
a2d0: 74 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  t());....       
a2e0: 20 69 66 20 28 63 6f 6c 75 6d 6e 54 6f 50 61 72   if (columnToPar
a2f0: 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent == null)..  
a300: 20 20 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e            column
a310: 54 6f 50 61 72 65 6e 74 20 3d 20 6e 65 77 20 44  ToParent = new D
a320: 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74 2c 20 43  ictionary<int, C
a330: 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 28 29 3b 0d  olumnParent>();.
a340: 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28  ...        for (
a350: 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 66  int n = 0; n < f
a360: 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0d  ieldCount; n++).
a370: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
a380: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
a390: 61 74 61 62 61 73 65 4e 61 6d 65 20 3d 20 73 71  atabaseName = sq
a3a0: 6c 2e 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65  l.ColumnDatabase
a3b0: 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a  Name(stmt, n);..
a3c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
a3d0: 6e 67 20 74 61 62 6c 65 4e 61 6d 65 20 3d 20 73  ng tableName = s
a3e0: 71 6c 2e 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61  ql.ColumnTableNa
a3f0: 6d 65 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a 20 20  me(stmt, n);..  
a400: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
a410: 20 63 6f 6c 75 6d 6e 4e 61 6d 65 20 3d 20 73 71   columnName = sq
a420: 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c  l.ColumnOriginal
a430: 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a  Name(stmt, n);..
a440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f  ..            Co
a450: 6c 75 6d 6e 50 61 72 65 6e 74 20 6b 65 79 20 3d  lumnParent key =
a460: 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65 6e   new ColumnParen
a470: 74 28 64 61 74 61 62 61 73 65 4e 61 6d 65 2c 20  t(databaseName, 
a480: 74 61 62 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c 29  tableName, null)
a490: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  ;..            C
a4a0: 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 76 61 6c 75  olumnParent valu
a4b0: 65 20 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61  e = new ColumnPa
a4c0: 72 65 6e 74 28 64 61 74 61 62 61 73 65 4e 61 6d  rent(databaseNam
a4d0: 65 2c 20 74 61 62 6c 65 4e 61 6d 65 2c 20 63 6f  e, tableName, co
a4e0: 6c 75 6d 6e 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  lumnName);....  
a4f0: 20 20 20 20 20 20 20 20 20 20 4c 69 73 74 3c 69            List<i
a500: 6e 74 3e 20 69 6e 64 65 78 4c 69 73 74 3b 0d 0a  nt> indexList;..
a510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
a520: 20 28 21 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d   (!parentToColum
a530: 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 6b  ns.TryGetValue(k
a540: 65 79 2c 20 6f 75 74 20 69 6e 64 65 78 4c 69 73  ey, out indexLis
a550: 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
a560: 20 20 20 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c       parentToCol
a570: 75 6d 6e 73 2e 41 64 64 28 6b 65 79 2c 20 6e 65  umns.Add(key, ne
a580: 77 20 4c 69 73 74 3c 69 6e 74 3e 28 6e 65 77 20  w List<int>(new 
a590: 69 6e 74 5b 5d 20 7b 20 6e 20 7d 29 29 3b 0d 0a  int[] { n }));..
a5a0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
a5b0: 20 69 66 20 28 69 6e 64 65 78 4c 69 73 74 20 21   if (indexList !
a5c0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a5d0: 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 4c 69           indexLi
a5e0: 73 74 2e 41 64 64 28 6e 29 3b 0d 0a 20 20 20 20  st.Add(n);..    
a5f0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
a600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
a610: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 5b 6b 65  rentToColumns[ke
a620: 79 5d 20 3d 20 6e 65 77 20 4c 69 73 74 3c 69 6e  y] = new List<in
a630: 74 3e 28 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 6e  t>(new int[] { n
a640: 20 7d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   });....        
a650: 20 20 20 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65      columnToPare
a660: 6e 74 2e 41 64 64 28 6e 2c 20 76 61 6c 75 65 29  nt.Add(n, value)
a670: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
a680: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
a690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72  //////....    pr
a6e0: 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
a6f0: 20 43 6f 75 6e 74 50 61 72 65 6e 74 73 28 0d 0a   CountParents(..
a700: 20 20 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61          Dictiona
a710: 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c  ry<ColumnParent,
a720: 20 4c 69 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65   List<int>> pare
a730: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 0d 0a 20 20 20  ntToColumns..   
a740: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
a750: 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 75 6c         int resul
a760: 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  t = 0;....      
a770: 20 20 69 66 20 28 70 61 72 65 6e 74 54 6f 43 6f    if (parentToCo
a780: 6c 75 6d 6e 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a  lumns != null)..
a790: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a7a0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
a7b0: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6b 65 79  ColumnParent key
a7c0: 20 69 6e 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75   in parentToColu
a7d0: 6d 6e 73 2e 4b 65 79 73 29 0d 0a 20 20 20 20 20  mns.Keys)..     
a7e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a7f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
a800: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
a810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a820: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
a830: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
a840: 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 20 3d 20  ing tableName = 
a850: 6b 65 79 2e 54 61 62 6c 65 4e 61 6d 65 3b 0d 0a  key.TableName;..
a860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a870: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
a880: 75 6c 6c 4f 72 45 6d 70 74 79 28 74 61 62 6c 65  ullOrEmpty(table
a890: 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
a8a0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
a8b0: 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
a8c0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2b           result+
a8d0: 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
a8e0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
a8f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
a900: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  esult;..    }...
a910: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
a920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a960: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
a970: 20 44 61 74 61 54 61 62 6c 65 20 47 65 74 53 63   DataTable GetSc
a980: 68 65 6d 61 54 61 62 6c 65 28 62 6f 6f 6c 20 77  hemaTable(bool w
a990: 61 6e 74 55 6e 69 71 75 65 49 6e 66 6f 2c 20 62  antUniqueInfo, b
a9a0: 6f 6f 6c 20 77 61 6e 74 44 65 66 61 75 6c 74 56  ool wantDefaultV
a9b0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
a9c0: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
a9d0: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 74  );..      if (_t
a9e0: 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29 20  hrowOnDisposed) 
a9f0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43 68  SQLiteCommand.Ch
aa00: 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d 0a  eck(_command);..
aa10: 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20  ..      //..    
aa20: 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 57 65 20    // BUGFIX: We 
aa30: 6e 65 65 64 20 74 6f 20 71 75 69 63 6b 6c 79 20  need to quickly 
aa40: 73 63 61 6e 20 61 6c 6c 20 74 68 65 20 66 69 65  scan all the fie
aa50: 6c 64 73 20 69 6e 20 74 68 65 20 63 75 72 72 65  lds in the curre
aa60: 6e 74 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  nt..      //    
aa70: 20 20 20 20 20 22 72 65 73 75 6c 74 20 73 65 74       "result set
aa80: 22 20 74 6f 20 73 65 65 20 68 6f 77 20 6d 61 6e  " to see how man
aa90: 79 20 64 69 73 74 69 6e 63 74 20 74 61 62 6c 65  y distinct table
aaa0: 73 20 61 72 65 20 61 63 74 75 61 6c 6c 79 0d 0a  s are actually..
aab0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
aac0: 20 69 6e 76 6f 6c 76 65 64 2e 20 20 54 68 69 73   involved.  This
aad0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
aae0: 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74 68 61  necessary so tha
aaf0: 74 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 2f 2f  t some..      //
ab00: 20 20 20 20 20 20 20 20 20 69 6e 74 65 6c 6c 69           intelli
ab10: 67 65 6e 74 20 64 65 63 69 73 69 6f 6e 73 20 63  gent decisions c
ab20: 61 6e 20 62 65 20 6d 61 64 65 20 77 68 65 6e 20  an be made when 
ab30: 63 6f 6e 73 74 72 75 63 74 69 6e 67 20 74 68 65  constructing the
ab40: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
ab50: 20 20 20 6d 65 74 61 64 61 74 61 20 62 65 6c 6f     metadata belo
ab60: 77 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  w.  For example,
ab70: 20 77 65 20 6e 65 65 64 20 74 6f 20 62 65 20 76   we need to be v
ab80: 65 72 79 20 63 61 72 65 66 75 6c 0d 0a 20 20 20  ery careful..   
ab90: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 61 62     //         ab
aba0: 6f 75 74 20 66 6c 61 67 67 69 6e 67 20 61 20 70  out flagging a p
abb0: 61 72 74 69 63 75 6c 61 72 20 63 6f 6c 75 6d 6e  articular column
abc0: 20 61 73 20 22 75 6e 69 71 75 65 22 20 6a 75 73   as "unique" jus
abd0: 74 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  t..      //     
abe0: 20 20 20 20 62 65 63 61 75 73 65 20 69 74 20 77      because it w
abf0: 61 73 20 69 6e 20 69 74 73 20 6f 72 69 67 69 6e  as in its origin
ac00: 61 6c 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61  al underlying da
ac10: 74 61 62 61 73 65 20 74 61 62 6c 65 0d 0a 20 20  tabase table..  
ac20: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69      //         i
ac30: 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 77 20  f there are now 
ac40: 6d 75 6c 74 69 70 6c 65 20 74 61 62 6c 65 73 20  multiple tables 
ac50: 69 6e 76 6f 6c 76 65 64 20 69 6e 20 74 68 65 0d  involved in the.
ac60: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
ac70: 20 20 22 72 65 73 75 6c 74 20 73 65 74 22 2e 20    "result set". 
ac80: 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 65 33   See ticket [7e3
ac90: 66 61 39 33 37 34 34 5d 20 66 6f 72 20 6d 6f 72  fa93744] for mor
aca0: 65 20 64 65 74 61 69 6c 65 64 0d 0a 20 20 20 20  e detailed..    
acb0: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 66    //         inf
acc0: 6f 72 6d 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  ormation...     
acd0: 20 2f 2f 0d 0a 20 20 20 20 20 20 44 69 63 74 69   //..      Dicti
ace0: 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65  onary<ColumnPare
acf0: 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20 70  nt, List<int>> p
ad00: 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d  arentToColumns =
ad10: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 44 69   null;..      Di
ad20: 63 74 69 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f  ctionary<int, Co
ad30: 6c 75 6d 6e 50 61 72 65 6e 74 3e 20 63 6f 6c 75  lumnParent> colu
ad40: 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 20 6e 75 6c  mnToParent = nul
ad50: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 65 74 53  l;....      GetS
ad60: 74 61 74 65 6d 65 6e 74 43 6f 6c 75 6d 6e 50 61  tatementColumnPa
ad70: 72 65 6e 74 73 28 0d 0a 20 20 20 20 20 20 20 20  rents(..        
ad80: 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65    _command.Conne
ad90: 63 74 69 6f 6e 2e 5f 73 71 6c 2c 20 5f 61 63 74  ction._sql, _act
ada0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 5f 66  iveStatement, _f
adb0: 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  ieldCount,..    
adc0: 20 20 20 20 20 20 72 65 66 20 70 61 72 65 6e 74        ref parent
add0: 54 6f 43 6f 6c 75 6d 6e 73 2c 20 72 65 66 20 63  ToColumns, ref c
ade0: 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 29 3b 0d  olumnToParent);.
adf0: 0a 0d 0a 20 20 20 20 20 20 44 61 74 61 54 61 62  ...      DataTab
ae00: 6c 65 20 74 62 6c 20 3d 20 6e 65 77 20 44 61 74  le tbl = new Dat
ae10: 61 54 61 62 6c 65 28 22 53 63 68 65 6d 61 54 61  aTable("SchemaTa
ae20: 62 6c 65 22 29 3b 0d 0a 20 20 20 20 20 20 44 61  ble");..      Da
ae30: 74 61 54 61 62 6c 65 20 74 62 6c 49 6e 64 65 78  taTable tblIndex
ae40: 65 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  es = null;..    
ae50: 20 20 44 61 74 61 54 61 62 6c 65 20 74 62 6c 49    DataTable tblI
ae60: 6e 64 65 78 43 6f 6c 75 6d 6e 73 3b 0d 0a 20 20  ndexColumns;..  
ae70: 20 20 20 20 44 61 74 61 52 6f 77 20 72 6f 77 3b      DataRow row;
ae80: 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 74  ..      string t
ae90: 65 6d 70 3b 0d 0a 20 20 20 20 20 20 73 74 72 69  emp;..      stri
aea0: 6e 67 20 73 74 72 43 61 74 61 6c 6f 67 20 3d 20  ng strCatalog = 
aeb0: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20  String.Empty;.. 
aec0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 54       string strT
aed0: 61 62 6c 65 20 3d 20 53 74 72 69 6e 67 2e 45 6d  able = String.Em
aee0: 70 74 79 3b 0d 0a 20 20 20 20 20 20 73 74 72 69  pty;..      stri
aef0: 6e 67 20 73 74 72 43 6f 6c 75 6d 6e 20 3d 20 53  ng strColumn = S
af00: 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a  tring.Empty;....
af10: 20 20 20 20 20 20 74 62 6c 2e 4c 6f 63 61 6c 65        tbl.Locale
af20: 20 3d 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49   = CultureInfo.I
af30: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 3b  nvariantCulture;
af40: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
af50: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
af60: 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
af70: 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72  Name, typeof(Str
af80: 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ing));..      tb
af90: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
afa0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
afb0: 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 2c 20 74  ColumnOrdinal, t
afc0: 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20  ypeof(int));..  
afd0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
afe0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
aff0: 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65  olumn.ColumnSize
b000: 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d  , typeof(int));.
b010: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
b020: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
b030: 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63  leColumn.Numeric
b040: 50 72 65 63 69 73 69 6f 6e 2c 20 74 79 70 65 6f  Precision, typeo
b050: 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20  f(int));..      
b060: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
b070: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
b080: 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c 65 2c 20  n.NumericScale, 
b090: 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20  typeof(int));.. 
b0a0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
b0b0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
b0c0: 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 2c  Column.IsUnique,
b0d0: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
b0e0: 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
b0f0: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
b100: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65  TableColumn.IsKe
b110: 79 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  y, typeof(Boolea
b120: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  n));..      tbl.
b130: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
b140: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
b150: 6f 6c 75 6d 6e 2e 42 61 73 65 53 65 72 76 65 72  olumn.BaseServer
b160: 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 73 74 72  Name, typeof(str
b170: 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ing));..      tb
b180: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
b190: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
b1a0: 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61  lColumn.BaseCata
b1b0: 6c 6f 67 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28  logName, typeof(
b1c0: 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20  String));..     
b1d0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
b1e0: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
b1f0: 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d  mn.BaseColumnNam
b200: 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67  e, typeof(String
b210: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
b220: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
b230: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
b240: 65 53 63 68 65 6d 61 4e 61 6d 65 2c 20 74 79 70  eSchemaName, typ
b250: 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20  eof(String));.. 
b260: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
b270: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
b280: 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65  Column.BaseTable
b290: 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72  Name, typeof(Str
b2a0: 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ing));..      tb
b2b0: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
b2c0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
b2d0: 44 61 74 61 54 79 70 65 2c 20 74 79 70 65 6f 66  DataType, typeof
b2e0: 28 54 79 70 65 29 29 3b 0d 0a 20 20 20 20 20 20  (Type));..      
b2f0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
b300: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
b310: 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 2c 20 74  n.AllowDBNull, t
b320: 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b  ypeof(Boolean));
b330: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
b340: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
b350: 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64  bleColumn.Provid
b360: 65 72 54 79 70 65 2c 20 74 79 70 65 6f 66 28 69  erType, typeof(i
b370: 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  nt));..      tbl
b380: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
b390: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49  emaTableColumn.I
b3a0: 73 41 6c 69 61 73 65 64 2c 20 74 79 70 65 6f 66  sAliased, typeof
b3b0: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20  (Boolean));..   
b3c0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
b3d0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
b3e0: 6c 75 6d 6e 2e 49 73 45 78 70 72 65 73 73 69 6f  lumn.IsExpressio
b3f0: 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  n, typeof(Boolea
b400: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  n));..      tbl.
b410: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
b420: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
b430: 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72  olumn.IsAutoIncr
b440: 65 6d 65 6e 74 2c 20 74 79 70 65 6f 66 28 42 6f  ement, typeof(Bo
b450: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
b460: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
b470: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
b480: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56  nalColumn.IsRowV
b490: 65 72 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42  ersion, typeof(B
b4a0: 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20  oolean));..     
b4b0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
b4c0: 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  (SchemaTableOpti
b4d0: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 48 69 64  onalColumn.IsHid
b4e0: 64 65 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  den, typeof(Bool
b4f0: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ean));..      tb
b500: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
b510: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
b520: 49 73 4c 6f 6e 67 2c 20 74 79 70 65 6f 66 28 42  IsLong, typeof(B
b530: 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20  oolean));..     
b540: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
b550: 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  (SchemaTableOpti
b560: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65 61  onalColumn.IsRea
b570: 64 4f 6e 6c 79 2c 20 74 79 70 65 6f 66 28 42 6f  dOnly, typeof(Bo
b580: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
b590: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
b5a0: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
b5b0: 6e 61 6c 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64  nalColumn.Provid
b5c0: 65 72 53 70 65 63 69 66 69 63 44 61 74 61 54 79  erSpecificDataTy
b5d0: 70 65 2c 20 74 79 70 65 6f 66 28 54 79 70 65 29  pe, typeof(Type)
b5e0: 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
b5f0: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
b600: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
b610: 75 6d 6e 2e 44 65 66 61 75 6c 74 56 61 6c 75 65  umn.DefaultValue
b620: 2c 20 74 79 70 65 6f 66 28 6f 62 6a 65 63 74 29  , typeof(object)
b630: 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
b640: 6c 75 6d 6e 73 2e 41 64 64 28 22 44 61 74 61 54  lumns.Add("DataT
b650: 79 70 65 4e 61 6d 65 22 2c 20 74 79 70 65 6f 66  ypeName", typeof
b660: 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (string));..    
b670: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
b680: 64 28 22 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65  d("CollationType
b690: 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67  ", typeof(string
b6a0: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 42  ));..      tbl.B
b6b0: 65 67 69 6e 4c 6f 61 64 44 61 74 61 28 29 3b 0d  eginLoadData();.
b6c0: 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e  ...      for (in
b6d0: 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 66 69  t n = 0; n < _fi
b6e0: 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0d 0a  eldCount; n++)..
b6f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b700: 20 53 51 4c 69 74 65 54 79 70 65 20 73 71 6c 54   SQLiteType sqlT
b710: 79 70 65 20 3d 20 47 65 74 53 51 4c 69 74 65 54  ype = GetSQLiteT
b720: 79 70 65 28 5f 66 6c 61 67 73 2c 20 6e 29 3b 0d  ype(_flags, n);.
b730: 0a 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 20 3d  ...        row =
b740: 20 74 62 6c 2e 4e 65 77 52 6f 77 28 29 3b 0d 0a   tbl.NewRow();..
b750: 0d 0a 20 20 20 20 20 20 20 20 44 62 54 79 70 65  ..        DbType
b760: 20 74 79 70 20 3d 20 73 71 6c 54 79 70 65 2e 54   typ = sqlType.T
b770: 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ype;....        
b780: 2f 2f 20 44 65 66 61 75 6c 74 20 73 65 74 74 69  // Default setti
b790: 6e 67 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ngs for the colu
b7a0: 6d 6e 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  mn..        row[
b7b0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
b7c0: 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20 3d 20  n.ColumnName] = 
b7d0: 47 65 74 4e 61 6d 65 28 6e 29 3b 0d 0a 20 20 20  GetName(n);..   
b7e0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
b7f0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d  ableColumn.Colum
b800: 6e 4f 72 64 69 6e 61 6c 5d 20 3d 20 6e 3b 0d 0a  nOrdinal] = n;..
b810: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
b820: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f  maTableColumn.Co
b830: 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20 53 51 4c 69  lumnSize] = SQLi
b840: 74 65 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65  teConvert.DbType
b850: 54 6f 43 6f 6c 75 6d 6e 53 69 7a 65 28 74 79 70  ToColumnSize(typ
b860: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  );..        row[
b870: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
b880: 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69  n.NumericPrecisi
b890: 6f 6e 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76  on] = SQLiteConv
b8a0: 65 72 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65  ert.DbTypeToNume
b8b0: 72 69 63 50 72 65 63 69 73 69 6f 6e 28 74 79 70  ricPrecision(typ
b8c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  );..        row[
b8d0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
b8e0: 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c 65 5d 20  n.NumericScale] 
b8f0: 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  = SQLiteConvert.
b900: 44 62 54 79 70 65 54 6f 4e 75 6d 65 72 69 63 53  DbTypeToNumericS
b910: 63 61 6c 65 28 74 79 70 29 3b 0d 0a 20 20 20 20  cale(typ);..    
b920: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
b930: 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64  bleColumn.Provid
b940: 65 72 54 79 70 65 5d 20 3d 20 73 71 6c 54 79 70  erType] = sqlTyp
b950: 65 2e 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20  e.Type;..       
b960: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
b970: 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e 67 5d 20 3d  Column.IsLong] =
b980: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
b990: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
b9a0: 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75  Column.AllowDBNu
b9b0: 6c 6c 5d 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ll] = true;..   
b9c0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
b9d0: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
b9e0: 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 5d 20 3d  mn.IsReadOnly] =
b9f0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
ba00: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
ba10: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
ba20: 73 52 6f 77 56 65 72 73 69 6f 6e 5d 20 3d 20 66  sRowVersion] = f
ba30: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 72  alse;..        r
ba40: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
ba50: 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 20 3d  lumn.IsUnique] =
ba60: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
ba70: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
ba80: 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20  Column.IsKey] = 
ba90: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
baa0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
bab0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
bac0: 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d  AutoIncrement] =
bad0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
bae0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
baf0: 43 6f 6c 75 6d 6e 2e 44 61 74 61 54 79 70 65 5d  Column.DataType]
bb00: 20 3d 20 47 65 74 46 69 65 6c 64 54 79 70 65 28   = GetFieldType(
bb10: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77  n);..        row
bb20: 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  [SchemaTableOpti
bb30: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 48 69 64  onalColumn.IsHid
bb40: 64 65 6e 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  den] = false;.. 
bb50: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
bb60: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
bb70: 65 53 63 68 65 6d 61 4e 61 6d 65 5d 20 3d 20 5f  eSchemaName] = _
bb80: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 3b 0d  baseSchemaName;.
bb90: 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72 43 6f  ...        strCo
bba0: 6c 75 6d 6e 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50  lumn = columnToP
bbb0: 61 72 65 6e 74 5b 6e 5d 2e 43 6f 6c 75 6d 6e 4e  arent[n].ColumnN
bbc0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ame;..        if
bbd0: 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
bbe0: 72 45 6d 70 74 79 28 73 74 72 43 6f 6c 75 6d 6e  rEmpty(strColumn
bbf0: 29 20 3d 3d 20 66 61 6c 73 65 29 20 72 6f 77 5b  ) == false) row[
bc00: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
bc10: 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65  n.BaseColumnName
bc20: 5d 20 3d 20 73 74 72 43 6f 6c 75 6d 6e 3b 0d 0a  ] = strColumn;..
bc30: 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ..        row[Sc
bc40: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
bc50: 49 73 45 78 70 72 65 73 73 69 6f 6e 5d 20 3d 20  IsExpression] = 
bc60: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
bc70: 6d 70 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29 3b  mpty(strColumn);
bc80: 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ..        row[Sc
bc90: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
bca0: 49 73 41 6c 69 61 73 65 64 5d 20 3d 20 28 53 74  IsAliased] = (St
bcb0: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74  ring.Compare(Get
bcc0: 4e 61 6d 65 28 6e 29 2c 20 73 74 72 43 6f 6c 75  Name(n), strColu
bcd0: 6d 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  mn, StringCompar
bce0: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
bcf0: 72 65 43 61 73 65 29 20 21 3d 20 30 29 3b 0d 0a  reCase) != 0);..
bd00: 0d 0a 20 20 20 20 20 20 20 20 74 65 6d 70 20 3d  ..        temp =
bd10: 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 5b   columnToParent[
bd20: 6e 5d 2e 54 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20  n].TableName;.. 
bd30: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
bd40: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
bd50: 74 65 6d 70 29 20 3d 3d 20 66 61 6c 73 65 29 20  temp) == false) 
bd60: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
bd70: 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e  olumn.BaseTableN
bd80: 61 6d 65 5d 20 3d 20 74 65 6d 70 3b 0d 0a 0d 0a  ame] = temp;....
bd90: 20 20 20 20 20 20 20 20 74 65 6d 70 20 3d 20 63          temp = c
bda0: 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d  olumnToParent[n]
bdb0: 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a  .DatabaseName;..
bdc0: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
bdd0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
bde0: 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c 73 65 29  (temp) == false)
bdf0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
be00: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42  OptionalColumn.B
be10: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20  aseCatalogName] 
be20: 3d 20 74 65 6d 70 3b 0d 0a 0d 0a 20 20 20 20 20  = temp;....     
be30: 20 20 20 73 74 72 69 6e 67 20 64 61 74 61 54 79     string dataTy
be40: 70 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  pe = null;..    
be50: 20 20 20 20 2f 2f 20 49 66 20 77 65 20 68 61 76      // If we hav
be60: 65 20 61 20 74 61 62 6c 65 2d 62 6f 75 6e 64 20  e a table-bound 
be70: 63 6f 6c 75 6d 6e 2c 20 65 78 74 72 61 63 74 20  column, extract 
be80: 74 68 65 20 65 78 74 72 61 20 69 6e 66 6f 72 6d  the extra inform
be90: 61 74 69 6f 6e 20 66 72 6f 6d 20 69 74 0d 0a 20  ation from it.. 
bea0: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
beb0: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
bec0: 73 74 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61  strColumn) == fa
bed0: 6c 73 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  lse)..        {.
bee0: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e  .          strin
bef0: 67 20 63 6f 6c 6c 53 65 71 20 3d 20 6e 75 6c 6c  g collSeq = null
bf00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f  ;..          boo
bf10: 6c 20 62 4e 6f 74 4e 75 6c 6c 20 3d 20 66 61 6c  l bNotNull = fal
bf20: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  se;..          b
bf30: 6f 6f 6c 20 62 50 72 69 6d 61 72 79 4b 65 79 20  ool bPrimaryKey 
bf40: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
bf50: 20 20 20 20 62 6f 6f 6c 20 62 41 75 74 6f 49 6e      bool bAutoIn
bf60: 63 72 65 6d 65 6e 74 20 3d 20 66 61 6c 73 65 3b  crement = false;
bf70: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69  ..          stri
bf80: 6e 67 5b 5d 20 61 72 53 69 7a 65 3b 0d 0a 0d 0a  ng[] arSize;....
bf90: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 47 65 74            // Get
bfa0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 65 74 61   the column meta
bfb0: 20 64 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20   data..         
bfc0: 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63   _command.Connec
bfd0: 74 69 6f 6e 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  tion._sql.Column
bfe0: 4d 65 74 61 44 61 74 61 28 0d 0a 20 20 20 20 20  MetaData(..     
bff0: 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 72         (string)r
c000: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
c010: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73  tionalColumn.Bas
c020: 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 2c 0d 0a  eCatalogName],..
c030: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72              (str
c040: 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61  ing)row[SchemaTa
c050: 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61  bleColumn.BaseTa
c060: 62 6c 65 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20  bleName],..     
c070: 20 20 20 20 20 20 20 73 74 72 43 6f 6c 75 6d 6e         strColumn
c080: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
c090: 65 66 20 64 61 74 61 54 79 70 65 2c 20 72 65 66  ef dataType, ref
c0a0: 20 63 6f 6c 6c 53 65 71 2c 20 72 65 66 20 62 4e   collSeq, ref bN
c0b0: 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 62 50 72 69  otNull, ref bPri
c0c0: 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 62 41 75  maryKey, ref bAu
c0d0: 74 6f 49 6e 63 72 65 6d 65 6e 74 29 3b 0d 0a 0d  toIncrement);...
c0e0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62  .          if (b
c0f0: 4e 6f 74 4e 75 6c 6c 20 7c 7c 20 62 50 72 69 6d  NotNull || bPrim
c100: 61 72 79 4b 65 79 29 20 72 6f 77 5b 53 63 68 65  aryKey) row[Sche
c110: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c  maTableColumn.Al
c120: 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 20 66 61 6c  lowDBNull] = fal
c130: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
c140: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
c150: 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20  Column.IsKey] = 
c160: 62 50 72 69 6d 61 72 79 4b 65 79 20 26 26 20 43  bPrimaryKey && C
c170: 6f 75 6e 74 50 61 72 65 6e 74 73 28 70 61 72 65  ountParents(pare
c180: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 29 20 3c 3d 20  ntToColumns) <= 
c190: 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 6f  1;..          ro
c1a0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
c1b0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75  ionalColumn.IsAu
c1c0: 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 62  toIncrement] = b
c1d0: 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 3b 0d 0a  AutoIncrement;..
c1e0: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 22 43            row["C
c1f0: 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 22 5d 20 3d  ollationType"] =
c200: 20 63 6f 6c 6c 53 65 71 3b 0d 0a 0d 0a 20 20 20   collSeq;....   
c210: 20 20 20 20 20 20 20 2f 2f 20 46 6f 72 20 74 79         // For ty
c220: 70 65 73 20 6c 69 6b 65 20 76 61 72 63 68 61 72  pes like varchar
c230: 28 35 30 29 20 61 6e 64 20 73 75 63 68 2c 20 65  (50) and such, e
c240: 78 74 72 61 63 74 20 74 68 65 20 73 69 7a 65 0d  xtract the size.
c250: 0a 20 20 20 20 20 20 20 20 20 20 61 72 53 69 7a  .          arSiz
c260: 65 20 3d 20 64 61 74 61 54 79 70 65 2e 53 70 6c  e = dataType.Spl
c270: 69 74 28 27 28 27 29 3b 0d 0a 20 20 20 20 20 20  it('(');..      
c280: 20 20 20 20 69 66 20 28 61 72 53 69 7a 65 2e 4c      if (arSize.L
c290: 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20 20 20  ength > 1)..    
c2a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c2b0: 20 20 20 20 20 64 61 74 61 54 79 70 65 20 3d 20       dataType = 
c2c0: 61 72 53 69 7a 65 5b 30 5d 3b 0d 0a 20 20 20 20  arSize[0];..    
c2d0: 20 20 20 20 20 20 20 20 61 72 53 69 7a 65 20 3d          arSize =
c2e0: 20 61 72 53 69 7a 65 5b 31 5d 2e 53 70 6c 69 74   arSize[1].Split
c2f0: 28 27 29 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  (')');..        
c300: 20 20 20 20 69 66 20 28 61 72 53 69 7a 65 2e 4c      if (arSize.L
c310: 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20 20 20  ength > 1)..    
c320: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c330: 20 20 20 20 20 20 20 20 20 61 72 53 69 7a 65 20           arSize 
c340: 3d 20 61 72 53 69 7a 65 5b 30 5d 2e 53 70 6c 69  = arSize[0].Spli
c350: 74 28 27 2c 27 2c 20 27 2e 27 29 3b 0d 0a 20 20  t(',', '.');..  
c360: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c370: 73 71 6c 54 79 70 65 2e 54 79 70 65 20 3d 3d 20  sqlType.Type == 
c380: 44 62 54 79 70 65 2e 42 69 6e 61 72 79 20 7c 7c  DbType.Binary ||
c390: 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 49   SQLiteConvert.I
c3a0: 73 53 74 72 69 6e 67 44 62 54 79 70 65 28 73 71  sStringDbType(sq
c3b0: 6c 54 79 70 65 2e 54 79 70 65 29 29 0d 0a 20 20  lType.Type))..  
c3c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c3e0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
c3f0: 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d  lumn.ColumnSize]
c400: 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74   = Convert.ToInt
c410: 33 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20 43 75  32(arSize[0], Cu
c420: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
c430: 61 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20  antCulture);..  
c440: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c450: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
c460: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
c470: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c480: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
c490: 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69  bleColumn.Numeri
c4a0: 63 50 72 65 63 69 73 69 6f 6e 5d 20 3d 20 43 6f  cPrecision] = Co
c4b0: 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72  nvert.ToInt32(ar
c4c0: 53 69 7a 65 5b 30 5d 2c 20 43 75 6c 74 75 72 65  Size[0], Culture
c4d0: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
c4e0: 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20  lture);..       
c4f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 53           if (arS
c500: 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d  ize.Length > 1).
c510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c520: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c530: 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63  leColumn.Numeric
c540: 53 63 61 6c 65 5d 20 3d 20 43 6f 6e 76 65 72 74  Scale] = Convert
c550: 2e 54 6f 49 6e 74 33 32 28 61 72 53 69 7a 65 5b  .ToInt32(arSize[
c560: 31 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  1], CultureInfo.
c570: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
c580: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
c590: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
c5a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
c5b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
c5c0: 28 77 61 6e 74 44 65 66 61 75 6c 74 56 61 6c 75  (wantDefaultValu
c5d0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  e)..          {.
c5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
c5f0: 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 64 65  Determine the de
c600: 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20  fault value for 
c610: 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 77 68 69 63  the column, whic
c620: 68 20 73 75 63 6b 73 20 62 65 63 61 75 73 65 20  h sucks because 
c630: 77 65 20 68 61 76 65 20 74 6f 20 71 75 65 72 79  we have to query
c640: 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20   the schema for 
c650: 65 61 63 68 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20  each column..   
c660: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
c670: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6d  SQLiteCommand cm
c680: 64 54 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c  dTable = new SQL
c690: 69 74 65 43 6f 6d 6d 61 6e 64 28 48 65 6c 70 65  iteCommand(Helpe
c6a0: 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
c6b0: 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
c6c0: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
c6d0: 72 65 2c 20 22 50 52 41 47 4d 41 20 5b 7b 30 7d  re, "PRAGMA [{0}
c6e0: 5d 2e 54 41 42 4c 45 5f 49 4e 46 4f 28 5b 7b 31  ].TABLE_INFO([{1
c6f0: 7d 5d 29 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  }])",..         
c700: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
c710: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
c720: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
c730: 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me],..          
c740: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
c750: 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61  bleColumn.BaseTa
c760: 62 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  bleName]..      
c770: 20 20 20 20 20 20 20 20 29 2c 20 5f 63 6f 6d 6d          ), _comm
c780: 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 29 29  and.Connection))
c790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
c7a0: 69 6e 67 20 28 44 62 44 61 74 61 52 65 61 64 65  ing (DbDataReade
c7b0: 72 20 72 64 54 61 62 6c 65 20 3d 20 63 6d 64 54  r rdTable = cmdT
c7c0: 61 62 6c 65 2e 45 78 65 63 75 74 65 52 65 61 64  able.ExecuteRead
c7d0: 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  er())..         
c7e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c7f0: 20 20 20 20 2f 2f 20 46 69 6e 64 20 74 68 65 20      // Find the 
c800: 6d 61 74 63 68 69 6e 67 20 63 6f 6c 75 6d 6e 0d  matching column.
c810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77  .              w
c820: 68 69 6c 65 20 28 72 64 54 61 62 6c 65 2e 52 65  hile (rdTable.Re
c830: 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ad())..         
c840: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c850: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
c860: 6e 67 2e 43 6f 6d 70 61 72 65 28 28 73 74 72 69  ng.Compare((stri
c870: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
c880: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c  leColumn.BaseCol
c890: 75 6d 6e 4e 61 6d 65 5d 2c 20 72 64 54 61 62 6c  umnName], rdTabl
c8a0: 65 2e 47 65 74 53 74 72 69 6e 67 28 31 29 2c 20  e.GetString(1), 
c8b0: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
c8c0: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
c8d0: 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  se) == 0)..     
c8e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c900: 69 66 20 28 72 64 54 61 62 6c 65 2e 49 73 44 42  if (rdTable.IsDB
c910: 4e 75 6c 6c 28 34 29 20 3d 3d 20 66 61 6c 73 65  Null(4) == false
c920: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
c930: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
c940: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
c950: 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56 61 6c 75  lumn.DefaultValu
c960: 65 5d 20 3d 20 72 64 54 61 62 6c 65 5b 34 5d 3b  e] = rdTable[4];
c970: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c980: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
c990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
c9a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
c9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
c9c0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
c9d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65 74            // Det
c9e0: 65 72 6d 69 6e 65 20 49 73 55 6e 69 71 75 65 20  ermine IsUnique 
c9f0: 70 72 6f 70 65 72 6c 79 2c 20 77 68 69 63 68 20  properly, which 
ca00: 69 73 20 61 20 70 61 69 6e 20 69 6e 20 74 68 65  is a pain in the
ca10: 20 62 75 74 74 21 0d 0a 20 20 20 20 20 20 20 20   butt!..        
ca20: 20 20 69 66 20 28 77 61 6e 74 55 6e 69 71 75 65    if (wantUnique
ca30: 49 6e 66 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Info)..         
ca40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ca50: 69 66 20 28 28 73 74 72 69 6e 67 29 72 6f 77 5b  if ((string)row[
ca60: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
ca70: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61  nalColumn.BaseCa
ca80: 74 61 6c 6f 67 4e 61 6d 65 5d 20 21 3d 20 73 74  talogName] != st
ca90: 72 43 61 74 61 6c 6f 67 0d 0a 20 20 20 20 20 20  rCatalog..      
caa0: 20 20 20 20 20 20 20 20 7c 7c 20 28 73 74 72 69          || (stri
cab0: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
cac0: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62  leColumn.BaseTab
cad0: 6c 65 4e 61 6d 65 5d 20 21 3d 20 73 74 72 54 61  leName] != strTa
cae0: 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ble)..          
caf0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cb00: 20 20 20 73 74 72 43 61 74 61 6c 6f 67 20 3d 20     strCatalog = 
cb10: 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65  (string)row[Sche
cb20: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
cb30: 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f  olumn.BaseCatalo
cb40: 67 4e 61 6d 65 5d 3b 0d 0a 20 20 20 20 20 20 20  gName];..       
cb50: 20 20 20 20 20 20 20 73 74 72 54 61 62 6c 65 20         strTable 
cb60: 3d 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63  = (string)row[Sc
cb70: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
cb80: 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 3b 0d  BaseTableName];.
cb90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
cba0: 20 74 62 6c 49 6e 64 65 78 65 73 20 3d 20 5f 63   tblIndexes = _c
cbb0: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
cbc0: 6e 2e 47 65 74 53 63 68 65 6d 61 28 22 49 6e 64  n.GetSchema("Ind
cbd0: 65 78 65 73 22 2c 20 6e 65 77 20 73 74 72 69 6e  exes", new strin
cbe0: 67 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  g[] {..         
cbf0: 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 72         (string)r
cc00: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
cc10: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73  tionalColumn.Bas
cc20: 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 2c 0d 0a  eCatalogName],..
cc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc40: 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
cc50: 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 72         (string)r
cc60: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
cc70: 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61  lumn.BaseTableNa
cc80: 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me],..          
cc90: 20 20 20 20 20 20 6e 75 6c 6c 20 7d 29 3b 0d 0a        null });..
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
ccb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
ccc0: 65 61 63 68 20 28 44 61 74 61 52 6f 77 20 72 6f  each (DataRow ro
ccd0: 77 49 6e 64 65 78 65 73 20 69 6e 20 74 62 6c 49  wIndexes in tblI
cce0: 6e 64 65 78 65 73 2e 52 6f 77 73 29 0d 0a 20 20  ndexes.Rows)..  
ccf0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
cd00: 20 20 20 20 20 20 20 20 20 20 20 74 62 6c 49 6e             tblIn
cd10: 64 65 78 43 6f 6c 75 6d 6e 73 20 3d 20 5f 63 6f  dexColumns = _co
cd20: 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
cd30: 2e 47 65 74 53 63 68 65 6d 61 28 22 49 6e 64 65  .GetSchema("Inde
cd40: 78 43 6f 6c 75 6d 6e 73 22 2c 20 6e 65 77 20 73  xColumns", new s
cd50: 74 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20  tring[] {..     
cd60: 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
cd70: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
cd80: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
cd90: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
cda0: 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ],..            
cdb0: 20 20 20 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20      null,..     
cdc0: 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
cdd0: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
cde0: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62  leColumn.BaseTab
cdf0: 6c 65 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20  leName],..      
ce00: 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e            (strin
ce10: 67 29 72 6f 77 49 6e 64 65 78 65 73 5b 22 49 4e  g)rowIndexes["IN
ce20: 44 45 58 5f 4e 41 4d 45 22 5d 2c 0d 0a 20 20 20  DEX_NAME"],..   
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
ce40: 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  l..             
ce50: 20 20 20 7d 29 3b 0d 0a 20 20 20 20 20 20 20 20     });..        
ce60: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 44        foreach (D
ce70: 61 74 61 52 6f 77 20 72 6f 77 43 6f 6c 75 6d 6e  ataRow rowColumn
ce80: 49 6e 64 65 78 20 69 6e 20 74 62 6c 49 6e 64 65  Index in tblInde
ce90: 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73 29 0d 0a  xColumns.Rows)..
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
ceb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cec0: 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70   if (String.Comp
ced0: 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 76 65 72  are(SQLiteConver
cee0: 74 2e 47 65 74 53 74 72 69 6e 67 4f 72 4e 75 6c  t.GetStringOrNul
cef0: 6c 28 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64 65 78  l(rowColumnIndex
cf00: 5b 22 43 4f 4c 55 4d 4e 5f 4e 41 4d 45 22 5d 29  ["COLUMN_NAME"])
cf10: 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c 20 53 74 72  , strColumn, Str
cf20: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
cf30: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
cf40: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
cf50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
cf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
cf70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cf80: 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 4d 61     // BUGFIX: Ma
cf90: 6b 65 20 73 75 72 65 20 74 68 61 74 20 77 65 20  ke sure that we 
cfa0: 6f 6e 6c 79 20 66 6c 61 67 20 74 68 69 73 20 63  only flag this c
cfb0: 6f 6c 75 6d 6e 20 61 73 20 22 75 6e 69 71 75 65  olumn as "unique
cfc0: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  "..             
cfd0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
cfe0: 69 66 20 77 65 20 61 72 65 20 6e 6f 74 20 70 72  if we are not pr
cff0: 6f 63 65 73 73 69 6e 67 20 6f 66 20 73 6f 6d 65  ocessing of some
d000: 20 6b 69 6e 64 20 6f 66 20 6d 75 6c 74 69 2d 74   kind of multi-t
d010: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
d020: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
d030: 20 20 20 63 6f 6e 73 74 72 75 63 74 20 28 69 2e     construct (i.
d040: 65 2e 20 61 20 6a 6f 69 6e 29 20 62 65 63 61 75  e. a join) becau
d050: 73 65 20 69 6e 20 74 68 61 74 20 63 61 73 65 20  se in that case 
d060: 77 65 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20  we must..       
d070: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
d080: 20 20 20 20 20 20 61 6c 6c 6f 77 20 64 75 70 6c        allow dupl
d090: 69 63 61 74 65 20 76 61 6c 75 65 73 20 28 72 65  icate values (re
d0a0: 66 65 72 20 74 6f 20 74 69 63 6b 65 74 20 5b 37  fer to ticket [7
d0b0: 65 33 66 61 39 33 37 34 34 5d 29 2e 0d 0a 20 20  e3fa93744])...  
d0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0d0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
d0e0: 20 20 20 20 20 20 69 66 20 28 70 61 72 65 6e 74        if (parent
d0f0: 54 6f 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 20  ToColumns.Count 
d100: 3d 3d 20 31 20 26 26 20 74 62 6c 49 6e 64 65 78  == 1 && tblIndex
d110: 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75  Columns.Rows.Cou
d120: 6e 74 20 3d 3d 20 31 20 26 26 20 28 62 6f 6f 6c  nt == 1 && (bool
d130: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
d140: 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75  Column.AllowDBNu
d150: 6c 6c 5d 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20  ll] == false).. 
d160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d170: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
d180: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75  leColumn.IsUniqu
d190: 65 5d 20 3d 20 72 6f 77 49 6e 64 65 78 65 73 5b  e] = rowIndexes[
d1a0: 22 55 4e 49 51 55 45 22 5d 3b 0d 0a 0d 0a 20 20  "UNIQUE"];....  
d1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1c0: 2f 2f 20 49 66 20 69 74 73 20 61 6e 20 69 6e 74  // If its an int
d1d0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
d1e0: 20 61 6e 64 20 74 68 65 20 6f 6e 6c 79 20 70 72   and the only pr
d1f0: 69 6d 61 72 79 20 6b 65 79 20 69 6e 20 74 68 65  imary key in the
d200: 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 69 74 73   table, then its
d210: 20 61 20 72 6f 77 69 64 20 61 6c 69 61 73 20 61   a rowid alias a
d220: 6e 64 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d  nd is autoincrem
d230: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ent..           
d240: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
d250: 20 43 75 72 72 65 6e 74 6c 79 20 63 6f 6d 6d 65   Currently comme
d260: 6e 74 65 64 20 6f 75 74 20 62 65 63 61 75 73 65  nted out because
d270: 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 6c 77   this is not alw
d280: 61 79 73 20 74 68 65 20 64 65 73 69 72 65 64 20  ays the desired 
d290: 62 65 68 61 76 69 6f 72 2e 20 20 46 6f 72 20 65  behavior.  For e
d2a0: 78 61 6d 70 6c 65 2c 20 61 20 31 3a 31 20 72 65  xample, a 1:1 re
d2b0: 6c 61 74 69 6f 6e 73 68 69 70 20 77 69 74 68 0d  lationship with.
d2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d2d0: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 61 6e 6f     //        ano
d2e0: 74 68 65 72 20 74 61 62 6c 65 2c 20 77 68 65 72  ther table, wher
d2f0: 65 20 74 68 65 20 6f 74 68 65 72 20 74 61 62 6c  e the other tabl
d300: 65 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65  e is autoincreme
d310: 6e 74 2c 20 62 75 74 20 74 68 69 73 20 6f 6e 65  nt, but this one
d320: 20 69 73 20 6e 6f 74 2c 20 61 6e 64 20 75 73 65   is not, and use
d330: 73 20 74 68 65 20 72 6f 77 69 64 20 66 72 6f 6d  s the rowid from
d340: 20 74 68 65 20 6f 74 68 65 72 2e 0d 0a 20 20 20   the other...   
d350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d360: 2f 20 20 20 20 20 20 20 20 49 74 20 69 73 20 73  /        It is s
d370: 61 66 65 72 20 74 6f 20 6f 6e 6c 79 20 73 65 74  afer to only set
d380: 20 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 6f   Autoincrement o
d390: 6e 20 74 61 62 6c 65 73 20 77 68 65 72 65 20 77  n tables where w
d3a0: 65 27 72 65 20 53 55 52 45 20 74 68 65 20 75 73  e're SURE the us
d3b0: 65 72 20 73 70 65 63 69 66 69 65 64 20 41 55 54  er specified AUT
d3c0: 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 65 76 65 6e  OINCREMENT, even
d3d0: 20 69 66 20 69 74 73 20 61 20 72 6f 77 69 64 20   if its a rowid 
d3e0: 63 6f 6c 75 6d 6e 2e 0d 0a 0d 0a 20 20 20 20 20  column.....     
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
d400: 28 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73  (tblIndexColumns
d410: 2e 52 6f 77 73 2e 43 6f 75 6e 74 20 3d 3d 20 31  .Rows.Count == 1
d420: 20 26 26 20 28 62 6f 6f 6c 29 72 6f 77 49 6e 64   && (bool)rowInd
d430: 65 78 65 73 5b 22 50 52 49 4d 41 52 59 5f 4b 45  exes["PRIMARY_KE
d440: 59 22 5d 20 3d 3d 20 74 72 75 65 20 26 26 20 53  Y"] == true && S
d450: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
d460: 70 74 79 28 64 61 74 61 54 79 70 65 29 20 3d 3d  pty(dataType) ==
d470: 20 66 61 6c 73 65 20 26 26 0d 0a 20 20 20 20 20   false &&..     
d480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
d490: 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 64 61  tring.Compare(da
d4a0: 74 61 54 79 70 65 2c 20 22 69 6e 74 65 67 65 72  taType, "integer
d4b0: 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  ", StringCompari
d4c0: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
d4d0: 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20  eCase) == 0)..  
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d500: 20 20 20 20 20 20 20 2f 2f 20 20 72 6f 77 5b 53         //  row[S
d510: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
d520: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49  alColumn.IsAutoI
d530: 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 74 72 75 65  ncrement] = true
d540: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
d550: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
d560: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
d570: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
d580: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
d590: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d5a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
d5b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
d5c0: 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
d5d0: 6c 4f 72 45 6d 70 74 79 28 64 61 74 61 54 79 70  lOrEmpty(dataTyp
d5e0: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  e))..          {
d5f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 79  ..            Ty
d600: 70 65 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e  peAffinity affin
d610: 20 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e   = TypeAffinity.
d620: 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3b 0d 0a  Uninitialized;..
d630: 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
d640: 54 79 70 65 20 3d 20 5f 61 63 74 69 76 65 53 74  Type = _activeSt
d650: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c  atement._sql.Col
d660: 75 6d 6e 54 79 70 65 28 5f 61 63 74 69 76 65 53  umnType(_activeS
d670: 74 61 74 65 6d 65 6e 74 2c 20 6e 2c 20 72 65 66  tatement, n, ref
d680: 20 61 66 66 69 6e 29 3b 0d 0a 20 20 20 20 20 20   affin);..      
d690: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d6a0: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
d6b0: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74 61  NullOrEmpty(data
d6c0: 54 79 70 65 29 20 3d 3d 20 66 61 6c 73 65 29 0d  Type) == false).
d6d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77  .            row
d6e0: 5b 22 44 61 74 61 54 79 70 65 4e 61 6d 65 22 5d  ["DataTypeName"]
d6f0: 20 3d 20 64 61 74 61 54 79 70 65 3b 0d 0a 20 20   = dataType;..  
d700: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
d710: 20 74 62 6c 2e 52 6f 77 73 2e 41 64 64 28 72 6f   tbl.Rows.Add(ro
d720: 77 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  w);..      }....
d730: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
d740: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
d750: 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 41 70       _keyInfo.Ap
d760: 70 65 6e 64 53 63 68 65 6d 61 54 61 62 6c 65 28  pendSchemaTable(
d770: 74 62 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 74  tbl);....      t
d780: 62 6c 2e 41 63 63 65 70 74 43 68 61 6e 67 65 73  bl.AcceptChanges
d790: 28 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 45  ();..      tbl.E
d7a0: 6e 64 4c 6f 61 64 44 61 74 61 28 29 3b 0d 0a 0d  ndLoadData();...
d7b0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 62  .      return tb
d7c0: 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  l;..    }....   
d7d0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
d7e0: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
d7f0: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
d800: 61 20 73 74 72 69 6e 67 0d 0a 20 20 20 20 2f 2f  a string..    //
d810: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
d820: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
d830: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
d840: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
d850: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
d860: 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c  <returns>string<
d870: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
d880: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73  ublic override s
d890: 74 72 69 6e 67 20 47 65 74 53 74 72 69 6e 67 28  tring GetString(
d8a0: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
d8b0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
d8c0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
d8d0: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
d8e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
d8f0: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
d900: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
d910: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
d920: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
d930: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
d940: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
d950: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
d960: 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20  Callbacks)..    
d970: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d980: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
d990: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
d9a0: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
d9b0: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
d9c0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
d9d0: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
d9e0: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
d9f0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
da00: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
da10: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
da20: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
da30: 20 20 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c     null, value),
da40: 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d   out complete);.
da50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
da60: 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20  f (complete)..  
da70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
da80: 74 75 72 6e 20 76 61 6c 75 65 2e 53 74 72 69 6e  turn value.Strin
da90: 67 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  gValue;..       
daa0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
dab0: 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69   (i >= PrivateVi
dac0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
dad0: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
dae0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
daf0: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
db00: 6f 2e 47 65 74 53 74 72 69 6e 67 28 69 20 2d 20  o.GetString(i - 
db10: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
db20: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
db30: 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
db40: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
db50: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69  tionFlags.NoVeri
db60: 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29 20  fyTextAffinity) 
db70: 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  != SQLiteConnect
db80: 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69 66  ionFlags.NoVerif
db90: 79 54 65 78 74 41 66 66 69 6e 69 74 79 29 0d 0a  yTextAffinity)..
dba0: 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 69              Veri
dbb0: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
dbc0: 2e 53 74 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20  .String);....   
dbd0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
dbe0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
dbf0: 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76  l.GetText(_activ
dc00: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d  eStatement, i);.
dc10: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
dc20: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
dc30: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
dc40: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20  he column as an 
dc50: 6f 62 6a 65 63 74 20 63 6f 72 72 65 73 70 6f 6e  object correspon
dc60: 64 69 6e 67 20 74 6f 20 74 68 65 20 75 6e 64 65  ding to the unde
dc70: 72 6c 79 69 6e 67 20 64 61 74 61 74 79 70 65 20  rlying datatype 
dc80: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a 20  of the column.. 
dc90: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
dca0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
dcb0: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
dcc0: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
dcd0: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
dce0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 6f 62   /// <returns>ob
dcf0: 6a 65 63 74 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ject</returns>..
dd00: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
dd10: 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56 61  ide object GetVa
dd20: 6c 75 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  lue(int i)..    
dd30: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
dd40: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
dd50: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
dd60: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
dd70: 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51  if ((_flags & SQ
dd80: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
dd90: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
dda0: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
ddb0: 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  cks) == SQLiteCo
ddc0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
ddd0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
dde0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a  alueCallbacks)..
ddf0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
de00: 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74         SQLiteDat
de10: 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c  aReaderValue val
de20: 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44  ue = new SQLiteD
de30: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29  ataReaderValue()
de40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
de50: 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d  ool complete;...
de60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76  .            Inv
de70: 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  okeReadValueCall
de80: 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69  back(i, new SQLi
de90: 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74  teReadValueEvent
dea0: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
deb0: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 76 61 6c         null, val
dec0: 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74  ue), out complet
ded0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
dee0: 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29     if (complete)
def0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
df00: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 56    return value.V
df10: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  alue;..        }
df20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
df30: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
df40: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
df50: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
df60: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
df70: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
df80: 47 65 74 56 61 6c 75 65 28 69 20 2d 20 50 72 69  GetValue(i - Pri
df90: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
dfa0: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
dfb0: 20 20 20 53 51 4c 69 74 65 54 79 70 65 20 74 79     SQLiteType ty
dfc0: 70 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70  p = GetSQLiteTyp
dfd0: 65 28 5f 66 6c 61 67 73 2c 20 69 29 3b 0d 0a 0d  e(_flags, i);...
dfe0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 28 5f  .        if (((_
dff0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
e000: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65  nnectionFlags.De
e010: 74 65 63 74 54 65 78 74 41 66 66 69 6e 69 74 79  tectTextAffinity
e020: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
e030: 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63  ctionFlags.Detec
e040: 74 54 65 78 74 41 66 66 69 6e 69 74 79 29 20 26  tTextAffinity) &
e050: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  &..            (
e060: 28 74 79 70 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  (typ == null) ||
e070: 20 28 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d   (typ.Affinity =
e080: 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54  = TypeAffinity.T
e090: 65 78 74 29 29 29 0d 0a 20 20 20 20 20 20 20 20  ext)))..        
e0a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
e0b0: 79 70 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79  yp = GetSQLiteTy
e0c0: 70 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pe(..           
e0d0: 20 20 20 20 20 74 79 70 2c 20 5f 61 63 74 69 76       typ, _activ
e0e0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
e0f0: 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65 53  GetText(_activeS
e100: 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a  tatement, i));..
e110: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e120: 20 20 20 65 6c 73 65 20 69 66 20 28 28 28 5f 66     else if (((_f
e130: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
e140: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74  nectionFlags.Det
e150: 65 63 74 53 74 72 69 6e 67 54 79 70 65 29 20 3d  ectStringType) =
e160: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
e170: 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63 74 53 74  onFlags.DetectSt
e180: 72 69 6e 67 54 79 70 65 29 20 26 26 0d 0a 20 20  ringType) &&..  
e190: 20 20 20 20 20 20 20 20 20 20 28 28 74 79 70 20            ((typ 
e1a0: 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 53 51 4c 69  == null) || SQLi
e1b0: 74 65 43 6f 6e 76 65 72 74 2e 49 73 53 74 72 69  teConvert.IsStri
e1c0: 6e 67 44 62 54 79 70 65 28 74 79 70 2e 54 79 70  ngDbType(typ.Typ
e1d0: 65 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  e)))..        {.
e1e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70  .            typ
e1f0: 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65   = GetSQLiteType
e200: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
e210: 20 20 20 74 79 70 2c 20 5f 61 63 74 69 76 65 53     typ, _activeS
e220: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
e230: 74 54 65 78 74 28 5f 61 63 74 69 76 65 53 74 61  tText(_activeSta
e240: 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20  tement, i));..  
e250: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e260: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
e270: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
e280: 47 65 74 56 61 6c 75 65 28 5f 61 63 74 69 76 65  GetValue(_active
e290: 53 74 61 74 65 6d 65 6e 74 2c 20 5f 66 6c 61 67  Statement, _flag
e2a0: 73 2c 20 69 2c 20 74 79 70 29 3b 0d 0a 20 20 20  s, i, typ);..   
e2b0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
e2c0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
e2d0: 20 52 65 74 72 65 69 76 65 73 20 74 68 65 20 76   Retreives the v
e2e0: 61 6c 75 65 73 20 6f 66 20 6d 75 6c 74 69 70 6c  alues of multipl
e2f0: 65 20 63 6f 6c 75 6d 6e 73 2c 20 75 70 20 74 6f  e columns, up to
e300: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
e310: 20 73 75 70 70 6c 69 65 64 20 61 72 72 61 79 0d   supplied array.
e320: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
e330: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
e340: 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73  ram name="values
e350: 22 3e 54 68 65 20 61 72 72 61 79 20 74 6f 20 66  ">The array to f
e360: 69 6c 6c 20 77 69 74 68 20 76 61 6c 75 65 73 20  ill with values 
e370: 66 72 6f 6d 20 74 68 65 20 63 6f 6c 75 6d 6e 73  from the columns
e380: 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
e390: 72 65 73 75 6c 74 73 65 74 3c 2f 70 61 72 61 6d  resultset</param
e3a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
e3b0: 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f  rns>The number o
e3c0: 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74 72 69 65  f columns retrie
e3d0: 76 65 64 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ved</returns>.. 
e3e0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
e3f0: 64 65 20 69 6e 74 20 47 65 74 56 61 6c 75 65 73  de int GetValues
e400: 28 6f 62 6a 65 63 74 5b 5d 20 76 61 6c 75 65 73  (object[] values
e410: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
e420: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
e430: 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 4d  ....      int nM
e440: 61 78 20 3d 20 46 69 65 6c 64 43 6f 75 6e 74 3b  ax = FieldCount;
e450: 0d 0a 20 20 20 20 20 20 69 66 20 28 76 61 6c 75  ..      if (valu
e460: 65 73 2e 4c 65 6e 67 74 68 20 3c 20 6e 4d 61 78  es.Length < nMax
e470: 29 20 6e 4d 61 78 20 3d 20 76 61 6c 75 65 73 2e  ) nMax = values.
e480: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
e490: 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b   for (int n = 0;
e4a0: 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0d   n < nMax; n++).
e4b0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
e4c0: 20 20 76 61 6c 75 65 73 5b 6e 5d 20 3d 20 47 65    values[n] = Ge
e4d0: 74 56 61 6c 75 65 28 6e 29 3b 0d 0a 20 20 20 20  tValue(n);..    
e4e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
e4f0: 75 72 6e 20 6e 4d 61 78 3b 0d 0a 20 20 20 20 7d  urn nMax;..    }
e500: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
e510: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
e520: 65 74 75 72 6e 73 20 61 20 63 6f 6c 6c 65 63 74  eturns a collect
e530: 69 6f 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61  ion containing a
e540: 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  ll the column na
e550: 6d 65 73 20 61 6e 64 20 76 61 6c 75 65 73 20 66  mes and values f
e560: 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  or the..    /// 
e570: 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 64  current row of d
e580: 61 74 61 20 69 6e 20 74 68 65 20 63 75 72 72 65  ata in the curre
e590: 6e 74 20 72 65 73 75 6c 74 73 65 74 2c 20 69 66  nt resultset, if
e5a0: 20 61 6e 79 2e 20 20 49 66 20 74 68 65 72 65 20   any.  If there 
e5b0: 69 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20 63  is no..    /// c
e5c0: 75 72 72 65 6e 74 20 72 6f 77 20 6f 72 20 6e 6f  urrent row or no
e5d0: 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73   current results
e5e0: 65 74 2c 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  et, an exception
e5f0: 20 6d 61 79 20 62 65 20 74 68 72 6f 77 6e 2e 0d   may be thrown..
e600: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
e610: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
e620: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
e630: 54 68 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 63  The collection c
e640: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 63 6f  ontaining the co
e650: 6c 75 6d 6e 20 6e 61 6d 65 20 61 6e 64 20 76 61  lumn name and va
e660: 6c 75 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lue information 
e670: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
e680: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20   current row of 
e690: 64 61 74 61 20 69 6e 20 74 68 65 20 63 75 72 72  data in the curr
e6a0: 65 6e 74 20 72 65 73 75 6c 74 73 65 74 20 6f 72  ent resultset or
e6b0: 20 6e 75 6c 6c 20 69 66 20 74 68 69 73 20 69 6e   null if this in
e6c0: 66 6f 72 6d 61 74 69 6f 6e 0d 0a 20 20 20 20 2f  formation..    /
e6d0: 2f 2f 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  // cannot be obt
e6e0: 61 69 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ained...    /// 
e6f0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
e700: 70 75 62 6c 69 63 20 4e 61 6d 65 56 61 6c 75 65  public NameValue
e710: 43 6f 6c 6c 65 63 74 69 6f 6e 20 47 65 74 56 61  Collection GetVa
e720: 6c 75 65 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  lues()..    {.. 
e730: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
e740: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
e750: 20 20 20 69 66 20 28 28 5f 61 63 74 69 76 65 53     if ((_activeS
e760: 74 61 74 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c  tatement == null
e770: 29 20 7c 7c 20 28 5f 61 63 74 69 76 65 53 74 61  ) || (_activeSta
e780: 74 65 6d 65 6e 74 2e 5f 73 71 6c 20 3d 3d 20 6e  tement._sql == n
e790: 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
e7a0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
e7b0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
e7c0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20  eption();....   
e7d0: 20 20 20 20 20 69 6e 74 20 6e 4d 61 78 20 3d 20       int nMax = 
e7e0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
e7f0: 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20  eldCount;..     
e800: 20 20 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c     NameValueColl
e810: 65 63 74 69 6f 6e 20 72 65 73 75 6c 74 20 3d 20  ection result = 
e820: 6e 65 77 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c  new NameValueCol
e830: 6c 65 63 74 69 6f 6e 28 6e 4d 61 78 29 3b 0d 0a  lection(nMax);..
e840: 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69  ..        for (i
e850: 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 6e 4d  nt n = 0; n < nM
e860: 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20  ax; n++)..      
e870: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e880: 20 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 5f   string name = _
e890: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
e8a0: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28  _sql.ColumnName(
e8b0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
e8c0: 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  , n);..         
e8d0: 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20     string value 
e8e0: 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  = _activeStateme
e8f0: 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28  nt._sql.GetText(
e900: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
e910: 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  , n);....       
e920: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
e930: 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  name, value);.. 
e940: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e950: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
e960: 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  t;..    }....   
e970: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
e980: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
e990: 54 72 75 65 20 69 66 20 74 68 65 20 72 65 73 75  True if the resu
e9a0: 6c 74 73 65 74 20 68 61 73 20 72 6f 77 73 20 74  ltset has rows t
e9b0: 68 61 74 20 63 61 6e 20 62 65 20 66 65 74 63 68  hat can be fetch
e9c0: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
e9d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c  mmary>..    publ
e9e0: 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
e9f0: 20 48 61 73 52 6f 77 73 0d 0a 20 20 20 20 7b 0d   HasRows..    {.
ea00: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
ea10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
ea20: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
ea30: 20 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73         CheckClos
ea40: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
ea50: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
ea60: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 73 74  NOTE: If the "st
ea70: 69 63 6b 79 22 20 66 6c 61 67 20 68 61 73 20 62  icky" flag has b
ea80: 65 65 6e 20 73 65 74 2c 20 75 73 65 20 74 68 65  een set, use the
ea90: 20 6e 65 77 20 62 65 68 61 76 69 6f 72 2c 0d 0a   new behavior,..
eaa0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
eab0: 20 77 68 69 63 68 20 72 65 74 75 72 6e 73 20 6e   which returns n
eac0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 72 65  on-zero if there
ead0: 20 77 65 72 65 20 65 76 65 72 20 61 6e 79 20 72   were ever any r
eae0: 6f 77 73 20 69 6e 0d 0a 20 20 20 20 20 20 20 20  ows in..        
eaf0: 2f 2f 20 20 20 20 20 20 20 74 68 65 20 61 73 73  //       the ass
eb00: 6f 63 69 61 74 65 64 20 72 65 73 75 6c 74 20 73  ociated result s
eb10: 65 74 73 2e 20 20 47 65 6e 65 72 61 6c 6c 79 2c  ets.  Generally,
eb20: 20 74 68 69 73 20 66 6c 61 67 20 69 73 20 6f 6e   this flag is on
eb30: 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ly..        //  
eb40: 20 20 20 20 20 75 73 65 66 75 6c 20 77 68 65 6e       useful when
eb50: 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79   it is necessary
eb60: 20 74 6f 20 72 65 74 61 69 6e 20 63 6f 6d 70 61   to retain compa
eb70: 74 69 62 69 6c 69 74 79 20 77 69 74 68 0d 0a 20  tibility with.. 
eb80: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
eb90: 6f 74 68 65 72 20 41 44 4f 2e 4e 45 54 20 70 72  other ADO.NET pr
eba0: 6f 76 69 64 65 72 73 20 74 68 61 74 20 75 73 65  oviders that use
ebb0: 20 74 68 65 73 65 20 73 61 6d 65 20 73 65 6d 61   these same sema
ebc0: 6e 74 69 63 73 20 66 6f 72 0d 0a 20 20 20 20 20  ntics for..     
ebd0: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
ebe0: 48 61 73 52 6f 77 73 20 70 72 6f 70 65 72 74 79  HasRows property
ebf0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
ec00: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
ec10: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
ec20: 63 74 69 6f 6e 46 6c 61 67 73 2e 53 74 69 63 6b  ctionFlags.Stick
ec30: 79 48 61 73 52 6f 77 73 29 20 3d 3d 20 53 51 4c  yHasRows) == SQL
ec40: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
ec50: 67 73 2e 53 74 69 63 6b 79 48 61 73 52 6f 77 73  gs.StickyHasRows
ec60: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  )..          ret
ec70: 75 72 6e 20 28 28 5f 72 65 61 64 69 6e 67 53 74  urn ((_readingSt
ec80: 61 74 65 20 21 3d 20 31 29 20 7c 7c 20 28 5f 73  ate != 1) || (_s
ec90: 74 65 70 43 6f 75 6e 74 20 3e 20 30 29 29 3b 0d  tepCount > 0));.
eca0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
ecb0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
ecc0: 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61  This is the defa
ecd0: 75 6c 74 20 62 65 68 61 76 69 6f 72 2e 20 20 49  ult behavior.  I
ece0: 74 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  t returns non-ze
ecf0: 72 6f 20 6f 6e 6c 79 20 69 66 0d 0a 20 20 20 20  ro only if..    
ed00: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 72      //       mor
ed10: 65 20 72 6f 77 73 20 61 72 65 20 61 76 61 69 6c  e rows are avail
ed20: 61 62 6c 65 20 28 69 2e 65 2e 20 61 20 63 61 6c  able (i.e. a cal
ed30: 6c 20 74 6f 20 74 68 65 20 52 65 61 64 20 6d 65  l to the Read me
ed40: 74 68 6f 64 20 69 73 0d 0a 20 20 20 20 20 20 20  thod is..       
ed50: 20 2f 2f 20 20 20 20 20 20 20 65 78 70 65 63 74   //       expect
ed60: 65 64 20 74 6f 20 73 75 63 63 65 65 64 29 2e 20  ed to succeed). 
ed70: 20 50 72 69 6f 72 20 74 6f 20 74 68 65 20 69 6e   Prior to the in
ed80: 74 72 6f 64 75 63 74 69 6f 6e 20 6f 66 20 74 68  troduction of th
ed90: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  e..        //   
eda0: 20 20 20 20 22 73 74 69 63 6b 79 22 20 66 6c 61      "sticky" fla
edb0: 67 2c 20 74 68 69 73 20 69 73 20 68 6f 77 20 74  g, this is how t
edc0: 68 69 73 20 70 72 6f 70 65 72 74 79 20 68 61 73  his property has
edd0: 20 61 6c 77 61 79 73 20 77 6f 72 6b 65 64 2e 0d   always worked..
ede0: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
edf0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f 72 65       return (_re
ee00: 61 64 69 6e 67 53 74 61 74 65 20 21 3d 20 31 29  adingState != 1)
ee10: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
ee20: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
ee30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
ee40: 52 65 74 75 72 6e 73 20 54 72 75 65 20 69 66 20  Returns True if 
ee50: 74 68 65 20 64 61 74 61 20 72 65 61 64 65 72 20  the data reader 
ee60: 69 73 20 63 6c 6f 73 65 64 0d 0a 20 20 20 20 2f  is closed..    /
ee70: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
ee80: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
ee90: 64 65 20 62 6f 6f 6c 20 49 73 43 6c 6f 73 65 64  de bool IsClosed
eea0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
eeb0: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
eec0: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 28 5f 63  ed(); return (_c
eed0: 6f 6d 6d 61 6e 64 20 3d 3d 20 6e 75 6c 6c 29 3b  ommand == null);
eee0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
eef0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
ef00: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
ef10: 54 72 75 65 20 69 66 20 74 68 65 20 73 70 65 63  True if the spec
ef20: 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  ified column is 
ef30: 6e 75 6c 6c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  null..    /// </
ef40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
ef50: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
ef60: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
ef70: 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
ef80: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
ef90: 75 72 6e 73 3e 54 72 75 65 20 6f 72 20 46 61 6c  urns>True or Fal
efa0: 73 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  se</returns>..  
efb0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
efc0: 65 20 62 6f 6f 6c 20 49 73 44 42 4e 75 6c 6c 28  e bool IsDBNull(
efd0: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
efe0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
eff0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
f000: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
f010: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
f020: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
f030: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
f040: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
f050: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
f060: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
f070: 49 73 44 42 4e 75 6c 6c 28 69 20 2d 20 50 72 69  IsDBNull(i - Pri
f080: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
f090: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
f0a0: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
f0b0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
f0c0: 49 73 4e 75 6c 6c 28 5f 61 63 74 69 76 65 53 74  IsNull(_activeSt
f0d0: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20  atement, i);..  
f0e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
f0f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
f100: 2f 20 4d 6f 76 65 73 20 74 6f 20 74 68 65 20 6e  / Moves to the n
f110: 65 78 74 20 72 65 73 75 6c 74 73 65 74 20 69 6e  ext resultset in
f120: 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 2d 72 65   multiple row-re
f130: 74 75 72 6e 69 6e 67 20 53 51 4c 20 63 6f 6d 6d  turning SQL comm
f140: 61 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  and...    /// </
f150: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
f160: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20  / <returns>True 
f170: 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77  if the command w
f180: 61 73 20 73 75 63 63 65 73 73 66 75 6c 20 61 6e  as successful an
f190: 64 20 61 20 6e 65 77 20 72 65 73 75 6c 74 73 65  d a new resultse
f1a0: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  t is available, 
f1b0: 46 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e  False otherwise.
f1c0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
f1d0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
f1e0: 62 6f 6f 6c 20 4e 65 78 74 52 65 73 75 6c 74 28  bool NextResult(
f1f0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
f200: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
f210: 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  ..      CheckClo
f220: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 69 66  sed();..      if
f230: 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73   (_throwOnDispos
f240: 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ed) SQLiteComman
f250: 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64  d.Check(_command
f260: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69  );....      SQLi
f270: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
f280: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
f290: 69 6e 74 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0d  int fieldCount;.
f2a0: 0a 20 20 20 20 20 20 62 6f 6f 6c 20 73 63 68 65  .      bool sche
f2b0: 6d 61 4f 6e 6c 79 20 3d 20 28 28 5f 63 6f 6d 6d  maOnly = ((_comm
f2c0: 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f  andBehavior & Co
f2d0: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 63  mmandBehavior.Sc
f2e0: 68 65 6d 61 4f 6e 6c 79 29 20 21 3d 20 30 29 3b  hemaOnly) != 0);
f2f0: 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20  ....      while 
f300: 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d  (true)..      {.
f310: 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d  .        if (stm
f320: 74 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63  t == null && _ac
f330: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 21 3d  tiveStatement !=
f340: 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76 65   null && _active
f350: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 20 21  Statement._sql !
f360: 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76  = null && _activ
f370: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
f380: 49 73 4f 70 65 6e 28 29 29 0d 0a 20 20 20 20 20  IsOpen())..     
f390: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f3a0: 2f 2f 20 52 65 73 65 74 20 74 68 65 20 70 72 65  // Reset the pre
f3b0: 76 69 6f 75 73 6c 79 2d 65 78 65 63 75 74 65 64  viously-executed
f3c0: 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20   statement..    
f3d0: 20 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d        if (!schem
f3e0: 61 4f 6e 6c 79 29 20 5f 61 63 74 69 76 65 53 74  aOnly) _activeSt
f3f0: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 52 65 73  atement._sql.Res
f400: 65 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  et(_activeStatem
f410: 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ent);....       
f420: 20 20 20 2f 2f 20 49 66 20 77 65 27 72 65 20 6f     // If we're o
f430: 6e 6c 79 20 73 75 70 70 6f 73 65 64 20 74 6f 20  nly supposed to 
f440: 72 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20  return a single 
f450: 72 6f 77 73 65 74 2c 20 73 74 65 70 20 74 68 72  rowset, step thr
f460: 6f 75 67 68 20 61 6c 6c 20 72 65 6d 61 69 6e 69  ough all remaini
f470: 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e  ng statements on
f480: 63 65 20 75 6e 74 69 6c 0d 0a 20 20 20 20 20 20  ce until..      
f490: 20 20 20 20 2f 2f 20 74 68 65 79 20 61 72 65 20      // they are 
f4a0: 61 6c 6c 20 64 6f 6e 65 20 61 6e 64 20 72 65 74  all done and ret
f4b0: 75 72 6e 20 66 61 6c 73 65 20 74 6f 20 69 6e 64  urn false to ind
f4c0: 69 63 61 74 65 20 6e 6f 20 6d 6f 72 65 20 72 65  icate no more re
f4d0: 73 75 6c 74 73 65 74 73 20 65 78 69 73 74 2e 0d  sultsets exist..
f4e0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28  .          if ((
f4f0: 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72  _commandBehavior
f500: 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69   & CommandBehavi
f510: 6f 72 2e 53 69 6e 67 6c 65 52 65 73 75 6c 74 29  or.SingleResult)
f520: 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   != 0)..        
f530: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f540: 20 66 6f 72 20 28 3b 20 3b 20 29 0d 0a 20 20 20   for (; ; )..   
f550: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f560: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d            stmt =
f570: 20 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61   _command.GetSta
f580: 74 65 6d 65 6e 74 28 5f 61 63 74 69 76 65 53 74  tement(_activeSt
f590: 61 74 65 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31  atementIndex + 1
f5a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
f5b0: 20 20 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75    if (stmt == nu
f5c0: 6c 6c 29 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20  ll) break;..    
f5d0: 20 20 20 20 20 20 20 20 20 20 5f 61 63 74 69 76            _activ
f5e0: 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b  eStatementIndex+
f5f0: 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  +;....          
f600: 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f      if (!schemaO
f610: 6e 6c 79 20 26 26 20 73 74 6d 74 2e 5f 73 71 6c  nly && stmt._sql
f620: 2e 53 74 65 70 28 73 74 6d 74 29 29 20 5f 73 74  .Step(stmt)) _st
f630: 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20 20  epCount++;..    
f640: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
f650: 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f  mt._sql.ColumnCo
f660: 75 6e 74 28 73 74 6d 74 29 20 3d 3d 20 30 29 0d  unt(stmt) == 0).
f670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
f680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f690: 20 20 69 6e 74 20 63 68 61 6e 67 65 73 20 3d 20    int changes = 
f6a0: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
f6b0: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
f6c0: 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  y = false;..    
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
f6e0: 73 74 6d 74 2e 54 72 79 47 65 74 43 68 61 6e 67  stmt.TryGetChang
f6f0: 65 73 28 72 65 66 20 63 68 61 6e 67 65 73 2c 20  es(ref changes, 
f700: 72 65 66 20 72 65 61 64 4f 6e 6c 79 29 29 0d 0a  ref readOnly))..
f710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f720: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
f730: 20 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e       if (!readOn
f740: 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly)..           
f750: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
f770: 20 28 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20   (_rowsAffected 
f780: 3d 3d 20 2d 31 29 20 5f 72 6f 77 73 41 66 66 65  == -1) _rowsAffe
f790: 63 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  cted = 0;..     
f7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
f7b0: 72 6f 77 73 41 66 66 65 63 74 65 64 20 2b 3d 20  rowsAffected += 
f7c0: 63 68 61 6e 67 65 73 3b 0d 0a 20 20 20 20 20 20  changes;..      
f7d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
f7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
f7f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f800: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
f810: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f820: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
f830: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
f840: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
f850: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
f860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
f870: 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 29 20 73   (!schemaOnly) s
f880: 74 6d 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28 73  tmt._sql.Reset(s
f890: 74 6d 74 29 3b 20 2f 2f 20 47 6f 74 74 61 20 72  tmt); // Gotta r
f8a0: 65 73 65 74 20 61 66 74 65 72 20 65 76 65 72 79  eset after every
f8b0: 20 73 74 65 70 20 74 6f 20 72 65 6c 65 61 73 65   step to release
f8c0: 20 61 6e 79 20 6c 6f 63 6b 73 20 61 6e 64 20 73   any locks and s
f8d0: 75 63 68 21 0d 0a 20 20 20 20 20 20 20 20 20 20  uch!..          
f8e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
f8f0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
f900: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f910: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f920: 20 20 2f 2f 20 47 65 74 20 74 68 65 20 6e 65 78    // Get the nex
f930: 74 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 65  t statement to e
f940: 78 65 63 75 74 65 0d 0a 20 20 20 20 20 20 20 20  xecute..        
f950: 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  stmt = _command.
f960: 47 65 74 53 74 61 74 65 6d 65 6e 74 28 5f 61 63  GetStatement(_ac
f970: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64  tiveStatementInd
f980: 65 78 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20  ex + 1);....    
f990: 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20      // If we've 
f9a0: 72 65 61 63 68 65 64 20 74 68 65 20 65 6e 64 20  reached the end 
f9b0: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
f9c0: 73 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2c  s, return false,
f9d0: 20 6e 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74 73   no more results
f9e0: 65 74 73 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ets..        if 
f9f0: 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (stmt == null)..
fa00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
fa10: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
fa20: 20 20 20 2f 2f 20 49 66 20 77 65 20 77 65 72 65     // If we were
fa30: 20 6f 6e 20 61 20 63 75 72 72 65 6e 74 20 72 65   on a current re
fa40: 73 75 6c 74 73 65 74 2c 20 73 65 74 20 74 68 65  sultset, set the
fa50: 20 73 74 61 74 65 20 74 6f 20 22 64 6f 6e 65 20   state to "done 
fa60: 72 65 61 64 69 6e 67 22 20 66 6f 72 20 69 74 0d  reading" for it.
fa70: 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 72 65  .        if (_re
fa80: 61 64 69 6e 67 53 74 61 74 65 20 3c 20 31 29 0d  adingState < 1).
fa90: 0a 20 20 20 20 20 20 20 20 20 20 5f 72 65 61 64  .          _read
faa0: 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 0d 0a 0d  ingState = 1;...
fab0: 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65  .        _active
fac0: 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b  StatementIndex++
fad0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 69 65  ;....        fie
fae0: 6c 64 43 6f 75 6e 74 20 3d 20 73 74 6d 74 2e 5f  ldCount = stmt._
faf0: 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28  sql.ColumnCount(
fb00: 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  stmt);....      
fb10: 20 20 2f 2f 20 49 66 20 74 68 65 20 73 74 61 74    // If the stat
fb20: 65 6d 65 6e 74 20 69 73 20 6e 6f 74 20 61 20 73  ement is not a s
fb30: 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
fb40: 6f 72 20 77 65 27 72 65 20 6e 6f 74 20 72 65 74  or we're not ret
fb50: 72 69 65 76 69 6e 67 20 73 63 68 65 6d 61 20 6f  rieving schema o
fb60: 6e 6c 79 2c 20 74 68 65 6e 20 70 65 72 66 6f 72  nly, then perfor
fb70: 6d 20 74 68 65 20 69 6e 69 74 69 61 6c 20 73 74  m the initial st
fb80: 65 70 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ep..        if (
fb90: 21 73 63 68 65 6d 61 4f 6e 6c 79 20 7c 7c 20 28  !schemaOnly || (
fba0: 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d 20 30 29  fieldCount == 0)
fbb0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
fbc0: 20 20 20 20 20 20 20 20 69 66 20 28 21 73 63 68          if (!sch
fbd0: 65 6d 61 4f 6e 6c 79 20 26 26 20 73 74 6d 74 2e  emaOnly && stmt.
fbe0: 5f 73 71 6c 2e 53 74 65 70 28 73 74 6d 74 29 29  _sql.Step(stmt))
fbf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
fc00: 20 20 20 20 20 20 20 20 20 20 20 5f 73 74 65 70             _step
fc10: 43 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20 20 20 20  Count++;..      
fc20: 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74        _readingSt
fc30: 61 74 65 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  ate = -1;..     
fc40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
fc50: 20 20 65 6c 73 65 20 69 66 20 28 66 69 65 6c 64    else if (field
fc60: 43 6f 75 6e 74 20 3d 3d 20 30 29 20 2f 2f 20 4e  Count == 0) // N
fc70: 6f 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 2c  o rows returned,
fc80: 20 69 66 20 66 69 65 6c 64 43 6f 75 6e 74 20 69   if fieldCount i
fc90: 73 20 7a 65 72 6f 2c 20 73 6b 69 70 20 74 6f 20  s zero, skip to 
fca0: 74 68 65 20 6e 65 78 74 20 73 74 61 74 65 6d 65  the next stateme
fcb0: 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  nt..          {.
fcc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
fcd0: 20 63 68 61 6e 67 65 73 20 3d 20 30 3b 0d 0a 20   changes = 0;.. 
fce0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
fcf0: 72 65 61 64 4f 6e 6c 79 20 3d 20 66 61 6c 73 65  readOnly = false
fd00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ;..            i
fd10: 66 20 28 73 74 6d 74 2e 54 72 79 47 65 74 43 68  f (stmt.TryGetCh
fd20: 61 6e 67 65 73 28 72 65 66 20 63 68 61 6e 67 65  anges(ref change
fd30: 73 2c 20 72 65 66 20 72 65 61 64 4f 6e 6c 79 29  s, ref readOnly)
fd40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
fd50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd60: 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a  if (!readOnly)..
fd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
fd80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fd90: 20 69 66 20 28 5f 72 6f 77 73 41 66 66 65 63 74   if (_rowsAffect
fda0: 65 64 20 3d 3d 20 2d 31 29 20 5f 72 6f 77 73 41  ed == -1) _rowsA
fdb0: 66 66 65 63 74 65 64 20 3d 20 30 3b 0d 0a 20 20  ffected = 0;..  
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 72                _r
fdd0: 6f 77 73 41 66 66 65 63 74 65 64 20 2b 3d 20 63  owsAffected += c
fde0: 68 61 6e 67 65 73 3b 0d 0a 20 20 20 20 20 20 20  hanges;..       
fdf0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
fe00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
fe10: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
fe20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
fe30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
fe40: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
fe50: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
fe60: 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c    if (!schemaOnl
fe70: 79 29 20 73 74 6d 74 2e 5f 73 71 6c 2e 52 65 73  y) stmt._sql.Res
fe80: 65 74 28 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20  et(stmt);..     
fe90: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
fea0: 20 2f 2f 20 53 6b 69 70 20 74 68 69 73 20 63 6f   // Skip this co
feb0: 6d 6d 61 6e 64 20 61 6e 64 20 6d 6f 76 65 20 74  mmand and move t
fec0: 6f 20 74 68 65 20 6e 65 78 74 2c 20 69 74 20 77  o the next, it w
fed0: 61 73 20 6e 6f 74 20 61 20 72 6f 77 2d 72 65 74  as not a row-ret
fee0: 75 72 6e 69 6e 67 20 72 65 73 75 6c 74 73 65 74  urning resultset
fef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
ff00: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 2f 2f           else //
ff10: 20 4e 6f 20 72 6f 77 73 2c 20 66 69 65 6c 64 43   No rows, fieldC
ff20: 6f 75 6e 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  ount is non-zero
ff30: 20 73 6f 20 73 74 6f 70 20 68 65 72 65 0d 0a 20   so stop here.. 
ff40: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ff50: 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67          _reading
ff60: 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f 20 54 68  State = 1; // Th
ff70: 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72  is command retur
ff80: 6e 65 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20  ned columns but 
ff90: 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 72 65 74 75  no rows, so retu
ffa0: 72 6e 20 74 72 75 65 2c 20 62 75 74 20 48 61 73  rn true, but Has
ffb0: 52 6f 77 73 20 3d 20 66 61 6c 73 65 20 61 6e 64  Rows = false and
ffc0: 20 52 65 61 64 28 29 20 72 65 74 75 72 6e 73 20   Read() returns 
ffd0: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  false..         
ffe0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
fff0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 41 68 68 2c  .        // Ahh,
10000 20 77 65 20 66 6f 75 6e 64 20 61 20 72 6f 77 2d   we found a row-
10010 72 65 74 75 72 6e 69 6e 67 20 72 65 73 75 6c 74  returning result
10020 73 65 74 20 65 6c 69 67 69 62 6c 65 20 74 6f 20  set eligible to 
10030 62 65 20 72 65 74 75 72 6e 65 64 21 0d 0a 20 20  be returned!..  
10040 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
10050 74 65 6d 65 6e 74 20 3d 20 73 74 6d 74 3b 0d 0a  tement = stmt;..
10060 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 43 6f          _fieldCo
10070 75 6e 74 20 3d 20 66 69 65 6c 64 43 6f 75 6e 74  unt = fieldCount
10080 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 69 65 6c  ;..        _fiel
10090 64 49 6e 64 65 78 65 73 20 3d 20 6e 65 77 20 44  dIndexes = new D
100a0 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67  ictionary<string
100b0 2c 20 69 6e 74 3e 28 53 74 72 69 6e 67 43 6f 6d  , int>(StringCom
100c0 70 61 72 65 72 2e 4f 72 64 69 6e 61 6c 49 67 6e  parer.OrdinalIgn
100d0 6f 72 65 43 61 73 65 29 3b 0d 0a 20 20 20 20 20  oreCase);..     
100e0 20 20 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72     _fieldTypeArr
100f0 61 79 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 54  ay = new SQLiteT
10100 79 70 65 5b 50 72 69 76 61 74 65 56 69 73 69 62  ype[PrivateVisib
10110 6c 65 46 69 65 6c 64 43 6f 75 6e 74 5d 3b 0d 0a  leFieldCount];..
10120 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
10130 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20  commandBehavior 
10140 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  & CommandBehavio
10150 72 2e 4b 65 79 49 6e 66 6f 29 20 21 3d 20 30 29  r.KeyInfo) != 0)
10160 0d 0a 20 20 20 20 20 20 20 20 20 20 4c 6f 61 64  ..          Load
10170 4b 65 79 49 6e 66 6f 28 29 3b 0d 0a 0d 0a 20 20  KeyInfo();....  
10180 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
10190 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  e;..      }..   
101a0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
101b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
101c0 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61 74 74   This method att
101d0 65 6d 70 74 73 20 74 6f 20 71 75 65 72 79 20 74  empts to query t
101e0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
101f0 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
10200 64 20 77 69 74 68 0d 0a 20 20 20 20 2f 2f 2f 20  d with..    /// 
10210 74 68 65 20 64 61 74 61 20 72 65 61 64 65 72 20  the data reader 
10220 69 6e 20 75 73 65 2e 20 20 49 66 20 74 68 65 20  in use.  If the 
10230 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d 6d 61  underlying comma
10240 6e 64 20 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e  nd or connection
10250 20 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 75 6e 61   is..    /// una
10260 76 61 69 6c 61 62 6c 65 2c 20 61 20 6e 75 6c 6c  vailable, a null
10270 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72   value will be r
10280 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f  eturned...    //
10290 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
102a0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
102b0 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e  .    /// The con
102c0 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 2d  nection object -
102d0 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20 69  OR- null if it i
102e0 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2e 0d 0a  s unavailable...
102f0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
10300 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  s>..    private 
10310 73 74 61 74 69 63 20 53 51 4c 69 74 65 43 6f 6e  static SQLiteCon
10320 6e 65 63 74 69 6f 6e 20 47 65 74 43 6f 6e 6e 65  nection GetConne
10330 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
10340 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
10350 20 64 61 74 61 52 65 61 64 65 72 0d 0a 20 20 20   dataReader..   
10360 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
10370 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
10380 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10390 20 20 20 69 66 20 28 64 61 74 61 52 65 61 64 65     if (dataReade
103a0 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r != null)..    
103b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
103c0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
103d0 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
103e0 20 3d 20 64 61 74 61 52 65 61 64 65 72 2e 5f 63   = dataReader._c
103f0 6f 6d 6d 61 6e 64 3b 0d 0a 0d 0a 20 20 20 20 20  ommand;....     
10400 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
10410 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
10420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10430 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10440 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
10450 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
10460 69 6f 6e 20 3d 20 63 6f 6d 6d 61 6e 64 2e 43 6f  ion = command.Co
10470 6e 6e 65 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  nnection;....   
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10490 20 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20   if (connection 
104a0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
104b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104c0 20 20 72 65 74 75 72 6e 20 63 6f 6e 6e 65 63 74    return connect
104d0 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
104e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
104f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10500 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  }..        catch
10510 20 28 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64   (ObjectDisposed
10520 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20  Exception)..    
10530 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10540 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
10550 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ...        }....
10560 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
10570 75 6c 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ull;..    }.... 
10580 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
10590 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  ..    /// Retrie
105a0 76 65 73 20 74 68 65 20 53 51 4c 69 74 65 54 79  ves the SQLiteTy
105b0 70 65 20 66 6f 72 20 61 20 67 69 76 65 6e 20 63  pe for a given c
105c0 6f 6c 75 6d 6e 20 61 6e 64 20 72 6f 77 20 76 61  olumn and row va
105d0 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  lue...    /// </
105e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
105f0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f  / <param name="o
10600 6c 64 54 79 70 65 22 3e 0d 0a 20 20 20 20 2f 2f  ldType">..    //
10610 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  / The original S
10620 51 4c 69 74 65 54 79 70 65 20 73 74 72 75 63 74  QLiteType struct
10630 75 72 65 2c 20 62 61 73 65 64 20 6f 6e 6c 79 20  ure, based only 
10640 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0d 0a  on the column...
10650 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
10660 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
10670 20 6e 61 6d 65 3d 22 74 65 78 74 22 3e 0d 0a 20   name="text">.. 
10680 20 20 20 2f 2f 2f 20 54 68 65 20 74 65 78 74 75     /// The textu
10690 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  al value of the 
106a0 63 6f 6c 75 6d 6e 20 66 6f 72 20 61 20 67 69 76  column for a giv
106b0 65 6e 20 72 6f 77 2e 0d 0a 20 20 20 20 2f 2f 2f  en row...    ///
106c0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
106d0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
106e0 20 20 2f 2f 2f 20 54 68 65 20 53 51 4c 69 74 65    /// The SQLite
106f0 54 79 70 65 20 73 74 72 75 63 74 75 72 65 2e 0d  Type structure..
10700 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
10710 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ns>..    private
10720 20 53 51 4c 69 74 65 54 79 70 65 20 47 65 74 53   SQLiteType GetS
10730 51 4c 69 74 65 54 79 70 65 28 0d 0a 20 20 20 20  QLiteType(..    
10740 20 20 20 20 53 51 4c 69 74 65 54 79 70 65 20 6f      SQLiteType o
10750 6c 64 54 79 70 65 2c 20 2f 2a 20 50 41 53 53 2d  ldType, /* PASS-
10760 54 48 52 4f 55 47 48 20 2a 2f 0d 0a 20 20 20 20  THROUGH */..    
10770 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 0d      string text.
10780 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
10790 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  {..        if (S
107a0 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f  QLiteConvert.Loo
107b0 6b 73 4c 69 6b 65 4e 75 6c 6c 28 74 65 78 74 29  ksLikeNull(text)
107c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
107d0 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65  eturn new SQLite
107e0 54 79 70 65 28 54 79 70 65 41 66 66 69 6e 69 74  Type(TypeAffinit
107f0 79 2e 4e 75 6c 6c 2c 20 44 62 54 79 70 65 2e 4f  y.Null, DbType.O
10800 62 6a 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  bject);....     
10810 20 20 20 69 66 20 28 53 51 4c 69 74 65 43 6f 6e     if (SQLiteCon
10820 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 49 6e  vert.LooksLikeIn
10830 74 36 34 28 74 65 78 74 29 29 0d 0a 20 20 20 20  t64(text))..    
10840 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
10850 65 77 20 53 51 4c 69 74 65 54 79 70 65 28 54 79  ew SQLiteType(Ty
10860 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
10870 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29 3b  , DbType.Int64);
10880 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
10890 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f  SQLiteConvert.Lo
108a0 6f 6b 73 4c 69 6b 65 44 6f 75 62 6c 65 28 74 65  oksLikeDouble(te
108b0 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  xt))..          
108c0 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c    return new SQL
108d0 69 74 65 54 79 70 65 28 54 79 70 65 41 66 66 69  iteType(TypeAffi
108e0 6e 69 74 79 2e 44 6f 75 62 6c 65 2c 20 44 62 54  nity.Double, DbT
108f0 79 70 65 2e 44 6f 75 62 6c 65 29 3b 0d 0a 0d 0a  ype.Double);....
10900 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 61 63          if ((_ac
10910 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 21 3d  tiveStatement !=
10920 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20   null) &&..     
10930 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
10940 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 44 61  vert.LooksLikeDa
10950 74 65 54 69 6d 65 28 5f 61 63 74 69 76 65 53 74  teTime(_activeSt
10960 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2c 20 74 65  atement._sql, te
10970 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  xt))..        {.
10980 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
10990 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 54 79  urn new SQLiteTy
109a0 70 65 28 54 79 70 65 41 66 66 69 6e 69 74 79 2e  pe(TypeAffinity.
109b0 44 61 74 65 54 69 6d 65 2c 20 44 62 54 79 70 65  DateTime, DbType
109c0 2e 44 61 74 65 54 69 6d 65 29 3b 0d 0a 20 20 20  .DateTime);..   
109d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
109e0 20 20 72 65 74 75 72 6e 20 6f 6c 64 54 79 70 65    return oldType
109f0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
10a00 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
10a10 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
10a20 20 74 68 65 20 53 51 4c 69 74 65 54 79 70 65 20   the SQLiteType 
10a30 66 6f 72 20 61 20 67 69 76 65 6e 20 63 6f 6c 75  for a given colu
10a40 6d 6e 2c 20 61 6e 64 20 63 61 63 68 65 73 20 69  mn, and caches i
10a50 74 20 74 6f 20 61 76 6f 69 64 20 72 65 70 65 74  t to avoid repet
10a60 65 74 69 76 65 20 69 6e 74 65 72 6f 70 20 63 61  etive interop ca
10a70 6c 6c 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  lls...    /// </
10a80 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
10a90 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
10aa0 6c 61 67 73 22 3e 54 68 65 20 66 6c 61 67 73 20  lags">The flags 
10ab0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
10ac0 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65  the parent conne
10ad0 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 3c 2f 70  ction object.</p
10ae0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
10af0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
10b00 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
10b10 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
10b20 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
10b30 73 3e 41 20 53 51 4c 69 74 65 54 79 70 65 20 73  s>A SQLiteType s
10b40 74 72 75 63 74 75 72 65 3c 2f 72 65 74 75 72 6e  tructure</return
10b50 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  s>..    private 
10b60 53 51 4c 69 74 65 54 79 70 65 20 47 65 74 53 51  SQLiteType GetSQ
10b70 4c 69 74 65 54 79 70 65 28 53 51 4c 69 74 65 43  LiteType(SQLiteC
10b80 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
10b90 6c 61 67 73 2c 20 69 6e 74 20 69 29 0d 0a 20 20  lags, int i)..  
10ba0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
10bb0 69 74 65 54 79 70 65 20 74 79 70 20 3d 20 5f 66  iteType typ = _f
10bc0 69 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d  ieldTypeArray[i]
10bd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
10be0 28 74 79 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (typ == null).. 
10bf0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10c00 20 20 20 20 20 20 2f 2f 20 49 6e 69 74 69 61 6c        // Initial
10c10 69 7a 65 20 74 68 69 73 20 63 6f 6c 75 6d 6e 27  ize this column'
10c20 73 20 66 69 65 6c 64 20 74 79 70 65 20 69 6e 73  s field type ins
10c30 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20  tance..         
10c40 20 20 20 74 79 70 20 3d 20 5f 66 69 65 6c 64 54     typ = _fieldT
10c50 79 70 65 41 72 72 61 79 5b 69 5d 20 3d 20 6e 65  ypeArray[i] = ne
10c60 77 20 53 51 4c 69 74 65 54 79 70 65 28 29 3b 0d  w SQLiteType();.
10c70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
10c80 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 74 20        // If not 
10c90 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 65  initialized, the
10ca0 6e 20 66 65 74 63 68 20 74 68 65 20 64 65 63 6c  n fetch the decl
10cb0 61 72 65 64 20 63 6f 6c 75 6d 6e 20 64 61 74 61  ared column data
10cc0 74 79 70 65 20 61 6e 64 20 61 74 74 65 6d 70 74  type and attempt
10cd0 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 0d 0a   to convert it..
10ce0 20 20 20 20 20 20 20 20 2f 2f 20 74 6f 20 61 20          // to a 
10cf0 6b 6e 6f 77 6e 20 44 62 54 79 70 65 2e 0d 0a 20  known DbType... 
10d00 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 41         if (typ.A
10d10 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41  ffinity == TypeA
10d20 66 66 69 6e 69 74 79 2e 55 6e 69 6e 69 74 69 61  ffinity.Uninitia
10d30 6c 69 7a 65 64 29 0d 0a 20 20 20 20 20 20 20 20  lized)..        
10d40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
10d50 79 70 2e 54 79 70 65 20 3d 20 53 51 4c 69 74 65  yp.Type = SQLite
10d60 43 6f 6e 76 65 72 74 2e 54 79 70 65 4e 61 6d 65  Convert.TypeName
10d70 54 6f 44 62 54 79 70 65 28 0d 0a 20 20 20 20 20  ToDbType(..     
10d80 20 20 20 20 20 20 20 20 20 20 20 47 65 74 43 6f             GetCo
10d90 6e 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 20  nnection(this), 
10da0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
10db0 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65  ._sql.ColumnType
10dc0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
10dd0 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d     _activeStatem
10de0 65 6e 74 2c 20 69 2c 20 72 65 66 20 74 79 70 2e  ent, i, ref typ.
10df0 41 66 66 69 6e 69 74 79 29 2c 20 66 6c 61 67 73  Affinity), flags
10e00 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
10e10 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
10e20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10e30 20 20 20 20 74 79 70 2e 41 66 66 69 6e 69 74 79      typ.Affinity
10e40 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d   = _activeStatem
10e50 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 41  ent._sql.ColumnA
10e60 66 66 69 6e 69 74 79 28 0d 0a 20 20 20 20 20 20  ffinity(..      
10e70 20 20 20 20 20 20 20 20 20 20 5f 61 63 74 69 76            _activ
10e80 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d  eStatement, i);.
10e90 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
10ea0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 79 70        return typ
10eb0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
10ec0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
10ed0 20 20 20 2f 2f 2f 20 52 65 61 64 73 20 74 68 65     /// Reads the
10ee0 20 6e 65 78 74 20 72 6f 77 20 66 72 6f 6d 20 74   next row from t
10ef0 68 65 20 72 65 73 75 6c 74 73 65 74 0d 0a 20 20  he resultset..  
10f00 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
10f10 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
10f20 6e 73 3e 54 72 75 65 20 69 66 20 61 20 6e 65 77  ns>True if a new
10f30 20 72 6f 77 20 77 61 73 20 73 75 63 63 65 73 73   row was success
10f40 66 75 6c 6c 79 20 6c 6f 61 64 65 64 20 61 6e 64  fully loaded and
10f50 20 69 73 20 72 65 61 64 79 20 66 6f 72 20 70 72   is ready for pr
10f60 6f 63 65 73 73 69 6e 67 3c 2f 72 65 74 75 72 6e  ocessing</return
10f70 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
10f80 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 52 65 61  verride bool Rea
10f90 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  d()..    {..    
10fa0 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
10fb0 29 3b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 43  );..      CheckC
10fc0 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  losed();..      
10fd0 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70  if (_throwOnDisp
10fe0 6f 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d  osed) SQLiteComm
10ff0 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61  and.Check(_comma
11000 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  nd);....      if
11010 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
11020 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
11030 61 76 69 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c 79  avior.SchemaOnly
11040 29 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) != 0)..       
11050 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
11060 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 72 65 61  ..      if (_rea
11070 64 69 6e 67 53 74 61 74 65 20 3d 3d 20 2d 31 29  dingState == -1)
11080 20 2f 2f 20 46 69 72 73 74 20 73 74 65 70 20 77   // First step w
11090 61 73 20 61 6c 72 65 61 64 79 20 64 6f 6e 65 20  as already done 
110a0 61 74 20 74 68 65 20 4e 65 78 74 52 65 73 75 6c  at the NextResul
110b0 74 28 29 20 6c 65 76 65 6c 2c 20 73 6f 20 64 6f  t() level, so do
110c0 6e 27 74 20 73 74 65 70 20 61 67 61 69 6e 2c 20  n't step again, 
110d0 6a 75 73 74 20 72 65 74 75 72 6e 20 74 72 75 65  just return true
110e0 2e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  ...      {..    
110f0 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74      _readingStat
11100 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  e = 0;..        
11110 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
11120 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73      }..      els
11130 65 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74  e if (_readingSt
11140 61 74 65 20 3d 3d 20 30 29 20 2f 2f 20 41 63 74  ate == 0) // Act
11150 69 76 65 6c 79 20 72 65 61 64 69 6e 67 20 72 6f  ively reading ro
11160 77 73 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ws..      {..   
11170 20 20 20 20 20 2f 2f 20 44 6f 6e 27 74 20 72 65       // Don't re
11180 61 64 20 61 20 6e 65 77 20 72 6f 77 20 69 66 20  ad a new row if 
11190 74 68 65 20 63 6f 6d 6d 61 6e 64 20 62 65 68 61  the command beha
111a0 76 69 6f 72 20 64 69 63 74 61 74 65 73 20 53 69  vior dictates Si
111b0 6e 67 6c 65 52 6f 77 2e 20 20 57 65 27 76 65 20  ngleRow.  We've 
111c0 61 6c 72 65 61 64 79 20 72 65 61 64 20 74 68 65  already read the
111d0 20 66 69 72 73 74 20 72 6f 77 2e 0d 0a 20 20 20   first row...   
111e0 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61       if ((_comma
111f0 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d  ndBehavior & Com
11200 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 69 6e  mandBehavior.Sin
11210 67 6c 65 52 6f 77 29 20 3d 3d 20 30 29 0d 0a 20  gleRow) == 0).. 
11220 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11230 20 20 20 20 69 66 20 28 5f 61 63 74 69 76 65 53      if (_activeS
11240 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 53 74  tatement._sql.St
11250 65 70 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  ep(_activeStatem
11260 65 6e 74 29 20 3d 3d 20 74 72 75 65 29 0d 0a 20  ent) == true).. 
11270 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11280 20 20 20 20 20 20 20 20 5f 73 74 65 70 43 6f 75          _stepCou
11290 6e 74 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt++;....       
112a0 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66       if (_keyInf
112b0 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
112c0 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e            _keyIn
112d0 66 6f 2e 52 65 73 65 74 28 29 3b 0d 0a 0d 0a 20  fo.Reset();.... 
112e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
112f0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
11300 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
11310 0a 0d 0a 20 20 20 20 20 20 20 20 5f 72 65 61 64  ...        _read
11320 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f  ingState = 1; //
11330 20 46 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e   Finished readin
11340 67 20 72 6f 77 73 0d 0a 20 20 20 20 20 20 7d 0d  g rows..      }.
11350 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
11360 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  false;..    }...
11370 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
11380 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
11390 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
113a0 66 20 72 6f 77 73 20 61 66 66 65 63 74 65 64 20  f rows affected 
113b0 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
113c0 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 2e   being executed.
113d0 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61  ..    /// The va
113e0 6c 75 65 20 72 65 74 75 72 6e 65 64 20 6d 61 79  lue returned may
113f0 20 6e 6f 74 20 62 65 20 61 63 63 75 72 61 74 65   not be accurate
11400 20 66 6f 72 20 44 44 4c 20 73 74 61 74 65 6d 65   for DDL stateme
11410 6e 74 73 2e 20 20 41 6c 73 6f 2c 20 69 74 0d 0a  nts.  Also, it..
11420 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 62 65 20      /// will be 
11430 2d 31 20 66 6f 72 20 61 6e 79 20 73 74 61 74 65  -1 for any state
11440 6d 65 6e 74 20 74 68 61 74 20 64 6f 65 73 20 6e  ment that does n
11450 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61  ot modify the da
11460 74 61 62 61 73 65 20 28 65 2e 67 2e 0d 0a 20 20  tabase (e.g...  
11470 20 20 2f 2f 2f 20 53 45 4c 45 43 54 29 2e 20 20    /// SELECT).  
11480 49 66 20 61 6e 20 6f 74 68 65 72 77 69 73 65 20  If an otherwise 
11490 72 65 61 64 2d 6f 6e 6c 79 20 73 74 61 74 65 6d  read-only statem
114a0 65 6e 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65  ent modifies the
114b0 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f   database..    /
114c0 2f 2f 20 69 6e 64 69 72 65 63 74 6c 79 20 28 65  // indirectly (e
114d0 2e 67 2e 20 76 69 61 20 61 20 76 69 72 74 75 61  .g. via a virtua
114e0 6c 20 74 61 62 6c 65 20 6f 72 20 75 73 65 72 2d  l table or user-
114f0 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
11500 29 2c 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  ), the..    /// 
11510 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69  value returned i
11520 73 20 75 6e 64 65 66 69 6e 65 64 2e 0d 0a 20 20  s undefined...  
11530 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
11540 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
11550 72 72 69 64 65 20 69 6e 74 20 52 65 63 6f 72 64  rride int Record
11560 73 41 66 66 65 63 74 65 64 0d 0a 20 20 20 20 7b  sAffected..    {
11570 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43 68  ..      get { Ch
11580 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
11590 65 74 75 72 6e 20 5f 72 6f 77 73 41 66 66 65 63  eturn _rowsAffec
115a0 74 65 64 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d  ted; }..    }...
115b0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
115c0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65  y>..    /// Inde
115d0 78 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20  xer to retrieve 
115e0 64 61 74 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75  data from a colu
115f0 6d 6e 20 67 69 76 65 6e 20 69 74 73 20 6e 61 6d  mn given its nam
11600 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
11610 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
11620 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65  param name="name
11630 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  ">The name of th
11640 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72  e column to retr
11650 69 65 76 65 20 64 61 74 61 20 66 6f 72 3c 2f 70  ieve data for</p
11660 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
11670 72 65 74 75 72 6e 73 3e 54 68 65 20 76 61 6c 75  returns>The valu
11680 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
11690 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72  he column</retur
116a0 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
116b0 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20  override object 
116c0 74 68 69 73 5b 73 74 72 69 6e 67 20 6e 61 6d 65  this[string name
116d0 5d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  ]..    {..      
116e0 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
116f0 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 47 65  sed(); return Ge
11700 74 56 61 6c 75 65 28 47 65 74 4f 72 64 69 6e 61  tValue(GetOrdina
11710 6c 28 6e 61 6d 65 29 29 3b 20 7d 0d 0a 20 20 20  l(name)); }..   
11720 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
11730 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
11740 20 49 6e 64 65 78 65 72 20 74 6f 20 72 65 74 72   Indexer to retr
11750 69 65 76 65 20 64 61 74 61 20 66 72 6f 6d 20 61  ieve data from a
11760 20 63 6f 6c 75 6d 6e 20 67 69 76 65 6e 20 69 74   column given it
11770 73 20 69 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  s i..    /// </s
11780 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
11790 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
117a0 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
117b0 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d  e column.</param
117c0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
117d0 72 6e 73 3e 54 68 65 20 76 61 6c 75 65 20 63 6f  rns>The value co
117e0 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63  ntained in the c
117f0 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d  olumn</returns>.
11800 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
11810 72 69 64 65 20 6f 62 6a 65 63 74 20 74 68 69 73  ride object this
11820 5b 69 6e 74 20 69 5d 0d 0a 20 20 20 20 7b 0d 0a  [int i]..    {..
11830 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
11840 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
11850 75 72 6e 20 47 65 74 56 61 6c 75 65 28 69 29 3b  urn GetValue(i);
11860 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
11870 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 4c 6f   private void Lo
11880 61 64 4b 65 79 49 6e 66 6f 28 29 0d 0a 20 20 20  adKeyInfo()..   
11890 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
118a0 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
118b0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
118c0 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e            _keyIn
118d0 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20  fo.Dispose();.. 
118e0 20 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79 49             _keyI
118f0 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  nfo = null;..   
11900 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11910 20 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 65 77    _keyInfo = new
11920 20 53 51 4c 69 74 65 4b 65 79 52 65 61 64 65 72   SQLiteKeyReader
11930 28 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63  (_command.Connec
11940 74 69 6f 6e 2c 20 74 68 69 73 2c 20 5f 61 63 74  tion, this, _act
11950 69 76 65 53 74 61 74 65 6d 65 6e 74 29 3b 0d 0a  iveStatement);..
11960 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a         }..  }..}..