System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 45e1e40475dafe6ff68b5fb82468f77b20ede01b:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75  ns.Generic;..  u
0180: 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c  sing System.Coll
0190: 65 63 74 69 6f 6e 73 2e 53 70 65 63 69 61 6c 69  ections.Speciali
01a0: 7a 65 64 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  zed;..  using Sy
01b0: 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 75 73  stem.Data;..  us
01c0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
01d0: 43 6f 6d 6d 6f 6e 3b 0d 0a 20 20 75 73 69 6e 67  Common;..  using
01e0: 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a   System.Globaliz
01f0: 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20  ation;....  /// 
0200: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  <summary>..  ///
0210: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
0220: 74 61 74 69 6f 6e 20 6f 66 20 44 62 44 61 74 61  tation of DbData
0230: 52 65 61 64 65 72 2e 0d 0a 20 20 2f 2f 2f 20 3c  Reader...  /// <
0240: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62  /summary>..  pub
0250: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
0260: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
0270: 72 20 3a 20 44 62 44 61 74 61 52 65 61 64 65 72  r : DbDataReader
0280: 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ..  {..    /// <
0290: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
02a0: 2f 20 55 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d  / Underlying com
02b0: 6d 61 6e 64 20 74 68 69 73 20 72 65 61 64 65 72  mand this reader
02c0: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 0d   is attached to.
02d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
02e0: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
02f0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 5f   SQLiteCommand _
0300: 63 6f 6d 6d 61 6e 64 3b 0d 0a 20 20 20 20 2f 2f  command;..    //
0310: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0320: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 70   /// The flags p
0330: 65 72 74 61 69 6e 69 6e 67 20 74 6f 20 74 68 65  ertaining to the
0340: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6e 6e   associated conn
0350: 65 63 74 69 6f 6e 20 28 76 69 61 20 74 68 65 20  ection (via the 
0360: 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 2f  command)...    /
0370: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0380: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0390: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
03a0: 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20 2f 2f   _flags;..    //
03b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
03c0: 20 2f 2f 2f 20 49 6e 64 65 78 20 6f 66 20 74 68   /// Index of th
03d0: 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
03e0: 65 6e 74 20 69 6e 20 74 68 65 20 63 6f 6d 6d 61  ent in the comma
03f0: 6e 64 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nd being process
0400: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
0410: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
0420: 61 74 65 20 69 6e 74 20 5f 61 63 74 69 76 65 53  ate int _activeS
0430: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 3b 0d 0a  tatementIndex;..
0440: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0450: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65  >..    /// Curre
0460: 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  nt statement bei
0470: 6e 67 20 52 65 61 64 28 29 0d 0a 20 20 20 20 2f  ng Read()..    /
0480: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0490: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
04a0: 65 53 74 61 74 65 6d 65 6e 74 20 5f 61 63 74 69  eStatement _acti
04b0: 76 65 53 74 61 74 65 6d 65 6e 74 3b 0d 0a 20 20  veStatement;..  
04c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
04d0: 0a 20 20 20 20 2f 2f 2f 20 53 74 61 74 65 20 6f  .    /// State o
04e0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  f the current st
04f0: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72  atement being pr
0500: 6f 63 65 73 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  ocessed...    //
0510: 2f 20 2d 31 20 3d 20 46 69 72 73 74 20 53 74 65  / -1 = First Ste
0520: 70 28 29 20 65 78 65 63 75 74 65 64 2c 20 73 6f  p() executed, so
0530: 20 74 68 65 20 66 69 72 73 74 20 52 65 61 64 28   the first Read(
0540: 29 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65  ) will be ignore
0550: 64 0d 0a 20 20 20 20 2f 2f 2f 20 20 30 20 3d 20  d..    ///  0 = 
0560: 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67  Actively reading
0570: 0d 0a 20 20 20 20 2f 2f 2f 20 20 31 20 3d 20 46  ..    ///  1 = F
0580: 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 0d  inished reading.
0590: 0a 20 20 20 20 2f 2f 2f 20 20 32 20 3d 20 4e 6f  .    ///  2 = No
05a0: 6e 2d 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  n-row-returning 
05b0: 73 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 20 72 65  statement, no re
05c0: 63 6f 72 64 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cords..    /// <
05d0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
05e0: 72 69 76 61 74 65 20 69 6e 74 20 5f 72 65 61 64  rivate int _read
05f0: 69 6e 67 53 74 61 74 65 3b 0d 0a 20 20 20 20 2f  ingState;..    /
0600: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0610: 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20    /// Number of 
0620: 72 65 63 6f 72 64 73 20 61 66 66 65 63 74 65 64  records affected
0630: 20 62 79 20 74 68 65 20 69 6e 73 65 72 74 2f 75   by the insert/u
0640: 70 64 61 74 65 20 73 74 61 74 65 6d 65 6e 74 73  pdate statements
0650: 20 65 78 65 63 75 74 65 64 20 6f 6e 20 74 68 65   executed on the
0660: 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 2f 2f   command..    //
0670: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0680: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 5f 72    private int _r
0690: 6f 77 73 41 66 66 65 63 74 65 64 3b 0d 0a 20 20  owsAffected;..  
06a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
06b0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 75 6e 74 20 6f  .    /// Count o
06c0: 66 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d 6e  f fields (column
06d0: 73 29 20 69 6e 20 74 68 65 20 72 6f 77 2d 72 65  s) in the row-re
06e0: 74 75 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e  turning statemen
06f0: 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
0700: 67 20 70 72 6f 63 65 73 73 65 64 0d 0a 20 20 20  g processed..   
0710: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0720: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
0730: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20   _fieldCount;.. 
0740: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0750: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
0760: 6d 62 65 72 20 6f 66 20 63 61 6c 6c 73 20 74 6f  mber of calls to
0770: 20 53 74 65 70 28 29 20 74 68 61 74 20 68 61 76   Step() that hav
0780: 65 20 72 65 74 75 72 6e 65 64 20 74 72 75 65 20  e returned true 
0790: 28 69 2e 65 2e 20 74 68 65 20 6e 75 6d 62 65 72  (i.e. the number
07a0: 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0d 0a 20   of rows that.. 
07b0: 20 20 20 2f 2f 2f 20 68 61 76 65 20 62 65 65 6e     /// have been
07c0: 20 72 65 61 64 20 69 6e 20 74 68 65 20 63 75 72   read in the cur
07d0: 72 65 6e 74 20 72 65 73 75 6c 74 20 73 65 74 29  rent result set)
07e0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
07f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0800: 74 65 20 69 6e 74 20 5f 73 74 65 70 43 6f 75 6e  te int _stepCoun
0810: 74 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  t;..    /// <sum
0820: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d  mary>..    /// M
0830: 61 70 73 20 74 68 65 20 66 69 65 6c 64 20 28 63  aps the field (c
0840: 6f 6c 75 6d 6e 29 20 6e 61 6d 65 73 20 74 6f 20  olumn) names to 
0850: 74 68 65 69 72 20 63 6f 72 72 65 73 70 6f 6e 64  their correspond
0860: 69 6e 67 20 69 6e 64 65 78 65 73 20 77 69 74 68  ing indexes with
0870: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0d  in the results..
0880: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0890: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
08a0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
08b0: 6e 67 2c 20 69 6e 74 3e 20 5f 66 69 65 6c 64 49  ng, int> _fieldI
08c0: 6e 64 65 78 65 73 3b 0d 0a 20 20 20 20 2f 2f 2f  ndexes;..    ///
08d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
08e0: 2f 2f 2f 20 44 61 74 61 74 79 70 65 73 20 6f 66  /// Datatypes of
08f0: 20 61 63 74 69 76 65 20 66 69 65 6c 64 73 20 28   active fields (
0900: 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74 68 65 20  columns) in the 
0910: 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
0920: 74 2c 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  t, used for type
0930: 2d 72 65 73 74 72 69 63 74 69 6e 67 20 64 61 74  -restricting dat
0940: 61 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  a..    /// </sum
0950: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0960: 74 65 20 53 51 4c 69 74 65 54 79 70 65 5b 5d 20  te SQLiteType[] 
0970: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 3b  _fieldTypeArray;
0980: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0990: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
09a0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
09b0: 68 65 20 64 61 74 61 72 65 61 64 65 72 0d 0a 20  he datareader.. 
09c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
09d0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 43  >..    private C
09e0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 5f  ommandBehavior _
09f0: 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 3b  commandBehavior;
0a00: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0a10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
0a20: 66 20 73 65 74 2c 20 74 68 65 6e 20 64 69 73 70  f set, then disp
0a30: 6f 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61  ose of the comma
0a40: 6e 64 20 6f 62 6a 65 63 74 20 77 68 65 6e 20 74  nd object when t
0a50: 68 65 20 72 65 61 64 65 72 20 69 73 20 66 69 6e  he reader is fin
0a60: 69 73 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ished..    /// <
0a70: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
0a80: 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 64 69  nternal bool _di
0a90: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 3b 0d 0a 0d  sposeCommand;...
0aa0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0ab0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73  y>..    /// If s
0ac0: 65 74 2c 20 74 68 65 6e 20 72 61 69 73 65 20 61  et, then raise a
0ad0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 68 65 6e  n exception when
0ae0: 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61   the object is a
0af0: 63 63 65 73 73 65 64 20 61 66 74 65 72 20 62 65  ccessed after be
0b00: 69 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  ing disposed... 
0b10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0b20: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0b30: 62 6f 6f 6c 20 5f 74 68 72 6f 77 4f 6e 44 69 73  bool _throwOnDis
0b40: 70 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  posed;....    //
0b50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0b60: 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66   /// An array of
0b70: 20 72 6f 77 69 64 27 73 20 66 6f 72 20 74 68 65   rowid's for the
0b80: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
0b90: 74 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61  t if CommandBeha
0ba0: 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 20 69 73 20  vior.KeyInfo is 
0bb0: 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
0bc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0bd0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0be0: 65 4b 65 79 52 65 61 64 65 72 20 5f 6b 65 79 49  eKeyReader _keyI
0bf0: 6e 66 6f 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  nfo;....    /// 
0c00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0c10: 2f 2f 20 4d 61 74 63 68 65 73 20 74 68 65 20 76  // Matches the v
0c20: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  ersion of the co
0c30: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
0c40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0c50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20     internal int 
0c60: 5f 76 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  _version;....   
0c70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0c80: 20 20 20 20 2f 2f 2f 20 54 68 65 20 22 73 74 75      /// The "stu
0c90: 62 22 20 28 69 2e 65 2e 20 70 6c 61 63 65 68 6f  b" (i.e. placeho
0ca0: 6c 64 65 72 29 20 62 61 73 65 20 73 63 68 65 6d  lder) base schem
0cb0: 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 77 68  a name to use wh
0cc0: 65 6e 20 72 65 74 75 72 6e 69 6e 67 0d 0a 20 20  en returning..  
0cd0: 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 73 63 68    /// column sch
0ce0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ema information.
0cf0: 20 20 4d 61 74 63 68 65 73 20 74 68 65 20 62 61    Matches the ba
0d00: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 75  se schema name u
0d10: 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  sed by the..    
0d20: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 63  /// associated c
0d30: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
0d40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0d50: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
0d60: 6e 67 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61  ng _baseSchemaNa
0d70: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  me;....    /// <
0d80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0d90: 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74  / Internal const
0da0: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
0db0: 7a 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  zes the dataread
0dc0: 65 72 20 61 6e 64 20 73 65 74 73 20 75 70 20 74  er and sets up t
0dd0: 6f 20 62 65 67 69 6e 20 65 78 65 63 75 74 69 6e  o begin executin
0de0: 67 20 73 74 61 74 65 6d 65 6e 74 73 0d 0a 20 20  g statements..  
0df0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0e00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0e10: 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65 20   name="cmd">The 
0e20: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74 68  SQLiteCommand th
0e30: 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20 69  is data reader i
0e40: 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20  s for</param>.. 
0e50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e60: 6d 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20  me="behave">The 
0e70: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
0e80: 72 20 6f 66 20 74 68 65 20 64 61 74 61 20 72 65  r of the data re
0e90: 61 64 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ader</param>..  
0ea0: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
0eb0: 65 44 61 74 61 52 65 61 64 65 72 28 53 51 4c 69  eDataReader(SQLi
0ec0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43  teCommand cmd, C
0ed0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 62  ommandBehavior b
0ee0: 65 68 61 76 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ehave)..    {.. 
0ef0: 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69 73       _throwOnDis
0f00: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
0f10: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20       _command = 
0f20: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 5f 76 65 72  cmd;..      _ver
0f30: 73 69 6f 6e 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  sion = _command.
0f40: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 76 65 72 73  Connection._vers
0f50: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 5f 62 61 73  ion;..      _bas
0f60: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 5f 63  eSchemaName = _c
0f70: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
0f80: 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  n._baseSchemaNam
0f90: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 63 6f 6d  e;....      _com
0fa0: 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 3d 20 62  mandBehavior = b
0fb0: 65 68 61 76 65 3b 0d 0a 20 20 20 20 20 20 5f 61  ehave;..      _a
0fc0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
0fd0: 64 65 78 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  dex = -1;..     
0fe0: 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d   _rowsAffected =
0ff0: 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65   -1;....      Re
1000: 66 72 65 73 68 46 6c 61 67 73 28 29 3b 0d 0a 0d  freshFlags();...
1010: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
1020: 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
1030: 64 28 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  d(GetConnection(
1040: 74 68 69 73 29 2c 0d 0a 20 20 20 20 20 20 20 20  this),..        
1050: 20 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e    new Connection
1060: 45 76 65 6e 74 41 72 67 73 28 53 51 4c 69 74 65  EventArgs(SQLite
1070: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
1080: 79 70 65 2e 4e 65 77 44 61 74 61 52 65 61 64 65  ype.NewDataReade
1090: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 75  r,..          nu
10a0: 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61  ll, null, _comma
10b0: 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c 2c 20  nd, this, null, 
10c0: 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  null, new object
10d0: 5b 5d 20 7b 20 62 65 68 61 76 65 20 7d 29 29 3b  [] { behave }));
10e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 63  ....      if (_c
10f0: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
1100: 0a 20 20 20 20 20 20 20 20 20 20 4e 65 78 74 52  .          NextR
1110: 65 73 75 6c 74 28 29 3b 0d 0a 20 20 20 20 7d 0d  esult();..    }.
1120: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1190: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
11a0: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
11b0: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
11c0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
11d0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
11e0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
11f0: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
1200: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
1210: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
1220: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
1230: 64 20 26 26 20 5f 74 68 72 6f 77 4f 6e 44 69 73  d && _throwOnDis
1240: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
1250: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
1260: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
1270: 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c  ption(typeof(SQL
1280: 69 74 65 44 61 74 61 52 65 61 64 65 72 29 2e 4e  iteDataReader).N
1290: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
12a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1310: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1320: 0d 0a 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73  ..    /// Dispos
1330: 65 20 6f 66 20 61 6c 6c 20 72 65 73 6f 75 72 63  e of all resourc
1340: 65 73 20 75 73 65 64 20 62 79 20 74 68 69 73 20  es used by this 
1350: 64 61 74 61 72 65 61 64 65 72 2e 0d 0a 20 20 20  datareader...   
1360: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1380: 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22  name="disposing"
1390: 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70  ></param>..    p
13a0: 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64  rotected overrid
13b0: 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  e void Dispose(b
13c0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
13d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
13e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
13f0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1400: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1410: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1420: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
1430: 72 67 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  rgs(SQLiteConnec
1440: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 44 69  tionEventType.Di
1450: 73 70 6f 73 69 6e 67 44 61 74 61 52 65 61 64 65  sposingDataReade
1460: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
1470: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d  null, null, _com
1480: 6d 61 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c  mand, this, null
1490: 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65  , null, new obje
14a0: 63 74 5b 5d 20 7b 20 64 69 73 70 6f 73 69 6e 67  ct[] { disposing
14b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ,..            d
14c0: 69 73 70 6f 73 65 64 2c 20 5f 63 6f 6d 6d 61 6e  isposed, _comman
14d0: 64 42 65 68 61 76 69 6f 72 2c 20 5f 72 65 61 64  dBehavior, _read
14e0: 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f 77 73 41  ingState, _rowsA
14f0: 66 66 65 63 74 65 64 2c 20 5f 73 74 65 70 43 6f  ffected, _stepCo
1500: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
1510: 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 20 5f    _fieldCount, _
1520: 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 2c 20  disposeCommand, 
1530: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
1540: 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   }));....       
1550: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1570: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1580: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
15a0: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15d0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1610: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1620: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1630: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1640: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1650: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1680: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
16d0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
16e0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
16f0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1740: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1760: 4f 54 45 3a 20 46 69 78 20 66 6f 72 20 74 69 63  OTE: Fix for tic
1770: 6b 65 74 20 5b 65 31 62 32 65 30 66 37 36 39 5d  ket [e1b2e0f769]
1780: 2c 20 64 6f 20 4e 4f 54 20 74 68 72 6f 77 20 65  , do NOT throw e
1790: 78 63 65 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20  xceptions..     
17a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17b0: 20 20 20 20 77 68 69 6c 65 20 77 65 20 61 72 65      while we are
17c0: 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64 2e   being disposed.
17d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
17f0: 20 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69        _throwOnDi
1800: 73 70 6f 73 65 64 20 3d 20 66 61 6c 73 65 3b 0d  sposed = false;.
1810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1820: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1830: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
1840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1850: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
1860: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20  disposing);.... 
1870: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1880: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1890: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
18a0: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
18b0: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
18c0: 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  point...        
18d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
18e0: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
18f0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1900: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1910: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1980: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f  .    internal vo
1990: 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  id Cancel()..   
19a0: 20 7b 0d 0a 20 20 20 20 20 20 5f 76 65 72 73 69   {..      _versi
19b0: 6f 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  on = 0;..    }..
19c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
19d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c 6f  ry>..    /// Clo
19e0: 73 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  ses the dataread
19f0: 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20  er, potentially 
1a00: 63 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  closing the conn
1a10: 65 63 74 69 6f 6e 20 61 73 20 77 65 6c 6c 20 69  ection as well i
1a20: 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  f CommandBehavio
1a30: 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f  r.CloseConnectio
1a40: 6e 20 77 61 73 20 73 70 65 63 69 66 69 65 64 2e  n was specified.
1a50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1a60: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
1a70: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
1a80: 6c 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  lose()..    {.. 
1a90: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
1aa0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53  ed();....      S
1ab0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
1ac0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1ad0: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1ae0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f            new Co
1af0: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
1b00: 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  s(SQLiteConnecti
1b10: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73  onEventType.Clos
1b20: 69 6e 67 44 61 74 61 52 65 61 64 65 72 2c 0d 0a  ingDataReader,..
1b30: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
1b40: 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61 6e 64 2c 20  null, _command, 
1b50: 74 68 69 73 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  this, null, null
1b60: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
1b70: 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f   _commandBehavio
1b80: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 72  r,..          _r
1b90: 65 61 64 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f  eadingState, _ro
1ba0: 77 73 41 66 66 65 63 74 65 64 2c 20 5f 73 74 65  wsAffected, _ste
1bb0: 70 43 6f 75 6e 74 2c 20 5f 66 69 65 6c 64 43 6f  pCount, _fieldCo
1bc0: 75 6e 74 2c 20 5f 64 69 73 70 6f 73 65 43 6f 6d  unt, _disposeCom
1bd0: 6d 61 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  mand,..         
1be0: 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65   _throwOnDispose
1bf0: 64 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  d }));....      
1c00: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
1c10: 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61        if (_comma
1c20: 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nd != null)..   
1c30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c40: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1c50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c60: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1c70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c80: 20 20 2f 2f 20 4d 61 6b 65 20 73 75 72 65 20 77    // Make sure w
1c90: 65 27 76 65 20 6e 6f 74 20 62 65 65 6e 20 63 61  e've not been ca
1ca0: 6e 63 65 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  nceled..        
1cb0: 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73 69        if (_versi
1cc0: 6f 6e 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  on != 0)..      
1cd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ce0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d10: 20 20 20 20 20 77 68 69 6c 65 20 28 4e 65 78 74       while (Next
1d20: 52 65 73 75 6c 74 28 29 29 0d 0a 20 20 20 20 20  Result())..     
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d70: 20 20 20 20 20 20 20 20 63 61 74 63 68 28 53 51          catch(SQ
1d80: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 29 0d 0a  LiteException)..
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1db0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1dc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1dd0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 52 65       _command.Re
1de0: 73 65 74 44 61 74 61 52 65 61 64 65 72 28 29 3b  setDataReader();
1df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
1e10: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e30: 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64 61 74     // If the dat
1e40: 61 72 65 61 64 65 72 27 73 20 62 65 68 61 76 69  areader's behavi
1e50: 6f 72 20 69 6e 63 6c 75 64 65 73 20 63 6c 6f 73  or includes clos
1e60: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
1e70: 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73 6f 20 68  on, then do so h
1e80: 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ere...          
1e90: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
1ea0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
1eb0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73  andBehavior.Clos
1ec0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 21 3d 20  eConnection) != 
1ed0: 30 20 26 26 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  0 && _command.Co
1ee0: 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  nnection != null
1ef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f00: 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e     _command.Conn
1f10: 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d  ection.Close();.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f40: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
1f50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f60: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 64 69           if (_di
1f70: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 29 0d 0a 20  sposeCommand).. 
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63 6f               _co
1f90: 6d 6d 61 6e 64 2e 44 69 73 70 6f 73 65 28 29 3b  mmand.Dispose();
1fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
1fb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fc0: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 6e      _command = n
1fd0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f 61  ull;..        _a
1fe0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d  ctiveStatement =
1ff0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2000: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
2010: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f  null;..        _
2020: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d  fieldTypeArray =
2030: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d   null;..      }.
2040: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
2050: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2060: 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
2070: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2080: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65  {..          _ke
2090: 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b  yInfo.Dispose();
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79  ..          _key
20b0: 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Info = null;..  
20c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
20d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
20e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20f0: 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20 65    /// Throw an e
2100: 72 72 6f 72 20 69 66 20 74 68 65 20 64 61 74 61  rror if the data
2110: 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
2120: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2130: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
2140: 65 20 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73  e void CheckClos
2150: 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
2160: 20 20 20 69 66 20 28 21 5f 74 68 72 6f 77 4f 6e     if (!_throwOn
2170: 44 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  Disposed)..     
2180: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
2190: 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64      if (_command
21a0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
21b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
21c0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
21d0: 65 70 74 69 6f 6e 28 22 44 61 74 61 52 65 61 64  eption("DataRead
21e0: 65 72 20 68 61 73 20 62 65 65 6e 20 63 6c 6f 73  er has been clos
21f0: 65 64 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ed");....      i
2200: 66 20 28 5f 76 65 72 73 69 6f 6e 20 3d 3d 20 30  f (_version == 0
2210: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
2220: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2230: 74 69 6f 6e 28 22 45 78 65 63 75 74 69 6f 6e 20  tion("Execution 
2240: 77 61 73 20 61 62 6f 72 74 65 64 20 62 79 20 74  was aborted by t
2250: 68 65 20 75 73 65 72 22 29 3b 0d 0a 0d 0a 20 20  he user");....  
2260: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2270: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
2280: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
2290: 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ction;....      
22a0: 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  if (connection._
22b0: 76 65 72 73 69 6f 6e 20 21 3d 20 5f 76 65 72 73  version != _vers
22c0: 69 6f 6e 20 7c 7c 20 63 6f 6e 6e 65 63 74 69 6f  ion || connectio
22d0: 6e 2e 53 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65  n.State != Conne
22e0: 63 74 69 6f 6e 53 74 61 74 65 2e 4f 70 65 6e 29  ctionState.Open)
22f0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
2300: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
2310: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 43  tionException("C
2320: 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 63 6c  onnection was cl
2330: 6f 73 65 64 2c 20 73 74 61 74 65 6d 65 6e 74 20  osed, statement 
2340: 77 61 73 20 74 65 72 6d 69 6e 61 74 65 64 22 29  was terminated")
2350: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
2360: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2370: 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20     /// Throw an 
2380: 65 72 72 6f 72 20 69 66 20 61 20 72 6f 77 20 69  error if a row i
2390: 73 20 6e 6f 74 20 6c 6f 61 64 65 64 0d 0a 20 20  s not loaded..  
23a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
23b0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
23c0: 69 64 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77  id CheckValidRow
23d0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
23e0: 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
23f0: 74 65 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  te != 0)..      
2400: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
2410: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
2420: 70 74 69 6f 6e 28 22 4e 6f 20 63 75 72 72 65 6e  ption("No curren
2430: 74 20 72 6f 77 22 29 3b 0d 0a 20 20 20 20 7d 0d  t row");..    }.
2440: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2450: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
2460: 75 6d 65 72 61 74 6f 72 20 73 75 70 70 6f 72 74  umerator support
2470: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2480: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
2490: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
24a0: 20 44 62 45 6e 75 6d 65 72 61 74 6f 72 20 6f 62   DbEnumerator ob
24b0: 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ject.</returns>.
24c0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
24d0: 72 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 73  ride Collections
24e0: 2e 49 45 6e 75 6d 65 72 61 74 6f 72 20 47 65 74  .IEnumerator Get
24f0: 45 6e 75 6d 65 72 61 74 6f 72 28 29 0d 0a 20 20  Enumerator()..  
2500: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
2510: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
2520: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 62     return new Db
2530: 45 6e 75 6d 65 72 61 74 6f 72 28 74 68 69 73 2c  Enumerator(this,
2540: 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
2550: 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
2560: 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65  avior.CloseConne
2570: 63 74 69 6f 6e 29 20 3d 3d 20 43 6f 6d 6d 61 6e  ction) == Comman
2580: 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43  dBehavior.CloseC
2590: 6f 6e 6e 65 63 74 69 6f 6e 29 29 3b 0d 0a 20 20  onnection));..  
25a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
25b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
25c0: 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65  / Not implemente
25d0: 64 2e 20 20 52 65 74 75 72 6e 73 20 30 0d 0a 20  d.  Returns 0.. 
25e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
25f0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
2600: 65 72 72 69 64 65 20 69 6e 74 20 44 65 70 74 68  erride int Depth
2610: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
2620: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
2630: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2640: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43  ed();..        C
2650: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
2660: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
2670: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2680: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2690: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
26a0: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
26b0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
26c0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75  the current resu
26d0: 6c 74 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ltset..    /// <
26e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
26f0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
2700: 6e 74 20 46 69 65 6c 64 43 6f 75 6e 74 0d 0a 20  nt FieldCount.. 
2710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
2720: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2730: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
2740: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2750: 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  kClosed();....  
2760: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
2770: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
2780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66         return _f
2790: 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  ieldCount;....  
27a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69        return _fi
27b0: 65 6c 64 43 6f 75 6e 74 20 2b 20 5f 6b 65 79 49  eldCount + _keyI
27c0: 6e 66 6f 2e 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  nfo.Count;..    
27d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
27e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
27f0: 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 63 65 73 20  .    /// Forces 
2800: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
2810: 6c 61 67 73 20 63 61 63 68 65 64 20 62 79 20 74  lags cached by t
2820: 68 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20  his data reader 
2830: 74 6f 20 62 65 20 72 65 66 72 65 73 68 65 64 0d  to be refreshed.
2840: 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68  .    /// from th
2850: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6e  e underlying con
2860: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
2870: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2880: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 52 65    public void Re
2890: 66 72 65 73 68 46 6c 61 67 73 28 29 0d 0a 20 20  freshFlags()..  
28a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
28b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
28c0: 0a 20 20 20 20 20 20 20 20 5f 66 6c 61 67 73 20  .        _flags 
28d0: 3d 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  = SQLiteCommand.
28e0: 47 65 74 46 6c 61 67 73 28 5f 63 6f 6d 6d 61 6e  GetFlags(_comman
28f0: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
2900: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2910: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
2920: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2930: 6f 77 73 20 73 65 65 6e 20 73 6f 20 66 61 72 20  ows seen so far 
2940: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  in the current r
2950: 65 73 75 6c 74 20 73 65 74 2e 0d 0a 20 20 20 20  esult set...    
2960: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2970: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 53      public int S
2980: 74 65 70 43 6f 75 6e 74 0d 0a 20 20 20 20 7b 0d  tepCount..    {.
2990: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
29a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29b0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
29c0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
29d0: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
29e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29f0: 20 72 65 74 75 72 6e 20 5f 73 74 65 70 43 6f 75   return _stepCou
2a00: 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  nt;..        }..
2a10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
2a20: 76 61 74 65 20 69 6e 74 20 50 72 69 76 61 74 65  vate int Private
2a30: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
2a40: 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
2a50: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
2a60: 66 69 65 6c 64 43 6f 75 6e 74 3b 20 7d 0d 0a 20  fieldCount; }.. 
2a70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
2a80: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
2a90: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
2aa0: 75 6d 62 65 72 20 6f 66 20 76 69 73 69 62 6c 65  umber of visible
2ab0: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
2ac0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
2ad0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2ae0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
2af0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 69   override int Vi
2b00: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 0d  sibleFieldCount.
2b10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2b20: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2b30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
2b40: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68  d();..        Ch
2b50: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20  eckClosed();..  
2b60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 72 69        return Pri
2b70: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
2b80: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 7d 0d  Count;..      }.
2b90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2ba0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2bb0: 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
2bc0: 20 69 73 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   is used to make
2bd0: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
2be0: 20 73 65 74 20 69 73 20 6f 70 65 6e 20 61 6e 64   set is open and
2bf0: 20 61 20 72 6f 77 20 69 73 20 63 75 72 72 65 6e   a row is curren
2c00: 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a  tly available...
2c10: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2c20: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
2c30: 76 6f 69 64 20 56 65 72 69 66 79 46 6f 72 47 65  void VerifyForGe
2c40: 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t()..    {..    
2c50: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
2c60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2c70: 6b 56 61 6c 69 64 52 6f 77 28 29 3b 0d 0a 20 20  kValidRow();..  
2c80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2c90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2ca0: 2f 20 53 51 4c 69 74 65 20 69 73 20 69 6e 68 65  / SQLite is inhe
2cb0: 72 65 6e 74 6c 79 20 75 6e 2d 74 79 70 65 64 2e  rently un-typed.
2cc0: 20 20 41 6c 6c 20 64 61 74 61 74 79 70 65 73 20    All datatypes 
2cd0: 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20 6e 61  in SQLite are na
2ce0: 74 69 76 65 6c 79 20 73 74 72 69 6e 67 73 2e 20  tively strings. 
2cf0: 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   The definition 
2d00: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  of the columns o
2d10: 66 20 61 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  f a table..    /
2d20: 2f 2f 20 61 6e 64 20 74 68 65 20 61 66 66 69 6e  // and the affin
2d30: 69 74 79 20 6f 66 20 72 65 74 75 72 6e 65 64 20  ity of returned 
2d40: 74 79 70 65 73 20 61 72 65 20 61 6c 6c 20 77 65  types are all we
2d50: 20 68 61 76 65 20 74 6f 20 67 6f 20 6f 6e 20 74   have to go on t
2d60: 6f 20 74 79 70 65 2d 72 65 73 74 72 69 63 74 20  o type-restrict 
2d70: 64 61 74 61 20 69 6e 20 74 68 65 20 72 65 61 64  data in the read
2d80: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 0d 0a 20 20  er...    ///..  
2d90: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
2da0: 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ion attempts to 
2db0: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
2dc0: 74 79 70 65 20 6f 66 20 64 61 74 61 20 62 65 69  type of data bei
2dd0: 6e 67 20 72 65 71 75 65 73 74 65 64 20 6f 66 20  ng requested of 
2de0: 61 20 63 6f 6c 75 6d 6e 20 6d 61 74 63 68 65 73  a column matches
2df0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
2e00: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 6e   the column.  In
2e10: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63 61  ..    /// the ca
2e20: 73 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  se of columns th
2e30: 61 74 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  at are not backe
2e40: 64 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 64  d into a table d
2e50: 65 66 69 6e 69 74 69 6f 6e 2c 20 77 65 20 61 74  efinition, we at
2e60: 74 65 6d 70 74 20 74 6f 20 6d 61 74 63 68 20 75  tempt to match u
2e70: 70 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  p the affinity o
2e80: 66 20 61 20 63 6f 6c 75 6d 6e 20 28 69 6e 74 2c  f a column (int,
2e90: 20 64 6f 75 62 6c 65 2c 20 73 74 72 69 6e 67 20   double, string 
2ea0: 6f 72 20 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f  or blob)..    //
2eb0: 2f 20 74 6f 20 61 20 73 65 74 20 6f 66 20 6b 6e  / to a set of kn
2ec0: 6f 77 6e 20 74 79 70 65 73 20 74 68 61 74 20 63  own types that c
2ed0: 6c 6f 73 65 6c 79 20 6d 61 74 63 68 20 74 68 61  losely match tha
2ee0: 74 20 61 66 66 69 6e 69 74 79 2e 20 20 49 74 27  t affinity.  It'
2ef0: 73 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 73  s not an exact s
2f00: 63 69 65 6e 63 65 2c 20 62 75 74 20 69 74 73 20  cience, but its 
2f10: 74 68 65 20 62 65 73 74 20 77 65 20 63 61 6e 20  the best we can 
2f20: 64 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  do...    /// </s
2f30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2f40: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2f50: 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f  /// This functio
2f60: 6e 20 74 68 72 6f 77 73 20 61 6e 20 49 6e 76 61  n throws an Inva
2f70: 6c 69 64 54 79 70 65 43 61 73 74 28 29 20 65 78  lidTypeCast() ex
2f80: 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 72  ception if the r
2f90: 65 71 75 65 73 74 65 64 20 74 79 70 65 20 64 6f  equested type do
2fa0: 65 73 6e 27 74 20 6d 61 74 63 68 20 74 68 65 20  esn't match the 
2fb0: 63 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e 69 74  column's definit
2fc0: 69 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74 79 2e  ion or affinity.
2fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
2fe0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  rns>..    /// <p
2ff0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
3000: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
3010: 6f 6c 75 6d 6e 20 74 6f 20 74 79 70 65 2d 63 68  olumn to type-ch
3020: 65 63 6b 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eck</param>..   
3030: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3040: 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
3050: 77 65 20 77 61 6e 74 20 74 6f 20 67 65 74 20 6f  we want to get o
3060: 75 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ut of the column
3070: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 72  </param>..    pr
3080: 69 76 61 74 65 20 54 79 70 65 41 66 66 69 6e 69  ivate TypeAffini
3090: 74 79 20 56 65 72 69 66 79 54 79 70 65 28 69 6e  ty VerifyType(in
30a0: 74 20 69 2c 20 44 62 54 79 70 65 20 74 79 70 29  t i, DbType typ)
30b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
30c0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66   TypeAffinity af
30d0: 66 69 6e 69 74 79 20 3d 20 47 65 74 53 51 4c 69  finity = GetSQLi
30e0: 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 69  teType(_flags, i
30f0: 29 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 0d 0a 20  ).Affinity;.... 
3100: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61         switch (a
3110: 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20  ffinity)..      
3120: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3130: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
3140: 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
3150: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
3160: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74  yp == DbType.Int
3170: 36 34 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  64) return affin
3180: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3190: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
31a0: 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29 20 72   DbType.Int32) r
31b0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
31c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31d0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
31e0: 70 65 2e 49 6e 74 31 36 29 20 72 65 74 75 72 6e  pe.Int16) return
31f0: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3200: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3210: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 79  typ == DbType.By
3220: 74 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  te) return affin
3230: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3240: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
3250: 20 44 62 54 79 70 65 2e 53 42 79 74 65 29 20 72   DbType.SByte) r
3260: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3280: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3290: 70 65 2e 42 6f 6f 6c 65 61 6e 29 20 72 65 74 75  pe.Boolean) retu
32a0: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20  rn affinity;..  
32b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
32c0: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
32d0: 44 61 74 65 54 69 6d 65 29 20 72 65 74 75 72 6e  DateTime) return
32e0: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3300: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 6f  typ == DbType.Do
3310: 75 62 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66  uble) return aff
3320: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3330: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3340: 3d 3d 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65  == DbType.Single
3350: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
3360: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
3370: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
3380: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72  bType.Decimal) r
3390: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
33a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33b0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
33c0: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
33d0: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a  finity.Double:..
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f0: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3400: 65 2e 44 6f 75 62 6c 65 29 20 72 65 74 75 72 6e  e.Double) return
3410: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3420: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3430: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 69  typ == DbType.Si
3440: 6e 67 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66  ngle) return aff
3450: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3460: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3470: 3d 3d 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61  == DbType.Decima
3480: 6c 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  l) return affini
3490: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
34a0: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
34b0: 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29  DbType.DateTime)
34c0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
34d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
34e0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
34f0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
3500: 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0d 0a  Affinity.Text:..
3510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3520: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3530: 65 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e  e.String) return
3540: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3550: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3560: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 47 75  typ == DbType.Gu
3570: 69 64 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  id) return affin
3580: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3590: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
35a0: 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65   DbType.DateTime
35b0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
35c0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
35d0: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
35e0: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72  bType.Decimal) r
35f0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3610: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
3620: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
3630: 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
3640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
3650: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
3660: 47 75 69 64 29 20 72 65 74 75 72 6e 20 61 66 66  Guid) return aff
3670: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3680: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3690: 3d 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79  == DbType.Binary
36a0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
36b0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
36c0: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
36d0: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 20 72 65  bType.String) re
36e0: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a  turn affinity;..
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3700: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
3710: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 68 72  }....        thr
3720: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 43 61  ow new InvalidCa
3730: 73 74 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  stException();..
3740: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
3750: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3760: 2f 2f 2f 20 49 6e 76 6f 6b 65 73 20 74 68 65 20  /// Invokes the 
3770: 64 61 74 61 20 72 65 61 64 65 72 20 76 61 6c 75  data reader valu
3780: 65 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 66 69  e callback confi
3790: 67 75 72 65 64 20 66 6f 72 20 74 68 65 20 64 61  gured for the da
37a0: 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20  tabase..    /// 
37b0: 74 79 70 65 20 6e 61 6d 65 20 61 73 73 6f 63 69  type name associ
37c0: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70  ated with the sp
37d0: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 20  ecified column. 
37e0: 20 49 66 20 6e 6f 20 64 61 74 61 20 72 65 61 64   If no data read
37f0: 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75  er..    /// valu
3800: 65 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 61 76  e callback is av
3810: 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
3820: 64 61 74 61 62 61 73 65 20 74 79 70 65 20 6e 61  database type na
3830: 6d 65 2c 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d  me, do nothing..
3840: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3850: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
3860: 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22  ram name="index"
3870: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 69  >..    /// The i
3880: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
3890: 6d 6e 20 62 65 69 6e 67 20 72 65 61 64 2e 0d 0a  mn being read...
38a0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
38b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
38c0: 20 6e 61 6d 65 3d 22 65 76 65 6e 74 41 72 67 73   name="eventArgs
38d0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
38e0: 65 78 74 72 61 20 65 76 65 6e 74 20 64 61 74 61  extra event data
38f0: 20 74 6f 20 70 61 73 73 20 69 6e 74 6f 20 74 68   to pass into th
3900: 65 20 63 61 6c 6c 62 61 63 6b 2e 0d 0a 20 20 20  e callback...   
3910: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
3920: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3930: 6d 65 3d 22 63 6f 6d 70 6c 65 74 65 22 3e 0d 0a  me="complete">..
3940: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
3950: 20 69 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   if the default 
3960: 68 61 6e 64 6c 69 6e 67 20 66 6f 72 20 74 68 65  handling for the
3970: 20 64 61 74 61 20 72 65 61 64 65 72 20 63 61 6c   data reader cal
3980: 6c 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20  l should be..   
3990: 20 2f 2f 2f 20 73 6b 69 70 70 65 64 2e 20 20 49   /// skipped.  I
39a0: 66 20 74 68 69 73 20 69 73 20 73 65 74 20 74 6f  f this is set to
39b0: 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 74 68   non-zero and th
39c0: 65 20 6e 65 63 65 73 73 61 72 79 20 72 65 74 75  e necessary retu
39d0: 72 6e 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f  rn value..    //
39e0: 2f 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  / is unavailable
39f0: 20 6f 72 20 75 6e 73 75 69 74 61 62 6c 65 2c 20   or unsuitable, 
3a00: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 69 6c  an exception wil
3a10: 6c 20 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20  l be thrown...  
3a20: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
3a30: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
3a40: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
3a50: 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20  Callback(..     
3a60: 20 20 20 69 6e 74 20 69 6e 64 65 78 2c 0d 0a 20     int index,.. 
3a70: 20 20 20 20 20 20 20 53 51 4c 69 74 65 52 65 61         SQLiteRea
3a80: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 20  dValueEventArgs 
3a90: 65 76 65 6e 74 41 72 67 73 2c 0d 0a 20 20 20 20  eventArgs,..    
3aa0: 20 20 20 20 6f 75 74 20 62 6f 6f 6c 20 63 6f 6d      out bool com
3ab0: 70 6c 65 74 65 0d 0a 20 20 20 20 20 20 20 20 29  plete..        )
3ac0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
3ad0: 20 63 6f 6d 70 6c 65 74 65 20 3d 20 66 61 6c 73   complete = fals
3ae0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e;..        SQLi
3af0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
3b00: 73 20 6f 6c 64 46 6c 61 67 73 20 3d 20 5f 66 6c  s oldFlags = _fl
3b10: 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66  ags;..        _f
3b20: 6c 61 67 73 20 26 3d 20 7e 53 51 4c 69 74 65 43  lags &= ~SQLiteC
3b30: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
3b40: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
3b50: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 3b 0d  ValueCallbacks;.
3b60: 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
3b70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3b80: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79         string ty
3b90: 70 65 4e 61 6d 65 20 3d 20 47 65 74 44 61 74 61  peName = GetData
3ba0: 54 79 70 65 4e 61 6d 65 28 69 6e 64 65 78 29 3b  TypeName(index);
3bb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3bc0: 69 66 20 28 74 79 70 65 4e 61 6d 65 20 3d 3d 20  if (typeName == 
3bd0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3be0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
3bf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
3c00: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
3c10: 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 47 65 74 43  onnection = GetC
3c20: 6f 6e 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 3b  onnection(this);
3c30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3c40: 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d  if (connection =
3c50: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3c60: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
3c70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3c80: 53 51 4c 69 74 65 54 79 70 65 43 61 6c 6c 62 61  SQLiteTypeCallba
3c90: 63 6b 73 20 63 61 6c 6c 62 61 63 6b 73 3b 0d 0a  cks callbacks;..
3ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
3cb0: 20 28 21 63 6f 6e 6e 65 63 74 69 6f 6e 2e 54 72   (!connection.Tr
3cc0: 79 47 65 74 54 79 70 65 43 61 6c 6c 62 61 63 6b  yGetTypeCallback
3cd0: 73 28 74 79 70 65 4e 61 6d 65 2c 20 6f 75 74 20  s(typeName, out 
3ce0: 63 61 6c 6c 62 61 63 6b 73 29 20 7c 7c 0d 0a 20  callbacks) ||.. 
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
3d00: 63 61 6c 6c 62 61 63 6b 73 20 3d 3d 20 6e 75 6c  callbacks == nul
3d10: 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
3d20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3d30: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20      return;..   
3d40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3d50: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
3d60: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
3d70: 6b 20 63 61 6c 6c 62 61 63 6b 20 3d 20 63 61 6c  k callback = cal
3d80: 6c 62 61 63 6b 73 2e 52 65 61 64 56 61 6c 75 65  lbacks.ReadValue
3d90: 43 61 6c 6c 62 61 63 6b 3b 0d 0a 0d 0a 20 20 20  Callback;....   
3da0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c           if (cal
3db0: 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  lback == null)..
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dd0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
3de0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 75 73         object us
3df0: 65 72 44 61 74 61 20 3d 20 63 61 6c 6c 62 61 63  erData = callbac
3e00: 6b 73 2e 52 65 61 64 56 61 6c 75 65 55 73 65 72  ks.ReadValueUser
3e10: 44 61 74 61 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Data;....       
3e20: 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 28 0d 0a       callback(..
3e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e40: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
3e50: 2e 5f 73 71 6c 2c 20 74 68 69 73 2c 20 6f 6c 64  ._sql, this, old
3e60: 46 6c 61 67 73 2c 20 65 76 65 6e 74 41 72 67 73  Flags, eventArgs
3e70: 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  , typeName,..   
3e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
3e90: 65 78 2c 20 75 73 65 72 44 61 74 61 2c 20 6f 75  ex, userData, ou
3ea0: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 20 2f 2a 20  t complete); /* 
3eb0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
3ec0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
3ed0: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ally..        {.
3ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 6c  .            _fl
3ef0: 61 67 73 20 7c 3d 20 53 51 4c 69 74 65 43 6f 6e  ags |= SQLiteCon
3f00: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
3f10: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
3f20: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 3b 0d 0a 20  lueCallbacks;.. 
3f30: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
3f40: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
3f50: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
3f60: 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75  trieves the colu
3f70: 6d 6e 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20  mn as a boolean 
3f80: 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  value..    /// <
3f90: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
3fa0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3fb0: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
3fc0: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
3fd0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
3fe0: 74 75 72 6e 73 3e 62 6f 6f 6c 3c 2f 72 65 74 75  turns>bool</retu
3ff0: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
4000: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 47   override bool G
4010: 65 74 42 6f 6f 6c 65 61 6e 28 69 6e 74 20 69 29  etBoolean(int i)
4020: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4030: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
4040: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
4050: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
4060: 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
4070: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
4080: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
4090: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
40a0: 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51  Callbacks) == SQ
40b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
40c0: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
40d0: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
40e0: 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  cks)..        {.
40f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
4100: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
4110: 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53  ue value = new S
4120: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
4130: 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  alue();..       
4140: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65       bool comple
4150: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
4160: 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c     InvokeReadVal
4170: 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65  ueCallback(i, ne
4180: 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75  w SQLiteReadValu
4190: 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  eEventArgs(..   
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
41b0: 74 42 6f 6f 6c 65 61 6e 22 2c 20 6e 75 6c 6c 2c  tBoolean", null,
41c0: 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d   value), out com
41d0: 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  plete);....     
41e0: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c         if (compl
41f0: 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ete)..          
4200: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4210: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 42       if (value.B
4220: 6f 6f 6c 65 61 6e 56 61 6c 75 65 20 3d 3d 20 6e  ooleanValue == n
4230: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
4240: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
4250: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
4260: 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 62 6f 6f  ion("missing boo
4270: 6c 65 61 6e 20 72 65 74 75 72 6e 20 76 61 6c 75  lean return valu
4280: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
4290: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
42a0: 62 6f 6f 6c 29 76 61 6c 75 65 2e 42 6f 6f 6c 65  bool)value.Boole
42b0: 61 6e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  anValue;..      
42c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
42d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
42e0: 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69   (i >= PrivateVi
42f0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
4300: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
4310: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
4320: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
4330: 6f 2e 47 65 74 42 6f 6f 6c 65 61 6e 28 69 20 2d  o.GetBoolean(i -
4340: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
4350: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
4360: 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70         VerifyTyp
4370: 65 28 69 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c  e(i, DbType.Bool
4380: 65 61 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ean);..        r
4390: 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f  eturn Convert.To
43a0: 42 6f 6f 6c 65 61 6e 28 47 65 74 56 61 6c 75 65  Boolean(GetValue
43b0: 28 69 29 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f  (i), CultureInfo
43c0: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 29  .CurrentCulture)
43d0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
43e0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
43f0: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
4400: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61   the column as a
4410: 20 73 69 6e 67 6c 65 20 62 79 74 65 20 76 61 6c   single byte val
4420: 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ue..    /// </su
4430: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
4440: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
4450: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
4460: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
4470: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
4480: 6e 73 3e 62 79 74 65 3c 2f 72 65 74 75 72 6e 73  ns>byte</returns
4490: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
44a0: 65 72 72 69 64 65 20 62 79 74 65 20 47 65 74 42  erride byte GetB
44b0: 79 74 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  yte(int i)..    
44c0: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
44d0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
44e0: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
44f0: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
4500: 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51  if ((_flags & SQ
4510: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
4520: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
4530: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
4540: 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  cks) == SQLiteCo
4550: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
4560: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
4570: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a  alueCallbacks)..
4580: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4590: 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74         SQLiteDat
45a0: 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c  aReaderValue val
45b0: 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44  ue = new SQLiteD
45c0: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29  ataReaderValue()
45d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
45e0: 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d  ool complete;...
45f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76  .            Inv
4600: 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  okeReadValueCall
4610: 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69  back(i, new SQLi
4620: 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74  teReadValueEvent
4630: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
4640: 20 20 20 20 20 20 20 22 47 65 74 42 79 74 65 22         "GetByte"
4650: 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20  , null, value), 
4660: 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a  out complete);..
4670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
4680: 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20   (complete)..   
4690: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
46a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
46b0: 76 61 6c 75 65 2e 42 79 74 65 56 61 6c 75 65 20  value.ByteValue 
46c0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
46e0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
46f0: 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67  ception("missing
4700: 20 62 79 74 65 20 72 65 74 75 72 6e 20 76 61 6c   byte return val
4710: 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ue");....       
4720: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4730: 28 62 79 74 65 29 76 61 6c 75 65 2e 42 79 74 65  (byte)value.Byte
4740: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
4750: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
4760: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
4770: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
4780: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
4790: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
47a0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
47b0: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
47c0: 47 65 74 42 79 74 65 28 69 20 2d 20 50 72 69 76  GetByte(i - Priv
47d0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
47e0: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
47f0: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
4800: 44 62 54 79 70 65 2e 42 79 74 65 29 3b 0d 0a 20  DbType.Byte);.. 
4810: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f         return Co
4820: 6e 76 65 72 74 2e 54 6f 42 79 74 65 28 5f 61 63  nvert.ToByte(_ac
4830: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
4840: 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74  ql.GetInt32(_act
4850: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
4860: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
4870: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
4880: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
4890: 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e  s a column as an
48a0: 20 61 72 72 61 79 20 6f 66 20 62 79 74 65 73 20   array of bytes 
48b0: 28 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f 2f 20  (blob)..    /// 
48c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
48d0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
48e0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
48f0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
4900: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
4910: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 65 6c 64  aram name="field
4920: 4f 66 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f  Offset">The zero
4930: 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20  -based index of 
4940: 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e 20 72  where to begin r
4950: 65 61 64 69 6e 67 20 74 68 65 20 64 61 74 61 3c  eading the data<
4960: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
4970: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75   <param name="bu
4980: 66 66 65 72 22 3e 54 68 65 20 62 75 66 66 65 72  ffer">The buffer
4990: 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 62 79   to write the by
49a0: 74 65 73 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e  tes into</param>
49b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
49c0: 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 6f 66 66   name="bufferoff
49d0: 73 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61  set">The zero-ba
49e0: 73 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68 65  sed index of whe
49f0: 72 65 20 74 6f 20 62 65 67 69 6e 20 77 72 69 74  re to begin writ
4a00: 69 6e 67 20 69 6e 74 6f 20 74 68 65 20 61 72 72  ing into the arr
4a10: 61 79 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  ay</param>..    
4a20: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
4a30: 22 6c 65 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d  "length">The num
4a40: 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20  ber of bytes to 
4a50: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
4a60: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
4a70: 6e 73 3e 54 68 65 20 61 63 74 75 61 6c 20 6e 75  ns>The actual nu
4a80: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 77 72  mber of bytes wr
4a90: 69 74 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 61  itten into the a
4aa0: 72 72 61 79 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  rray</returns>..
4ab0: 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73      /// <remarks
4ac0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 6f 20 64 65  >..    /// To de
4ad0: 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62  termine the numb
4ae0: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
4af0: 68 65 20 63 6f 6c 75 6d 6e 2c 20 70 61 73 73 20  he column, pass 
4b00: 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20 66 6f 72  a null value for
4b10: 20 74 68 65 20 62 75 66 66 65 72 2e 20 20 54 68   the buffer.  Th
4b20: 65 20 74 6f 74 61 6c 20 6c 65 6e 67 74 68 20 77  e total length w
4b30: 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e  ill be returned.
4b40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61  ..    /// </rema
4b50: 72 6b 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rks>..    public
4b60: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
4b70: 65 74 42 79 74 65 73 28 69 6e 74 20 69 2c 20 6c  etBytes(int i, l
4b80: 6f 6e 67 20 66 69 65 6c 64 4f 66 66 73 65 74 2c  ong fieldOffset,
4b90: 20 62 79 74 65 5b 5d 20 62 75 66 66 65 72 2c 20   byte[] buffer, 
4ba0: 69 6e 74 20 62 75 66 66 65 72 6f 66 66 73 65 74  int bufferoffset
4bb0: 2c 20 69 6e 74 20 6c 65 6e 67 74 68 29 0d 0a 20  , int length).. 
4bc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
4bd0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
4be0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
4bf0: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
4c00: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
4c10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
4c20: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
4c30: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
4c40: 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74  lbacks) == SQLit
4c50: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
4c60: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
4c70: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
4c80: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
4c90: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
4ca0: 52 65 61 64 41 72 72 61 79 45 76 65 6e 74 41 72  ReadArrayEventAr
4cb0: 67 73 20 65 76 65 6e 74 41 72 67 73 20 3d 20 6e  gs eventArgs = n
4cc0: 65 77 20 53 51 4c 69 74 65 52 65 61 64 41 72 72  ew SQLiteReadArr
4cd0: 61 79 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ayEventArgs(..  
4ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
4cf0: 65 6c 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65  eldOffset, buffe
4d00: 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c  r, bufferoffset,
4d10: 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20   length);....   
4d20: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44           SQLiteD
4d30: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76  ataReaderValue v
4d40: 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  alue = new SQLit
4d50: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
4d60: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4d70: 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d   bool complete;.
4d80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
4d90: 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61  nvokeReadValueCa
4da0: 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51  llback(i, new SQ
4db0: 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65  LiteReadValueEve
4dc0: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
4dd0: 20 20 20 20 20 20 20 20 20 22 47 65 74 42 79 74           "GetByt
4de0: 65 73 22 2c 20 65 76 65 6e 74 41 72 67 73 2c 20  es", eventArgs, 
4df0: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
4e00: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
4e10: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
4e20: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
4e30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4e40: 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73      byte[] bytes
4e50: 20 3d 20 76 61 6c 75 65 2e 42 79 74 65 73 56 61   = value.BytesVa
4e60: 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
4e70: 20 20 20 20 20 20 20 20 69 66 20 28 62 79 74 65          if (byte
4e80: 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
4e90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4eb0: 20 20 20 41 72 72 61 79 2e 43 6f 70 79 28 62 79     Array.Copy(by
4ec0: 74 65 73 2c 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  tes, /* throw */
4ed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ee0: 20 20 20 20 20 20 20 20 20 20 65 76 65 6e 74 41            eventA
4ef0: 72 67 73 2e 44 61 74 61 4f 66 66 73 65 74 2c 20  rgs.DataOffset, 
4f00: 65 76 65 6e 74 41 72 67 73 2e 42 79 74 65 42 75  eventArgs.ByteBu
4f10: 66 66 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffer,..         
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
4f30: 76 65 6e 74 41 72 67 73 2e 42 75 66 66 65 72 4f  ventArgs.BufferO
4f40: 66 66 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73  ffset, eventArgs
4f50: 2e 4c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20  .Length);....   
4f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f70: 20 72 65 74 75 72 6e 20 65 76 65 6e 74 41 72 67   return eventArg
4f80: 73 2e 4c 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20  s.Length;..     
4f90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
4fb0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
4fc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4fd0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4fe0: 6e 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20 20 20  n -1;..         
4ff0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5000: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5010: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
5020: 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69   (i >= PrivateVi
5030: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
5040: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
5050: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5060: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
5070: 6f 2e 47 65 74 42 79 74 65 73 28 69 20 2d 20 50  o.GetBytes(i - P
5080: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
5090: 6c 64 43 6f 75 6e 74 2c 20 66 69 65 6c 64 4f 66  ldCount, fieldOf
50a0: 66 73 65 74 2c 20 62 75 66 66 65 72 2c 20 62 75  fset, buffer, bu
50b0: 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67  fferoffset, leng
50c0: 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  th);....        
50d0: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
50e0: 54 79 70 65 2e 42 69 6e 61 72 79 29 3b 0d 0a 20  Type.Binary);.. 
50f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
5100: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
5110: 73 71 6c 2e 47 65 74 42 79 74 65 73 28 5f 61 63  sql.GetBytes(_ac
5120: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
5130: 2c 20 28 69 6e 74 29 66 69 65 6c 64 4f 66 66 73  , (int)fieldOffs
5140: 65 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66  et, buffer, buff
5150: 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68  eroffset, length
5160: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
5170: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5180: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
5190: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
51a0: 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
51b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
51c0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
51d0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
51e0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
51f0: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
5200: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
5210: 3e 63 68 61 72 3c 2f 72 65 74 75 72 6e 73 3e 0d  >char</returns>.
5220: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
5230: 72 69 64 65 20 63 68 61 72 20 47 65 74 43 68 61  ride char GetCha
5240: 72 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  r(int i)..    {.
5250: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
5260: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
5270: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
5280: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
5290: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
52a0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
52b0: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
52c0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
52d0: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
52e0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
52f0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
5300: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
5310: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5320: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
5330: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
5340: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
5350: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
5360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
5370: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
5380: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
5390: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
53a0: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
53b0: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
53c0: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
53d0: 20 20 20 20 20 22 47 65 74 43 68 61 72 22 2c 20       "GetChar", 
53e0: 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75  null, value), ou
53f0: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a  t complete);....
5400: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5410: 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20  complete)..     
5420: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5430: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
5440: 6c 75 65 2e 43 68 61 72 56 61 6c 75 65 20 3d 3d  lue.CharValue ==
5450: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5460: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
5470: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
5480: 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 63  ption("missing c
5490: 68 61 72 61 63 74 65 72 20 72 65 74 75 72 6e 20  haracter return 
54a0: 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  value");....    
54b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
54c0: 72 6e 20 28 63 68 61 72 29 76 61 6c 75 65 2e 43  rn (char)value.C
54d0: 68 61 72 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  harValue;..     
54e0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
54f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
5500: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
5510: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
5520: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
5530: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
5540: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
5550: 66 6f 2e 47 65 74 43 68 61 72 28 69 20 2d 20 50  fo.GetChar(i - P
5560: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
5570: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
5580: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
5590: 69 2c 20 44 62 54 79 70 65 2e 53 42 79 74 65 29  i, DbType.SByte)
55a0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
55b0: 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 43 68 61 72  n Convert.ToChar
55c0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
55d0: 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28  t._sql.GetInt32(
55e0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
55f0: 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  , i));..    }...
5600: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
5610: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  y>..    /// Retr
5620: 69 65 76 65 73 20 61 20 63 6f 6c 75 6d 6e 20 61  ieves a column a
5630: 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20 63 68  s an array of ch
5640: 61 72 73 20 28 62 6c 6f 62 29 0d 0a 20 20 20 20  ars (blob)..    
5650: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5660: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5670: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
5680: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
5690: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
56a0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
56b0: 69 65 6c 64 6f 66 66 73 65 74 22 3e 54 68 65 20  ieldoffset">The 
56c0: 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78  zero-based index
56d0: 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65 67   of where to beg
56e0: 69 6e 20 72 65 61 64 69 6e 67 20 74 68 65 20 64  in reading the d
56f0: 61 74 61 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ata</param>..   
5700: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
5710: 3d 22 62 75 66 66 65 72 22 3e 54 68 65 20 62 75  ="buffer">The bu
5720: 66 66 65 72 20 74 6f 20 77 72 69 74 65 20 74 68  ffer to write th
5730: 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 74  e characters int
5740: 6f 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  o</param>..    /
5750: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5760: 62 75 66 66 65 72 6f 66 66 73 65 74 22 3e 54 68  bufferoffset">Th
5770: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64  e zero-based ind
5780: 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62  ex of where to b
5790: 65 67 69 6e 20 77 72 69 74 69 6e 67 20 69 6e 74  egin writing int
57a0: 6f 20 74 68 65 20 61 72 72 61 79 3c 2f 70 61 72  o the array</par
57b0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
57c0: 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68  ram name="length
57d0: 22 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  ">The number of 
57e0: 62 79 74 65 73 20 74 6f 20 72 65 74 72 69 65 76  bytes to retriev
57f0: 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  e</param>..    /
5800: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
5810: 61 63 74 75 61 6c 20 6e 75 6d 62 65 72 20 6f 66  actual number of
5820: 20 63 68 61 72 61 63 74 65 72 73 20 77 72 69 74   characters writ
5830: 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 61 72 72  ten into the arr
5840: 61 79 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  ay</returns>..  
5850: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d    /// <remarks>.
5860: 0a 20 20 20 20 2f 2f 2f 20 54 6f 20 64 65 74 65  .    /// To dete
5870: 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72  rmine the number
5880: 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
5890: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 70 61  n the column, pa
58a0: 73 73 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20  ss a null value 
58b0: 66 6f 72 20 74 68 65 20 62 75 66 66 65 72 2e 20  for the buffer. 
58c0: 20 54 68 65 20 74 6f 74 61 6c 20 6c 65 6e 67 74   The total lengt
58d0: 68 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e  h will be return
58e0: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ed...    /// </r
58f0: 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 70 75 62  emarks>..    pub
5900: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  lic override lon
5910: 67 20 47 65 74 43 68 61 72 73 28 69 6e 74 20 69  g GetChars(int i
5920: 2c 20 6c 6f 6e 67 20 66 69 65 6c 64 6f 66 66 73  , long fieldoffs
5930: 65 74 2c 20 63 68 61 72 5b 5d 20 62 75 66 66 65  et, char[] buffe
5940: 72 2c 20 69 6e 74 20 62 75 66 66 65 72 6f 66 66  r, int bufferoff
5950: 73 65 74 2c 20 69 6e 74 20 6c 65 6e 67 74 68 29  set, int length)
5960: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5970: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5980: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
5990: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
59a0: 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
59b0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
59c0: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
59d0: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
59e0: 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51  Callbacks) == SQ
59f0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
5a00: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
5a10: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
5a20: 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  cks)..        {.
5a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
5a40: 69 74 65 52 65 61 64 41 72 72 61 79 45 76 65 6e  iteReadArrayEven
5a50: 74 41 72 67 73 20 65 76 65 6e 74 41 72 67 73 20  tArgs eventArgs 
5a60: 3d 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  = new SQLiteRead
5a70: 41 72 72 61 79 45 76 65 6e 74 41 72 67 73 28 0d  ArrayEventArgs(.
5a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5a90: 20 66 69 65 6c 64 6f 66 66 73 65 74 2c 20 62 75   fieldoffset, bu
5aa0: 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73  ffer, bufferoffs
5ab0: 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a  et, length);....
5ac0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
5ad0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
5ae0: 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51  e value = new SQ
5af0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
5b00: 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue();..        
5b10: 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74      bool complet
5b20: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
5b30: 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75    InvokeReadValu
5b40: 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77  eCallback(i, new
5b50: 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65   SQLiteReadValue
5b60: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
5b70: 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74              "Get
5b80: 43 68 61 72 73 22 2c 20 65 76 65 6e 74 41 72 67  Chars", eventArg
5b90: 73 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63  s, value), out c
5ba0: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
5bb0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
5bc0: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
5bd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5be0: 20 20 20 20 20 20 20 63 68 61 72 5b 5d 20 63 68         char[] ch
5bf0: 61 72 73 20 3d 20 76 61 6c 75 65 2e 43 68 61 72  ars = value.Char
5c00: 73 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  sValue;....     
5c10: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
5c20: 68 61 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  hars != null).. 
5c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
5c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5c50: 20 20 20 20 20 20 41 72 72 61 79 2e 43 6f 70 79        Array.Copy
5c60: 28 63 68 61 72 73 2c 20 2f 2a 20 74 68 72 6f 77  (chars, /* throw
5c70: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
5c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76 65               eve
5c90: 6e 74 41 72 67 73 2e 44 61 74 61 4f 66 66 73 65  ntArgs.DataOffse
5ca0: 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 43 68 61  t, eventArgs.Cha
5cb0: 72 42 75 66 66 65 72 2c 0d 0a 20 20 20 20 20 20  rBuffer,..      
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5cd0: 20 20 65 76 65 6e 74 41 72 67 73 2e 42 75 66 66    eventArgs.Buff
5ce0: 65 72 4f 66 66 73 65 74 2c 20 65 76 65 6e 74 41  erOffset, eventA
5cf0: 72 67 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 0d 0a  rgs.Length);....
5d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d10: 20 20 20 20 72 65 74 75 72 6e 20 65 76 65 6e 74      return event
5d20: 41 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 20 20  Args.Length;..  
5d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
5d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5d50: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
5d60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5d80: 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 20 20  turn -1;..      
5d90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5da0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5db0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5dc0: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
5dd0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
5de0: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
5df0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
5e00: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
5e10: 49 6e 66 6f 2e 47 65 74 43 68 61 72 73 28 69 20  Info.GetChars(i 
5e20: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
5e30: 46 69 65 6c 64 43 6f 75 6e 74 2c 20 66 69 65 6c  FieldCount, fiel
5e40: 64 6f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c  doffset, buffer,
5e50: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c   bufferoffset, l
5e60: 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20  ength);....     
5e70: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
5e80: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5e90: 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69 66 79 54  nFlags.NoVerifyT
5ea0: 65 78 74 41 66 66 69 6e 69 74 79 29 20 21 3d 20  extAffinity) != 
5eb0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5ec0: 46 6c 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 65  Flags.NoVerifyTe
5ed0: 78 74 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20  xtAffinity)..   
5ee0: 20 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54           VerifyT
5ef0: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53 74  ype(i, DbType.St
5f00: 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ring);....      
5f10: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
5f20: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
5f30: 65 74 43 68 61 72 73 28 5f 61 63 74 69 76 65 53  etChars(_activeS
5f40: 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 28 69 6e  tatement, i, (in
5f50: 74 29 66 69 65 6c 64 6f 66 66 73 65 74 2c 20 62  t)fieldoffset, b
5f60: 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66  uffer, bufferoff
5f70: 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 20  set, length);.. 
5f80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
5f90: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
5fa0: 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65  // Retrieves the
5fb0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 62 61 63   name of the bac
5fc0: 6b 2d 65 6e 64 20 64 61 74 61 74 79 70 65 20 6f  k-end datatype o
5fd0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a 20 20  f the column..  
5fe0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5ff0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
6000: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
6010: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
6020: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
6030: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72  /// <returns>str
6040: 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ing</returns>.. 
6050: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
6060: 64 65 20 73 74 72 69 6e 67 20 47 65 74 44 61 74  de string GetDat
6070: 61 54 79 70 65 4e 61 6d 65 28 69 6e 74 20 69 29  aTypeName(int i)
6080: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
6090: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
60a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
60b0: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
60c0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
60d0: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
60e0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
60f0: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
6100: 2e 47 65 74 44 61 74 61 54 79 70 65 4e 61 6d 65  .GetDataTypeName
6110: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
6120: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d  bleFieldCount);.
6130: 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70 65 41  ...        TypeA
6140: 66 66 69 6e 69 74 79 20 61 66 66 69 6e 20 3d 20  ffinity affin = 
6150: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 55 6e 69  TypeAffinity.Uni
6160: 6e 69 74 69 61 6c 69 7a 65 64 3b 0d 0a 20 20 20  nitialized;..   
6170: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
6180: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
6190: 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 5f 61 63  l.ColumnType(_ac
61a0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
61b0: 2c 20 72 65 66 20 61 66 66 69 6e 29 3b 0d 0a 20  , ref affin);.. 
61c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
61d0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
61e0: 2f 2f 20 52 65 74 72 69 65 76 65 20 74 68 65 20  // Retrieve the 
61f0: 63 6f 6c 75 6d 6e 20 61 73 20 61 20 64 61 74 65  column as a date
6200: 2f 74 69 6d 65 20 76 61 6c 75 65 0d 0a 20 20 20  /time value..   
6210: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
6220: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
6230: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
6240: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
6250: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
6260: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 44 61 74 65  // <returns>Date
6270: 54 69 6d 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  Time</returns>..
6280: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
6290: 69 64 65 20 44 61 74 65 54 69 6d 65 20 47 65 74  ide DateTime Get
62a0: 44 61 74 65 54 69 6d 65 28 69 6e 74 20 69 29 0d  DateTime(int i).
62b0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
62c0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
62d0: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
62e0: 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  ForGet();....   
62f0: 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73       if ((_flags
6300: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
6310: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
6320: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
6330: 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c  allbacks) == SQL
6340: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6350: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
6360: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
6370: 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ks)..        {..
6380: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
6390: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
63a0: 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51  e value = new SQ
63b0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
63c0: 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue();..        
63d0: 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74      bool complet
63e0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
63f0: 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75    InvokeReadValu
6400: 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77  eCallback(i, new
6410: 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65   SQLiteReadValue
6420: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
6430: 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74              "Get
6440: 44 61 74 65 54 69 6d 65 22 2c 20 6e 75 6c 6c 2c  DateTime", null,
6450: 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d   value), out com
6460: 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  plete);....     
6470: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c         if (compl
6480: 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ete)..          
6490: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
64a0: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 44       if (value.D
64b0: 61 74 65 54 69 6d 65 56 61 6c 75 65 20 3d 3d 20  ateTimeValue == 
64c0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
64d0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
64e0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
64f0: 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 64 61  tion("missing da
6500: 74 65 2f 74 69 6d 65 20 72 65 74 75 72 6e 20 76  te/time return v
6510: 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  alue");....     
6520: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6530: 6e 20 28 44 61 74 65 54 69 6d 65 29 76 61 6c 75  n (DateTime)valu
6540: 65 2e 44 61 74 65 54 69 6d 65 56 61 6c 75 65 3b  e.DateTimeValue;
6550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6560: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
6570: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
6580: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
6590: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
65a0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
65b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
65c0: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 61 74   _keyInfo.GetDat
65d0: 65 54 69 6d 65 28 69 20 2d 20 50 72 69 76 61 74  eTime(i - Privat
65e0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
65f0: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
6600: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
6610: 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29 3b 0d  Type.DateTime);.
6620: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6630: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
6640: 2e 5f 73 71 6c 2e 47 65 74 44 61 74 65 54 69 6d  ._sql.GetDateTim
6650: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
6660: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
6670: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
6680: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
6690: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 75 6d 6e  rieve the column
66a0: 20 61 73 20 61 20 64 65 63 69 6d 61 6c 20 76 61   as a decimal va
66b0: 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  lue..    /// </s
66c0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
66d0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
66e0: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
66f0: 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d  e column.</param
6700: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
6710: 72 6e 73 3e 64 65 63 69 6d 61 6c 3c 2f 72 65 74  rns>decimal</ret
6720: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
6730: 63 20 6f 76 65 72 72 69 64 65 20 64 65 63 69 6d  c override decim
6740: 61 6c 20 47 65 74 44 65 63 69 6d 61 6c 28 69 6e  al GetDecimal(in
6750: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
6760: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6770: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
6780: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
6790: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
67a0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
67b0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
67c0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
67d0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
67e0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
67f0: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
6800: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
6810: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
6820: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6830: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
6840: 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e  rValue value = n
6850: 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  ew SQLiteDataRea
6860: 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20  derValue();..   
6870: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f           bool co
6880: 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20  mplete;....     
6890: 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61         InvokeRea
68a0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69  dValueCallback(i
68b0: 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  , new SQLiteRead
68c0: 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d  ValueEventArgs(.
68d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
68e0: 20 22 47 65 74 44 65 63 69 6d 61 6c 22 2c 20 6e   "GetDecimal", n
68f0: 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74  ull, value), out
6900: 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20   complete);.... 
6910: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
6920: 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20  omplete)..      
6930: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6940: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
6950: 75 65 2e 44 65 63 69 6d 61 6c 56 61 6c 75 65 20  ue.DecimalValue 
6960: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
6970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
6980: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
6990: 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67  ception("missing
69a0: 20 64 65 63 69 6d 61 6c 20 72 65 74 75 72 6e 20   decimal return 
69b0: 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  value");....    
69c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
69d0: 72 6e 20 28 64 65 63 69 6d 61 6c 29 76 61 6c 75  rn (decimal)valu
69e0: 65 2e 44 65 63 69 6d 61 6c 56 61 6c 75 65 3b 0d  e.DecimalValue;.
69f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6a00: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6a10: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
6a20: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
6a30: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
6a40: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
6a50: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6a60: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 65 63 69  _keyInfo.GetDeci
6a70: 6d 61 6c 28 69 20 2d 20 50 72 69 76 61 74 65 56  mal(i - PrivateV
6a80: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
6a90: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65  );....        Ve
6aa0: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
6ab0: 70 65 2e 44 65 63 69 6d 61 6c 29 3b 0d 0a 20 20  pe.Decimal);..  
6ac0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 65 63        return Dec
6ad0: 69 6d 61 6c 2e 50 61 72 73 65 28 5f 61 63 74 69  imal.Parse(_acti
6ae0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
6af0: 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65  .GetText(_active
6b00: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 2c 20 4e  Statement, i), N
6b10: 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f  umberStyles.Allo
6b20: 77 44 65 63 69 6d 61 6c 50 6f 69 6e 74 20 7c 20  wDecimalPoint | 
6b30: 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c  NumberStyles.All
6b40: 6f 77 45 78 70 6f 6e 65 6e 74 20 7c 20 4e 75 6d  owExponent | Num
6b50: 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f 77 4c  berStyles.AllowL
6b60: 65 61 64 69 6e 67 53 69 67 6e 2c 20 43 75 6c 74  eadingSign, Cult
6b70: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
6b80: 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20  tCulture);..    
6b90: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
6ba0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
6bb0: 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75  Returns the colu
6bc0: 6d 6e 20 61 73 20 61 20 64 6f 75 62 6c 65 0d 0a  mn as a double..
6bd0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6be0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
6bf0: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
6c00: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
6c10: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
6c20: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 64    /// <returns>d
6c30: 6f 75 62 6c 65 3c 2f 72 65 74 75 72 6e 73 3e 0d  ouble</returns>.
6c40: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
6c50: 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74 44  ride double GetD
6c60: 6f 75 62 6c 65 28 69 6e 74 20 69 29 0d 0a 20 20  ouble(int i)..  
6c70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
6c80: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
6c90: 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72         VerifyFor
6ca0: 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Get();....      
6cb0: 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20    if ((_flags & 
6cc0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6cd0: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
6ce0: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
6cf0: 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65  backs) == SQLite
6d00: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6d10: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
6d20: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
6d30: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
6d40: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44           SQLiteD
6d50: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76  ataReaderValue v
6d60: 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  alue = new SQLit
6d70: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
6d80: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
6d90: 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d   bool complete;.
6da0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
6db0: 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61  nvokeReadValueCa
6dc0: 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51  llback(i, new SQ
6dd0: 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65  LiteReadValueEve
6de0: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
6df0: 20 20 20 20 20 20 20 20 20 22 47 65 74 44 6f 75           "GetDou
6e00: 62 6c 65 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75  ble", null, valu
6e10: 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  e), out complete
6e20: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6e30: 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d    if (complete).
6e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e60: 69 66 20 28 76 61 6c 75 65 2e 44 6f 75 62 6c 65  if (value.Double
6e70: 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Value == null)..
6e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e90: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
6ea0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d  LiteException("m
6eb0: 69 73 73 69 6e 67 20 64 6f 75 62 6c 65 20 72 65  issing double re
6ec0: 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d  turn value");...
6ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ee0: 20 72 65 74 75 72 6e 20 28 64 6f 75 62 6c 65 29   return (double)
6ef0: 76 61 6c 75 65 2e 44 6f 75 62 6c 65 56 61 6c 75  value.DoubleValu
6f00: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6f10: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
6f20: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
6f30: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
6f40: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
6f50: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
6f60: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6f70: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44  rn _keyInfo.GetD
6f80: 6f 75 62 6c 65 28 69 20 2d 20 50 72 69 76 61 74  ouble(i - Privat
6f90: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
6fa0: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
6fb0: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
6fc0: 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b 0d 0a 20  Type.Double);.. 
6fd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
6fe0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
6ff0: 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f 61  sql.GetDouble(_a
7000: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
7010: 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  i);..    }....  
7020: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
7030: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
7040: 20 74 68 65 20 2e 4e 45 54 20 74 79 70 65 20 6f   the .NET type o
7050: 66 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e  f a given column
7060: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
7070: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
7080: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
7090: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
70a0: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
70b0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
70c0: 3e 54 79 70 65 3c 2f 72 65 74 75 72 6e 73 3e 0d  >Type</returns>.
70d0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
70e0: 72 69 64 65 20 54 79 70 65 20 47 65 74 46 69 65  ride Type GetFie
70f0: 6c 64 54 79 70 65 28 69 6e 74 20 69 29 0d 0a 20  ldType(int i).. 
7100: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
7110: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
7120: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
7130: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
7140: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
7150: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
7160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
7170: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
7180: 74 46 69 65 6c 64 54 79 70 65 28 69 20 2d 20 50  tFieldType(i - P
7190: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
71a0: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
71b0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
71c0: 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65  teConvert.SQLite
71d0: 54 79 70 65 54 6f 54 79 70 65 28 47 65 74 53 51  TypeToType(GetSQ
71e0: 4c 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c  LiteType(_flags,
71f0: 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a   i));..    }....
7200: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
7210: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
7220: 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61  ns a column as a
7230: 20 66 6c 6f 61 74 20 76 61 6c 75 65 0d 0a 20 20   float value..  
7240: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
7250: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
7260: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
7270: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
7280: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
7290: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 66 6c 6f  /// <returns>flo
72a0: 61 74 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  at</returns>..  
72b0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
72c0: 65 20 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61 74  e float GetFloat
72d0: 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
72e0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
72f0: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
7300: 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
7310: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
7320: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
7330: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7340: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
7350: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
7360: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
7370: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
7380: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
7390: 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20  eCallbacks)..   
73a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
73b0: 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65      SQLiteDataRe
73c0: 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20  aderValue value 
73d0: 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61  = new SQLiteData
73e0: 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a  ReaderValue();..
73f0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
7400: 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20   complete;....  
7410: 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65            Invoke
7420: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
7430: 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52  k(i, new SQLiteR
7440: 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67  eadValueEventArg
7450: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
7460: 20 20 20 20 22 47 65 74 46 6c 6f 61 74 22 2c 20      "GetFloat", 
7470: 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75  null, value), ou
7480: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a  t complete);....
7490: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
74a0: 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20  complete)..     
74b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
74c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
74d0: 6c 75 65 2e 46 6c 6f 61 74 56 61 6c 75 65 20 3d  lue.FloatValue =
74e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
74f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
7500: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
7510: 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20  eption("missing 
7520: 66 6c 6f 61 74 20 72 65 74 75 72 6e 20 76 61 6c  float return val
7530: 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ue");....       
7540: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7550: 28 66 6c 6f 61 74 29 76 61 6c 75 65 2e 46 6c 6f  (float)value.Flo
7560: 61 74 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  atValue;..      
7570: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7580: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
7590: 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69   (i >= PrivateVi
75a0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
75b0: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
75c0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
75d0: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
75e0: 6f 2e 47 65 74 46 6c 6f 61 74 28 69 20 2d 20 50  o.GetFloat(i - P
75f0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
7600: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
7610: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
7620: 69 2c 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65  i, DbType.Single
7630: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
7640: 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 53 69 6e  rn Convert.ToSin
7650: 67 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  gle(_activeState
7660: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f 75  ment._sql.GetDou
7670: 62 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ble(_activeState
7680: 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20  ment, i));..    
7690: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
76a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
76b0: 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75  Returns the colu
76c0: 6d 6e 20 61 73 20 61 20 47 75 69 64 0d 0a 20 20  mn as a Guid..  
76d0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
76e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
76f0: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
7700: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
7710: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
7720: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 47 75 69  /// <returns>Gui
7730: 64 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  d</returns>..   
7740: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
7750: 20 47 75 69 64 20 47 65 74 47 75 69 64 28 69 6e   Guid GetGuid(in
7760: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
7770: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
7780: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
7790: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
77a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
77b0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
77c0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
77d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
77e0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
77f0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7800: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
7810: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
7820: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
7830: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7840: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
7850: 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e  rValue value = n
7860: 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  ew SQLiteDataRea
7870: 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20  derValue();..   
7880: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f           bool co
7890: 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20  mplete;....     
78a0: 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61         InvokeRea
78b0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69  dValueCallback(i
78c0: 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  , new SQLiteRead
78d0: 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d  ValueEventArgs(.
78e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
78f0: 20 22 47 65 74 47 75 69 64 22 2c 20 6e 75 6c 6c   "GetGuid", null
7900: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
7910: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
7920: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
7930: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
7940: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7950: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
7960: 47 75 69 64 56 61 6c 75 65 20 3d 3d 20 6e 75 6c  GuidValue == nul
7970: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7980: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
7990: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
79a0: 6e 28 22 6d 69 73 73 69 6e 67 20 67 75 69 64 20  n("missing guid 
79b0: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
79c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
79d0: 20 20 20 72 65 74 75 72 6e 20 28 47 75 69 64 29     return (Guid)
79e0: 76 61 6c 75 65 2e 47 75 69 64 56 61 6c 75 65 3b  value.GuidValue;
79f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7a00: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
7a10: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
7a20: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
7a30: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
7a40: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
7a50: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7a60: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 47 75 69   _keyInfo.GetGui
7a70: 64 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  d(i - PrivateVis
7a80: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
7a90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70 65  ....        Type
7aa0: 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e 69 74  Affinity affinit
7ab0: 79 20 3d 20 56 65 72 69 66 79 54 79 70 65 28 69  y = VerifyType(i
7ac0: 2c 20 44 62 54 79 70 65 2e 47 75 69 64 29 3b 0d  , DbType.Guid);.
7ad0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 66 66  .        if (aff
7ae0: 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66  inity == TypeAff
7af0: 69 6e 69 74 79 2e 42 6c 6f 62 29 0d 0a 20 20 20  inity.Blob)..   
7b00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7b10: 20 20 20 20 62 79 74 65 5b 5d 20 62 75 66 66 65      byte[] buffe
7b20: 72 20 3d 20 6e 65 77 20 62 79 74 65 5b 31 36 5d  r = new byte[16]
7b30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  ;..            _
7b40: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
7b50: 5f 73 71 6c 2e 47 65 74 42 79 74 65 73 28 5f 61  _sql.GetBytes(_a
7b60: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
7b70: 69 2c 20 30 2c 20 62 75 66 66 65 72 2c 20 30 2c  i, 0, buffer, 0,
7b80: 20 31 36 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   16);..         
7b90: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
7ba0: 69 64 28 62 75 66 66 65 72 29 3b 0d 0a 20 20 20  id(buffer);..   
7bb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7bc0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
7bd0: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
7be0: 64 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  d(_activeStateme
7bf0: 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28  nt._sql.GetText(
7c00: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
7c10: 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  , i));..    }...
7c20: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
7c30: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
7c40: 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  rns the column a
7c50: 73 20 61 20 73 68 6f 72 74 0d 0a 20 20 20 20 2f  s a short..    /
7c60: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
7c70: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
7c80: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
7c90: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
7ca0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
7cb0: 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74 31 36 3c   <returns>Int16<
7cc0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
7cd0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49  ublic override I
7ce0: 6e 74 31 36 20 47 65 74 49 6e 74 31 36 28 69 6e  nt16 GetInt16(in
7cf0: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
7d00: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
7d10: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
7d20: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
7d30: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
7d40: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
7d50: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
7d60: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
7d70: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
7d80: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7d90: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
7da0: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
7db0: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
7dc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7dd0: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
7de0: 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e  rValue value = n
7df0: 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  ew SQLiteDataRea
7e00: 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20  derValue();..   
7e10: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f           bool co
7e20: 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20  mplete;....     
7e30: 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61         InvokeRea
7e40: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69  dValueCallback(i
7e50: 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  , new SQLiteRead
7e60: 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d  ValueEventArgs(.
7e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7e80: 20 22 47 65 74 49 6e 74 31 36 22 2c 20 6e 75 6c   "GetInt16", nul
7e90: 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63  l, value), out c
7ea0: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
7eb0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
7ec0: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
7ed0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7ee0: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
7ef0: 2e 49 6e 74 31 36 56 61 6c 75 65 20 3d 3d 20 6e  .Int16Value == n
7f00: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7f10: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
7f20: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
7f30: 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e 74  ion("missing int
7f40: 31 36 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22  16 return value"
7f50: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7f60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e        return (In
7f70: 74 31 36 29 76 61 6c 75 65 2e 49 6e 74 31 36 56  t16)value.Int16V
7f80: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
7f90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
7fa0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
7fb0: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
7fc0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
7fd0: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
7fe0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
7ff0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
8000: 65 74 49 6e 74 31 36 28 69 20 2d 20 50 72 69 76  etInt16(i - Priv
8010: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
8020: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
8030: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
8040: 44 62 54 79 70 65 2e 49 6e 74 31 36 29 3b 0d 0a  DbType.Int16);..
8050: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43          return C
8060: 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 31 36 28 5f  onvert.ToInt16(_
8070: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
8080: 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61  _sql.GetInt32(_a
8090: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
80a0: 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  i));..    }.... 
80b0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
80c0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  ..    /// Retrie
80d0: 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  ves the column a
80e0: 73 20 61 6e 20 69 6e 74 0d 0a 20 20 20 20 2f 2f  s an int..    //
80f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
8100: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
8110: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
8120: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
8130: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
8140: 3c 72 65 74 75 72 6e 73 3e 49 6e 74 33 32 3c 2f  <returns>Int32</
8150: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
8160: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e  blic override In
8170: 74 33 32 20 47 65 74 49 6e 74 33 32 28 69 6e 74  t32 GetInt32(int
8180: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
8190: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
81a0: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
81b0: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
81c0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
81d0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
81e0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
81f0: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
8200: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
8210: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8220: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
8230: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
8240: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
8250: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8260: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
8270: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
8280: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
8290: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
82a0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
82b0: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
82c0: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
82d0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
82e0: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
82f0: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
8300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8310: 22 47 65 74 49 6e 74 33 32 22 2c 20 6e 75 6c 6c  "GetInt32", null
8320: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
8330: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
8340: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
8350: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
8360: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8370: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
8380: 49 6e 74 33 32 56 61 6c 75 65 20 3d 3d 20 6e 75  Int32Value == nu
8390: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
83a0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
83b0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
83c0: 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 33  on("missing int3
83d0: 32 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29  2 return value")
83e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
83f0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74       return (Int
8400: 33 32 29 76 61 6c 75 65 2e 49 6e 74 33 32 56 61  32)value.Int32Va
8410: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
8420: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
8430: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
8440: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
8450: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
8460: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
8470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
8480: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
8490: 74 49 6e 74 33 32 28 69 20 2d 20 50 72 69 76 61  tInt32(i - Priva
84a0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
84b0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
84c0: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
84d0: 62 54 79 70 65 2e 49 6e 74 33 32 29 3b 0d 0a 20  bType.Int32);.. 
84e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
84f0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
8500: 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63  sql.GetInt32(_ac
8510: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
8520: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
8530: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8540: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
8550: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
8560: 61 20 6c 6f 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20  a long..    /// 
8570: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8580: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
8590: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
85a0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
85b0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
85c0: 65 74 75 72 6e 73 3e 49 6e 74 36 34 3c 2f 72 65  eturns>Int64</re
85d0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
85e0: 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 36  ic override Int6
85f0: 34 20 47 65 74 49 6e 74 36 34 28 69 6e 74 20 69  4 GetInt64(int i
8600: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8610: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
8620: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
8630: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
8640: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
8650: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
8660: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
8670: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
8680: 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53  eCallbacks) == S
8690: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
86a0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
86b0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
86c0: 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  acks)..        {
86d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
86e0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
86f0: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
8700: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
8710: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
8720: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
8730: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
8740: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
8750: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
8760: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
8770: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
8780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
8790: 65 74 49 6e 74 36 34 22 2c 20 6e 75 6c 6c 2c 20  etInt64", null, 
87a0: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
87b0: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
87c0: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
87d0: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
87e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
87f0: 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 49 6e      if (value.In
8800: 74 36 34 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  t64Value == null
8810: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8820: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
8830: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
8840: 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 36 34 20  ("missing int64 
8850: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
8860: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8870: 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74 36 34     return (Int64
8880: 29 76 61 6c 75 65 2e 49 6e 74 36 34 56 61 6c 75  )value.Int64Valu
8890: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
88a0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
88b0: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
88c0: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
88d0: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
88e0: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
88f0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8900: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49  rn _keyInfo.GetI
8910: 6e 74 36 34 28 69 20 2d 20 50 72 69 76 61 74 65  nt64(i - Private
8920: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
8930: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56  t);....        V
8940: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
8950: 79 70 65 2e 49 6e 74 36 34 29 3b 0d 0a 20 20 20  ype.Int64);..   
8960: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
8970: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
8980: 6c 2e 47 65 74 49 6e 74 36 34 28 5f 61 63 74 69  l.GetInt64(_acti
8990: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
89a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
89b0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
89c0: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
89d0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
89e0: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20  column..    /// 
89f0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8a00: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
8a10: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
8a20: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
8a30: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
8a40: 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72  eturns>string</r
8a50: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
8a60: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
8a70: 69 6e 67 20 47 65 74 4e 61 6d 65 28 69 6e 74 20  ing GetName(int 
8a80: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
8a90: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
8aa0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
8ab0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
8ac0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
8ad0: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
8ae0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8af0: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
8b00: 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50  fo.GetName(i - P
8b10: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
8b20: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
8b30: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
8b40: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
8b50: 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63  l.ColumnName(_ac
8b60: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
8b70: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
8b80: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8b90: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
8ba0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
8bb0: 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
8bc0: 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
8bd0: 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a  cified column...
8be0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8bf0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
8c00: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
8c10: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
8c20: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
8c30: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73    /// <returns>s
8c40: 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d  tring</returns>.
8c50: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69  .    public stri
8c60: 6e 67 20 47 65 74 44 61 74 61 62 61 73 65 4e 61  ng GetDatabaseNa
8c70: 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  me(int i)..    {
8c80: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
8c90: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
8ca0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
8cb0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
8cc0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
8cd0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
8ce0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8cf0: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d   _keyInfo.GetNam
8d00: 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  e(i - PrivateVis
8d10: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
8d20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
8d30: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
8d40: 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 44  ent._sql.ColumnD
8d50: 61 74 61 62 61 73 65 4e 61 6d 65 28 5f 61 63 74  atabaseName(_act
8d60: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
8d70: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
8d80: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
8d90: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
8da0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
8db0: 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20  able associated 
8dc0: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
8dd0: 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20  ed column...    
8de0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
8df0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
8e00: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
8e10: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
8e20: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
8e30: 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e  / <returns>strin
8e40: 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  g</returns>..   
8e50: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47   public string G
8e60: 65 74 54 61 62 6c 65 4e 61 6d 65 28 69 6e 74 20  etTableName(int 
8e70: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
8e80: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
8e90: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
8ea0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
8eb0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
8ec0: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
8ed0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8ee0: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
8ef0: 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50  fo.GetName(i - P
8f00: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
8f10: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
8f20: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
8f30: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
8f40: 6c 2e 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d  l.ColumnTableNam
8f50: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
8f60: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
8f70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
8f80: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
8f90: 75 72 6e 73 20 74 68 65 20 6f 72 69 67 69 6e 61  urns the origina
8fa0: 6c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 70  l name of the sp
8fb0: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d  ecified column..
8fc0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
8fd0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
8fe0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
8ff0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
9000: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
9010: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
9020: 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e  string</returns>
9030: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72  ..    public str
9040: 69 6e 67 20 47 65 74 4f 72 69 67 69 6e 61 6c 4e  ing GetOriginalN
9050: 61 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ame(int i)..    
9060: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
9070: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
9080: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
9090: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
90a0: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
90b0: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
90c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
90d0: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61  n _keyInfo.GetNa
90e0: 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  me(i - PrivateVi
90f0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
9100: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
9110: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
9120: 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
9130: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 5f 61 63  OriginalName(_ac
9140: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
9150: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9160: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
9170: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
9180: 73 20 74 68 65 20 69 20 6f 66 20 61 20 63 6f 6c  s the i of a col
9190: 75 6d 6e 2c 20 67 69 76 65 6e 20 69 74 73 20 6e  umn, given its n
91a0: 61 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ame..    /// </s
91b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
91c0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61   <param name="na
91d0: 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20  me">The name of 
91e0: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
91f0: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a  trieve</param>..
9200: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
9210: 3e 54 68 65 20 69 6e 74 20 69 20 6f 66 20 74 68  >The int i of th
9220: 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
9230: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
9240: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 4f  verride int GetO
9250: 72 64 69 6e 61 6c 28 73 74 72 69 6e 67 20 6e 61  rdinal(string na
9260: 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
9270: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9280: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
9290: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
92a0: 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  ) SQLiteCommand.
92b0: 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b  Check(_command);
92c0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ....      //..  
92d0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 72      // NOTE: Fir
92e0: 73 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65  st, check if the
92f0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 63   column name cac
9300: 68 65 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  he has been init
9310: 69 61 6c 69 7a 65 64 20 79 65 74 2e 0d 0a 20 20  ialized yet...  
9320: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20      //       If 
9330: 6e 6f 74 2c 20 64 6f 20 69 74 20 6e 6f 77 2e 0d  not, do it now..
9340: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
9350: 20 69 66 20 28 5f 66 69 65 6c 64 49 6e 64 65 78   if (_fieldIndex
9360: 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
9370: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9380: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
9390: 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73  new Dictionary<s
93a0: 74 72 69 6e 67 2c 20 69 6e 74 3e 28 0d 0a 20 20  tring, int>(..  
93b0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
93c0: 6e 67 43 6f 6d 70 61 72 65 72 2e 4f 72 64 69 6e  ngComparer.Ordin
93d0: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a  alIgnoreCase);..
93e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
93f0: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
9400: 54 45 3a 20 4e 65 78 74 2c 20 73 65 65 20 69 66  TE: Next, see if
9410: 20 74 68 65 20 69 6e 64 65 78 20 66 6f 72 20 74   the index for t
9420: 68 65 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c  he requested col
9430: 75 6d 6e 20 6e 61 6d 65 20 68 61 73 20 62 65 65  umn name has bee
9440: 6e 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  n..      //     
9450: 20 20 63 61 63 68 65 64 20 61 6c 72 65 61 64 79    cached already
9460: 2e 20 20 49 66 20 73 6f 2c 20 72 65 74 75 72 6e  .  If so, return
9470: 20 74 68 65 20 63 61 63 68 65 64 20 76 61 6c 75   the cached valu
9480: 65 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 0d 0a  e.  Otherwise,..
9490: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
94a0: 6f 6f 6b 75 70 20 74 68 65 20 76 61 6c 75 65 20  ookup the value 
94b0: 61 6e 64 20 74 68 65 6e 20 63 61 63 68 65 20 74  and then cache t
94c0: 68 65 20 72 65 73 75 6c 74 20 66 6f 72 20 66 75  he result for fu
94d0: 74 75 72 65 20 75 73 65 2e 0d 0a 20 20 20 20 20  ture use...     
94e0: 20 2f 2f 0d 0a 20 20 20 20 20 20 69 6e 74 20 72   //..      int r
94f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 21  ;....      if (!
9500: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 2e 54 72  _fieldIndexes.Tr
9510: 79 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  yGetValue(name, 
9520: 6f 75 74 20 72 29 29 0d 0a 20 20 20 20 20 20 7b  out r))..      {
9530: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 20 3d 20  ..          r = 
9540: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
9550: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 49 6e 64 65  ._sql.ColumnInde
9560: 78 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  x(_activeStateme
9570: 6e 74 2c 20 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  nt, name);....  
9580: 20 20 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d          if (r ==
9590: 20 2d 31 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20   -1 && _keyInfo 
95a0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
95b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
95c0: 20 20 20 20 20 72 20 3d 20 5f 6b 65 79 49 6e 66       r = _keyInf
95d0: 6f 2e 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d  o.GetOrdinal(nam
95e0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
95f0: 20 20 20 69 66 20 28 72 20 3e 20 2d 31 29 20 72     if (r > -1) r
9600: 20 2b 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   += PrivateVisib
9610: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20  leFieldCount;.. 
9620: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
9630: 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 49 6e          _fieldIn
9640: 64 65 78 65 73 2e 41 64 64 28 6e 61 6d 65 2c 20  dexes.Add(name, 
9650: 72 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  r);..      }....
9660: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 3b 0d        return r;.
9670: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
9680: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
9690: 20 2f 2f 2f 20 53 63 68 65 6d 61 20 69 6e 66 6f   /// Schema info
96a0: 72 6d 61 74 69 6f 6e 20 69 6e 20 53 51 4c 69 74  rmation in SQLit
96b0: 65 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 74  e is difficult t
96c0: 6f 20 6d 61 70 20 69 6e 74 6f 20 2e 4e 45 54 20  o map into .NET 
96d0: 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 73 6f 20  conventions, so 
96e0: 61 20 6c 6f 74 20 6f 66 20 77 6f 72 6b 20 6d 75  a lot of work mu
96f0: 73 74 20 62 65 20 64 6f 6e 65 0d 0a 20 20 20 20  st be done..    
9700: 2f 2f 2f 20 74 6f 20 67 61 74 68 65 72 20 74 68  /// to gather th
9710: 65 20 6e 65 63 65 73 73 61 72 79 20 69 6e 66 6f  e necessary info
9720: 72 6d 61 74 69 6f 6e 20 73 6f 20 69 74 20 63 61  rmation so it ca
9730: 6e 20 62 65 20 72 65 70 72 65 73 65 6e 74 65 64  n be represented
9740: 20 69 6e 20 61 6e 20 41 44 4f 2e 4e 45 54 20 6d   in an ADO.NET m
9750: 61 6e 6e 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  anner...    /// 
9760: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9770: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
9780: 75 72 6e 73 20 61 20 44 61 74 61 54 61 62 6c 65  urns a DataTable
9790: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
97a0: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
97b0: 6f 6e 20 66 6f 72 20 74 68 65 20 61 63 74 69 76  on for the activ
97c0: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
97d0: 6e 74 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nt being process
97e0: 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ed.</returns>.. 
97f0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
9800: 64 65 20 44 61 74 61 54 61 62 6c 65 20 47 65 74  de DataTable Get
9810: 53 63 68 65 6d 61 54 61 62 6c 65 28 29 0d 0a 20  SchemaTable().. 
9820: 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63     {..      Chec
9830: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
9840: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 53 63      return GetSc
9850: 68 65 6d 61 54 61 62 6c 65 28 74 72 75 65 2c 20  hemaTable(true, 
9860: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  false);..    }..
9870: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98c0: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
98d0: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 43 6c   ColumnParent Cl
98e0: 61 73 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ass..    private
98f0: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43 6f   sealed class Co
9900: 6c 75 6d 6e 50 61 72 65 6e 74 20 3a 20 49 45 71  lumnParent : IEq
9910: 75 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 43  ualityComparer<C
9920: 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 0d 0a 20 20  olumnParent>..  
9930: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
9940: 67 69 6f 6e 20 50 75 62 6c 69 63 20 46 69 65 6c  gion Public Fiel
9950: 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ds..        publ
9960: 69 63 20 73 74 72 69 6e 67 20 44 61 74 61 62 61  ic string Databa
9970: 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  seName;..       
9980: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54   public string T
9990: 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  ableName;..     
99a0: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
99b0: 20 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20   ColumnName;..  
99c0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
99d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
99e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a20: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
9a30: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
9a40: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
9a50: 20 20 20 20 70 75 62 6c 69 63 20 43 6f 6c 75 6d      public Colum
9a60: 6e 50 61 72 65 6e 74 28 29 0d 0a 20 20 20 20 20  nParent()..     
9a70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9a80: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
9a90: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
9aa0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9af0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
9b00: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 0d 0a   ColumnParent(..
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9b20: 6e 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65 2c  ng databaseName,
9b30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
9b40: 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 2c 0d  ring tableName,.
9b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
9b60: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 0d 0a  ing columnName..
9b70: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
9b80: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
9b90: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s()..        {..
9ba0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
9bb0: 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 20 3d 20  .DatabaseName = 
9bc0: 64 61 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20  databaseName;.. 
9bd0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
9be0: 54 61 62 6c 65 4e 61 6d 65 20 3d 20 74 61 62 6c  TableName = tabl
9bf0: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
9c00: 20 20 20 20 74 68 69 73 2e 43 6f 6c 75 6d 6e 4e      this.ColumnN
9c10: 61 6d 65 20 3d 20 63 6f 6c 75 6d 6e 4e 61 6d 65  ame = columnName
9c20: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
9c30: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
9c40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
9c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
9ca0: 72 65 67 69 6f 6e 20 49 45 71 75 61 6c 69 74 79  region IEquality
9cb0: 43 6f 6d 70 61 72 65 72 3c 43 6f 6c 75 6d 6e 50  Comparer<ColumnP
9cc0: 61 72 65 6e 74 3e 20 4d 65 6d 62 65 72 73 0d 0a  arent> Members..
9cd0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
9ce0: 6f 6f 6c 20 45 71 75 61 6c 73 28 43 6f 6c 75 6d  ool Equals(Colum
9cf0: 6e 50 61 72 65 6e 74 20 78 2c 20 43 6f 6c 75 6d  nParent x, Colum
9d00: 6e 50 61 72 65 6e 74 20 79 29 0d 0a 20 20 20 20  nParent y)..    
9d10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9d20: 20 20 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c     if ((x == nul
9d30: 6c 29 20 26 26 20 28 79 20 3d 3d 20 6e 75 6c 6c  l) && (y == null
9d40: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
9d50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9d60: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
9d70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
9d90: 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29   if ((x == null)
9da0: 20 7c 7c 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29   || (y == null))
9db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9dd0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9df0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
9e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e20: 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
9e30: 6c 73 28 78 2e 44 61 74 61 62 61 73 65 4e 61 6d  ls(x.DatabaseNam
9e40: 65 2c 20 79 2e 44 61 74 61 62 61 73 65 4e 61 6d  e, y.DatabaseNam
9e50: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
9e60: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
9e70: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
9e80: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29  inalIgnoreCase))
9e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ea0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9eb0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9ec0: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
9ed0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
9ef0: 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
9f00: 78 2e 54 61 62 6c 65 4e 61 6d 65 2c 20 79 2e 54  x.TableName, y.T
9f10: 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  ableName,..     
9f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f30: 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
9f40: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
9f50: 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20 20 20  eCase))..       
9f60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f80: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
9fa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9fb0: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
9fc0: 45 71 75 61 6c 73 28 78 2e 43 6f 6c 75 6d 6e 4e  Equals(x.ColumnN
9fd0: 61 6d 65 2c 20 79 2e 43 6f 6c 75 6d 6e 4e 61 6d  ame, y.ColumnNam
9fe0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
9ff0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
a000: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
a010: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29  inalIgnoreCase))
a020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a030: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a040: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a050: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
a060: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a070: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a080: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
a090: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a0a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
a0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a100: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 47 65 74    public int Get
a110: 48 61 73 68 43 6f 64 65 28 43 6f 6c 75 6d 6e 50  HashCode(ColumnP
a120: 61 72 65 6e 74 20 6f 62 6a 29 0d 0a 20 20 20 20  arent obj)..    
a130: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a140: 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20     int result = 
a150: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
a160: 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75    if ((obj != nu
a170: 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 44 61 74 61  ll) && (obj.Data
a180: 62 61 73 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  baseName != null
a190: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
a1a0: 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62      result ^= ob
a1b0: 6a 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 2e 47  j.DatabaseName.G
a1c0: 65 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d  etHashCode();...
a1d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
a1e0: 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26  ((obj != null) &
a1f0: 26 20 28 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d 65  & (obj.TableName
a200: 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   != null))..    
a210: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
a220: 6c 74 20 5e 3d 20 6f 62 6a 2e 54 61 62 6c 65 4e  lt ^= obj.TableN
a230: 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28  ame.GetHashCode(
a240: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
a250: 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75    if ((obj != nu
a260: 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 43 6f 6c 75  ll) && (obj.Colu
a270: 6d 6e 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29  mnName != null))
a280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a290: 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e    result ^= obj.
a2a0: 43 6f 6c 75 6d 6e 4e 61 6d 65 2e 47 65 74 48 61  ColumnName.GetHa
a2b0: 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20  shCode();....   
a2c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a2d0: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
a2e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
a2f0: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
a300: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
a310: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
a320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a360: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
a370: 73 74 61 74 69 63 20 76 6f 69 64 20 47 65 74 53  static void GetS
a380: 74 61 74 65 6d 65 6e 74 43 6f 6c 75 6d 6e 50 61  tatementColumnPa
a390: 72 65 6e 74 73 28 0d 0a 20 20 20 20 20 20 20 20  rents(..        
a3a0: 53 51 4c 69 74 65 42 61 73 65 20 73 71 6c 2c 0d  SQLiteBase sql,.
a3b0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
a3c0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 0d 0a  tatement stmt,..
a3d0: 20 20 20 20 20 20 20 20 69 6e 74 20 66 69 65 6c          int fiel
a3e0: 64 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  dCount,..       
a3f0: 20 72 65 66 20 44 69 63 74 69 6f 6e 61 72 79 3c   ref Dictionary<
a400: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69  ColumnParent, Li
a410: 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54  st<int>> parentT
a420: 6f 43 6f 6c 75 6d 6e 73 2c 0d 0a 20 20 20 20 20  oColumns,..     
a430: 20 20 20 72 65 66 20 44 69 63 74 69 6f 6e 61 72     ref Dictionar
a440: 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72  y<int, ColumnPar
a450: 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54 6f 50 61 72  ent> columnToPar
a460: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ent..        )..
a470: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
a480: 66 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  f (parentToColum
a490: 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
a4a0: 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 54           parentT
a4b0: 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e 65 77 20 44  oColumns = new D
a4c0: 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e  ictionary<Column
a4d0: 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74  Parent, List<int
a4e0: 3e 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  >>(..           
a4f0: 20 20 20 20 20 6e 65 77 20 43 6f 6c 75 6d 6e 50       new ColumnP
a500: 61 72 65 6e 74 28 29 29 3b 0d 0a 0d 0a 20 20 20  arent());....   
a510: 20 20 20 20 20 69 66 20 28 63 6f 6c 75 6d 6e 54       if (columnT
a520: 6f 50 61 72 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  oParent == null)
a530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
a540: 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 20 6e  lumnToParent = n
a550: 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e  ew Dictionary<in
a560: 74 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e  t, ColumnParent>
a570: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  ();....        f
a580: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
a590: 20 3c 20 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e   < fieldCount; n
a5a0: 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ++)..        {..
a5b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
a5c0: 6e 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65 20  ng databaseName 
a5d0: 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 44 61 74 61  = sql.ColumnData
a5e0: 62 61 73 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e  baseName(stmt, n
a5f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a600: 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65  string tableName
a610: 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 54 61 62   = sql.ColumnTab
a620: 6c 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b  leName(stmt, n);
a630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
a640: 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 20  ring columnName 
a650: 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67  = sql.ColumnOrig
a660: 69 6e 61 6c 4e 61 6d 65 28 73 74 6d 74 2c 20 6e  inalName(stmt, n
a670: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
a680: 20 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6b    ColumnParent k
a690: 65 79 20 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e 50  ey = new ColumnP
a6a0: 61 72 65 6e 74 28 64 61 74 61 62 61 73 65 4e 61  arent(databaseNa
a6b0: 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65 2c 20 6e  me, tableName, n
a6c0: 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ull);..         
a6d0: 20 20 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20     ColumnParent 
a6e0: 76 61 6c 75 65 20 3d 20 6e 65 77 20 43 6f 6c 75  value = new Colu
a6f0: 6d 6e 50 61 72 65 6e 74 28 64 61 74 61 62 61 73  mnParent(databas
a700: 65 4e 61 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65  eName, tableName
a710: 2c 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0d 0a  , columnName);..
a720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 69  ..            Li
a730: 73 74 3c 69 6e 74 3e 20 69 6e 64 65 78 4c 69 73  st<int> indexLis
a740: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
a750: 20 20 69 66 20 28 21 70 61 72 65 6e 74 54 6f 43    if (!parentToC
a760: 6f 6c 75 6d 6e 73 2e 54 72 79 47 65 74 56 61 6c  olumns.TryGetVal
a770: 75 65 28 6b 65 79 2c 20 6f 75 74 20 69 6e 64 65  ue(key, out inde
a780: 78 4c 69 73 74 29 29 0d 0a 20 20 20 20 20 20 20  xList))..       
a790: 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 54           parentT
a7a0: 6f 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 6b 65 79  oColumns.Add(key
a7b0: 2c 20 6e 65 77 20 4c 69 73 74 3c 69 6e 74 3e 28  , new List<int>(
a7c0: 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 6e 20 7d 29  new int[] { n })
a7d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a7e0: 65 6c 73 65 20 69 66 20 28 69 6e 64 65 78 4c 69  else if (indexLi
a7f0: 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st != null)..   
a800: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
a810: 65 78 4c 69 73 74 2e 41 64 64 28 6e 29 3b 0d 0a  exList.Add(n);..
a820: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
a830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a840: 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e    parentToColumn
a850: 73 5b 6b 65 79 5d 20 3d 20 6e 65 77 20 4c 69 73  s[key] = new Lis
a860: 74 3c 69 6e 74 3e 28 6e 65 77 20 69 6e 74 5b 5d  t<int>(new int[]
a870: 20 7b 20 6e 20 7d 29 3b 0d 0a 0d 0a 20 20 20 20   { n });....    
a880: 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f          columnTo
a890: 50 61 72 65 6e 74 2e 41 64 64 28 6e 2c 20 76 61  Parent.Add(n, va
a8a0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
a8b0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
a8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a910: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
a920: 20 69 6e 74 20 43 6f 75 6e 74 50 61 72 65 6e 74   int CountParent
a930: 73 28 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74  s(..        Dict
a940: 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72  ionary<ColumnPar
a950: 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20  ent, List<int>> 
a960: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 0d  parentToColumns.
a970: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
a980: 7b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72  {..        int r
a990: 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  esult = 0;....  
a9a0: 20 20 20 20 20 20 69 66 20 28 70 61 72 65 6e 74        if (parent
a9b0: 54 6f 43 6f 6c 75 6d 6e 73 20 21 3d 20 6e 75 6c  ToColumns != nul
a9c0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
a9d0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
a9e0: 63 68 20 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ch (ColumnParent
a9f0: 20 6b 65 79 20 69 6e 20 70 61 72 65 6e 74 54 6f   key in parentTo
aa00: 43 6f 6c 75 6d 6e 73 2e 4b 65 79 73 29 0d 0a 20  Columns.Keys).. 
aa10: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
aa30: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
aa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa50: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
aa60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aa70: 20 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d   string tableNam
aa80: 65 20 3d 20 6b 65 79 2e 54 61 62 6c 65 4e 61 6d  e = key.TableNam
aa90: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
aaa0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
aab0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
aac0: 61 62 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  ableName))..    
aad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aae0: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
aaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
ab00: 75 6c 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ult++;..        
ab10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
ab20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
ab30: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
ab40: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
ab50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab90: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ////....    inte
aba0: 72 6e 61 6c 20 44 61 74 61 54 61 62 6c 65 20 47  rnal DataTable G
abb0: 65 74 53 63 68 65 6d 61 54 61 62 6c 65 28 62 6f  etSchemaTable(bo
abc0: 6f 6c 20 77 61 6e 74 55 6e 69 71 75 65 49 6e 66  ol wantUniqueInf
abd0: 6f 2c 20 62 6f 6f 6c 20 77 61 6e 74 44 65 66 61  o, bool wantDefa
abe0: 75 6c 74 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ultValue)..    {
abf0: 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  ..      CheckClo
ac00: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 69 66  sed();..      if
ac10: 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73   (_throwOnDispos
ac20: 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ed) SQLiteComman
ac30: 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64  d.Check(_command
ac40: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  );....      //..
ac50: 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a        // BUGFIX:
ac60: 20 57 65 20 6e 65 65 64 20 74 6f 20 71 75 69 63   We need to quic
ac70: 6b 6c 79 20 73 63 61 6e 20 61 6c 6c 20 74 68 65  kly scan all the
ac80: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
ac90: 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 2f 2f  urrent..      //
aca0: 20 20 20 20 20 20 20 20 20 22 72 65 73 75 6c 74           "result
acb0: 20 73 65 74 22 20 74 6f 20 73 65 65 20 68 6f 77   set" to see how
acc0: 20 6d 61 6e 79 20 64 69 73 74 69 6e 63 74 20 74   many distinct t
acd0: 61 62 6c 65 73 20 61 72 65 20 61 63 74 75 61 6c  ables are actual
ace0: 6c 79 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  ly..      //    
acf0: 20 20 20 20 20 69 6e 76 6f 6c 76 65 64 2e 20 20       involved.  
ad00: 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  This information
ad10: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f   is necessary so
ad20: 20 74 68 61 74 20 73 6f 6d 65 0d 0a 20 20 20 20   that some..    
ad30: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 74    //         int
ad40: 65 6c 6c 69 67 65 6e 74 20 64 65 63 69 73 69 6f  elligent decisio
ad50: 6e 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 77  ns can be made w
ad60: 68 65 6e 20 63 6f 6e 73 74 72 75 63 74 69 6e 67  hen constructing
ad70: 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20   the..      //  
ad80: 20 20 20 20 20 20 20 6d 65 74 61 64 61 74 61 20         metadata 
ad90: 62 65 6c 6f 77 2e 20 20 46 6f 72 20 65 78 61 6d  below.  For exam
ada0: 70 6c 65 2c 20 77 65 20 6e 65 65 64 20 74 6f 20  ple, we need to 
adb0: 62 65 20 76 65 72 79 20 63 61 72 65 66 75 6c 0d  be very careful.
adc0: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
add0: 20 20 61 62 6f 75 74 20 66 6c 61 67 67 69 6e 67    about flagging
ade0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 63 6f   a particular co
adf0: 6c 75 6d 6e 20 61 73 20 22 75 6e 69 71 75 65 22  lumn as "unique"
ae00: 20 6a 75 73 74 0d 0a 20 20 20 20 20 20 2f 2f 20   just..      // 
ae10: 20 20 20 20 20 20 20 20 62 65 63 61 75 73 65 20          because 
ae20: 69 74 20 77 61 73 20 69 6e 20 69 74 73 20 6f 72  it was in its or
ae30: 69 67 69 6e 61 6c 20 75 6e 64 65 72 6c 79 69 6e  iginal underlyin
ae40: 67 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  g database table
ae50: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
ae60: 20 20 20 69 66 20 74 68 65 72 65 20 61 72 65 20     if there are 
ae70: 6e 6f 77 20 6d 75 6c 74 69 70 6c 65 20 74 61 62  now multiple tab
ae80: 6c 65 73 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20  les involved in 
ae90: 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  the..      //   
aea0: 20 20 20 20 20 20 22 72 65 73 75 6c 74 20 73 65        "result se
aeb0: 74 22 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20  t".  See ticket 
aec0: 5b 37 65 33 66 61 39 33 37 34 34 5d 20 66 6f 72  [7e3fa93744] for
aed0: 20 6d 6f 72 65 20 64 65 74 61 69 6c 65 64 0d 0a   more detailed..
aee0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
aef0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0d 0a 20   information... 
af00: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 44       //..      D
af10: 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e  ictionary<Column
af20: 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74  Parent, List<int
af30: 3e 3e 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  >> parentToColum
af40: 6e 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ns = null;..    
af50: 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74    Dictionary<int
af60: 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20  , ColumnParent> 
af70: 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d  columnToParent =
af80: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
af90: 47 65 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c 75  GetStatementColu
afa0: 6d 6e 50 61 72 65 6e 74 73 28 0d 0a 20 20 20 20  mnParents(..    
afb0: 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43        _command.C
afc0: 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2c 20  onnection._sql, 
afd0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
afe0: 2c 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a  , _fieldCount,..
aff0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 70 61            ref pa
b000: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 20 72  rentToColumns, r
b010: 65 66 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e  ef columnToParen
b020: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 44 61 74  t);....      Dat
b030: 61 54 61 62 6c 65 20 74 62 6c 20 3d 20 6e 65 77  aTable tbl = new
b040: 20 44 61 74 61 54 61 62 6c 65 28 22 53 63 68 65   DataTable("Sche
b050: 6d 61 54 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20  maTable");..    
b060: 20 20 44 61 74 61 54 61 62 6c 65 20 74 62 6c 49    DataTable tblI
b070: 6e 64 65 78 65 73 20 3d 20 6e 75 6c 6c 3b 0d 0a  ndexes = null;..
b080: 20 20 20 20 20 20 44 61 74 61 54 61 62 6c 65 20        DataTable 
b090: 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 3b  tblIndexColumns;
b0a0: 0d 0a 20 20 20 20 20 20 44 61 74 61 52 6f 77 20  ..      DataRow 
b0b0: 72 6f 77 3b 0d 0a 20 20 20 20 20 20 73 74 72 69  row;..      stri
b0c0: 6e 67 20 74 65 6d 70 3b 0d 0a 20 20 20 20 20 20  ng temp;..      
b0d0: 73 74 72 69 6e 67 20 73 74 72 43 61 74 61 6c 6f  string strCatalo
b0e0: 67 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  g = String.Empty
b0f0: 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ;..      string 
b100: 73 74 72 54 61 62 6c 65 20 3d 20 53 74 72 69 6e  strTable = Strin
b110: 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20  g.Empty;..      
b120: 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 75 6d 6e  string strColumn
b130: 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b   = String.Empty;
b140: 0d 0a 0d 0a 20 20 20 20 20 20 74 62 6c 2e 4c 6f  ....      tbl.Lo
b150: 63 61 6c 65 20 3d 20 43 75 6c 74 75 72 65 49 6e  cale = CultureIn
b160: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
b170: 75 72 65 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  ure;..      tbl.
b180: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
b190: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f  maTableColumn.Co
b1a0: 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66  lumnName, typeof
b1b0: 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (String));..    
b1c0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
b1d0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
b1e0: 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61  umn.ColumnOrdina
b1f0: 6c 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b  l, typeof(int));
b200: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
b210: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
b220: 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
b230: 53 69 7a 65 2c 20 74 79 70 65 6f 66 28 69 6e 74  Size, typeof(int
b240: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
b250: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
b260: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
b270: 65 72 69 63 50 72 65 63 69 73 69 6f 6e 2c 20 74  ericPrecision, t
b280: 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20  ypeof(int));..  
b290: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
b2a0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
b2b0: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61  olumn.NumericSca
b2c0: 6c 65 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29  le, typeof(int))
b2d0: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
b2e0: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
b2f0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69  ableColumn.IsUni
b300: 71 75 65 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  que, typeof(Bool
b310: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ean));..      tb
b320: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
b330: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
b340: 49 73 4b 65 79 2c 20 74 79 70 65 6f 66 28 42 6f  IsKey, typeof(Bo
b350: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
b360: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
b370: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
b380: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 65  nalColumn.BaseSe
b390: 72 76 65 72 4e 61 6d 65 2c 20 74 79 70 65 6f 66  rverName, typeof
b3a0: 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (string));..    
b3b0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
b3c0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
b3d0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65  ionalColumn.Base
b3e0: 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 20 74 79 70  CatalogName, typ
b3f0: 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20  eof(String));.. 
b400: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
b410: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
b420: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d  Column.BaseColum
b430: 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74  nName, typeof(St
b440: 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
b450: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
b460: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
b470: 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 2c  .BaseSchemaName,
b480: 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29   typeof(String))
b490: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
b4a0: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
b4b0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
b4c0: 61 62 6c 65 4e 61 6d 65 2c 20 74 79 70 65 6f 66  ableName, typeof
b4d0: 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (String));..    
b4e0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
b4f0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
b500: 75 6d 6e 2e 44 61 74 61 54 79 70 65 2c 20 74 79  umn.DataType, ty
b510: 70 65 6f 66 28 54 79 70 65 29 29 3b 0d 0a 20 20  peof(Type));..  
b520: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
b530: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
b540: 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c  olumn.AllowDBNul
b550: 6c 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  l, typeof(Boolea
b560: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  n));..      tbl.
b570: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
b580: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72  maTableColumn.Pr
b590: 6f 76 69 64 65 72 54 79 70 65 2c 20 74 79 70 65  oviderType, type
b5a0: 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20  of(int));..     
b5b0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
b5c0: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
b5d0: 6d 6e 2e 49 73 41 6c 69 61 73 65 64 2c 20 74 79  mn.IsAliased, ty
b5e0: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d  peof(Boolean));.
b5f0: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
b600: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
b610: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65  leColumn.IsExpre
b620: 73 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f  ssion, typeof(Bo
b630: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
b640: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
b650: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
b660: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f  nalColumn.IsAuto
b670: 49 6e 63 72 65 6d 65 6e 74 2c 20 74 79 70 65 6f  Increment, typeo
b680: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20  f(Boolean));..  
b690: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
b6a0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
b6b0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
b6c0: 52 6f 77 56 65 72 73 69 6f 6e 2c 20 74 79 70 65  RowVersion, type
b6d0: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
b6e0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
b6f0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
b700: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
b710: 73 48 69 64 64 65 6e 2c 20 74 79 70 65 6f 66 28  sHidden, typeof(
b720: 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20  Boolean));..    
b730: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
b740: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
b750: 75 6d 6e 2e 49 73 4c 6f 6e 67 2c 20 74 79 70 65  umn.IsLong, type
b760: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
b770: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
b780: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
b790: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
b7a0: 73 52 65 61 64 4f 6e 6c 79 2c 20 74 79 70 65 6f  sReadOnly, typeo
b7b0: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20  f(Boolean));..  
b7c0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
b7d0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
b7e0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 50 72  ptionalColumn.Pr
b7f0: 6f 76 69 64 65 72 53 70 65 63 69 66 69 63 44 61  oviderSpecificDa
b800: 74 61 54 79 70 65 2c 20 74 79 70 65 6f 66 28 54  taType, typeof(T
b810: 79 70 65 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ype));..      tb
b820: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
b830: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
b840: 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56  lColumn.DefaultV
b850: 61 6c 75 65 2c 20 74 79 70 65 6f 66 28 6f 62 6a  alue, typeof(obj
b860: 65 63 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ect));..      tb
b870: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 44  l.Columns.Add("D
b880: 61 74 61 54 79 70 65 4e 61 6d 65 22 2c 20 74 79  ataTypeName", ty
b890: 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a  peof(string));..
b8a0: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
b8b0: 73 2e 41 64 64 28 22 43 6f 6c 6c 61 74 69 6f 6e  s.Add("Collation
b8c0: 54 79 70 65 22 2c 20 74 79 70 65 6f 66 28 73 74  Type", typeof(st
b8d0: 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
b8e0: 62 6c 2e 42 65 67 69 6e 4c 6f 61 64 44 61 74 61  bl.BeginLoadData
b8f0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  ();....      for
b900: 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
b910: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b   _fieldCount; n+
b920: 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  +)..      {..   
b930: 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65 20       SQLiteType 
b940: 73 71 6c 54 79 70 65 20 3d 20 47 65 74 53 51 4c  sqlType = GetSQL
b950: 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20  iteType(_flags, 
b960: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  n);....        r
b970: 6f 77 20 3d 20 74 62 6c 2e 4e 65 77 52 6f 77 28  ow = tbl.NewRow(
b980: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 62  );....        Db
b990: 54 79 70 65 20 74 79 70 20 3d 20 73 71 6c 54 79  Type typ = sqlTy
b9a0: 70 65 2e 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20  pe.Type;....    
b9b0: 20 20 20 20 2f 2f 20 44 65 66 61 75 6c 74 20 73      // Default s
b9c0: 65 74 74 69 6e 67 73 20 66 6f 72 20 74 68 65 20  ettings for the 
b9d0: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20  column..        
b9e0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
b9f0: 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65  olumn.ColumnName
ba00: 5d 20 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0d  ] = GetName(n);.
ba10: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
ba20: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43  emaTableColumn.C
ba30: 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 5d 20 3d 20  olumnOrdinal] = 
ba40: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  n;..        row[
ba50: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
ba60: 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20  n.ColumnSize] = 
ba70: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44 62  SQLiteConvert.Db
ba80: 54 79 70 65 54 6f 43 6f 6c 75 6d 6e 53 69 7a 65  TypeToColumnSize
ba90: 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
baa0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
bab0: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65  olumn.NumericPre
bac0: 63 69 73 69 6f 6e 5d 20 3d 20 53 51 4c 69 74 65  cision] = SQLite
bad0: 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f  Convert.DbTypeTo
bae0: 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e  NumericPrecision
baf0: 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
bb00: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
bb10: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61  olumn.NumericSca
bb20: 6c 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76  le] = SQLiteConv
bb30: 65 72 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65  ert.DbTypeToNume
bb40: 72 69 63 53 63 61 6c 65 28 74 79 70 29 3b 0d 0a  ricScale(typ);..
bb50: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
bb60: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72  maTableColumn.Pr
bb70: 6f 76 69 64 65 72 54 79 70 65 5d 20 3d 20 73 71  oviderType] = sq
bb80: 6c 54 79 70 65 2e 54 79 70 65 3b 0d 0a 20 20 20  lType.Type;..   
bb90: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
bba0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e  ableColumn.IsLon
bbb0: 67 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  g] = false;..   
bbc0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
bbd0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77  ableColumn.Allow
bbe0: 44 42 4e 75 6c 6c 5d 20 3d 20 74 72 75 65 3b 0d  DBNull] = true;.
bbf0: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
bc00: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
bc10: 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c  Column.IsReadOnl
bc20: 79 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  y] = false;..   
bc30: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
bc40: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
bc50: 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e 5d  mn.IsRowVersion]
bc60: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
bc70: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
bc80: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75  leColumn.IsUniqu
bc90: 65 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  e] = false;..   
bca0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
bcb0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79  ableColumn.IsKey
bcc0: 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  ] = false;..    
bcd0: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
bce0: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
bcf0: 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e  n.IsAutoIncremen
bd00: 74 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  t] = false;..   
bd10: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
bd20: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74 61 54  ableColumn.DataT
bd30: 79 70 65 5d 20 3d 20 47 65 74 46 69 65 6c 64 54  ype] = GetFieldT
bd40: 79 70 65 28 6e 29 3b 0d 0a 20 20 20 20 20 20 20  ype(n);..       
bd50: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
bd60: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
bd70: 73 48 69 64 64 65 6e 5d 20 3d 20 66 61 6c 73 65  sHidden] = false
bd80: 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53  ;..        row[S
bd90: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
bda0: 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 5d  .BaseSchemaName]
bdb0: 20 3d 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61   = _baseSchemaNa
bdc0: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  me;....        s
bdd0: 74 72 43 6f 6c 75 6d 6e 20 3d 20 63 6f 6c 75 6d  trColumn = colum
bde0: 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 43 6f 6c  nToParent[n].Col
bdf0: 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  umnName;..      
be00: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
be10: 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f  ullOrEmpty(strCo
be20: 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29 20  lumn) == false) 
be30: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
be40: 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e  olumn.BaseColumn
be50: 4e 61 6d 65 5d 20 3d 20 73 74 72 43 6f 6c 75 6d  Name] = strColum
be60: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 6f  n;....        ro
be70: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
be80: 75 6d 6e 2e 49 73 45 78 70 72 65 73 73 69 6f 6e  umn.IsExpression
be90: 5d 20 3d 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c  ] = String.IsNul
bea0: 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f 6c 75  lOrEmpty(strColu
beb0: 6d 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f  mn);..        ro
bec0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
bed0: 75 6d 6e 2e 49 73 41 6c 69 61 73 65 64 5d 20 3d  umn.IsAliased] =
bee0: 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65   (String.Compare
bef0: 28 47 65 74 4e 61 6d 65 28 6e 29 2c 20 73 74 72  (GetName(n), str
bf00: 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43 6f  Column, StringCo
bf10: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
bf20: 49 67 6e 6f 72 65 43 61 73 65 29 20 21 3d 20 30  IgnoreCase) != 0
bf30: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65  );....        te
bf40: 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72  mp = columnToPar
bf50: 65 6e 74 5b 6e 5d 2e 54 61 62 6c 65 4e 61 6d 65  ent[n].TableName
bf60: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ;..        if (S
bf70: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
bf80: 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c  pty(temp) == fal
bf90: 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61  se) row[SchemaTa
bfa0: 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61  bleColumn.BaseTa
bfb0: 62 6c 65 4e 61 6d 65 5d 20 3d 20 74 65 6d 70 3b  bleName] = temp;
bfc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65 6d 70  ....        temp
bfd0: 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e   = columnToParen
bfe0: 74 5b 6e 5d 2e 44 61 74 61 62 61 73 65 4e 61 6d  t[n].DatabaseNam
bff0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  e;..        if (
c000: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
c010: 6d 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61  mpty(temp) == fa
c020: 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54  lse) row[SchemaT
c030: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
c040: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
c050: 6d 65 5d 20 3d 20 74 65 6d 70 3b 0d 0a 0d 0a 20  me] = temp;.... 
c060: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61         string da
c070: 74 61 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  taType = null;..
c080: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
c090: 20 68 61 76 65 20 61 20 74 61 62 6c 65 2d 62 6f   have a table-bo
c0a0: 75 6e 64 20 63 6f 6c 75 6d 6e 2c 20 65 78 74 72  und column, extr
c0b0: 61 63 74 20 74 68 65 20 65 78 74 72 61 20 69 6e  act the extra in
c0c0: 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 69  formation from i
c0d0: 74 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  t..        if (S
c0e0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
c0f0: 70 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d  pty(strColumn) =
c100: 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20  = false)..      
c110: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73    {..          s
c120: 74 72 69 6e 67 20 63 6f 6c 6c 53 65 71 20 3d 20  tring collSeq = 
c130: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
c140: 20 62 6f 6f 6c 20 62 4e 6f 74 4e 75 6c 6c 20 3d   bool bNotNull =
c150: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
c160: 20 20 20 62 6f 6f 6c 20 62 50 72 69 6d 61 72 79     bool bPrimary
c170: 4b 65 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  Key = false;..  
c180: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 62 41 75          bool bAu
c190: 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 66 61  toIncrement = fa
c1a0: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
c1b0: 73 74 72 69 6e 67 5b 5d 20 61 72 53 69 7a 65 3b  string[] arSize;
c1c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
c1d0: 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20   Get the column 
c1e0: 6d 65 74 61 20 64 61 74 61 0d 0a 20 20 20 20 20  meta data..     
c1f0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f       _command.Co
c200: 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2e 43 6f  nnection._sql.Co
c210: 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 0d 0a 20  lumnMetaData(.. 
c220: 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
c230: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
c240: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
c250: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
c260: 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ],..            
c270: 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65  (string)row[Sche
c280: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
c290: 73 65 54 61 62 6c 65 4e 61 6d 65 5d 2c 0d 0a 20  seTableName],.. 
c2a0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 43 6f             strCo
c2b0: 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  lumn,..         
c2c0: 20 20 20 72 65 66 20 64 61 74 61 54 79 70 65 2c     ref dataType,
c2d0: 20 72 65 66 20 63 6f 6c 6c 53 65 71 2c 20 72 65   ref collSeq, re
c2e0: 66 20 62 4e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20  f bNotNull, ref 
c2f0: 62 50 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66  bPrimaryKey, ref
c300: 20 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29   bAutoIncrement)
c310: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
c320: 66 20 28 62 4e 6f 74 4e 75 6c 6c 20 7c 7c 20 62  f (bNotNull || b
c330: 50 72 69 6d 61 72 79 4b 65 79 29 20 72 6f 77 5b  PrimaryKey) row[
c340: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c350: 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d  n.AllowDBNull] =
c360: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
c370: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
c380: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79  ableColumn.IsKey
c390: 5d 20 3d 20 62 50 72 69 6d 61 72 79 4b 65 79 20  ] = bPrimaryKey 
c3a0: 26 26 20 43 6f 75 6e 74 50 61 72 65 6e 74 73 28  && CountParents(
c3b0: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 29  parentToColumns)
c3c0: 20 3c 3d 20 31 3b 0d 0a 20 20 20 20 20 20 20 20   <= 1;..        
c3d0: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
c3e0: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
c3f0: 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d  IsAutoIncrement]
c400: 20 3d 20 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e   = bAutoIncremen
c410: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 6f  t;..          ro
c420: 77 5b 22 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65  w["CollationType
c430: 22 5d 20 3d 20 63 6f 6c 6c 53 65 71 3b 0d 0a 0d  "] = collSeq;...
c440: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 6f  .          // Fo
c450: 72 20 74 79 70 65 73 20 6c 69 6b 65 20 76 61 72  r types like var
c460: 63 68 61 72 28 35 30 29 20 61 6e 64 20 73 75 63  char(50) and suc
c470: 68 2c 20 65 78 74 72 61 63 74 20 74 68 65 20 73  h, extract the s
c480: 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61  ize..          a
c490: 72 53 69 7a 65 20 3d 20 64 61 74 61 54 79 70 65  rSize = dataType
c4a0: 2e 53 70 6c 69 74 28 27 28 27 29 3b 0d 0a 20 20  .Split('(');..  
c4b0: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69          if (arSi
c4c0: 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a  ze.Length > 1)..
c4d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c4e0: 20 20 20 20 20 20 20 20 20 64 61 74 61 54 79 70           dataTyp
c4f0: 65 20 3d 20 61 72 53 69 7a 65 5b 30 5d 3b 0d 0a  e = arSize[0];..
c500: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 53 69              arSi
c510: 7a 65 20 3d 20 61 72 53 69 7a 65 5b 31 5d 2e 53  ze = arSize[1].S
c520: 70 6c 69 74 28 27 29 27 29 3b 0d 0a 20 20 20 20  plit(')');..    
c530: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69          if (arSi
c540: 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a  ze.Length > 1)..
c550: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 53               arS
c570: 69 7a 65 20 3d 20 61 72 53 69 7a 65 5b 30 5d 2e  ize = arSize[0].
c580: 53 70 6c 69 74 28 27 2c 27 2c 20 27 2e 27 29 3b  Split(',', '.');
c590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c5a0: 69 66 20 28 73 71 6c 54 79 70 65 2e 54 79 70 65  if (sqlType.Type
c5b0: 20 3d 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72   == DbType.Binar
c5c0: 79 20 7c 7c 20 53 51 4c 69 74 65 43 6f 6e 76 65  y || SQLiteConve
c5d0: 72 74 2e 49 73 53 74 72 69 6e 67 44 62 54 79 70  rt.IsStringDbTyp
c5e0: 65 28 73 71 6c 54 79 70 65 2e 54 79 70 65 29 29  e(sqlType.Type))
c5f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c600: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c610: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c620: 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53  leColumn.ColumnS
c630: 69 7a 65 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54  ize] = Convert.T
c640: 6f 49 6e 74 33 32 28 61 72 53 69 7a 65 5b 30 5d  oInt32(arSize[0]
c650: 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  , CultureInfo.In
c660: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b  variantCulture);
c670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c680: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
c690: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
c6a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c6b0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
c6c0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75  maTableColumn.Nu
c6d0: 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e 5d 20  mericPrecision] 
c6e0: 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33  = Convert.ToInt3
c6f0: 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20 43 75 6c  2(arSize[0], Cul
c700: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
c710: 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20  ntCulture);..   
c720: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
c730: 28 61 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e  (arSize.Length >
c740: 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   1)..           
c750: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
c760: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
c770: 65 72 69 63 53 63 61 6c 65 5d 20 3d 20 43 6f 6e  ericScale] = Con
c780: 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53  vert.ToInt32(arS
c790: 69 7a 65 5b 31 5d 2c 20 43 75 6c 74 75 72 65 49  ize[1], CultureI
c7a0: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
c7b0: 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  ture);..        
c7c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c7d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c7e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
c7f0: 20 69 66 20 28 77 61 6e 74 44 65 66 61 75 6c 74   if (wantDefault
c800: 56 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20  Value)..        
c810: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c820: 20 2f 2f 20 44 65 74 65 72 6d 69 6e 65 20 74 68   // Determine th
c830: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
c840: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20  for the column, 
c850: 77 68 69 63 68 20 73 75 63 6b 73 20 62 65 63 61  which sucks beca
c860: 75 73 65 20 77 65 20 68 61 76 65 20 74 6f 20 71  use we have to q
c870: 75 65 72 79 20 74 68 65 20 73 63 68 65 6d 61 20  uery the schema 
c880: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 0d  for each column.
c890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
c8a0: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
c8b0: 64 20 63 6d 64 54 61 62 6c 65 20 3d 20 6e 65 77  d cmdTable = new
c8c0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 48   SQLiteCommand(H
c8d0: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
c8e0: 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ingFormat(Cultur
c8f0: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
c900: 75 6c 74 75 72 65 2c 20 22 50 52 41 47 4d 41 20  ulture, "PRAGMA 
c910: 5b 7b 30 7d 5d 2e 54 41 42 4c 45 5f 49 4e 46 4f  [{0}].TABLE_INFO
c920: 28 5b 7b 31 7d 5d 29 22 2c 0d 0a 20 20 20 20 20  ([{1}])",..     
c930: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
c940: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
c950: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c  Column.BaseCatal
c960: 6f 67 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20  ogName],..      
c970: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
c980: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
c990: 73 65 54 61 62 6c 65 4e 61 6d 65 5d 0d 0a 20 20  seTableName]..  
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 29 2c 20 5f              ), _
c9b0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69  command.Connecti
c9c0: 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  on))..          
c9d0: 20 20 75 73 69 6e 67 20 28 44 62 44 61 74 61 52    using (DbDataR
c9e0: 65 61 64 65 72 20 72 64 54 61 62 6c 65 20 3d 20  eader rdTable = 
c9f0: 63 6d 64 54 61 62 6c 65 2e 45 78 65 63 75 74 65  cmdTable.Execute
ca00: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
ca10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ca20: 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 64 20          // Find 
ca30: 74 68 65 20 6d 61 74 63 68 69 6e 67 20 63 6f 6c  the matching col
ca40: 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  umn..           
ca50: 20 20 20 77 68 69 6c 65 20 28 72 64 54 61 62 6c     while (rdTabl
ca60: 65 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20  e.Read())..     
ca70: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ca90: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 28  String.Compare((
caa0: 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d  string)row[Schem
cab0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
cac0: 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 2c 20 72 64  eColumnName], rd
cad0: 54 61 62 6c 65 2e 47 65 74 53 74 72 69 6e 67 28  Table.GetString(
cae0: 31 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  1), StringCompar
caf0: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
cb00: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
cb20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cb30: 20 20 20 20 69 66 20 28 72 64 54 61 62 6c 65 2e      if (rdTable.
cb40: 49 73 44 42 4e 75 6c 6c 28 34 29 20 3d 3d 20 66  IsDBNull(4) == f
cb50: 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  alse)..         
cb60: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
cb70: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
cb80: 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74  alColumn.Default
cb90: 56 61 6c 75 65 5d 20 3d 20 72 64 54 61 62 6c 65  Value] = rdTable
cba0: 5b 34 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  [4];....        
cbb0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
cbc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cbd0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
cbe0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
cbf0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
cc00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
cc10: 20 44 65 74 65 72 6d 69 6e 65 20 49 73 55 6e 69   Determine IsUni
cc20: 71 75 65 20 70 72 6f 70 65 72 6c 79 2c 20 77 68  que properly, wh
cc30: 69 63 68 20 69 73 20 61 20 70 61 69 6e 20 69 6e  ich is a pain in
cc40: 20 74 68 65 20 62 75 74 74 21 0d 0a 20 20 20 20   the butt!..    
cc50: 20 20 20 20 20 20 69 66 20 28 77 61 6e 74 55 6e        if (wantUn
cc60: 69 71 75 65 49 6e 66 6f 29 0d 0a 20 20 20 20 20  iqueInfo)..     
cc70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cc80: 20 20 20 20 69 66 20 28 28 73 74 72 69 6e 67 29      if ((string)
cc90: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
cca0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61  ptionalColumn.Ba
ccb0: 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20 21  seCatalogName] !
ccc0: 3d 20 73 74 72 43 61 74 61 6c 6f 67 0d 0a 20 20  = strCatalog..  
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28              || (
cce0: 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d  string)row[Schem
ccf0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
cd00: 65 54 61 62 6c 65 4e 61 6d 65 5d 20 21 3d 20 73  eTableName] != s
cd10: 74 72 54 61 62 6c 65 29 0d 0a 20 20 20 20 20 20  trTable)..      
cd20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
cd30: 20 20 20 20 20 20 20 73 74 72 43 61 74 61 6c 6f         strCatalo
cd40: 67 20 3d 20 28 73 74 72 69 6e 67 29 72 6f 77 5b  g = (string)row[
cd50: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
cd60: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61  nalColumn.BaseCa
cd70: 74 61 6c 6f 67 4e 61 6d 65 5d 3b 0d 0a 20 20 20  talogName];..   
cd80: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 54 61             strTa
cd90: 62 6c 65 20 3d 20 28 73 74 72 69 6e 67 29 72 6f  ble = (string)ro
cda0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
cdb0: 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d  umn.BaseTableNam
cdc0: 65 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e];....         
cdd0: 20 20 20 20 20 74 62 6c 49 6e 64 65 78 65 73 20       tblIndexes 
cde0: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
cdf0: 63 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28  ction.GetSchema(
ce00: 22 49 6e 64 65 78 65 73 22 2c 20 6e 65 77 20 73  "Indexes", new s
ce10: 74 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20  tring[] {..     
ce20: 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
ce30: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
ce40: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
ce50: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
ce60: 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ],..            
ce70: 20 20 20 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20      null,..     
ce80: 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
ce90: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
cea0: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62  leColumn.BaseTab
ceb0: 6c 65 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20  leName],..      
cec0: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 20 7d            null }
ced0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
cee0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
cef0: 20 66 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f   foreach (DataRo
cf00: 77 20 72 6f 77 49 6e 64 65 78 65 73 20 69 6e 20  w rowIndexes in 
cf10: 74 62 6c 49 6e 64 65 78 65 73 2e 52 6f 77 73 29  tblIndexes.Rows)
cf20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
cf30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
cf40: 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 20 3d  blIndexColumns =
cf50: 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63   _command.Connec
cf60: 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28 22  tion.GetSchema("
cf70: 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 22 2c 20 6e  IndexColumns", n
cf80: 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b 0d 0a 20  ew string[] {.. 
cf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
cfa0: 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d  string)row[Schem
cfb0: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
cfc0: 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67  lumn.BaseCatalog
cfd0: 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20  Name],..        
cfe0: 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 0d 0a 20          null,.. 
cff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
d000: 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d  string)row[Schem
d010: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
d020: 65 54 61 62 6c 65 4e 61 6d 65 5d 2c 0d 0a 20 20  eTableName],..  
d030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
d040: 74 72 69 6e 67 29 72 6f 77 49 6e 64 65 78 65 73  tring)rowIndexes
d050: 5b 22 49 4e 44 45 58 5f 4e 41 4d 45 22 5d 2c 0d  ["INDEX_NAME"],.
d060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d070: 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20   null..         
d080: 20 20 20 20 20 20 20 7d 29 3b 0d 0a 20 20 20 20         });..    
d090: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
d0a0: 68 20 28 44 61 74 61 52 6f 77 20 72 6f 77 43 6f  h (DataRow rowCo
d0b0: 6c 75 6d 6e 49 6e 64 65 78 20 69 6e 20 74 62 6c  lumnIndex in tbl
d0c0: 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77  IndexColumns.Row
d0d0: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
d0e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d0f0: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
d100: 43 6f 6d 70 61 72 65 28 53 51 4c 69 74 65 43 6f  Compare(SQLiteCo
d110: 6e 76 65 72 74 2e 47 65 74 53 74 72 69 6e 67 4f  nvert.GetStringO
d120: 72 4e 75 6c 6c 28 72 6f 77 43 6f 6c 75 6d 6e 49  rNull(rowColumnI
d130: 6e 64 65 78 5b 22 43 4f 4c 55 4d 4e 5f 4e 41 4d  ndex["COLUMN_NAM
d140: 45 22 5d 29 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c  E"]), strColumn,
d150: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
d160: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
d170: 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20  ase) == 0)..    
d180: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1a0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
d1b0: 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58         // BUGFIX
d1c0: 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  : Make sure that
d1d0: 20 77 65 20 6f 6e 6c 79 20 66 6c 61 67 20 74 68   we only flag th
d1e0: 69 73 20 63 6f 6c 75 6d 6e 20 61 73 20 22 75 6e  is column as "un
d1f0: 69 71 75 65 22 0d 0a 20 20 20 20 20 20 20 20 20  ique"..         
d200: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
d210: 20 20 20 20 69 66 20 77 65 20 61 72 65 20 6e 6f      if we are no
d220: 74 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20  t processing of 
d230: 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20 6d 75 6c  some kind of mul
d240: 74 69 2d 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  ti-table..      
d250: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
d260: 20 20 20 20 20 20 20 63 6f 6e 73 74 72 75 63 74         construct
d270: 20 28 69 2e 65 2e 20 61 20 6a 6f 69 6e 29 20 62   (i.e. a join) b
d280: 65 63 61 75 73 65 20 69 6e 20 74 68 61 74 20 63  ecause in that c
d290: 61 73 65 20 77 65 20 6d 75 73 74 0d 0a 20 20 20  ase we must..   
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d2b0: 2f 20 20 20 20 20 20 20 20 20 61 6c 6c 6f 77 20  /         allow 
d2c0: 64 75 70 6c 69 63 61 74 65 20 76 61 6c 75 65 73  duplicate values
d2d0: 20 28 72 65 66 65 72 20 74 6f 20 74 69 63 6b 65   (refer to ticke
d2e0: 74 20 5b 37 65 33 66 61 39 33 37 34 34 5d 29 2e  t [7e3fa93744]).
d2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d300: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
d310: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
d320: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 43 6f  rentToColumns.Co
d330: 75 6e 74 20 3d 3d 20 31 20 26 26 20 74 62 6c 49  unt == 1 && tblI
d340: 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73  ndexColumns.Rows
d350: 2e 43 6f 75 6e 74 20 3d 3d 20 31 20 26 26 20 28  .Count == 1 && (
d360: 62 6f 6f 6c 29 72 6f 77 5b 53 63 68 65 6d 61 54  bool)row[SchemaT
d370: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77  ableColumn.Allow
d380: 44 42 4e 75 6c 6c 5d 20 3d 3d 20 66 61 6c 73 65  DBNull] == false
d390: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
d3a0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
d3b0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55  aTableColumn.IsU
d3c0: 6e 69 71 75 65 5d 20 3d 20 72 6f 77 49 6e 64 65  nique] = rowInde
d3d0: 78 65 73 5b 22 55 4e 49 51 55 45 22 5d 3b 0d 0a  xes["UNIQUE"];..
d3e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d3f0: 20 20 20 20 2f 2f 20 49 66 20 69 74 73 20 61 6e      // If its an
d400: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
d410: 20 6b 65 79 20 61 6e 64 20 74 68 65 20 6f 6e 6c   key and the onl
d420: 79 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 6e  y primary key in
d430: 20 74 68 65 20 74 61 62 6c 65 2c 20 74 68 65 6e   the table, then
d440: 20 69 74 73 20 61 20 72 6f 77 69 64 20 61 6c 69   its a rowid ali
d450: 61 73 20 61 6e 64 20 69 73 20 61 75 74 6f 69 6e  as and is autoin
d460: 63 72 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20  crement..       
d470: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
d480: 54 45 3a 20 20 43 75 72 72 65 6e 74 6c 79 20 63  TE:  Currently c
d490: 6f 6d 6d 65 6e 74 65 64 20 6f 75 74 20 62 65 63  ommented out bec
d4a0: 61 75 73 65 20 74 68 69 73 20 69 73 20 6e 6f 74  ause this is not
d4b0: 20 61 6c 77 61 79 73 20 74 68 65 20 64 65 73 69   always the desi
d4c0: 72 65 64 20 62 65 68 61 76 69 6f 72 2e 20 20 46  red behavior.  F
d4d0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 20 31 3a  or example, a 1:
d4e0: 31 20 72 65 6c 61 74 69 6f 6e 73 68 69 70 20 77  1 relationship w
d4f0: 69 74 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ith..           
d500: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
d510: 20 61 6e 6f 74 68 65 72 20 74 61 62 6c 65 2c 20   another table, 
d520: 77 68 65 72 65 20 74 68 65 20 6f 74 68 65 72 20  where the other 
d530: 74 61 62 6c 65 20 69 73 20 61 75 74 6f 69 6e 63  table is autoinc
d540: 72 65 6d 65 6e 74 2c 20 62 75 74 20 74 68 69 73  rement, but this
d550: 20 6f 6e 65 20 69 73 20 6e 6f 74 2c 20 61 6e 64   one is not, and
d560: 20 75 73 65 73 20 74 68 65 20 72 6f 77 69 64 20   uses the rowid 
d570: 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 2e 0d  from the other..
d580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d590: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 49 74 20     //        It 
d5a0: 69 73 20 73 61 66 65 72 20 74 6f 20 6f 6e 6c 79  is safer to only
d5b0: 20 73 65 74 20 41 75 74 6f 69 6e 63 72 65 6d 65   set Autoincreme
d5c0: 6e 74 20 6f 6e 20 74 61 62 6c 65 73 20 77 68 65  nt on tables whe
d5d0: 72 65 20 77 65 27 72 65 20 53 55 52 45 20 74 68  re we're SURE th
d5e0: 65 20 75 73 65 72 20 73 70 65 63 69 66 69 65 64  e user specified
d5f0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20   AUTOINCREMENT, 
d600: 65 76 65 6e 20 69 66 20 69 74 73 20 61 20 72 6f  even if its a ro
d610: 77 69 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 0d 0a 20  wid column..... 
d620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d630: 20 69 66 20 28 74 62 6c 49 6e 64 65 78 43 6f 6c   if (tblIndexCol
d640: 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74 20  umns.Rows.Count 
d650: 3d 3d 20 31 20 26 26 20 28 62 6f 6f 6c 29 72 6f  == 1 && (bool)ro
d660: 77 49 6e 64 65 78 65 73 5b 22 50 52 49 4d 41 52  wIndexes["PRIMAR
d670: 59 5f 4b 45 59 22 5d 20 3d 3d 20 74 72 75 65 20  Y_KEY"] == true 
d680: 26 26 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  && String.IsNull
d690: 4f 72 45 6d 70 74 79 28 64 61 74 61 54 79 70 65  OrEmpty(dataType
d6a0: 29 20 3d 3d 20 66 61 6c 73 65 20 26 26 0d 0a 20  ) == false &&.. 
d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6c0: 20 20 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72     String.Compar
d6d0: 65 28 64 61 74 61 54 79 70 65 2c 20 22 69 6e 74  e(dataType, "int
d6e0: 65 67 65 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d  eger", StringCom
d6f0: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
d700: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
d710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d720: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d730: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 72             //  r
d740: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
d750: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41  tionalColumn.IsA
d760: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20  utoIncrement] = 
d770: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
d780: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
d790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7a0: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
d7b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d7c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d7d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d7e0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
d7f0: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
d800: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74  sNullOrEmpty(dat
d810: 61 54 79 70 65 29 29 0d 0a 20 20 20 20 20 20 20  aType))..       
d820: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d830: 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61    TypeAffinity a
d840: 66 66 69 6e 20 3d 20 54 79 70 65 41 66 66 69 6e  ffin = TypeAffin
d850: 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65  ity.Uninitialize
d860: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
d870: 64 61 74 61 54 79 70 65 20 3d 20 5f 61 63 74 69  dataType = _acti
d880: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
d890: 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 5f 61 63 74  .ColumnType(_act
d8a0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e 2c  iveStatement, n,
d8b0: 20 72 65 66 20 61 66 66 69 6e 29 3b 0d 0a 20 20   ref affin);..  
d8c0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d8d0: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
d8e0: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
d8f0: 64 61 74 61 54 79 70 65 29 20 3d 3d 20 66 61 6c  dataType) == fal
d900: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
d910: 20 72 6f 77 5b 22 44 61 74 61 54 79 70 65 4e 61   row["DataTypeNa
d920: 6d 65 22 5d 20 3d 20 64 61 74 61 54 79 70 65 3b  me"] = dataType;
d930: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
d940: 20 20 20 20 20 74 62 6c 2e 52 6f 77 73 2e 41 64       tbl.Rows.Ad
d950: 64 28 72 6f 77 29 3b 0d 0a 20 20 20 20 20 20 7d  d(row);..      }
d960: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 6b  ....      if (_k
d970: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
d980: 0a 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66  .        _keyInf
d990: 6f 2e 41 70 70 65 6e 64 53 63 68 65 6d 61 54 61  o.AppendSchemaTa
d9a0: 62 6c 65 28 74 62 6c 29 3b 0d 0a 0d 0a 20 20 20  ble(tbl);....   
d9b0: 20 20 20 74 62 6c 2e 41 63 63 65 70 74 43 68 61     tbl.AcceptCha
d9c0: 6e 67 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 74  nges();..      t
d9d0: 62 6c 2e 45 6e 64 4c 6f 61 64 44 61 74 61 28 29  bl.EndLoadData()
d9e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
d9f0: 6e 20 74 62 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  n tbl;..    }...
da00: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
da10: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  y>..    /// Retr
da20: 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  ieves the column
da30: 20 61 73 20 61 20 73 74 72 69 6e 67 0d 0a 20 20   as a string..  
da40: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
da50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
da60: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
da70: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
da80: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
da90: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72  /// <returns>str
daa0: 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ing</returns>.. 
dab0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
dac0: 64 65 20 73 74 72 69 6e 67 20 47 65 74 53 74 72  de string GetStr
dad0: 69 6e 67 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ing(int i)..    
dae0: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
daf0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
db00: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
db10: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
db20: 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51  if ((_flags & SQ
db30: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
db40: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
db50: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
db60: 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  cks) == SQLiteCo
db70: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
db80: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
db90: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a  alueCallbacks)..
dba0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
dbb0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74         SQLiteDat
dbc0: 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c  aReaderValue val
dbd0: 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44  ue = new SQLiteD
dbe0: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29  ataReaderValue()
dbf0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
dc00: 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d  ool complete;...
dc10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76  .            Inv
dc20: 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  okeReadValueCall
dc30: 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69  back(i, new SQLi
dc40: 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74  teReadValueEvent
dc50: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
dc60: 20 20 20 20 20 20 20 22 47 65 74 53 74 72 69 6e         "GetStrin
dc70: 67 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29  g", null, value)
dc80: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
dc90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
dca0: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
dcc0: 65 74 75 72 6e 20 76 61 6c 75 65 2e 53 74 72 69  eturn value.Stri
dcd0: 6e 67 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  ngValue;..      
dce0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
dcf0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
dd00: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
dd10: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
dd20: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
dd30: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
dd40: 66 6f 2e 47 65 74 53 74 72 69 6e 67 28 69 20 2d  fo.GetString(i -
dd50: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
dd60: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
dd70: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
dd80: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
dd90: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72  ctionFlags.NoVer
dda0: 69 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29  ifyTextAffinity)
ddb0: 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   != SQLiteConnec
ddc0: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69  tionFlags.NoVeri
ddd0: 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29 0d  fyTextAffinity).
dde0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
ddf0: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
de00: 65 2e 53 74 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20  e.String);....  
de10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
de20: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
de30: 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69  ql.GetText(_acti
de40: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
de50: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
de60: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
de70: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
de80: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e  the column as an
de90: 20 6f 62 6a 65 63 74 20 63 6f 72 72 65 73 70 6f   object correspo
dea0: 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 75 6e 64  nding to the und
deb0: 65 72 6c 79 69 6e 67 20 64 61 74 61 74 79 70 65  erlying datatype
dec0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a   of the column..
ded0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
dee0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
def0: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
df00: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
df10: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
df20: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 6f    /// <returns>o
df30: 62 6a 65 63 74 3c 2f 72 65 74 75 72 6e 73 3e 0d  bject</returns>.
df40: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
df50: 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56  ride object GetV
df60: 61 6c 75 65 28 69 6e 74 20 69 29 0d 0a 20 20 20  alue(int i)..   
df70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
df80: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
df90: 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47        VerifyForG
dfa0: 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  et();....       
dfb0: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
dfc0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
dfd0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
dfe0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
dff0: 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43  acks) == SQLiteC
e000: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
e010: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
e020: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d  ValueCallbacks).
e030: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e040: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
e050: 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61  taReaderValue va
e060: 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  lue = new SQLite
e070: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28  DataReaderValue(
e080: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
e090: 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a  bool complete;..
e0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
e0b0: 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c  vokeReadValueCal
e0c0: 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c  lback(i, new SQL
e0d0: 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e  iteReadValueEven
e0e0: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
e0f0: 20 20 20 20 20 20 20 20 22 47 65 74 56 61 6c 75          "GetValu
e100: 65 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29  e", null, value)
e110: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
e120: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e130: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
e140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
e150: 65 74 75 72 6e 20 76 61 6c 75 65 2e 56 61 6c 75  eturn value.Valu
e160: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
e170: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
e180: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
e190: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
e1a0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
e1b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
e1c0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
e1d0: 56 61 6c 75 65 28 69 20 2d 20 50 72 69 76 61 74  Value(i - Privat
e1e0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
e1f0: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
e200: 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 20 3d  SQLiteType typ =
e210: 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 5f   GetSQLiteType(_
e220: 66 6c 61 67 73 2c 20 69 29 3b 0d 0a 0d 0a 20 20  flags, i);....  
e230: 20 20 20 20 20 20 69 66 20 28 28 28 5f 66 6c 61        if (((_fla
e240: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
e250: 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63  ctionFlags.Detec
e260: 74 54 65 78 74 41 66 66 69 6e 69 74 79 29 20 3d  tTextAffinity) =
e270: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
e280: 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63 74 54 65  onFlags.DetectTe
e290: 78 74 41 66 66 69 6e 69 74 79 29 20 26 26 0d 0a  xtAffinity) &&..
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 28 28 74 79              ((ty
e2b0: 70 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 74  p == null) || (t
e2c0: 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54  yp.Affinity == T
e2d0: 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74  ypeAffinity.Text
e2e0: 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  )))..        {..
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 20              typ 
e300: 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  = GetSQLiteType(
e310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e320: 20 20 74 79 70 2c 20 5f 61 63 74 69 76 65 53 74    typ, _activeSt
e330: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
e340: 54 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74  Text(_activeStat
e350: 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20  ement, i));..   
e360: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e370: 65 6c 73 65 20 69 66 20 28 28 28 5f 66 6c 61 67  else if (((_flag
e380: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
e390: 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63 74  tionFlags.Detect
e3a0: 53 74 72 69 6e 67 54 79 70 65 29 20 3d 3d 20 53  StringType) == S
e3b0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e3c0: 6c 61 67 73 2e 44 65 74 65 63 74 53 74 72 69 6e  lags.DetectStrin
e3d0: 67 54 79 70 65 29 20 26 26 0d 0a 20 20 20 20 20  gType) &&..     
e3e0: 20 20 20 20 20 20 20 28 28 74 79 70 20 3d 3d 20         ((typ == 
e3f0: 6e 75 6c 6c 29 20 7c 7c 20 53 51 4c 69 74 65 43  null) || SQLiteC
e400: 6f 6e 76 65 72 74 2e 49 73 53 74 72 69 6e 67 44  onvert.IsStringD
e410: 62 54 79 70 65 28 74 79 70 2e 54 79 70 65 29 29  bType(typ.Type))
e420: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
e430: 20 20 20 20 20 20 20 20 20 20 74 79 70 20 3d 20            typ = 
e440: 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 0d 0a  GetSQLiteType(..
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e460: 74 79 70 2c 20 5f 61 63 74 69 76 65 53 74 61 74  typ, _activeStat
e470: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65  ement._sql.GetTe
e480: 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  xt(_activeStatem
e490: 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 20  ent, i));..     
e4a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e4b0: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
e4c0: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
e4d0: 56 61 6c 75 65 28 5f 61 63 74 69 76 65 53 74 61  Value(_activeSta
e4e0: 74 65 6d 65 6e 74 2c 20 5f 66 6c 61 67 73 2c 20  tement, _flags, 
e4f0: 69 2c 20 74 79 70 29 3b 0d 0a 20 20 20 20 7d 0d  i, typ);..    }.
e500: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
e510: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
e520: 74 72 65 69 76 65 73 20 74 68 65 20 76 61 6c 75  treives the valu
e530: 65 73 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 63  es of multiple c
e540: 6f 6c 75 6d 6e 73 2c 20 75 70 20 74 6f 20 74 68  olumns, up to th
e550: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 73 75  e size of the su
e560: 70 70 6c 69 65 64 20 61 72 72 61 79 0d 0a 20 20  pplied array..  
e570: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e580: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
e590: 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 54   name="values">T
e5a0: 68 65 20 61 72 72 61 79 20 74 6f 20 66 69 6c 6c  he array to fill
e5b0: 20 77 69 74 68 20 76 61 6c 75 65 73 20 66 72 6f   with values fro
e5c0: 6d 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  m the columns in
e5d0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73   the current res
e5e0: 75 6c 74 73 65 74 3c 2f 70 61 72 61 6d 3e 0d 0a  ultset</param>..
e5f0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
e600: 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  >The number of c
e610: 6f 6c 75 6d 6e 73 20 72 65 74 72 69 65 76 65 64  olumns retrieved
e620: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
e630: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
e640: 69 6e 74 20 47 65 74 56 61 6c 75 65 73 28 6f 62  int GetValues(ob
e650: 6a 65 63 74 5b 5d 20 76 61 6c 75 65 73 29 0d 0a  ject[] values)..
e660: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65      {..      Che
e670: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
e680: 0a 20 20 20 20 20 20 69 6e 74 20 6e 4d 61 78 20  .      int nMax 
e690: 3d 20 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20  = FieldCount;.. 
e6a0: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 73 2e       if (values.
e6b0: 4c 65 6e 67 74 68 20 3c 20 6e 4d 61 78 29 20 6e  Length < nMax) n
e6c0: 4d 61 78 20 3d 20 76 61 6c 75 65 73 2e 4c 65 6e  Max = values.Len
e6d0: 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  gth;....      fo
e6e0: 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20  r (int n = 0; n 
e6f0: 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20  < nMax; n++)..  
e700: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 76      {..        v
e710: 61 6c 75 65 73 5b 6e 5d 20 3d 20 47 65 74 56 61  alues[n] = GetVa
e720: 6c 75 65 28 6e 29 3b 0d 0a 20 20 20 20 20 20 7d  lue(n);..      }
e730: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
e740: 20 6e 4d 61 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d   nMax;..    }...
e750: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
e760: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
e770: 72 6e 73 20 61 20 63 6f 6c 6c 65 63 74 69 6f 6e  rns a collection
e780: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20   containing all 
e790: 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  the column names
e7a0: 20 61 6e 64 20 76 61 6c 75 65 73 20 66 6f 72 20   and values for 
e7b0: 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72  the..    /// cur
e7c0: 72 65 6e 74 20 72 6f 77 20 6f 66 20 64 61 74 61  rent row of data
e7d0: 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
e7e0: 72 65 73 75 6c 74 73 65 74 2c 20 69 66 20 61 6e  resultset, if an
e7f0: 79 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  y.  If there is 
e800: 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72  no..    /// curr
e810: 65 6e 74 20 72 6f 77 20 6f 72 20 6e 6f 20 63 75  ent row or no cu
e820: 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 2c  rrent resultset,
e830: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 6d 61   an exception ma
e840: 79 20 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20  y be thrown...  
e850: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e860: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
e870: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
e880: 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 63 6f 6e 74   collection cont
e890: 61 69 6e 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  aining the colum
e8a0: 6e 20 6e 61 6d 65 20 61 6e 64 20 76 61 6c 75 65  n name and value
e8b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72   information for
e8c0: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75   the..    /// cu
e8d0: 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 64 61 74  rrent row of dat
e8e0: 61 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  a in the current
e8f0: 20 72 65 73 75 6c 74 73 65 74 20 6f 72 20 6e 75   resultset or nu
e900: 6c 6c 20 69 66 20 74 68 69 73 20 69 6e 66 6f 72  ll if this infor
e910: 6d 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20  mation..    /// 
e920: 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e  cannot be obtain
e930: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ed...    /// </r
e940: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
e950: 6c 69 63 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c  lic NameValueCol
e960: 6c 65 63 74 69 6f 6e 20 47 65 74 56 61 6c 75 65  lection GetValue
e970: 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  s()..    {..    
e980: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
e990: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
e9a0: 69 66 20 28 28 5f 61 63 74 69 76 65 53 74 61 74  if ((_activeStat
e9b0: 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ement == null) |
e9c0: 7c 20 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  | (_activeStatem
e9d0: 65 6e 74 2e 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  ent._sql == null
e9e0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
e9f0: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
ea00: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
ea10: 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion();....      
ea20: 20 20 69 6e 74 20 6e 4d 61 78 20 3d 20 50 72 69    int nMax = Pri
ea30: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
ea40: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20  Count;..        
ea50: 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63 74  NameValueCollect
ea60: 69 6f 6e 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  ion result = new
ea70: 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63   NameValueCollec
ea80: 74 69 6f 6e 28 6e 4d 61 78 29 3b 0d 0a 0d 0a 20  tion(nMax);.... 
ea90: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
eaa0: 6e 20 3d 20 30 3b 20 6e 20 3c 20 6e 4d 61 78 3b  n = 0; n < nMax;
eab0: 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 7b   n++)..        {
eac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
ead0: 72 69 6e 67 20 6e 61 6d 65 20 3d 20 5f 61 63 74  ring name = _act
eae0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
eaf0: 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63  l.ColumnName(_ac
eb00: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e  tiveStatement, n
eb10: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
eb20: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 3d 20 5f  string value = _
eb30: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
eb40: 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63  _sql.GetText(_ac
eb50: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e  tiveStatement, n
eb60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
eb70: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 6e 61 6d    result.Add(nam
eb80: 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  e, value);..    
eb90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
eba0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
ebb0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
ebc0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
ebd0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75   /// Returns Tru
ebe0: 65 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 73  e if the results
ebf0: 65 74 20 68 61 73 20 72 6f 77 73 20 74 68 61 74  et has rows that
ec00: 20 63 61 6e 20 62 65 20 66 65 74 63 68 65 64 0d   can be fetched.
ec10: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
ec20: 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
ec30: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 48 61  override bool Ha
ec40: 73 52 6f 77 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  sRows..    {..  
ec50: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
ec60: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
ec70: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
ec80: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
ec90: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
eca0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
ecb0: 45 3a 20 49 66 20 74 68 65 20 22 73 74 69 63 6b  E: If the "stick
ecc0: 79 22 20 66 6c 61 67 20 68 61 73 20 62 65 65 6e  y" flag has been
ecd0: 20 73 65 74 2c 20 75 73 65 20 74 68 65 20 6e 65   set, use the ne
ece0: 77 20 62 65 68 61 76 69 6f 72 2c 0d 0a 20 20 20  w behavior,..   
ecf0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77 68       //       wh
ed00: 69 63 68 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ich returns non-
ed10: 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20 77 65  zero if there we
ed20: 72 65 20 65 76 65 72 20 61 6e 79 20 72 6f 77 73  re ever any rows
ed30: 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   in..        // 
ed40: 20 20 20 20 20 20 74 68 65 20 61 73 73 6f 63 69        the associ
ed50: 61 74 65 64 20 72 65 73 75 6c 74 20 73 65 74 73  ated result sets
ed60: 2e 20 20 47 65 6e 65 72 61 6c 6c 79 2c 20 74 68  .  Generally, th
ed70: 69 73 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 0d  is flag is only.
ed80: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
ed90: 20 20 75 73 65 66 75 6c 20 77 68 65 6e 20 69 74    useful when it
eda0: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f   is necessary to
edb0: 20 72 65 74 61 69 6e 20 63 6f 6d 70 61 74 69 62   retain compatib
edc0: 69 6c 69 74 79 20 77 69 74 68 0d 0a 20 20 20 20  ility with..    
edd0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68      //       oth
ede0: 65 72 20 41 44 4f 2e 4e 45 54 20 70 72 6f 76 69  er ADO.NET provi
edf0: 64 65 72 73 20 74 68 61 74 20 75 73 65 20 74 68  ders that use th
ee00: 65 73 65 20 73 61 6d 65 20 73 65 6d 61 6e 74 69  ese same semanti
ee10: 63 73 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  cs for..        
ee20: 2f 2f 20 20 20 20 20 20 20 74 68 65 20 48 61 73  //       the Has
ee30: 52 6f 77 73 20 70 72 6f 70 65 72 74 79 2e 0d 0a  Rows property...
ee40: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
ee50: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
ee60: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
ee70: 6f 6e 46 6c 61 67 73 2e 53 74 69 63 6b 79 48 61  onFlags.StickyHa
ee80: 73 52 6f 77 73 29 20 3d 3d 20 53 51 4c 69 74 65  sRows) == SQLite
ee90: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
eea0: 53 74 69 63 6b 79 48 61 73 52 6f 77 73 29 0d 0a  StickyHasRows)..
eeb0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
eec0: 20 28 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65   ((_readingState
eed0: 20 21 3d 20 31 29 20 7c 7c 20 28 5f 73 74 65 70   != 1) || (_step
eee0: 43 6f 75 6e 74 20 3e 20 30 29 29 3b 0d 0a 0d 0a  Count > 0));....
eef0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
ef00: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
ef10: 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  s is the default
ef20: 20 62 65 68 61 76 69 6f 72 2e 20 20 49 74 20 72   behavior.  It r
ef30: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20  eturns non-zero 
ef40: 6f 6e 6c 79 20 69 66 0d 0a 20 20 20 20 20 20 20  only if..       
ef50: 20 2f 2f 20 20 20 20 20 20 20 6d 6f 72 65 20 72   //       more r
ef60: 6f 77 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ows are availabl
ef70: 65 20 28 69 2e 65 2e 20 61 20 63 61 6c 6c 20 74  e (i.e. a call t
ef80: 6f 20 74 68 65 20 52 65 61 64 20 6d 65 74 68 6f  o the Read metho
ef90: 64 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  d is..        //
efa0: 20 20 20 20 20 20 20 65 78 70 65 63 74 65 64 20         expected 
efb0: 74 6f 20 73 75 63 63 65 65 64 29 2e 20 20 50 72  to succeed).  Pr
efc0: 69 6f 72 20 74 6f 20 74 68 65 20 69 6e 74 72 6f  ior to the intro
efd0: 64 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 0d 0a  duction of the..
efe0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
eff0: 20 22 73 74 69 63 6b 79 22 20 66 6c 61 67 2c 20   "sticky" flag, 
f000: 74 68 69 73 20 69 73 20 68 6f 77 20 74 68 69 73  this is how this
f010: 20 70 72 6f 70 65 72 74 79 20 68 61 73 20 61 6c   property has al
f020: 77 61 79 73 20 77 6f 72 6b 65 64 2e 0d 0a 20 20  ways worked...  
f030: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
f040: 20 20 72 65 74 75 72 6e 20 28 5f 72 65 61 64 69    return (_readi
f050: 6e 67 53 74 61 74 65 20 21 3d 20 31 29 3b 0d 0a  ngState != 1);..
f060: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
f070: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
f080: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
f090: 75 72 6e 73 20 54 72 75 65 20 69 66 20 74 68 65  urns True if the
f0a0: 20 64 61 74 61 20 72 65 61 64 65 72 20 69 73 20   data reader is 
f0b0: 63 6c 6f 73 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  closed..    /// 
f0c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
f0d0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
f0e0: 62 6f 6f 6c 20 49 73 43 6c 6f 73 65 64 0d 0a 20  bool IsClosed.. 
f0f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20     {..      get 
f100: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
f110: 29 3b 20 72 65 74 75 72 6e 20 28 5f 63 6f 6d 6d  ); return (_comm
f120: 61 6e 64 20 3d 3d 20 6e 75 6c 6c 29 3b 20 7d 0d  and == null); }.
f130: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
f140: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
f150: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75   /// Returns Tru
f160: 65 20 69 66 20 74 68 65 20 73 70 65 63 69 66 69  e if the specifi
f170: 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 75 6c  ed column is nul
f180: 6c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  l..    /// </sum
f190: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
f1a0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
f1b0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
f1c0: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
f1d0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
f1e0: 73 3e 54 72 75 65 20 6f 72 20 46 61 6c 73 65 3c  s>True or False<
f1f0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
f200: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62  ublic override b
f210: 6f 6f 6c 20 49 73 44 42 4e 75 6c 6c 28 69 6e 74  ool IsDBNull(int
f220: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
f230: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
f240: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
f250: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
f260: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
f270: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
f280: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
f290: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
f2a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
f2b0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 49 73 44  urn _keyInfo.IsD
f2c0: 42 4e 75 6c 6c 28 69 20 2d 20 50 72 69 76 61 74  BNull(i - Privat
f2d0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
f2e0: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
f2f0: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
f300: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4e  atement._sql.IsN
f310: 75 6c 6c 28 5f 61 63 74 69 76 65 53 74 61 74 65  ull(_activeState
f320: 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d  ment, i);..    }
f330: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
f340: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d  mary>..    /// M
f350: 6f 76 65 73 20 74 6f 20 74 68 65 20 6e 65 78 74  oves to the next
f360: 20 72 65 73 75 6c 74 73 65 74 20 69 6e 20 6d 75   resultset in mu
f370: 6c 74 69 70 6c 65 20 72 6f 77 2d 72 65 74 75 72  ltiple row-retur
f380: 6e 69 6e 67 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ning SQL command
f390: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
f3a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
f3b0: 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20  returns>True if 
f3c0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  the command was 
f3d0: 73 75 63 63 65 73 73 66 75 6c 20 61 6e 64 20 61  successful and a
f3e0: 20 6e 65 77 20 72 65 73 75 6c 74 73 65 74 20 69   new resultset i
f3f0: 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 46 61 6c  s available, Fal
f400: 73 65 20 6f 74 68 65 72 77 69 73 65 2e 3c 2f 72  se otherwise.</r
f410: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
f420: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
f430: 6c 20 4e 65 78 74 52 65 73 75 6c 74 28 29 0d 0a  l NextResult()..
f440: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65      {..      Che
f450: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
f460: 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64       CheckClosed
f470: 28 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  ();..      if (_
f480: 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29  throwOnDisposed)
f490: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43   SQLiteCommand.C
f4a0: 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d  heck(_command);.
f4b0: 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53  ...      SQLiteS
f4c0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 20 3d 20  tatement stmt = 
f4d0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74  null;..      int
f4e0: 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20   fieldCount;..  
f4f0: 20 20 20 20 62 6f 6f 6c 20 73 63 68 65 6d 61 4f      bool schemaO
f500: 6e 6c 79 20 3d 20 28 28 5f 63 6f 6d 6d 61 6e 64  nly = ((_command
f510: 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61  Behavior & Comma
f520: 6e 64 42 65 68 61 76 69 6f 72 2e 53 63 68 65 6d  ndBehavior.Schem
f530: 61 4f 6e 6c 79 29 20 21 3d 20 30 29 3b 0d 0a 0d  aOnly) != 0);...
f540: 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 74 72  .      while (tr
f550: 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ue)..      {..  
f560: 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d        if (stmt =
f570: 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76  = null && _activ
f580: 65 53 74 61 74 65 6d 65 6e 74 20 21 3d 20 6e 75  eStatement != nu
f590: 6c 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74 61  ll && _activeSta
f5a0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 20 21 3d 20 6e  tement._sql != n
f5b0: 75 6c 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74  ull && _activeSt
f5c0: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4f  atement._sql.IsO
f5d0: 70 65 6e 28 29 29 0d 0a 20 20 20 20 20 20 20 20  pen())..        
f5e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
f5f0: 52 65 73 65 74 20 74 68 65 20 70 72 65 76 69 6f  Reset the previo
f600: 75 73 6c 79 2d 65 78 65 63 75 74 65 64 20 73 74  usly-executed st
f610: 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20  atement..       
f620: 20 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e     if (!schemaOn
f630: 6c 79 29 20 5f 61 63 74 69 76 65 53 74 61 74 65  ly) _activeState
f640: 6d 65 6e 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28  ment._sql.Reset(
f650: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
f660: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f670: 2f 2f 20 49 66 20 77 65 27 72 65 20 6f 6e 6c 79  // If we're only
f680: 20 73 75 70 70 6f 73 65 64 20 74 6f 20 72 65 74   supposed to ret
f690: 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  urn a single row
f6a0: 73 65 74 2c 20 73 74 65 70 20 74 68 72 6f 75 67  set, step throug
f6b0: 68 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20  h all remaining 
f6c0: 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 63 65 20  statements once 
f6d0: 75 6e 74 69 6c 0d 0a 20 20 20 20 20 20 20 20 20  until..         
f6e0: 20 2f 2f 20 74 68 65 79 20 61 72 65 20 61 6c 6c   // they are all
f6f0: 20 64 6f 6e 65 20 61 6e 64 20 72 65 74 75 72 6e   done and return
f700: 20 66 61 6c 73 65 20 74 6f 20 69 6e 64 69 63 61   false to indica
f710: 74 65 20 6e 6f 20 6d 6f 72 65 20 72 65 73 75 6c  te no more resul
f720: 74 73 65 74 73 20 65 78 69 73 74 2e 0d 0a 20 20  tsets exist...  
f730: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f          if ((_co
f740: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20  mmandBehavior & 
f750: 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e  CommandBehavior.
f760: 53 69 6e 67 6c 65 52 65 73 75 6c 74 29 20 21 3d  SingleResult) !=
f770: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b   0)..          {
f780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
f790: 72 20 28 3b 20 3b 20 29 0d 0a 20 20 20 20 20 20  r (; ; )..      
f7a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f7b0: 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20 5f 63         stmt = _c
f7c0: 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61 74 65 6d  ommand.GetStatem
f7d0: 65 6e 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ent(_activeState
f7e0: 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31 29 3b 0d  mentIndex + 1);.
f7f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
f800: 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c 29  f (stmt == null)
f810: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
f820: 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74         _activeSt
f830: 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b 0d  atementIndex++;.
f840: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
f850: 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79   if (!schemaOnly
f860: 20 26 26 20 73 74 6d 74 2e 5f 73 71 6c 2e 53 74   && stmt._sql.St
f870: 65 70 28 73 74 6d 74 29 29 20 5f 73 74 65 70 43  ep(stmt)) _stepC
f880: 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  ount++;..       
f890: 20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 2e         if (stmt.
f8a0: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74  _sql.ColumnCount
f8b0: 28 73 74 6d 74 29 20 3d 3d 20 30 29 0d 0a 20 20  (stmt) == 0)..  
f8c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
f8e0: 6e 74 20 63 68 61 6e 67 65 73 20 3d 20 30 3b 0d  nt changes = 0;.
f8f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f900: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 20 3d   bool readOnly =
f910: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
f920: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d           if (stm
f930: 74 2e 54 72 79 47 65 74 43 68 61 6e 67 65 73 28  t.TryGetChanges(
f940: 72 65 66 20 63 68 61 6e 67 65 73 2c 20 72 65 66  ref changes, ref
f950: 20 72 65 61 64 4f 6e 6c 79 29 29 0d 0a 20 20 20   readOnly))..   
f960: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
f970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f980: 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29    if (!readOnly)
f990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f9a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f9b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
f9c0: 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d 3d 20  rowsAffected == 
f9d0: 2d 31 29 20 5f 72 6f 77 73 41 66 66 65 63 74 65  -1) _rowsAffecte
f9e0: 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  d = 0;..        
f9f0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 6f 77              _row
fa00: 73 41 66 66 65 63 74 65 64 20 2b 3d 20 63 68 61  sAffected += cha
fa10: 6e 67 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  nges;..         
fa20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
fa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
fa50: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
fa60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fa70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
fa80: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
fa90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
faa0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
fab0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
fac0: 73 63 68 65 6d 61 4f 6e 6c 79 29 20 73 74 6d 74  schemaOnly) stmt
fad0: 2e 5f 73 71 6c 2e 52 65 73 65 74 28 73 74 6d 74  ._sql.Reset(stmt
fae0: 29 3b 20 2f 2f 20 47 6f 74 74 61 20 72 65 73 65  ); // Gotta rese
faf0: 74 20 61 66 74 65 72 20 65 76 65 72 79 20 73 74  t after every st
fb00: 65 70 20 74 6f 20 72 65 6c 65 61 73 65 20 61 6e  ep to release an
fb10: 79 20 6c 6f 63 6b 73 20 61 6e 64 20 73 75 63 68  y locks and such
fb20: 21 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  !..            }
fb30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
fb40: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
fb50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
fb60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
fb70: 2f 20 47 65 74 20 74 68 65 20 6e 65 78 74 20 73  / Get the next s
fb80: 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78 65 63  tatement to exec
fb90: 75 74 65 0d 0a 20 20 20 20 20 20 20 20 73 74 6d  ute..        stm
fba0: 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74  t = _command.Get
fbb0: 53 74 61 74 65 6d 65 6e 74 28 5f 61 63 74 69 76  Statement(_activ
fbc0: 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 20  eStatementIndex 
fbd0: 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  + 1);....       
fbe0: 20 2f 2f 20 49 66 20 77 65 27 76 65 20 72 65 61   // If we've rea
fbf0: 63 68 65 64 20 74 68 65 20 65 6e 64 20 6f 66 20  ched the end of 
fc00: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  the statements, 
fc10: 72 65 74 75 72 6e 20 66 61 6c 73 65 2c 20 6e 6f  return false, no
fc20: 20 6d 6f 72 65 20 72 65 73 75 6c 74 73 65 74 73   more resultsets
fc30: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74  ..        if (st
fc40: 6d 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  mt == null)..   
fc50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
fc60: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
fc70: 2f 2f 20 49 66 20 77 65 20 77 65 72 65 20 6f 6e  // If we were on
fc80: 20 61 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c   a current resul
fc90: 74 73 65 74 2c 20 73 65 74 20 74 68 65 20 73 74  tset, set the st
fca0: 61 74 65 20 74 6f 20 22 64 6f 6e 65 20 72 65 61  ate to "done rea
fcb0: 64 69 6e 67 22 20 66 6f 72 20 69 74 0d 0a 20 20  ding" for it..  
fcc0: 20 20 20 20 20 20 69 66 20 28 5f 72 65 61 64 69        if (_readi
fcd0: 6e 67 53 74 61 74 65 20 3c 20 31 29 0d 0a 20 20  ngState < 1)..  
fce0: 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67          _reading
fcf0: 53 74 61 74 65 20 3d 20 31 3b 0d 0a 0d 0a 20 20  State = 1;....  
fd00: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
fd10: 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b 0d 0a  tementIndex++;..
fd20: 0d 0a 20 20 20 20 20 20 20 20 66 69 65 6c 64 43  ..        fieldC
fd30: 6f 75 6e 74 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ount = stmt._sql
fd40: 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d  .ColumnCount(stm
fd50: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  t);....        /
fd60: 2f 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  / If the stateme
fd70: 6e 74 20 69 73 20 6e 6f 74 20 61 20 73 65 6c 65  nt is not a sele
fd80: 63 74 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  ct statement or 
fd90: 77 65 27 72 65 20 6e 6f 74 20 72 65 74 72 69 65  we're not retrie
fda0: 76 69 6e 67 20 73 63 68 65 6d 61 20 6f 6e 6c 79  ving schema only
fdb0: 2c 20 74 68 65 6e 20 70 65 72 66 6f 72 6d 20 74  , then perform t
fdc0: 68 65 20 69 6e 69 74 69 61 6c 20 73 74 65 70 0d  he initial step.
fdd0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 73 63  .        if (!sc
fde0: 68 65 6d 61 4f 6e 6c 79 20 7c 7c 20 28 66 69 65  hemaOnly || (fie
fdf0: 6c 64 43 6f 75 6e 74 20 3d 3d 20 30 29 29 0d 0a  ldCount == 0))..
fe00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
fe10: 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61       if (!schema
fe20: 4f 6e 6c 79 20 26 26 20 73 74 6d 74 2e 5f 73 71  Only && stmt._sq
fe30: 6c 2e 53 74 65 70 28 73 74 6d 74 29 29 0d 0a 20  l.Step(stmt)).. 
fe40: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
fe50: 20 20 20 20 20 20 20 20 5f 73 74 65 70 43 6f 75          _stepCou
fe60: 6e 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  nt++;..         
fe70: 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65     _readingState
fe80: 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20 20   = -1;..        
fe90: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65    }..          e
fea0: 6c 73 65 20 69 66 20 28 66 69 65 6c 64 43 6f 75  lse if (fieldCou
feb0: 6e 74 20 3d 3d 20 30 29 20 2f 2f 20 4e 6f 20 72  nt == 0) // No r
fec0: 6f 77 73 20 72 65 74 75 72 6e 65 64 2c 20 69 66  ows returned, if
fed0: 20 66 69 65 6c 64 43 6f 75 6e 74 20 69 73 20 7a   fieldCount is z
fee0: 65 72 6f 2c 20 73 6b 69 70 20 74 6f 20 74 68 65  ero, skip to the
fef0: 20 6e 65 78 74 20 73 74 61 74 65 6d 65 6e 74 0d   next statement.
ff00: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
ff10: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 68            int ch
ff20: 61 6e 67 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20  anges = 0;..    
ff30: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
ff40: 64 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  dOnly = false;..
ff50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ff60: 73 74 6d 74 2e 54 72 79 47 65 74 43 68 61 6e 67  stmt.TryGetChang
ff70: 65 73 28 72 65 66 20 63 68 61 6e 67 65 73 2c 20  es(ref changes, 
ff80: 72 65 66 20 72 65 61 64 4f 6e 6c 79 29 29 0d 0a  ref readOnly))..
ff90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ffa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ffb0: 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20  (!readOnly)..   
ffc0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ffd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
ffe0: 20 28 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20   (_rowsAffected 
fff0: 3d 3d 20 2d 31 29 20 5f 72 6f 77 73 41 66 66 65  == -1) _rowsAffe
10000 63 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  cted = 0;..     
10010 20 20 20 20 20 20 20 20 20 20 20 5f 72 6f 77 73             _rows
10020 41 66 66 65 63 74 65 64 20 2b 3d 20 63 68 61 6e  Affected += chan
10030 67 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ges;..          
10040 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10050 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10060 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
10070 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10080 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
10090 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
100a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  }..            i
100b0 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 29 20  f (!schemaOnly) 
100c0 73 74 6d 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28  stmt._sql.Reset(
100d0 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  stmt);..        
100e0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 20 2f 2f      continue; //
100f0 20 53 6b 69 70 20 74 68 69 73 20 63 6f 6d 6d 61   Skip this comma
10100 6e 64 20 61 6e 64 20 6d 6f 76 65 20 74 6f 20 74  nd and move to t
10110 68 65 20 6e 65 78 74 2c 20 69 74 20 77 61 73 20  he next, it was 
10120 6e 6f 74 20 61 20 72 6f 77 2d 72 65 74 75 72 6e  not a row-return
10130 69 6e 67 20 72 65 73 75 6c 74 73 65 74 0d 0a 20  ing resultset.. 
10140 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10150 20 20 20 20 20 20 65 6c 73 65 20 2f 2f 20 4e 6f        else // No
10160 20 72 6f 77 73 2c 20 66 69 65 6c 64 43 6f 75 6e   rows, fieldCoun
10170 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 73 6f  t is non-zero so
10180 20 73 74 6f 70 20 68 65 72 65 0d 0a 20 20 20 20   stop here..    
10190 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
101a0 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61       _readingSta
101b0 74 65 20 3d 20 31 3b 20 2f 2f 20 54 68 69 73 20  te = 1; // This 
101c0 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 65 64  command returned
101d0 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20 6e 6f 20   columns but no 
101e0 72 6f 77 73 2c 20 73 6f 20 72 65 74 75 72 6e 20  rows, so return 
101f0 74 72 75 65 2c 20 62 75 74 20 48 61 73 52 6f 77  true, but HasRow
10200 73 20 3d 20 66 61 6c 73 65 20 61 6e 64 20 52 65  s = false and Re
10210 61 64 28 29 20 72 65 74 75 72 6e 73 20 66 61 6c  ad() returns fal
10220 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  se..          }.
10230 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
10240 20 20 20 20 20 20 2f 2f 20 41 68 68 2c 20 77 65        // Ahh, we
10250 20 66 6f 75 6e 64 20 61 20 72 6f 77 2d 72 65 74   found a row-ret
10260 75 72 6e 69 6e 67 20 72 65 73 75 6c 74 73 65 74  urning resultset
10270 20 65 6c 69 67 69 62 6c 65 20 74 6f 20 62 65 20   eligible to be 
10280 72 65 74 75 72 6e 65 64 21 0d 0a 20 20 20 20 20  returned!..     
10290 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d     _activeStatem
102a0 65 6e 74 20 3d 20 73 74 6d 74 3b 0d 0a 20 20 20  ent = stmt;..   
102b0 20 20 20 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74       _fieldCount
102c0 20 3d 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a   = fieldCount;..
102d0 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 49 6e          _fieldIn
102e0 64 65 78 65 73 20 3d 20 6e 65 77 20 44 69 63 74  dexes = new Dict
102f0 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69  ionary<string, i
10300 6e 74 3e 28 53 74 72 69 6e 67 43 6f 6d 70 61 72  nt>(StringCompar
10310 65 72 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  er.OrdinalIgnore
10320 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Case);..        
10330 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20  _fieldTypeArray 
10340 3d 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65  = new SQLiteType
10350 5b 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46  [PrivateVisibleF
10360 69 65 6c 64 43 6f 75 6e 74 5d 3b 0d 0a 0d 0a 20  ieldCount];.... 
10370 20 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d         if ((_com
10380 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43  mandBehavior & C
10390 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 4b  ommandBehavior.K
103a0 65 79 49 6e 66 6f 29 20 21 3d 20 30 29 0d 0a 20  eyInfo) != 0).. 
103b0 20 20 20 20 20 20 20 20 20 4c 6f 61 64 4b 65 79           LoadKey
103c0 49 6e 66 6f 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Info();....     
103d0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
103e0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
103f0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
10400 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
10410 69 73 20 6d 65 74 68 6f 64 20 61 74 74 65 6d 70  is method attemp
10420 74 73 20 74 6f 20 71 75 65 72 79 20 74 68 65 20  ts to query the 
10430 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10440 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
10450 69 74 68 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65  ith..    /// the
10460 20 64 61 74 61 20 72 65 61 64 65 72 20 69 6e 20   data reader in 
10470 75 73 65 2e 20 20 49 66 20 74 68 65 20 75 6e 64  use.  If the und
10480 65 72 6c 79 69 6e 67 20 63 6f 6d 6d 61 6e 64 20  erlying command 
10490 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  or connection is
104a0 0d 0a 20 20 20 20 2f 2f 2f 20 75 6e 61 76 61 69  ..    /// unavai
104b0 6c 61 62 6c 65 2c 20 61 20 6e 75 6c 6c 20 76 61  lable, a null va
104c0 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 74 75  lue will be retu
104d0 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  rned...    /// <
104e0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
104f0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
10500 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63    /// The connec
10510 74 69 6f 6e 20 6f 62 6a 65 63 74 20 2d 4f 52 2d  tion object -OR-
10520 20 6e 75 6c 6c 20 69 66 20 69 74 20 69 73 20 75   null if it is u
10530 6e 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20  navailable...   
10540 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
10550 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
10560 74 69 63 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  tic SQLiteConnec
10570 74 69 6f 6e 20 47 65 74 43 6f 6e 6e 65 63 74 69  tion GetConnecti
10580 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  on(..        SQL
10590 69 74 65 44 61 74 61 52 65 61 64 65 72 20 64 61  iteDataReader da
105a0 74 61 52 65 61 64 65 72 0d 0a 20 20 20 20 20 20  taReader..      
105b0 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
105c0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
105d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
105e0 69 66 20 28 64 61 74 61 52 65 61 64 65 72 20 21  if (dataReader !
105f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
10600 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10610 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
10620 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
10630 64 61 74 61 52 65 61 64 65 72 2e 5f 63 6f 6d 6d  dataReader._comm
10640 61 6e 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  and;....        
10650 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 6d          if (comm
10660 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  and != null)..  
10670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
10680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10690 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
106a0 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ction connection
106b0 20 3d 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65   = command.Conne
106c0 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ction;....      
106d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
106e0 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 21 3d 20   (connection != 
106f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10710 65 74 75 72 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  eturn connection
10720 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10730 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10740 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
10750 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 4f          catch (O
10760 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63  bjectDisposedExc
10770 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20  eption)..       
10780 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10790 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
107a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
107b0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
107c0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
107d0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
107e0 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
107f0 20 74 68 65 20 53 51 4c 69 74 65 54 79 70 65 20   the SQLiteType 
10800 66 6f 72 20 61 20 67 69 76 65 6e 20 63 6f 6c 75  for a given colu
10810 6d 6e 20 61 6e 64 20 72 6f 77 20 76 61 6c 75 65  mn and row value
10820 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
10830 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
10840 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 6c 64 54  param name="oldT
10850 79 70 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ype">..    /// T
10860 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 69  he original SQLi
10870 74 65 54 79 70 65 20 73 74 72 75 63 74 75 72 65  teType structure
10880 2c 20 62 61 73 65 64 20 6f 6e 6c 79 20 6f 6e 20  , based only on 
10890 74 68 65 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20  the column...   
108a0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
108b0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
108c0 6d 65 3d 22 74 65 78 74 22 3e 0d 0a 20 20 20 20  me="text">..    
108d0 2f 2f 2f 20 54 68 65 20 74 65 78 74 75 61 6c 20  /// The textual 
108e0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c  value of the col
108f0 75 6d 6e 20 66 6f 72 20 61 20 67 69 76 65 6e 20  umn for a given 
10900 72 6f 77 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  row...    /// </
10910 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
10920 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
10930 2f 2f 20 54 68 65 20 53 51 4c 69 74 65 54 79 70  // The SQLiteTyp
10940 65 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  e structure...  
10950 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
10960 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 53 51  ..    private SQ
10970 4c 69 74 65 54 79 70 65 20 47 65 74 53 51 4c 69  LiteType GetSQLi
10980 74 65 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20  teType(..       
10990 20 53 51 4c 69 74 65 54 79 70 65 20 6f 6c 64 54   SQLiteType oldT
109a0 79 70 65 2c 20 2f 2a 20 50 41 53 53 2d 54 48 52  ype, /* PASS-THR
109b0 4f 55 47 48 20 2a 2f 0d 0a 20 20 20 20 20 20 20  OUGH */..       
109c0 20 73 74 72 69 6e 67 20 74 65 78 74 0d 0a 20 20   string text..  
109d0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
109e0 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69          if (SQLi
109f0 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c  teConvert.LooksL
10a00 69 6b 65 4e 75 6c 6c 28 74 65 78 74 29 29 0d 0a  ikeNull(text))..
10a10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10a20 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70  rn new SQLiteTyp
10a30 65 28 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e  e(TypeAffinity.N
10a40 75 6c 6c 2c 20 44 62 54 79 70 65 2e 4f 62 6a 65  ull, DbType.Obje
10a50 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ct);....        
10a60 69 66 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72  if (SQLiteConver
10a70 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 49 6e 74 36 34  t.LooksLikeInt64
10a80 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20  (text))..       
10a90 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
10aa0 53 51 4c 69 74 65 54 79 70 65 28 54 79 70 65 41  SQLiteType(TypeA
10ab0 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 20 44  ffinity.Int64, D
10ac0 62 54 79 70 65 2e 49 6e 74 36 34 29 3b 0d 0a 0d  bType.Int64);...
10ad0 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c  .        if (SQL
10ae0 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73  iteConvert.Looks
10af0 4c 69 6b 65 44 6f 75 62 6c 65 28 74 65 78 74 29  LikeDouble(text)
10b00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
10b10 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65  eturn new SQLite
10b20 54 79 70 65 28 54 79 70 65 41 66 66 69 6e 69 74  Type(TypeAffinit
10b30 79 2e 44 6f 75 62 6c 65 2c 20 44 62 54 79 70 65  y.Double, DbType
10b40 2e 44 6f 75 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20  .Double);....   
10b50 20 20 20 20 20 69 66 20 28 28 5f 61 63 74 69 76       if ((_activ
10b60 65 53 74 61 74 65 6d 65 6e 74 20 21 3d 20 6e 75  eStatement != nu
10b70 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ll) &&..        
10b80 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 76 65 72      SQLiteConver
10b90 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 44 61 74 65 54  t.LooksLikeDateT
10ba0 69 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ime(_activeState
10bb0 6d 65 6e 74 2e 5f 73 71 6c 2c 20 74 65 78 74 29  ment._sql, text)
10bc0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
10bd0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10be0 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 28   new SQLiteType(
10bf0 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74  TypeAffinity.Dat
10c00 65 54 69 6d 65 2c 20 44 62 54 79 70 65 2e 44 61  eTime, DbType.Da
10c10 74 65 54 69 6d 65 29 3b 0d 0a 20 20 20 20 20 20  teTime);..      
10c20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
10c30 65 74 75 72 6e 20 6f 6c 64 54 79 70 65 3b 0d 0a  eturn oldType;..
10c40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
10c50 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
10c60 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
10c70 65 20 53 51 4c 69 74 65 54 79 70 65 20 66 6f 72  e SQLiteType for
10c80 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 2c   a given column,
10c90 20 61 6e 64 20 63 61 63 68 65 73 20 69 74 20 74   and caches it t
10ca0 6f 20 61 76 6f 69 64 20 72 65 70 65 74 65 74 69  o avoid repeteti
10cb0 76 65 20 69 6e 74 65 72 6f 70 20 63 61 6c 6c 73  ve interop calls
10cc0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
10cd0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
10ce0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67  param name="flag
10cf0 73 22 3e 54 68 65 20 66 6c 61 67 73 20 61 73 73  s">The flags ass
10d00 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
10d10 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69   parent connecti
10d20 6f 6e 20 6f 62 6a 65 63 74 2e 3c 2f 70 61 72 61  on object.</para
10d30 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
10d40 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
10d50 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
10d60 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
10d70 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41    /// <returns>A
10d80 20 53 51 4c 69 74 65 54 79 70 65 20 73 74 72 75   SQLiteType stru
10d90 63 74 75 72 65 3c 2f 72 65 74 75 72 6e 73 3e 0d  cture</returns>.
10da0 0a 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c  .    private SQL
10db0 69 74 65 54 79 70 65 20 47 65 74 53 51 4c 69 74  iteType GetSQLit
10dc0 65 54 79 70 65 28 53 51 4c 69 74 65 43 6f 6e 6e  eType(SQLiteConn
10dd0 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
10de0 73 2c 20 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  s, int i)..    {
10df0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
10e00 54 79 70 65 20 74 79 70 20 3d 20 5f 66 69 65 6c  Type typ = _fiel
10e10 64 54 79 70 65 41 72 72 61 79 5b 69 5d 3b 0d 0a  dTypeArray[i];..
10e20 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 79  ..        if (ty
10e30 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p == null)..    
10e40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10e50 20 20 20 2f 2f 20 49 6e 69 74 69 61 6c 69 7a 65     // Initialize
10e60 20 74 68 69 73 20 63 6f 6c 75 6d 6e 27 73 20 66   this column's f
10e70 69 65 6c 64 20 74 79 70 65 20 69 6e 73 74 61 6e  ield type instan
10e80 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
10e90 74 79 70 20 3d 20 5f 66 69 65 6c 64 54 79 70 65  typ = _fieldType
10ea0 41 72 72 61 79 5b 69 5d 20 3d 20 6e 65 77 20 53  Array[i] = new S
10eb0 51 4c 69 74 65 54 79 70 65 28 29 3b 0d 0a 20 20  QLiteType();..  
10ec0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
10ed0 20 20 20 2f 2f 20 49 66 20 6e 6f 74 20 69 6e 69     // If not ini
10ee0 74 69 61 6c 69 7a 65 64 2c 20 74 68 65 6e 20 66  tialized, then f
10ef0 65 74 63 68 20 74 68 65 20 64 65 63 6c 61 72 65  etch the declare
10f00 64 20 63 6f 6c 75 6d 6e 20 64 61 74 61 74 79 70  d column datatyp
10f10 65 20 61 6e 64 20 61 74 74 65 6d 70 74 20 74 6f  e and attempt to
10f20 20 63 6f 6e 76 65 72 74 20 69 74 0d 0a 20 20 20   convert it..   
10f30 20 20 20 20 20 2f 2f 20 74 6f 20 61 20 6b 6e 6f       // to a kno
10f40 77 6e 20 44 62 54 79 70 65 2e 0d 0a 20 20 20 20  wn DbType...    
10f50 20 20 20 20 69 66 20 28 74 79 70 2e 41 66 66 69      if (typ.Affi
10f60 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69  nity == TypeAffi
10f70 6e 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a  nity.Uninitializ
10f80 65 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ed)..        {..
10f90 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 2e              typ.
10fa0 54 79 70 65 20 3d 20 53 51 4c 69 74 65 43 6f 6e  Type = SQLiteCon
10fb0 76 65 72 74 2e 54 79 70 65 4e 61 6d 65 54 6f 44  vert.TypeNameToD
10fc0 62 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20  bType(..        
10fd0 20 20 20 20 20 20 20 20 47 65 74 43 6f 6e 6e 65          GetConne
10fe0 63 74 69 6f 6e 28 74 68 69 73 29 2c 20 5f 61 63  ction(this), _ac
10ff0 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
11000 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 0d 0a  ql.ColumnType(..
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11020 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
11030 2c 20 69 2c 20 72 65 66 20 74 79 70 2e 41 66 66  , i, ref typ.Aff
11040 69 6e 69 74 79 29 2c 20 66 6c 61 67 73 29 3b 0d  inity), flags);.
11050 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
11060 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
11070 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11080 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 20   typ.Affinity = 
11090 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
110a0 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 41 66 66 69  ._sql.ColumnAffi
110b0 6e 69 74 79 28 0d 0a 20 20 20 20 20 20 20 20 20  nity(..         
110c0 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74         _activeSt
110d0 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20  atement, i);..  
110e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
110f0 20 20 20 72 65 74 75 72 6e 20 74 79 70 3b 0d 0a     return typ;..
11100 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
11110 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
11120 2f 2f 2f 20 52 65 61 64 73 20 74 68 65 20 6e 65  /// Reads the ne
11130 78 74 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20  xt row from the 
11140 72 65 73 75 6c 74 73 65 74 0d 0a 20 20 20 20 2f  resultset..    /
11150 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
11160 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
11170 54 72 75 65 20 69 66 20 61 20 6e 65 77 20 72 6f  True if a new ro
11180 77 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  w was successful
11190 6c 79 20 6c 6f 61 64 65 64 20 61 6e 64 20 69 73  ly loaded and is
111a0 20 72 65 61 64 79 20 66 6f 72 20 70 72 6f 63 65   ready for proce
111b0 73 73 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d  ssing</returns>.
111c0 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
111d0 72 69 64 65 20 62 6f 6f 6c 20 52 65 61 64 28 29  ride bool Read()
111e0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43  ..    {..      C
111f0 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
11200 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73  .      CheckClos
11210 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  ed();..      if 
11220 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65  (_throwOnDispose
11230 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  d) SQLiteCommand
11240 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29  .Check(_command)
11250 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28  ;....      if ((
11260 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72  _commandBehavior
11270 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69   & CommandBehavi
11280 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29 20 21  or.SchemaOnly) !
11290 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 72 65  = 0)..        re
112a0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
112b0 20 20 20 20 20 69 66 20 28 5f 72 65 61 64 69 6e       if (_readin
112c0 67 53 74 61 74 65 20 3d 3d 20 2d 31 29 20 2f 2f  gState == -1) //
112d0 20 46 69 72 73 74 20 73 74 65 70 20 77 61 73 20   First step was 
112e0 61 6c 72 65 61 64 79 20 64 6f 6e 65 20 61 74 20  already done at 
112f0 74 68 65 20 4e 65 78 74 52 65 73 75 6c 74 28 29  the NextResult()
11300 20 6c 65 76 65 6c 2c 20 73 6f 20 64 6f 6e 27 74   level, so don't
11310 20 73 74 65 70 20 61 67 61 69 6e 2c 20 6a 75 73   step again, jus
11320 74 20 72 65 74 75 72 6e 20 74 72 75 65 2e 0d 0a  t return true...
11330 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11340 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d   _readingState =
11350 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74   0;..        ret
11360 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
11370 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69   }..      else i
11380 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65  f (_readingState
11390 20 3d 3d 20 30 29 20 2f 2f 20 41 63 74 69 76 65   == 0) // Active
113a0 6c 79 20 72 65 61 64 69 6e 67 20 72 6f 77 73 0d  ly reading rows.
113b0 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
113c0 20 20 2f 2f 20 44 6f 6e 27 74 20 72 65 61 64 20    // Don't read 
113d0 61 20 6e 65 77 20 72 6f 77 20 69 66 20 74 68 65  a new row if the
113e0 20 63 6f 6d 6d 61 6e 64 20 62 65 68 61 76 69 6f   command behavio
113f0 72 20 64 69 63 74 61 74 65 73 20 53 69 6e 67 6c  r dictates Singl
11400 65 52 6f 77 2e 20 20 57 65 27 76 65 20 61 6c 72  eRow.  We've alr
11410 65 61 64 79 20 72 65 61 64 20 74 68 65 20 66 69  eady read the fi
11420 72 73 74 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20  rst row...      
11430 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42    if ((_commandB
11440 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e  ehavior & Comman
11450 64 42 65 68 61 76 69 6f 72 2e 53 69 6e 67 6c 65  dBehavior.Single
11460 52 6f 77 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20  Row) == 0)..    
11470 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11480 20 69 66 20 28 5f 61 63 74 69 76 65 53 74 61 74   if (_activeStat
11490 65 6d 65 6e 74 2e 5f 73 71 6c 2e 53 74 65 70 28  ement._sql.Step(
114a0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
114b0 29 20 3d 3d 20 74 72 75 65 29 0d 0a 20 20 20 20  ) == true)..    
114c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
114d0 20 20 20 20 20 5f 73 74 65 70 43 6f 75 6e 74 2b       _stepCount+
114e0 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  +;....          
114f0 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21    if (_keyInfo !
11500 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
11510 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e         _keyInfo.
11520 52 65 73 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  Reset();....    
11530 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
11540 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
11550 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
11560 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67          _reading
11570 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f 20 46 69  State = 1; // Fi
11580 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 20 72  nished reading r
11590 6f 77 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ows..      }....
115a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
115b0 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  se;..    }....  
115c0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
115d0 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
115e0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
115f0 6f 77 73 20 61 66 66 65 63 74 65 64 20 62 79 20  ows affected by 
11600 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
11610 69 6e 67 20 65 78 65 63 75 74 65 64 2e 0d 0a 20  ing executed... 
11620 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65     /// The value
11630 20 72 65 74 75 72 6e 65 64 20 6d 61 79 20 6e 6f   returned may no
11640 74 20 62 65 20 61 63 63 75 72 61 74 65 20 66 6f  t be accurate fo
11650 72 20 44 44 4c 20 73 74 61 74 65 6d 65 6e 74 73  r DDL statements
11660 2e 20 20 41 6c 73 6f 2c 20 69 74 0d 0a 20 20 20  .  Also, it..   
11670 20 2f 2f 2f 20 77 69 6c 6c 20 62 65 20 2d 31 20   /// will be -1 
11680 66 6f 72 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  for any statemen
11690 74 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  t that does not 
116a0 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74 61 62  modify the datab
116b0 61 73 65 20 28 65 2e 67 2e 0d 0a 20 20 20 20 2f  ase (e.g...    /
116c0 2f 2f 20 53 45 4c 45 43 54 29 2e 20 20 49 66 20  // SELECT).  If 
116d0 61 6e 20 6f 74 68 65 72 77 69 73 65 20 72 65 61  an otherwise rea
116e0 64 2d 6f 6e 6c 79 20 73 74 61 74 65 6d 65 6e 74  d-only statement
116f0 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 64 61   modifies the da
11700 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20  tabase..    /// 
11710 69 6e 64 69 72 65 63 74 6c 79 20 28 65 2e 67 2e  indirectly (e.g.
11720 20 76 69 61 20 61 20 76 69 72 74 75 61 6c 20 74   via a virtual t
11730 61 62 6c 65 20 6f 72 20 75 73 65 72 2d 64 65 66  able or user-def
11740 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 29 2c 20  ined function), 
11750 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c  the..    /// val
11760 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 75  ue returned is u
11770 6e 64 65 66 69 6e 65 64 2e 0d 0a 20 20 20 20 2f  ndefined...    /
11780 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
11790 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
117a0 64 65 20 69 6e 74 20 52 65 63 6f 72 64 73 41 66  de int RecordsAf
117b0 66 65 63 74 65 64 0d 0a 20 20 20 20 7b 0d 0a 20  fected..    {.. 
117c0 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
117d0 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
117e0 72 6e 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64  rn _rowsAffected
117f0 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ; }..    }....  
11800 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
11810 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72  .    /// Indexer
11820 20 74 6f 20 72 65 74 72 69 65 76 65 20 64 61 74   to retrieve dat
11830 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20  a from a column 
11840 67 69 76 65 6e 20 69 74 73 20 6e 61 6d 65 0d 0a  given its name..
11850 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
11860 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
11870 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 54  am name="name">T
11880 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
11890 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76  olumn to retriev
118a0 65 20 64 61 74 61 20 66 6f 72 3c 2f 70 61 72 61  e data for</para
118b0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
118c0 75 72 6e 73 3e 54 68 65 20 76 61 6c 75 65 20 63  urns>The value c
118d0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
118e0 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e  column</returns>
118f0 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
11900 72 72 69 64 65 20 6f 62 6a 65 63 74 20 74 68 69  rride object thi
11910 73 5b 73 74 72 69 6e 67 20 6e 61 6d 65 5d 0d 0a  s[string name]..
11920 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
11930 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
11940 28 29 3b 20 72 65 74 75 72 6e 20 47 65 74 56 61  (); return GetVa
11950 6c 75 65 28 47 65 74 4f 72 64 69 6e 61 6c 28 6e  lue(GetOrdinal(n
11960 61 6d 65 29 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d  ame)); }..    }.
11970 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
11980 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e  ary>..    /// In
11990 64 65 78 65 72 20 74 6f 20 72 65 74 72 69 65 76  dexer to retriev
119a0 65 20 64 61 74 61 20 66 72 6f 6d 20 61 20 63 6f  e data from a co
119b0 6c 75 6d 6e 20 67 69 76 65 6e 20 69 74 73 20 69  lumn given its i
119c0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
119d0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
119e0 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
119f0 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
11a00 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
11a10 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
11a20 3e 54 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61  >The value conta
11a30 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75  ined in the colu
11a40 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  mn</returns>..  
11a50 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
11a60 65 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 69 6e  e object this[in
11a70 74 20 69 5d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i]..    {..   
11a80 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
11a90 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
11aa0 20 47 65 74 56 61 6c 75 65 28 69 29 3b 20 7d 0d   GetValue(i); }.
11ab0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
11ac0 69 76 61 74 65 20 76 6f 69 64 20 4c 6f 61 64 4b  ivate void LoadK
11ad0 65 79 49 6e 66 6f 28 29 0d 0a 20 20 20 20 7b 0d  eyInfo()..    {.
11ae0 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 6b 65  .        if (_ke
11af0 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
11b00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11b10 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e         _keyInfo.
11b20 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
11b30 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f          _keyInfo
11b40 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
11b50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f    }....        _
11b60 6b 65 79 49 6e 66 6f 20 3d 20 6e 65 77 20 53 51  keyInfo = new SQ
11b70 4c 69 74 65 4b 65 79 52 65 61 64 65 72 28 5f 63  LiteKeyReader(_c
11b80 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
11b90 6e 2c 20 74 68 69 73 2c 20 5f 61 63 74 69 76 65  n, this, _active
11ba0 53 74 61 74 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  Statement);..   
11bb0 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a               }..  }..}..