System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 7a3139fb151adea6a1c6f0781e54dee3db20900b:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75  ns.Generic;..  u
0180: 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c  sing System.Coll
0190: 65 63 74 69 6f 6e 73 2e 53 70 65 63 69 61 6c 69  ections.Speciali
01a0: 7a 65 64 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  zed;..  using Sy
01b0: 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 75 73  stem.Data;..  us
01c0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
01d0: 43 6f 6d 6d 6f 6e 3b 0d 0a 20 20 75 73 69 6e 67  Common;..  using
01e0: 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a   System.Globaliz
01f0: 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20  ation;....  /// 
0200: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  <summary>..  ///
0210: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
0220: 74 61 74 69 6f 6e 20 6f 66 20 44 62 44 61 74 61  tation of DbData
0230: 52 65 61 64 65 72 2e 0d 0a 20 20 2f 2f 2f 20 3c  Reader...  /// <
0240: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62  /summary>..  pub
0250: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
0260: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
0270: 72 20 3a 20 44 62 44 61 74 61 52 65 61 64 65 72  r : DbDataReader
0280: 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ..  {..    /// <
0290: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
02a0: 2f 20 55 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d  / Underlying com
02b0: 6d 61 6e 64 20 74 68 69 73 20 72 65 61 64 65 72  mand this reader
02c0: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 0d   is attached to.
02d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
02e0: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
02f0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 5f   SQLiteCommand _
0300: 63 6f 6d 6d 61 6e 64 3b 0d 0a 20 20 20 20 2f 2f  command;..    //
0310: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0320: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 70   /// The flags p
0330: 65 72 74 61 69 6e 69 6e 67 20 74 6f 20 74 68 65  ertaining to the
0340: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6e 6e   associated conn
0350: 65 63 74 69 6f 6e 20 28 76 69 61 20 74 68 65 20  ection (via the 
0360: 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 2f  command)...    /
0370: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0380: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0390: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
03a0: 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20 2f 2f   _flags;..    //
03b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
03c0: 20 2f 2f 2f 20 49 6e 64 65 78 20 6f 66 20 74 68   /// Index of th
03d0: 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
03e0: 65 6e 74 20 69 6e 20 74 68 65 20 63 6f 6d 6d 61  ent in the comma
03f0: 6e 64 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nd being process
0400: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
0410: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
0420: 61 74 65 20 69 6e 74 20 5f 61 63 74 69 76 65 53  ate int _activeS
0430: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 3b 0d 0a  tatementIndex;..
0440: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0450: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65  >..    /// Curre
0460: 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  nt statement bei
0470: 6e 67 20 52 65 61 64 28 29 0d 0a 20 20 20 20 2f  ng Read()..    /
0480: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0490: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
04a0: 65 53 74 61 74 65 6d 65 6e 74 20 5f 61 63 74 69  eStatement _acti
04b0: 76 65 53 74 61 74 65 6d 65 6e 74 3b 0d 0a 20 20  veStatement;..  
04c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
04d0: 0a 20 20 20 20 2f 2f 2f 20 53 74 61 74 65 20 6f  .    /// State o
04e0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  f the current st
04f0: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72  atement being pr
0500: 6f 63 65 73 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  ocessed...    //
0510: 2f 20 2d 31 20 3d 20 46 69 72 73 74 20 53 74 65  / -1 = First Ste
0520: 70 28 29 20 65 78 65 63 75 74 65 64 2c 20 73 6f  p() executed, so
0530: 20 74 68 65 20 66 69 72 73 74 20 52 65 61 64 28   the first Read(
0540: 29 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65  ) will be ignore
0550: 64 0d 0a 20 20 20 20 2f 2f 2f 20 20 30 20 3d 20  d..    ///  0 = 
0560: 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67  Actively reading
0570: 0d 0a 20 20 20 20 2f 2f 2f 20 20 31 20 3d 20 46  ..    ///  1 = F
0580: 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 0d  inished reading.
0590: 0a 20 20 20 20 2f 2f 2f 20 20 32 20 3d 20 4e 6f  .    ///  2 = No
05a0: 6e 2d 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  n-row-returning 
05b0: 73 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 20 72 65  statement, no re
05c0: 63 6f 72 64 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cords..    /// <
05d0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
05e0: 72 69 76 61 74 65 20 69 6e 74 20 5f 72 65 61 64  rivate int _read
05f0: 69 6e 67 53 74 61 74 65 3b 0d 0a 20 20 20 20 2f  ingState;..    /
0600: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0610: 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20    /// Number of 
0620: 72 65 63 6f 72 64 73 20 61 66 66 65 63 74 65 64  records affected
0630: 20 62 79 20 74 68 65 20 69 6e 73 65 72 74 2f 75   by the insert/u
0640: 70 64 61 74 65 20 73 74 61 74 65 6d 65 6e 74 73  pdate statements
0650: 20 65 78 65 63 75 74 65 64 20 6f 6e 20 74 68 65   executed on the
0660: 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 2f 2f   command..    //
0670: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0680: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 5f 72    private int _r
0690: 6f 77 73 41 66 66 65 63 74 65 64 3b 0d 0a 20 20  owsAffected;..  
06a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
06b0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 75 6e 74 20 6f  .    /// Count o
06c0: 66 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d 6e  f fields (column
06d0: 73 29 20 69 6e 20 74 68 65 20 72 6f 77 2d 72 65  s) in the row-re
06e0: 74 75 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e  turning statemen
06f0: 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
0700: 67 20 70 72 6f 63 65 73 73 65 64 0d 0a 20 20 20  g processed..   
0710: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0720: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
0730: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20   _fieldCount;.. 
0740: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0750: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
0760: 6d 62 65 72 20 6f 66 20 63 61 6c 6c 73 20 74 6f  mber of calls to
0770: 20 53 74 65 70 28 29 20 74 68 61 74 20 68 61 76   Step() that hav
0780: 65 20 72 65 74 75 72 6e 65 64 20 74 72 75 65 20  e returned true 
0790: 28 69 2e 65 2e 20 74 68 65 20 6e 75 6d 62 65 72  (i.e. the number
07a0: 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0d 0a 20   of rows that.. 
07b0: 20 20 20 2f 2f 2f 20 68 61 76 65 20 62 65 65 6e     /// have been
07c0: 20 72 65 61 64 20 69 6e 20 74 68 65 20 63 75 72   read in the cur
07d0: 72 65 6e 74 20 72 65 73 75 6c 74 20 73 65 74 29  rent result set)
07e0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
07f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0800: 74 65 20 69 6e 74 20 5f 73 74 65 70 43 6f 75 6e  te int _stepCoun
0810: 74 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  t;..    /// <sum
0820: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d  mary>..    /// M
0830: 61 70 73 20 74 68 65 20 66 69 65 6c 64 20 28 63  aps the field (c
0840: 6f 6c 75 6d 6e 29 20 6e 61 6d 65 73 20 74 6f 20  olumn) names to 
0850: 74 68 65 69 72 20 63 6f 72 72 65 73 70 6f 6e 64  their correspond
0860: 69 6e 67 20 69 6e 64 65 78 65 73 20 77 69 74 68  ing indexes with
0870: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0d  in the results..
0880: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0890: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
08a0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
08b0: 6e 67 2c 20 69 6e 74 3e 20 5f 66 69 65 6c 64 49  ng, int> _fieldI
08c0: 6e 64 65 78 65 73 3b 0d 0a 20 20 20 20 2f 2f 2f  ndexes;..    ///
08d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
08e0: 2f 2f 2f 20 44 61 74 61 74 79 70 65 73 20 6f 66  /// Datatypes of
08f0: 20 61 63 74 69 76 65 20 66 69 65 6c 64 73 20 28   active fields (
0900: 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74 68 65 20  columns) in the 
0910: 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
0920: 74 2c 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  t, used for type
0930: 2d 72 65 73 74 72 69 63 74 69 6e 67 20 64 61 74  -restricting dat
0940: 61 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  a..    /// </sum
0950: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0960: 74 65 20 53 51 4c 69 74 65 54 79 70 65 5b 5d 20  te SQLiteType[] 
0970: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 3b  _fieldTypeArray;
0980: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0990: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
09a0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
09b0: 68 65 20 64 61 74 61 72 65 61 64 65 72 0d 0a 20  he datareader.. 
09c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
09d0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 43  >..    private C
09e0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 5f  ommandBehavior _
09f0: 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 3b  commandBehavior;
0a00: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0a10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
0a20: 66 20 73 65 74 2c 20 74 68 65 6e 20 64 69 73 70  f set, then disp
0a30: 6f 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61  ose of the comma
0a40: 6e 64 20 6f 62 6a 65 63 74 20 77 68 65 6e 20 74  nd object when t
0a50: 68 65 20 72 65 61 64 65 72 20 69 73 20 66 69 6e  he reader is fin
0a60: 69 73 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ished..    /// <
0a70: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
0a80: 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 64 69  nternal bool _di
0a90: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 3b 0d 0a 0d  sposeCommand;...
0aa0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0ab0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73  y>..    /// If s
0ac0: 65 74 2c 20 74 68 65 6e 20 72 61 69 73 65 20 61  et, then raise a
0ad0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 68 65 6e  n exception when
0ae0: 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61   the object is a
0af0: 63 63 65 73 73 65 64 20 61 66 74 65 72 20 62 65  ccessed after be
0b00: 69 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  ing disposed... 
0b10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0b20: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0b30: 62 6f 6f 6c 20 5f 74 68 72 6f 77 4f 6e 44 69 73  bool _throwOnDis
0b40: 70 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  posed;....    //
0b50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0b60: 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66   /// An array of
0b70: 20 72 6f 77 69 64 27 73 20 66 6f 72 20 74 68 65   rowid's for the
0b80: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
0b90: 74 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61  t if CommandBeha
0ba0: 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 20 69 73 20  vior.KeyInfo is 
0bb0: 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
0bc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0bd0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0be0: 65 4b 65 79 52 65 61 64 65 72 20 5f 6b 65 79 49  eKeyReader _keyI
0bf0: 6e 66 6f 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  nfo;....    /// 
0c00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0c10: 2f 2f 20 4d 61 74 63 68 65 73 20 74 68 65 20 76  // Matches the v
0c20: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  ersion of the co
0c30: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
0c40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0c50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20     internal int 
0c60: 5f 76 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  _version;....   
0c70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0c80: 20 20 20 20 2f 2f 2f 20 54 68 65 20 22 73 74 75      /// The "stu
0c90: 62 22 20 28 69 2e 65 2e 20 70 6c 61 63 65 68 6f  b" (i.e. placeho
0ca0: 6c 64 65 72 29 20 62 61 73 65 20 73 63 68 65 6d  lder) base schem
0cb0: 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 77 68  a name to use wh
0cc0: 65 6e 20 72 65 74 75 72 6e 69 6e 67 0d 0a 20 20  en returning..  
0cd0: 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 73 63 68    /// column sch
0ce0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ema information.
0cf0: 20 20 4d 61 74 63 68 65 73 20 74 68 65 20 62 61    Matches the ba
0d00: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 75  se schema name u
0d10: 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  sed by the..    
0d20: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 63  /// associated c
0d30: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
0d40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0d50: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
0d60: 6e 67 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61  ng _baseSchemaNa
0d70: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  me;....    /// <
0d80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0d90: 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74  / Internal const
0da0: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
0db0: 7a 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  zes the dataread
0dc0: 65 72 20 61 6e 64 20 73 65 74 73 20 75 70 20 74  er and sets up t
0dd0: 6f 20 62 65 67 69 6e 20 65 78 65 63 75 74 69 6e  o begin executin
0de0: 67 20 73 74 61 74 65 6d 65 6e 74 73 0d 0a 20 20  g statements..  
0df0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0e00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0e10: 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65 20   name="cmd">The 
0e20: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74 68  SQLiteCommand th
0e30: 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20 69  is data reader i
0e40: 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20  s for</param>.. 
0e50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e60: 6d 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20  me="behave">The 
0e70: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
0e80: 72 20 6f 66 20 74 68 65 20 64 61 74 61 20 72 65  r of the data re
0e90: 61 64 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ader</param>..  
0ea0: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
0eb0: 65 44 61 74 61 52 65 61 64 65 72 28 53 51 4c 69  eDataReader(SQLi
0ec0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43  teCommand cmd, C
0ed0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 62  ommandBehavior b
0ee0: 65 68 61 76 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ehave)..    {.. 
0ef0: 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69 73       _throwOnDis
0f00: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
0f10: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20       _command = 
0f20: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 5f 76 65 72  cmd;..      _ver
0f30: 73 69 6f 6e 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  sion = _command.
0f40: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 76 65 72 73  Connection._vers
0f50: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 5f 62 61 73  ion;..      _bas
0f60: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 5f 63  eSchemaName = _c
0f70: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
0f80: 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  n._baseSchemaNam
0f90: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 63 6f 6d  e;....      _com
0fa0: 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 3d 20 62  mandBehavior = b
0fb0: 65 68 61 76 65 3b 0d 0a 20 20 20 20 20 20 5f 61  ehave;..      _a
0fc0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
0fd0: 64 65 78 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  dex = -1;..     
0fe0: 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d   _rowsAffected =
0ff0: 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65   -1;....      Re
1000: 66 72 65 73 68 46 6c 61 67 73 28 29 3b 0d 0a 0d  freshFlags();...
1010: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
1020: 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
1030: 64 28 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  d(GetConnection(
1040: 74 68 69 73 29 2c 0d 0a 20 20 20 20 20 20 20 20  this),..        
1050: 20 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e    new Connection
1060: 45 76 65 6e 74 41 72 67 73 28 53 51 4c 69 74 65  EventArgs(SQLite
1070: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
1080: 79 70 65 2e 4e 65 77 44 61 74 61 52 65 61 64 65  ype.NewDataReade
1090: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 75  r,..          nu
10a0: 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61  ll, null, _comma
10b0: 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c 2c 20  nd, this, null, 
10c0: 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  null, new object
10d0: 5b 5d 20 7b 20 62 65 68 61 76 65 20 7d 29 29 3b  [] { behave }));
10e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 63  ....      if (_c
10f0: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
1100: 0a 20 20 20 20 20 20 20 20 20 20 4e 65 78 74 52  .          NextR
1110: 65 73 75 6c 74 28 29 3b 0d 0a 20 20 20 20 7d 0d  esult();..    }.
1120: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1190: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
11a0: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
11b0: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
11c0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
11d0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
11e0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
11f0: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
1200: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
1210: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
1220: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
1230: 64 20 26 26 20 5f 74 68 72 6f 77 4f 6e 44 69 73  d && _throwOnDis
1240: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
1250: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
1260: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
1270: 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c  ption(typeof(SQL
1280: 69 74 65 44 61 74 61 52 65 61 64 65 72 29 2e 4e  iteDataReader).N
1290: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
12a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1310: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1320: 0d 0a 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73  ..    /// Dispos
1330: 65 20 6f 66 20 61 6c 6c 20 72 65 73 6f 75 72 63  e of all resourc
1340: 65 73 20 75 73 65 64 20 62 79 20 74 68 69 73 20  es used by this 
1350: 64 61 74 61 72 65 61 64 65 72 2e 0d 0a 20 20 20  datareader...   
1360: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1380: 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22  name="disposing"
1390: 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70  ></param>..    p
13a0: 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64  rotected overrid
13b0: 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  e void Dispose(b
13c0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
13d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
13e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
13f0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1400: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1410: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1420: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
1430: 72 67 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  rgs(SQLiteConnec
1440: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 44 69  tionEventType.Di
1450: 73 70 6f 73 69 6e 67 44 61 74 61 52 65 61 64 65  sposingDataReade
1460: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
1470: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d  null, null, _com
1480: 6d 61 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c  mand, this, null
1490: 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65  , null, new obje
14a0: 63 74 5b 5d 20 7b 20 64 69 73 70 6f 73 69 6e 67  ct[] { disposing
14b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ,..            d
14c0: 69 73 70 6f 73 65 64 2c 20 5f 63 6f 6d 6d 61 6e  isposed, _comman
14d0: 64 42 65 68 61 76 69 6f 72 2c 20 5f 72 65 61 64  dBehavior, _read
14e0: 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f 77 73 41  ingState, _rowsA
14f0: 66 66 65 63 74 65 64 2c 20 5f 73 74 65 70 43 6f  ffected, _stepCo
1500: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
1510: 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 20 5f    _fieldCount, _
1520: 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 2c 20  disposeCommand, 
1530: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
1540: 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   }));....       
1550: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1570: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1580: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
15a0: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15d0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1610: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1620: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1630: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1640: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1650: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1680: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
16d0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
16e0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
16f0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1740: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1760: 4f 54 45 3a 20 46 69 78 20 66 6f 72 20 74 69 63  OTE: Fix for tic
1770: 6b 65 74 20 5b 65 31 62 32 65 30 66 37 36 39 5d  ket [e1b2e0f769]
1780: 2c 20 64 6f 20 4e 4f 54 20 74 68 72 6f 77 20 65  , do NOT throw e
1790: 78 63 65 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20  xceptions..     
17a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17b0: 20 20 20 20 77 68 69 6c 65 20 77 65 20 61 72 65      while we are
17c0: 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64 2e   being disposed.
17d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
17f0: 20 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69        _throwOnDi
1800: 73 70 6f 73 65 64 20 3d 20 66 61 6c 73 65 3b 0d  sposed = false;.
1810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1820: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1830: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
1840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1850: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
1860: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20  disposing);.... 
1870: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1880: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1890: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
18a0: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
18b0: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
18c0: 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  point...        
18d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
18e0: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
18f0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1900: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1910: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1980: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f  .    internal vo
1990: 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  id Cancel()..   
19a0: 20 7b 0d 0a 20 20 20 20 20 20 5f 76 65 72 73 69   {..      _versi
19b0: 6f 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  on = 0;..    }..
19c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
19d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c 6f  ry>..    /// Clo
19e0: 73 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  ses the dataread
19f0: 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20  er, potentially 
1a00: 63 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  closing the conn
1a10: 65 63 74 69 6f 6e 20 61 73 20 77 65 6c 6c 20 69  ection as well i
1a20: 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  f CommandBehavio
1a30: 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f  r.CloseConnectio
1a40: 6e 20 77 61 73 20 73 70 65 63 69 66 69 65 64 2e  n was specified.
1a50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1a60: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
1a70: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
1a80: 6c 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  lose()..    {.. 
1a90: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
1aa0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53  ed();....      S
1ab0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
1ac0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1ad0: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1ae0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f            new Co
1af0: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
1b00: 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  s(SQLiteConnecti
1b10: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73  onEventType.Clos
1b20: 69 6e 67 44 61 74 61 52 65 61 64 65 72 2c 0d 0a  ingDataReader,..
1b30: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
1b40: 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61 6e 64 2c 20  null, _command, 
1b50: 74 68 69 73 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  this, null, null
1b60: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
1b70: 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f   _commandBehavio
1b80: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 72  r,..          _r
1b90: 65 61 64 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f  eadingState, _ro
1ba0: 77 73 41 66 66 65 63 74 65 64 2c 20 5f 73 74 65  wsAffected, _ste
1bb0: 70 43 6f 75 6e 74 2c 20 5f 66 69 65 6c 64 43 6f  pCount, _fieldCo
1bc0: 75 6e 74 2c 20 5f 64 69 73 70 6f 73 65 43 6f 6d  unt, _disposeCom
1bd0: 6d 61 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  mand,..         
1be0: 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65   _throwOnDispose
1bf0: 64 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  d }));....      
1c00: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
1c10: 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61        if (_comma
1c20: 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nd != null)..   
1c30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c40: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1c50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c60: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1c70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c80: 20 20 2f 2f 20 4d 61 6b 65 20 73 75 72 65 20 77    // Make sure w
1c90: 65 27 76 65 20 6e 6f 74 20 62 65 65 6e 20 63 61  e've not been ca
1ca0: 6e 63 65 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  nceled..        
1cb0: 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73 69        if (_versi
1cc0: 6f 6e 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  on != 0)..      
1cd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ce0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d10: 20 20 20 20 20 77 68 69 6c 65 20 28 4e 65 78 74       while (Next
1d20: 52 65 73 75 6c 74 28 29 29 0d 0a 20 20 20 20 20  Result())..     
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d70: 20 20 20 20 20 20 20 20 63 61 74 63 68 28 53 51          catch(SQ
1d80: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 29 0d 0a  LiteException)..
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1db0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1dc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1dd0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 52 65       _command.Re
1de0: 73 65 74 44 61 74 61 52 65 61 64 65 72 28 29 3b  setDataReader();
1df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
1e10: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e30: 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64 61 74     // If the dat
1e40: 61 72 65 61 64 65 72 27 73 20 62 65 68 61 76 69  areader's behavi
1e50: 6f 72 20 69 6e 63 6c 75 64 65 73 20 63 6c 6f 73  or includes clos
1e60: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
1e70: 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73 6f 20 68  on, then do so h
1e80: 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ere...          
1e90: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
1ea0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
1eb0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73  andBehavior.Clos
1ec0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 21 3d 20  eConnection) != 
1ed0: 30 20 26 26 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  0 && _command.Co
1ee0: 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  nnection != null
1ef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f00: 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e     _command.Conn
1f10: 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d  ection.Close();.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f40: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
1f50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f60: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 64 69           if (_di
1f70: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 29 0d 0a 20  sposeCommand).. 
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63 6f               _co
1f90: 6d 6d 61 6e 64 2e 44 69 73 70 6f 73 65 28 29 3b  mmand.Dispose();
1fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
1fb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fc0: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 6e      _command = n
1fd0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f 61  ull;..        _a
1fe0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d  ctiveStatement =
1ff0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2000: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
2010: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f  null;..        _
2020: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d  fieldTypeArray =
2030: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d   null;..      }.
2040: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
2050: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2060: 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
2070: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2080: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65  {..          _ke
2090: 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b  yInfo.Dispose();
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79  ..          _key
20b0: 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Info = null;..  
20c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
20d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
20e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20f0: 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20 65    /// Throw an e
2100: 72 72 6f 72 20 69 66 20 74 68 65 20 64 61 74 61  rror if the data
2110: 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
2120: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2130: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
2140: 65 20 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73  e void CheckClos
2150: 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
2160: 20 20 20 69 66 20 28 21 5f 74 68 72 6f 77 4f 6e     if (!_throwOn
2170: 44 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  Disposed)..     
2180: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
2190: 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64      if (_command
21a0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
21b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
21c0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
21d0: 65 70 74 69 6f 6e 28 22 44 61 74 61 52 65 61 64  eption("DataRead
21e0: 65 72 20 68 61 73 20 62 65 65 6e 20 63 6c 6f 73  er has been clos
21f0: 65 64 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ed");....      i
2200: 66 20 28 5f 76 65 72 73 69 6f 6e 20 3d 3d 20 30  f (_version == 0
2210: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
2220: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2230: 74 69 6f 6e 28 22 45 78 65 63 75 74 69 6f 6e 20  tion("Execution 
2240: 77 61 73 20 61 62 6f 72 74 65 64 20 62 79 20 74  was aborted by t
2250: 68 65 20 75 73 65 72 22 29 3b 0d 0a 0d 0a 20 20  he user");....  
2260: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2270: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
2280: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
2290: 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ction;....      
22a0: 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  if (connection._
22b0: 76 65 72 73 69 6f 6e 20 21 3d 20 5f 76 65 72 73  version != _vers
22c0: 69 6f 6e 20 7c 7c 20 63 6f 6e 6e 65 63 74 69 6f  ion || connectio
22d0: 6e 2e 53 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65  n.State != Conne
22e0: 63 74 69 6f 6e 53 74 61 74 65 2e 4f 70 65 6e 29  ctionState.Open)
22f0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
2300: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
2310: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 43  tionException("C
2320: 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 63 6c  onnection was cl
2330: 6f 73 65 64 2c 20 73 74 61 74 65 6d 65 6e 74 20  osed, statement 
2340: 77 61 73 20 74 65 72 6d 69 6e 61 74 65 64 22 29  was terminated")
2350: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
2360: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2370: 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20     /// Throw an 
2380: 65 72 72 6f 72 20 69 66 20 61 20 72 6f 77 20 69  error if a row i
2390: 73 20 6e 6f 74 20 6c 6f 61 64 65 64 0d 0a 20 20  s not loaded..  
23a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
23b0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
23c0: 69 64 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77  id CheckValidRow
23d0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
23e0: 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
23f0: 74 65 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  te != 0)..      
2400: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
2410: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
2420: 70 74 69 6f 6e 28 22 4e 6f 20 63 75 72 72 65 6e  ption("No curren
2430: 74 20 72 6f 77 22 29 3b 0d 0a 20 20 20 20 7d 0d  t row");..    }.
2440: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2450: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
2460: 75 6d 65 72 61 74 6f 72 20 73 75 70 70 6f 72 74  umerator support
2470: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2480: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
2490: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
24a0: 20 44 62 45 6e 75 6d 65 72 61 74 6f 72 20 6f 62   DbEnumerator ob
24b0: 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ject.</returns>.
24c0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
24d0: 72 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 73  ride Collections
24e0: 2e 49 45 6e 75 6d 65 72 61 74 6f 72 20 47 65 74  .IEnumerator Get
24f0: 45 6e 75 6d 65 72 61 74 6f 72 28 29 0d 0a 20 20  Enumerator()..  
2500: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
2510: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
2520: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 62     return new Db
2530: 45 6e 75 6d 65 72 61 74 6f 72 28 74 68 69 73 2c  Enumerator(this,
2540: 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
2550: 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
2560: 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65  avior.CloseConne
2570: 63 74 69 6f 6e 29 20 3d 3d 20 43 6f 6d 6d 61 6e  ction) == Comman
2580: 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43  dBehavior.CloseC
2590: 6f 6e 6e 65 63 74 69 6f 6e 29 29 3b 0d 0a 20 20  onnection));..  
25a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
25b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
25c0: 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65  / Not implemente
25d0: 64 2e 20 20 52 65 74 75 72 6e 73 20 30 0d 0a 20  d.  Returns 0.. 
25e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
25f0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
2600: 65 72 72 69 64 65 20 69 6e 74 20 44 65 70 74 68  erride int Depth
2610: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
2620: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
2630: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2640: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43  ed();..        C
2650: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
2660: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
2670: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2680: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2690: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
26a0: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
26b0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
26c0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75  the current resu
26d0: 6c 74 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ltset..    /// <
26e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
26f0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
2700: 6e 74 20 46 69 65 6c 64 43 6f 75 6e 74 0d 0a 20  nt FieldCount.. 
2710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
2720: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2730: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
2740: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2750: 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  kClosed();....  
2760: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
2770: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
2780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66         return _f
2790: 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  ieldCount;....  
27a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69        return _fi
27b0: 65 6c 64 43 6f 75 6e 74 20 2b 20 5f 6b 65 79 49  eldCount + _keyI
27c0: 6e 66 6f 2e 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  nfo.Count;..    
27d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
27e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
27f0: 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 63 65 73 20  .    /// Forces 
2800: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
2810: 6c 61 67 73 20 63 61 63 68 65 64 20 62 79 20 74  lags cached by t
2820: 68 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20  his data reader 
2830: 74 6f 20 62 65 20 72 65 66 72 65 73 68 65 64 0d  to be refreshed.
2840: 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68  .    /// from th
2850: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6e  e underlying con
2860: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
2870: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2880: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 52 65    public void Re
2890: 66 72 65 73 68 46 6c 61 67 73 28 29 0d 0a 20 20  freshFlags()..  
28a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
28b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
28c0: 0a 20 20 20 20 20 20 20 20 5f 66 6c 61 67 73 20  .        _flags 
28d0: 3d 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  = SQLiteCommand.
28e0: 47 65 74 46 6c 61 67 73 28 5f 63 6f 6d 6d 61 6e  GetFlags(_comman
28f0: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
2900: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2910: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
2920: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2930: 6f 77 73 20 73 65 65 6e 20 73 6f 20 66 61 72 20  ows seen so far 
2940: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  in the current r
2950: 65 73 75 6c 74 20 73 65 74 2e 0d 0a 20 20 20 20  esult set...    
2960: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2970: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 53      public int S
2980: 74 65 70 43 6f 75 6e 74 0d 0a 20 20 20 20 7b 0d  tepCount..    {.
2990: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
29a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29b0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
29c0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
29d0: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
29e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29f0: 20 72 65 74 75 72 6e 20 5f 73 74 65 70 43 6f 75   return _stepCou
2a00: 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  nt;..        }..
2a10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
2a20: 76 61 74 65 20 69 6e 74 20 50 72 69 76 61 74 65  vate int Private
2a30: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
2a40: 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
2a50: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
2a60: 66 69 65 6c 64 43 6f 75 6e 74 3b 20 7d 0d 0a 20  fieldCount; }.. 
2a70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
2a80: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
2a90: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
2aa0: 75 6d 62 65 72 20 6f 66 20 76 69 73 69 62 6c 65  umber of visible
2ab0: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
2ac0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
2ad0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2ae0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
2af0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 69   override int Vi
2b00: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 0d  sibleFieldCount.
2b10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2b20: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2b30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
2b40: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68  d();..        Ch
2b50: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20  eckClosed();..  
2b60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 72 69        return Pri
2b70: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
2b80: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 7d 0d  Count;..      }.
2b90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2ba0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2bb0: 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
2bc0: 20 69 73 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   is used to make
2bd0: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
2be0: 20 73 65 74 20 69 73 20 6f 70 65 6e 20 61 6e 64   set is open and
2bf0: 20 61 20 72 6f 77 20 69 73 20 63 75 72 72 65 6e   a row is curren
2c00: 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a  tly available...
2c10: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2c20: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
2c30: 76 6f 69 64 20 56 65 72 69 66 79 46 6f 72 47 65  void VerifyForGe
2c40: 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t()..    {..    
2c50: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
2c60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2c70: 6b 56 61 6c 69 64 52 6f 77 28 29 3b 0d 0a 20 20  kValidRow();..  
2c80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2c90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2ca0: 2f 20 53 51 4c 69 74 65 20 69 73 20 69 6e 68 65  / SQLite is inhe
2cb0: 72 65 6e 74 6c 79 20 75 6e 2d 74 79 70 65 64 2e  rently un-typed.
2cc0: 20 20 41 6c 6c 20 64 61 74 61 74 79 70 65 73 20    All datatypes 
2cd0: 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20 6e 61  in SQLite are na
2ce0: 74 69 76 65 6c 79 20 73 74 72 69 6e 67 73 2e 20  tively strings. 
2cf0: 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   The definition 
2d00: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  of the columns o
2d10: 66 20 61 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  f a table..    /
2d20: 2f 2f 20 61 6e 64 20 74 68 65 20 61 66 66 69 6e  // and the affin
2d30: 69 74 79 20 6f 66 20 72 65 74 75 72 6e 65 64 20  ity of returned 
2d40: 74 79 70 65 73 20 61 72 65 20 61 6c 6c 20 77 65  types are all we
2d50: 20 68 61 76 65 20 74 6f 20 67 6f 20 6f 6e 20 74   have to go on t
2d60: 6f 20 74 79 70 65 2d 72 65 73 74 72 69 63 74 20  o type-restrict 
2d70: 64 61 74 61 20 69 6e 20 74 68 65 20 72 65 61 64  data in the read
2d80: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 0d 0a 20 20  er...    ///..  
2d90: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
2da0: 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ion attempts to 
2db0: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
2dc0: 74 79 70 65 20 6f 66 20 64 61 74 61 20 62 65 69  type of data bei
2dd0: 6e 67 20 72 65 71 75 65 73 74 65 64 20 6f 66 20  ng requested of 
2de0: 61 20 63 6f 6c 75 6d 6e 20 6d 61 74 63 68 65 73  a column matches
2df0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
2e00: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 6e   the column.  In
2e10: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63 61  ..    /// the ca
2e20: 73 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  se of columns th
2e30: 61 74 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  at are not backe
2e40: 64 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 64  d into a table d
2e50: 65 66 69 6e 69 74 69 6f 6e 2c 20 77 65 20 61 74  efinition, we at
2e60: 74 65 6d 70 74 20 74 6f 20 6d 61 74 63 68 20 75  tempt to match u
2e70: 70 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  p the affinity o
2e80: 66 20 61 20 63 6f 6c 75 6d 6e 20 28 69 6e 74 2c  f a column (int,
2e90: 20 64 6f 75 62 6c 65 2c 20 73 74 72 69 6e 67 20   double, string 
2ea0: 6f 72 20 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f  or blob)..    //
2eb0: 2f 20 74 6f 20 61 20 73 65 74 20 6f 66 20 6b 6e  / to a set of kn
2ec0: 6f 77 6e 20 74 79 70 65 73 20 74 68 61 74 20 63  own types that c
2ed0: 6c 6f 73 65 6c 79 20 6d 61 74 63 68 20 74 68 61  losely match tha
2ee0: 74 20 61 66 66 69 6e 69 74 79 2e 20 20 49 74 27  t affinity.  It'
2ef0: 73 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 73  s not an exact s
2f00: 63 69 65 6e 63 65 2c 20 62 75 74 20 69 74 73 20  cience, but its 
2f10: 74 68 65 20 62 65 73 74 20 77 65 20 63 61 6e 20  the best we can 
2f20: 64 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  do...    /// </s
2f30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2f40: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2f50: 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f  /// This functio
2f60: 6e 20 74 68 72 6f 77 73 20 61 6e 20 49 6e 76 61  n throws an Inva
2f70: 6c 69 64 54 79 70 65 43 61 73 74 28 29 20 65 78  lidTypeCast() ex
2f80: 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 72  ception if the r
2f90: 65 71 75 65 73 74 65 64 20 74 79 70 65 20 64 6f  equested type do
2fa0: 65 73 6e 27 74 20 6d 61 74 63 68 20 74 68 65 20  esn't match the 
2fb0: 63 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e 69 74  column's definit
2fc0: 69 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74 79 2e  ion or affinity.
2fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
2fe0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  rns>..    /// <p
2ff0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
3000: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
3010: 6f 6c 75 6d 6e 20 74 6f 20 74 79 70 65 2d 63 68  olumn to type-ch
3020: 65 63 6b 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eck</param>..   
3030: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3040: 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
3050: 77 65 20 77 61 6e 74 20 74 6f 20 67 65 74 20 6f  we want to get o
3060: 75 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ut of the column
3070: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 72  </param>..    pr
3080: 69 76 61 74 65 20 54 79 70 65 41 66 66 69 6e 69  ivate TypeAffini
3090: 74 79 20 56 65 72 69 66 79 54 79 70 65 28 69 6e  ty VerifyType(in
30a0: 74 20 69 2c 20 44 62 54 79 70 65 20 74 79 70 29  t i, DbType typ)
30b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
30c0: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
30d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
30e0: 6c 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 79 70  lags.NoVerifyTyp
30f0: 65 41 66 66 69 6e 69 74 79 29 20 3d 3d 20 53 51  eAffinity) == SQ
3100: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3110: 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 79 70 65  ags.NoVerifyType
3120: 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20  Affinity)..     
3130: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79         return Ty
3140: 70 65 41 66 66 69 6e 69 74 79 2e 4e 6f 6e 65 3b  peAffinity.None;
3150: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70 65  ....        Type
3160: 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e 69 74  Affinity affinit
3170: 79 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70  y = GetSQLiteTyp
3180: 65 28 5f 66 6c 61 67 73 2c 20 69 29 2e 41 66 66  e(_flags, i).Aff
3190: 69 6e 69 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  inity;....      
31a0: 20 20 73 77 69 74 63 68 20 28 61 66 66 69 6e 69    switch (affini
31b0: 74 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ty)..        {..
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
31d0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
31e0: 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  t64:..          
31f0: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
3200: 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29 20 72   DbType.Int64) r
3210: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3230: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3240: 70 65 2e 49 6e 74 33 32 29 20 72 65 74 75 72 6e  pe.Int32) return
3250: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3260: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3270: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e  typ == DbType.In
3280: 74 31 36 29 20 72 65 74 75 72 6e 20 61 66 66 69  t16) return affi
3290: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
32a0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
32b0: 3d 20 44 62 54 79 70 65 2e 42 79 74 65 29 20 72  = DbType.Byte) r
32c0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
32d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32e0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
32f0: 70 65 2e 53 42 79 74 65 29 20 72 65 74 75 72 6e  pe.SByte) return
3300: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3310: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3320: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 6f  typ == DbType.Bo
3330: 6f 6c 65 61 6e 29 20 72 65 74 75 72 6e 20 61 66  olean) return af
3340: 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20  finity;..       
3350: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
3360: 20 3d 3d 20 44 62 54 79 70 65 2e 44 61 74 65 54   == DbType.DateT
3370: 69 6d 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  ime) return affi
3380: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
3390: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
33a0: 3d 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29  = DbType.Double)
33b0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
33c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33d0: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
33e0: 54 79 70 65 2e 53 69 6e 67 6c 65 29 20 72 65 74  Type.Single) ret
33f0: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3410: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3420: 2e 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e  .Decimal) return
3430: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3440: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3450: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
3460: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
3470: 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
3480: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
3490: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 6f 75  yp == DbType.Dou
34a0: 62 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  ble) return affi
34b0: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
34c0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
34d0: 3d 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29  = DbType.Single)
34e0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
34f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3500: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
3510: 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72 65  Type.Decimal) re
3520: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a  turn affinity;..
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3540: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3550: 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74 75  e.DateTime) retu
3560: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20  rn affinity;..  
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
3580: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
3590: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
35a0: 69 74 79 2e 54 65 78 74 3a 0d 0a 20 20 20 20 20  ity.Text:..     
35b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
35c0: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 74 72  yp == DbType.Str
35d0: 69 6e 67 29 20 72 65 74 75 72 6e 20 61 66 66 69  ing) return affi
35e0: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
35f0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
3600: 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29 20 72  = DbType.Guid) r
3610: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3630: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3640: 70 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74  pe.DateTime) ret
3650: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3670: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3680: 2e 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e  .Decimal) return
3690: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
36a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
36b0: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
36c0: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
36d0: 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20  y.Blob:..       
36e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
36f0: 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29   == DbType.Guid)
3700: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
3710: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3720: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
3730: 54 79 70 65 2e 42 69 6e 61 72 79 29 20 72 65 74  Type.Binary) ret
3740: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3760: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3770: 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e 20  .String) return 
3780: 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  affinity;..     
3790: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
37a0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
37b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
37c0: 77 20 49 6e 76 61 6c 69 64 43 61 73 74 45 78 63  w InvalidCastExc
37d0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 7d  eption();..    }
37e0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
37f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
3800: 6e 76 6f 6b 65 73 20 74 68 65 20 64 61 74 61 20  nvokes the data 
3810: 72 65 61 64 65 72 20 76 61 6c 75 65 20 63 61 6c  reader value cal
3820: 6c 62 61 63 6b 20 63 6f 6e 66 69 67 75 72 65 64  lback configured
3830: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
3840: 65 0d 0a 20 20 20 20 2f 2f 2f 20 74 79 70 65 20  e..    /// type 
3850: 6e 61 6d 65 20 61 73 73 6f 63 69 61 74 65 64 20  name associated 
3860: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
3870: 65 64 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 6e  ed column.  If n
3880: 6f 20 64 61 74 61 20 72 65 61 64 65 72 0d 0a 20  o data reader.. 
3890: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 63 61 6c     /// value cal
38a0: 6c 62 61 63 6b 20 69 73 20 61 76 61 69 6c 61 62  lback is availab
38b0: 6c 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  le for the datab
38c0: 61 73 65 20 74 79 70 65 20 6e 61 6d 65 2c 20 64  ase type name, d
38d0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
38e0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
38f0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
3900: 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20  ame="index">..  
3910: 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78 20    /// The index 
3920: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65  of the column be
3930: 69 6e 67 20 72 65 61 64 2e 0d 0a 20 20 20 20 2f  ing read...    /
3940: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
3950: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3960: 3d 22 65 76 65 6e 74 41 72 67 73 22 3e 0d 0a 20  ="eventArgs">.. 
3970: 20 20 20 2f 2f 2f 20 54 68 65 20 65 78 74 72 61     /// The extra
3980: 20 65 76 65 6e 74 20 64 61 74 61 20 74 6f 20 70   event data to p
3990: 61 73 73 20 69 6e 74 6f 20 74 68 65 20 63 61 6c  ass into the cal
39a0: 6c 62 61 63 6b 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lback...    /// 
39b0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
39c0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
39d0: 6f 6d 70 6c 65 74 65 22 3e 0d 0a 20 20 20 20 2f  omplete">..    /
39e0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
39f0: 68 65 20 64 65 66 61 75 6c 74 20 68 61 6e 64 6c  he default handl
3a00: 69 6e 67 20 66 6f 72 20 74 68 65 20 64 61 74 61  ing for the data
3a10: 20 72 65 61 64 65 72 20 63 61 6c 6c 20 73 68 6f   reader call sho
3a20: 75 6c 64 20 62 65 0d 0a 20 20 20 20 2f 2f 2f 20  uld be..    /// 
3a30: 73 6b 69 70 70 65 64 2e 20 20 49 66 20 74 68 69  skipped.  If thi
3a40: 73 20 69 73 20 73 65 74 20 74 6f 20 6e 6f 6e 2d  s is set to non-
3a50: 7a 65 72 6f 20 61 6e 64 20 74 68 65 20 6e 65 63  zero and the nec
3a60: 65 73 73 61 72 79 20 72 65 74 75 72 6e 20 76 61  essary return va
3a70: 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 73 20  lue..    /// is 
3a80: 75 6e 61 76 61 69 6c 61 62 6c 65 20 6f 72 20 75  unavailable or u
3a90: 6e 73 75 69 74 61 62 6c 65 2c 20 61 6e 20 65 78  nsuitable, an ex
3aa0: 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ception will be 
3ab0: 74 68 72 6f 77 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  thrown...    ///
3ac0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70   </param>..    p
3ad0: 72 69 76 61 74 65 20 76 6f 69 64 20 49 6e 76 6f  rivate void Invo
3ae0: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
3af0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 69 6e  ack(..        in
3b00: 74 20 69 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20  t index,..      
3b10: 20 20 53 51 4c 69 74 65 52 65 61 64 45 76 65 6e    SQLiteReadEven
3b20: 74 41 72 67 73 20 65 76 65 6e 74 41 72 67 73 2c  tArgs eventArgs,
3b30: 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20 62 6f  ..        out bo
3b40: 6f 6c 20 63 6f 6d 70 6c 65 74 65 0d 0a 20 20 20  ol complete..   
3b50: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
3b60: 20 20 20 20 20 20 20 63 6f 6d 70 6c 65 74 65 20         complete 
3b70: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
3b80: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
3b90: 6f 6e 46 6c 61 67 73 20 6f 6c 64 46 6c 61 67 73  onFlags oldFlags
3ba0: 20 3d 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20   = _flags;..    
3bb0: 20 20 20 20 5f 66 6c 61 67 73 20 26 3d 20 7e 53      _flags &= ~S
3bc0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
3bd0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
3be0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
3bf0: 61 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  acks;....       
3c00: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
3c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
3c20: 69 6e 67 20 74 79 70 65 4e 61 6d 65 20 3d 20 47  ing typeName = G
3c30: 65 74 44 61 74 61 54 79 70 65 4e 61 6d 65 28 69  etDataTypeName(i
3c40: 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
3c50: 20 20 20 20 20 20 69 66 20 28 74 79 70 65 4e 61        if (typeNa
3c60: 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
3c80: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
3c90: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
3ca0: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
3cb0: 3d 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  = GetConnection(
3cc0: 74 68 69 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  this);....      
3cd0: 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63        if (connec
3ce0: 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3d00: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
3d10: 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65        SQLiteType
3d20: 43 61 6c 6c 62 61 63 6b 73 20 63 61 6c 6c 62 61  Callbacks callba
3d30: 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  cks;....        
3d40: 20 20 20 20 69 66 20 28 21 63 6f 6e 6e 65 63 74      if (!connect
3d50: 69 6f 6e 2e 54 72 79 47 65 74 54 79 70 65 43 61  ion.TryGetTypeCa
3d60: 6c 6c 62 61 63 6b 73 28 74 79 70 65 4e 61 6d 65  llbacks(typeName
3d70: 2c 20 6f 75 74 20 63 61 6c 6c 62 61 63 6b 73 29  , out callbacks)
3d80: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
3d90: 20 20 20 20 20 28 63 61 6c 6c 62 61 63 6b 73 20       (callbacks 
3da0: 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
3db0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3dc0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3dd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3de0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3df0: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 43  SQLiteReadValueC
3e00: 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
3e10: 20 3d 20 63 61 6c 6c 62 61 63 6b 73 2e 52 65 61   = callbacks.Rea
3e20: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 3b 0d  dValueCallback;.
3e30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
3e40: 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
3e50: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3e60: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
3e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
3e80: 65 63 74 20 75 73 65 72 44 61 74 61 20 3d 20 63  ect userData = c
3e90: 61 6c 6c 62 61 63 6b 73 2e 52 65 61 64 56 61 6c  allbacks.ReadVal
3ea0: 75 65 55 73 65 72 44 61 74 61 3b 0d 0a 0d 0a 20  ueUserData;.... 
3eb0: 20 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62             callb
3ec0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
3ed0: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
3ee0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2c 20 74 68 69  tement._sql, thi
3ef0: 73 2c 20 6f 6c 64 46 6c 61 67 73 2c 20 65 76 65  s, oldFlags, eve
3f00: 6e 74 41 72 67 73 2c 20 74 79 70 65 4e 61 6d 65  ntArgs, typeName
3f10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3f20: 20 20 20 69 6e 64 65 78 2c 20 75 73 65 72 44 61     index, userDa
3f30: 74 61 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  ta, out complete
3f40: 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
3f50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3f60: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
3f70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3f80: 20 20 20 5f 66 6c 61 67 73 20 7c 3d 20 53 51 4c     _flags |= SQL
3f90: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
3fa0: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
3fb0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
3fc0: 6b 73 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ks;..        }..
3fd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
3fe0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3ff0: 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20  /// Attempts to 
4000: 71 75 65 72 79 20 74 68 65 20 69 6e 74 65 67 65  query the intege
4010: 72 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72  r identifier for
4020: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
4030: 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 2f 2f 2f  .  This..    ///
4040: 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 66   will not work f
4050: 6f 72 20 74 61 62 6c 65 73 20 74 68 61 74 20 77  or tables that w
4060: 65 72 65 20 63 72 65 61 74 65 64 20 57 49 54 48  ere created WITH
4070: 4f 55 54 20 52 4f 57 49 44 20 2d 4f 52 2d 20 69  OUT ROWID -OR- i
4080: 66 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 71  f the..    /// q
4090: 75 65 72 79 20 64 6f 65 73 20 6e 6f 74 20 69 6e  uery does not in
40a0: 63 6c 75 64 65 20 74 68 65 20 22 72 6f 77 69 64  clude the "rowid
40b0: 22 20 63 6f 6c 75 6d 6e 20 6f 72 20 6f 6e 65 20  " column or one 
40c0: 6f 66 20 69 74 73 20 61 6c 69 61 73 65 73 20 2d  of its aliases -
40d0: 4f 52 2d 0d 0a 20 20 20 20 2f 2f 2f 20 69 66 20  OR-..    /// if 
40e0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
40f0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 22  QLiteDataReader"
4100: 20 2f 3e 20 77 61 73 20 6e 6f 74 20 63 72 65 61   /> was not crea
4110: 74 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20  ted with the..  
4120: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
4130: 22 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72  "CommandBehavior
4140: 2e 4b 65 79 49 6e 66 6f 22 2f 3e 20 66 6c 61 67  .KeyInfo"/> flag
4150: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
4160: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
4170: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 0d  param name="i">.
4180: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64  .    /// The ind
4190: 65 78 20 6f 66 20 74 68 65 20 42 4c 4f 42 20 63  ex of the BLOB c
41a0: 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  olumn...    /// 
41b0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
41c0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
41d0: 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72   /// The integer
41e0: 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20   identifier for 
41f0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
4200: 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20  -OR- null if it 
4210: 63 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 2f  could not..    /
4220: 2f 2f 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64  // be determined
4230: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
4240: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
4250: 6e 61 6c 20 6c 6f 6e 67 3f 20 47 65 74 52 6f 77  nal long? GetRow
4260: 49 64 28 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  Id(..        int
4270: 20 69 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20   i..        ).. 
4280: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
4290: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
42a0: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
42b0: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
42c0: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
42d0: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
42e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
42f0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
4300: 20 69 6e 74 20 69 52 6f 77 49 64 20 3d 20 5f 6b   int iRowId = _k
4310: 65 79 49 6e 66 6f 2e 47 65 74 52 6f 77 49 64 49  eyInfo.GetRowIdI
4320: 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20  ndex(..         
4330: 20 20 20 47 65 74 44 61 74 61 62 61 73 65 4e 61     GetDatabaseNa
4340: 6d 65 28 69 29 2c 20 47 65 74 54 61 62 6c 65 4e  me(i), GetTableN
4350: 61 6d 65 28 69 29 29 3b 0d 0a 0d 0a 20 20 20 20  ame(i));....    
4360: 20 20 20 20 69 66 20 28 69 52 6f 77 49 64 20 3d      if (iRowId =
4370: 3d 20 2d 31 29 0d 0a 20 20 20 20 20 20 20 20 20  = -1)..         
4380: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
4390: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
43a0: 6e 20 47 65 74 49 6e 74 36 34 28 69 52 6f 77 49  n GetInt64(iRowI
43b0: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
43c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
43d0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
43e0: 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73  es the column as
43f0: 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51   a <see cref="SQ
4400: 4c 69 74 65 42 6c 6f 62 22 20 2f 3e 20 6f 62 6a  LiteBlob" /> obj
4410: 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ect...    /// Th
4420: 69 73 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b  is will not work
4430: 20 66 6f 72 20 74 61 62 6c 65 73 20 74 68 61 74   for tables that
4440: 20 77 65 72 65 20 63 72 65 61 74 65 64 20 57 49   were created WI
4450: 54 48 4f 55 54 20 52 4f 57 49 44 0d 0a 20 20 20  THOUT ROWID..   
4460: 20 2f 2f 2f 20 2d 4f 52 2d 20 69 66 20 74 68 65   /// -OR- if the
4470: 20 71 75 65 72 79 20 64 6f 65 73 20 6e 6f 74 20   query does not 
4480: 69 6e 63 6c 75 64 65 20 74 68 65 20 22 72 6f 77  include the "row
4490: 69 64 22 20 63 6f 6c 75 6d 6e 20 6f 72 20 6f 6e  id" column or on
44a0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 69 74  e..    /// of it
44b0: 73 20 61 6c 69 61 73 65 73 20 2d 4f 52 2d 20 69  s aliases -OR- i
44c0: 66 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  f the <see cref=
44d0: 22 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65  "SQLiteDataReade
44e0: 72 22 20 2f 3e 20 77 61 73 0d 0a 20 20 20 20 2f  r" /> was..    /
44f0: 2f 2f 20 6e 6f 74 20 63 72 65 61 74 65 64 20 77  // not created w
4500: 69 74 68 20 74 68 65 20 3c 73 65 65 20 63 72 65  ith the <see cre
4510: 66 3d 22 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69  f="CommandBehavi
4520: 6f 72 2e 4b 65 79 49 6e 66 6f 22 20 2f 3e 0d 0a  or.KeyInfo" />..
4530: 20 20 20 20 2f 2f 2f 20 66 6c 61 67 2e 0d 0a 20      /// flag... 
4540: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
4550: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
4560: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
4570: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
4580: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
4590: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
45a0: 3d 22 72 65 61 64 4f 6e 6c 79 22 3e 0d 0a 20 20  ="readOnly">..  
45b0: 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74    /// Non-zero t
45c0: 6f 20 6f 70 65 6e 20 74 68 65 20 62 6c 6f 62 20  o open the blob 
45d0: 6f 62 6a 65 63 74 20 66 6f 72 20 72 65 61 64 2d  object for read-
45e0: 6f 6e 6c 79 20 61 63 63 65 73 73 2e 0d 0a 20 20  only access...  
45f0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
4600: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
4610: 3e 41 20 6e 65 77 20 3c 73 65 65 20 63 72 65 66  >A new <see cref
4620: 3d 22 53 51 4c 69 74 65 42 6c 6f 62 22 20 2f 3e  ="SQLiteBlob" />
4630: 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e   object.</return
4640: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 53  s>..    public S
4650: 51 4c 69 74 65 42 6c 6f 62 20 47 65 74 42 6c 6f  QLiteBlob GetBlo
4660: 62 28 69 6e 74 20 69 2c 20 62 6f 6f 6c 20 72 65  b(int i, bool re
4670: 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 7b 0d 0a  adOnly)..    {..
4680: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
4690: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
46a0: 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
46b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
46c0: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
46d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
46e0: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
46f0: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
4700: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
4710: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
4720: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
4730: 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20  eCallbacks)..   
4740: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4750: 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65      SQLiteDataRe
4760: 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20  aderValue value 
4770: 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61  = new SQLiteData
4780: 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a  ReaderValue();..
4790: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
47a0: 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20   complete;....  
47b0: 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65            Invoke
47c0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
47d0: 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52  k(i, new SQLiteR
47e0: 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67  eadValueEventArg
47f0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
4800: 20 20 20 20 22 47 65 74 42 6c 6f 62 22 2c 20 6e      "GetBlob", n
4810: 65 77 20 53 51 4c 69 74 65 52 65 61 64 42 6c 6f  ew SQLiteReadBlo
4820: 62 45 76 65 6e 74 41 72 67 73 28 72 65 61 64 4f  bEventArgs(readO
4830: 6e 6c 79 29 2c 20 76 61 6c 75 65 29 2c 0d 0a 20  nly), value),.. 
4840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
4850: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
4860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4870: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
4880: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4890: 72 6e 20 28 53 51 4c 69 74 65 42 6c 6f 62 29 76  rn (SQLiteBlob)v
48a0: 61 6c 75 65 2e 42 6c 6f 62 56 61 6c 75 65 3b 0d  alue.BlobValue;.
48b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
48c0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
48d0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
48e0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
48f0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
4900: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4910: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42 6c 6f   _keyInfo.GetBlo
4920: 62 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  b(i - PrivateVis
4930: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20  ibleFieldCount, 
4940: 72 65 61 64 4f 6e 6c 79 29 3b 0d 0a 0d 0a 20 20  readOnly);....  
4950: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4960: 69 74 65 42 6c 6f 62 2e 43 72 65 61 74 65 28 74  iteBlob.Create(t
4970: 68 69 73 2c 20 69 2c 20 72 65 61 64 4f 6e 6c 79  his, i, readOnly
4980: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
4990: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
49a0: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
49b0: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
49c0: 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0d  a boolean value.
49d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
49e0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
49f0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
4a00: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
4a10: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
4a20: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
4a30: 62 6f 6f 6c 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  bool</returns>..
4a40: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
4a50: 69 64 65 20 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c  ide bool GetBool
4a60: 65 61 6e 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ean(int i)..    
4a70: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
4a80: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
4a90: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
4aa0: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
4ab0: 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51  if ((_flags & SQ
4ac0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
4ad0: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
4ae0: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
4af0: 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  cks) == SQLiteCo
4b00: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
4b10: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
4b20: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a  alueCallbacks)..
4b30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4b40: 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74         SQLiteDat
4b50: 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c  aReaderValue val
4b60: 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44  ue = new SQLiteD
4b70: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29  ataReaderValue()
4b80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
4b90: 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d  ool complete;...
4ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76  .            Inv
4bb0: 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  okeReadValueCall
4bc0: 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69  back(i, new SQLi
4bd0: 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74  teReadValueEvent
4be0: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
4bf0: 20 20 20 20 20 20 20 22 47 65 74 42 6f 6f 6c 65         "GetBoole
4c00: 61 6e 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65  an", null, value
4c10: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
4c20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4c30: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
4c40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4c60: 66 20 28 76 61 6c 75 65 2e 42 6f 6f 6c 65 61 6e  f (value.Boolean
4c70: 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Value == null)..
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c90: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
4ca0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d  LiteException("m
4cb0: 69 73 73 69 6e 67 20 62 6f 6f 6c 65 61 6e 20 72  issing boolean r
4cc0: 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a  eturn value");..
4cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ce0: 20 20 72 65 74 75 72 6e 20 28 62 6f 6f 6c 29 76    return (bool)v
4cf0: 61 6c 75 65 2e 42 6f 6f 6c 65 61 6e 56 61 6c 75  alue.BooleanValu
4d00: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
4d10: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
4d20: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
4d30: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
4d40: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
4d50: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
4d60: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4d70: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42  rn _keyInfo.GetB
4d80: 6f 6f 6c 65 61 6e 28 69 20 2d 20 50 72 69 76 61  oolean(i - Priva
4d90: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
4da0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
4db0: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
4dc0: 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 3b 0d  bType.Boolean);.
4dd0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4de0: 43 6f 6e 76 65 72 74 2e 54 6f 42 6f 6f 6c 65 61  Convert.ToBoolea
4df0: 6e 28 47 65 74 56 61 6c 75 65 28 69 29 2c 20 43  n(GetValue(i), C
4e00: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
4e10: 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20  ntCulture);..   
4e20: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
4e30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4e40: 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63   Retrieves the c
4e50: 6f 6c 75 6d 6e 20 61 73 20 61 20 73 69 6e 67 6c  olumn as a singl
4e60: 65 20 62 79 74 65 20 76 61 6c 75 65 0d 0a 20 20  e byte value..  
4e70: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
4e80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
4e90: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
4ea0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
4eb0: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
4ec0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62 79 74  /// <returns>byt
4ed0: 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  e</returns>..   
4ee0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
4ef0: 20 62 79 74 65 20 47 65 74 42 79 74 65 28 69 6e   byte GetByte(in
4f00: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
4f10: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
4f20: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
4f30: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
4f40: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
4f50: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
4f60: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
4f70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
4f80: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
4f90: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
4fa0: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
4fb0: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
4fc0: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
4fd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4fe0: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
4ff0: 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e  rValue value = n
5000: 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  ew SQLiteDataRea
5010: 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20  derValue();..   
5020: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f           bool co
5030: 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20  mplete;....     
5040: 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61         InvokeRea
5050: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69  dValueCallback(i
5060: 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  , new SQLiteRead
5070: 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d  ValueEventArgs(.
5080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5090: 20 22 47 65 74 42 79 74 65 22 2c 20 6e 75 6c 6c   "GetByte", null
50a0: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
50b0: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
50c0: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
50d0: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
50e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
50f0: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
5100: 42 79 74 65 56 61 6c 75 65 20 3d 3d 20 6e 75 6c  ByteValue == nul
5110: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
5120: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
5130: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
5140: 6e 28 22 6d 69 73 73 69 6e 67 20 62 79 74 65 20  n("missing byte 
5150: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
5160: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5170: 20 20 20 72 65 74 75 72 6e 20 28 62 79 74 65 29     return (byte)
5180: 76 61 6c 75 65 2e 42 79 74 65 56 61 6c 75 65 3b  value.ByteValue;
5190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
51a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
51b0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
51c0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
51d0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
51e0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
51f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5200: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42 79 74   _keyInfo.GetByt
5210: 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  e(i - PrivateVis
5220: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
5230: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  ....        Veri
5240: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
5250: 2e 42 79 74 65 29 3b 0d 0a 20 20 20 20 20 20 20  .Byte);..       
5260: 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
5270: 54 6f 42 79 74 65 28 5f 61 63 74 69 76 65 53 74  ToByte(_activeSt
5280: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
5290: 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74 61  Int32(_activeSta
52a0: 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20  tement, i));..  
52b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
52c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
52d0: 2f 20 52 65 74 72 69 65 76 65 73 20 61 20 63 6f  / Retrieves a co
52e0: 6c 75 6d 6e 20 61 73 20 61 6e 20 61 72 72 61 79  lumn as an array
52f0: 20 6f 66 20 62 79 74 65 73 20 28 62 6c 6f 62 29   of bytes (blob)
5300: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
5310: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
5320: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
5330: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
5340: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
5350: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5360: 61 6d 65 3d 22 66 69 65 6c 64 4f 66 66 73 65 74  ame="fieldOffset
5370: 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  ">The zero-based
5380: 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20   index of where 
5390: 74 6f 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67  to begin reading
53a0: 20 74 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d   the data</param
53b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
53c0: 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 22 3e  m name="buffer">
53d0: 54 68 65 20 62 75 66 66 65 72 20 74 6f 20 77 72  The buffer to wr
53e0: 69 74 65 20 74 68 65 20 62 79 74 65 73 20 69 6e  ite the bytes in
53f0: 74 6f 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  to</param>..    
5400: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5410: 22 62 75 66 66 65 72 6f 66 66 73 65 74 22 3e 54  "bufferoffset">T
5420: 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e  he zero-based in
5430: 64 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20  dex of where to 
5440: 62 65 67 69 6e 20 77 72 69 74 69 6e 67 20 69 6e  begin writing in
5450: 74 6f 20 74 68 65 20 61 72 72 61 79 3c 2f 70 61  to the array</pa
5460: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
5470: 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67 74  aram name="lengt
5480: 68 22 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  h">The number of
5490: 20 62 79 74 65 73 20 74 6f 20 72 65 74 72 69 65   bytes to retrie
54a0: 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  ve</param>..    
54b0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
54c0: 20 61 63 74 75 61 6c 20 6e 75 6d 62 65 72 20 6f   actual number o
54d0: 66 20 62 79 74 65 73 20 77 72 69 74 74 65 6e 20  f bytes written 
54e0: 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c 2f  into the array</
54f0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
5500: 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20  / <remarks>..   
5510: 20 2f 2f 2f 20 54 6f 20 64 65 74 65 72 6d 69 6e   /// To determin
5520: 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
5530: 62 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6c  bytes in the col
5540: 75 6d 6e 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c  umn, pass a null
5550: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62   value for the b
5560: 75 66 66 65 72 2e 20 20 54 68 65 20 74 6f 74 61  uffer.  The tota
5570: 6c 20 6c 65 6e 67 74 68 20 77 69 6c 6c 20 62 65  l length will be
5580: 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20   returned...    
5590: 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a  /// </remarks>..
55a0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
55b0: 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65  ide long GetByte
55c0: 73 28 69 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69  s(int i, long fi
55d0: 65 6c 64 4f 66 66 73 65 74 2c 20 62 79 74 65 5b  eldOffset, byte[
55e0: 5d 20 62 75 66 66 65 72 2c 20 69 6e 74 20 62 75  ] buffer, int bu
55f0: 66 66 65 72 6f 66 66 73 65 74 2c 20 69 6e 74 20  fferoffset, int 
5600: 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  length)..    {..
5610: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
5620: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
5630: 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
5640: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
5650: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
5660: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5670: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
5680: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
5690: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
56a0: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
56b0: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
56c0: 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20  eCallbacks)..   
56d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
56e0: 20 20 20 20 53 51 4c 69 74 65 52 65 61 64 41 72      SQLiteReadAr
56f0: 72 61 79 45 76 65 6e 74 41 72 67 73 20 65 76 65  rayEventArgs eve
5700: 6e 74 41 72 67 73 20 3d 20 6e 65 77 20 53 51 4c  ntArgs = new SQL
5710: 69 74 65 52 65 61 64 41 72 72 61 79 45 76 65 6e  iteReadArrayEven
5720: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
5730: 20 20 20 20 20 20 20 20 66 69 65 6c 64 4f 66 66          fieldOff
5740: 73 65 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66  set, buffer, buf
5750: 66 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74  feroffset, lengt
5760: 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  h);....         
5770: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
5780: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
5790: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
57a0: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
57b0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
57c0: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
57d0: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
57e0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
57f0: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
5800: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
5810: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5820: 20 20 20 22 47 65 74 42 79 74 65 73 22 2c 20 65     "GetBytes", e
5830: 76 65 6e 74 41 72 67 73 2c 20 76 61 6c 75 65 29  ventArgs, value)
5840: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
5850: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5860: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
5870: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79                by
5890: 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 76 61 6c  te[] bytes = val
58a0: 75 65 2e 42 79 74 65 73 56 61 6c 75 65 3b 0d 0a  ue.BytesValue;..
58b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
58c0: 20 20 69 66 20 28 62 79 74 65 73 20 21 3d 20 6e    if (bytes != n
58d0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
58e0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c        {..#if !PL
58f0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
5900: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
5910: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 72 72               Arr
5920: 61 79 2e 43 6f 70 79 28 62 79 74 65 73 2c 20 2f  ay.Copy(bytes, /
5930: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
5940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5950: 20 20 20 20 65 76 65 6e 74 41 72 67 73 2e 44 61      eventArgs.Da
5960: 74 61 4f 66 66 73 65 74 2c 20 65 76 65 6e 74 41  taOffset, eventA
5970: 72 67 73 2e 42 79 74 65 42 75 66 66 65 72 2c 0d  rgs.ByteBuffer,.
5980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5990: 20 20 20 20 20 20 20 20 20 65 76 65 6e 74 41 72           eventAr
59a0: 67 73 2e 42 75 66 66 65 72 4f 66 66 73 65 74 2c  gs.BufferOffset,
59b0: 20 65 76 65 6e 74 41 72 67 73 2e 4c 65 6e 67 74   eventArgs.Lengt
59c0: 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  h);..#else..    
59d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59e0: 41 72 72 61 79 2e 43 6f 70 79 28 62 79 74 65 73  Array.Copy(bytes
59f0: 2c 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  , /* throw */.. 
5a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a10: 20 20 20 20 20 20 20 28 69 6e 74 29 65 76 65 6e         (int)even
5a20: 74 41 72 67 73 2e 44 61 74 61 4f 66 66 73 65 74  tArgs.DataOffset
5a30: 2c 20 65 76 65 6e 74 41 72 67 73 2e 42 79 74 65  , eventArgs.Byte
5a40: 42 75 66 66 65 72 2c 0d 0a 20 20 20 20 20 20 20  Buffer,..       
5a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a60: 20 65 76 65 6e 74 41 72 67 73 2e 42 75 66 66 65   eventArgs.Buffe
5a70: 72 4f 66 66 73 65 74 2c 20 65 76 65 6e 74 41 72  rOffset, eventAr
5a80: 67 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6e  gs.Length);..#en
5a90: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  dif....         
5aa0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5ab0: 6e 20 65 76 65 6e 74 41 72 67 73 2e 4c 65 6e 67  n eventArgs.Leng
5ac0: 74 68 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  th;..           
5ad0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5ae0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
5af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
5b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5b10: 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d       return -1;.
5b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5b30: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5b40: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
5b50: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
5b60: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
5b70: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
5b80: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
5b90: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5ba0: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42  rn _keyInfo.GetB
5bb0: 79 74 65 73 28 69 20 2d 20 50 72 69 76 61 74 65  ytes(i - Private
5bc0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
5bd0: 74 2c 20 66 69 65 6c 64 4f 66 66 73 65 74 2c 20  t, fieldOffset, 
5be0: 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66  buffer, bufferof
5bf0: 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  fset, length);..
5c00: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
5c10: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42  Type(i, DbType.B
5c20: 69 6e 61 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  inary);..       
5c30: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
5c40: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
5c50: 74 42 79 74 65 73 28 5f 61 63 74 69 76 65 53 74  tBytes(_activeSt
5c60: 61 74 65 6d 65 6e 74 2c 20 69 2c 20 28 69 6e 74  atement, i, (int
5c70: 29 66 69 65 6c 64 4f 66 66 73 65 74 2c 20 62 75  )fieldOffset, bu
5c80: 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73  ffer, bufferoffs
5c90: 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 20 20  et, length);..  
5ca0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
5cb0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
5cc0: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f  / Returns the co
5cd0: 6c 75 6d 6e 20 61 73 20 61 20 73 69 6e 67 6c 65  lumn as a single
5ce0: 20 63 68 61 72 61 63 74 65 72 0d 0a 20 20 20 20   character..    
5cf0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5d00: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5d10: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
5d20: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
5d30: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
5d40: 2f 20 3c 72 65 74 75 72 6e 73 3e 63 68 61 72 3c  / <returns>char<
5d50: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
5d60: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 63  ublic override c
5d70: 68 61 72 20 47 65 74 43 68 61 72 28 69 6e 74 20  har GetChar(int 
5d80: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
5d90: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
5da0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
5db0: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
5dc0: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
5dd0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
5de0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
5df0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
5e00: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
5e10: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5e20: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
5e30: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
5e40: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
5e50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
5e60: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
5e70: 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77  alue value = new
5e80: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
5e90: 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20  rValue();..     
5ea0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70         bool comp
5eb0: 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lete;....       
5ec0: 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56       InvokeReadV
5ed0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20  alueCallback(i, 
5ee0: 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61  new SQLiteReadVa
5ef0: 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  lueEventArgs(.. 
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
5f10: 47 65 74 43 68 61 72 22 2c 20 6e 75 6c 6c 2c 20  GetChar", null, 
5f20: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
5f30: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
5f40: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
5f50: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
5f60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5f70: 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 43 68      if (value.Ch
5f80: 61 72 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29  arValue == null)
5f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5fa0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
5fb0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
5fc0: 22 6d 69 73 73 69 6e 67 20 63 68 61 72 61 63 74  "missing charact
5fd0: 65 72 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22  er return value"
5fe0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5ff0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 63 68        return (ch
6000: 61 72 29 76 61 6c 75 65 2e 43 68 61 72 56 61 6c  ar)value.CharVal
6010: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
6020: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
6030: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
6040: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
6050: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
6060: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
6070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
6080: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
6090: 43 68 61 72 28 69 20 2d 20 50 72 69 76 61 74 65  Char(i - Private
60a0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
60b0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56  t);....        V
60c0: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
60d0: 79 70 65 2e 53 42 79 74 65 29 3b 0d 0a 20 20 20  ype.SByte);..   
60e0: 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
60f0: 65 72 74 2e 54 6f 43 68 61 72 28 5f 61 63 74 69  ert.ToChar(_acti
6100: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
6110: 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74 69 76  .GetInt32(_activ
6120: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b  eStatement, i));
6130: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
6140: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6150: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
6160: 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 61  a column as an a
6170: 72 72 61 79 20 6f 66 20 63 68 61 72 73 20 28 62  rray of chars (b
6180: 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  lob)..    /// </
6190: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
61a0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
61b0: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
61c0: 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
61d0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
61e0: 61 6d 20 6e 61 6d 65 3d 22 66 69 65 6c 64 6f 66  am name="fieldof
61f0: 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62  fset">The zero-b
6200: 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68  ased index of wh
6210: 65 72 65 20 74 6f 20 62 65 67 69 6e 20 72 65 61  ere to begin rea
6220: 64 69 6e 67 20 74 68 65 20 64 61 74 61 3c 2f 70  ding the data</p
6230: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
6240: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66  param name="buff
6250: 65 72 22 3e 54 68 65 20 62 75 66 66 65 72 20 74  er">The buffer t
6260: 6f 20 77 72 69 74 65 20 74 68 65 20 63 68 61 72  o write the char
6270: 61 63 74 65 72 73 20 69 6e 74 6f 3c 2f 70 61 72  acters into</par
6280: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
6290: 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72  ram name="buffer
62a0: 6f 66 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f  offset">The zero
62b0: 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20  -based index of 
62c0: 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e 20 77  where to begin w
62d0: 72 69 74 69 6e 67 20 69 6e 74 6f 20 74 68 65 20  riting into the 
62e0: 61 72 72 61 79 3c 2f 70 61 72 61 6d 3e 0d 0a 20  array</param>.. 
62f0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
6300: 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 54 68 65 20  me="length">The 
6310: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
6320: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
6330: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
6340: 74 75 72 6e 73 3e 54 68 65 20 61 63 74 75 61 6c  turns>The actual
6350: 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   number of chara
6360: 63 74 65 72 73 20 77 72 69 74 74 65 6e 20 69 6e  cters written in
6370: 74 6f 20 74 68 65 20 61 72 72 61 79 3c 2f 72 65  to the array</re
6380: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
6390: 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f  <remarks>..    /
63a0: 2f 2f 20 54 6f 20 64 65 74 65 72 6d 69 6e 65 20  // To determine 
63b0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68  the number of ch
63c0: 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20  aracters in the 
63d0: 63 6f 6c 75 6d 6e 2c 20 70 61 73 73 20 61 20 6e  column, pass a n
63e0: 75 6c 6c 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ull value for th
63f0: 65 20 62 75 66 66 65 72 2e 20 20 54 68 65 20 74  e buffer.  The t
6400: 6f 74 61 6c 20 6c 65 6e 67 74 68 20 77 69 6c 6c  otal length will
6410: 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20   be returned... 
6420: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
6430: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
6440: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43  erride long GetC
6450: 68 61 72 73 28 69 6e 74 20 69 2c 20 6c 6f 6e 67  hars(int i, long
6460: 20 66 69 65 6c 64 6f 66 66 73 65 74 2c 20 63 68   fieldoffset, ch
6470: 61 72 5b 5d 20 62 75 66 66 65 72 2c 20 69 6e 74  ar[] buffer, int
6480: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 69   bufferoffset, i
6490: 6e 74 20 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20  nt length)..    
64a0: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
64b0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
64c0: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
64d0: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
64e0: 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51  if ((_flags & SQ
64f0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6500: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
6510: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
6520: 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  cks) == SQLiteCo
6530: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
6540: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
6550: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a  alueCallbacks)..
6560: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6570: 20 20 20 20 20 20 20 53 51 4c 69 74 65 52 65 61         SQLiteRea
6580: 64 41 72 72 61 79 45 76 65 6e 74 41 72 67 73 20  dArrayEventArgs 
6590: 65 76 65 6e 74 41 72 67 73 20 3d 20 6e 65 77 20  eventArgs = new 
65a0: 53 51 4c 69 74 65 52 65 61 64 41 72 72 61 79 45  SQLiteReadArrayE
65b0: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
65c0: 20 20 20 20 20 20 20 20 20 20 20 66 69 65 6c 64             field
65d0: 6f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c 20  offset, buffer, 
65e0: 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65  bufferoffset, le
65f0: 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ngth);....      
6600: 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61        SQLiteData
6610: 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75  ReaderValue valu
6620: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61  e = new SQLiteDa
6630: 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b  taReaderValue();
6640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
6650: 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a  ol complete;....
6660: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f              Invo
6670: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
6680: 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74  ack(i, new SQLit
6690: 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41  eReadValueEventA
66a0: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
66b0: 20 20 20 20 20 20 22 47 65 74 43 68 61 72 73 22        "GetChars"
66c0: 2c 20 65 76 65 6e 74 41 72 67 73 2c 20 76 61 6c  , eventArgs, val
66d0: 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74  ue), out complet
66e0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
66f0: 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29     if (complete)
6700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6720: 20 63 68 61 72 5b 5d 20 63 68 61 72 73 20 3d 20   char[] chars = 
6730: 76 61 6c 75 65 2e 43 68 61 72 73 56 61 6c 75 65  value.CharsValue
6740: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6750: 20 20 20 20 20 69 66 20 28 63 68 61 72 73 20 21       if (chars !
6760: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6770: 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20           {..#if 
6780: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
6790: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
67a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67b0: 41 72 72 61 79 2e 43 6f 70 79 28 63 68 61 72 73  Array.Copy(chars
67c0: 2c 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  , /* throw */.. 
67d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67e0: 20 20 20 20 20 20 20 65 76 65 6e 74 41 72 67 73         eventArgs
67f0: 2e 44 61 74 61 4f 66 66 73 65 74 2c 20 65 76 65  .DataOffset, eve
6800: 6e 74 41 72 67 73 2e 43 68 61 72 42 75 66 66 65  ntArgs.CharBuffe
6810: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
6820: 20 20 20 20 20 20 20 20 20 20 20 20 65 76 65 6e              even
6830: 74 41 72 67 73 2e 42 75 66 66 65 72 4f 66 66 73  tArgs.BufferOffs
6840: 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 4c 65  et, eventArgs.Le
6850: 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  ngth);..#else.. 
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6870: 20 20 20 41 72 72 61 79 2e 43 6f 70 79 28 63 68     Array.Copy(ch
6880: 61 72 73 2c 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ars, /* throw */
6890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
68a0: 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 65            (int)e
68b0: 76 65 6e 74 41 72 67 73 2e 44 61 74 61 4f 66 66  ventArgs.DataOff
68c0: 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 43  set, eventArgs.C
68d0: 68 61 72 42 75 66 66 65 72 2c 0d 0a 20 20 20 20  harBuffer,..    
68e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68f0: 20 20 20 20 65 76 65 6e 74 41 72 67 73 2e 42 75      eventArgs.Bu
6900: 66 66 65 72 4f 66 66 73 65 74 2c 20 65 76 65 6e  fferOffset, even
6910: 74 41 72 67 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  tArgs.Length);..
6920: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6940: 74 75 72 6e 20 65 76 65 6e 74 41 72 67 73 2e 4c  turn eventArgs.L
6950: 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20 20 20 20  ength;..        
6960: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6970: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
6980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6990: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
69a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d          return -
69b0: 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
69c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
69d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
69e0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
69f0: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
6a00: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
6a10: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
6a20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
6a30: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
6a40: 65 74 43 68 61 72 73 28 69 20 2d 20 50 72 69 76  etChars(i - Priv
6a50: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
6a60: 6f 75 6e 74 2c 20 66 69 65 6c 64 6f 66 66 73 65  ount, fieldoffse
6a70: 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65  t, buffer, buffe
6a80: 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29  roffset, length)
6a90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
6aa0: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
6ab0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6ac0: 2e 4e 6f 56 65 72 69 66 79 54 65 78 74 41 66 66  .NoVerifyTextAff
6ad0: 69 6e 69 74 79 29 20 21 3d 20 53 51 4c 69 74 65  inity) != SQLite
6ae0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6af0: 4e 6f 56 65 72 69 66 79 54 65 78 74 41 66 66 69  NoVerifyTextAffi
6b00: 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 20  nity)..         
6b10: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
6b20: 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 3b   DbType.String);
6b30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
6b40: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
6b50: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 43 68 61 72  ent._sql.GetChar
6b60: 73 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  s(_activeStateme
6b70: 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69 65 6c  nt, i, (int)fiel
6b80: 64 6f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c  doffset, buffer,
6b90: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c   bufferoffset, l
6ba0: 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ength);..    }..
6bb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
6bc0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
6bd0: 72 69 65 76 65 73 20 74 68 65 20 6e 61 6d 65 20  rieves the name 
6be0: 6f 66 20 74 68 65 20 62 61 63 6b 2d 65 6e 64 20  of the back-end 
6bf0: 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20  datatype of the 
6c00: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20  column..    /// 
6c10: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
6c20: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6c30: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
6c40: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
6c50: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
6c60: 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72  eturns>string</r
6c70: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
6c80: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
6c90: 69 6e 67 20 47 65 74 44 61 74 61 54 79 70 65 4e  ing GetDataTypeN
6ca0: 61 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ame(int i)..    
6cb0: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
6cc0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
6cd0: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
6ce0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
6cf0: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
6d00: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
6d10: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6d20: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 61  n _keyInfo.GetDa
6d30: 74 61 54 79 70 65 4e 61 6d 65 28 69 20 2d 20 50  taTypeName(i - P
6d40: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
6d50: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
6d60: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
6d70: 79 20 61 66 66 69 6e 20 3d 20 54 79 70 65 41 66  y affin = TypeAf
6d80: 66 69 6e 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c  finity.Uninitial
6d90: 69 7a 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 72  ized;..        r
6da0: 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61  eturn _activeSta
6db0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75  tement._sql.Colu
6dc0: 6d 6e 54 79 70 65 28 5f 61 63 74 69 76 65 53 74  mnType(_activeSt
6dd0: 61 74 65 6d 65 6e 74 2c 20 69 2c 20 72 65 66 20  atement, i, ref 
6de0: 61 66 66 69 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a  affin);..    }..
6df0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
6e00: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
6e10: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 75 6d 6e  rieve the column
6e20: 20 61 73 20 61 20 64 61 74 65 2f 74 69 6d 65 20   as a date/time 
6e30: 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  value..    /// <
6e40: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
6e50: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
6e60: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
6e70: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
6e80: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
6e90: 74 75 72 6e 73 3e 44 61 74 65 54 69 6d 65 3c 2f  turns>DateTime</
6ea0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
6eb0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 44 61  blic override Da
6ec0: 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54 69  teTime GetDateTi
6ed0: 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  me(int i)..    {
6ee0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
6ef0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
6f00: 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74      VerifyForGet
6f10: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
6f20: 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  f ((_flags & SQL
6f30: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6f40: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
6f50: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
6f60: 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  ks) == SQLiteCon
6f70: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
6f80: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
6f90: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20  lueCallbacks).. 
6fa0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6fb0: 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61        SQLiteData
6fc0: 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75  ReaderValue valu
6fd0: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61  e = new SQLiteDa
6fe0: 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b  taReaderValue();
6ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
7000: 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a  ol complete;....
7010: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f              Invo
7020: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
7030: 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74  ack(i, new SQLit
7040: 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41  eReadValueEventA
7050: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
7060: 20 20 20 20 20 20 22 47 65 74 44 61 74 65 54 69        "GetDateTi
7070: 6d 65 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65  me", null, value
7080: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
7090: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
70a0: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
70b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
70c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
70d0: 66 20 28 76 61 6c 75 65 2e 44 61 74 65 54 69 6d  f (value.DateTim
70e0: 65 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  eValue == null).
70f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7100: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
7110: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
7120: 6d 69 73 73 69 6e 67 20 64 61 74 65 2f 74 69 6d  missing date/tim
7130: 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29  e return value")
7140: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
7150: 20 20 20 20 20 72 65 74 75 72 6e 20 28 44 61 74       return (Dat
7160: 65 54 69 6d 65 29 76 61 6c 75 65 2e 44 61 74 65  eTime)value.Date
7170: 54 69 6d 65 56 61 6c 75 65 3b 0d 0a 20 20 20 20  TimeValue;..    
7180: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7190: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
71a0: 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65  if (i >= Private
71b0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
71c0: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
71d0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
71e0: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
71f0: 6e 66 6f 2e 47 65 74 44 61 74 65 54 69 6d 65 28  nfo.GetDateTime(
7200: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
7210: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
7220: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
7230: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 44  Type(i, DbType.D
7240: 61 74 65 54 69 6d 65 29 3b 0d 0a 20 20 20 20 20  ateTime);..     
7250: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
7260: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
7270: 47 65 74 44 61 74 65 54 69 6d 65 28 5f 61 63 74  GetDateTime(_act
7280: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
7290: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
72a0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
72b0: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 20     /// Retrieve 
72c0: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
72d0: 64 65 63 69 6d 61 6c 20 76 61 6c 75 65 0d 0a 20  decimal value.. 
72e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
72f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
7300: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
7310: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
7320: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
7330: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 64 65   /// <returns>de
7340: 63 69 6d 61 6c 3c 2f 72 65 74 75 72 6e 73 3e 0d  cimal</returns>.
7350: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
7360: 72 69 64 65 20 64 65 63 69 6d 61 6c 20 47 65 74  ride decimal Get
7370: 44 65 63 69 6d 61 6c 28 69 6e 74 20 69 29 0d 0a  Decimal(int i)..
7380: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
7390: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
73a0: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46  .        VerifyF
73b0: 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  orGet();....    
73c0: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
73d0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
73e0: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
73f0: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
7400: 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69  llbacks) == SQLi
7410: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7420: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
7430: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
7440: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
7450: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
7460: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
7470: 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c   value = new SQL
7480: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
7490: 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ue();..         
74a0: 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65     bool complete
74b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
74c0: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
74d0: 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20  Callback(i, new 
74e0: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45  SQLiteReadValueE
74f0: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
7500: 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 44             "GetD
7510: 65 63 69 6d 61 6c 22 2c 20 6e 75 6c 6c 2c 20 76  ecimal", null, v
7520: 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c  alue), out compl
7530: 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ete);....       
7540: 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74       if (complet
7550: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
7560: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7570: 20 20 20 69 66 20 28 76 61 6c 75 65 2e 44 65 63     if (value.Dec
7580: 69 6d 61 6c 56 61 6c 75 65 20 3d 3d 20 6e 75 6c  imalValue == nul
7590: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
75a0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
75b0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
75c0: 6e 28 22 6d 69 73 73 69 6e 67 20 64 65 63 69 6d  n("missing decim
75d0: 61 6c 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22  al return value"
75e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
75f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 64 65        return (de
7600: 63 69 6d 61 6c 29 76 61 6c 75 65 2e 44 65 63 69  cimal)value.Deci
7610: 6d 61 6c 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  malValue;..     
7620: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7630: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
7640: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
7650: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
7660: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
7670: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7680: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
7690: 66 6f 2e 47 65 74 44 65 63 69 6d 61 6c 28 69 20  fo.GetDecimal(i 
76a0: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
76b0: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
76c0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79          VerifyTy
76d0: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 44 65 63  pe(i, DbType.Dec
76e0: 69 6d 61 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  imal);..        
76f0: 72 65 74 75 72 6e 20 44 65 63 69 6d 61 6c 2e 50  return Decimal.P
7700: 61 72 73 65 28 5f 61 63 74 69 76 65 53 74 61 74  arse(_activeStat
7710: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65  ement._sql.GetTe
7720: 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  xt(_activeStatem
7730: 65 6e 74 2c 20 69 29 2c 20 4e 75 6d 62 65 72 53  ent, i), NumberS
7740: 74 79 6c 65 73 2e 41 6c 6c 6f 77 44 65 63 69 6d  tyles.AllowDecim
7750: 61 6c 50 6f 69 6e 74 20 7c 20 4e 75 6d 62 65 72  alPoint | Number
7760: 53 74 79 6c 65 73 2e 41 6c 6c 6f 77 45 78 70 6f  Styles.AllowExpo
7770: 6e 65 6e 74 20 7c 20 4e 75 6d 62 65 72 53 74 79  nent | NumberSty
7780: 6c 65 73 2e 41 6c 6c 6f 77 4c 65 61 64 69 6e 67  les.AllowLeading
7790: 53 69 67 6e 2c 20 43 75 6c 74 75 72 65 49 6e 66  Sign, CultureInf
77a0: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
77b0: 72 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  re);..    }.... 
77c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
77d0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
77e0: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
77f0: 61 20 64 6f 75 62 6c 65 0d 0a 20 20 20 20 2f 2f  a double..    //
7800: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
7810: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
7820: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
7830: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
7840: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
7850: 3c 72 65 74 75 72 6e 73 3e 64 6f 75 62 6c 65 3c  <returns>double<
7860: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
7870: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64  ublic override d
7880: 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28  ouble GetDouble(
7890: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
78a0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
78b0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
78c0: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
78d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
78e0: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
78f0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7900: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
7910: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
7920: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
7930: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
7940: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
7950: 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20  Callbacks)..    
7960: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7970: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
7980: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
7990: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
79a0: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
79b0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
79c0: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
79d0: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
79e0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
79f0: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
7a00: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
7a10: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7a20: 20 20 20 22 47 65 74 44 6f 75 62 6c 65 22 2c 20     "GetDouble", 
7a30: 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75  null, value), ou
7a40: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a  t complete);....
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7a60: 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20  complete)..     
7a70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7a80: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
7a90: 6c 75 65 2e 44 6f 75 62 6c 65 56 61 6c 75 65 20  lue.DoubleValue 
7aa0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
7ac0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
7ad0: 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67  ception("missing
7ae0: 20 64 6f 75 62 6c 65 20 72 65 74 75 72 6e 20 76   double return v
7af0: 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  alue");....     
7b00: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7b10: 6e 20 28 64 6f 75 62 6c 65 29 76 61 6c 75 65 2e  n (double)value.
7b20: 44 6f 75 62 6c 65 56 61 6c 75 65 3b 0d 0a 20 20  DoubleValue;..  
7b30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7b40: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7b50: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
7b60: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
7b70: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
7b80: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7b90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
7ba0: 79 49 6e 66 6f 2e 47 65 74 44 6f 75 62 6c 65 28  yInfo.GetDouble(
7bb0: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
7bc0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
7bd0: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
7be0: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 44  Type(i, DbType.D
7bf0: 6f 75 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20  ouble);..       
7c00: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
7c10: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
7c20: 74 44 6f 75 62 6c 65 28 5f 61 63 74 69 76 65 53  tDouble(_activeS
7c30: 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20  tatement, i);.. 
7c40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
7c50: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
7c60: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 2e  // Returns the .
7c70: 4e 45 54 20 74 79 70 65 20 6f 66 20 61 20 67 69  NET type of a gi
7c80: 76 65 6e 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20  ven column..    
7c90: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
7ca0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
7cb0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
7cc0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
7cd0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
7ce0: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 79 70 65 3c  / <returns>Type<
7cf0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
7d00: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 54  ublic override T
7d10: 79 70 65 20 47 65 74 46 69 65 6c 64 54 79 70 65  ype GetFieldType
7d20: 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
7d30: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
7d40: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
7d50: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
7d60: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
7d70: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
7d80: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
7d90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
7da0: 6b 65 79 49 6e 66 6f 2e 47 65 74 46 69 65 6c 64  keyInfo.GetField
7db0: 54 79 70 65 28 69 20 2d 20 50 72 69 76 61 74 65  Type(i - Private
7dc0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
7dd0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  t);....        r
7de0: 65 74 75 72 6e 20 53 51 4c 69 74 65 43 6f 6e 76  eturn SQLiteConv
7df0: 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f  ert.SQLiteTypeTo
7e00: 54 79 70 65 28 47 65 74 53 51 4c 69 74 65 54 79  Type(GetSQLiteTy
7e10: 70 65 28 5f 66 6c 61 67 73 2c 20 69 29 29 3b 0d  pe(_flags, i));.
7e20: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
7e30: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
7e40: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 63   /// Returns a c
7e50: 6f 6c 75 6d 6e 20 61 73 20 61 20 66 6c 6f 61 74  olumn as a float
7e60: 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20   value..    /// 
7e70: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
7e80: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
7e90: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
7ea0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
7eb0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
7ec0: 65 74 75 72 6e 73 3e 66 6c 6f 61 74 3c 2f 72 65  eturns>float</re
7ed0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
7ee0: 69 63 20 6f 76 65 72 72 69 64 65 20 66 6c 6f 61  ic override floa
7ef0: 74 20 47 65 74 46 6c 6f 61 74 28 69 6e 74 20 69  t GetFloat(int i
7f00: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7f10: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
7f20: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
7f30: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
7f40: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
7f50: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
7f60: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
7f70: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
7f80: 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53  eCallbacks) == S
7f90: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7fa0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
7fb0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
7fc0: 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  acks)..        {
7fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
7fe0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
7ff0: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
8000: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
8010: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
8020: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
8030: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
8040: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
8050: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
8060: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
8070: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
8080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
8090: 65 74 46 6c 6f 61 74 22 2c 20 6e 75 6c 6c 2c 20  etFloat", null, 
80a0: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
80b0: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
80c0: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
80d0: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
80e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
80f0: 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 46 6c      if (value.Fl
8100: 6f 61 74 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  oatValue == null
8110: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8120: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
8130: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
8140: 28 22 6d 69 73 73 69 6e 67 20 66 6c 6f 61 74 20  ("missing float 
8150: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
8160: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8170: 20 20 20 72 65 74 75 72 6e 20 28 66 6c 6f 61 74     return (float
8180: 29 76 61 6c 75 65 2e 46 6c 6f 61 74 56 61 6c 75  )value.FloatValu
8190: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
81a0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
81b0: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
81c0: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
81d0: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
81e0: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
81f0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8200: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 46  rn _keyInfo.GetF
8210: 6c 6f 61 74 28 69 20 2d 20 50 72 69 76 61 74 65  loat(i - Private
8220: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
8230: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56  t);....        V
8240: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
8250: 79 70 65 2e 53 69 6e 67 6c 65 29 3b 0d 0a 20 20  ype.Single);..  
8260: 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e        return Con
8270: 76 65 72 74 2e 54 6f 53 69 6e 67 6c 65 28 5f 61  vert.ToSingle(_a
8280: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
8290: 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f 61  sql.GetDouble(_a
82a0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
82b0: 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  i));..    }.... 
82c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
82d0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
82e0: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
82f0: 61 20 47 75 69 64 0d 0a 20 20 20 20 2f 2f 2f 20  a Guid..    /// 
8300: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8310: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
8320: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
8330: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
8340: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
8350: 65 74 75 72 6e 73 3e 47 75 69 64 3c 2f 72 65 74  eturns>Guid</ret
8360: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
8370: 63 20 6f 76 65 72 72 69 64 65 20 47 75 69 64 20  c override Guid 
8380: 47 65 74 47 75 69 64 28 69 6e 74 20 69 29 0d 0a  GetGuid(int i)..
8390: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
83a0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
83b0: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46  .        VerifyF
83c0: 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  orGet();....    
83d0: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
83e0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
83f0: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
8400: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
8410: 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69  llbacks) == SQLi
8420: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8430: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
8440: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
8450: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
8460: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
8470: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
8480: 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c   value = new SQL
8490: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
84a0: 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ue();..         
84b0: 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65     bool complete
84c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
84d0: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
84e0: 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20  Callback(i, new 
84f0: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45  SQLiteReadValueE
8500: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
8510: 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 47             "GetG
8520: 75 69 64 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75  uid", null, valu
8530: 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  e), out complete
8540: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8550: 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d    if (complete).
8560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8580: 69 66 20 28 76 61 6c 75 65 2e 47 75 69 64 56 61  if (value.GuidVa
8590: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
85a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85b0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
85c0: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73  teException("mis
85d0: 73 69 6e 67 20 67 75 69 64 20 72 65 74 75 72 6e  sing guid return
85e0: 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20   value");....   
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
8600: 75 72 6e 20 28 47 75 69 64 29 76 61 6c 75 65 2e  urn (Guid)value.
8610: 47 75 69 64 56 61 6c 75 65 3b 0d 0a 20 20 20 20  GuidValue;..    
8620: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8630: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8640: 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65  if (i >= Private
8650: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
8660: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
8670: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
8680: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
8690: 6e 66 6f 2e 47 65 74 47 75 69 64 28 69 20 2d 20  nfo.GetGuid(i - 
86a0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
86b0: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
86c0: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
86d0: 74 79 20 61 66 66 69 6e 69 74 79 20 3d 20 56 65  ty affinity = Ve
86e0: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
86f0: 70 65 2e 47 75 69 64 29 3b 0d 0a 20 20 20 20 20  pe.Guid);..     
8700: 20 20 20 69 66 20 28 61 66 66 69 6e 69 74 79 20     if (affinity 
8710: 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  == TypeAffinity.
8720: 42 6c 6f 62 29 0d 0a 20 20 20 20 20 20 20 20 7b  Blob)..        {
8730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
8740: 74 65 5b 5d 20 62 75 66 66 65 72 20 3d 20 6e 65  te[] buffer = ne
8750: 77 20 62 79 74 65 5b 31 36 5d 3b 0d 0a 20 20 20  w byte[16];..   
8760: 20 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65           _active
8770: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
8780: 65 74 42 79 74 65 73 28 5f 61 63 74 69 76 65 53  etBytes(_activeS
8790: 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 30 2c 20  tatement, i, 0, 
87a0: 62 75 66 66 65 72 2c 20 30 2c 20 31 36 29 3b 0d  buffer, 0, 16);.
87b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
87c0: 75 72 6e 20 6e 65 77 20 47 75 69 64 28 62 75 66  urn new Guid(buf
87d0: 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  fer);..        }
87e0: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
87f0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8800: 72 6e 20 6e 65 77 20 47 75 69 64 28 5f 61 63 74  rn new Guid(_act
8810: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
8820: 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76  l.GetText(_activ
8830: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b  eStatement, i));
8840: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
8850: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
8860: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
8870: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73 68  e column as a sh
8880: 6f 72 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ort..    /// </s
8890: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
88a0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
88b0: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
88c0: 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d  e column.</param
88d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
88e0: 72 6e 73 3e 49 6e 74 31 36 3c 2f 72 65 74 75 72  rns>Int16</retur
88f0: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
8900: 6f 76 65 72 72 69 64 65 20 49 6e 74 31 36 20 47  override Int16 G
8910: 65 74 49 6e 74 31 36 28 69 6e 74 20 69 29 0d 0a  etInt16(int i)..
8920: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
8930: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
8940: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46  .        VerifyF
8950: 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  orGet();....    
8960: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
8970: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
8980: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
8990: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
89a0: 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69  llbacks) == SQLi
89b0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
89c0: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
89d0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
89e0: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
89f0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
8a00: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
8a10: 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c   value = new SQL
8a20: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
8a30: 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ue();..         
8a40: 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65     bool complete
8a50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8a60: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
8a70: 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20  Callback(i, new 
8a80: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45  SQLiteReadValueE
8a90: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
8aa0: 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 49             "GetI
8ab0: 6e 74 31 36 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c  nt16", null, val
8ac0: 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74  ue), out complet
8ad0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
8ae0: 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29     if (complete)
8af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8b10: 20 69 66 20 28 76 61 6c 75 65 2e 49 6e 74 31 36   if (value.Int16
8b20: 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Value == null)..
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b40: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
8b50: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d  LiteException("m
8b60: 69 73 73 69 6e 67 20 69 6e 74 31 36 20 72 65 74  issing int16 ret
8b70: 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a  urn value");....
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b90: 72 65 74 75 72 6e 20 28 49 6e 74 31 36 29 76 61  return (Int16)va
8ba0: 6c 75 65 2e 49 6e 74 31 36 56 61 6c 75 65 3b 0d  lue.Int16Value;.
8bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8bc0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8bd0: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
8be0: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
8bf0: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
8c00: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
8c10: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8c20: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49 6e 74 31  _keyInfo.GetInt1
8c30: 36 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  6(i - PrivateVis
8c40: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
8c50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  ....        Veri
8c60: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
8c70: 2e 49 6e 74 31 36 29 3b 0d 0a 20 20 20 20 20 20  .Int16);..      
8c80: 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
8c90: 2e 54 6f 49 6e 74 31 36 28 5f 61 63 74 69 76 65  .ToInt16(_active
8ca0: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
8cb0: 65 74 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53  etInt32(_activeS
8cc0: 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a  tatement, i));..
8cd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
8ce0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8cf0: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
8d00: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 69  e column as an i
8d10: 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  nt..    /// </su
8d20: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
8d30: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
8d40: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
8d50: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
8d60: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
8d70: 6e 73 3e 49 6e 74 33 32 3c 2f 72 65 74 75 72 6e  ns>Int32</return
8d80: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
8d90: 76 65 72 72 69 64 65 20 49 6e 74 33 32 20 47 65  verride Int32 Ge
8da0: 74 49 6e 74 33 32 28 69 6e 74 20 69 29 0d 0a 20  tInt32(int i).. 
8db0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
8dc0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
8dd0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
8de0: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
8df0: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
8e00: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8e10: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
8e20: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
8e30: 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74  lbacks) == SQLit
8e40: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
8e50: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
8e60: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
8e70: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8e80: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
8e90: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
8ea0: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
8eb0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
8ec0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
8ed0: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
8ee0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8ef0: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
8f00: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
8f10: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
8f20: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
8f30: 20 20 20 20 20 20 20 20 20 20 22 47 65 74 49 6e            "GetIn
8f40: 74 33 32 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75  t32", null, valu
8f50: 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  e), out complete
8f60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8f70: 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d    if (complete).
8f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fa0: 69 66 20 28 76 61 6c 75 65 2e 49 6e 74 33 32 56  if (value.Int32V
8fb0: 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fd0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
8fe0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69  iteException("mi
8ff0: 73 73 69 6e 67 20 69 6e 74 33 32 20 72 65 74 75  ssing int32 retu
9000: 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  rn value");.... 
9010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9020: 65 74 75 72 6e 20 28 49 6e 74 33 32 29 76 61 6c  eturn (Int32)val
9030: 75 65 2e 49 6e 74 33 32 56 61 6c 75 65 3b 0d 0a  ue.Int32Value;..
9040: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9050: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9060: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
9070: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
9080: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
9090: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
90a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
90b0: 6b 65 79 49 6e 66 6f 2e 47 65 74 49 6e 74 33 32  keyInfo.GetInt32
90c0: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
90d0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d  bleFieldCount);.
90e0: 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ...        Verif
90f0: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
9100: 49 6e 74 33 32 29 3b 0d 0a 20 20 20 20 20 20 20  Int32);..       
9110: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
9120: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
9130: 74 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74  tInt32(_activeSt
9140: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20  atement, i);..  
9150: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
9160: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
9170: 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20  / Retrieves the 
9180: 63 6f 6c 75 6d 6e 20 61 73 20 61 20 6c 6f 6e 67  column as a long
9190: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
91a0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
91b0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
91c0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
91d0: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
91e0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
91f0: 3e 49 6e 74 36 34 3c 2f 72 65 74 75 72 6e 73 3e  >Int64</returns>
9200: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
9210: 72 72 69 64 65 20 49 6e 74 36 34 20 47 65 74 49  rride Int64 GetI
9220: 6e 74 36 34 28 69 6e 74 20 69 29 0d 0a 20 20 20  nt64(int i)..   
9230: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
9240: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
9250: 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47        VerifyForG
9260: 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  et();....       
9270: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
9280: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9290: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
92a0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
92b0: 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43  acks) == SQLiteC
92c0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
92d0: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
92e0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d  ValueCallbacks).
92f0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9300: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
9310: 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61  taReaderValue va
9320: 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  lue = new SQLite
9330: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28  DataReaderValue(
9340: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9350: 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a  bool complete;..
9360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
9370: 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c  vokeReadValueCal
9380: 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c  lback(i, new SQL
9390: 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e  iteReadValueEven
93a0: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
93b0: 20 20 20 20 20 20 20 20 22 47 65 74 49 6e 74 36          "GetInt6
93c0: 34 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29  4", null, value)
93d0: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
93e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
93f0: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
9400: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9420: 20 28 76 61 6c 75 65 2e 49 6e 74 36 34 56 61 6c   (value.Int64Val
9430: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
9440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9450: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
9460: 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73  eException("miss
9470: 69 6e 67 20 69 6e 74 36 34 20 72 65 74 75 72 6e  ing int64 return
9480: 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20   value");....   
9490: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
94a0: 75 72 6e 20 28 49 6e 74 36 34 29 76 61 6c 75 65  urn (Int64)value
94b0: 2e 49 6e 74 36 34 56 61 6c 75 65 3b 0d 0a 20 20  .Int64Value;..  
94c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
94d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
94e0: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
94f0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
9500: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
9510: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
9520: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
9530: 79 49 6e 66 6f 2e 47 65 74 49 6e 74 36 34 28 69  yInfo.GetInt64(i
9540: 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c   - PrivateVisibl
9550: 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d  eFieldCount);...
9560: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54  .        VerifyT
9570: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 49 6e  ype(i, DbType.In
9580: 74 36 34 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  t64);..        r
9590: 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61  eturn _activeSta
95a0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49  tement._sql.GetI
95b0: 6e 74 36 34 28 5f 61 63 74 69 76 65 53 74 61 74  nt64(_activeStat
95c0: 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20  ement, i);..    
95d0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
95e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
95f0: 52 65 74 72 69 65 76 65 73 20 74 68 65 20 6e 61  Retrieves the na
9600: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  me of the column
9610: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
9620: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
9630: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
9640: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
9650: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
9660: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
9670: 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73  >string</returns
9680: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
9690: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
96a0: 74 4e 61 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20  tName(int i)..  
96b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
96c0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
96d0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
96e0: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
96f0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
9700: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
9710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
9720: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
9730: 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65  Name(i - Private
9740: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
9750: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  t);....        r
9760: 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61  eturn _activeSta
9770: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75  tement._sql.Colu
9780: 6d 6e 4e 61 6d 65 28 5f 61 63 74 69 76 65 53 74  mnName(_activeSt
9790: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20  atement, i);..  
97a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
97b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
97c0: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 61  / Returns the na
97d0: 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  me of the databa
97e0: 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  se associated wi
97f0: 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
9800: 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f   column...    //
9810: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
9820: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
9830: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
9840: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
9850: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
9860: 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c  <returns>string<
9870: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
9880: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74  ublic string Get
9890: 44 61 74 61 62 61 73 65 4e 61 6d 65 28 69 6e 74  DatabaseName(int
98a0: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
98b0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
98c0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
98d0: 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65  if (i >= Private
98e0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
98f0: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
9900: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9910: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
9920: 6e 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20  nfo.GetName(i - 
9930: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
9940: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
9950: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
9960: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
9970: 71 6c 2e 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73  ql.ColumnDatabas
9980: 65 4e 61 6d 65 28 5f 61 63 74 69 76 65 53 74 61  eName(_activeSta
9990: 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20  tement, i);..   
99a0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
99b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
99c0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 61 6d   Returns the nam
99d0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 61  e of the table a
99e0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
99f0: 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c  he specified col
9a00: 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  umn...    /// </
9a10: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
9a20: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
9a30: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
9a40: 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
9a50: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
9a60: 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74  urns>string</ret
9a70: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
9a80: 63 20 73 74 72 69 6e 67 20 47 65 74 54 61 62 6c  c string GetTabl
9a90: 65 4e 61 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20  eName(int i)..  
9aa0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
9ab0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
9ac0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
9ad0: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
9ae0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
9af0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
9b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
9b10: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
9b20: 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65  Name(i - Private
9b30: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
9b40: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  t);....        r
9b50: 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61  eturn _activeSta
9b60: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75  tement._sql.Colu
9b70: 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 5f 61 63 74  mnTableName(_act
9b80: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
9b90: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9ba0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
9bb0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
9bc0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 6e 61 6d 65  he original name
9bd0: 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65   of the specifie
9be0: 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f  d column...    /
9bf0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
9c00: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
9c10: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
9c20: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
9c30: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
9c40: 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67   <returns>string
9c50: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
9c60: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65  public string Ge
9c70: 74 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 69 6e  tOriginalName(in
9c80: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
9c90: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
9ca0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
9cb0: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
9cc0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
9cd0: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
9ce0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9cf0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
9d00: 49 6e 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d  Info.GetName(i -
9d10: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
9d20: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
9d30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
9d40: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
9d50: 73 71 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e  sql.ColumnOrigin
9d60: 61 6c 4e 61 6d 65 28 5f 61 63 74 69 76 65 53 74  alName(_activeSt
9d70: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20  atement, i);..  
9d80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
9d90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
9da0: 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20  / Retrieves the 
9db0: 69 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 2c 20 67  i of a column, g
9dc0: 69 76 65 6e 20 69 74 73 20 6e 61 6d 65 0d 0a 20  iven its name.. 
9dd0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9de0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
9df0: 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 54 68  m name="name">Th
9e00: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  e name of the co
9e10: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
9e20: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
9e30: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 69  / <returns>The i
9e40: 6e 74 20 69 20 6f 66 20 74 68 65 20 63 6f 6c 75  nt i of the colu
9e50: 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  mn</returns>..  
9e60: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
9e70: 65 20 69 6e 74 20 47 65 74 4f 72 64 69 6e 61 6c  e int GetOrdinal
9e80: 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d 0a 20  (string name).. 
9e90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63     {..      Chec
9ea0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
9eb0: 20 20 20 20 20 20 69 66 20 28 5f 74 68 72 6f 77        if (_throw
9ec0: 4f 6e 44 69 73 70 6f 73 65 64 29 20 53 51 4c 69  OnDisposed) SQLi
9ed0: 74 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b 28  teCommand.Check(
9ee0: 5f 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20  _command);....  
9ef0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f      //..      //
9f00: 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 63 68   NOTE: First, ch
9f10: 65 63 6b 20 69 66 20 74 68 65 20 63 6f 6c 75 6d  eck if the colum
9f20: 6e 20 6e 61 6d 65 20 63 61 63 68 65 20 68 61 73  n name cache has
9f30: 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
9f40: 64 20 79 65 74 2e 0d 0a 20 20 20 20 20 20 2f 2f  d yet...      //
9f50: 20 20 20 20 20 20 20 49 66 20 6e 6f 74 2c 20 64         If not, d
9f60: 6f 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  o it now...     
9f70: 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f   //..      if (_
9f80: 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 3d 20  fieldIndexes == 
9f90: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  null)..      {..
9fa0: 20 20 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64            _field
9fb0: 49 6e 64 65 78 65 73 20 3d 20 6e 65 77 20 44 69  Indexes = new Di
9fc0: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
9fd0: 20 69 6e 74 3e 28 0d 0a 20 20 20 20 20 20 20 20   int>(..        
9fe0: 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
9ff0: 61 72 65 72 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  arer.OrdinalIgno
a000: 72 65 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20  reCase);..      
a010: 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20  }....      //.. 
a020: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 65       // NOTE: Ne
a030: 78 74 2c 20 73 65 65 20 69 66 20 74 68 65 20 69  xt, see if the i
a040: 6e 64 65 78 20 66 6f 72 20 74 68 65 20 72 65 71  ndex for the req
a050: 75 65 73 74 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  uested column na
a060: 6d 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20  me has been..   
a070: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 63 68     //       cach
a080: 65 64 20 61 6c 72 65 61 64 79 2e 20 20 49 66 20  ed already.  If 
a090: 73 6f 2c 20 72 65 74 75 72 6e 20 74 68 65 20 63  so, return the c
a0a0: 61 63 68 65 64 20 76 61 6c 75 65 2e 20 20 4f 74  ached value.  Ot
a0b0: 68 65 72 77 69 73 65 2c 0d 0a 20 20 20 20 20 20  herwise,..      
a0c0: 2f 2f 20 20 20 20 20 20 20 6c 6f 6f 6b 75 70 20  //       lookup 
a0d0: 74 68 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68  the value and th
a0e0: 65 6e 20 63 61 63 68 65 20 74 68 65 20 72 65 73  en cache the res
a0f0: 75 6c 74 20 66 6f 72 20 66 75 74 75 72 65 20 75  ult for future u
a100: 73 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20  se...      //.. 
a110: 20 20 20 20 20 69 6e 74 20 72 3b 0d 0a 0d 0a 20       int r;.... 
a120: 20 20 20 20 20 69 66 20 28 21 5f 66 69 65 6c 64       if (!_field
a130: 49 6e 64 65 78 65 73 2e 54 72 79 47 65 74 56 61  Indexes.TryGetVa
a140: 6c 75 65 28 6e 61 6d 65 2c 20 6f 75 74 20 72 29  lue(name, out r)
a150: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
a160: 20 20 20 20 20 20 72 20 3d 20 5f 61 63 74 69 76        r = _activ
a170: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
a180: 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 5f 61 63 74  ColumnIndex(_act
a190: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e 61  iveStatement, na
a1a0: 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
a1b0: 20 20 69 66 20 28 72 20 3d 3d 20 2d 31 20 26 26    if (r == -1 &&
a1c0: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
a1d0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
a1e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
a1f0: 20 3d 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4f   = _keyInfo.GetO
a200: 72 64 69 6e 61 6c 28 6e 61 6d 65 29 3b 0d 0a 20  rdinal(name);.. 
a210: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a220: 28 72 20 3e 20 2d 31 29 20 72 20 2b 3d 20 50 72  (r > -1) r += Pr
a230: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
a240: 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20  dCount;..       
a250: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a260: 20 20 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 2e    _fieldIndexes.
a270: 41 64 64 28 6e 61 6d 65 2c 20 72 29 3b 0d 0a 20  Add(name, r);.. 
a280: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
a290: 72 65 74 75 72 6e 20 72 3b 0d 0a 20 20 20 20 7d  return r;..    }
a2a0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
a2b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  mary>..    /// S
a2c0: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
a2d0: 6e 20 69 6e 20 53 51 4c 69 74 65 20 69 73 20 64  n in SQLite is d
a2e0: 69 66 66 69 63 75 6c 74 20 74 6f 20 6d 61 70 20  ifficult to map 
a2f0: 69 6e 74 6f 20 2e 4e 45 54 20 63 6f 6e 76 65 6e  into .NET conven
a300: 74 69 6f 6e 73 2c 20 73 6f 20 61 20 6c 6f 74 20  tions, so a lot 
a310: 6f 66 20 77 6f 72 6b 20 6d 75 73 74 20 62 65 20  of work must be 
a320: 64 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f  done..    /// to
a330: 20 67 61 74 68 65 72 20 74 68 65 20 6e 65 63 65   gather the nece
a340: 73 73 61 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f  ssary informatio
a350: 6e 20 73 6f 20 69 74 20 63 61 6e 20 62 65 20 72  n so it can be r
a360: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 61 6e  epresented in an
a370: 20 41 44 4f 2e 4e 45 54 20 6d 61 6e 6e 65 72 2e   ADO.NET manner.
a380: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
a390: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
a3a0: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
a3b0: 20 44 61 74 61 54 61 62 6c 65 20 63 6f 6e 74 61   DataTable conta
a3c0: 69 6e 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61  ining the schema
a3d0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72   information for
a3e0: 20 74 68 65 20 61 63 74 69 76 65 20 53 45 4c 45   the active SELE
a3f0: 43 54 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  CT statement bei
a400: 6e 67 20 70 72 6f 63 65 73 73 65 64 2e 3c 2f 72  ng processed.</r
a410: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
a420: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 44 61 74  lic override Dat
a430: 61 54 61 62 6c 65 20 47 65 74 53 63 68 65 6d 61  aTable GetSchema
a440: 54 61 62 6c 65 28 29 0d 0a 20 20 20 20 7b 0d 0a  Table()..    {..
a450: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
a460: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 72 65  sed();..      re
a470: 74 75 72 6e 20 47 65 74 53 63 68 65 6d 61 54 61  turn GetSchemaTa
a480: 62 6c 65 28 74 72 75 65 2c 20 66 61 6c 73 65 29  ble(true, false)
a490: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
a4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a4f0: 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6c 75 6d     #region Colum
a500: 6e 50 61 72 65 6e 74 20 43 6c 61 73 73 0d 0a 20  nParent Class.. 
a510: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
a520: 64 20 63 6c 61 73 73 20 43 6f 6c 75 6d 6e 50 61  d class ColumnPa
a530: 72 65 6e 74 20 3a 20 49 45 71 75 61 6c 69 74 79  rent : IEquality
a540: 43 6f 6d 70 61 72 65 72 3c 43 6f 6c 75 6d 6e 50  Comparer<ColumnP
a550: 61 72 65 6e 74 3e 0d 0a 20 20 20 20 7b 0d 0a 20  arent>..    {.. 
a560: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
a570: 75 62 6c 69 63 20 46 69 65 6c 64 73 0d 0a 20 20  ublic Fields..  
a580: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
a590: 69 6e 67 20 44 61 74 61 62 61 73 65 4e 61 6d 65  ing DatabaseName
a5a0: 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ;..        publi
a5b0: 63 20 73 74 72 69 6e 67 20 54 61 62 6c 65 4e 61  c string TableNa
a5c0: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62  me;..        pub
a5d0: 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  lic string Colum
a5e0: 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  nName;..        
a5f0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
a600: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a650: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
a660: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
a670: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 70 75  tors..        pu
a680: 62 6c 69 63 20 43 6f 6c 75 6d 6e 50 61 72 65 6e  blic ColumnParen
a690: 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  t()..        {..
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
a6b0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
a6c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a6d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a710: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a720: 20 20 20 20 70 75 62 6c 69 63 20 43 6f 6c 75 6d      public Colum
a730: 6e 50 61 72 65 6e 74 28 0d 0a 20 20 20 20 20 20  nParent(..      
a740: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74        string dat
a750: 61 62 61 73 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  abaseName,..    
a760: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
a770: 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  ableName,..     
a780: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
a790: 6c 75 6d 6e 4e 61 6d 65 0d 0a 20 20 20 20 20 20  lumnName..      
a7a0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
a7b0: 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20       : this().. 
a7c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a7d0: 20 20 20 20 20 20 74 68 69 73 2e 44 61 74 61 62        this.Datab
a7e0: 61 73 65 4e 61 6d 65 20 3d 20 64 61 74 61 62 61  aseName = databa
a7f0: 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  seName;..       
a800: 20 20 20 20 20 74 68 69 73 2e 54 61 62 6c 65 4e       this.TableN
a810: 61 6d 65 20 3d 20 74 61 62 6c 65 4e 61 6d 65 3b  ame = tableName;
a820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
a830: 69 73 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 20 3d 20  is.ColumnName = 
a840: 63 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20  columnName;..   
a850: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a860: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
a870: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a8c0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
a8d0: 20 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61 72   IEqualityCompar
a8e0: 65 72 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e  er<ColumnParent>
a8f0: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
a900: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 45 71    public bool Eq
a910: 75 61 6c 73 28 43 6f 6c 75 6d 6e 50 61 72 65 6e  uals(ColumnParen
a920: 74 20 78 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e  t x, ColumnParen
a930: 74 20 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  t y)..        {.
a940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
a950: 28 28 78 20 3d 3d 20 6e 75 6c 6c 29 20 26 26 20  ((x == null) && 
a960: 28 79 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  (y == null))..  
a970: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a980: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a990: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
a9a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a9b0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28        else if ((
a9c0: 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 79  x == null) || (y
a9d0: 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
a9e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a9f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
aa00: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
aa10: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
aa20: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
aa30: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
aa40: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
aa50: 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 78 2e 44  tring.Equals(x.D
aa60: 61 74 61 62 61 73 65 4e 61 6d 65 2c 20 79 2e 44  atabaseName, y.D
aa70: 61 74 61 62 61 73 65 4e 61 6d 65 2c 0d 0a 20 20  atabaseName,..  
aa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa90: 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
aaa0: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
aab0: 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20  noreCase))..    
aac0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
aad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aae0: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
aaf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ab00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
ab10: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
ab20: 6e 67 2e 45 71 75 61 6c 73 28 78 2e 54 61 62 6c  ng.Equals(x.Tabl
ab30: 65 4e 61 6d 65 2c 20 79 2e 54 61 62 6c 65 4e 61  eName, y.TableNa
ab40: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
ab50: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
ab60: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
ab70: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
ab80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ab90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
aba0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
abb0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
abc0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
abd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
abe0: 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
abf0: 28 78 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 79  (x.ColumnName, y
ac00: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 0d 0a 20 20  .ColumnName,..  
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac20: 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
ac30: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
ac40: 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20  noreCase))..    
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac70: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
ac80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ac90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
aca0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
acb0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
acc0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
acd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
ace0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
ad30: 69 63 20 69 6e 74 20 47 65 74 48 61 73 68 43 6f  ic int GetHashCo
ad40: 64 65 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20  de(ColumnParent 
ad50: 6f 62 6a 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  obj)..        {.
ad60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
ad70: 20 72 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a   result = 0;....
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ad90: 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26  (obj != null) &&
ada0: 20 28 6f 62 6a 2e 44 61 74 61 62 61 73 65 4e 61   (obj.DatabaseNa
adb0: 6d 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  me != null))..  
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
add0: 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e 44 61 74 61  sult ^= obj.Data
ade0: 62 61 73 65 4e 61 6d 65 2e 47 65 74 48 61 73 68  baseName.GetHash
adf0: 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Code();....     
ae00: 20 20 20 20 20 20 20 69 66 20 28 28 6f 62 6a 20         if ((obj 
ae10: 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28 6f 62 6a  != null) && (obj
ae20: 2e 54 61 62 6c 65 4e 61 6d 65 20 21 3d 20 6e 75  .TableName != nu
ae30: 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
ae40: 20 20 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20        result ^= 
ae50: 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d 65 2e 47 65  obj.TableName.Ge
ae60: 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a  tHashCode();....
ae70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ae80: 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26  (obj != null) &&
ae90: 20 28 6f 62 6a 2e 43 6f 6c 75 6d 6e 4e 61 6d 65   (obj.ColumnName
aea0: 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   != null))..    
aeb0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
aec0: 6c 74 20 5e 3d 20 6f 62 6a 2e 43 6f 6c 75 6d 6e  lt ^= obj.Column
aed0: 4e 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65  Name.GetHashCode
aee0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
aef0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
af00: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
af10: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
af20: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
af30: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
af40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
af90: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
afa0: 20 76 6f 69 64 20 47 65 74 53 74 61 74 65 6d 65   void GetStateme
afb0: 6e 74 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 73 28  ntColumnParents(
afc0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
afd0: 42 61 73 65 20 73 71 6c 2c 0d 0a 20 20 20 20 20  Base sql,..     
afe0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
aff0: 6e 74 20 73 74 6d 74 2c 0d 0a 20 20 20 20 20 20  nt stmt,..      
b000: 20 20 69 6e 74 20 66 69 65 6c 64 43 6f 75 6e 74    int fieldCount
b010: 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 44  ,..        ref D
b020: 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e  ictionary<Column
b030: 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74  Parent, List<int
b040: 3e 3e 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  >> parentToColum
b050: 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66  ns,..        ref
b060: 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74 2c   Dictionary<int,
b070: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20 63   ColumnParent> c
b080: 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 0d 0a 20  olumnToParent.. 
b090: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
b0a0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 70 61 72  .        if (par
b0b0: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 3d 20  entToColumns == 
b0c0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
b0d0: 20 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d     parentToColum
b0e0: 6e 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e  ns = new Diction
b0f0: 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ary<ColumnParent
b100: 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 28 0d 0a 20  , List<int>>(.. 
b110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
b120: 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28  ew ColumnParent(
b130: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ));....        i
b140: 66 20 28 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e  f (columnToParen
b150: 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
b160: 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f          columnTo
b170: 50 61 72 65 6e 74 20 3d 20 6e 65 77 20 44 69 63  Parent = new Dic
b180: 74 69 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c  tionary<int, Col
b190: 75 6d 6e 50 61 72 65 6e 74 3e 28 29 3b 0d 0a 0d  umnParent>();...
b1a0: 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e  .        for (in
b1b0: 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 66 69 65  t n = 0; n < fie
b1c0: 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0d 0a 20  ldCount; n++).. 
b1d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b1e0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74        string dat
b1f0: 61 62 61 73 65 4e 61 6d 65 20 3d 20 73 71 6c 2e  abaseName = sql.
b200: 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61  ColumnDatabaseNa
b210: 6d 65 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a 20 20  me(stmt, n);..  
b220: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
b230: 20 74 61 62 6c 65 4e 61 6d 65 20 3d 20 73 71 6c   tableName = sql
b240: 2e 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65  .ColumnTableName
b250: 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a 20 20 20 20  (stmt, n);..    
b260: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
b270: 6f 6c 75 6d 6e 4e 61 6d 65 20 3d 20 73 71 6c 2e  olumnName = sql.
b280: 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61  ColumnOriginalNa
b290: 6d 65 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a 0d 0a  me(stmt, n);....
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6c 75              Colu
b2b0: 6d 6e 50 61 72 65 6e 74 20 6b 65 79 20 3d 20 6e  mnParent key = n
b2c0: 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28  ew ColumnParent(
b2d0: 64 61 74 61 62 61 73 65 4e 61 6d 65 2c 20 74 61  databaseName, ta
b2e0: 62 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c 29 3b 0d  bleName, null);.
b2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6c  .            Col
b300: 75 6d 6e 50 61 72 65 6e 74 20 76 61 6c 75 65 20  umnParent value 
b310: 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65  = new ColumnPare
b320: 6e 74 28 64 61 74 61 62 61 73 65 4e 61 6d 65 2c  nt(databaseName,
b330: 20 74 61 62 6c 65 4e 61 6d 65 2c 20 63 6f 6c 75   tableName, colu
b340: 6d 6e 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  mnName);....    
b350: 20 20 20 20 20 20 20 20 4c 69 73 74 3c 69 6e 74          List<int
b360: 3e 20 69 6e 64 65 78 4c 69 73 74 3b 0d 0a 0d 0a  > indexList;....
b370: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b380: 21 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73  !parentToColumns
b390: 2e 54 72 79 47 65 74 56 61 6c 75 65 28 6b 65 79  .TryGetValue(key
b3a0: 2c 20 6f 75 74 20 69 6e 64 65 78 4c 69 73 74 29  , out indexList)
b3b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b3c0: 20 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d     parentToColum
b3d0: 6e 73 2e 41 64 64 28 6b 65 79 2c 20 6e 65 77 20  ns.Add(key, new 
b3e0: 4c 69 73 74 3c 69 6e 74 3e 28 6e 65 77 20 69 6e  List<int>(new in
b3f0: 74 5b 5d 20 7b 20 6e 20 7d 29 29 3b 0d 0a 20 20  t[] { n }));..  
b400: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
b410: 66 20 28 69 6e 64 65 78 4c 69 73 74 20 21 3d 20  f (indexList != 
b420: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
b430: 20 20 20 20 20 20 20 69 6e 64 65 78 4c 69 73 74         indexList
b440: 2e 41 64 64 28 6e 29 3b 0d 0a 20 20 20 20 20 20  .Add(n);..      
b450: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
b460: 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65              pare
b470: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 5b 6b 65 79 5d  ntToColumns[key]
b480: 20 3d 20 6e 65 77 20 4c 69 73 74 3c 69 6e 74 3e   = new List<int>
b490: 28 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 6e 20 7d  (new int[] { n }
b4a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
b4b0: 20 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74    columnToParent
b4c0: 2e 41 64 64 28 6e 2c 20 76 61 6c 75 65 29 3b 0d  .Add(n, value);.
b4d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
b4e0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
b4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b530: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72 69 76  ////....    priv
b540: 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 43  ate static int C
b550: 6f 75 6e 74 50 61 72 65 6e 74 73 28 0d 0a 20 20  ountParents(..  
b560: 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79        Dictionary
b570: 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c  <ColumnParent, L
b580: 69 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74  ist<int>> parent
b590: 54 6f 43 6f 6c 75 6d 6e 73 0d 0a 20 20 20 20 20  ToColumns..     
b5a0: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
b5b0: 20 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20       int result 
b5c0: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 0;....        
b5d0: 69 66 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75  if (parentToColu
b5e0: 6d 6e 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mns != null)..  
b5f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b600: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 43 6f       foreach (Co
b610: 6c 75 6d 6e 50 61 72 65 6e 74 20 6b 65 79 20 69  lumnParent key i
b620: 6e 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e  n parentToColumn
b630: 73 2e 4b 65 79 73 29 0d 0a 20 20 20 20 20 20 20  s.Keys)..       
b640: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b650: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
b660: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
b670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
b680: 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
b690: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
b6a0: 67 20 74 61 62 6c 65 4e 61 6d 65 20 3d 20 6b 65  g tableName = ke
b6b0: 79 2e 54 61 62 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  y.TableName;....
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6d0: 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
b6e0: 6c 4f 72 45 6d 70 74 79 28 74 61 62 6c 65 4e 61  lOrEmpty(tableNa
b6f0: 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
b700: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
b710: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
b720: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2b 2b 3b         result++;
b730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b740: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
b750: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
b760: 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ult;..    }.... 
b770: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b7c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 44  ..    internal D
b7d0: 61 74 61 54 61 62 6c 65 20 47 65 74 53 63 68 65  ataTable GetSche
b7e0: 6d 61 54 61 62 6c 65 28 62 6f 6f 6c 20 77 61 6e  maTable(bool wan
b7f0: 74 55 6e 69 71 75 65 49 6e 66 6f 2c 20 62 6f 6f  tUniqueInfo, boo
b800: 6c 20 77 61 6e 74 44 65 66 61 75 6c 74 56 61 6c  l wantDefaultVal
b810: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
b820: 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b    CheckClosed();
b830: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 74 68 72  ..      if (_thr
b840: 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29 20 53 51  owOnDisposed) SQ
b850: 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63  LiteCommand.Chec
b860: 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a  k(_command);....
b870: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
b880: 2f 2f 20 42 55 47 46 49 58 3a 20 57 65 20 6e 65  // BUGFIX: We ne
b890: 65 64 20 74 6f 20 71 75 69 63 6b 6c 79 20 73 63  ed to quickly sc
b8a0: 61 6e 20 61 6c 6c 20 74 68 65 20 66 69 65 6c 64  an all the field
b8b0: 73 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  s in the current
b8c0: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
b8d0: 20 20 20 22 72 65 73 75 6c 74 20 73 65 74 22 20     "result set" 
b8e0: 74 6f 20 73 65 65 20 68 6f 77 20 6d 61 6e 79 20  to see how many 
b8f0: 64 69 73 74 69 6e 63 74 20 74 61 62 6c 65 73 20  distinct tables 
b900: 61 72 65 20 61 63 74 75 61 6c 6c 79 0d 0a 20 20  are actually..  
b910: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69      //         i
b920: 6e 76 6f 6c 76 65 64 2e 20 20 54 68 69 73 20 69  nvolved.  This i
b930: 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 65  nformation is ne
b940: 63 65 73 73 61 72 79 20 73 6f 20 74 68 61 74 20  cessary so that 
b950: 73 6f 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20  some..      //  
b960: 20 20 20 20 20 20 20 69 6e 74 65 6c 6c 69 67 65         intellige
b970: 6e 74 20 64 65 63 69 73 69 6f 6e 73 20 63 61 6e  nt decisions can
b980: 20 62 65 20 6d 61 64 65 20 77 68 65 6e 20 63 6f   be made when co
b990: 6e 73 74 72 75 63 74 69 6e 67 20 74 68 65 0d 0a  nstructing the..
b9a0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
b9b0: 20 6d 65 74 61 64 61 74 61 20 62 65 6c 6f 77 2e   metadata below.
b9c0: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 77    For example, w
b9d0: 65 20 6e 65 65 64 20 74 6f 20 62 65 20 76 65 72  e need to be ver
b9e0: 79 20 63 61 72 65 66 75 6c 0d 0a 20 20 20 20 20  y careful..     
b9f0: 20 2f 2f 20 20 20 20 20 20 20 20 20 61 62 6f 75   //         abou
ba00: 74 20 66 6c 61 67 67 69 6e 67 20 61 20 70 61 72  t flagging a par
ba10: 74 69 63 75 6c 61 72 20 63 6f 6c 75 6d 6e 20 61  ticular column a
ba20: 73 20 22 75 6e 69 71 75 65 22 20 6a 75 73 74 0d  s "unique" just.
ba30: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
ba40: 20 20 62 65 63 61 75 73 65 20 69 74 20 77 61 73    because it was
ba50: 20 69 6e 20 69 74 73 20 6f 72 69 67 69 6e 61 6c   in its original
ba60: 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61   underlying data
ba70: 62 61 73 65 20 74 61 62 6c 65 0d 0a 20 20 20 20  base table..    
ba80: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69 66 20    //         if 
ba90: 74 68 65 72 65 20 61 72 65 20 6e 6f 77 20 6d 75  there are now mu
baa0: 6c 74 69 70 6c 65 20 74 61 62 6c 65 73 20 69 6e  ltiple tables in
bab0: 76 6f 6c 76 65 64 20 69 6e 20 74 68 65 0d 0a 20  volved in the.. 
bac0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
bad0: 22 72 65 73 75 6c 74 20 73 65 74 22 2e 20 20 53  "result set".  S
bae0: 65 65 20 74 69 63 6b 65 74 20 5b 37 65 33 66 61  ee ticket [7e3fa
baf0: 39 33 37 34 34 5d 20 66 6f 72 20 6d 6f 72 65 20  93744] for more 
bb00: 64 65 74 61 69 6c 65 64 0d 0a 20 20 20 20 20 20  detailed..      
bb10: 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 66 6f 72  //         infor
bb20: 6d 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 2f  mation...      /
bb30: 2f 0d 0a 20 20 20 20 20 20 44 69 63 74 69 6f 6e  /..      Diction
bb40: 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ary<ColumnParent
bb50: 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20 70 61 72  , List<int>> par
bb60: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e  entToColumns = n
bb70: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 44 69 63 74  ull;..      Dict
bb80: 69 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75  ionary<int, Colu
bb90: 6d 6e 50 61 72 65 6e 74 3e 20 63 6f 6c 75 6d 6e  mnParent> column
bba0: 54 6f 50 61 72 65 6e 74 20 3d 20 6e 75 6c 6c 3b  ToParent = null;
bbb0: 0d 0a 0d 0a 20 20 20 20 20 20 47 65 74 53 74 61  ....      GetSta
bbc0: 74 65 6d 65 6e 74 43 6f 6c 75 6d 6e 50 61 72 65  tementColumnPare
bbd0: 6e 74 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  nts(..          
bbe0: 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74  _command.Connect
bbf0: 69 6f 6e 2e 5f 73 71 6c 2c 20 5f 61 63 74 69 76  ion._sql, _activ
bc00: 65 53 74 61 74 65 6d 65 6e 74 2c 20 5f 66 69 65  eStatement, _fie
bc10: 6c 64 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  ldCount,..      
bc20: 20 20 20 20 72 65 66 20 70 61 72 65 6e 74 54 6f      ref parentTo
bc30: 43 6f 6c 75 6d 6e 73 2c 20 72 65 66 20 63 6f 6c  Columns, ref col
bc40: 75 6d 6e 54 6f 50 61 72 65 6e 74 29 3b 0d 0a 0d  umnToParent);...
bc50: 0a 20 20 20 20 20 20 44 61 74 61 54 61 62 6c 65  .      DataTable
bc60: 20 74 62 6c 20 3d 20 6e 65 77 20 44 61 74 61 54   tbl = new DataT
bc70: 61 62 6c 65 28 22 53 63 68 65 6d 61 54 61 62 6c  able("SchemaTabl
bc80: 65 22 29 3b 0d 0a 20 20 20 20 20 20 44 61 74 61  e");..      Data
bc90: 54 61 62 6c 65 20 74 62 6c 49 6e 64 65 78 65 73  Table tblIndexes
bca0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
bcb0: 44 61 74 61 54 61 62 6c 65 20 74 62 6c 49 6e 64  DataTable tblInd
bcc0: 65 78 43 6f 6c 75 6d 6e 73 3b 0d 0a 20 20 20 20  exColumns;..    
bcd0: 20 20 44 61 74 61 52 6f 77 20 72 6f 77 3b 0d 0a    DataRow row;..
bce0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 6d        string tem
bcf0: 70 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67  p;..      string
bd00: 20 73 74 72 43 61 74 61 6c 6f 67 20 3d 20 53 74   strCatalog = St
bd10: 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20  ring.Empty;..   
bd20: 20 20 20 73 74 72 69 6e 67 20 73 74 72 54 61 62     string strTab
bd30: 6c 65 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74  le = String.Empt
bd40: 79 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67  y;..      string
bd50: 20 73 74 72 43 6f 6c 75 6d 6e 20 3d 20 53 74 72   strColumn = Str
bd60: 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20  ing.Empty;....  
bd70: 20 20 20 20 74 62 6c 2e 4c 6f 63 61 6c 65 20 3d      tbl.Locale =
bd80: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76   CultureInfo.Inv
bd90: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 3b 0d 0a  ariantCulture;..
bda0: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
bdb0: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
bdc0: 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61  eColumn.ColumnNa
bdd0: 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e  me, typeof(Strin
bde0: 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  g));..      tbl.
bdf0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
be00: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f  maTableColumn.Co
be10: 6c 75 6d 6e 4f 72 64 69 6e 61 6c 2c 20 74 79 70  lumnOrdinal, typ
be20: 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20  eof(int));..    
be30: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
be40: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
be50: 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 2c 20  umn.ColumnSize, 
be60: 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20  typeof(int));.. 
be70: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
be80: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
be90: 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72  Column.NumericPr
bea0: 65 63 69 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28  ecision, typeof(
beb0: 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  int));..      tb
bec0: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
bed0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
bee0: 4e 75 6d 65 72 69 63 53 63 61 6c 65 2c 20 74 79  NumericScale, ty
bef0: 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20  peof(int));..   
bf00: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
bf10: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
bf20: 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 2c 20 74  lumn.IsUnique, t
bf30: 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b  ypeof(Boolean));
bf40: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
bf50: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
bf60: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 2c  bleColumn.IsKey,
bf70: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
bf80: 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
bf90: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
bfa0: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
bfb0: 75 6d 6e 2e 42 61 73 65 53 65 72 76 65 72 4e 61  umn.BaseServerNa
bfc0: 6d 65 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e  me, typeof(strin
bfd0: 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  g));..      tbl.
bfe0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
bff0: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
c000: 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f  olumn.BaseCatalo
c010: 67 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74  gName, typeof(St
c020: 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
c030: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
c040: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
c050: 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  .BaseColumnName,
c060: 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29   typeof(String))
c070: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
c080: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
c090: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 53  ableColumn.BaseS
c0a0: 63 68 65 6d 61 4e 61 6d 65 2c 20 74 79 70 65 6f  chemaName, typeo
c0b0: 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20  f(String));..   
c0c0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
c0d0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
c0e0: 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61  lumn.BaseTableNa
c0f0: 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e  me, typeof(Strin
c100: 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  g));..      tbl.
c110: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
c120: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61  maTableColumn.Da
c130: 74 61 54 79 70 65 2c 20 74 79 70 65 6f 66 28 54  taType, typeof(T
c140: 79 70 65 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ype));..      tb
c150: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c160: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c170: 41 6c 6c 6f 77 44 42 4e 75 6c 6c 2c 20 74 79 70  AllowDBNull, typ
c180: 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a  eof(Boolean));..
c190: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
c1a0: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
c1b0: 65 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72  eColumn.Provider
c1c0: 54 79 70 65 2c 20 74 79 70 65 6f 66 28 69 6e 74  Type, typeof(int
c1d0: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
c1e0: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
c1f0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 41  aTableColumn.IsA
c200: 6c 69 61 73 65 64 2c 20 74 79 70 65 6f 66 28 42  liased, typeof(B
c210: 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20  oolean));..     
c220: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c230: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
c240: 6d 6e 2e 49 73 45 78 70 72 65 73 73 69 6f 6e 2c  mn.IsExpression,
c250: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
c260: 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
c270: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
c280: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
c290: 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d  umn.IsAutoIncrem
c2a0: 65 6e 74 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  ent, typeof(Bool
c2b0: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ean));..      tb
c2c0: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c2d0: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
c2e0: 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56 65 72  lColumn.IsRowVer
c2f0: 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f  sion, typeof(Boo
c300: 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74  lean));..      t
c310: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
c320: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
c330: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 48 69 64 64 65  alColumn.IsHidde
c340: 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  n, typeof(Boolea
c350: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  n));..      tbl.
c360: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
c370: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
c380: 4c 6f 6e 67 2c 20 74 79 70 65 6f 66 28 42 6f 6f  Long, typeof(Boo
c390: 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74  lean));..      t
c3a0: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
c3b0: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
c3c0: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f  alColumn.IsReadO
c3d0: 6e 6c 79 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  nly, typeof(Bool
c3e0: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ean));..      tb
c3f0: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c400: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
c410: 6c 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72  lColumn.Provider
c420: 53 70 65 63 69 66 69 63 44 61 74 61 54 79 70 65  SpecificDataType
c430: 2c 20 74 79 70 65 6f 66 28 54 79 70 65 29 29 3b  , typeof(Type));
c440: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
c450: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
c460: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
c470: 6e 2e 44 65 66 61 75 6c 74 56 61 6c 75 65 2c 20  n.DefaultValue, 
c480: 74 79 70 65 6f 66 28 6f 62 6a 65 63 74 29 29 3b  typeof(object));
c490: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
c4a0: 6d 6e 73 2e 41 64 64 28 22 44 61 74 61 54 79 70  mns.Add("DataTyp
c4b0: 65 4e 61 6d 65 22 2c 20 74 79 70 65 6f 66 28 73  eName", typeof(s
c4c0: 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20  tring));..      
c4d0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c4e0: 22 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 22 2c  "CollationType",
c4f0: 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29   typeof(string))
c500: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 42 65 67  ;..      tbl.Beg
c510: 69 6e 4c 6f 61 64 44 61 74 61 28 29 3b 0d 0a 0d  inLoadData();...
c520: 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20  .      for (int 
c530: 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 66 69 65 6c  n = 0; n < _fiel
c540: 64 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0d 0a 20 20  dCount; n++)..  
c550: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
c560: 51 4c 69 74 65 54 79 70 65 20 73 71 6c 54 79 70  QLiteType sqlTyp
c570: 65 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70  e = GetSQLiteTyp
c580: 65 28 5f 66 6c 61 67 73 2c 20 6e 29 3b 0d 0a 0d  e(_flags, n);...
c590: 0a 20 20 20 20 20 20 20 20 72 6f 77 20 3d 20 74  .        row = t
c5a0: 62 6c 2e 4e 65 77 52 6f 77 28 29 3b 0d 0a 0d 0a  bl.NewRow();....
c5b0: 20 20 20 20 20 20 20 20 44 62 54 79 70 65 20 74          DbType t
c5c0: 79 70 20 3d 20 73 71 6c 54 79 70 65 2e 54 79 70  yp = sqlType.Typ
c5d0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e;....        //
c5e0: 20 44 65 66 61 75 6c 74 20 73 65 74 74 69 6e 67   Default setting
c5f0: 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
c600: 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ..        row[Sc
c610: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c620: 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20 3d 20 47 65  ColumnName] = Ge
c630: 74 4e 61 6d 65 28 6e 29 3b 0d 0a 20 20 20 20 20  tName(n);..     
c640: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c650: 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f  leColumn.ColumnO
c660: 72 64 69 6e 61 6c 5d 20 3d 20 6e 3b 0d 0a 20 20  rdinal] = n;..  
c670: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
c680: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75  TableColumn.Colu
c690: 6d 6e 53 69 7a 65 5d 20 3d 20 53 51 4c 69 74 65  mnSize] = SQLite
c6a0: 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f  Convert.DbTypeTo
c6b0: 43 6f 6c 75 6d 6e 53 69 7a 65 28 74 79 70 29 3b  ColumnSize(typ);
c6c0: 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ..        row[Sc
c6d0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c6e0: 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e  NumericPrecision
c6f0: 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72  ] = SQLiteConver
c700: 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65 72 69  t.DbTypeToNumeri
c710: 63 50 72 65 63 69 73 69 6f 6e 28 74 79 70 29 3b  cPrecision(typ);
c720: 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ..        row[Sc
c730: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c740: 4e 75 6d 65 72 69 63 53 63 61 6c 65 5d 20 3d 20  NumericScale] = 
c750: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44 62  SQLiteConvert.Db
c760: 54 79 70 65 54 6f 4e 75 6d 65 72 69 63 53 63 61  TypeToNumericSca
c770: 6c 65 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20  le(typ);..      
c780: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
c790: 65 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72  eColumn.Provider
c7a0: 54 79 70 65 5d 20 3d 20 73 71 6c 54 79 70 65 2e  Type] = sqlType.
c7b0: 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20 20 72  Type;..        r
c7c0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
c7d0: 6c 75 6d 6e 2e 49 73 4c 6f 6e 67 5d 20 3d 20 66  lumn.IsLong] = f
c7e0: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 72  alse;..        r
c7f0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
c800: 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c  lumn.AllowDBNull
c810: 5d 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  ] = true;..     
c820: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c830: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
c840: 2e 49 73 52 65 61 64 4f 6e 6c 79 5d 20 3d 20 66  .IsReadOnly] = f
c850: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 72  alse;..        r
c860: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
c870: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52  tionalColumn.IsR
c880: 6f 77 56 65 72 73 69 6f 6e 5d 20 3d 20 66 61 6c  owVersion] = fal
c890: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77  se;..        row
c8a0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
c8b0: 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 20 3d 20 66  mn.IsUnique] = f
c8c0: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 72  alse;..        r
c8d0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
c8e0: 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20 66 61  lumn.IsKey] = fa
c8f0: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f  lse;..        ro
c900: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
c910: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75  ionalColumn.IsAu
c920: 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 66  toIncrement] = f
c930: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 72  alse;..        r
c940: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
c950: 6c 75 6d 6e 2e 44 61 74 61 54 79 70 65 5d 20 3d  lumn.DataType] =
c960: 20 47 65 74 46 69 65 6c 64 54 79 70 65 28 6e 29   GetFieldType(n)
c970: 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53  ;..        row[S
c980: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
c990: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 48 69 64 64 65  alColumn.IsHidde
c9a0: 6e 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  n] = false;..   
c9b0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
c9c0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 53  ableColumn.BaseS
c9d0: 63 68 65 6d 61 4e 61 6d 65 5d 20 3d 20 5f 62 61  chemaName] = _ba
c9e0: 73 65 53 63 68 65 6d 61 4e 61 6d 65 3b 0d 0a 0d  seSchemaName;...
c9f0: 0a 20 20 20 20 20 20 20 20 73 74 72 43 6f 6c 75  .        strColu
ca00: 6d 6e 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72  mn = columnToPar
ca10: 65 6e 74 5b 6e 5d 2e 43 6f 6c 75 6d 6e 4e 61 6d  ent[n].ColumnNam
ca20: 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  e;..        if (
ca30: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
ca40: 6d 70 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29 20  mpty(strColumn) 
ca50: 3d 3d 20 66 61 6c 73 65 29 20 72 6f 77 5b 53 63  == false) row[Sc
ca60: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
ca70: 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20  BaseColumnName] 
ca80: 3d 20 73 74 72 43 6f 6c 75 6d 6e 3b 0d 0a 0d 0a  = strColumn;....
ca90: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
caa0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
cab0: 45 78 70 72 65 73 73 69 6f 6e 5d 20 3d 20 53 74  Expression] = St
cac0: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
cad0: 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29 3b 0d 0a  ty(strColumn);..
cae0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
caf0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
cb00: 41 6c 69 61 73 65 64 5d 20 3d 20 28 53 74 72 69  Aliased] = (Stri
cb10: 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4e 61  ng.Compare(GetNa
cb20: 6d 65 28 6e 29 2c 20 73 74 72 43 6f 6c 75 6d 6e  me(n), strColumn
cb30: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
cb40: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
cb50: 43 61 73 65 29 20 21 3d 20 30 29 3b 0d 0a 0d 0a  Case) != 0);....
cb60: 20 20 20 20 20 20 20 20 74 65 6d 70 20 3d 20 63          temp = c
cb70: 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d  olumnToParent[n]
cb80: 2e 54 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  .TableName;..   
cb90: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
cba0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65  IsNullOrEmpty(te
cbb0: 6d 70 29 20 3d 3d 20 66 61 6c 73 65 29 20 72 6f  mp) == false) ro
cbc0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
cbd0: 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d  umn.BaseTableNam
cbe0: 65 5d 20 3d 20 74 65 6d 70 3b 0d 0a 0d 0a 20 20  e] = temp;....  
cbf0: 20 20 20 20 20 20 74 65 6d 70 20 3d 20 63 6f 6c        temp = col
cc00: 75 6d 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 44  umnToParent[n].D
cc10: 61 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20 20  atabaseName;..  
cc20: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
cc30: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
cc40: 65 6d 70 29 20 3d 3d 20 66 61 6c 73 65 29 20 72  emp) == false) r
cc50: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
cc60: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73  tionalColumn.Bas
cc70: 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20 3d 20  eCatalogName] = 
cc80: 74 65 6d 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  temp;....       
cc90: 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65   string dataType
cca0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
ccb0: 20 20 2f 2f 20 49 66 20 77 65 20 68 61 76 65 20    // If we have 
ccc0: 61 20 74 61 62 6c 65 2d 62 6f 75 6e 64 20 63 6f  a table-bound co
ccd0: 6c 75 6d 6e 2c 20 65 78 74 72 61 63 74 20 74 68  lumn, extract th
cce0: 65 20 65 78 74 72 61 20 69 6e 66 6f 72 6d 61 74  e extra informat
ccf0: 69 6f 6e 20 66 72 6f 6d 20 69 74 0d 0a 20 20 20  ion from it..   
cd00: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
cd10: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74  IsNullOrEmpty(st
cd20: 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73  rColumn) == fals
cd30: 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  e)..        {.. 
cd40: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
cd50: 63 6f 6c 6c 53 65 71 20 3d 20 6e 75 6c 6c 3b 0d  collSeq = null;.
cd60: 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  .          bool 
cd70: 62 4e 6f 74 4e 75 6c 6c 20 3d 20 66 61 6c 73 65  bNotNull = false
cd80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f  ;..          boo
cd90: 6c 20 62 50 72 69 6d 61 72 79 4b 65 79 20 3d 20  l bPrimaryKey = 
cda0: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
cdb0: 20 20 62 6f 6f 6c 20 62 41 75 74 6f 49 6e 63 72    bool bAutoIncr
cdc0: 65 6d 65 6e 74 20 3d 20 66 61 6c 73 65 3b 0d 0a  ement = false;..
cdd0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
cde0: 5b 5d 20 61 72 53 69 7a 65 3b 0d 0a 0d 0a 20 20  [] arSize;....  
cdf0: 20 20 20 20 20 20 20 20 2f 2f 20 47 65 74 20 74          // Get t
ce00: 68 65 20 63 6f 6c 75 6d 6e 20 6d 65 74 61 20 64  he column meta d
ce10: 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 5f  ata..          _
ce20: 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69  command.Connecti
ce30: 6f 6e 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4d 65  on._sql.ColumnMe
ce40: 74 61 44 61 74 61 28 0d 0a 20 20 20 20 20 20 20  taData(..       
ce50: 20 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77       (string)row
ce60: 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  [SchemaTableOpti
ce70: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  onalColumn.BaseC
ce80: 61 74 61 6c 6f 67 4e 61 6d 65 5d 2c 0d 0a 20 20  atalogName],..  
ce90: 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e            (strin
cea0: 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  g)row[SchemaTabl
ceb0: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c  eColumn.BaseTabl
cec0: 65 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20  eName],..       
ced0: 20 20 20 20 20 73 74 72 43 6f 6c 75 6d 6e 2c 0d       strColumn,.
cee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
cef0: 20 64 61 74 61 54 79 70 65 2c 20 72 65 66 20 63   dataType, ref c
cf00: 6f 6c 6c 53 65 71 2c 20 72 65 66 20 62 4e 6f 74  ollSeq, ref bNot
cf10: 4e 75 6c 6c 2c 20 72 65 66 20 62 50 72 69 6d 61  Null, ref bPrima
cf20: 72 79 4b 65 79 2c 20 72 65 66 20 62 41 75 74 6f  ryKey, ref bAuto
cf30: 49 6e 63 72 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20  Increment);.... 
cf40: 20 20 20 20 20 20 20 20 20 69 66 20 28 62 4e 6f           if (bNo
cf50: 74 4e 75 6c 6c 20 7c 7c 20 62 50 72 69 6d 61 72  tNull || bPrimar
cf60: 79 4b 65 79 29 20 72 6f 77 5b 53 63 68 65 6d 61  yKey) row[Schema
cf70: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f  TableColumn.Allo
cf80: 77 44 42 4e 75 6c 6c 5d 20 3d 20 66 61 6c 73 65  wDBNull] = false
cf90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  ;....          r
cfa0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
cfb0: 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20 62 50  lumn.IsKey] = bP
cfc0: 72 69 6d 61 72 79 4b 65 79 20 26 26 20 43 6f 75  rimaryKey && Cou
cfd0: 6e 74 50 61 72 65 6e 74 73 28 70 61 72 65 6e 74  ntParents(parent
cfe0: 54 6f 43 6f 6c 75 6d 6e 73 29 20 3c 3d 20 31 3b  ToColumns) <= 1;
cff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b  ..          row[
d000: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
d010: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f  nalColumn.IsAuto
d020: 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 62 41 75  Increment] = bAu
d030: 74 6f 49 6e 63 72 65 6d 65 6e 74 3b 0d 0a 20 20  toIncrement;..  
d040: 20 20 20 20 20 20 20 20 72 6f 77 5b 22 43 6f 6c          row["Col
d050: 6c 61 74 69 6f 6e 54 79 70 65 22 5d 20 3d 20 63  lationType"] = c
d060: 6f 6c 6c 53 65 71 3b 0d 0a 0d 0a 20 20 20 20 20  ollSeq;....     
d070: 20 20 20 20 20 2f 2f 20 46 6f 72 20 74 79 70 65       // For type
d080: 73 20 6c 69 6b 65 20 76 61 72 63 68 61 72 28 35  s like varchar(5
d090: 30 29 20 61 6e 64 20 73 75 63 68 2c 20 65 78 74  0) and such, ext
d0a0: 72 61 63 74 20 74 68 65 20 73 69 7a 65 0d 0a 20  ract the size.. 
d0b0: 20 20 20 20 20 20 20 20 20 61 72 53 69 7a 65 20           arSize 
d0c0: 3d 20 64 61 74 61 54 79 70 65 2e 53 70 6c 69 74  = dataType.Split
d0d0: 28 27 28 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  ('(');..        
d0e0: 20 20 69 66 20 28 61 72 53 69 7a 65 2e 4c 65 6e    if (arSize.Len
d0f0: 67 74 68 20 3e 20 31 29 0d 0a 20 20 20 20 20 20  gth > 1)..      
d100: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d110: 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 61 72     dataType = ar
d120: 53 69 7a 65 5b 30 5d 3b 0d 0a 20 20 20 20 20 20  Size[0];..      
d130: 20 20 20 20 20 20 61 72 53 69 7a 65 20 3d 20 61        arSize = a
d140: 72 53 69 7a 65 5b 31 5d 2e 53 70 6c 69 74 28 27  rSize[1].Split('
d150: 29 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  )');..          
d160: 20 20 69 66 20 28 61 72 53 69 7a 65 2e 4c 65 6e    if (arSize.Len
d170: 67 74 68 20 3e 20 31 29 0d 0a 20 20 20 20 20 20  gth > 1)..      
d180: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d190: 20 20 20 20 20 20 20 61 72 53 69 7a 65 20 3d 20         arSize = 
d1a0: 61 72 53 69 7a 65 5b 30 5d 2e 53 70 6c 69 74 28  arSize[0].Split(
d1b0: 27 2c 27 2c 20 27 2e 27 29 3b 0d 0a 20 20 20 20  ',', '.');..    
d1c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 71            if (sq
d1d0: 6c 54 79 70 65 2e 54 79 70 65 20 3d 3d 20 44 62  lType.Type == Db
d1e0: 54 79 70 65 2e 42 69 6e 61 72 79 20 7c 7c 20 53  Type.Binary || S
d1f0: 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 49 73 53  QLiteConvert.IsS
d200: 74 72 69 6e 67 44 62 54 79 70 65 28 73 71 6c 54  tringDbType(sqlT
d210: 79 70 65 2e 54 79 70 65 29 29 0d 0a 20 20 20 20  ype.Type))..    
d220: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d230: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
d240: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
d250: 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20 3d  mn.ColumnSize] =
d260: 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32   Convert.ToInt32
d270: 28 61 72 53 69 7a 65 5b 30 5d 2c 20 43 75 6c 74  (arSize[0], Cult
d280: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
d290: 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20  tCulture);..    
d2a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
d2b0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
d2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
d2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d2e0: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
d2f0: 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50  eColumn.NumericP
d300: 72 65 63 69 73 69 6f 6e 5d 20 3d 20 43 6f 6e 76  recision] = Conv
d310: 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53 69  ert.ToInt32(arSi
d320: 7a 65 5b 30 5d 2c 20 43 75 6c 74 75 72 65 49 6e  ze[0], CultureIn
d330: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
d340: 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ure);..         
d350: 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a         if (arSiz
d360: 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20  e.Length > 1).. 
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d380: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
d390: 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63  Column.NumericSc
d3a0: 61 6c 65 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54  ale] = Convert.T
d3b0: 6f 49 6e 74 33 32 28 61 72 53 69 7a 65 5b 31 5d  oInt32(arSize[1]
d3c0: 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  , CultureInfo.In
d3d0: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b  variantCulture);
d3e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d3f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
d400: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
d410: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77  .          if (w
d420: 61 6e 74 44 65 66 61 75 6c 74 56 61 6c 75 65 29  antDefaultValue)
d430: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
d440: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
d450: 74 65 72 6d 69 6e 65 20 74 68 65 20 64 65 66 61  termine the defa
d460: 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ult value for th
d470: 65 20 63 6f 6c 75 6d 6e 2c 20 77 68 69 63 68 20  e column, which 
d480: 73 75 63 6b 73 20 62 65 63 61 75 73 65 20 77 65  sucks because we
d490: 20 68 61 76 65 20 74 6f 20 71 75 65 72 79 20 74   have to query t
d4a0: 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65 61  he schema for ea
d4b0: 63 68 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20  ch column..     
d4c0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
d4d0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 54  LiteCommand cmdT
d4e0: 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  able = new SQLit
d4f0: 65 43 6f 6d 6d 61 6e 64 28 48 65 6c 70 65 72 4d  eCommand(HelperM
d500: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
d510: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
d520: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
d530: 2c 20 22 50 52 41 47 4d 41 20 5b 7b 30 7d 5d 2e  , "PRAGMA [{0}].
d540: 54 41 42 4c 45 5f 49 4e 46 4f 28 5b 7b 31 7d 5d  TABLE_INFO([{1}]
d550: 29 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )",..           
d560: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
d570: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
d580: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
d590: 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ],..            
d5a0: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
d5b0: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c  eColumn.BaseTabl
d5c0: 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20  eName]..        
d5d0: 20 20 20 20 20 20 29 2c 20 5f 63 6f 6d 6d 61 6e        ), _comman
d5e0: 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a  d.Connection))..
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
d600: 67 20 28 44 62 44 61 74 61 52 65 61 64 65 72 20  g (DbDataReader 
d610: 72 64 54 61 62 6c 65 20 3d 20 63 6d 64 54 61 62  rdTable = cmdTab
d620: 6c 65 2e 45 78 65 63 75 74 65 52 65 61 64 65 72  le.ExecuteReader
d630: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
d640: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d650: 20 20 2f 2f 20 46 69 6e 64 20 74 68 65 20 6d 61    // Find the ma
d660: 74 63 68 69 6e 67 20 63 6f 6c 75 6d 6e 0d 0a 20  tching column.. 
d670: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
d680: 6c 65 20 28 72 64 54 61 62 6c 65 2e 52 65 61 64  le (rdTable.Read
d690: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
d6a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d6b0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
d6c0: 2e 43 6f 6d 70 61 72 65 28 28 73 74 72 69 6e 67  .Compare((string
d6d0: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
d6e0: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d  Column.BaseColum
d6f0: 6e 4e 61 6d 65 5d 2c 20 72 64 54 61 62 6c 65 2e  nName], rdTable.
d700: 47 65 74 53 74 72 69 6e 67 28 31 29 2c 20 53 74  GetString(1), St
d710: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
d720: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
d730: 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) == 0)..       
d740: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d760: 20 28 72 64 54 61 62 6c 65 2e 49 73 44 42 4e 75   (rdTable.IsDBNu
d770: 6c 6c 28 34 29 20 3d 3d 20 66 61 6c 73 65 29 0d  ll(4) == false).
d780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d790: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
d7a0: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
d7b0: 6d 6e 2e 44 65 66 61 75 6c 74 56 61 6c 75 65 5d  mn.DefaultValue]
d7c0: 20 3d 20 72 64 54 61 62 6c 65 5b 34 5d 3b 0d 0a   = rdTable[4];..
d7d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d7e0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
d810: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d820: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
d830: 20 20 20 20 20 20 20 20 2f 2f 20 44 65 74 65 72          // Deter
d840: 6d 69 6e 65 20 49 73 55 6e 69 71 75 65 20 70 72  mine IsUnique pr
d850: 6f 70 65 72 6c 79 2c 20 77 68 69 63 68 20 69 73  operly, which is
d860: 20 61 20 70 61 69 6e 20 69 6e 20 74 68 65 20 62   a pain in the b
d870: 75 74 74 21 0d 0a 20 20 20 20 20 20 20 20 20 20  utt!..          
d880: 69 66 20 28 77 61 6e 74 55 6e 69 71 75 65 49 6e  if (wantUniqueIn
d890: 66 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  fo)..          {
d8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
d8b0: 20 28 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63   ((string)row[Sc
d8c0: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
d8d0: 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61  lColumn.BaseCata
d8e0: 6c 6f 67 4e 61 6d 65 5d 20 21 3d 20 73 74 72 43  logName] != strC
d8f0: 61 74 61 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20  atalog..        
d900: 20 20 20 20 20 20 7c 7c 20 28 73 74 72 69 6e 67        || (string
d910: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
d920: 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65  Column.BaseTable
d930: 4e 61 6d 65 5d 20 21 3d 20 73 74 72 54 61 62 6c  Name] != strTabl
d940: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d950: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d960: 20 73 74 72 43 61 74 61 6c 6f 67 20 3d 20 28 73   strCatalog = (s
d970: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
d980: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
d990: 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e  umn.BaseCatalogN
d9a0: 61 6d 65 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame];..         
d9b0: 20 20 20 20 20 73 74 72 54 61 62 6c 65 20 3d 20       strTable = 
d9c0: 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65  (string)row[Sche
d9d0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
d9e0: 73 65 54 61 62 6c 65 4e 61 6d 65 5d 3b 0d 0a 0d  seTableName];...
d9f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
da00: 62 6c 49 6e 64 65 78 65 73 20 3d 20 5f 63 6f 6d  blIndexes = _com
da10: 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e  mand.Connection.
da20: 47 65 74 53 63 68 65 6d 61 28 22 49 6e 64 65 78  GetSchema("Index
da30: 65 73 22 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b  es", new string[
da40: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..           
da50: 20 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77       (string)row
da60: 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  [SchemaTableOpti
da70: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  onalColumn.BaseC
da80: 61 74 61 6c 6f 67 4e 61 6d 65 5d 2c 0d 0a 20 20  atalogName],..  
da90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75                nu
daa0: 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
dab0: 20 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77       (string)row
dac0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
dad0: 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65  mn.BaseTableName
dae0: 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ],..            
daf0: 20 20 20 20 6e 75 6c 6c 20 7d 29 3b 0d 0a 20 20      null });..  
db00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
db10: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
db20: 63 68 20 28 44 61 74 61 52 6f 77 20 72 6f 77 49  ch (DataRow rowI
db30: 6e 64 65 78 65 73 20 69 6e 20 74 62 6c 49 6e 64  ndexes in tblInd
db40: 65 78 65 73 2e 52 6f 77 73 29 0d 0a 20 20 20 20  exes.Rows)..    
db50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
db60: 20 20 20 20 20 20 20 20 20 74 62 6c 49 6e 64 65           tblInde
db70: 78 43 6f 6c 75 6d 6e 73 20 3d 20 5f 63 6f 6d 6d  xColumns = _comm
db80: 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47  and.Connection.G
db90: 65 74 53 63 68 65 6d 61 28 22 49 6e 64 65 78 43  etSchema("IndexC
dba0: 6f 6c 75 6d 6e 73 22 2c 20 6e 65 77 20 73 74 72  olumns", new str
dbb0: 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ing[] {..       
dbc0: 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67           (string
dbd0: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
dbe0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42  OptionalColumn.B
dbf0: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 2c  aseCatalogName],
dc00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dc10: 20 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20    null,..       
dc20: 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67           (string
dc30: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
dc40: 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65  Column.BaseTable
dc50: 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20  Name],..        
dc60: 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29          (string)
dc70: 72 6f 77 49 6e 64 65 78 65 73 5b 22 49 4e 44 45  rowIndexes["INDE
dc80: 58 5f 4e 41 4d 45 22 5d 2c 0d 0a 20 20 20 20 20  X_NAME"],..     
dc90: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 0d             null.
dca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dcb0: 20 7d 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   });..          
dcc0: 20 20 20 20 66 6f 72 65 61 63 68 20 28 44 61 74      foreach (Dat
dcd0: 61 52 6f 77 20 72 6f 77 43 6f 6c 75 6d 6e 49 6e  aRow rowColumnIn
dce0: 64 65 78 20 69 6e 20 74 62 6c 49 6e 64 65 78 43  dex in tblIndexC
dcf0: 6f 6c 75 6d 6e 73 2e 52 6f 77 73 29 0d 0a 20 20  olumns.Rows)..  
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
dd20: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
dd30: 65 28 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  e(SQLiteConvert.
dd40: 47 65 74 53 74 72 69 6e 67 4f 72 4e 75 6c 6c 28  GetStringOrNull(
dd50: 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64 65 78 5b 22  rowColumnIndex["
dd60: 43 4f 4c 55 4d 4e 5f 4e 41 4d 45 22 5d 29 2c 20  COLUMN_NAME"]), 
dd70: 73 74 72 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e  strColumn, Strin
dd80: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
dd90: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
dda0: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
ddb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ddc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dde0: 20 2f 2f 20 42 55 47 46 49 58 3a 20 4d 61 6b 65   // BUGFIX: Make
ddf0: 20 73 75 72 65 20 74 68 61 74 20 77 65 20 6f 6e   sure that we on
de00: 6c 79 20 66 6c 61 67 20 74 68 69 73 20 63 6f 6c  ly flag this col
de10: 75 6d 6e 20 61 73 20 22 75 6e 69 71 75 65 22 0d  umn as "unique".
de20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de30: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69 66     //         if
de40: 20 77 65 20 61 72 65 20 6e 6f 74 20 70 72 6f 63   we are not proc
de50: 65 73 73 69 6e 67 20 6f 66 20 73 6f 6d 65 20 6b  essing of some k
de60: 69 6e 64 20 6f 66 20 6d 75 6c 74 69 2d 74 61 62  ind of multi-tab
de70: 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
de80: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
de90: 20 63 6f 6e 73 74 72 75 63 74 20 28 69 2e 65 2e   construct (i.e.
dea0: 20 61 20 6a 6f 69 6e 29 20 62 65 63 61 75 73 65   a join) because
deb0: 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 77 65   in that case we
dec0: 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20   must..         
ded0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
dee0: 20 20 20 20 61 6c 6c 6f 77 20 64 75 70 6c 69 63      allow duplic
def0: 61 74 65 20 76 61 6c 75 65 73 20 28 72 65 66 65  ate values (refe
df00: 72 20 74 6f 20 74 69 63 6b 65 74 20 5b 37 65 33  r to ticket [7e3
df10: 66 61 39 33 37 34 34 5d 29 2e 0d 0a 20 20 20 20  fa93744])...    
df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
df30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
df40: 20 20 20 20 69 66 20 28 70 61 72 65 6e 74 54 6f      if (parentTo
df50: 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 20 3d 3d  Columns.Count ==
df60: 20 31 20 26 26 20 74 62 6c 49 6e 64 65 78 43 6f   1 && tblIndexCo
df70: 6c 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74  lumns.Rows.Count
df80: 20 3d 3d 20 31 20 26 26 20 28 62 6f 6f 6c 29 72   == 1 && (bool)r
df90: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
dfa0: 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c  lumn.AllowDBNull
dfb0: 5d 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20  ] == false)..   
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfd0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
dfe0: 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 5d  Column.IsUnique]
dff0: 20 3d 20 72 6f 77 49 6e 64 65 78 65 73 5b 22 55   = rowIndexes["U
e000: 4e 49 51 55 45 22 5d 3b 0d 0a 0d 0a 20 20 20 20  NIQUE"];....    
e010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
e020: 20 49 66 20 69 74 73 20 61 6e 20 69 6e 74 65 67   If its an integ
e030: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 61  er primary key a
e040: 6e 64 20 74 68 65 20 6f 6e 6c 79 20 70 72 69 6d  nd the only prim
e050: 61 72 79 20 6b 65 79 20 69 6e 20 74 68 65 20 74  ary key in the t
e060: 61 62 6c 65 2c 20 74 68 65 6e 20 69 74 73 20 61  able, then its a
e070: 20 72 6f 77 69 64 20 61 6c 69 61 73 20 61 6e 64   rowid alias and
e080: 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
e090: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
e0a0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 20 43       // NOTE:  C
e0b0: 75 72 72 65 6e 74 6c 79 20 63 6f 6d 6d 65 6e 74  urrently comment
e0c0: 65 64 20 6f 75 74 20 62 65 63 61 75 73 65 20 74  ed out because t
e0d0: 68 69 73 20 69 73 20 6e 6f 74 20 61 6c 77 61 79  his is not alway
e0e0: 73 20 74 68 65 20 64 65 73 69 72 65 64 20 62 65  s the desired be
e0f0: 68 61 76 69 6f 72 2e 20 20 46 6f 72 20 65 78 61  havior.  For exa
e100: 6d 70 6c 65 2c 20 61 20 31 3a 31 20 72 65 6c 61  mple, a 1:1 rela
e110: 74 69 6f 6e 73 68 69 70 20 77 69 74 68 0d 0a 20  tionship with.. 
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e130: 20 2f 2f 20 20 20 20 20 20 20 20 61 6e 6f 74 68   //        anoth
e140: 65 72 20 74 61 62 6c 65 2c 20 77 68 65 72 65 20  er table, where 
e150: 74 68 65 20 6f 74 68 65 72 20 74 61 62 6c 65 20  the other table 
e160: 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  is autoincrement
e170: 2c 20 62 75 74 20 74 68 69 73 20 6f 6e 65 20 69  , but this one i
e180: 73 20 6e 6f 74 2c 20 61 6e 64 20 75 73 65 73 20  s not, and uses 
e190: 74 68 65 20 72 6f 77 69 64 20 66 72 6f 6d 20 74  the rowid from t
e1a0: 68 65 20 6f 74 68 65 72 2e 0d 0a 20 20 20 20 20  he other...     
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
e1c0: 20 20 20 20 20 20 20 49 74 20 69 73 20 73 61 66         It is saf
e1d0: 65 72 20 74 6f 20 6f 6e 6c 79 20 73 65 74 20 41  er to only set A
e1e0: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 6f 6e 20  utoincrement on 
e1f0: 74 61 62 6c 65 73 20 77 68 65 72 65 20 77 65 27  tables where we'
e200: 72 65 20 53 55 52 45 20 74 68 65 20 75 73 65 72  re SURE the user
e210: 20 73 70 65 63 69 66 69 65 64 20 41 55 54 4f 49   specified AUTOI
e220: 4e 43 52 45 4d 45 4e 54 2c 20 65 76 65 6e 20 69  NCREMENT, even i
e230: 66 20 69 74 73 20 61 20 72 6f 77 69 64 20 63 6f  f its a rowid co
e240: 6c 75 6d 6e 2e 0d 0a 0d 0a 20 20 20 20 20 20 20  lumn.....       
e250: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
e260: 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52  blIndexColumns.R
e270: 6f 77 73 2e 43 6f 75 6e 74 20 3d 3d 20 31 20 26  ows.Count == 1 &
e280: 26 20 28 62 6f 6f 6c 29 72 6f 77 49 6e 64 65 78  & (bool)rowIndex
e290: 65 73 5b 22 50 52 49 4d 41 52 59 5f 4b 45 59 22  es["PRIMARY_KEY"
e2a0: 5d 20 3d 3d 20 74 72 75 65 20 26 26 20 53 74 72  ] == true && Str
e2b0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
e2c0: 79 28 64 61 74 61 54 79 70 65 29 20 3d 3d 20 66  y(dataType) == f
e2d0: 61 6c 73 65 20 26 26 0d 0a 20 20 20 20 20 20 20  alse &&..       
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
e2f0: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 64 61 74 61  ing.Compare(data
e300: 54 79 70 65 2c 20 22 69 6e 74 65 67 65 72 22 2c  Type, "integer",
e310: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
e320: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
e330: 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20  ase) == 0)..    
e340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
e350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e360: 20 20 20 20 20 2f 2f 20 20 72 6f 77 5b 53 63 68       //  row[Sch
e370: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
e380: 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63  Column.IsAutoInc
e390: 72 65 6d 65 6e 74 5d 20 3d 20 74 72 75 65 3b 0d  rement] = true;.
e3a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e3b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e3c0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
e3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e3e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
e3f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
e400: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
e410: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
e420: 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
e430: 72 45 6d 70 74 79 28 64 61 74 61 54 79 70 65 29  rEmpty(dataType)
e440: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
e450: 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70 65              Type
e460: 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e 20 3d  Affinity affin =
e470: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 55 6e   TypeAffinity.Un
e480: 69 6e 69 74 69 61 6c 69 7a 65 64 3b 0d 0a 20 20  initialized;..  
e490: 20 20 20 20 20 20 20 20 20 20 64 61 74 61 54 79            dataTy
e4a0: 70 65 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74  pe = _activeStat
e4b0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d  ement._sql.Colum
e4c0: 6e 54 79 70 65 28 5f 61 63 74 69 76 65 53 74 61  nType(_activeSta
e4d0: 74 65 6d 65 6e 74 2c 20 6e 2c 20 72 65 66 20 61  tement, n, ref a
e4e0: 66 66 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  ffin);..        
e4f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
e500: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
e510: 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74 61 54 79  llOrEmpty(dataTy
e520: 70 65 29 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20  pe) == false).. 
e530: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 22             row["
e540: 44 61 74 61 54 79 70 65 4e 61 6d 65 22 5d 20 3d  DataTypeName"] =
e550: 20 64 61 74 61 54 79 70 65 3b 0d 0a 20 20 20 20   dataType;..    
e560: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 74      }..        t
e570: 62 6c 2e 52 6f 77 73 2e 41 64 64 28 72 6f 77 29  bl.Rows.Add(row)
e580: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
e590: 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f      if (_keyInfo
e5a0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
e5b0: 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 41 70 70 65     _keyInfo.Appe
e5c0: 6e 64 53 63 68 65 6d 61 54 61 62 6c 65 28 74 62  ndSchemaTable(tb
e5d0: 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 74 62 6c  l);....      tbl
e5e0: 2e 41 63 63 65 70 74 43 68 61 6e 67 65 73 28 29  .AcceptChanges()
e5f0: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 45 6e 64  ;..      tbl.End
e600: 4c 6f 61 64 44 61 74 61 28 29 3b 0d 0a 0d 0a 20  LoadData();.... 
e610: 20 20 20 20 20 72 65 74 75 72 6e 20 74 62 6c 3b       return tbl;
e620: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
e630: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
e640: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
e650: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
e660: 73 74 72 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20  string..    /// 
e670: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
e680: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
e690: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
e6a0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
e6b0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
e6c0: 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72  eturns>string</r
e6d0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
e6e0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
e6f0: 69 6e 67 20 47 65 74 53 74 72 69 6e 67 28 69 6e  ing GetString(in
e700: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
e710: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
e720: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
e730: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
e740: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
e750: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
e760: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
e770: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
e780: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
e790: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
e7a0: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
e7b0: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
e7c0: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
e7d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e7e0: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
e7f0: 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e  rValue value = n
e800: 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  ew SQLiteDataRea
e810: 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20  derValue();..   
e820: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f           bool co
e830: 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20  mplete;....     
e840: 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61         InvokeRea
e850: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69  dValueCallback(i
e860: 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  , new SQLiteRead
e870: 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d  ValueEventArgs(.
e880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e890: 20 22 47 65 74 53 74 72 69 6e 67 22 2c 20 6e 75   "GetString", nu
e8a0: 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20  ll, value), out 
e8b0: 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20  complete);....  
e8c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
e8d0: 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20  mplete)..       
e8e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
e8f0: 76 61 6c 75 65 2e 53 74 72 69 6e 67 56 61 6c 75  value.StringValu
e900: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
e910: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
e920: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
e930: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
e940: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
e950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
e960: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
e970: 53 74 72 69 6e 67 28 69 20 2d 20 50 72 69 76 61  String(i - Priva
e980: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
e990: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
e9a0: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
e9b0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e9c0: 6c 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 65 78  lags.NoVerifyTex
e9d0: 74 41 66 66 69 6e 69 74 79 29 20 21 3d 20 53 51  tAffinity) != SQ
e9e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
e9f0: 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 65 78 74  ags.NoVerifyText
ea00: 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20  Affinity)..     
ea10: 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70         VerifyTyp
ea20: 65 28 69 2c 20 44 62 54 79 70 65 2e 53 74 72 69  e(i, DbType.Stri
ea30: 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ng);....        
ea40: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
ea50: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
ea60: 54 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74  Text(_activeStat
ea70: 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20  ement, i);..    
ea80: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
ea90: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
eaa0: 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f  Retrieves the co
eab0: 6c 75 6d 6e 20 61 73 20 61 6e 20 6f 62 6a 65 63  lumn as an objec
eac0: 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  t corresponding 
ead0: 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  to the underlyin
eae0: 67 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68  g datatype of th
eaf0: 65 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f  e column..    //
eb00: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
eb10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
eb20: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
eb30: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
eb40: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
eb50: 3c 72 65 74 75 72 6e 73 3e 6f 62 6a 65 63 74 3c  <returns>object<
eb60: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
eb70: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f  ublic override o
eb80: 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 69  bject GetValue(i
eb90: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
eba0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
ebb0: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
ebc0: 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d  VerifyForGet();.
ebd0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
ebe0: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
ebf0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
ec00: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
ec10: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20  ValueCallbacks) 
ec20: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
ec30: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
ec40: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
ec50: 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20  allbacks)..     
ec60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ec70: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
ec80: 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20  erValue value = 
ec90: 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65  new SQLiteDataRe
eca0: 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20  aderValue();..  
ecb0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
ecc0: 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20  omplete;....    
ecd0: 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65          InvokeRe
ece0: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28  adValueCallback(
ecf0: 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61  i, new SQLiteRea
ed00: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28  dValueEventArgs(
ed10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ed20: 20 20 22 47 65 74 56 61 6c 75 65 22 2c 20 6e 75    "GetValue", nu
ed30: 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20  ll, value), out 
ed40: 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20  complete);....  
ed50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
ed60: 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20  mplete)..       
ed70: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ed80: 76 61 6c 75 65 2e 56 61 6c 75 65 3b 0d 0a 20 20  value.Value;..  
ed90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
eda0: 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76     if (i >= Priv
edb0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
edc0: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
edd0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
ede0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
edf0: 65 79 49 6e 66 6f 2e 47 65 74 56 61 6c 75 65 28  eyInfo.GetValue(
ee00: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
ee10: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
ee20: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
ee30: 54 79 70 65 20 74 79 70 20 3d 20 47 65 74 53 51  Type typ = GetSQ
ee40: 4c 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c  LiteType(_flags,
ee50: 20 69 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   i);....        
ee60: 69 66 20 28 28 28 5f 66 6c 61 67 73 20 26 20 53  if (((_flags & S
ee70: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
ee80: 6c 61 67 73 2e 44 65 74 65 63 74 54 65 78 74 41  lags.DetectTextA
ee90: 66 66 69 6e 69 74 79 29 20 3d 3d 20 53 51 4c 69  ffinity) == SQLi
eea0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
eeb0: 73 2e 44 65 74 65 63 74 54 65 78 74 41 66 66 69  s.DetectTextAffi
eec0: 6e 69 74 79 29 20 26 26 0d 0a 20 20 20 20 20 20  nity) &&..      
eed0: 20 20 20 20 20 20 28 28 74 79 70 20 3d 3d 20 6e        ((typ == n
eee0: 75 6c 6c 29 20 7c 7c 20 28 74 79 70 2e 41 66 66  ull) || (typ.Aff
eef0: 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66  inity == TypeAff
ef00: 69 6e 69 74 79 2e 54 65 78 74 29 29 29 0d 0a 20  inity.Text))).. 
ef10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ef20: 20 20 20 20 20 20 74 79 70 20 3d 20 47 65 74 53        typ = GetS
ef30: 51 4c 69 74 65 54 79 70 65 28 0d 0a 20 20 20 20  QLiteType(..    
ef40: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 2c              typ,
ef50: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
ef60: 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f  t._sql.GetText(_
ef70: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
ef80: 20 69 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d   i));..        }
ef90: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69  ..        else i
efa0: 66 20 28 28 28 5f 66 6c 61 67 73 20 26 20 53 51  f (((_flags & SQ
efb0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
efc0: 61 67 73 2e 44 65 74 65 63 74 53 74 72 69 6e 67  ags.DetectString
efd0: 54 79 70 65 29 20 3d 3d 20 53 51 4c 69 74 65 43  Type) == SQLiteC
efe0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44  onnectionFlags.D
eff0: 65 74 65 63 74 53 74 72 69 6e 67 54 79 70 65 29  etectStringType)
f000: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
f010: 20 28 28 74 79 70 20 3d 3d 20 6e 75 6c 6c 29 20   ((typ == null) 
f020: 7c 7c 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  || SQLiteConvert
f030: 2e 49 73 53 74 72 69 6e 67 44 62 54 79 70 65 28  .IsStringDbType(
f040: 74 79 70 2e 54 79 70 65 29 29 29 0d 0a 20 20 20  typ.Type)))..   
f050: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f060: 20 20 20 20 74 79 70 20 3d 20 47 65 74 53 51 4c      typ = GetSQL
f070: 69 74 65 54 79 70 65 28 0d 0a 20 20 20 20 20 20  iteType(..      
f080: 20 20 20 20 20 20 20 20 20 20 74 79 70 2c 20 5f            typ, _
f090: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
f0a0: 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63  _sql.GetText(_ac
f0b0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
f0c0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
f0d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
f0e0: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
f0f0: 74 2e 5f 73 71 6c 2e 47 65 74 56 61 6c 75 65 28  t._sql.GetValue(
f100: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
f110: 2c 20 5f 66 6c 61 67 73 2c 20 69 2c 20 74 79 70  , _flags, i, typ
f120: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
f130: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
f140: 20 20 20 20 2f 2f 2f 20 52 65 74 72 65 69 76 65      /// Retreive
f150: 73 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  s the values of 
f160: 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 73  multiple columns
f170: 2c 20 75 70 20 74 6f 20 74 68 65 20 73 69 7a 65  , up to the size
f180: 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65 64   of the supplied
f190: 20 61 72 72 61 79 0d 0a 20 20 20 20 2f 2f 2f 20   array..    /// 
f1a0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
f1b0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
f1c0: 22 76 61 6c 75 65 73 22 3e 54 68 65 20 61 72 72  "values">The arr
f1d0: 61 79 20 74 6f 20 66 69 6c 6c 20 77 69 74 68 20  ay to fill with 
f1e0: 76 61 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20  values from the 
f1f0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 63  columns in the c
f200: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
f210: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
f220: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e  / <returns>The n
f230: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f240: 20 72 65 74 72 69 65 76 65 64 3c 2f 72 65 74 75   retrieved</retu
f250: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
f260: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
f270: 74 56 61 6c 75 65 73 28 6f 62 6a 65 63 74 5b 5d  tValues(object[]
f280: 20 76 61 6c 75 65 73 29 0d 0a 20 20 20 20 7b 0d   values)..    {.
f290: 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70  .      CheckDisp
f2a0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
f2b0: 20 69 6e 74 20 6e 4d 61 78 20 3d 20 46 69 65 6c   int nMax = Fiel
f2c0: 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 69  dCount;..      i
f2d0: 66 20 28 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68  f (values.Length
f2e0: 20 3c 20 6e 4d 61 78 29 20 6e 4d 61 78 20 3d 20   < nMax) nMax = 
f2f0: 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 3b 0d 0a  values.Length;..
f300: 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74  ..      for (int
f310: 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 6e 4d 61 78   n = 0; n < nMax
f320: 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d  ; n++)..      {.
f330: 0a 20 20 20 20 20 20 20 20 76 61 6c 75 65 73 5b  .        values[
f340: 6e 5d 20 3d 20 47 65 74 56 61 6c 75 65 28 6e 29  n] = GetValue(n)
f350: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
f360: 20 20 20 20 72 65 74 75 72 6e 20 6e 4d 61 78 3b      return nMax;
f370: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
f380: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
f390: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 61 20    /// Returns a 
f3a0: 63 6f 6c 6c 65 63 74 69 6f 6e 20 63 6f 6e 74 61  collection conta
f3b0: 69 6e 69 6e 67 20 61 6c 6c 20 74 68 65 20 63 6f  ining all the co
f3c0: 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 6e 64 20 76  lumn names and v
f3d0: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 0d 0a 20  alues for the.. 
f3e0: 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 72     /// current r
f3f0: 6f 77 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68  ow of data in th
f400: 65 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74  e current result
f410: 73 65 74 2c 20 69 66 20 61 6e 79 2e 20 20 49 66  set, if any.  If
f420: 20 74 68 65 72 65 20 69 73 20 6e 6f 0d 0a 20 20   there is no..  
f430: 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 72 6f    /// current ro
f440: 77 20 6f 72 20 6e 6f 20 63 75 72 72 65 6e 74 20  w or no current 
f450: 72 65 73 75 6c 74 73 65 74 2c 20 61 6e 20 65 78  resultset, an ex
f460: 63 65 70 74 69 6f 6e 20 6d 61 79 20 62 65 20 74  ception may be t
f470: 68 72 6f 77 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  hrown...    /// 
f480: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
f490: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
f4a0: 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6c 6c 65     /// The colle
f4b0: 63 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 69 6e 67  ction containing
f4c0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
f4d0: 20 61 6e 64 20 76 61 6c 75 65 20 69 6e 66 6f 72   and value infor
f4e0: 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 0d 0a  mation for the..
f4f0: 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20      /// current 
f500: 72 6f 77 20 6f 66 20 64 61 74 61 20 69 6e 20 74  row of data in t
f510: 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c  he current resul
f520: 74 73 65 74 20 6f 72 20 6e 75 6c 6c 20 69 66 20  tset or null if 
f530: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
f540: 0d 0a 20 20 20 20 2f 2f 2f 20 63 61 6e 6e 6f 74  ..    /// cannot
f550: 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0d 0a 20   be obtained... 
f560: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
f570: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 4e 61  >..    public Na
f580: 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63 74 69 6f  meValueCollectio
f590: 6e 20 47 65 74 56 61 6c 75 65 73 28 29 0d 0a 20  n GetValues().. 
f5a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
f5b0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
f5c0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
f5d0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20  activeStatement 
f5e0: 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 5f 61 63  == null) || (_ac
f5f0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
f600: 71 6c 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  ql == null))..  
f610: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
f620: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
f630: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
f640: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ....        int 
f650: 6e 4d 61 78 20 3d 20 50 72 69 76 61 74 65 56 69  nMax = PrivateVi
f660: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 3b  sibleFieldCount;
f670: 0d 0a 20 20 20 20 20 20 20 20 4e 61 6d 65 56 61  ..        NameVa
f680: 6c 75 65 43 6f 6c 6c 65 63 74 69 6f 6e 20 72 65  lueCollection re
f690: 73 75 6c 74 20 3d 20 6e 65 77 20 4e 61 6d 65 56  sult = new NameV
f6a0: 61 6c 75 65 43 6f 6c 6c 65 63 74 69 6f 6e 28 6e  alueCollection(n
f6b0: 4d 61 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Max);....       
f6c0: 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b   for (int n = 0;
f6d0: 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0d   n < nMax; n++).
f6e0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
f6f0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
f700: 61 6d 65 20 3d 20 5f 61 63 74 69 76 65 53 74 61  ame = _activeSta
f710: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75  tement._sql.Colu
f720: 6d 6e 4e 61 6d 65 28 5f 61 63 74 69 76 65 53 74  mnName(_activeSt
f730: 61 74 65 6d 65 6e 74 2c 20 6e 29 3b 0d 0a 20 20  atement, n);..  
f740: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f750: 20 76 61 6c 75 65 20 3d 20 5f 61 63 74 69 76 65   value = _active
f760: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
f770: 65 74 54 65 78 74 28 5f 61 63 74 69 76 65 53 74  etText(_activeSt
f780: 61 74 65 6d 65 6e 74 2c 20 6e 29 3b 0d 0a 0d 0a  atement, n);....
f790: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
f7a0: 6c 74 2e 41 64 64 28 6e 61 6d 65 2c 20 76 61 6c  lt.Add(name, val
f7b0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
f7c0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
f7d0: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d  n result;..    }
f7e0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
f7f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
f800: 65 74 75 72 6e 73 20 54 72 75 65 20 69 66 20 74  eturns True if t
f810: 68 65 20 72 65 73 75 6c 74 73 65 74 20 68 61 73  he resultset has
f820: 20 72 6f 77 73 20 74 68 61 74 20 63 61 6e 20 62   rows that can b
f830: 65 20 66 65 74 63 68 65 64 0d 0a 20 20 20 20 2f  e fetched..    /
f840: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
f850: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
f860: 64 65 20 62 6f 6f 6c 20 48 61 73 52 6f 77 73 0d  de bool HasRows.
f870: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
f880: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
f890: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
f8a0: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68  d();..        Ch
f8b0: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a  eckClosed();....
f8c0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
f8d0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
f8e0: 74 68 65 20 22 73 74 69 63 6b 79 22 20 66 6c 61  the "sticky" fla
f8f0: 67 20 68 61 73 20 62 65 65 6e 20 73 65 74 2c 20  g has been set, 
f900: 75 73 65 20 74 68 65 20 6e 65 77 20 62 65 68 61  use the new beha
f910: 76 69 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 2f  vior,..        /
f920: 2f 20 20 20 20 20 20 20 77 68 69 63 68 20 72 65  /       which re
f930: 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69  turns non-zero i
f940: 66 20 74 68 65 72 65 20 77 65 72 65 20 65 76 65  f there were eve
f950: 72 20 61 6e 79 20 72 6f 77 73 20 69 6e 0d 0a 20  r any rows in.. 
f960: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
f970: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 72  the associated r
f980: 65 73 75 6c 74 20 73 65 74 73 2e 20 20 47 65 6e  esult sets.  Gen
f990: 65 72 61 6c 6c 79 2c 20 74 68 69 73 20 66 6c 61  erally, this fla
f9a0: 67 20 69 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20  g is only..     
f9b0: 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73 65 66     //       usef
f9c0: 75 6c 20 77 68 65 6e 20 69 74 20 69 73 20 6e 65  ul when it is ne
f9d0: 63 65 73 73 61 72 79 20 74 6f 20 72 65 74 61 69  cessary to retai
f9e0: 6e 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  n compatibility 
f9f0: 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f  with..        //
fa00: 20 20 20 20 20 20 20 6f 74 68 65 72 20 41 44 4f         other ADO
fa10: 2e 4e 45 54 20 70 72 6f 76 69 64 65 72 73 20 74  .NET providers t
fa20: 68 61 74 20 75 73 65 20 74 68 65 73 65 20 73 61  hat use these sa
fa30: 6d 65 20 73 65 6d 61 6e 74 69 63 73 20 66 6f 72  me semantics for
fa40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
fa50: 20 20 20 74 68 65 20 48 61 73 52 6f 77 73 20 70     the HasRows p
fa60: 72 6f 70 65 72 74 79 2e 0d 0a 20 20 20 20 20 20  roperty...      
fa70: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 69 66    //..        if
fa80: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
fa90: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
faa0: 73 2e 53 74 69 63 6b 79 48 61 73 52 6f 77 73 29  s.StickyHasRows)
fab0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
fac0: 74 69 6f 6e 46 6c 61 67 73 2e 53 74 69 63 6b 79  tionFlags.Sticky
fad0: 48 61 73 52 6f 77 73 29 0d 0a 20 20 20 20 20 20  HasRows)..      
fae0: 20 20 20 20 72 65 74 75 72 6e 20 28 28 5f 72 65      return ((_re
faf0: 61 64 69 6e 67 53 74 61 74 65 20 21 3d 20 31 29  adingState != 1)
fb00: 20 7c 7c 20 28 5f 73 74 65 70 43 6f 75 6e 74 20   || (_stepCount 
fb10: 3e 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  > 0));....      
fb20: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
fb30: 20 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 74   NOTE: This is t
fb40: 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76  he default behav
fb50: 69 6f 72 2e 20 20 49 74 20 72 65 74 75 72 6e 73  ior.  It returns
fb60: 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69   non-zero only i
fb70: 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  f..        //   
fb80: 20 20 20 20 6d 6f 72 65 20 72 6f 77 73 20 61 72      more rows ar
fb90: 65 20 61 76 61 69 6c 61 62 6c 65 20 28 69 2e 65  e available (i.e
fba0: 2e 20 61 20 63 61 6c 6c 20 74 6f 20 74 68 65 20  . a call to the 
fbb0: 52 65 61 64 20 6d 65 74 68 6f 64 20 69 73 0d 0a  Read method is..
fbc0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
fbd0: 20 65 78 70 65 63 74 65 64 20 74 6f 20 73 75 63   expected to suc
fbe0: 63 65 65 64 29 2e 20 20 50 72 69 6f 72 20 74 6f  ceed).  Prior to
fbf0: 20 74 68 65 20 69 6e 74 72 6f 64 75 63 74 69 6f   the introductio
fc00: 6e 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  n of the..      
fc10: 20 20 2f 2f 20 20 20 20 20 20 20 22 73 74 69 63    //       "stic
fc20: 6b 79 22 20 66 6c 61 67 2c 20 74 68 69 73 20 69  ky" flag, this i
fc30: 73 20 68 6f 77 20 74 68 69 73 20 70 72 6f 70 65  s how this prope
fc40: 72 74 79 20 68 61 73 20 61 6c 77 61 79 73 20 77  rty has always w
fc50: 6f 72 6b 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  orked...        
fc60: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  //..        retu
fc70: 72 6e 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74  rn (_readingStat
fc80: 65 20 21 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20  e != 1);..      
fc90: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
fca0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
fcb0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54     /// Returns T
fcc0: 72 75 65 20 69 66 20 74 68 65 20 64 61 74 61 20  rue if the data 
fcd0: 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
fce0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
fcf0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
fd00: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49   override bool I
fd10: 73 43 6c 6f 73 65 64 0d 0a 20 20 20 20 7b 0d 0a  sClosed..    {..
fd20: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
fd30: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
fd40: 75 72 6e 20 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d  urn (_command ==
fd50: 20 6e 75 6c 6c 29 3b 20 7d 0d 0a 20 20 20 20 7d   null); }..    }
fd60: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
fd70: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
fd80: 65 74 75 72 6e 73 20 54 72 75 65 20 69 66 20 74  eturns True if t
fd90: 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c  he specified col
fda0: 75 6d 6e 20 69 73 20 6e 75 6c 6c 0d 0a 20 20 20  umn is null..   
fdb0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
fdc0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
fdd0: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
fde0: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
fdf0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
fe00: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65  // <returns>True
fe10: 20 6f 72 20 46 61 6c 73 65 3c 2f 72 65 74 75 72   or False</retur
fe20: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
fe30: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
fe40: 44 42 4e 75 6c 6c 28 69 6e 74 20 69 29 0d 0a 20  DBNull(int i).. 
fe50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
fe60: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
fe70: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
fe80: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
fe90: 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76     if (i >= Priv
fea0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
feb0: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
fec0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
fed0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
fee0: 65 79 49 6e 66 6f 2e 49 73 44 42 4e 75 6c 6c 28  eyInfo.IsDBNull(
fef0: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
ff00: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
ff10: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
ff20: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
ff30: 74 2e 5f 73 71 6c 2e 49 73 4e 75 6c 6c 28 5f 61  t._sql.IsNull(_a
ff40: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
ff50: 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  i);..    }....  
ff60: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
ff70: 0a 20 20 20 20 2f 2f 2f 20 4d 6f 76 65 73 20 74  .    /// Moves t
ff80: 6f 20 74 68 65 20 6e 65 78 74 20 72 65 73 75 6c  o the next resul
ff90: 74 73 65 74 20 69 6e 20 6d 75 6c 74 69 70 6c 65  tset in multiple
ffa0: 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 53   row-returning S
ffb0: 51 4c 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20  QL command...   
ffc0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
ffd0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
ffe0: 73 3e 54 72 75 65 20 69 66 20 74 68 65 20 63 6f  s>True if the co
fff0: 6d 6d 61 6e 64 20 77 61 73 20 73 75 63 63 65 73  mmand was succes
10000 73 66 75 6c 20 61 6e 64 20 61 20 6e 65 77 20 72  sful and a new r
10010 65 73 75 6c 74 73 65 74 20 69 73 20 61 76 61 69  esultset is avai
10020 6c 61 62 6c 65 2c 20 46 61 6c 73 65 20 6f 74 68  lable, False oth
10030 65 72 77 69 73 65 2e 3c 2f 72 65 74 75 72 6e 73  erwise.</returns
10040 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
10050 65 72 72 69 64 65 20 62 6f 6f 6c 20 4e 65 78 74  erride bool Next
10060 52 65 73 75 6c 74 28 29 0d 0a 20 20 20 20 7b 0d  Result()..    {.
10070 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70  .      CheckDisp
10080 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 43  osed();..      C
10090 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
100a0 20 20 20 20 20 69 66 20 28 5f 74 68 72 6f 77 4f       if (_throwO
100b0 6e 44 69 73 70 6f 73 65 64 29 20 53 51 4c 69 74  nDisposed) SQLit
100c0 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f  eCommand.Check(_
100d0 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20  command);....   
100e0 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
100f0 6e 74 20 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d  nt stmt = null;.
10100 0a 20 20 20 20 20 20 69 6e 74 20 66 69 65 6c 64  .      int field
10110 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 62 6f  Count;..      bo
10120 6f 6c 20 73 63 68 65 6d 61 4f 6e 6c 79 20 3d 20  ol schemaOnly = 
10130 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69  ((_commandBehavi
10140 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61  or & CommandBeha
10150 76 69 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29  vior.SchemaOnly)
10160 20 21 3d 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20   != 0);....     
10170 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d 0a 20   while (true).. 
10180 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10190 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c  if (stmt == null
101a0 20 26 26 20 5f 61 63 74 69 76 65 53 74 61 74 65   && _activeState
101b0 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 20 26 26 20  ment != null && 
101c0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
101d0 2e 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 20 26 26  ._sql != null &&
101e0 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
101f0 74 2e 5f 73 71 6c 2e 49 73 4f 70 65 6e 28 29 29  t._sql.IsOpen())
10200 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
10210 20 20 20 20 20 20 20 2f 2f 20 52 65 73 65 74 20         // Reset 
10220 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 2d 65  the previously-e
10230 78 65 63 75 74 65 64 20 73 74 61 74 65 6d 65 6e  xecuted statemen
10240 74 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  t..          if 
10250 28 21 73 63 68 65 6d 61 4f 6e 6c 79 29 20 5f 61  (!schemaOnly) _a
10260 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
10270 73 71 6c 2e 52 65 73 65 74 28 5f 61 63 74 69 76  sql.Reset(_activ
10280 65 53 74 61 74 65 6d 65 6e 74 29 3b 0d 0a 0d 0a  eStatement);....
10290 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20            // If 
102a0 77 65 27 72 65 20 6f 6e 6c 79 20 73 75 70 70 6f  we're only suppo
102b0 73 65 64 20 74 6f 20 72 65 74 75 72 6e 20 61 20  sed to return a 
102c0 73 69 6e 67 6c 65 20 72 6f 77 73 65 74 2c 20 73  single rowset, s
102d0 74 65 70 20 74 68 72 6f 75 67 68 20 61 6c 6c 20  tep through all 
102e0 72 65 6d 61 69 6e 69 6e 67 20 73 74 61 74 65 6d  remaining statem
102f0 65 6e 74 73 20 6f 6e 63 65 20 75 6e 74 69 6c 0d  ents once until.
10300 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68  .          // th
10310 65 79 20 61 72 65 20 61 6c 6c 20 64 6f 6e 65 20  ey are all done 
10320 61 6e 64 20 72 65 74 75 72 6e 20 66 61 6c 73 65  and return false
10330 20 74 6f 20 69 6e 64 69 63 61 74 65 20 6e 6f 20   to indicate no 
10340 6d 6f 72 65 20 72 65 73 75 6c 74 73 65 74 73 20  more resultsets 
10350 65 78 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20  exist...        
10360 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42    if ((_commandB
10370 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e  ehavior & Comman
10380 64 42 65 68 61 76 69 6f 72 2e 53 69 6e 67 6c 65  dBehavior.Single
10390 52 65 73 75 6c 74 29 20 21 3d 20 30 29 0d 0a 20  Result) != 0).. 
103a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
103b0 20 20 20 20 20 20 20 20 66 6f 72 20 28 3b 20 3b          for (; ;
103c0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
103d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
103e0 20 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64   stmt = _command
103f0 2e 47 65 74 53 74 61 74 65 6d 65 6e 74 28 5f 61  .GetStatement(_a
10400 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
10410 64 65 78 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20  dex + 1);..     
10420 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d           if (stm
10430 74 20 3d 3d 20 6e 75 6c 6c 29 20 62 72 65 61 6b  t == null) break
10440 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10450 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
10460 74 49 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20  tIndex++;....   
10470 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
10480 73 63 68 65 6d 61 4f 6e 6c 79 20 26 26 20 73 74  schemaOnly && st
10490 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28 73 74 6d  mt._sql.Step(stm
104a0 74 29 29 20 5f 73 74 65 70 43 6f 75 6e 74 2b 2b  t)) _stepCount++
104b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
104c0 20 69 66 20 28 73 74 6d 74 2e 5f 73 71 6c 2e 43   if (stmt._sql.C
104d0 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29  olumnCount(stmt)
104e0 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
104f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10500 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 68 61           int cha
10510 6e 67 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20  nges = 0;..     
10520 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
10530 72 65 61 64 4f 6e 6c 79 20 3d 20 66 61 6c 73 65  readOnly = false
10540 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10550 20 20 20 69 66 20 28 73 74 6d 74 2e 54 72 79 47     if (stmt.TryG
10560 65 74 43 68 61 6e 67 65 73 28 72 65 66 20 63 68  etChanges(ref ch
10570 61 6e 67 65 73 2c 20 72 65 66 20 72 65 61 64 4f  anges, ref readO
10580 6e 6c 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nly))..         
10590 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
105a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
105b0 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20  !readOnly)..    
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
105d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
105e0 20 20 20 20 20 69 66 20 28 5f 72 6f 77 73 41 66       if (_rowsAf
105f0 66 65 63 74 65 64 20 3d 3d 20 2d 31 29 20 5f 72  fected == -1) _r
10600 6f 77 73 41 66 66 65 63 74 65 64 20 3d 20 30 3b  owsAffected = 0;
10610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10620 20 20 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63        _rowsAffec
10630 74 65 64 20 2b 3d 20 63 68 61 6e 67 65 73 3b 0d  ted += changes;.
10640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10650 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10660 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
10670 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
10690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
106a0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
106b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
106c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
106d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
106e0 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61       if (!schema
106f0 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f 73 71 6c 2e  Only) stmt._sql.
10700 52 65 73 65 74 28 73 74 6d 74 29 3b 20 2f 2f 20  Reset(stmt); // 
10710 47 6f 74 74 61 20 72 65 73 65 74 20 61 66 74 65  Gotta reset afte
10720 72 20 65 76 65 72 79 20 73 74 65 70 20 74 6f 20  r every step to 
10730 72 65 6c 65 61 73 65 20 61 6e 79 20 6c 6f 63 6b  release any lock
10740 73 20 61 6e 64 20 73 75 63 68 21 0d 0a 20 20 20  s and such!..   
10750 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10760 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
10770 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
10780 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
10790 0a 20 20 20 20 20 20 20 20 2f 2f 20 47 65 74 20  .        // Get 
107a0 74 68 65 20 6e 65 78 74 20 73 74 61 74 65 6d 65  the next stateme
107b0 6e 74 20 74 6f 20 65 78 65 63 75 74 65 0d 0a 20  nt to execute.. 
107c0 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20 5f 63         stmt = _c
107d0 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61 74 65 6d  ommand.GetStatem
107e0 65 6e 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ent(_activeState
107f0 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31 29 3b 0d  mentIndex + 1);.
10800 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66  ...        // If
10810 20 77 65 27 76 65 20 72 65 61 63 68 65 64 20 74   we've reached t
10820 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74  he end of the st
10830 61 74 65 6d 65 6e 74 73 2c 20 72 65 74 75 72 6e  atements, return
10840 20 66 61 6c 73 65 2c 20 6e 6f 20 6d 6f 72 65 20   false, no more 
10850 72 65 73 75 6c 74 73 65 74 73 0d 0a 20 20 20 20  resultsets..    
10860 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d 3d 20      if (stmt == 
10870 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
10880 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
10890 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20  ..        // If 
108a0 77 65 20 77 65 72 65 20 6f 6e 20 61 20 63 75 72  we were on a cur
108b0 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 2c 20  rent resultset, 
108c0 73 65 74 20 74 68 65 20 73 74 61 74 65 20 74 6f  set the state to
108d0 20 22 64 6f 6e 65 20 72 65 61 64 69 6e 67 22 20   "done reading" 
108e0 66 6f 72 20 69 74 0d 0a 20 20 20 20 20 20 20 20  for it..        
108f0 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74  if (_readingStat
10900 65 20 3c 20 31 29 0d 0a 20 20 20 20 20 20 20 20  e < 1)..        
10910 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20    _readingState 
10920 3d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 1;....        
10930 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
10940 49 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20  Index++;....    
10950 20 20 20 20 66 69 65 6c 64 43 6f 75 6e 74 20 3d      fieldCount =
10960 20 73 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d   stmt._sql.Colum
10970 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d  nCount(stmt);...
10980 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 74  .        // If t
10990 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  he statement is 
109a0 6e 6f 74 20 61 20 73 65 6c 65 63 74 20 73 74 61  not a select sta
109b0 74 65 6d 65 6e 74 20 6f 72 20 77 65 27 72 65 20  tement or we're 
109c0 6e 6f 74 20 72 65 74 72 69 65 76 69 6e 67 20 73  not retrieving s
109d0 63 68 65 6d 61 20 6f 6e 6c 79 2c 20 74 68 65 6e  chema only, then
109e0 20 70 65 72 66 6f 72 6d 20 74 68 65 20 69 6e 69   perform the ini
109f0 74 69 61 6c 20 73 74 65 70 0d 0a 20 20 20 20 20  tial step..     
10a00 20 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e     if (!schemaOn
10a10 6c 79 20 7c 7c 20 28 66 69 65 6c 64 43 6f 75 6e  ly || (fieldCoun
10a20 74 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20  t == 0))..      
10a30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69    {..          i
10a40 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 20 26  f (!schemaOnly &
10a50 26 20 73 74 6d 74 2e 5f 73 71 6c 2e 53 74 65 70  & stmt._sql.Step
10a60 28 73 74 6d 74 29 29 0d 0a 20 20 20 20 20 20 20  (stmt))..       
10a70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10a80 20 20 5f 73 74 65 70 43 6f 75 6e 74 2b 2b 3b 0d    _stepCount++;.
10a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 65  .            _re
10aa0 61 64 69 6e 67 53 74 61 74 65 20 3d 20 2d 31 3b  adingState = -1;
10ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
10ac0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
10ad0 20 28 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d 20   (fieldCount == 
10ae0 30 29 20 2f 2f 20 4e 6f 20 72 6f 77 73 20 72 65  0) // No rows re
10af0 74 75 72 6e 65 64 2c 20 69 66 20 66 69 65 6c 64  turned, if field
10b00 43 6f 75 6e 74 20 69 73 20 7a 65 72 6f 2c 20 73  Count is zero, s
10b10 6b 69 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  kip to the next 
10b20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20  statement..     
10b30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10b40 20 20 20 20 69 6e 74 20 63 68 61 6e 67 65 73 20      int changes 
10b50 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
10b60 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 20    bool readOnly 
10b70 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
10b80 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 2e 54        if (stmt.T
10b90 72 79 47 65 74 43 68 61 6e 67 65 73 28 72 65 66  ryGetChanges(ref
10ba0 20 63 68 61 6e 67 65 73 2c 20 72 65 66 20 72 65   changes, ref re
10bb0 61 64 4f 6e 6c 79 29 29 0d 0a 20 20 20 20 20 20  adOnly))..      
10bc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10bd0 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61 64         if (!read
10be0 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20  Only)..         
10bf0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10c00 20 20 20 20 20 20 20 20 69 66 20 28 5f 72 6f 77          if (_row
10c10 73 41 66 66 65 63 74 65 64 20 3d 3d 20 2d 31 29  sAffected == -1)
10c20 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d   _rowsAffected =
10c30 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
10c40 20 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63 74       _rowsAffect
10c50 65 64 20 2b 3d 20 63 68 61 6e 67 65 73 3b 0d 0a  ed += changes;..
10c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
10c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
10c80 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
10c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
10ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
10cb0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
10cc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
10cd0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73 63           if (!sc
10ce0 68 65 6d 61 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f  hemaOnly) stmt._
10cf0 73 71 6c 2e 52 65 73 65 74 28 73 74 6d 74 29 3b  sql.Reset(stmt);
10d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
10d10 6e 74 69 6e 75 65 3b 20 2f 2f 20 53 6b 69 70 20  ntinue; // Skip 
10d20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 61 6e 64  this command and
10d30 20 6d 6f 76 65 20 74 6f 20 74 68 65 20 6e 65 78   move to the nex
10d40 74 2c 20 69 74 20 77 61 73 20 6e 6f 74 20 61 20  t, it was not a 
10d50 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 72 65  row-returning re
10d60 73 75 6c 74 73 65 74 0d 0a 20 20 20 20 20 20 20  sultset..       
10d70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10d80 65 6c 73 65 20 2f 2f 20 4e 6f 20 72 6f 77 73 2c  else // No rows,
10d90 20 66 69 65 6c 64 43 6f 75 6e 74 20 69 73 20 6e   fieldCount is n
10da0 6f 6e 2d 7a 65 72 6f 20 73 6f 20 73 74 6f 70 20  on-zero so stop 
10db0 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  here..          
10dc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  {..            _
10dd0 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31  readingState = 1
10de0 3b 20 2f 2f 20 54 68 69 73 20 63 6f 6d 6d 61 6e  ; // This comman
10df0 64 20 72 65 74 75 72 6e 65 64 20 63 6f 6c 75 6d  d returned colum
10e00 6e 73 20 62 75 74 20 6e 6f 20 72 6f 77 73 2c 20  ns but no rows, 
10e10 73 6f 20 72 65 74 75 72 6e 20 74 72 75 65 2c 20  so return true, 
10e20 62 75 74 20 48 61 73 52 6f 77 73 20 3d 20 66 61  but HasRows = fa
10e30 6c 73 65 20 61 6e 64 20 52 65 61 64 28 29 20 72  lse and Read() r
10e40 65 74 75 72 6e 73 20 66 61 6c 73 65 0d 0a 20 20  eturns false..  
10e50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
10e60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
10e70 2f 2f 20 41 68 68 2c 20 77 65 20 66 6f 75 6e 64  // Ahh, we found
10e80 20 61 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67   a row-returning
10e90 20 72 65 73 75 6c 74 73 65 74 20 65 6c 69 67 69   resultset eligi
10ea0 62 6c 65 20 74 6f 20 62 65 20 72 65 74 75 72 6e  ble to be return
10eb0 65 64 21 0d 0a 20 20 20 20 20 20 20 20 5f 61 63  ed!..        _ac
10ec0 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d 20  tiveStatement = 
10ed0 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 5f  stmt;..        _
10ee0 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20 66 69 65  fieldCount = fie
10ef0 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20  ldCount;..      
10f00 20 20 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20    _fieldIndexes 
10f10 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
10f20 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 28 53 74  <string, int>(St
10f30 72 69 6e 67 43 6f 6d 70 61 72 65 72 2e 4f 72 64  ringComparer.Ord
10f40 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 3b  inalIgnoreCase);
10f50 0d 0a 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64  ..        _field
10f60 54 79 70 65 41 72 72 61 79 20 3d 20 6e 65 77 20  TypeArray = new 
10f70 53 51 4c 69 74 65 54 79 70 65 5b 50 72 69 76 61  SQLiteType[Priva
10f80 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
10f90 75 6e 74 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt];....       
10fa0 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65   if ((_commandBe
10fb0 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64  havior & Command
10fc0 42 65 68 61 76 69 6f 72 2e 4b 65 79 49 6e 66 6f  Behavior.KeyInfo
10fd0 29 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) != 0)..       
10fe0 20 20 20 4c 6f 61 64 4b 65 79 49 6e 66 6f 28 29     LoadKeyInfo()
10ff0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
11000 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
11010 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
11020 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
11030 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
11040 68 6f 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20  hod attempts to 
11050 71 75 65 72 79 20 74 68 65 20 64 61 74 61 62 61  query the databa
11060 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
11070 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20  sociated with.. 
11080 20 20 20 2f 2f 2f 20 74 68 65 20 64 61 74 61 20     /// the data 
11090 72 65 61 64 65 72 20 69 6e 20 75 73 65 2e 20 20  reader in use.  
110a0 49 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  If the underlyin
110b0 67 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 63 6f 6e  g command or con
110c0 6e 65 63 74 69 6f 6e 20 69 73 0d 0a 20 20 20 20  nection is..    
110d0 2f 2f 2f 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c  /// unavailable,
110e0 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20 77 69   a null value wi
110f0 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0d  ll be returned..
11100 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
11110 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
11120 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
11130 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f  The connection o
11140 62 6a 65 63 74 20 2d 4f 52 2d 20 6e 75 6c 6c 20  bject -OR- null 
11150 69 66 20 69 74 20 69 73 20 75 6e 61 76 61 69 6c  if it is unavail
11160 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  able...    /// <
11170 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
11180 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53  nternal static S
11190 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
111a0 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a  GetConnection(..
111b0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
111c0 74 61 52 65 61 64 65 72 20 64 61 74 61 52 65 61  taReader dataRea
111d0 64 65 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  der..        )..
111e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
111f0 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
11200 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
11210 61 74 61 52 65 61 64 65 72 20 21 3d 20 6e 75 6c  ataReader != nul
11220 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
11230 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11240 20 20 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64     SQLiteCommand
11250 20 63 6f 6d 6d 61 6e 64 20 3d 20 64 61 74 61 52   command = dataR
11260 65 61 64 65 72 2e 5f 63 6f 6d 6d 61 6e 64 3b 0d  eader._command;.
11270 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11280 20 20 20 69 66 20 28 63 6f 6d 6d 61 6e 64 20 21     if (command !
11290 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
112a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
112b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112c0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
112d0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 63 6f   connection = co
112e0 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
112f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11300 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
11310 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29  nection != null)
11320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11330 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11340 20 63 6f 6e 6e 65 63 74 69 6f 6e 3b 0d 0a 20 20   connection;..  
11350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11360 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11370 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11380 20 20 20 63 61 74 63 68 20 28 4f 62 6a 65 63 74     catch (Object
11390 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
113a0 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  n)..        {.. 
113b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
113c0 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
113d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
113e0 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
113f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
11400 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
11410 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20  / Retrieves the 
11420 53 51 4c 69 74 65 54 79 70 65 20 66 6f 72 20 61  SQLiteType for a
11430 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 20 61 6e   given column an
11440 64 20 72 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20  d row value...  
11450 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
11460 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
11470 20 6e 61 6d 65 3d 22 6f 6c 64 54 79 70 65 22 3e   name="oldType">
11480 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72  ..    /// The or
11490 69 67 69 6e 61 6c 20 53 51 4c 69 74 65 54 79 70  iginal SQLiteTyp
114a0 65 20 73 74 72 75 63 74 75 72 65 2c 20 62 61 73  e structure, bas
114b0 65 64 20 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 63  ed only on the c
114c0 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  olumn...    /// 
114d0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
114e0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
114f0 65 78 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ext">..    /// T
11500 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65  he textual value
11510 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 66   of the column f
11520 6f 72 20 61 20 67 69 76 65 6e 20 72 6f 77 2e 0d  or a given row..
11530 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
11540 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
11550 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  rns>..    /// Th
11560 65 20 53 51 4c 69 74 65 54 79 70 65 20 73 74 72  e SQLiteType str
11570 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f  ucture...    ///
11580 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
11590 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 54   private SQLiteT
115a0 79 70 65 20 47 65 74 53 51 4c 69 74 65 54 79 70  ype GetSQLiteTyp
115b0 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e(..        SQLi
115c0 74 65 54 79 70 65 20 6f 6c 64 54 79 70 65 2c 20  teType oldType, 
115d0 2f 2a 20 50 41 53 53 2d 54 48 52 4f 55 47 48 20  /* PASS-THROUGH 
115e0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
115f0 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20 20 20  ng text..       
11600 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
11610 20 20 20 69 66 20 28 53 51 4c 69 74 65 43 6f 6e     if (SQLiteCon
11620 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 4e 75  vert.LooksLikeNu
11630 6c 6c 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20  ll(text))..     
11640 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
11650 77 20 53 51 4c 69 74 65 54 79 70 65 28 54 79 70  w SQLiteType(Typ
11660 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c 20  eAffinity.Null, 
11670 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 3b 0d  DbType.Object);.
11680 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ...        if (S
11690 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f  QLiteConvert.Loo
116a0 6b 73 4c 69 6b 65 49 6e 74 36 34 28 74 65 78 74  ksLikeInt64(text
116b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
116c0 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74  return new SQLit
116d0 65 54 79 70 65 28 54 79 70 65 41 66 66 69 6e 69  eType(TypeAffini
116e0 74 79 2e 49 6e 74 36 34 2c 20 44 62 54 79 70 65  ty.Int64, DbType
116f0 2e 49 6e 74 36 34 29 3b 0d 0a 0d 0a 20 20 20 20  .Int64);....    
11700 20 20 20 20 69 66 20 28 53 51 4c 69 74 65 43 6f      if (SQLiteCo
11710 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 44  nvert.LooksLikeD
11720 6f 75 62 6c 65 28 74 65 78 74 29 29 0d 0a 20 20  ouble(text))..  
11730 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11740 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 28   new SQLiteType(
11750 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
11760 62 6c 65 2c 20 44 62 54 79 70 65 2e 44 6f 75 62  ble, DbType.Doub
11770 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le);....        
11780 69 66 20 28 28 5f 61 63 74 69 76 65 53 74 61 74  if ((_activeStat
11790 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 20 26  ement != null) &
117a0 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  &..            S
117b0 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f  QLiteConvert.Loo
117c0 6b 73 4c 69 6b 65 44 61 74 65 54 69 6d 65 28 5f  ksLikeDateTime(_
117d0 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
117e0 5f 73 71 6c 2c 20 74 65 78 74 29 29 0d 0a 20 20  _sql, text))..  
117f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11800 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
11810 53 51 4c 69 74 65 54 79 70 65 28 54 79 70 65 41  SQLiteType(TypeA
11820 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65  ffinity.DateTime
11830 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d  , DbType.DateTim
11840 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
11850 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
11860 20 6f 6c 64 54 79 70 65 3b 0d 0a 20 20 20 20 7d   oldType;..    }
11870 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
11880 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
11890 65 74 72 69 65 76 65 73 20 74 68 65 20 53 51 4c  etrieves the SQL
118a0 69 74 65 54 79 70 65 20 66 6f 72 20 61 20 67 69  iteType for a gi
118b0 76 65 6e 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20  ven column, and 
118c0 63 61 63 68 65 73 20 69 74 20 74 6f 20 61 76 6f  caches it to avo
118d0 69 64 20 72 65 70 65 74 65 74 69 76 65 20 69 6e  id repetetive in
118e0 74 65 72 6f 70 20 63 61 6c 6c 73 2e 0d 0a 20 20  terop calls...  
118f0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
11900 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
11910 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68   name="flags">Th
11920 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
11930 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65  ed with the pare
11940 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  nt connection ob
11950 6a 65 63 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  ject.</param>.. 
11960 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
11970 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
11980 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
11990 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
119a0 20 3c 72 65 74 75 72 6e 73 3e 41 20 53 51 4c 69   <returns>A SQLi
119b0 74 65 54 79 70 65 20 73 74 72 75 63 74 75 72 65  teType structure
119c0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
119d0 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 54 79  private SQLiteTy
119e0 70 65 20 47 65 74 53 51 4c 69 74 65 54 79 70 65  pe GetSQLiteType
119f0 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
11a00 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
11a10 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
11a20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65 20       SQLiteType 
11a30 74 79 70 20 3d 20 5f 66 69 65 6c 64 54 79 70 65  typ = _fieldType
11a40 41 72 72 61 79 5b 69 5d 3b 0d 0a 0d 0a 20 20 20  Array[i];....   
11a50 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
11a60 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
11a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
11a80 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 69 73   Initialize this
11a90 20 63 6f 6c 75 6d 6e 27 73 20 66 69 65 6c 64 20   column's field 
11aa0 74 79 70 65 20 69 6e 73 74 61 6e 63 65 0d 0a 20  type instance.. 
11ab0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 20 3d             typ =
11ac0 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79   _fieldTypeArray
11ad0 5b 69 5d 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  [i] = new SQLite
11ae0 54 79 70 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  Type();..       
11af0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
11b00 20 49 66 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69   If not initiali
11b10 7a 65 64 2c 20 74 68 65 6e 20 66 65 74 63 68 20  zed, then fetch 
11b20 74 68 65 20 64 65 63 6c 61 72 65 64 20 63 6f 6c  the declared col
11b30 75 6d 6e 20 64 61 74 61 74 79 70 65 20 61 6e 64  umn datatype and
11b40 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6e 76   attempt to conv
11b50 65 72 74 20 69 74 0d 0a 20 20 20 20 20 20 20 20  ert it..        
11b60 2f 2f 20 74 6f 20 61 20 6b 6e 6f 77 6e 20 44 62  // to a known Db
11b70 54 79 70 65 2e 0d 0a 20 20 20 20 20 20 20 20 69  Type...        i
11b80 66 20 28 74 79 70 2e 41 66 66 69 6e 69 74 79 20  f (typ.Affinity 
11b90 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  == TypeAffinity.
11ba0 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 29 0d 0a  Uninitialized)..
11bb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11bc0 20 20 20 20 20 20 20 74 79 70 2e 54 79 70 65 20         typ.Type 
11bd0 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  = SQLiteConvert.
11be0 54 79 70 65 4e 61 6d 65 54 6f 44 62 54 79 70 65  TypeNameToDbType
11bf0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11c00 20 20 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e     GetConnection
11c10 28 74 68 69 73 29 2c 20 5f 61 63 74 69 76 65 53  (this), _activeS
11c20 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f  tatement._sql.Co
11c30 6c 75 6d 6e 54 79 70 65 28 0d 0a 20 20 20 20 20  lumnType(..     
11c40 20 20 20 20 20 20 20 20 20 20 20 5f 61 63 74 69             _acti
11c50 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20  veStatement, i, 
11c60 72 65 66 20 74 79 70 2e 41 66 66 69 6e 69 74 79  ref typ.Affinity
11c70 29 2c 20 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20  ), flags);..    
11c80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
11c90 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lse..        {..
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 2e              typ.
11cb0 41 66 66 69 6e 69 74 79 20 3d 20 5f 61 63 74 69  Affinity = _acti
11cc0 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
11cd0 2e 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  .ColumnAffinity(
11ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11cf0 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65    _activeStateme
11d00 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 20 20 20  nt, i);..       
11d10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
11d20 74 75 72 6e 20 74 79 70 3b 0d 0a 20 20 20 20 7d  turn typ;..    }
11d30 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
11d40 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
11d50 65 61 64 73 20 74 68 65 20 6e 65 78 74 20 72 6f  eads the next ro
11d60 77 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c  w from the resul
11d70 74 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  tset..    /// </
11d80 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
11d90 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20  / <returns>True 
11da0 69 66 20 61 20 6e 65 77 20 72 6f 77 20 77 61 73  if a new row was
11db0 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 6c 6f   successfully lo
11dc0 61 64 65 64 20 61 6e 64 20 69 73 20 72 65 61 64  aded and is read
11dd0 79 20 66 6f 72 20 70 72 6f 63 65 73 73 69 6e 67  y for processing
11de0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
11df0 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
11e00 62 6f 6f 6c 20 52 65 61 64 28 29 0d 0a 20 20 20  bool Read()..   
11e10 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44   {..      CheckD
11e20 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
11e30 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b    CheckClosed();
11e40 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 74 68 72  ..      if (_thr
11e50 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29 20 53 51  owOnDisposed) SQ
11e60 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63  LiteCommand.Chec
11e70 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a  k(_command);....
11e80 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d        if ((_comm
11e90 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f  andBehavior & Co
11ea0 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 63  mmandBehavior.Sc
11eb0 68 65 6d 61 4f 6e 6c 79 29 20 21 3d 20 30 29 0d  hemaOnly) != 0).
11ec0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
11ed0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
11ee0 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74  if (_readingStat
11ef0 65 20 3d 3d 20 2d 31 29 20 2f 2f 20 46 69 72 73  e == -1) // Firs
11f00 74 20 73 74 65 70 20 77 61 73 20 61 6c 72 65 61  t step was alrea
11f10 64 79 20 64 6f 6e 65 20 61 74 20 74 68 65 20 4e  dy done at the N
11f20 65 78 74 52 65 73 75 6c 74 28 29 20 6c 65 76 65  extResult() leve
11f30 6c 2c 20 73 6f 20 64 6f 6e 27 74 20 73 74 65 70  l, so don't step
11f40 20 61 67 61 69 6e 2c 20 6a 75 73 74 20 72 65 74   again, just ret
11f50 75 72 6e 20 74 72 75 65 2e 0d 0a 20 20 20 20 20  urn true...     
11f60 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 72 65 61   {..        _rea
11f70 64 69 6e 67 53 74 61 74 65 20 3d 20 30 3b 0d 0a  dingState = 0;..
11f80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
11f90 72 75 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  rue;..      }.. 
11fa0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 72       else if (_r
11fb0 65 61 64 69 6e 67 53 74 61 74 65 20 3d 3d 20 30  eadingState == 0
11fc0 29 20 2f 2f 20 41 63 74 69 76 65 6c 79 20 72 65  ) // Actively re
11fd0 61 64 69 6e 67 20 72 6f 77 73 0d 0a 20 20 20 20  ading rows..    
11fe0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20    {..        // 
11ff0 44 6f 6e 27 74 20 72 65 61 64 20 61 20 6e 65 77  Don't read a new
12000 20 72 6f 77 20 69 66 20 74 68 65 20 63 6f 6d 6d   row if the comm
12010 61 6e 64 20 62 65 68 61 76 69 6f 72 20 64 69 63  and behavior dic
12020 74 61 74 65 73 20 53 69 6e 67 6c 65 52 6f 77 2e  tates SingleRow.
12030 20 20 57 65 27 76 65 20 61 6c 72 65 61 64 79 20    We've already 
12040 72 65 61 64 20 74 68 65 20 66 69 72 73 74 20 72  read the first r
12050 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ow...        if 
12060 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69  ((_commandBehavi
12070 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61  or & CommandBeha
12080 76 69 6f 72 2e 53 69 6e 67 6c 65 52 6f 77 29 20  vior.SingleRow) 
12090 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 7b  == 0)..        {
120a0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
120b0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
120c0 2e 5f 73 71 6c 2e 53 74 65 70 28 5f 61 63 74 69  ._sql.Step(_acti
120d0 76 65 53 74 61 74 65 6d 65 6e 74 29 20 3d 3d 20  veStatement) == 
120e0 74 72 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20  true)..         
120f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12100 5f 73 74 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 0d  _stepCount++;...
12110 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
12120 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c  (_keyInfo != nul
12130 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12140 20 20 5f 6b 65 79 49 6e 66 6f 2e 52 65 73 65 74    _keyInfo.Reset
12150 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
12160 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
12170 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
12180 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12190 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65     _readingState
121a0 20 3d 20 31 3b 20 2f 2f 20 46 69 6e 69 73 68 65   = 1; // Finishe
121b0 64 20 72 65 61 64 69 6e 67 20 72 6f 77 73 0d 0a  d reading rows..
121c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
121d0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
121e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
121f0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
12200 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
12210 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 61  number of rows a
12220 66 66 65 63 74 65 64 20 62 79 20 74 68 65 20 73  ffected by the s
12230 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 65  tatement being e
12240 78 65 63 75 74 65 64 2e 0d 0a 20 20 20 20 2f 2f  xecuted...    //
12250 2f 20 54 68 65 20 76 61 6c 75 65 20 72 65 74 75  / The value retu
12260 72 6e 65 64 20 6d 61 79 20 6e 6f 74 20 62 65 20  rned may not be 
12270 61 63 63 75 72 61 74 65 20 66 6f 72 20 44 44 4c  accurate for DDL
12280 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6c   statements.  Al
12290 73 6f 2c 20 69 74 0d 0a 20 20 20 20 2f 2f 2f 20  so, it..    /// 
122a0 77 69 6c 6c 20 62 65 20 2d 31 20 66 6f 72 20 61  will be -1 for a
122b0 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  ny statement tha
122c0 74 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  t does not modif
122d0 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  y the database (
122e0 65 2e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 53 45  e.g...    /// SE
122f0 4c 45 43 54 29 2e 20 20 49 66 20 61 6e 20 6f 74  LECT).  If an ot
12300 68 65 72 77 69 73 65 20 72 65 61 64 2d 6f 6e 6c  herwise read-onl
12310 79 20 73 74 61 74 65 6d 65 6e 74 20 6d 6f 64 69  y statement modi
12320 66 69 65 73 20 74 68 65 20 64 61 74 61 62 61 73  fies the databas
12330 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 64 69 72  e..    /// indir
12340 65 63 74 6c 79 20 28 65 2e 67 2e 20 76 69 61 20  ectly (e.g. via 
12350 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
12360 6f 72 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20  or user-defined 
12370 66 75 6e 63 74 69 6f 6e 29 2c 20 74 68 65 0d 0a  function), the..
12380 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 72 65      /// value re
12390 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65 66 69  turned is undefi
123a0 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ned...    /// </
123b0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
123c0 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e  blic override in
123d0 74 20 52 65 63 6f 72 64 73 41 66 66 65 63 74 65  t RecordsAffecte
123e0 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  d..    {..      
123f0 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
12400 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 5f 72  sed(); return _r
12410 6f 77 73 41 66 66 65 63 74 65 64 3b 20 7d 0d 0a  owsAffected; }..
12420 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
12430 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
12440 2f 2f 2f 20 49 6e 64 65 78 65 72 20 74 6f 20 72  /// Indexer to r
12450 65 74 72 69 65 76 65 20 64 61 74 61 20 66 72 6f  etrieve data fro
12460 6d 20 61 20 63 6f 6c 75 6d 6e 20 67 69 76 65 6e  m a column given
12470 20 69 74 73 20 6e 61 6d 65 0d 0a 20 20 20 20 2f   its name..    /
12480 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
12490 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
124a0 6d 65 3d 22 6e 61 6d 65 22 3e 54 68 65 20 6e 61  me="name">The na
124b0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  me of the column
124c0 20 74 6f 20 72 65 74 72 69 65 76 65 20 64 61 74   to retrieve dat
124d0 61 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20  a for</param>.. 
124e0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
124f0 54 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  The value contai
12500 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ned in the colum
12510 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  n</returns>..   
12520 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
12530 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 73 74 72   object this[str
12540 69 6e 67 20 6e 61 6d 65 5d 0d 0a 20 20 20 20 7b  ing name]..    {
12550 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43 68  ..      get { Ch
12560 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
12570 65 74 75 72 6e 20 47 65 74 56 61 6c 75 65 28 47  eturn GetValue(G
12580 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d 65 29 29  etOrdinal(name))
12590 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ; }..    }....  
125a0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
125b0 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72  .    /// Indexer
125c0 20 74 6f 20 72 65 74 72 69 65 76 65 20 64 61 74   to retrieve dat
125d0 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20  a from a column 
125e0 67 69 76 65 6e 20 69 74 73 20 69 0d 0a 20 20 20  given its i..   
125f0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
12600 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
12610 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
12620 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
12630 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
12640 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
12650 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
12660 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72  in the column</r
12670 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
12680 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a  lic override obj
12690 65 63 74 20 74 68 69 73 5b 69 6e 74 20 69 5d 0d  ect this[int i].
126a0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
126b0 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
126c0 64 28 29 3b 20 72 65 74 75 72 6e 20 47 65 74 56  d(); return GetV
126d0 61 6c 75 65 28 69 29 3b 20 7d 0d 0a 20 20 20 20  alue(i); }..    
126e0 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65  }....    private
126f0 20 76 6f 69 64 20 4c 6f 61 64 4b 65 79 49 6e 66   void LoadKeyInf
12700 6f 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  o()..    {..    
12710 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f      if (_keyInfo
12720 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
12730 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12740 20 20 5f 6b 65 79 49 6e 66 6f 2e 44 69 73 70 6f    _keyInfo.Dispo
12750 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
12760 20 20 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 75     _keyInfo = nu
12770 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ll;..        }..
12780 0d 0a 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e  ..        _keyIn
12790 66 6f 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 4b  fo = new SQLiteK
127a0 65 79 52 65 61 64 65 72 28 5f 63 6f 6d 6d 61 6e  eyReader(_comman
127b0 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68  d.Connection, th
127c0 69 73 2c 20 5f 61 63 74 69 76 65 53 74 61 74 65  is, _activeState
127d0 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  ment);..    }.. 
127e0 20 7d 0d 0a 7d 0d 0a                              }..}..