System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact afbd5f2afd311a8a3eb3aa120e2e64b5f36b71b7:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75  ns.Generic;..  u
0180: 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c  sing System.Coll
0190: 65 63 74 69 6f 6e 73 2e 53 70 65 63 69 61 6c 69  ections.Speciali
01a0: 7a 65 64 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  zed;..  using Sy
01b0: 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 75 73  stem.Data;..  us
01c0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
01d0: 43 6f 6d 6d 6f 6e 3b 0d 0a 20 20 75 73 69 6e 67  Common;..  using
01e0: 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a   System.Globaliz
01f0: 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20  ation;....  /// 
0200: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  <summary>..  ///
0210: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
0220: 74 61 74 69 6f 6e 20 6f 66 20 44 62 44 61 74 61  tation of DbData
0230: 52 65 61 64 65 72 2e 0d 0a 20 20 2f 2f 2f 20 3c  Reader...  /// <
0240: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62  /summary>..  pub
0250: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
0260: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
0270: 72 20 3a 20 44 62 44 61 74 61 52 65 61 64 65 72  r : DbDataReader
0280: 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ..  {..    /// <
0290: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
02a0: 2f 20 55 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d  / Underlying com
02b0: 6d 61 6e 64 20 74 68 69 73 20 72 65 61 64 65 72  mand this reader
02c0: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 0d   is attached to.
02d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
02e0: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
02f0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 5f   SQLiteCommand _
0300: 63 6f 6d 6d 61 6e 64 3b 0d 0a 20 20 20 20 2f 2f  command;..    //
0310: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0320: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 70   /// The flags p
0330: 65 72 74 61 69 6e 69 6e 67 20 74 6f 20 74 68 65  ertaining to the
0340: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6e 6e   associated conn
0350: 65 63 74 69 6f 6e 20 28 76 69 61 20 74 68 65 20  ection (via the 
0360: 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 2f  command)...    /
0370: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0380: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0390: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
03a0: 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20 2f 2f   _flags;..    //
03b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
03c0: 20 2f 2f 2f 20 49 6e 64 65 78 20 6f 66 20 74 68   /// Index of th
03d0: 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
03e0: 65 6e 74 20 69 6e 20 74 68 65 20 63 6f 6d 6d 61  ent in the comma
03f0: 6e 64 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nd being process
0400: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
0410: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
0420: 61 74 65 20 69 6e 74 20 5f 61 63 74 69 76 65 53  ate int _activeS
0430: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 3b 0d 0a  tatementIndex;..
0440: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0450: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65  >..    /// Curre
0460: 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  nt statement bei
0470: 6e 67 20 52 65 61 64 28 29 0d 0a 20 20 20 20 2f  ng Read()..    /
0480: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0490: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
04a0: 65 53 74 61 74 65 6d 65 6e 74 20 5f 61 63 74 69  eStatement _acti
04b0: 76 65 53 74 61 74 65 6d 65 6e 74 3b 0d 0a 20 20  veStatement;..  
04c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
04d0: 0a 20 20 20 20 2f 2f 2f 20 53 74 61 74 65 20 6f  .    /// State o
04e0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  f the current st
04f0: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72  atement being pr
0500: 6f 63 65 73 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  ocessed...    //
0510: 2f 20 2d 31 20 3d 20 46 69 72 73 74 20 53 74 65  / -1 = First Ste
0520: 70 28 29 20 65 78 65 63 75 74 65 64 2c 20 73 6f  p() executed, so
0530: 20 74 68 65 20 66 69 72 73 74 20 52 65 61 64 28   the first Read(
0540: 29 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65  ) will be ignore
0550: 64 0d 0a 20 20 20 20 2f 2f 2f 20 20 30 20 3d 20  d..    ///  0 = 
0560: 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67  Actively reading
0570: 0d 0a 20 20 20 20 2f 2f 2f 20 20 31 20 3d 20 46  ..    ///  1 = F
0580: 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 0d  inished reading.
0590: 0a 20 20 20 20 2f 2f 2f 20 20 32 20 3d 20 4e 6f  .    ///  2 = No
05a0: 6e 2d 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  n-row-returning 
05b0: 73 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 20 72 65  statement, no re
05c0: 63 6f 72 64 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cords..    /// <
05d0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
05e0: 72 69 76 61 74 65 20 69 6e 74 20 5f 72 65 61 64  rivate int _read
05f0: 69 6e 67 53 74 61 74 65 3b 0d 0a 20 20 20 20 2f  ingState;..    /
0600: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0610: 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20    /// Number of 
0620: 72 65 63 6f 72 64 73 20 61 66 66 65 63 74 65 64  records affected
0630: 20 62 79 20 74 68 65 20 69 6e 73 65 72 74 2f 75   by the insert/u
0640: 70 64 61 74 65 20 73 74 61 74 65 6d 65 6e 74 73  pdate statements
0650: 20 65 78 65 63 75 74 65 64 20 6f 6e 20 74 68 65   executed on the
0660: 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 2f 2f   command..    //
0670: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0680: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 5f 72    private int _r
0690: 6f 77 73 41 66 66 65 63 74 65 64 3b 0d 0a 20 20  owsAffected;..  
06a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
06b0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 75 6e 74 20 6f  .    /// Count o
06c0: 66 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d 6e  f fields (column
06d0: 73 29 20 69 6e 20 74 68 65 20 72 6f 77 2d 72 65  s) in the row-re
06e0: 74 75 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e  turning statemen
06f0: 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
0700: 67 20 70 72 6f 63 65 73 73 65 64 0d 0a 20 20 20  g processed..   
0710: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0720: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
0730: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20   _fieldCount;.. 
0740: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0750: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
0760: 6d 62 65 72 20 6f 66 20 63 61 6c 6c 73 20 74 6f  mber of calls to
0770: 20 53 74 65 70 28 29 20 74 68 61 74 20 68 61 76   Step() that hav
0780: 65 20 72 65 74 75 72 6e 65 64 20 74 72 75 65 20  e returned true 
0790: 28 69 2e 65 2e 20 74 68 65 20 6e 75 6d 62 65 72  (i.e. the number
07a0: 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0d 0a 20   of rows that.. 
07b0: 20 20 20 2f 2f 2f 20 68 61 76 65 20 62 65 65 6e     /// have been
07c0: 20 72 65 61 64 20 69 6e 20 74 68 65 20 63 75 72   read in the cur
07d0: 72 65 6e 74 20 72 65 73 75 6c 74 20 73 65 74 29  rent result set)
07e0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
07f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0800: 74 65 20 69 6e 74 20 5f 73 74 65 70 43 6f 75 6e  te int _stepCoun
0810: 74 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  t;..    /// <sum
0820: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d  mary>..    /// M
0830: 61 70 73 20 74 68 65 20 66 69 65 6c 64 20 28 63  aps the field (c
0840: 6f 6c 75 6d 6e 29 20 6e 61 6d 65 73 20 74 6f 20  olumn) names to 
0850: 74 68 65 69 72 20 63 6f 72 72 65 73 70 6f 6e 64  their correspond
0860: 69 6e 67 20 69 6e 64 65 78 65 73 20 77 69 74 68  ing indexes with
0870: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0d  in the results..
0880: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0890: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
08a0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
08b0: 6e 67 2c 20 69 6e 74 3e 20 5f 66 69 65 6c 64 49  ng, int> _fieldI
08c0: 6e 64 65 78 65 73 3b 0d 0a 20 20 20 20 2f 2f 2f  ndexes;..    ///
08d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
08e0: 2f 2f 2f 20 44 61 74 61 74 79 70 65 73 20 6f 66  /// Datatypes of
08f0: 20 61 63 74 69 76 65 20 66 69 65 6c 64 73 20 28   active fields (
0900: 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74 68 65 20  columns) in the 
0910: 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
0920: 74 2c 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  t, used for type
0930: 2d 72 65 73 74 72 69 63 74 69 6e 67 20 64 61 74  -restricting dat
0940: 61 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  a..    /// </sum
0950: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0960: 74 65 20 53 51 4c 69 74 65 54 79 70 65 5b 5d 20  te SQLiteType[] 
0970: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 3b  _fieldTypeArray;
0980: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0990: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
09a0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
09b0: 68 65 20 64 61 74 61 72 65 61 64 65 72 0d 0a 20  he datareader.. 
09c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
09d0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 43  >..    private C
09e0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 5f  ommandBehavior _
09f0: 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 3b  commandBehavior;
0a00: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0a10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
0a20: 66 20 73 65 74 2c 20 74 68 65 6e 20 64 69 73 70  f set, then disp
0a30: 6f 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61  ose of the comma
0a40: 6e 64 20 6f 62 6a 65 63 74 20 77 68 65 6e 20 74  nd object when t
0a50: 68 65 20 72 65 61 64 65 72 20 69 73 20 66 69 6e  he reader is fin
0a60: 69 73 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ished..    /// <
0a70: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
0a80: 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 64 69  nternal bool _di
0a90: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 3b 0d 0a 0d  sposeCommand;...
0aa0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0ab0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73  y>..    /// If s
0ac0: 65 74 2c 20 74 68 65 6e 20 72 61 69 73 65 20 61  et, then raise a
0ad0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 68 65 6e  n exception when
0ae0: 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61   the object is a
0af0: 63 63 65 73 73 65 64 20 61 66 74 65 72 20 62 65  ccessed after be
0b00: 69 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  ing disposed... 
0b10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0b20: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0b30: 62 6f 6f 6c 20 5f 74 68 72 6f 77 4f 6e 44 69 73  bool _throwOnDis
0b40: 70 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  posed;....    //
0b50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0b60: 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66   /// An array of
0b70: 20 72 6f 77 69 64 27 73 20 66 6f 72 20 74 68 65   rowid's for the
0b80: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
0b90: 74 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61  t if CommandBeha
0ba0: 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 20 69 73 20  vior.KeyInfo is 
0bb0: 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
0bc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0bd0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0be0: 65 4b 65 79 52 65 61 64 65 72 20 5f 6b 65 79 49  eKeyReader _keyI
0bf0: 6e 66 6f 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  nfo;....    /// 
0c00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0c10: 2f 2f 20 4d 61 74 63 68 65 73 20 74 68 65 20 76  // Matches the v
0c20: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  ersion of the co
0c30: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
0c40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0c50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20     internal int 
0c60: 5f 76 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  _version;....   
0c70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0c80: 20 20 20 20 2f 2f 2f 20 54 68 65 20 22 73 74 75      /// The "stu
0c90: 62 22 20 28 69 2e 65 2e 20 70 6c 61 63 65 68 6f  b" (i.e. placeho
0ca0: 6c 64 65 72 29 20 62 61 73 65 20 73 63 68 65 6d  lder) base schem
0cb0: 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 77 68  a name to use wh
0cc0: 65 6e 20 72 65 74 75 72 6e 69 6e 67 0d 0a 20 20  en returning..  
0cd0: 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 73 63 68    /// column sch
0ce0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ema information.
0cf0: 20 20 4d 61 74 63 68 65 73 20 74 68 65 20 62 61    Matches the ba
0d00: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 75  se schema name u
0d10: 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  sed by the..    
0d20: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 63  /// associated c
0d30: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
0d40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0d50: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
0d60: 6e 67 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61  ng _baseSchemaNa
0d70: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  me;....    /// <
0d80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0d90: 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74  / Internal const
0da0: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
0db0: 7a 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  zes the dataread
0dc0: 65 72 20 61 6e 64 20 73 65 74 73 20 75 70 20 74  er and sets up t
0dd0: 6f 20 62 65 67 69 6e 20 65 78 65 63 75 74 69 6e  o begin executin
0de0: 67 20 73 74 61 74 65 6d 65 6e 74 73 0d 0a 20 20  g statements..  
0df0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0e00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0e10: 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65 20   name="cmd">The 
0e20: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74 68  SQLiteCommand th
0e30: 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20 69  is data reader i
0e40: 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20  s for</param>.. 
0e50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e60: 6d 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20  me="behave">The 
0e70: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
0e80: 72 20 6f 66 20 74 68 65 20 64 61 74 61 20 72 65  r of the data re
0e90: 61 64 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ader</param>..  
0ea0: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
0eb0: 65 44 61 74 61 52 65 61 64 65 72 28 53 51 4c 69  eDataReader(SQLi
0ec0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43  teCommand cmd, C
0ed0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 62  ommandBehavior b
0ee0: 65 68 61 76 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ehave)..    {.. 
0ef0: 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69 73       _throwOnDis
0f00: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
0f10: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20       _command = 
0f20: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 5f 76 65 72  cmd;..      _ver
0f30: 73 69 6f 6e 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  sion = _command.
0f40: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 76 65 72 73  Connection._vers
0f50: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 5f 62 61 73  ion;..      _bas
0f60: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 5f 63  eSchemaName = _c
0f70: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
0f80: 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  n._baseSchemaNam
0f90: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 63 6f 6d  e;....      _com
0fa0: 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 3d 20 62  mandBehavior = b
0fb0: 65 68 61 76 65 3b 0d 0a 20 20 20 20 20 20 5f 61  ehave;..      _a
0fc0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
0fd0: 64 65 78 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  dex = -1;..     
0fe0: 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d   _rowsAffected =
0ff0: 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65   -1;....      Re
1000: 66 72 65 73 68 46 6c 61 67 73 28 29 3b 0d 0a 0d  freshFlags();...
1010: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
1020: 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
1030: 64 28 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  d(GetConnection(
1040: 74 68 69 73 29 2c 0d 0a 20 20 20 20 20 20 20 20  this),..        
1050: 20 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e    new Connection
1060: 45 76 65 6e 74 41 72 67 73 28 53 51 4c 69 74 65  EventArgs(SQLite
1070: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
1080: 79 70 65 2e 4e 65 77 44 61 74 61 52 65 61 64 65  ype.NewDataReade
1090: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 75  r,..          nu
10a0: 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61  ll, null, _comma
10b0: 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c 2c 20  nd, this, null, 
10c0: 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  null, new object
10d0: 5b 5d 20 7b 20 62 65 68 61 76 65 20 7d 29 29 3b  [] { behave }));
10e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 63  ....      if (_c
10f0: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
1100: 0a 20 20 20 20 20 20 20 20 20 20 4e 65 78 74 52  .          NextR
1110: 65 73 75 6c 74 28 29 3b 0d 0a 20 20 20 20 7d 0d  esult();..    }.
1120: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1190: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
11a0: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
11b0: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
11c0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
11d0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
11e0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
11f0: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
1200: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
1210: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
1220: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
1230: 64 20 26 26 20 5f 74 68 72 6f 77 4f 6e 44 69 73  d && _throwOnDis
1240: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
1250: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
1260: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
1270: 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c  ption(typeof(SQL
1280: 69 74 65 44 61 74 61 52 65 61 64 65 72 29 2e 4e  iteDataReader).N
1290: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
12a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1310: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1320: 0d 0a 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73  ..    /// Dispos
1330: 65 20 6f 66 20 61 6c 6c 20 72 65 73 6f 75 72 63  e of all resourc
1340: 65 73 20 75 73 65 64 20 62 79 20 74 68 69 73 20  es used by this 
1350: 64 61 74 61 72 65 61 64 65 72 2e 0d 0a 20 20 20  datareader...   
1360: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1380: 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22  name="disposing"
1390: 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70  ></param>..    p
13a0: 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64  rotected overrid
13b0: 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  e void Dispose(b
13c0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
13d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
13e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
13f0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1400: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1410: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1420: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
1430: 72 67 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  rgs(SQLiteConnec
1440: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 44 69  tionEventType.Di
1450: 73 70 6f 73 69 6e 67 44 61 74 61 52 65 61 64 65  sposingDataReade
1460: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
1470: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d  null, null, _com
1480: 6d 61 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c  mand, this, null
1490: 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65  , null, new obje
14a0: 63 74 5b 5d 20 7b 20 64 69 73 70 6f 73 69 6e 67  ct[] { disposing
14b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ,..            d
14c0: 69 73 70 6f 73 65 64 2c 20 5f 63 6f 6d 6d 61 6e  isposed, _comman
14d0: 64 42 65 68 61 76 69 6f 72 2c 20 5f 72 65 61 64  dBehavior, _read
14e0: 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f 77 73 41  ingState, _rowsA
14f0: 66 66 65 63 74 65 64 2c 20 5f 73 74 65 70 43 6f  ffected, _stepCo
1500: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
1510: 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 20 5f    _fieldCount, _
1520: 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 2c 20  disposeCommand, 
1530: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
1540: 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   }));....       
1550: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1570: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1580: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
15a0: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15d0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1610: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1620: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1630: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1640: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1650: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1680: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
16d0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
16e0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
16f0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1740: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1760: 4f 54 45 3a 20 46 69 78 20 66 6f 72 20 74 69 63  OTE: Fix for tic
1770: 6b 65 74 20 5b 65 31 62 32 65 30 66 37 36 39 5d  ket [e1b2e0f769]
1780: 2c 20 64 6f 20 4e 4f 54 20 74 68 72 6f 77 20 65  , do NOT throw e
1790: 78 63 65 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20  xceptions..     
17a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17b0: 20 20 20 20 77 68 69 6c 65 20 77 65 20 61 72 65      while we are
17c0: 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64 2e   being disposed.
17d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
17f0: 20 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69        _throwOnDi
1800: 73 70 6f 73 65 64 20 3d 20 66 61 6c 73 65 3b 0d  sposed = false;.
1810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1820: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1830: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
1840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1850: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
1860: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20  disposing);.... 
1870: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1880: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1890: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
18a0: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
18b0: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
18c0: 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  point...        
18d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
18e0: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
18f0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1900: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1910: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1980: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f  .    internal vo
1990: 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  id Cancel()..   
19a0: 20 7b 0d 0a 20 20 20 20 20 20 5f 76 65 72 73 69   {..      _versi
19b0: 6f 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  on = 0;..    }..
19c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
19d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c 6f  ry>..    /// Clo
19e0: 73 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  ses the dataread
19f0: 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20  er, potentially 
1a00: 63 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  closing the conn
1a10: 65 63 74 69 6f 6e 20 61 73 20 77 65 6c 6c 20 69  ection as well i
1a20: 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  f CommandBehavio
1a30: 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f  r.CloseConnectio
1a40: 6e 20 77 61 73 20 73 70 65 63 69 66 69 65 64 2e  n was specified.
1a50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1a60: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
1a70: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
1a80: 6c 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  lose()..    {.. 
1a90: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
1aa0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53  ed();....      S
1ab0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
1ac0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1ad0: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1ae0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f            new Co
1af0: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
1b00: 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  s(SQLiteConnecti
1b10: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73  onEventType.Clos
1b20: 69 6e 67 44 61 74 61 52 65 61 64 65 72 2c 0d 0a  ingDataReader,..
1b30: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
1b40: 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61 6e 64 2c 20  null, _command, 
1b50: 74 68 69 73 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  this, null, null
1b60: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
1b70: 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f   _commandBehavio
1b80: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 72  r,..          _r
1b90: 65 61 64 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f  eadingState, _ro
1ba0: 77 73 41 66 66 65 63 74 65 64 2c 20 5f 73 74 65  wsAffected, _ste
1bb0: 70 43 6f 75 6e 74 2c 20 5f 66 69 65 6c 64 43 6f  pCount, _fieldCo
1bc0: 75 6e 74 2c 20 5f 64 69 73 70 6f 73 65 43 6f 6d  unt, _disposeCom
1bd0: 6d 61 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  mand,..         
1be0: 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65   _throwOnDispose
1bf0: 64 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  d }));....      
1c00: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
1c10: 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61        if (_comma
1c20: 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nd != null)..   
1c30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c40: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1c50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c60: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1c70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c80: 20 20 2f 2f 20 4d 61 6b 65 20 73 75 72 65 20 77    // Make sure w
1c90: 65 27 76 65 20 6e 6f 74 20 62 65 65 6e 20 63 61  e've not been ca
1ca0: 6e 63 65 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  nceled..        
1cb0: 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73 69        if (_versi
1cc0: 6f 6e 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  on != 0)..      
1cd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ce0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d10: 20 20 20 20 20 77 68 69 6c 65 20 28 4e 65 78 74       while (Next
1d20: 52 65 73 75 6c 74 28 29 29 0d 0a 20 20 20 20 20  Result())..     
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d70: 20 20 20 20 20 20 20 20 63 61 74 63 68 28 53 51          catch(SQ
1d80: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 29 0d 0a  LiteException)..
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1db0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1dc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1dd0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 52 65       _command.Re
1de0: 73 65 74 44 61 74 61 52 65 61 64 65 72 28 29 3b  setDataReader();
1df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
1e10: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e30: 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64 61 74     // If the dat
1e40: 61 72 65 61 64 65 72 27 73 20 62 65 68 61 76 69  areader's behavi
1e50: 6f 72 20 69 6e 63 6c 75 64 65 73 20 63 6c 6f 73  or includes clos
1e60: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
1e70: 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73 6f 20 68  on, then do so h
1e80: 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ere...          
1e90: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
1ea0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
1eb0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73  andBehavior.Clos
1ec0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 21 3d 20  eConnection) != 
1ed0: 30 20 26 26 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  0 && _command.Co
1ee0: 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  nnection != null
1ef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f00: 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e     _command.Conn
1f10: 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d  ection.Close();.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f40: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
1f50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f60: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 64 69           if (_di
1f70: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 29 0d 0a 20  sposeCommand).. 
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63 6f               _co
1f90: 6d 6d 61 6e 64 2e 44 69 73 70 6f 73 65 28 29 3b  mmand.Dispose();
1fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
1fb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fc0: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 6e      _command = n
1fd0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f 61  ull;..        _a
1fe0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d  ctiveStatement =
1ff0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2000: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
2010: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f  null;..        _
2020: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d  fieldTypeArray =
2030: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d   null;..      }.
2040: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
2050: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2060: 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
2070: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2080: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65  {..          _ke
2090: 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b  yInfo.Dispose();
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79  ..          _key
20b0: 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Info = null;..  
20c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
20d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
20e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20f0: 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20 65    /// Throw an e
2100: 72 72 6f 72 20 69 66 20 74 68 65 20 64 61 74 61  rror if the data
2110: 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
2120: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2130: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
2140: 65 20 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73  e void CheckClos
2150: 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
2160: 20 20 20 69 66 20 28 21 5f 74 68 72 6f 77 4f 6e     if (!_throwOn
2170: 44 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  Disposed)..     
2180: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
2190: 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64      if (_command
21a0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
21b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
21c0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
21d0: 65 70 74 69 6f 6e 28 22 44 61 74 61 52 65 61 64  eption("DataRead
21e0: 65 72 20 68 61 73 20 62 65 65 6e 20 63 6c 6f 73  er has been clos
21f0: 65 64 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ed");....      i
2200: 66 20 28 5f 76 65 72 73 69 6f 6e 20 3d 3d 20 30  f (_version == 0
2210: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
2220: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2230: 74 69 6f 6e 28 22 45 78 65 63 75 74 69 6f 6e 20  tion("Execution 
2240: 77 61 73 20 61 62 6f 72 74 65 64 20 62 79 20 74  was aborted by t
2250: 68 65 20 75 73 65 72 22 29 3b 0d 0a 0d 0a 20 20  he user");....  
2260: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2270: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
2280: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
2290: 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ction;....      
22a0: 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  if (connection._
22b0: 76 65 72 73 69 6f 6e 20 21 3d 20 5f 76 65 72 73  version != _vers
22c0: 69 6f 6e 20 7c 7c 20 63 6f 6e 6e 65 63 74 69 6f  ion || connectio
22d0: 6e 2e 53 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65  n.State != Conne
22e0: 63 74 69 6f 6e 53 74 61 74 65 2e 4f 70 65 6e 29  ctionState.Open)
22f0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
2300: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
2310: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 43  tionException("C
2320: 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 63 6c  onnection was cl
2330: 6f 73 65 64 2c 20 73 74 61 74 65 6d 65 6e 74 20  osed, statement 
2340: 77 61 73 20 74 65 72 6d 69 6e 61 74 65 64 22 29  was terminated")
2350: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
2360: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2370: 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20     /// Throw an 
2380: 65 72 72 6f 72 20 69 66 20 61 20 72 6f 77 20 69  error if a row i
2390: 73 20 6e 6f 74 20 6c 6f 61 64 65 64 0d 0a 20 20  s not loaded..  
23a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
23b0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
23c0: 69 64 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77  id CheckValidRow
23d0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
23e0: 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
23f0: 74 65 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  te != 0)..      
2400: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
2410: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
2420: 70 74 69 6f 6e 28 22 4e 6f 20 63 75 72 72 65 6e  ption("No curren
2430: 74 20 72 6f 77 22 29 3b 0d 0a 20 20 20 20 7d 0d  t row");..    }.
2440: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2450: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
2460: 75 6d 65 72 61 74 6f 72 20 73 75 70 70 6f 72 74  umerator support
2470: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2480: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
2490: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
24a0: 20 44 62 45 6e 75 6d 65 72 61 74 6f 72 20 6f 62   DbEnumerator ob
24b0: 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ject.</returns>.
24c0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
24d0: 72 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 73  ride Collections
24e0: 2e 49 45 6e 75 6d 65 72 61 74 6f 72 20 47 65 74  .IEnumerator Get
24f0: 45 6e 75 6d 65 72 61 74 6f 72 28 29 0d 0a 20 20  Enumerator()..  
2500: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
2510: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
2520: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 62     return new Db
2530: 45 6e 75 6d 65 72 61 74 6f 72 28 74 68 69 73 2c  Enumerator(this,
2540: 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
2550: 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
2560: 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65  avior.CloseConne
2570: 63 74 69 6f 6e 29 20 3d 3d 20 43 6f 6d 6d 61 6e  ction) == Comman
2580: 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43  dBehavior.CloseC
2590: 6f 6e 6e 65 63 74 69 6f 6e 29 29 3b 0d 0a 20 20  onnection));..  
25a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
25b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
25c0: 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65  / Not implemente
25d0: 64 2e 20 20 52 65 74 75 72 6e 73 20 30 0d 0a 20  d.  Returns 0.. 
25e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
25f0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
2600: 65 72 72 69 64 65 20 69 6e 74 20 44 65 70 74 68  erride int Depth
2610: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
2620: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
2630: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2640: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43  ed();..        C
2650: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
2660: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
2670: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2680: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2690: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
26a0: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
26b0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
26c0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75  the current resu
26d0: 6c 74 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ltset..    /// <
26e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
26f0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
2700: 6e 74 20 46 69 65 6c 64 43 6f 75 6e 74 0d 0a 20  nt FieldCount.. 
2710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
2720: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2730: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
2740: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2750: 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  kClosed();....  
2760: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
2770: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
2780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66         return _f
2790: 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  ieldCount;....  
27a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69        return _fi
27b0: 65 6c 64 43 6f 75 6e 74 20 2b 20 5f 6b 65 79 49  eldCount + _keyI
27c0: 6e 66 6f 2e 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  nfo.Count;..    
27d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
27e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
27f0: 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 63 65 73 20  .    /// Forces 
2800: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
2810: 6c 61 67 73 20 63 61 63 68 65 64 20 62 79 20 74  lags cached by t
2820: 68 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20  his data reader 
2830: 74 6f 20 62 65 20 72 65 66 72 65 73 68 65 64 0d  to be refreshed.
2840: 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68  .    /// from th
2850: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6e  e underlying con
2860: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
2870: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2880: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 52 65    public void Re
2890: 66 72 65 73 68 46 6c 61 67 73 28 29 0d 0a 20 20  freshFlags()..  
28a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
28b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
28c0: 0a 20 20 20 20 20 20 20 20 5f 66 6c 61 67 73 20  .        _flags 
28d0: 3d 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  = SQLiteCommand.
28e0: 47 65 74 46 6c 61 67 73 28 5f 63 6f 6d 6d 61 6e  GetFlags(_comman
28f0: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
2900: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2910: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
2920: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2930: 6f 77 73 20 73 65 65 6e 20 73 6f 20 66 61 72 20  ows seen so far 
2940: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  in the current r
2950: 65 73 75 6c 74 20 73 65 74 2e 0d 0a 20 20 20 20  esult set...    
2960: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2970: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 53      public int S
2980: 74 65 70 43 6f 75 6e 74 0d 0a 20 20 20 20 7b 0d  tepCount..    {.
2990: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
29a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29b0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
29c0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
29d0: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
29e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29f0: 20 72 65 74 75 72 6e 20 5f 73 74 65 70 43 6f 75   return _stepCou
2a00: 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  nt;..        }..
2a10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
2a20: 76 61 74 65 20 69 6e 74 20 50 72 69 76 61 74 65  vate int Private
2a30: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
2a40: 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
2a50: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
2a60: 66 69 65 6c 64 43 6f 75 6e 74 3b 20 7d 0d 0a 20  fieldCount; }.. 
2a70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
2a80: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
2a90: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
2aa0: 75 6d 62 65 72 20 6f 66 20 76 69 73 69 62 6c 65  umber of visible
2ab0: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
2ac0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
2ad0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2ae0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
2af0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 69   override int Vi
2b00: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 0d  sibleFieldCount.
2b10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2b20: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2b30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
2b40: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68  d();..        Ch
2b50: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20  eckClosed();..  
2b60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 72 69        return Pri
2b70: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
2b80: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 7d 0d  Count;..      }.
2b90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2ba0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2bb0: 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
2bc0: 20 69 73 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   is used to make
2bd0: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
2be0: 20 73 65 74 20 69 73 20 6f 70 65 6e 20 61 6e 64   set is open and
2bf0: 20 61 20 72 6f 77 20 69 73 20 63 75 72 72 65 6e   a row is curren
2c00: 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a  tly available...
2c10: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2c20: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
2c30: 76 6f 69 64 20 56 65 72 69 66 79 46 6f 72 47 65  void VerifyForGe
2c40: 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t()..    {..    
2c50: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
2c60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2c70: 6b 56 61 6c 69 64 52 6f 77 28 29 3b 0d 0a 20 20  kValidRow();..  
2c80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2c90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2ca0: 2f 20 53 51 4c 69 74 65 20 69 73 20 69 6e 68 65  / SQLite is inhe
2cb0: 72 65 6e 74 6c 79 20 75 6e 2d 74 79 70 65 64 2e  rently un-typed.
2cc0: 20 20 41 6c 6c 20 64 61 74 61 74 79 70 65 73 20    All datatypes 
2cd0: 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20 6e 61  in SQLite are na
2ce0: 74 69 76 65 6c 79 20 73 74 72 69 6e 67 73 2e 20  tively strings. 
2cf0: 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   The definition 
2d00: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  of the columns o
2d10: 66 20 61 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  f a table..    /
2d20: 2f 2f 20 61 6e 64 20 74 68 65 20 61 66 66 69 6e  // and the affin
2d30: 69 74 79 20 6f 66 20 72 65 74 75 72 6e 65 64 20  ity of returned 
2d40: 74 79 70 65 73 20 61 72 65 20 61 6c 6c 20 77 65  types are all we
2d50: 20 68 61 76 65 20 74 6f 20 67 6f 20 6f 6e 20 74   have to go on t
2d60: 6f 20 74 79 70 65 2d 72 65 73 74 72 69 63 74 20  o type-restrict 
2d70: 64 61 74 61 20 69 6e 20 74 68 65 20 72 65 61 64  data in the read
2d80: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 0d 0a 20 20  er...    ///..  
2d90: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
2da0: 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ion attempts to 
2db0: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
2dc0: 74 79 70 65 20 6f 66 20 64 61 74 61 20 62 65 69  type of data bei
2dd0: 6e 67 20 72 65 71 75 65 73 74 65 64 20 6f 66 20  ng requested of 
2de0: 61 20 63 6f 6c 75 6d 6e 20 6d 61 74 63 68 65 73  a column matches
2df0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
2e00: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 6e   the column.  In
2e10: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63 61  ..    /// the ca
2e20: 73 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  se of columns th
2e30: 61 74 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  at are not backe
2e40: 64 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 64  d into a table d
2e50: 65 66 69 6e 69 74 69 6f 6e 2c 20 77 65 20 61 74  efinition, we at
2e60: 74 65 6d 70 74 20 74 6f 20 6d 61 74 63 68 20 75  tempt to match u
2e70: 70 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  p the affinity o
2e80: 66 20 61 20 63 6f 6c 75 6d 6e 20 28 69 6e 74 2c  f a column (int,
2e90: 20 64 6f 75 62 6c 65 2c 20 73 74 72 69 6e 67 20   double, string 
2ea0: 6f 72 20 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f  or blob)..    //
2eb0: 2f 20 74 6f 20 61 20 73 65 74 20 6f 66 20 6b 6e  / to a set of kn
2ec0: 6f 77 6e 20 74 79 70 65 73 20 74 68 61 74 20 63  own types that c
2ed0: 6c 6f 73 65 6c 79 20 6d 61 74 63 68 20 74 68 61  losely match tha
2ee0: 74 20 61 66 66 69 6e 69 74 79 2e 20 20 49 74 27  t affinity.  It'
2ef0: 73 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 73  s not an exact s
2f00: 63 69 65 6e 63 65 2c 20 62 75 74 20 69 74 73 20  cience, but its 
2f10: 74 68 65 20 62 65 73 74 20 77 65 20 63 61 6e 20  the best we can 
2f20: 64 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  do...    /// </s
2f30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2f40: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2f50: 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f  /// This functio
2f60: 6e 20 74 68 72 6f 77 73 20 61 6e 20 49 6e 76 61  n throws an Inva
2f70: 6c 69 64 54 79 70 65 43 61 73 74 28 29 20 65 78  lidTypeCast() ex
2f80: 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 72  ception if the r
2f90: 65 71 75 65 73 74 65 64 20 74 79 70 65 20 64 6f  equested type do
2fa0: 65 73 6e 27 74 20 6d 61 74 63 68 20 74 68 65 20  esn't match the 
2fb0: 63 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e 69 74  column's definit
2fc0: 69 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74 79 2e  ion or affinity.
2fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
2fe0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  rns>..    /// <p
2ff0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
3000: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
3010: 6f 6c 75 6d 6e 20 74 6f 20 74 79 70 65 2d 63 68  olumn to type-ch
3020: 65 63 6b 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eck</param>..   
3030: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3040: 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
3050: 77 65 20 77 61 6e 74 20 74 6f 20 67 65 74 20 6f  we want to get o
3060: 75 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ut of the column
3070: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 72  </param>..    pr
3080: 69 76 61 74 65 20 54 79 70 65 41 66 66 69 6e 69  ivate TypeAffini
3090: 74 79 20 56 65 72 69 66 79 54 79 70 65 28 69 6e  ty VerifyType(in
30a0: 74 20 69 2c 20 44 62 54 79 70 65 20 74 79 70 29  t i, DbType typ)
30b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
30c0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66   TypeAffinity af
30d0: 66 69 6e 69 74 79 20 3d 20 47 65 74 53 51 4c 69  finity = GetSQLi
30e0: 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 69  teType(_flags, i
30f0: 29 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 0d 0a 20  ).Affinity;.... 
3100: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61         switch (a
3110: 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20  ffinity)..      
3120: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3130: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
3140: 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
3150: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
3160: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74  yp == DbType.Int
3170: 36 34 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  64) return affin
3180: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3190: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
31a0: 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29 20 72   DbType.Int32) r
31b0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
31c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31d0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
31e0: 70 65 2e 49 6e 74 31 36 29 20 72 65 74 75 72 6e  pe.Int16) return
31f0: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3200: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3210: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 79  typ == DbType.By
3220: 74 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  te) return affin
3230: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3240: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
3250: 20 44 62 54 79 70 65 2e 53 42 79 74 65 29 20 72   DbType.SByte) r
3260: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3280: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3290: 70 65 2e 42 6f 6f 6c 65 61 6e 29 20 72 65 74 75  pe.Boolean) retu
32a0: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20  rn affinity;..  
32b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
32c0: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
32d0: 44 61 74 65 54 69 6d 65 29 20 72 65 74 75 72 6e  DateTime) return
32e0: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3300: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 6f  typ == DbType.Do
3310: 75 62 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66  uble) return aff
3320: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3330: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3340: 3d 3d 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65  == DbType.Single
3350: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
3360: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
3370: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
3380: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72  bType.Decimal) r
3390: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
33a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33b0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
33c0: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
33d0: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a  finity.Double:..
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f0: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3400: 65 2e 44 6f 75 62 6c 65 29 20 72 65 74 75 72 6e  e.Double) return
3410: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3420: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3430: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 69  typ == DbType.Si
3440: 6e 67 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66  ngle) return aff
3450: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3460: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3470: 3d 3d 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61  == DbType.Decima
3480: 6c 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  l) return affini
3490: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
34a0: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
34b0: 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29  DbType.DateTime)
34c0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
34d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
34e0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
34f0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
3500: 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0d 0a  Affinity.Text:..
3510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3520: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3530: 65 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e  e.String) return
3540: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3550: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3560: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 47 75  typ == DbType.Gu
3570: 69 64 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  id) return affin
3580: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3590: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
35a0: 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65   DbType.DateTime
35b0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
35c0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
35d0: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
35e0: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72  bType.Decimal) r
35f0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3610: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
3620: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
3630: 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
3640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
3650: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
3660: 47 75 69 64 29 20 72 65 74 75 72 6e 20 61 66 66  Guid) return aff
3670: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3680: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3690: 3d 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79  == DbType.Binary
36a0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
36b0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
36c0: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
36d0: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 20 72 65  bType.String) re
36e0: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a  turn affinity;..
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3700: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
3710: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 68 72  }....        thr
3720: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 43 61  ow new InvalidCa
3730: 73 74 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  stException();..
3740: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
3750: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3760: 2f 2f 2f 20 49 6e 76 6f 6b 65 73 20 74 68 65 20  /// Invokes the 
3770: 64 61 74 61 20 72 65 61 64 65 72 20 76 61 6c 75  data reader valu
3780: 65 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 66 69  e callback confi
3790: 67 75 72 65 64 20 66 6f 72 20 74 68 65 20 64 61  gured for the da
37a0: 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20  tabase..    /// 
37b0: 74 79 70 65 20 6e 61 6d 65 20 61 73 73 6f 63 69  type name associ
37c0: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70  ated with the sp
37d0: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 20  ecified column. 
37e0: 20 49 66 20 6e 6f 20 64 61 74 61 20 72 65 61 64   If no data read
37f0: 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75  er..    /// valu
3800: 65 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 61 76  e callback is av
3810: 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
3820: 64 61 74 61 62 61 73 65 20 74 79 70 65 20 6e 61  database type na
3830: 6d 65 2c 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d  me, do nothing..
3840: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3850: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
3860: 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22  ram name="index"
3870: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 69  >..    /// The i
3880: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
3890: 6d 6e 20 62 65 69 6e 67 20 72 65 61 64 2e 0d 0a  mn being read...
38a0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
38b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
38c0: 20 6e 61 6d 65 3d 22 65 76 65 6e 74 41 72 67 73   name="eventArgs
38d0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
38e0: 65 78 74 72 61 20 65 76 65 6e 74 20 64 61 74 61  extra event data
38f0: 20 74 6f 20 70 61 73 73 20 69 6e 74 6f 20 74 68   to pass into th
3900: 65 20 63 61 6c 6c 62 61 63 6b 2e 0d 0a 20 20 20  e callback...   
3910: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
3920: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3930: 6d 65 3d 22 63 6f 6d 70 6c 65 74 65 22 3e 0d 0a  me="complete">..
3940: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
3950: 20 69 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   if the default 
3960: 68 61 6e 64 6c 69 6e 67 20 66 6f 72 20 74 68 65  handling for the
3970: 20 64 61 74 61 20 72 65 61 64 65 72 20 63 61 6c   data reader cal
3980: 6c 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20  l should be..   
3990: 20 2f 2f 2f 20 73 6b 69 70 70 65 64 2e 20 20 49   /// skipped.  I
39a0: 66 20 74 68 69 73 20 69 73 20 73 65 74 20 74 6f  f this is set to
39b0: 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 74 68   non-zero and th
39c0: 65 20 6e 65 63 65 73 73 61 72 79 20 72 65 74 75  e necessary retu
39d0: 72 6e 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f  rn value..    //
39e0: 2f 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  / is unavailable
39f0: 20 6f 72 20 75 6e 73 75 69 74 61 62 6c 65 2c 20   or unsuitable, 
3a00: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 69 6c  an exception wil
3a10: 6c 20 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20  l be thrown...  
3a20: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
3a30: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
3a40: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
3a50: 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20  Callback(..     
3a60: 20 20 20 69 6e 74 20 69 6e 64 65 78 2c 0d 0a 20     int index,.. 
3a70: 20 20 20 20 20 20 20 53 51 4c 69 74 65 52 65 61         SQLiteRea
3a80: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 20  dValueEventArgs 
3a90: 65 76 65 6e 74 41 72 67 73 2c 0d 0a 20 20 20 20  eventArgs,..    
3aa0: 20 20 20 20 6f 75 74 20 62 6f 6f 6c 20 63 6f 6d      out bool com
3ab0: 70 6c 65 74 65 0d 0a 20 20 20 20 20 20 20 20 29  plete..        )
3ac0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
3ad0: 20 63 6f 6d 70 6c 65 74 65 20 3d 20 66 61 6c 73   complete = fals
3ae0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 6c 61  e;..        _fla
3af0: 67 73 20 26 3d 20 7e 53 51 4c 69 74 65 43 6f 6e  gs &= ~SQLiteCon
3b00: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
3b10: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
3b20: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 3b 0d 0a 0d  lueCallbacks;...
3b30: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
3b40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3b50: 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
3b60: 4e 61 6d 65 20 3d 20 47 65 74 44 61 74 61 54 79  Name = GetDataTy
3b70: 70 65 4e 61 6d 65 28 69 6e 64 65 78 29 3b 0d 0a  peName(index);..
3b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
3b90: 20 28 74 79 70 65 4e 61 6d 65 20 3d 3d 20 6e 75   (typeName == nu
3ba0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3bb0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
3bd0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
3be0: 6e 65 63 74 69 6f 6e 20 3d 20 47 65 74 43 6f 6e  nection = GetCon
3bf0: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 3b 0d 0a  nection(this);..
3c00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
3c10: 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 3d 20   (connection == 
3c20: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3c30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
3c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
3c50: 4c 69 74 65 54 79 70 65 43 61 6c 6c 62 61 63 6b  LiteTypeCallback
3c60: 73 20 63 61 6c 6c 62 61 63 6b 73 3b 0d 0a 0d 0a  s callbacks;....
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3c80: 21 63 6f 6e 6e 65 63 74 69 6f 6e 2e 54 72 79 47  !connection.TryG
3c90: 65 74 54 79 70 65 43 61 6c 6c 62 61 63 6b 73 28  etTypeCallbacks(
3ca0: 74 79 70 65 4e 61 6d 65 2c 20 6f 75 74 20 63 61  typeName, out ca
3cb0: 6c 6c 62 61 63 6b 73 29 20 7c 7c 0d 0a 20 20 20  llbacks) ||..   
3cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61               (ca
3cd0: 6c 6c 62 61 63 6b 73 20 3d 3d 20 6e 75 6c 6c 29  llbacks == null)
3ce0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3d00: 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20    return;..     
3d10: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3d20: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 52 65          SQLiteRe
3d30: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 20  adValueCallback 
3d40: 63 61 6c 6c 62 61 63 6b 20 3d 20 63 61 6c 6c 62  callback = callb
3d50: 61 63 6b 73 2e 52 65 61 64 56 61 6c 75 65 43 61  acks.ReadValueCa
3d60: 6c 6c 62 61 63 6b 3b 0d 0a 0d 0a 20 20 20 20 20  llback;....     
3d70: 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62         if (callb
3d80: 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ack == null)..  
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3da0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
3db0: 20 20 20 20 20 6f 62 6a 65 63 74 20 75 73 65 72       object user
3dc0: 44 61 74 61 20 3d 20 63 61 6c 6c 62 61 63 6b 73  Data = callbacks
3dd0: 2e 52 65 61 64 56 61 6c 75 65 55 73 65 72 44 61  .ReadValueUserDa
3de0: 74 61 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ta;....         
3df0: 20 20 20 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20     callback(..  
3e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 61                _a
3e10: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
3e20: 73 71 6c 2c 20 74 68 69 73 2c 20 5f 66 6c 61 67  sql, this, _flag
3e30: 73 2c 20 65 76 65 6e 74 41 72 67 73 2c 20 69 6e  s, eventArgs, in
3e40: 64 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  dex,..          
3e50: 20 20 20 20 20 20 75 73 65 72 44 61 74 61 2c 20        userData, 
3e60: 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 20 2f  out complete); /
3e70: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
3e80: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
3e90: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
3ea0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  {..            _
3eb0: 66 6c 61 67 73 20 7c 3d 20 53 51 4c 69 74 65 43  flags |= SQLiteC
3ec0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
3ed0: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
3ee0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 3b 0d  ValueCallbacks;.
3ef0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
3f00: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
3f10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3f20: 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f  Retrieves the co
3f30: 6c 75 6d 6e 20 61 73 20 61 20 62 6f 6f 6c 65 61  lumn as a boolea
3f40: 6e 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f  n value..    ///
3f50: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3f60: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3f70: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
3f80: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
3f90: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
3fa0: 72 65 74 75 72 6e 73 3e 62 6f 6f 6c 3c 2f 72 65  returns>bool</re
3fb0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
3fc0: 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
3fd0: 20 47 65 74 42 6f 6f 6c 65 61 6e 28 69 6e 74 20   GetBoolean(int 
3fe0: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
3ff0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
4000: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
4010: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
4020: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
4030: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
4040: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
4050: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
4060: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
4070: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
4080: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
4090: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
40a0: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
40b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
40c0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
40d0: 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77  alue value = new
40e0: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
40f0: 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20  rValue();..     
4100: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70         bool comp
4110: 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lete;....       
4120: 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56       InvokeReadV
4130: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20  alueCallback(i, 
4140: 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61  new SQLiteReadVa
4150: 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  lueEventArgs(.. 
4160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
4170: 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74  ull, value), out
4180: 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20   complete);.... 
4190: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
41a0: 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20  omplete)..      
41b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
41c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
41d0: 75 65 2e 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 20  ue.BooleanValue 
41e0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
4200: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
4210: 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67  ception("missing
4220: 20 62 6f 6f 6c 65 61 6e 20 72 65 74 75 72 6e 20   boolean return 
4230: 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  value");....    
4240: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4250: 72 6e 20 28 62 6f 6f 6c 29 76 61 6c 75 65 2e 42  rn (bool)value.B
4260: 6f 6f 6c 65 61 6e 56 61 6c 75 65 3b 0d 0a 20 20  ooleanValue;..  
4270: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4280: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4290: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
42a0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
42b0: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
42c0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
42d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
42e0: 79 49 6e 66 6f 2e 47 65 74 42 6f 6f 6c 65 61 6e  yInfo.GetBoolean
42f0: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
4300: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d  bleFieldCount);.
4310: 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ...        Verif
4320: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
4330: 42 6f 6f 6c 65 61 6e 29 3b 0d 0a 20 20 20 20 20  Boolean);..     
4340: 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72     return Conver
4350: 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28 47 65 74 56  t.ToBoolean(GetV
4360: 61 6c 75 65 28 69 29 2c 20 43 75 6c 74 75 72 65  alue(i), Culture
4370: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
4380: 75 72 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ure);..    }....
4390: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
43a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
43b0: 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  eves the column 
43c0: 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  as a single byte
43d0: 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20   value..    /// 
43e0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
43f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
4400: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
4410: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
4420: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
4430: 65 74 75 72 6e 73 3e 62 79 74 65 3c 2f 72 65 74  eturns>byte</ret
4440: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
4450: 63 20 6f 76 65 72 72 69 64 65 20 62 79 74 65 20  c override byte 
4460: 47 65 74 42 79 74 65 28 69 6e 74 20 69 29 0d 0a  GetByte(int i)..
4470: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
4480: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
4490: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46  .        VerifyF
44a0: 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  orGet();....    
44b0: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
44c0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
44d0: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
44e0: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
44f0: 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69  llbacks) == SQLi
4500: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
4510: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
4520: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
4530: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
4540: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
4550: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
4560: 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c   value = new SQL
4570: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
4580: 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ue();..         
4590: 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65     bool complete
45a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
45b0: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
45c0: 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20  Callback(i, new 
45d0: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45  SQLiteReadValueE
45e0: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
45f0: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
4600: 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d   value), out com
4610: 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  plete);....     
4620: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c         if (compl
4630: 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ete)..          
4640: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4650: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 42       if (value.B
4660: 79 74 65 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  yteValue == null
4670: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4680: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
4690: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
46a0: 28 22 6d 69 73 73 69 6e 67 20 62 79 74 65 20 72  ("missing byte r
46b0: 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a  eturn value");..
46c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
46d0: 20 20 72 65 74 75 72 6e 20 28 62 79 74 65 29 76    return (byte)v
46e0: 61 6c 75 65 2e 42 79 74 65 56 61 6c 75 65 3b 0d  alue.ByteValue;.
46f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4700: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4710: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
4720: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
4730: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
4740: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
4750: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4760: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42 79 74 65  _keyInfo.GetByte
4770: 28 69 20 2d 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 29 3b 0d  bleFieldCount);.
4790: 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ...        Verif
47a0: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
47b0: 42 79 74 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Byte);..        
47c0: 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54  return Convert.T
47d0: 6f 42 79 74 65 28 5f 61 63 74 69 76 65 53 74 61  oByte(_activeSta
47e0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49  tement._sql.GetI
47f0: 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74 61 74  nt32(_activeStat
4800: 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20  ement, i));..   
4810: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
4820: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4830: 20 52 65 74 72 69 65 76 65 73 20 61 20 63 6f 6c   Retrieves a col
4840: 75 6d 6e 20 61 73 20 61 6e 20 61 72 72 61 79 20  umn as an array 
4850: 6f 66 20 62 79 74 65 73 20 28 62 6c 6f 62 29 0d  of bytes (blob).
4860: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
4870: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
4880: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
4890: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
48a0: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
48b0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
48c0: 6d 65 3d 22 66 69 65 6c 64 4f 66 66 73 65 74 22  me="fieldOffset"
48d0: 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20  >The zero-based 
48e0: 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20 74  index of where t
48f0: 6f 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67 20  o begin reading 
4900: 74 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d 3e  the data</param>
4910: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
4920: 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 22 3e 54   name="buffer">T
4930: 68 65 20 62 75 66 66 65 72 20 74 6f 20 77 72 69  he buffer to wri
4940: 74 65 20 74 68 65 20 62 79 74 65 73 20 69 6e 74  te the bytes int
4950: 6f 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  o</param>..    /
4960: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
4970: 62 75 66 66 65 72 6f 66 66 73 65 74 22 3e 54 68  bufferoffset">Th
4980: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64  e zero-based ind
4990: 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62  ex of where to b
49a0: 65 67 69 6e 20 77 72 69 74 69 6e 67 20 69 6e 74  egin writing int
49b0: 6f 20 74 68 65 20 61 72 72 61 79 3c 2f 70 61 72  o the array</par
49c0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
49d0: 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68  ram name="length
49e0: 22 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  ">The number of 
49f0: 62 79 74 65 73 20 74 6f 20 72 65 74 72 69 65 76  bytes to retriev
4a00: 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  e</param>..    /
4a10: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
4a20: 61 63 74 75 61 6c 20 6e 75 6d 62 65 72 20 6f 66  actual number of
4a30: 20 62 79 74 65 73 20 77 72 69 74 74 65 6e 20 69   bytes written i
4a40: 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c 2f 72  nto the array</r
4a50: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
4a60: 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20   <remarks>..    
4a70: 2f 2f 2f 20 54 6f 20 64 65 74 65 72 6d 69 6e 65  /// To determine
4a80: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
4a90: 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75  ytes in the colu
4aa0: 6d 6e 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c 20  mn, pass a null 
4ab0: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62 75  value for the bu
4ac0: 66 66 65 72 2e 20 20 54 68 65 20 74 6f 74 61 6c  ffer.  The total
4ad0: 20 6c 65 6e 67 74 68 20 77 69 6c 6c 20 62 65 20   length will be 
4ae0: 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f  returned...    /
4af0: 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20  // </remarks>.. 
4b00: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
4b10: 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73  de long GetBytes
4b20: 28 69 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65  (int i, long fie
4b30: 6c 64 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d  ldOffset, byte[]
4b40: 20 62 75 66 66 65 72 2c 20 69 6e 74 20 62 75 66   buffer, int buf
4b50: 66 65 72 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c  feroffset, int l
4b60: 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20  ength)..    {.. 
4b70: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
4b80: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
4b90: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
4ba0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
4bb0: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
4bc0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
4bd0: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
4be0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
4bf0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
4c00: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
4c10: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
4c20: 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20  Callbacks)..    
4c30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4c40: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
4c50: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
4c60: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
4c70: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
4c80: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
4c90: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
4ca0: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
4cb0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
4cc0: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
4cd0: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
4ce0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4cf0: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61     new SQLiteRea
4d00: 64 41 72 72 61 79 45 76 65 6e 74 41 72 67 73 28  dArrayEventArgs(
4d10: 66 69 65 6c 64 4f 66 66 73 65 74 2c 20 62 75 66  fieldOffset, buf
4d20: 66 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fer,..          
4d30: 20 20 20 20 20 20 20 20 20 20 62 75 66 66 65 72            buffer
4d40: 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 2c  offset, length),
4d50: 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d   value), out com
4d60: 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  plete);....     
4d70: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c         if (compl
4d80: 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ete)..          
4d90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4da0: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65       byte[] byte
4db0: 73 20 3d 20 76 61 6c 75 65 2e 42 79 74 65 73 56  s = value.BytesV
4dc0: 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
4dd0: 20 20 20 20 20 20 20 20 20 69 66 20 28 62 79 74           if (byt
4de0: 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es != null)..   
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
4e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e10: 20 20 20 20 41 72 72 61 79 2e 43 6f 70 79 28 62      Array.Copy(b
4e20: 79 74 65 73 2c 20 30 2c 20 62 75 66 66 65 72 2c  ytes, 0, buffer,
4e30: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c   bufferoffset, l
4e40: 65 6e 67 74 68 29 3b 0d 0a 0d 0a 23 69 66 20 21  ength);....#if !
4e50: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
4e60: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
4e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4e80: 65 74 75 72 6e 20 62 79 74 65 73 2e 4c 6f 6e 67  eturn bytes.Long
4e90: 4c 65 6e 67 74 68 3b 0d 0a 23 65 6c 73 65 0d 0a  Length;..#else..
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4eb0: 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65 73      return bytes
4ec0: 2e 4c 65 6e 67 74 68 3b 0d 0a 23 65 6e 64 69 66  .Length;..#endif
4ed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ee0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
4ef0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
4f00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f20: 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20    return -1;..  
4f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4f50: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4f60: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
4f70: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
4f80: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
4f90: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
4fa0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4fb0: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42 79 74 65  _keyInfo.GetByte
4fc0: 73 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  s(i - PrivateVis
4fd0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20  ibleFieldCount, 
4fe0: 66 69 65 6c 64 4f 66 66 73 65 74 2c 20 62 75 66  fieldOffset, buf
4ff0: 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65  fer, bufferoffse
5000: 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20  t, length);.... 
5010: 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70         VerifyTyp
5020: 65 28 69 2c 20 44 62 54 79 70 65 2e 42 69 6e 61  e(i, DbType.Bina
5030: 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  ry);..        re
5040: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
5050: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79  ement._sql.GetBy
5060: 74 65 73 28 5f 61 63 74 69 76 65 53 74 61 74 65  tes(_activeState
5070: 6d 65 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69  ment, i, (int)fi
5080: 65 6c 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65  eldOffset, buffe
5090: 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c  r, bufferoffset,
50a0: 20 6c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d   length);..    }
50b0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
50c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
50d0: 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d  eturns the colum
50e0: 6e 20 61 73 20 61 20 73 69 6e 67 6c 65 20 63 68  n as a single ch
50f0: 61 72 61 63 74 65 72 0d 0a 20 20 20 20 2f 2f 2f  aracter..    ///
5100: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
5110: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
5120: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
5130: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
5140: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5150: 72 65 74 75 72 6e 73 3e 63 68 61 72 3c 2f 72 65  returns>char</re
5160: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
5170: 69 63 20 6f 76 65 72 72 69 64 65 20 63 68 61 72  ic override char
5180: 20 47 65 74 43 68 61 72 28 69 6e 74 20 69 29 0d   GetChar(int i).
5190: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
51a0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
51b0: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
51c0: 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  ForGet();....   
51d0: 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73       if ((_flags
51e0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
51f0: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
5200: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
5210: 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c  allbacks) == SQL
5220: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
5230: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
5240: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
5250: 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ks)..        {..
5260: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
5270: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
5280: 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51  e value = new SQ
5290: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
52a0: 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue();..        
52b0: 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74      bool complet
52c0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
52d0: 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75    InvokeReadValu
52e0: 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77  eCallback(i, new
52f0: 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65   SQLiteReadValue
5300: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
5310: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
5320: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
5330: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
5340: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
5350: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
5360: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5370: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
5380: 43 68 61 72 56 61 6c 75 65 20 3d 3d 20 6e 75 6c  CharValue == nul
5390: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
53a0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
53b0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
53c0: 6e 28 22 6d 69 73 73 69 6e 67 20 63 68 61 72 61  n("missing chara
53d0: 63 74 65 72 20 72 65 74 75 72 6e 20 76 61 6c 75  cter return valu
53e0: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
53f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
5400: 63 68 61 72 29 76 61 6c 75 65 2e 43 68 61 72 56  char)value.CharV
5410: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
5420: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
5430: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
5440: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
5450: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
5460: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
5470: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
5480: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
5490: 65 74 43 68 61 72 28 69 20 2d 20 50 72 69 76 61  etChar(i - Priva
54a0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
54b0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
54c0: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
54d0: 62 54 79 70 65 2e 53 42 79 74 65 29 3b 0d 0a 20  bType.SByte);.. 
54e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f         return Co
54f0: 6e 76 65 72 74 2e 54 6f 43 68 61 72 28 5f 61 63  nvert.ToChar(_ac
5500: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
5510: 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74  ql.GetInt32(_act
5520: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
5530: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
5540: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5550: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
5560: 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e  s a column as an
5570: 20 61 72 72 61 79 20 6f 66 20 63 68 61 72 73 20   array of chars 
5580: 28 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f 2f 20  (blob)..    /// 
5590: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
55a0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
55b0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
55c0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
55d0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
55e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 65 6c 64  aram name="field
55f0: 6f 66 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f  offset">The zero
5600: 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20  -based index of 
5610: 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e 20 72  where to begin r
5620: 65 61 64 69 6e 67 20 74 68 65 20 64 61 74 61 3c  eading the data<
5630: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
5640: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75   <param name="bu
5650: 66 66 65 72 22 3e 54 68 65 20 62 75 66 66 65 72  ffer">The buffer
5660: 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 63 68   to write the ch
5670: 61 72 61 63 74 65 72 73 20 69 6e 74 6f 3c 2f 70  aracters into</p
5680: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5690: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66  param name="buff
56a0: 65 72 6f 66 66 73 65 74 22 3e 54 68 65 20 7a 65  eroffset">The ze
56b0: 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f  ro-based index o
56c0: 66 20 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e  f where to begin
56d0: 20 77 72 69 74 69 6e 67 20 69 6e 74 6f 20 74 68   writing into th
56e0: 65 20 61 72 72 61 79 3c 2f 70 61 72 61 6d 3e 0d  e array</param>.
56f0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
5700: 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 54 68  name="length">Th
5710: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
5720: 73 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  s to retrieve</p
5730: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5740: 72 65 74 75 72 6e 73 3e 54 68 65 20 61 63 74 75  returns>The actu
5750: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61  al number of cha
5760: 72 61 63 74 65 72 73 20 77 72 69 74 74 65 6e 20  racters written 
5770: 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c 2f  into the array</
5780: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
5790: 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20  / <remarks>..   
57a0: 20 2f 2f 2f 20 54 6f 20 64 65 74 65 72 6d 69 6e   /// To determin
57b0: 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
57c0: 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
57d0: 65 20 63 6f 6c 75 6d 6e 2c 20 70 61 73 73 20 61  e column, pass a
57e0: 20 6e 75 6c 6c 20 76 61 6c 75 65 20 66 6f 72 20   null value for 
57f0: 74 68 65 20 62 75 66 66 65 72 2e 20 20 54 68 65  the buffer.  The
5800: 20 74 6f 74 61 6c 20 6c 65 6e 67 74 68 20 77 69   total length wi
5810: 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0d  ll be returned..
5820: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72  .    /// </remar
5830: 6b 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ks>..    public 
5840: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
5850: 74 43 68 61 72 73 28 69 6e 74 20 69 2c 20 6c 6f  tChars(int i, lo
5860: 6e 67 20 66 69 65 6c 64 6f 66 66 73 65 74 2c 20  ng fieldoffset, 
5870: 63 68 61 72 5b 5d 20 62 75 66 66 65 72 2c 20 69  char[] buffer, i
5880: 6e 74 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c  nt bufferoffset,
5890: 20 69 6e 74 20 6c 65 6e 67 74 68 29 0d 0a 20 20   int length)..  
58a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
58b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
58c0: 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72         VerifyFor
58d0: 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Get();....      
58e0: 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20    if ((_flags & 
58f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5900: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
5910: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
5920: 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65  backs) == SQLite
5930: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5940: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
5950: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
5960: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5970: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44           SQLiteD
5980: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76  ataReaderValue v
5990: 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  alue = new SQLit
59a0: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
59b0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
59c0: 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d   bool complete;.
59d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
59e0: 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61  nvokeReadValueCa
59f0: 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51  llback(i, new SQ
5a00: 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65  LiteReadValueEve
5a10: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
5a20: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
5a30: 69 74 65 52 65 61 64 41 72 72 61 79 45 76 65 6e  iteReadArrayEven
5a40: 74 41 72 67 73 28 66 69 65 6c 64 6f 66 66 73 65  tArgs(fieldoffse
5a50: 74 2c 20 62 75 66 66 65 72 2c 0d 0a 20 20 20 20  t, buffer,..    
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a70: 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65  bufferoffset, le
5a80: 6e 67 74 68 29 2c 20 76 61 6c 75 65 29 2c 20 6f  ngth), value), o
5a90: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
5aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
5ab0: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
5ac0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5ad0: 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 5b             char[
5ae0: 5d 20 63 68 61 72 73 20 3d 20 76 61 6c 75 65 2e  ] chars = value.
5af0: 43 68 61 72 73 56 61 6c 75 65 3b 0d 0a 0d 0a 20  CharsValue;.... 
5b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5b10: 66 20 28 63 68 61 72 73 20 21 3d 20 6e 75 6c 6c  f (chars != null
5b20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5b30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5b40: 20 20 20 20 20 20 20 20 20 20 41 72 72 61 79 2e            Array.
5b50: 43 6f 70 79 28 63 68 61 72 73 2c 20 30 2c 20 62  Copy(chars, 0, b
5b60: 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66  uffer, bufferoff
5b70: 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d  set, length);...
5b80: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
5b90: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
5ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5bb0: 20 20 20 20 20 72 65 74 75 72 6e 20 63 68 61 72       return char
5bc0: 73 2e 4c 6f 6e 67 4c 65 6e 67 74 68 3b 0d 0a 23  s.LongLength;..#
5bd0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
5be0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5bf0: 20 63 68 61 72 73 2e 4c 65 6e 67 74 68 3b 0d 0a   chars.Length;..
5c00: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
5c10: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5c20: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
5c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5c40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5c50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d          return -
5c60: 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
5c70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5c80: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
5c90: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
5ca0: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
5cb0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
5cc0: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
5cd0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
5ce0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
5cf0: 65 74 43 68 61 72 73 28 69 20 2d 20 50 72 69 76  etChars(i - Priv
5d00: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
5d10: 6f 75 6e 74 2c 20 66 69 65 6c 64 6f 66 66 73 65  ount, fieldoffse
5d20: 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65  t, buffer, buffe
5d30: 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29  roffset, length)
5d40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
5d50: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
5d60: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5d70: 2e 4e 6f 56 65 72 69 66 79 54 65 78 74 41 66 66  .NoVerifyTextAff
5d80: 69 6e 69 74 79 29 20 21 3d 20 53 51 4c 69 74 65  inity) != SQLite
5d90: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5da0: 4e 6f 56 65 72 69 66 79 54 65 78 74 41 66 66 69  NoVerifyTextAffi
5db0: 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 20  nity)..         
5dc0: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
5dd0: 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 3b   DbType.String);
5de0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
5df0: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
5e00: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 43 68 61 72  ent._sql.GetChar
5e10: 73 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  s(_activeStateme
5e20: 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69 65 6c  nt, i, (int)fiel
5e30: 64 6f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c  doffset, buffer,
5e40: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c   bufferoffset, l
5e50: 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ength);..    }..
5e60: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5e70: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
5e80: 72 69 65 76 65 73 20 74 68 65 20 6e 61 6d 65 20  rieves the name 
5e90: 6f 66 20 74 68 65 20 62 61 63 6b 2d 65 6e 64 20  of the back-end 
5ea0: 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20  datatype of the 
5eb0: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20  column..    /// 
5ec0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
5ed0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5ee0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
5ef0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
5f00: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
5f10: 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72  eturns>string</r
5f20: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
5f30: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
5f40: 69 6e 67 20 47 65 74 44 61 74 61 54 79 70 65 4e  ing GetDataTypeN
5f50: 61 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ame(int i)..    
5f60: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
5f70: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
5f80: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
5f90: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
5fa0: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
5fb0: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
5fc0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5fd0: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 61  n _keyInfo.GetDa
5fe0: 74 61 54 79 70 65 4e 61 6d 65 28 69 20 2d 20 50  taTypeName(i - P
5ff0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
6000: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
6010: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
6020: 79 20 61 66 66 69 6e 20 3d 20 54 79 70 65 41 66  y affin = TypeAf
6030: 66 69 6e 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c  finity.Uninitial
6040: 69 7a 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 72  ized;..        r
6050: 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61  eturn _activeSta
6060: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75  tement._sql.Colu
6070: 6d 6e 54 79 70 65 28 5f 61 63 74 69 76 65 53 74  mnType(_activeSt
6080: 61 74 65 6d 65 6e 74 2c 20 69 2c 20 72 65 66 20  atement, i, ref 
6090: 61 66 66 69 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a  affin);..    }..
60a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
60b0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
60c0: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 75 6d 6e  rieve the column
60d0: 20 61 73 20 61 20 64 61 74 65 2f 74 69 6d 65 20   as a date/time 
60e0: 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  value..    /// <
60f0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
6100: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
6110: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
6120: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
6130: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
6140: 74 75 72 6e 73 3e 44 61 74 65 54 69 6d 65 3c 2f  turns>DateTime</
6150: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
6160: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 44 61  blic override Da
6170: 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54 69  teTime GetDateTi
6180: 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  me(int i)..    {
6190: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
61a0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
61b0: 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74      VerifyForGet
61c0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
61d0: 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  f ((_flags & SQL
61e0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
61f0: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
6200: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
6210: 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  ks) == SQLiteCon
6220: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
6230: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
6240: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20  lueCallbacks).. 
6250: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6260: 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61        SQLiteData
6270: 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75  ReaderValue valu
6280: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61  e = new SQLiteDa
6290: 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b  taReaderValue();
62a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
62b0: 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a  ol complete;....
62c0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f              Invo
62d0: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
62e0: 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74  ack(i, new SQLit
62f0: 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41  eReadValueEventA
6300: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
6310: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 76 61 6c 75        null, valu
6320: 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  e), out complete
6330: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6340: 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d    if (complete).
6350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6370: 69 66 20 28 76 61 6c 75 65 2e 44 61 74 65 54 69  if (value.DateTi
6380: 6d 65 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29  meValue == null)
6390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
63a0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
63b0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
63c0: 22 6d 69 73 73 69 6e 67 20 64 61 74 65 2f 74 69  "missing date/ti
63d0: 6d 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22  me return value"
63e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
63f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 44 61        return (Da
6400: 74 65 54 69 6d 65 29 76 61 6c 75 65 2e 44 61 74  teTime)value.Dat
6410: 65 54 69 6d 65 56 61 6c 75 65 3b 0d 0a 20 20 20  eTimeValue;..   
6420: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6430: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6440: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
6450: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
6460: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
6470: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6480: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
6490: 49 6e 66 6f 2e 47 65 74 44 61 74 65 54 69 6d 65  Info.GetDateTime
64a0: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
64b0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d  bleFieldCount);.
64c0: 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ...        Verif
64d0: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
64e0: 44 61 74 65 54 69 6d 65 29 3b 0d 0a 20 20 20 20  DateTime);..    
64f0: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
6500: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
6510: 2e 47 65 74 44 61 74 65 54 69 6d 65 28 5f 61 63  .GetDateTime(_ac
6520: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
6530: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6540: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6550: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
6560: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61   the column as a
6570: 20 64 65 63 69 6d 61 6c 20 76 61 6c 75 65 0d 0a   decimal value..
6580: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6590: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
65a0: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
65b0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
65c0: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
65d0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 64    /// <returns>d
65e0: 65 63 69 6d 61 6c 3c 2f 72 65 74 75 72 6e 73 3e  ecimal</returns>
65f0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
6600: 72 72 69 64 65 20 64 65 63 69 6d 61 6c 20 47 65  rride decimal Ge
6610: 74 44 65 63 69 6d 61 6c 28 69 6e 74 20 69 29 0d  tDecimal(int i).
6620: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6630: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6640: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
6650: 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  ForGet();....   
6660: 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73       if ((_flags
6670: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
6680: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
6690: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
66a0: 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c  allbacks) == SQL
66b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
66c0: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
66d0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
66e0: 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ks)..        {..
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
6700: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
6710: 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51  e value = new SQ
6720: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
6730: 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue();..        
6740: 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74      bool complet
6750: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
6760: 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75    InvokeReadValu
6770: 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77  eCallback(i, new
6780: 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65   SQLiteReadValue
6790: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
67a0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
67b0: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
67c0: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
67d0: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
67e0: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
67f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6800: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
6810: 44 65 63 69 6d 61 6c 56 61 6c 75 65 20 3d 3d 20  DecimalValue == 
6820: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6830: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
6840: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
6850: 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 64 65  tion("missing de
6860: 63 69 6d 61 6c 20 72 65 74 75 72 6e 20 76 61 6c  cimal return val
6870: 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ue");....       
6880: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6890: 28 64 65 63 69 6d 61 6c 29 76 61 6c 75 65 2e 44  (decimal)value.D
68a0: 65 63 69 6d 61 6c 56 61 6c 75 65 3b 0d 0a 20 20  ecimalValue;..  
68b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
68c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
68d0: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
68e0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
68f0: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
6900: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
6910: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
6920: 79 49 6e 66 6f 2e 47 65 74 44 65 63 69 6d 61 6c  yInfo.GetDecimal
6930: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
6940: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d  bleFieldCount);.
6950: 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ...        Verif
6960: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
6970: 44 65 63 69 6d 61 6c 29 3b 0d 0a 20 20 20 20 20  Decimal);..     
6980: 20 20 20 72 65 74 75 72 6e 20 44 65 63 69 6d 61     return Decima
6990: 6c 2e 50 61 72 73 65 28 5f 61 63 74 69 76 65 53  l.Parse(_activeS
69a0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
69b0: 74 54 65 78 74 28 5f 61 63 74 69 76 65 53 74 61  tText(_activeSta
69c0: 74 65 6d 65 6e 74 2c 20 69 29 2c 20 4e 75 6d 62  tement, i), Numb
69d0: 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f 77 44 65  erStyles.AllowDe
69e0: 63 69 6d 61 6c 50 6f 69 6e 74 20 7c 20 4e 75 6d  cimalPoint | Num
69f0: 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f 77 45  berStyles.AllowE
6a00: 78 70 6f 6e 65 6e 74 20 7c 20 4e 75 6d 62 65 72  xponent | Number
6a10: 53 74 79 6c 65 73 2e 41 6c 6c 6f 77 4c 65 61 64  Styles.AllowLead
6a20: 69 6e 67 53 69 67 6e 2c 20 43 75 6c 74 75 72 65  ingSign, Culture
6a30: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
6a40: 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lture);..    }..
6a50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
6a60: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
6a70: 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  urns the column 
6a80: 61 73 20 61 20 64 6f 75 62 6c 65 0d 0a 20 20 20  as a double..   
6a90: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
6aa0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
6ab0: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
6ac0: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
6ad0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
6ae0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 64 6f 75 62  // <returns>doub
6af0: 6c 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  le</returns>..  
6b00: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
6b10: 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62  e double GetDoub
6b20: 6c 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  le(int i)..    {
6b30: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
6b40: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
6b50: 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74      VerifyForGet
6b60: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
6b70: 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  f ((_flags & SQL
6b80: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6b90: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
6ba0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
6bb0: 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  ks) == SQLiteCon
6bc0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
6bd0: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
6be0: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20  lueCallbacks).. 
6bf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6c00: 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61        SQLiteData
6c10: 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75  ReaderValue valu
6c20: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61  e = new SQLiteDa
6c30: 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b  taReaderValue();
6c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
6c50: 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a  ol complete;....
6c60: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f              Invo
6c70: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
6c80: 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74  ack(i, new SQLit
6c90: 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41  eReadValueEventA
6ca0: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
6cb0: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 76 61 6c 75        null, valu
6cc0: 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  e), out complete
6cd0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6ce0: 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d    if (complete).
6cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d10: 69 66 20 28 76 61 6c 75 65 2e 44 6f 75 62 6c 65  if (value.Double
6d20: 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Value == null)..
6d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d40: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
6d50: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d  LiteException("m
6d60: 69 73 73 69 6e 67 20 64 6f 75 62 6c 65 20 72 65  issing double re
6d70: 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d  turn value");...
6d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6d90: 20 72 65 74 75 72 6e 20 28 64 6f 75 62 6c 65 29   return (double)
6da0: 76 61 6c 75 65 2e 44 6f 75 62 6c 65 56 61 6c 75  value.DoubleValu
6db0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6dc0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
6dd0: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
6de0: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
6df0: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
6e00: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
6e10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6e20: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44  rn _keyInfo.GetD
6e30: 6f 75 62 6c 65 28 69 20 2d 20 50 72 69 76 61 74  ouble(i - Privat
6e40: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
6e50: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
6e60: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
6e70: 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b 0d 0a 20  Type.Double);.. 
6e80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
6e90: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
6ea0: 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f 61  sql.GetDouble(_a
6eb0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
6ec0: 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  i);..    }....  
6ed0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6ee0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
6ef0: 20 74 68 65 20 2e 4e 45 54 20 74 79 70 65 20 6f   the .NET type o
6f00: 66 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e  f a given column
6f10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6f20: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
6f30: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
6f40: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
6f50: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
6f60: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
6f70: 3e 54 79 70 65 3c 2f 72 65 74 75 72 6e 73 3e 0d  >Type</returns>.
6f80: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
6f90: 72 69 64 65 20 54 79 70 65 20 47 65 74 46 69 65  ride Type GetFie
6fa0: 6c 64 54 79 70 65 28 69 6e 74 20 69 29 0d 0a 20  ldType(int i).. 
6fb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
6fc0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
6fd0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
6fe0: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
6ff0: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
7000: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
7010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
7020: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
7030: 74 46 69 65 6c 64 54 79 70 65 28 69 20 2d 20 50  tFieldType(i - P
7040: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
7050: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
7060: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
7070: 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65  teConvert.SQLite
7080: 54 79 70 65 54 6f 54 79 70 65 28 47 65 74 53 51  TypeToType(GetSQ
7090: 4c 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c  LiteType(_flags,
70a0: 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a   i));..    }....
70b0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
70c0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
70d0: 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61  ns a column as a
70e0: 20 66 6c 6f 61 74 20 76 61 6c 75 65 0d 0a 20 20   float value..  
70f0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
7100: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
7110: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
7120: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
7130: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
7140: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 66 6c 6f  /// <returns>flo
7150: 61 74 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  at</returns>..  
7160: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
7170: 65 20 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61 74  e float GetFloat
7180: 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
7190: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
71a0: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
71b0: 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
71c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
71d0: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
71e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
71f0: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
7200: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
7210: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
7220: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
7230: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
7240: 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20  eCallbacks)..   
7250: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7260: 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65      SQLiteDataRe
7270: 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20  aderValue value 
7280: 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61  = new SQLiteData
7290: 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a  ReaderValue();..
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
72b0: 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20   complete;....  
72c0: 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65            Invoke
72d0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
72e0: 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52  k(i, new SQLiteR
72f0: 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67  eadValueEventArg
7300: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
7310: 20 20 20 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29      null, value)
7320: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
7330: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7340: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
7350: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7370: 20 28 76 61 6c 75 65 2e 46 6c 6f 61 74 56 61 6c   (value.FloatVal
7380: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
7390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73a0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
73b0: 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73  eException("miss
73c0: 69 6e 67 20 66 6c 6f 61 74 20 72 65 74 75 72 6e  ing float return
73d0: 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20   value");....   
73e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
73f0: 75 72 6e 20 28 66 6c 6f 61 74 29 76 61 6c 75 65  urn (float)value
7400: 2e 46 6c 6f 61 74 56 61 6c 75 65 3b 0d 0a 20 20  .FloatValue;..  
7410: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7420: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7430: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
7440: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
7450: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
7460: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7470: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
7480: 79 49 6e 66 6f 2e 47 65 74 46 6c 6f 61 74 28 69  yInfo.GetFloat(i
7490: 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c   - PrivateVisibl
74a0: 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d  eFieldCount);...
74b0: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54  .        VerifyT
74c0: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53 69  ype(i, DbType.Si
74d0: 6e 67 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  ngle);..        
74e0: 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54  return Convert.T
74f0: 6f 53 69 6e 67 6c 65 28 5f 61 63 74 69 76 65 53  oSingle(_activeS
7500: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
7510: 74 44 6f 75 62 6c 65 28 5f 61 63 74 69 76 65 53  tDouble(_activeS
7520: 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a  tatement, i));..
7530: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
7540: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
7550: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
7560: 63 6f 6c 75 6d 6e 20 61 73 20 61 20 47 75 69 64  column as a Guid
7570: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
7580: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
7590: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
75a0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
75b0: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
75c0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
75d0: 3e 47 75 69 64 3c 2f 72 65 74 75 72 6e 73 3e 0d  >Guid</returns>.
75e0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
75f0: 72 69 64 65 20 47 75 69 64 20 47 65 74 47 75 69  ride Guid GetGui
7600: 64 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  d(int i)..    {.
7610: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
7620: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
7630: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
7640: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
7650: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
7660: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7670: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
7680: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
7690: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
76a0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
76b0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
76c0: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
76d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
76e0: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
76f0: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
7700: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
7710: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
7720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
7730: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
7740: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
7750: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
7760: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
7770: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
7780: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
7790: 20 20 20 20 20 6e 75 6c 6c 2c 20 76 61 6c 75 65       null, value
77a0: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
77b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
77c0: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
77f0: 66 20 28 76 61 6c 75 65 2e 47 75 69 64 56 61 6c  f (value.GuidVal
7800: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
7810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7820: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
7830: 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73  eException("miss
7840: 69 6e 67 20 67 75 69 64 20 72 65 74 75 72 6e 20  ing guid return 
7850: 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  value");....    
7860: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
7870: 72 6e 20 28 47 75 69 64 29 76 61 6c 75 65 2e 47  rn (Guid)value.G
7880: 75 69 64 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  uidValue;..     
7890: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
78a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
78b0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
78c0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
78d0: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
78e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
78f0: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
7900: 66 6f 2e 47 65 74 47 75 69 64 28 69 20 2d 20 50  fo.GetGuid(i - P
7910: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
7920: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
7930: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
7940: 79 20 61 66 66 69 6e 69 74 79 20 3d 20 56 65 72  y affinity = Ver
7950: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
7960: 65 2e 47 75 69 64 29 3b 0d 0a 20 20 20 20 20 20  e.Guid);..      
7970: 20 20 69 66 20 28 61 66 66 69 6e 69 74 79 20 3d    if (affinity =
7980: 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42  = TypeAffinity.B
7990: 6c 6f 62 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  lob)..        {.
79a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74  .            byt
79b0: 65 5b 5d 20 62 75 66 66 65 72 20 3d 20 6e 65 77  e[] buffer = new
79c0: 20 62 79 74 65 5b 31 36 5d 3b 0d 0a 20 20 20 20   byte[16];..    
79d0: 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
79e0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
79f0: 74 42 79 74 65 73 28 5f 61 63 74 69 76 65 53 74  tBytes(_activeSt
7a00: 61 74 65 6d 65 6e 74 2c 20 69 2c 20 30 2c 20 62  atement, i, 0, b
7a10: 75 66 66 65 72 2c 20 30 2c 20 31 36 29 3b 0d 0a  uffer, 0, 16);..
7a20: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
7a30: 72 6e 20 6e 65 77 20 47 75 69 64 28 62 75 66 66  rn new Guid(buff
7a40: 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  er);..        }.
7a50: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  .        else.. 
7a60: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7a70: 6e 20 6e 65 77 20 47 75 69 64 28 5f 61 63 74 69  n new Guid(_acti
7a80: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
7a90: 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65  .GetText(_active
7aa0: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d  Statement, i));.
7ab0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
7ac0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
7ad0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
7ae0: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73 68 6f   column as a sho
7af0: 72 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  rt..    /// </su
7b00: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
7b10: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
7b20: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
7b30: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
7b40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
7b50: 6e 73 3e 49 6e 74 31 36 3c 2f 72 65 74 75 72 6e  ns>Int16</return
7b60: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
7b70: 76 65 72 72 69 64 65 20 49 6e 74 31 36 20 47 65  verride Int16 Ge
7b80: 74 49 6e 74 31 36 28 69 6e 74 20 69 29 0d 0a 20  tInt16(int i).. 
7b90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
7ba0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
7bb0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
7bc0: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
7bd0: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
7be0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7bf0: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
7c00: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
7c10: 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74  lbacks) == SQLit
7c20: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7c30: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
7c40: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
7c50: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7c60: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
7c70: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
7c80: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
7c90: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
7ca0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
7cb0: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
7cc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7cd0: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
7ce0: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
7cf0: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
7d00: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
7d10: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
7d20: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
7d30: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
7d40: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
7d50: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
7d60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7d70: 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 49 6e      if (value.In
7d80: 74 31 36 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  t16Value == null
7d90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7da0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
7db0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
7dc0: 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 31 36 20  ("missing int16 
7dd0: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
7de0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7df0: 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74 31 36     return (Int16
7e00: 29 76 61 6c 75 65 2e 49 6e 74 31 36 56 61 6c 75  )value.Int16Valu
7e10: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
7e20: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
7e30: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
7e40: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
7e50: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
7e60: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
7e80: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49  rn _keyInfo.GetI
7e90: 6e 74 31 36 28 69 20 2d 20 50 72 69 76 61 74 65  nt16(i - Private
7ea0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
7eb0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56  t);....        V
7ec0: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
7ed0: 79 70 65 2e 49 6e 74 31 36 29 3b 0d 0a 20 20 20  ype.Int16);..   
7ee0: 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
7ef0: 65 72 74 2e 54 6f 49 6e 74 31 36 28 5f 61 63 74  ert.ToInt16(_act
7f00: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
7f10: 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74 69  l.GetInt32(_acti
7f20: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29  veStatement, i))
7f30: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7f40: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
7f50: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
7f60: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61   the column as a
7f70: 6e 20 69 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  n int..    /// <
7f80: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
7f90: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
7fa0: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
7fb0: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
7fc0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
7fd0: 74 75 72 6e 73 3e 49 6e 74 33 32 3c 2f 72 65 74  turns>Int32</ret
7fe0: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
7ff0: 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 33 32  c override Int32
8000: 20 47 65 74 49 6e 74 33 32 28 69 6e 74 20 69 29   GetInt32(int i)
8010: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
8020: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
8030: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
8040: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
8050: 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
8060: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
8070: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
8080: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
8090: 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51  Callbacks) == SQ
80a0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
80b0: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
80c0: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
80d0: 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  cks)..        {.
80e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
80f0: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
8100: 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53  ue value = new S
8110: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
8120: 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  alue();..       
8130: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65       bool comple
8140: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
8150: 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c     InvokeReadVal
8160: 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65  ueCallback(i, ne
8170: 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75  w SQLiteReadValu
8180: 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  eEventArgs(..   
8190: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
81a0: 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63  l, value), out c
81b0: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
81c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
81d0: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
81e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
81f0: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
8200: 2e 49 6e 74 33 32 56 61 6c 75 65 20 3d 3d 20 6e  .Int32Value == n
8210: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
8220: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
8230: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
8240: 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e 74  ion("missing int
8250: 33 32 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22  32 return value"
8260: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8270: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e        return (In
8280: 74 33 32 29 76 61 6c 75 65 2e 49 6e 74 33 32 56  t32)value.Int32V
8290: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
82a0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
82b0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
82c0: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
82d0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
82e0: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
82f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
8300: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
8310: 65 74 49 6e 74 33 32 28 69 20 2d 20 50 72 69 76  etInt32(i - Priv
8320: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
8330: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
8340: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
8350: 44 62 54 79 70 65 2e 49 6e 74 33 32 29 3b 0d 0a  DbType.Int32);..
8360: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
8370: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
8380: 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61  _sql.GetInt32(_a
8390: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
83a0: 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  i);..    }....  
83b0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
83c0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
83d0: 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73  es the column as
83e0: 20 61 20 6c 6f 6e 67 0d 0a 20 20 20 20 2f 2f 2f   a long..    ///
83f0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8400: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
8410: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
8420: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
8430: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
8440: 72 65 74 75 72 6e 73 3e 49 6e 74 36 34 3c 2f 72  returns>Int64</r
8450: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
8460: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74  lic override Int
8470: 36 34 20 47 65 74 49 6e 74 36 34 28 69 6e 74 20  64 GetInt64(int 
8480: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
8490: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
84a0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
84b0: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
84c0: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
84d0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
84e0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
84f0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
8500: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
8510: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8520: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
8530: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
8540: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
8550: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
8560: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
8570: 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77  alue value = new
8580: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
8590: 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20  rValue();..     
85a0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70         bool comp
85b0: 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lete;....       
85c0: 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56       InvokeReadV
85d0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20  alueCallback(i, 
85e0: 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61  new SQLiteReadVa
85f0: 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  lueEventArgs(.. 
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
8610: 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74  ull, value), out
8620: 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20   complete);.... 
8630: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
8640: 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20  omplete)..      
8650: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8660: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
8670: 75 65 2e 49 6e 74 36 34 56 61 6c 75 65 20 3d 3d  ue.Int64Value ==
8680: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
8690: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
86a0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
86b0: 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69  ption("missing i
86c0: 6e 74 36 34 20 72 65 74 75 72 6e 20 76 61 6c 75  nt64 return valu
86d0: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
86e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
86f0: 49 6e 74 36 34 29 76 61 6c 75 65 2e 49 6e 74 36  Int64)value.Int6
8700: 34 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  4Value;..       
8710: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8720: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
8730: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
8740: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
8750: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
8760: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
8770: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
8780: 2e 47 65 74 49 6e 74 36 34 28 69 20 2d 20 50 72  .GetInt64(i - Pr
8790: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
87a0: 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
87b0: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
87c0: 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29 3b  , DbType.Int64);
87d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
87e0: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
87f0: 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 36 34 28  t._sql.GetInt64(
8800: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
8810: 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  , i);..    }....
8820: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8830: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
8840: 65 76 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  eves the name of
8850: 20 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20   the column..   
8860: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8870: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
8880: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
8890: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
88a0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
88b0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69  // <returns>stri
88c0: 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  ng</returns>..  
88d0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
88e0: 65 20 73 74 72 69 6e 67 20 47 65 74 4e 61 6d 65  e string GetName
88f0: 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
8900: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
8910: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
8920: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
8930: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
8940: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
8950: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
8960: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
8970: 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d 65 28  keyInfo.GetName(
8980: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
8990: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
89a0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
89b0: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
89c0: 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d  t._sql.ColumnNam
89d0: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
89e0: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
89f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
8a00: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
8a10: 75 72 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  urns the name of
8a20: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 73   the database as
8a30: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
8a40: 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75  e specified colu
8a50: 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  mn...    /// </s
8a60: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
8a70: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
8a80: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
8a90: 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d  e column.</param
8aa0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
8ab0: 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75  rns>string</retu
8ac0: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
8ad0: 20 73 74 72 69 6e 67 20 47 65 74 44 61 74 61 62   string GetDatab
8ae0: 61 73 65 4e 61 6d 65 28 69 6e 74 20 69 29 0d 0a  aseName(int i)..
8af0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
8b00: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
8b10: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
8b20: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
8b30: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
8b40: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
8b50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
8b60: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
8b70: 65 74 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61  etName(i - Priva
8b80: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
8b90: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
8ba0: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
8bb0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f  tatement._sql.Co
8bc0: 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65  lumnDatabaseName
8bd0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
8be0: 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  t, i);..    }...
8bf0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
8c00: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
8c10: 72 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  rns the name of 
8c20: 74 68 65 20 74 61 62 6c 65 20 61 73 73 6f 63 69  the table associ
8c30: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70  ated with the sp
8c40: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d  ecified column..
8c50: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
8c60: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
8c70: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
8c80: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
8c90: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
8ca0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
8cb0: 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e  string</returns>
8cc0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72  ..    public str
8cd0: 69 6e 67 20 47 65 74 54 61 62 6c 65 4e 61 6d 65  ing GetTableName
8ce0: 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
8cf0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
8d00: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
8d10: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
8d20: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
8d30: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
8d40: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
8d50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
8d60: 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d 65 28  keyInfo.GetName(
8d70: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
8d80: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
8d90: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
8da0: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
8db0: 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 61 62  t._sql.ColumnTab
8dc0: 6c 65 4e 61 6d 65 28 5f 61 63 74 69 76 65 53 74  leName(_activeSt
8dd0: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20  atement, i);..  
8de0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
8df0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
8e00: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6f 72  / Returns the or
8e10: 69 67 69 6e 61 6c 20 6e 61 6d 65 20 6f 66 20 74  iginal name of t
8e20: 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c  he specified col
8e30: 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  umn...    /// </
8e40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
8e50: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
8e60: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
8e70: 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
8e80: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
8e90: 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74  urns>string</ret
8ea0: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
8eb0: 63 20 73 74 72 69 6e 67 20 47 65 74 4f 72 69 67  c string GetOrig
8ec0: 69 6e 61 6c 4e 61 6d 65 28 69 6e 74 20 69 29 0d  inalName(int i).
8ed0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
8ee0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
8ef0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
8f00: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
8f10: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
8f20: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
8f30: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8f40: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
8f50: 47 65 74 4e 61 6d 65 28 69 20 2d 20 50 72 69 76  GetName(i - Priv
8f60: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
8f70: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
8f80: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
8f90: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43  Statement._sql.C
8fa0: 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d  olumnOriginalNam
8fb0: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
8fc0: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
8fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
8fe0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
8ff0: 72 69 65 76 65 73 20 74 68 65 20 69 20 6f 66 20  rieves the i of 
9000: 61 20 63 6f 6c 75 6d 6e 2c 20 67 69 76 65 6e 20  a column, given 
9010: 69 74 73 20 6e 61 6d 65 0d 0a 20 20 20 20 2f 2f  its name..    //
9020: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
9030: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
9040: 65 3d 22 6e 61 6d 65 22 3e 54 68 65 20 6e 61 6d  e="name">The nam
9050: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
9060: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
9070: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
9080: 74 75 72 6e 73 3e 54 68 65 20 69 6e 74 20 69 20  turns>The int i 
9090: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72  of the column</r
90a0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
90b0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74  lic override int
90c0: 20 47 65 74 4f 72 64 69 6e 61 6c 28 73 74 72 69   GetOrdinal(stri
90d0: 6e 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d  ng name)..    {.
90e0: 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70  .      CheckDisp
90f0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
9100: 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73   if (_throwOnDis
9110: 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d  posed) SQLiteCom
9120: 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d  mand.Check(_comm
9130: 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  and);....      /
9140: 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  /..      // NOTE
9150: 3a 20 46 69 72 73 74 2c 20 63 68 65 63 6b 20 69  : First, check i
9160: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  f the column nam
9170: 65 20 63 61 63 68 65 20 68 61 73 20 62 65 65 6e  e cache has been
9180: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 79 65 74   initialized yet
9190: 2e 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  ...      //     
91a0: 20 20 49 66 20 6e 6f 74 2c 20 64 6f 20 69 74 20    If not, do it 
91b0: 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  now...      //..
91c0: 20 20 20 20 20 20 69 66 20 28 5f 66 69 65 6c 64        if (_field
91d0: 49 6e 64 65 78 65 73 20 3d 3d 20 6e 75 6c 6c 29  Indexes == null)
91e0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
91f0: 20 20 20 20 20 5f 66 69 65 6c 64 49 6e 64 65 78       _fieldIndex
9200: 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e  es = new Diction
9210: 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e  ary<string, int>
9220: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9230: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 65 72 2e   StringComparer.
9240: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
9250: 65 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  e);..      }....
9260: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9270: 2f 2f 20 4e 4f 54 45 3a 20 4e 65 78 74 2c 20 73  // NOTE: Next, s
9280: 65 65 20 69 66 20 74 68 65 20 69 6e 64 65 78 20  ee if the index 
9290: 66 6f 72 20 74 68 65 20 72 65 71 75 65 73 74 65  for the requeste
92a0: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 68 61  d column name ha
92b0: 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 2f 2f  s been..      //
92c0: 20 20 20 20 20 20 20 63 61 63 68 65 64 20 61 6c         cached al
92d0: 72 65 61 64 79 2e 20 20 49 66 20 73 6f 2c 20 72  ready.  If so, r
92e0: 65 74 75 72 6e 20 74 68 65 20 63 61 63 68 65 64  eturn the cached
92f0: 20 76 61 6c 75 65 2e 20 20 4f 74 68 65 72 77 69   value.  Otherwi
9300: 73 65 2c 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  se,..      //   
9310: 20 20 20 20 6c 6f 6f 6b 75 70 20 74 68 65 20 76      lookup the v
9320: 61 6c 75 65 20 61 6e 64 20 74 68 65 6e 20 63 61  alue and then ca
9330: 63 68 65 20 74 68 65 20 72 65 73 75 6c 74 20 66  che the result f
9340: 6f 72 20 66 75 74 75 72 65 20 75 73 65 2e 0d 0a  or future use...
9350: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9360: 69 6e 74 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20  int r;....      
9370: 69 66 20 28 21 5f 66 69 65 6c 64 49 6e 64 65 78  if (!_fieldIndex
9380: 65 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 6e  es.TryGetValue(n
9390: 61 6d 65 2c 20 6f 75 74 20 72 29 29 0d 0a 20 20  ame, out r))..  
93a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
93b0: 20 72 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74   r = _activeStat
93c0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d  ement._sql.Colum
93d0: 6e 49 6e 64 65 78 28 5f 61 63 74 69 76 65 53 74  nIndex(_activeSt
93e0: 61 74 65 6d 65 6e 74 2c 20 6e 61 6d 65 29 3b 0d  atement, name);.
93f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
9400: 28 72 20 3d 3d 20 2d 31 20 26 26 20 5f 6b 65 79  (r == -1 && _key
9410: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
9420: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9430: 20 20 20 20 20 20 20 20 20 20 72 20 3d 20 5f 6b            r = _k
9440: 65 79 49 6e 66 6f 2e 47 65 74 4f 72 64 69 6e 61  eyInfo.GetOrdina
9450: 6c 28 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  l(name);..      
9460: 20 20 20 20 20 20 20 20 69 66 20 28 72 20 3e 20          if (r > 
9470: 2d 31 29 20 72 20 2b 3d 20 50 72 69 76 61 74 65  -1) r += Private
9480: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
9490: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  t;..          }.
94a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 66 69  ...          _fi
94b0: 65 6c 64 49 6e 64 65 78 65 73 2e 41 64 64 28 6e  eldIndexes.Add(n
94c0: 61 6d 65 2c 20 72 29 3b 0d 0a 20 20 20 20 20 20  ame, r);..      
94d0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
94e0: 6e 20 72 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  n r;..    }.... 
94f0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
9500: 0d 0a 20 20 20 20 2f 2f 2f 20 53 63 68 65 6d 61  ..    /// Schema
9510: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
9520: 53 51 4c 69 74 65 20 69 73 20 64 69 66 66 69 63  SQLite is diffic
9530: 75 6c 74 20 74 6f 20 6d 61 70 20 69 6e 74 6f 20  ult to map into 
9540: 2e 4e 45 54 20 63 6f 6e 76 65 6e 74 69 6f 6e 73  .NET conventions
9550: 2c 20 73 6f 20 61 20 6c 6f 74 20 6f 66 20 77 6f  , so a lot of wo
9560: 72 6b 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 0d  rk must be done.
9570: 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 67 61 74 68  .    /// to gath
9580: 65 72 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  er the necessary
9590: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 6f 20   information so 
95a0: 69 74 20 63 61 6e 20 62 65 20 72 65 70 72 65 73  it can be repres
95b0: 65 6e 74 65 64 20 69 6e 20 61 6e 20 41 44 4f 2e  ented in an ADO.
95c0: 4e 45 54 20 6d 61 6e 6e 65 72 2e 0d 0a 20 20 20  NET manner...   
95d0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
95e0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
95f0: 73 3e 52 65 74 75 72 6e 73 20 61 20 44 61 74 61  s>Returns a Data
9600: 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
9610: 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f   the schema info
9620: 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  rmation for the 
9630: 61 63 74 69 76 65 20 53 45 4c 45 43 54 20 73 74  active SELECT st
9640: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72  atement being pr
9650: 6f 63 65 73 73 65 64 2e 3c 2f 72 65 74 75 72 6e  ocessed.</return
9660: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
9670: 76 65 72 72 69 64 65 20 44 61 74 61 54 61 62 6c  verride DataTabl
9680: 65 20 47 65 74 53 63 68 65 6d 61 54 61 62 6c 65  e GetSchemaTable
9690: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
96a0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
96b0: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
96c0: 47 65 74 53 63 68 65 6d 61 54 61 62 6c 65 28 74  GetSchemaTable(t
96d0: 72 75 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20  rue, false);..  
96e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
96f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9730: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
9740: 65 67 69 6f 6e 20 43 6f 6c 75 6d 6e 50 61 72 65  egion ColumnPare
9750: 6e 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 70 72  nt Class..    pr
9760: 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
9770: 73 73 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20  ss ColumnParent 
9780: 3a 20 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61  : IEqualityCompa
9790: 72 65 72 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  rer<ColumnParent
97a0: 3e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  >..    {..      
97b0: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
97c0: 20 46 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20   Fields..       
97d0: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44   public string D
97e0: 61 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20 20  atabaseName;..  
97f0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
9800: 69 6e 67 20 54 61 62 6c 65 4e 61 6d 65 3b 0d 0a  ing TableName;..
9810: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
9820: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65  tring ColumnName
9830: 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
9840: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
9850: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9890: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
98a0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
98b0: 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
98c0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
98d0: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 29 0d 0a  ColumnParent()..
98e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
98f0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
9900: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
9910: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
9920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9960: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
9970: 75 62 6c 69 63 20 43 6f 6c 75 6d 6e 50 61 72 65  ublic ColumnPare
9980: 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt(..           
9990: 20 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65   string database
99a0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
99b0: 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c 65 4e     string tableN
99c0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
99d0: 20 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e    string columnN
99e0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
99f0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9a00: 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20  : this()..      
9a10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9a20: 20 74 68 69 73 2e 44 61 74 61 62 61 73 65 4e 61   this.DatabaseNa
9a30: 6d 65 20 3d 20 64 61 74 61 62 61 73 65 4e 61 6d  me = databaseNam
9a40: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
9a50: 74 68 69 73 2e 54 61 62 6c 65 4e 61 6d 65 20 3d  this.TableName =
9a60: 20 74 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20   tableName;..   
9a70: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 43 6f           this.Co
9a80: 6c 75 6d 6e 4e 61 6d 65 20 3d 20 63 6f 6c 75 6d  lumnName = colum
9a90: 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  nName;..        
9aa0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
9ab0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
9ac0: 20 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 2f 2f  ////////////////
9af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b00: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9b10: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 45 71 75      #region IEqu
9b20: 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 43 6f  alityComparer<Co
9b30: 6c 75 6d 6e 50 61 72 65 6e 74 3e 20 4d 65 6d 62  lumnParent> Memb
9b40: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ers..        pub
9b50: 6c 69 63 20 62 6f 6f 6c 20 45 71 75 61 6c 73 28  lic bool Equals(
9b60: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 78 2c 20  ColumnParent x, 
9b70: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 79 29 0d  ColumnParent y).
9b80: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9b90: 20 20 20 20 20 20 20 20 69 66 20 28 28 78 20 3d          if ((x =
9ba0: 3d 20 6e 75 6c 6c 29 20 26 26 20 28 79 20 3d 3d  = null) && (y ==
9bb0: 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
9bc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9bd0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
9be0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
9bf0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
9c00: 20 65 6c 73 65 20 69 66 20 28 28 78 20 3d 3d 20   else if ((x == 
9c10: 6e 75 6c 6c 29 20 7c 7c 20 28 79 20 3d 3d 20 6e  null) || (y == n
9c20: 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
9c30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9c40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
9c50: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
9c60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9c70: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
9c80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9c90: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
9ca0: 2e 45 71 75 61 6c 73 28 78 2e 44 61 74 61 62 61  .Equals(x.Databa
9cb0: 73 65 4e 61 6d 65 2c 20 79 2e 44 61 74 61 62 61  seName, y.Databa
9cc0: 73 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  seName,..       
9cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ce0: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
9cf0: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
9d00: 61 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ase))..         
9d10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9d30: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9d60: 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71    if (!String.Eq
9d70: 75 61 6c 73 28 78 2e 54 61 62 6c 65 4e 61 6d 65  uals(x.TableName
9d80: 2c 20 79 2e 54 61 62 6c 65 4e 61 6d 65 2c 0d 0a  , y.TableName,..
9d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9da0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f          StringCo
9db0: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
9dc0: 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20  IgnoreCase))..  
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
9de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9df0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
9e00: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
9e10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9e20: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
9e30: 72 69 6e 67 2e 45 71 75 61 6c 73 28 78 2e 43 6f  ring.Equals(x.Co
9e40: 6c 75 6d 6e 4e 61 6d 65 2c 20 79 2e 43 6f 6c 75  lumnName, y.Colu
9e50: 6d 6e 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  mnName,..       
9e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e70: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
9e80: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
9e90: 61 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ase))..         
9ea0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9ec0: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
9ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ef0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
9f00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9f10: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9f20: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9f70: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e         public in
9f80: 74 20 47 65 74 48 61 73 68 43 6f 64 65 28 43 6f  t GetHashCode(Co
9f90: 6c 75 6d 6e 50 61 72 65 6e 74 20 6f 62 6a 29 0d  lumnParent obj).
9fa0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9fb0: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 75          int resu
9fc0: 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  lt = 0;....     
9fd0: 20 20 20 20 20 20 20 69 66 20 28 28 6f 62 6a 20         if ((obj 
9fe0: 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28 6f 62 6a  != null) && (obj
9ff0: 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 20 21 3d  .DatabaseName !=
a000: 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
a010: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
a020: 5e 3d 20 6f 62 6a 2e 44 61 74 61 62 61 73 65 4e  ^= obj.DatabaseN
a030: 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28  ame.GetHashCode(
a040: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
a050: 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75    if ((obj != nu
a060: 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 54 61 62 6c  ll) && (obj.Tabl
a070: 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29 0d  eName != null)).
a080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a090: 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e 54   result ^= obj.T
a0a0: 61 62 6c 65 4e 61 6d 65 2e 47 65 74 48 61 73 68  ableName.GetHash
a0b0: 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Code();....     
a0c0: 20 20 20 20 20 20 20 69 66 20 28 28 6f 62 6a 20         if ((obj 
a0d0: 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28 6f 62 6a  != null) && (obj
a0e0: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 20 21 3d 20 6e  .ColumnName != n
a0f0: 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
a100: 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 5e 3d         result ^=
a110: 20 6f 62 6a 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2e   obj.ColumnName.
a120: 47 65 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a  GetHashCode();..
a130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
a140: 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
a150: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
a160: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
a170: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
a180: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
a190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1d0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72 69  /////....    pri
a1e0: 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
a1f0: 20 47 65 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c   GetStatementCol
a200: 75 6d 6e 50 61 72 65 6e 74 73 28 0d 0a 20 20 20  umnParents(..   
a210: 20 20 20 20 20 53 51 4c 69 74 65 42 61 73 65 20       SQLiteBase 
a220: 73 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20 53 51  sql,..        SQ
a230: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
a240: 6d 74 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  mt,..        int
a250: 20 66 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a 20 20   fieldCount,..  
a260: 20 20 20 20 20 20 72 65 66 20 44 69 63 74 69 6f        ref Dictio
a270: 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e  nary<ColumnParen
a280: 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20 70 61  t, List<int>> pa
a290: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 0d 0a  rentToColumns,..
a2a0: 20 20 20 20 20 20 20 20 72 65 66 20 44 69 63 74          ref Dict
a2b0: 69 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75  ionary<int, Colu
a2c0: 6d 6e 50 61 72 65 6e 74 3e 20 63 6f 6c 75 6d 6e  mnParent> column
a2d0: 54 6f 50 61 72 65 6e 74 0d 0a 20 20 20 20 20 20  ToParent..      
a2e0: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
a2f0: 20 20 20 20 69 66 20 28 70 61 72 65 6e 74 54 6f      if (parentTo
a300: 43 6f 6c 75 6d 6e 73 20 3d 3d 20 6e 75 6c 6c 29  Columns == null)
a310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61  ..            pa
a320: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 20  rentToColumns = 
a330: 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 43  new Dictionary<C
a340: 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73  olumnParent, Lis
a350: 74 3c 69 6e 74 3e 3e 28 0d 0a 20 20 20 20 20 20  t<int>>(..      
a360: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f            new Co
a370: 6c 75 6d 6e 50 61 72 65 6e 74 28 29 29 3b 0d 0a  lumnParent());..
a380: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 6f  ..        if (co
a390: 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 3d 20  lumnToParent == 
a3a0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
a3b0: 20 20 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e     columnToParen
a3c0: 74 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  t = new Dictiona
a3d0: 72 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61  ry<int, ColumnPa
a3e0: 72 65 6e 74 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20  rent>();....    
a3f0: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d      for (int n =
a400: 20 30 3b 20 6e 20 3c 20 66 69 65 6c 64 43 6f 75   0; n < fieldCou
a410: 6e 74 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20  nt; n++)..      
a420: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a430: 20 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65   string database
a440: 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d  Name = sql.Colum
a450: 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28 73 74  nDatabaseName(st
a460: 6d 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20  mt, n);..       
a470: 20 20 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c       string tabl
a480: 65 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75  eName = sql.Colu
a490: 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 73 74 6d 74  mnTableName(stmt
a4a0: 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  , n);..         
a4b0: 20 20 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e     string column
a4c0: 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d  Name = sql.Colum
a4d0: 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 73 74  nOriginalName(st
a4e0: 6d 74 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  mt, n);....     
a4f0: 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 50 61 72         ColumnPar
a500: 65 6e 74 20 6b 65 79 20 3d 20 6e 65 77 20 43 6f  ent key = new Co
a510: 6c 75 6d 6e 50 61 72 65 6e 74 28 64 61 74 61 62  lumnParent(datab
a520: 61 73 65 4e 61 6d 65 2c 20 74 61 62 6c 65 4e 61  aseName, tableNa
a530: 6d 65 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  me, null);..    
a540: 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 50 61          ColumnPa
a550: 72 65 6e 74 20 76 61 6c 75 65 20 3d 20 6e 65 77  rent value = new
a560: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 64 61   ColumnParent(da
a570: 74 61 62 61 73 65 4e 61 6d 65 2c 20 74 61 62 6c  tabaseName, tabl
a580: 65 4e 61 6d 65 2c 20 63 6f 6c 75 6d 6e 4e 61 6d  eName, columnNam
a590: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
a5a0: 20 20 20 4c 69 73 74 3c 69 6e 74 3e 20 69 6e 64     List<int> ind
a5b0: 65 78 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20  exList;....     
a5c0: 20 20 20 20 20 20 20 69 66 20 28 21 70 61 72 65         if (!pare
a5d0: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 54 72 79 47  ntToColumns.TryG
a5e0: 65 74 56 61 6c 75 65 28 6b 65 79 2c 20 6f 75 74  etValue(key, out
a5f0: 20 69 6e 64 65 78 4c 69 73 74 29 29 0d 0a 20 20   indexList))..  
a600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
a610: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 41 64  rentToColumns.Ad
a620: 64 28 6b 65 79 2c 20 6e 65 77 20 4c 69 73 74 3c  d(key, new List<
a630: 69 6e 74 3e 28 6e 65 77 20 69 6e 74 5b 5d 20 7b  int>(new int[] {
a640: 20 6e 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20   n }));..       
a650: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 69 6e       else if (in
a660: 64 65 78 4c 69 73 74 20 21 3d 20 6e 75 6c 6c 29  dexList != null)
a670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a680: 20 20 69 6e 64 65 78 4c 69 73 74 2e 41 64 64 28    indexList.Add(
a690: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
a6a0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
a6b0: 20 20 20 20 20 20 20 70 61 72 65 6e 74 54 6f 43         parentToC
a6c0: 6f 6c 75 6d 6e 73 5b 6b 65 79 5d 20 3d 20 6e 65  olumns[key] = ne
a6d0: 77 20 4c 69 73 74 3c 69 6e 74 3e 28 6e 65 77 20  w List<int>(new 
a6e0: 69 6e 74 5b 5d 20 7b 20 6e 20 7d 29 3b 0d 0a 0d  int[] { n });...
a6f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c  .            col
a700: 75 6d 6e 54 6f 50 61 72 65 6e 74 2e 41 64 64 28  umnToParent.Add(
a710: 6e 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  n, value);..    
a720: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
a730: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a780: 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ...    private s
a790: 74 61 74 69 63 20 69 6e 74 20 43 6f 75 6e 74 50  tatic int CountP
a7a0: 61 72 65 6e 74 73 28 0d 0a 20 20 20 20 20 20 20  arents(..       
a7b0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75   Dictionary<Colu
a7c0: 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69  mnParent, List<i
a7d0: 6e 74 3e 3e 20 70 61 72 65 6e 74 54 6f 43 6f 6c  nt>> parentToCol
a7e0: 75 6d 6e 73 0d 0a 20 20 20 20 20 20 20 20 29 0d  umns..        ).
a7f0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
a800: 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 30 3b 0d  int result = 0;.
a810: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 70  ...        if (p
a820: 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 21  arentToColumns !
a830: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a840: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a850: 66 6f 72 65 61 63 68 20 28 43 6f 6c 75 6d 6e 50  foreach (ColumnP
a860: 61 72 65 6e 74 20 6b 65 79 20 69 6e 20 70 61 72  arent key in par
a870: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 4b 65 79  entToColumns.Key
a880: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
a890: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a8a0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
a8b0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
a8c0: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
a8d0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
a8e0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 61 62        string tab
a8f0: 6c 65 4e 61 6d 65 20 3d 20 6b 65 79 2e 54 61 62  leName = key.Tab
a900: 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
a910: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
a920: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
a930: 70 74 79 28 74 61 62 6c 65 4e 61 6d 65 29 29 0d  pty(tableName)).
a940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a950: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
a960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a970: 20 20 72 65 73 75 6c 74 2b 2b 3b 0d 0a 20 20 20    result++;..   
a980: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
a990: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a9a0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
a9b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
a9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
aa10: 20 69 6e 74 65 72 6e 61 6c 20 44 61 74 61 54 61   internal DataTa
aa20: 62 6c 65 20 47 65 74 53 63 68 65 6d 61 54 61 62  ble GetSchemaTab
aa30: 6c 65 28 62 6f 6f 6c 20 77 61 6e 74 55 6e 69 71  le(bool wantUniq
aa40: 75 65 49 6e 66 6f 2c 20 62 6f 6f 6c 20 77 61 6e  ueInfo, bool wan
aa50: 74 44 65 66 61 75 6c 74 56 61 6c 75 65 29 0d 0a  tDefaultValue)..
aa60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65      {..      Che
aa70: 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20  ckClosed();..   
aa80: 20 20 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44     if (_throwOnD
aa90: 69 73 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43  isposed) SQLiteC
aaa0: 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f  ommand.Check(_co
aab0: 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20  mmand);....     
aac0: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 42 55   //..      // BU
aad0: 47 46 49 58 3a 20 57 65 20 6e 65 65 64 20 74 6f  GFIX: We need to
aae0: 20 71 75 69 63 6b 6c 79 20 73 63 61 6e 20 61 6c   quickly scan al
aaf0: 6c 20 74 68 65 20 66 69 65 6c 64 73 20 69 6e 20  l the fields in 
ab00: 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20  the current..   
ab10: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 22 72     //         "r
ab20: 65 73 75 6c 74 20 73 65 74 22 20 74 6f 20 73 65  esult set" to se
ab30: 65 20 68 6f 77 20 6d 61 6e 79 20 64 69 73 74 69  e how many disti
ab40: 6e 63 74 20 74 61 62 6c 65 73 20 61 72 65 20 61  nct tables are a
ab50: 63 74 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 2f  ctually..      /
ab60: 2f 20 20 20 20 20 20 20 20 20 69 6e 76 6f 6c 76  /         involv
ab70: 65 64 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d  ed.  This inform
ab80: 61 74 69 6f 6e 20 69 73 20 6e 65 63 65 73 73 61  ation is necessa
ab90: 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 0d  ry so that some.
aba0: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
abb0: 20 20 69 6e 74 65 6c 6c 69 67 65 6e 74 20 64 65    intelligent de
abc0: 63 69 73 69 6f 6e 73 20 63 61 6e 20 62 65 20 6d  cisions can be m
abd0: 61 64 65 20 77 68 65 6e 20 63 6f 6e 73 74 72 75  ade when constru
abe0: 63 74 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  cting the..     
abf0: 20 2f 2f 20 20 20 20 20 20 20 20 20 6d 65 74 61   //         meta
ac00: 64 61 74 61 20 62 65 6c 6f 77 2e 20 20 46 6f 72  data below.  For
ac10: 20 65 78 61 6d 70 6c 65 2c 20 77 65 20 6e 65 65   example, we nee
ac20: 64 20 74 6f 20 62 65 20 76 65 72 79 20 63 61 72  d to be very car
ac30: 65 66 75 6c 0d 0a 20 20 20 20 20 20 2f 2f 20 20  eful..      //  
ac40: 20 20 20 20 20 20 20 61 62 6f 75 74 20 66 6c 61         about fla
ac50: 67 67 69 6e 67 20 61 20 70 61 72 74 69 63 75 6c  gging a particul
ac60: 61 72 20 63 6f 6c 75 6d 6e 20 61 73 20 22 75 6e  ar column as "un
ac70: 69 71 75 65 22 20 6a 75 73 74 0d 0a 20 20 20 20  ique" just..    
ac80: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 62 65 63    //         bec
ac90: 61 75 73 65 20 69 74 20 77 61 73 20 69 6e 20 69  ause it was in i
aca0: 74 73 20 6f 72 69 67 69 6e 61 6c 20 75 6e 64 65  ts original unde
acb0: 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20  rlying database 
acc0: 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 2f 2f 20  table..      // 
acd0: 20 20 20 20 20 20 20 20 69 66 20 74 68 65 72 65          if there
ace0: 20 61 72 65 20 6e 6f 77 20 6d 75 6c 74 69 70 6c   are now multipl
acf0: 65 20 74 61 62 6c 65 73 20 69 6e 76 6f 6c 76 65  e tables involve
ad00: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  d in the..      
ad10: 2f 2f 20 20 20 20 20 20 20 20 20 22 72 65 73 75  //         "resu
ad20: 6c 74 20 73 65 74 22 2e 20 20 53 65 65 20 74 69  lt set".  See ti
ad30: 63 6b 65 74 20 5b 37 65 33 66 61 39 33 37 34 34  cket [7e3fa93744
ad40: 5d 20 66 6f 72 20 6d 6f 72 65 20 64 65 74 61 69  ] for more detai
ad50: 6c 65 64 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  led..      //   
ad60: 20 20 20 20 20 20 69 6e 66 6f 72 6d 61 74 69 6f        informatio
ad70: 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  n...      //..  
ad80: 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 43      Dictionary<C
ad90: 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73  olumnParent, Lis
ada0: 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54 6f  t<int>> parentTo
adb0: 43 6f 6c 75 6d 6e 73 20 3d 20 6e 75 6c 6c 3b 0d  Columns = null;.
adc0: 0a 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72  .      Dictionar
add0: 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72  y<int, ColumnPar
ade0: 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54 6f 50 61 72  ent> columnToPar
adf0: 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ent = null;.... 
ae00: 20 20 20 20 20 47 65 74 53 74 61 74 65 6d 65 6e       GetStatemen
ae10: 74 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 73 28 0d  tColumnParents(.
ae20: 0a 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d  .          _comm
ae30: 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  and.Connection._
ae40: 73 71 6c 2c 20 5f 61 63 74 69 76 65 53 74 61 74  sql, _activeStat
ae50: 65 6d 65 6e 74 2c 20 5f 66 69 65 6c 64 43 6f 75  ement, _fieldCou
ae60: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72  nt,..          r
ae70: 65 66 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  ef parentToColum
ae80: 6e 73 2c 20 72 65 66 20 63 6f 6c 75 6d 6e 54 6f  ns, ref columnTo
ae90: 50 61 72 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  Parent);....    
aea0: 20 20 44 61 74 61 54 61 62 6c 65 20 74 62 6c 20    DataTable tbl 
aeb0: 3d 20 6e 65 77 20 44 61 74 61 54 61 62 6c 65 28  = new DataTable(
aec0: 22 53 63 68 65 6d 61 54 61 62 6c 65 22 29 3b 0d  "SchemaTable");.
aed0: 0a 20 20 20 20 20 20 44 61 74 61 54 61 62 6c 65  .      DataTable
aee0: 20 74 62 6c 49 6e 64 65 78 65 73 20 3d 20 6e 75   tblIndexes = nu
aef0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 44 61 74 61 54  ll;..      DataT
af00: 61 62 6c 65 20 74 62 6c 49 6e 64 65 78 43 6f 6c  able tblIndexCol
af10: 75 6d 6e 73 3b 0d 0a 20 20 20 20 20 20 44 61 74  umns;..      Dat
af20: 61 52 6f 77 20 72 6f 77 3b 0d 0a 20 20 20 20 20  aRow row;..     
af30: 20 73 74 72 69 6e 67 20 74 65 6d 70 3b 0d 0a 20   string temp;.. 
af40: 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 43       string strC
af50: 61 74 61 6c 6f 67 20 3d 20 53 74 72 69 6e 67 2e  atalog = String.
af60: 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20 73 74  Empty;..      st
af70: 72 69 6e 67 20 73 74 72 54 61 62 6c 65 20 3d 20  ring strTable = 
af80: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20  String.Empty;.. 
af90: 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 43       string strC
afa0: 6f 6c 75 6d 6e 20 3d 20 53 74 72 69 6e 67 2e 45  olumn = String.E
afb0: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 74  mpty;....      t
afc0: 62 6c 2e 4c 6f 63 61 6c 65 20 3d 20 43 75 6c 74  bl.Locale = Cult
afd0: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
afe0: 74 43 75 6c 74 75 72 65 3b 0d 0a 20 20 20 20 20  tCulture;..     
aff0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
b000: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
b010: 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74  mn.ColumnName, t
b020: 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d  ypeof(String));.
b030: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
b040: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
b050: 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f  leColumn.ColumnO
b060: 72 64 69 6e 61 6c 2c 20 74 79 70 65 6f 66 28 69  rdinal, typeof(i
b070: 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  nt));..      tbl
b080: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
b090: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43  emaTableColumn.C
b0a0: 6f 6c 75 6d 6e 53 69 7a 65 2c 20 74 79 70 65 6f  olumnSize, typeo
b0b0: 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20  f(int));..      
b0c0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
b0d0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
b0e0: 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69  n.NumericPrecisi
b0f0: 6f 6e 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29  on, typeof(int))
b100: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
b110: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
b120: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72  ableColumn.Numer
b130: 69 63 53 63 61 6c 65 2c 20 74 79 70 65 6f 66 28  icScale, typeof(
b140: 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  int));..      tb
b150: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
b160: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
b170: 49 73 55 6e 69 71 75 65 2c 20 74 79 70 65 6f 66  IsUnique, typeof
b180: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20  (Boolean));..   
b190: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
b1a0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
b1b0: 6c 75 6d 6e 2e 49 73 4b 65 79 2c 20 74 79 70 65  lumn.IsKey, type
b1c0: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
b1d0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
b1e0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
b1f0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42  OptionalColumn.B
b200: 61 73 65 53 65 72 76 65 72 4e 61 6d 65 2c 20 74  aseServerName, t
b210: 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d  ypeof(string));.
b220: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
b230: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
b240: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
b250: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
b260: 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29  , typeof(String)
b270: 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
b280: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
b290: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
b2a0: 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65  ColumnName, type
b2b0: 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20  of(String));..  
b2c0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
b2d0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
b2e0: 6f 6c 75 6d 6e 2e 42 61 73 65 53 63 68 65 6d 61  olumn.BaseSchema
b2f0: 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72  Name, typeof(Str
b300: 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ing));..      tb
b310: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
b320: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
b330: 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 2c 20 74  BaseTableName, t
b340: 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d  ypeof(String));.
b350: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
b360: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
b370: 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74 61 54 79 70  leColumn.DataTyp
b380: 65 2c 20 74 79 70 65 6f 66 28 54 79 70 65 29 29  e, typeof(Type))
b390: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
b3a0: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
b3b0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77  ableColumn.Allow
b3c0: 44 42 4e 75 6c 6c 2c 20 74 79 70 65 6f 66 28 42  DBNull, typeof(B
b3d0: 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20  oolean));..     
b3e0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
b3f0: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
b400: 6d 6e 2e 50 72 6f 76 69 64 65 72 54 79 70 65 2c  mn.ProviderType,
b410: 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a   typeof(int));..
b420: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
b430: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
b440: 65 43 6f 6c 75 6d 6e 2e 49 73 41 6c 69 61 73 65  eColumn.IsAliase
b450: 64 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  d, typeof(Boolea
b460: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  n));..      tbl.
b470: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
b480: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
b490: 45 78 70 72 65 73 73 69 6f 6e 2c 20 74 79 70 65  Expression, type
b4a0: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
b4b0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
b4c0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
b4d0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
b4e0: 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 2c 20  sAutoIncrement, 
b4f0: 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29  typeof(Boolean))
b500: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
b510: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
b520: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
b530: 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e 2c  mn.IsRowVersion,
b540: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
b550: 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
b560: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
b570: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
b580: 75 6d 6e 2e 49 73 48 69 64 64 65 6e 2c 20 74 79  umn.IsHidden, ty
b590: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d  peof(Boolean));.
b5a0: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
b5b0: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
b5c0: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e 67 2c  leColumn.IsLong,
b5d0: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
b5e0: 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
b5f0: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
b600: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
b610: 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 2c 20  umn.IsReadOnly, 
b620: 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29  typeof(Boolean))
b630: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
b640: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
b650: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
b660: 6d 6e 2e 50 72 6f 76 69 64 65 72 53 70 65 63 69  mn.ProviderSpeci
b670: 66 69 63 44 61 74 61 54 79 70 65 2c 20 74 79 70  ficDataType, typ
b680: 65 6f 66 28 54 79 70 65 29 29 3b 0d 0a 20 20 20  eof(Type));..   
b690: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
b6a0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  dd(SchemaTableOp
b6b0: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66  tionalColumn.Def
b6c0: 61 75 6c 74 56 61 6c 75 65 2c 20 74 79 70 65 6f  aultValue, typeo
b6d0: 66 28 6f 62 6a 65 63 74 29 29 3b 0d 0a 20 20 20  f(object));..   
b6e0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
b6f0: 64 64 28 22 44 61 74 61 54 79 70 65 4e 61 6d 65  dd("DataTypeName
b700: 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67  ", typeof(string
b710: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
b720: 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 43 6f 6c 6c  olumns.Add("Coll
b730: 61 74 69 6f 6e 54 79 70 65 22 2c 20 74 79 70 65  ationType", type
b740: 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20  of(string));..  
b750: 20 20 20 20 74 62 6c 2e 42 65 67 69 6e 4c 6f 61      tbl.BeginLoa
b760: 64 44 61 74 61 28 29 3b 0d 0a 0d 0a 20 20 20 20  dData();....    
b770: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
b780: 3b 20 6e 20 3c 20 5f 66 69 65 6c 64 43 6f 75 6e  ; n < _fieldCoun
b790: 74 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b  t; n++)..      {
b7a0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
b7b0: 54 79 70 65 20 73 71 6c 54 79 70 65 20 3d 20 47  Type sqlType = G
b7c0: 65 74 53 51 4c 69 74 65 54 79 70 65 28 5f 66 6c  etSQLiteType(_fl
b7d0: 61 67 73 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ags, n);....    
b7e0: 20 20 20 20 72 6f 77 20 3d 20 74 62 6c 2e 4e 65      row = tbl.Ne
b7f0: 77 52 6f 77 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  wRow();....     
b800: 20 20 20 44 62 54 79 70 65 20 74 79 70 20 3d 20     DbType typ = 
b810: 73 71 6c 54 79 70 65 2e 54 79 70 65 3b 0d 0a 0d  sqlType.Type;...
b820: 0a 20 20 20 20 20 20 20 20 2f 2f 20 44 65 66 61  .        // Defa
b830: 75 6c 74 20 73 65 74 74 69 6e 67 73 20 66 6f 72  ult settings for
b840: 20 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20   the column..   
b850: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
b860: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d  ableColumn.Colum
b870: 6e 4e 61 6d 65 5d 20 3d 20 47 65 74 4e 61 6d 65  nName] = GetName
b880: 28 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f  (n);..        ro
b890: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
b8a0: 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61  umn.ColumnOrdina
b8b0: 6c 5d 20 3d 20 6e 3b 0d 0a 20 20 20 20 20 20 20  l] = n;..       
b8c0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
b8d0: 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a  Column.ColumnSiz
b8e0: 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65  e] = SQLiteConve
b8f0: 72 74 2e 44 62 54 79 70 65 54 6f 43 6f 6c 75 6d  rt.DbTypeToColum
b900: 6e 53 69 7a 65 28 74 79 70 29 3b 0d 0a 20 20 20  nSize(typ);..   
b910: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
b920: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72  ableColumn.Numer
b930: 69 63 50 72 65 63 69 73 69 6f 6e 5d 20 3d 20 53  icPrecision] = S
b940: 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44 62 54  QLiteConvert.DbT
b950: 79 70 65 54 6f 4e 75 6d 65 72 69 63 50 72 65 63  ypeToNumericPrec
b960: 69 73 69 6f 6e 28 74 79 70 29 3b 0d 0a 20 20 20  ision(typ);..   
b970: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
b980: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72  ableColumn.Numer
b990: 69 63 53 63 61 6c 65 5d 20 3d 20 53 51 4c 69 74  icScale] = SQLit
b9a0: 65 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54  eConvert.DbTypeT
b9b0: 6f 4e 75 6d 65 72 69 63 53 63 61 6c 65 28 74 79  oNumericScale(ty
b9c0: 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77  p);..        row
b9d0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
b9e0: 6d 6e 2e 50 72 6f 76 69 64 65 72 54 79 70 65 5d  mn.ProviderType]
b9f0: 20 3d 20 73 71 6c 54 79 70 65 2e 54 79 70 65 3b   = sqlType.Type;
ba00: 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ..        row[Sc
ba10: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
ba20: 49 73 4c 6f 6e 67 5d 20 3d 20 66 61 6c 73 65 3b  IsLong] = false;
ba30: 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ..        row[Sc
ba40: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
ba50: 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 20 74  AllowDBNull] = t
ba60: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f  rue;..        ro
ba70: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
ba80: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65  ionalColumn.IsRe
ba90: 61 64 4f 6e 6c 79 5d 20 3d 20 66 61 6c 73 65 3b  adOnly] = false;
baa0: 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ..        row[Sc
bab0: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
bac0: 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56 65 72  lColumn.IsRowVer
bad0: 73 69 6f 6e 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a  sion] = false;..
bae0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
baf0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
bb00: 55 6e 69 71 75 65 5d 20 3d 20 66 61 6c 73 65 3b  Unique] = false;
bb10: 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ..        row[Sc
bb20: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
bb30: 49 73 4b 65 79 5d 20 3d 20 66 61 6c 73 65 3b 0d  IsKey] = false;.
bb40: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
bb50: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
bb60: 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63  Column.IsAutoInc
bb70: 72 65 6d 65 6e 74 5d 20 3d 20 66 61 6c 73 65 3b  rement] = false;
bb80: 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ..        row[Sc
bb90: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
bba0: 44 61 74 61 54 79 70 65 5d 20 3d 20 47 65 74 46  DataType] = GetF
bbb0: 69 65 6c 64 54 79 70 65 28 6e 29 3b 0d 0a 20 20  ieldType(n);..  
bbc0: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
bbd0: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
bbe0: 75 6d 6e 2e 49 73 48 69 64 64 65 6e 5d 20 3d 20  umn.IsHidden] = 
bbf0: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
bc00: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
bc10: 6f 6c 75 6d 6e 2e 42 61 73 65 53 63 68 65 6d 61  olumn.BaseSchema
bc20: 4e 61 6d 65 5d 20 3d 20 5f 62 61 73 65 53 63 68  Name] = _baseSch
bc30: 65 6d 61 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  emaName;....    
bc40: 20 20 20 20 73 74 72 43 6f 6c 75 6d 6e 20 3d 20      strColumn = 
bc50: 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 5b 6e  columnToParent[n
bc60: 5d 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20  ].ColumnName;.. 
bc70: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
bc80: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
bc90: 73 74 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61  strColumn) == fa
bca0: 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54  lse) row[SchemaT
bcb0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  ableColumn.BaseC
bcc0: 6f 6c 75 6d 6e 4e 61 6d 65 5d 20 3d 20 73 74 72  olumnName] = str
bcd0: 43 6f 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20 20 20 20  Column;....     
bce0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
bcf0: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65  leColumn.IsExpre
bd00: 73 73 69 6f 6e 5d 20 3d 20 53 74 72 69 6e 67 2e  ssion] = String.
bd10: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74  IsNullOrEmpty(st
bd20: 72 43 6f 6c 75 6d 6e 29 3b 0d 0a 20 20 20 20 20  rColumn);..     
bd30: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
bd40: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 41 6c 69 61 73  leColumn.IsAlias
bd50: 65 64 5d 20 3d 20 28 53 74 72 69 6e 67 2e 43 6f  ed] = (String.Co
bd60: 6d 70 61 72 65 28 47 65 74 4e 61 6d 65 28 6e 29  mpare(GetName(n)
bd70: 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c 20 53 74 72  , strColumn, Str
bd80: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
bd90: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
bda0: 20 21 3d 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20   != 0);....     
bdb0: 20 20 20 74 65 6d 70 20 3d 20 63 6f 6c 75 6d 6e     temp = column
bdc0: 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 54 61 62 6c  ToParent[n].Tabl
bdd0: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
bde0: 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
bdf0: 6c 4f 72 45 6d 70 74 79 28 74 65 6d 70 29 20 3d  lOrEmpty(temp) =
be00: 3d 20 66 61 6c 73 65 29 20 72 6f 77 5b 53 63 68  = false) row[Sch
be10: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
be20: 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 20 3d 20  aseTableName] = 
be30: 74 65 6d 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  temp;....       
be40: 20 74 65 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f   temp = columnTo
be50: 50 61 72 65 6e 74 5b 6e 5d 2e 44 61 74 61 62 61  Parent[n].Databa
be60: 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  seName;..       
be70: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
be80: 6c 6c 4f 72 45 6d 70 74 79 28 74 65 6d 70 29 20  llOrEmpty(temp) 
be90: 3d 3d 20 66 61 6c 73 65 29 20 72 6f 77 5b 53 63  == false) row[Sc
bea0: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
beb0: 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61  lColumn.BaseCata
bec0: 6c 6f 67 4e 61 6d 65 5d 20 3d 20 74 65 6d 70 3b  logName] = temp;
bed0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  ....        stri
bee0: 6e 67 20 64 61 74 61 54 79 70 65 20 3d 20 6e 75  ng dataType = nu
bef0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ll;..        // 
bf00: 49 66 20 77 65 20 68 61 76 65 20 61 20 74 61 62  If we have a tab
bf10: 6c 65 2d 62 6f 75 6e 64 20 63 6f 6c 75 6d 6e 2c  le-bound column,
bf20: 20 65 78 74 72 61 63 74 20 74 68 65 20 65 78 74   extract the ext
bf30: 72 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ra information f
bf40: 72 6f 6d 20 69 74 0d 0a 20 20 20 20 20 20 20 20  rom it..        
bf50: 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
bf60: 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f 6c 75  lOrEmpty(strColu
bf70: 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20  mn) == false).. 
bf80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bf90: 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6c 6c 53      string collS
bfa0: 65 71 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  eq = null;..    
bfb0: 20 20 20 20 20 20 62 6f 6f 6c 20 62 4e 6f 74 4e        bool bNotN
bfc0: 75 6c 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  ull = false;..  
bfd0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 62 50 72          bool bPr
bfe0: 69 6d 61 72 79 4b 65 79 20 3d 20 66 61 6c 73 65  imaryKey = false
bff0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f  ;..          boo
c000: 6c 20 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74  l bAutoIncrement
c010: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
c020: 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
c030: 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Size;....       
c040: 20 20 20 2f 2f 20 47 65 74 20 74 68 65 20 63 6f     // Get the co
c050: 6c 75 6d 6e 20 6d 65 74 61 20 64 61 74 61 0d 0a  lumn meta data..
c060: 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61            _comma
c070: 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73  nd.Connection._s
c080: 71 6c 2e 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74  ql.ColumnMetaDat
c090: 61 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a(..            
c0a0: 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65  (string)row[Sche
c0b0: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
c0c0: 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f  olumn.BaseCatalo
c0d0: 67 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20  gName],..       
c0e0: 20 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77       (string)row
c0f0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
c100: 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65  mn.BaseTableName
c110: 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ],..            
c120: 73 74 72 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20  strColumn,..    
c130: 20 20 20 20 20 20 20 20 72 65 66 20 64 61 74 61          ref data
c140: 54 79 70 65 2c 20 72 65 66 20 63 6f 6c 6c 53 65  Type, ref collSe
c150: 71 2c 20 72 65 66 20 62 4e 6f 74 4e 75 6c 6c 2c  q, ref bNotNull,
c160: 20 72 65 66 20 62 50 72 69 6d 61 72 79 4b 65 79   ref bPrimaryKey
c170: 2c 20 72 65 66 20 62 41 75 74 6f 49 6e 63 72 65  , ref bAutoIncre
c180: 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ment);....      
c190: 20 20 20 20 69 66 20 28 62 4e 6f 74 4e 75 6c 6c      if (bNotNull
c1a0: 20 7c 7c 20 62 50 72 69 6d 61 72 79 4b 65 79 29   || bPrimaryKey)
c1b0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
c1c0: 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75  Column.AllowDBNu
c1d0: 6c 6c 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  ll] = false;....
c1e0: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
c1f0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c200: 49 73 4b 65 79 5d 20 3d 20 62 50 72 69 6d 61 72  IsKey] = bPrimar
c210: 79 4b 65 79 20 26 26 20 43 6f 75 6e 74 50 61 72  yKey && CountPar
c220: 65 6e 74 73 28 70 61 72 65 6e 74 54 6f 43 6f 6c  ents(parentToCol
c230: 75 6d 6e 73 29 20 3c 3d 20 31 3b 0d 0a 20 20 20  umns) <= 1;..   
c240: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
c250: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
c260: 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65  lumn.IsAutoIncre
c270: 6d 65 6e 74 5d 20 3d 20 62 41 75 74 6f 49 6e 63  ment] = bAutoInc
c280: 72 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20  rement;..       
c290: 20 20 20 72 6f 77 5b 22 43 6f 6c 6c 61 74 69 6f     row["Collatio
c2a0: 6e 54 79 70 65 22 5d 20 3d 20 63 6f 6c 6c 53 65  nType"] = collSe
c2b0: 71 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  q;....          
c2c0: 2f 2f 20 46 6f 72 20 74 79 70 65 73 20 6c 69 6b  // For types lik
c2d0: 65 20 76 61 72 63 68 61 72 28 35 30 29 20 61 6e  e varchar(50) an
c2e0: 64 20 73 75 63 68 2c 20 65 78 74 72 61 63 74 20  d such, extract 
c2f0: 74 68 65 20 73 69 7a 65 0d 0a 20 20 20 20 20 20  the size..      
c300: 20 20 20 20 61 72 53 69 7a 65 20 3d 20 64 61 74      arSize = dat
c310: 61 54 79 70 65 2e 53 70 6c 69 74 28 27 28 27 29  aType.Split('(')
c320: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
c330: 28 61 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e  (arSize.Length >
c340: 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b   1)..          {
c350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 61  ..            da
c360: 74 61 54 79 70 65 20 3d 20 61 72 53 69 7a 65 5b  taType = arSize[
c370: 30 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  0];..           
c380: 20 61 72 53 69 7a 65 20 3d 20 61 72 53 69 7a 65   arSize = arSize
c390: 5b 31 5d 2e 53 70 6c 69 74 28 27 29 27 29 3b 0d  [1].Split(')');.
c3a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
c3b0: 28 61 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e  (arSize.Length >
c3c0: 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   1)..           
c3d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c3e0: 20 20 61 72 53 69 7a 65 20 3d 20 61 72 53 69 7a    arSize = arSiz
c3f0: 65 5b 30 5d 2e 53 70 6c 69 74 28 27 2c 27 2c 20  e[0].Split(',', 
c400: 27 2e 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  '.');..         
c410: 20 20 20 20 20 69 66 20 28 73 71 6c 54 79 70 65       if (sqlType
c420: 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e  .Type == DbType.
c430: 42 69 6e 61 72 79 20 7c 7c 20 53 51 4c 69 74 65  Binary || SQLite
c440: 43 6f 6e 76 65 72 74 2e 49 73 53 74 72 69 6e 67  Convert.IsString
c450: 44 62 54 79 70 65 28 73 71 6c 54 79 70 65 2e 54  DbType(sqlType.T
c460: 79 70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ype))..         
c470: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c480: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
c490: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f  maTableColumn.Co
c4a0: 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20 43 6f 6e 76  lumnSize] = Conv
c4b0: 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53 69  ert.ToInt32(arSi
c4c0: 7a 65 5b 30 5d 2c 20 43 75 6c 74 75 72 65 49 6e  ze[0], CultureIn
c4d0: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
c4e0: 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ure);..         
c4f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c500: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
c510: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
c530: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
c540: 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63 69 73  mn.NumericPrecis
c550: 69 6f 6e 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54  ion] = Convert.T
c560: 6f 49 6e 74 33 32 28 61 72 53 69 7a 65 5b 30 5d  oInt32(arSize[0]
c570: 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  , CultureInfo.In
c580: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b  variantCulture);
c590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c5a0: 20 20 69 66 20 28 61 72 53 69 7a 65 2e 4c 65 6e    if (arSize.Len
c5b0: 67 74 68 20 3e 20 31 29 0d 0a 20 20 20 20 20 20  gth > 1)..      
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
c5d0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c5e0: 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c 65 5d 20  n.NumericScale] 
c5f0: 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33  = Convert.ToInt3
c600: 32 28 61 72 53 69 7a 65 5b 31 5d 2c 20 43 75 6c  2(arSize[1], Cul
c610: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
c620: 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20  ntCulture);..   
c630: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
c640: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
c650: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
c660: 20 20 20 20 20 20 69 66 20 28 77 61 6e 74 44 65        if (wantDe
c670: 66 61 75 6c 74 56 61 6c 75 65 29 0d 0a 20 20 20  faultValue)..   
c680: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c690: 20 20 20 20 20 20 2f 2f 20 44 65 74 65 72 6d 69        // Determi
c6a0: 6e 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  ne the default v
c6b0: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c  alue for the col
c6c0: 75 6d 6e 2c 20 77 68 69 63 68 20 73 75 63 6b 73  umn, which sucks
c6d0: 20 62 65 63 61 75 73 65 20 77 65 20 68 61 76 65   because we have
c6e0: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 73 63   to query the sc
c6f0: 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 63 6f  hema for each co
c700: 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  lumn..          
c710: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
c720: 6f 6d 6d 61 6e 64 20 63 6d 64 54 61 62 6c 65 20  ommand cmdTable 
c730: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d  = new SQLiteComm
c740: 61 6e 64 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  and(HelperMethod
c750: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43  s.StringFormat(C
c760: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
c770: 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 52  iantCulture, "PR
c780: 41 47 4d 41 20 5b 7b 30 7d 5d 2e 54 41 42 4c 45  AGMA [{0}].TABLE
c790: 5f 49 4e 46 4f 28 5b 7b 31 7d 5d 29 22 2c 0d 0a  _INFO([{1}])",..
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
c7b0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
c7c0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65  ionalColumn.Base
c7d0: 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 2c 0d 0a 20  CatalogName],.. 
c7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
c7f0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
c800: 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65  mn.BaseTableName
c810: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]..             
c820: 20 29 2c 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e   ), _command.Con
c830: 6e 65 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20  nection))..     
c840: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 44 62         using (Db
c850: 44 61 74 61 52 65 61 64 65 72 20 72 64 54 61 62  DataReader rdTab
c860: 6c 65 20 3d 20 63 6d 64 54 61 62 6c 65 2e 45 78  le = cmdTable.Ex
c870: 65 63 75 74 65 52 65 61 64 65 72 28 29 29 0d 0a  ecuteReader())..
c880: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c890: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
c8a0: 46 69 6e 64 20 74 68 65 20 6d 61 74 63 68 69 6e  Find the matchin
c8b0: 67 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20  g column..      
c8c0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 72          while (r
c8d0: 64 54 61 62 6c 65 2e 52 65 61 64 28 29 29 0d 0a  dTable.Read())..
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
c8f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c900: 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70   if (String.Comp
c910: 61 72 65 28 28 73 74 72 69 6e 67 29 72 6f 77 5b  are((string)row[
c920: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c930: 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65  n.BaseColumnName
c940: 5d 2c 20 72 64 54 61 62 6c 65 2e 47 65 74 53 74  ], rdTable.GetSt
c950: 72 69 6e 67 28 31 29 2c 20 53 74 72 69 6e 67 43  ring(1), StringC
c960: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
c970: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
c980: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
c990: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c9a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 64 54           if (rdT
c9b0: 61 62 6c 65 2e 49 73 44 42 4e 75 6c 6c 28 34 29  able.IsDBNull(4)
c9c0: 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20   == false)..    
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9e0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
c9f0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44 65  ptionalColumn.De
ca00: 66 61 75 6c 74 56 61 6c 75 65 5d 20 3d 20 72 64  faultValue] = rd
ca10: 54 61 62 6c 65 5b 34 5d 3b 0d 0a 0d 0a 20 20 20  Table[4];....   
ca20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
ca30: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
ca40: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ca50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
ca60: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ca70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
ca80: 20 20 20 2f 2f 20 44 65 74 65 72 6d 69 6e 65 20     // Determine 
ca90: 49 73 55 6e 69 71 75 65 20 70 72 6f 70 65 72 6c  IsUnique properl
caa0: 79 2c 20 77 68 69 63 68 20 69 73 20 61 20 70 61  y, which is a pa
cab0: 69 6e 20 69 6e 20 74 68 65 20 62 75 74 74 21 0d  in in the butt!.
cac0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77  .          if (w
cad0: 61 6e 74 55 6e 69 71 75 65 49 6e 66 6f 29 0d 0a  antUniqueInfo)..
cae0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
caf0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 73 74           if ((st
cb00: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
cb10: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
cb20: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
cb30: 6d 65 5d 20 21 3d 20 73 74 72 43 61 74 61 6c 6f  me] != strCatalo
cb40: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
cb50: 20 7c 7c 20 28 73 74 72 69 6e 67 29 72 6f 77 5b   || (string)row[
cb60: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
cb70: 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d  n.BaseTableName]
cb80: 20 21 3d 20 73 74 72 54 61 62 6c 65 29 0d 0a 20   != strTable).. 
cb90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 43              strC
cbb0: 61 74 61 6c 6f 67 20 3d 20 28 73 74 72 69 6e 67  atalog = (string
cbc0: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
cbd0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42  OptionalColumn.B
cbe0: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 3b  aseCatalogName];
cbf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cc00: 73 74 72 54 61 62 6c 65 20 3d 20 28 73 74 72 69  strTable = (stri
cc10: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
cc20: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62  leColumn.BaseTab
cc30: 6c 65 4e 61 6d 65 5d 3b 0d 0a 0d 0a 20 20 20 20  leName];....    
cc40: 20 20 20 20 20 20 20 20 20 20 74 62 6c 49 6e 64            tblInd
cc50: 65 78 65 73 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  exes = _command.
cc60: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53 63  Connection.GetSc
cc70: 68 65 6d 61 28 22 49 6e 64 65 78 65 73 22 2c 20  hema("Indexes", 
cc80: 6e 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b 0d 0a  new string[] {..
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cca0: 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65  (string)row[Sche
ccb0: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
ccc0: 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f  olumn.BaseCatalo
ccd0: 67 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20  gName],..       
cce0: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 0d 0a           null,..
ccf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd00: 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65  (string)row[Sche
cd10: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
cd20: 73 65 54 61 62 6c 65 4e 61 6d 65 5d 2c 0d 0a 20  seTableName],.. 
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
cd40: 75 6c 6c 20 7d 29 3b 0d 0a 20 20 20 20 20 20 20  ull });..       
cd50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
cd60: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 44        foreach (D
cd70: 61 74 61 52 6f 77 20 72 6f 77 49 6e 64 65 78 65  ataRow rowIndexe
cd80: 73 20 69 6e 20 74 62 6c 49 6e 64 65 78 65 73 2e  s in tblIndexes.
cd90: 52 6f 77 73 29 0d 0a 20 20 20 20 20 20 20 20 20  Rows)..         
cda0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cdb0: 20 20 20 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75      tblIndexColu
cdc0: 6d 6e 73 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43  mns = _command.C
cdd0: 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53 63 68  onnection.GetSch
cde0: 65 6d 61 28 22 49 6e 64 65 78 43 6f 6c 75 6d 6e  ema("IndexColumn
cdf0: 73 22 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b 5d  s", new string[]
ce00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ce10: 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77 5b      (string)row[
ce20: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
ce30: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61  nalColumn.BaseCa
ce40: 74 61 6c 6f 67 4e 61 6d 65 5d 2c 0d 0a 20 20 20  talogName],..   
ce50: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
ce60: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
ce70: 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77 5b      (string)row[
ce80: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
ce90: 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d  n.BaseTableName]
cea0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ceb0: 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77 49 6e     (string)rowIn
cec0: 64 65 78 65 73 5b 22 49 4e 44 45 58 5f 4e 41 4d  dexes["INDEX_NAM
ced0: 45 22 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  E"],..          
cee0: 20 20 20 20 20 20 6e 75 6c 6c 0d 0a 20 20 20 20        null..    
cef0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 3b 0d              });.
cf00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  .              f
cf10: 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f 77 20  oreach (DataRow 
cf20: 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64 65 78 20 69  rowColumnIndex i
cf30: 6e 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e  n tblIndexColumn
cf40: 73 2e 52 6f 77 73 29 0d 0a 20 20 20 20 20 20 20  s.Rows)..       
cf50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
cf60: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
cf70: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 53 51 4c  ring.Compare(SQL
cf80: 69 74 65 43 6f 6e 76 65 72 74 2e 47 65 74 53 74  iteConvert.GetSt
cf90: 72 69 6e 67 4f 72 4e 75 6c 6c 28 72 6f 77 43 6f  ringOrNull(rowCo
cfa0: 6c 75 6d 6e 49 6e 64 65 78 5b 22 43 4f 4c 55 4d  lumnIndex["COLUM
cfb0: 4e 5f 4e 41 4d 45 22 5d 29 2c 20 73 74 72 43 6f  N_NAME"]), strCo
cfc0: 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70  lumn, StringComp
cfd0: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
cfe0: 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d  noreCase) == 0).
cff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d000: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d010: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
d020: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42              // B
d030: 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 75 72 65  UGFIX: Make sure
d040: 20 74 68 61 74 20 77 65 20 6f 6e 6c 79 20 66 6c   that we only fl
d050: 61 67 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 61  ag this column a
d060: 73 20 22 75 6e 69 71 75 65 22 0d 0a 20 20 20 20  s "unique"..    
d070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
d080: 20 20 20 20 20 20 20 20 20 69 66 20 77 65 20 61           if we a
d090: 72 65 20 6e 6f 74 20 70 72 6f 63 65 73 73 69 6e  re not processin
d0a0: 67 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 20 6f  g of some kind o
d0b0: 66 20 6d 75 6c 74 69 2d 74 61 62 6c 65 0d 0a 20  f multi-table.. 
d0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0d0: 20 2f 2f 20 20 20 20 20 20 20 20 20 63 6f 6e 73   //         cons
d0e0: 74 72 75 63 74 20 28 69 2e 65 2e 20 61 20 6a 6f  truct (i.e. a jo
d0f0: 69 6e 29 20 62 65 63 61 75 73 65 20 69 6e 20 74  in) because in t
d100: 68 61 74 20 63 61 73 65 20 77 65 20 6d 75 73 74  hat case we must
d110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d120: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 61      //         a
d130: 6c 6c 6f 77 20 64 75 70 6c 69 63 61 74 65 20 76  llow duplicate v
d140: 61 6c 75 65 73 20 28 72 65 66 65 72 20 74 6f 20  alues (refer to 
d150: 74 69 63 6b 65 74 20 5b 37 65 33 66 61 39 33 37  ticket [7e3fa937
d160: 34 34 5d 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  44])...         
d170: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
d180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d190: 66 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  f (parentToColum
d1a0: 6e 73 2e 43 6f 75 6e 74 20 3d 3d 20 31 20 26 26  ns.Count == 1 &&
d1b0: 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73   tblIndexColumns
d1c0: 2e 52 6f 77 73 2e 43 6f 75 6e 74 20 3d 3d 20 31  .Rows.Count == 1
d1d0: 20 26 26 20 28 62 6f 6f 6c 29 72 6f 77 5b 53 63   && (bool)row[Sc
d1e0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
d1f0: 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 3d 20  AllowDBNull] == 
d200: 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 20 20  false)..        
d210: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
d220: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
d230: 6e 2e 49 73 55 6e 69 71 75 65 5d 20 3d 20 72 6f  n.IsUnique] = ro
d240: 77 49 6e 64 65 78 65 73 5b 22 55 4e 49 51 55 45  wIndexes["UNIQUE
d250: 22 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  "];....         
d260: 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 69           // If i
d270: 74 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72  ts an integer pr
d280: 69 6d 61 72 79 20 6b 65 79 20 61 6e 64 20 74 68  imary key and th
d290: 65 20 6f 6e 6c 79 20 70 72 69 6d 61 72 79 20 6b  e only primary k
d2a0: 65 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c  ey in the table,
d2b0: 20 74 68 65 6e 20 69 74 73 20 61 20 72 6f 77 69   then its a rowi
d2c0: 64 20 61 6c 69 61 73 20 61 6e 64 20 69 73 20 61  d alias and is a
d2d0: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0d 0a 20 20  utoincrement..  
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2f0: 2f 2f 20 4e 4f 54 45 3a 20 20 43 75 72 72 65 6e  // NOTE:  Curren
d300: 74 6c 79 20 63 6f 6d 6d 65 6e 74 65 64 20 6f 75  tly commented ou
d310: 74 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69  t because this i
d320: 73 20 6e 6f 74 20 61 6c 77 61 79 73 20 74 68 65  s not always the
d330: 20 64 65 73 69 72 65 64 20 62 65 68 61 76 69 6f   desired behavio
d340: 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  r.  For example,
d350: 20 61 20 31 3a 31 20 72 65 6c 61 74 69 6f 6e 73   a 1:1 relations
d360: 68 69 70 20 77 69 74 68 0d 0a 20 20 20 20 20 20  hip with..      
d370: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
d380: 20 20 20 20 20 20 61 6e 6f 74 68 65 72 20 74 61        another ta
d390: 62 6c 65 2c 20 77 68 65 72 65 20 74 68 65 20 6f  ble, where the o
d3a0: 74 68 65 72 20 74 61 62 6c 65 20 69 73 20 61 75  ther table is au
d3b0: 74 6f 69 6e 63 72 65 6d 65 6e 74 2c 20 62 75 74  toincrement, but
d3c0: 20 74 68 69 73 20 6f 6e 65 20 69 73 20 6e 6f 74   this one is not
d3d0: 2c 20 61 6e 64 20 75 73 65 73 20 74 68 65 20 72  , and uses the r
d3e0: 6f 77 69 64 20 66 72 6f 6d 20 74 68 65 20 6f 74  owid from the ot
d3f0: 68 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  her...          
d400: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
d410: 20 20 49 74 20 69 73 20 73 61 66 65 72 20 74 6f    It is safer to
d420: 20 6f 6e 6c 79 20 73 65 74 20 41 75 74 6f 69 6e   only set Autoin
d430: 63 72 65 6d 65 6e 74 20 6f 6e 20 74 61 62 6c 65  crement on table
d440: 73 20 77 68 65 72 65 20 77 65 27 72 65 20 53 55  s where we're SU
d450: 52 45 20 74 68 65 20 75 73 65 72 20 73 70 65 63  RE the user spec
d460: 69 66 69 65 64 20 41 55 54 4f 49 4e 43 52 45 4d  ified AUTOINCREM
d470: 45 4e 54 2c 20 65 76 65 6e 20 69 66 20 69 74 73  ENT, even if its
d480: 20 61 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 2e   a rowid column.
d490: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d4a0: 20 20 20 20 20 20 69 66 20 28 74 62 6c 49 6e 64        if (tblInd
d4b0: 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73 2e 43  exColumns.Rows.C
d4c0: 6f 75 6e 74 20 3d 3d 20 31 20 26 26 20 28 62 6f  ount == 1 && (bo
d4d0: 6f 6c 29 72 6f 77 49 6e 64 65 78 65 73 5b 22 50  ol)rowIndexes["P
d4e0: 52 49 4d 41 52 59 5f 4b 45 59 22 5d 20 3d 3d 20  RIMARY_KEY"] == 
d4f0: 74 72 75 65 20 26 26 20 53 74 72 69 6e 67 2e 49  true && String.I
d500: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74  sNullOrEmpty(dat
d510: 61 54 79 70 65 29 20 3d 3d 20 66 61 6c 73 65 20  aType) == false 
d520: 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
d530: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 43          String.C
d540: 6f 6d 70 61 72 65 28 64 61 74 61 54 79 70 65 2c  ompare(dataType,
d550: 20 22 69 6e 74 65 67 65 72 22 2c 20 53 74 72 69   "integer", Stri
d560: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
d570: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
d580: 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
d590: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5b0: 2f 2f 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61  //  row[SchemaTa
d5c0: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
d5d0: 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e  n.IsAutoIncremen
d5e0: 74 5d 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  t] = true;..    
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
d600: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d610: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
d620: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
d630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
d640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
d650: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
d660: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
d670: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
d680: 79 28 64 61 74 61 54 79 70 65 29 29 0d 0a 20 20  y(dataType))..  
d690: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d6a0: 20 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e         TypeAffin
d6b0: 69 74 79 20 61 66 66 69 6e 20 3d 20 54 79 70 65  ity affin = Type
d6c0: 41 66 66 69 6e 69 74 79 2e 55 6e 69 6e 69 74 69  Affinity.Uniniti
d6d0: 61 6c 69 7a 65 64 3b 0d 0a 20 20 20 20 20 20 20  alized;..       
d6e0: 20 20 20 20 20 64 61 74 61 54 79 70 65 20 3d 20       dataType = 
d6f0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
d700: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65  ._sql.ColumnType
d710: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
d720: 74 2c 20 6e 2c 20 72 65 66 20 61 66 66 69 6e 29  t, n, ref affin)
d730: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
d740: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
d750: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
d760: 6d 70 74 79 28 64 61 74 61 54 79 70 65 29 20 3d  mpty(dataType) =
d770: 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20  = false)..      
d780: 20 20 20 20 20 20 72 6f 77 5b 22 44 61 74 61 54        row["DataT
d790: 79 70 65 4e 61 6d 65 22 5d 20 3d 20 64 61 74 61  ypeName"] = data
d7a0: 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  Type;..        }
d7b0: 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 52 6f  ..        tbl.Ro
d7c0: 77 73 2e 41 64 64 28 72 6f 77 29 3b 0d 0a 20 20  ws.Add(row);..  
d7d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
d7e0: 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  f (_keyInfo != n
d7f0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 5f 6b  ull)..        _k
d800: 65 79 49 6e 66 6f 2e 41 70 70 65 6e 64 53 63 68  eyInfo.AppendSch
d810: 65 6d 61 54 61 62 6c 65 28 74 62 6c 29 3b 0d 0a  emaTable(tbl);..
d820: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 41 63 63 65  ..      tbl.Acce
d830: 70 74 43 68 61 6e 67 65 73 28 29 3b 0d 0a 20 20  ptChanges();..  
d840: 20 20 20 20 74 62 6c 2e 45 6e 64 4c 6f 61 64 44      tbl.EndLoadD
d850: 61 74 61 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ata();....      
d860: 72 65 74 75 72 6e 20 74 62 6c 3b 0d 0a 20 20 20  return tbl;..   
d870: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
d880: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
d890: 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63   Retrieves the c
d8a0: 6f 6c 75 6d 6e 20 61 73 20 61 20 73 74 72 69 6e  olumn as a strin
d8b0: 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  g..    /// </sum
d8c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
d8d0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
d8e0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
d8f0: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
d900: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
d910: 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e  s>string</return
d920: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
d930: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
d940: 65 74 53 74 72 69 6e 67 28 69 6e 74 20 69 29 0d  etString(int i).
d950: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
d960: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
d970: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
d980: 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  ForGet();....   
d990: 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73       if ((_flags
d9a0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
d9b0: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
d9c0: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
d9d0: 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c  allbacks) == SQL
d9e0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
d9f0: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
da00: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
da10: 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ks)..        {..
da20: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
da30: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
da40: 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51  e value = new SQ
da50: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
da60: 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue();..        
da70: 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74      bool complet
da80: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
da90: 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75    InvokeReadValu
daa0: 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77  eCallback(i, new
dab0: 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65   SQLiteReadValue
dac0: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
dad0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
dae0: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
daf0: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
db00: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
db10: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
db20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61         return va
db30: 6c 75 65 2e 53 74 72 69 6e 67 56 61 6c 75 65 3b  lue.StringValue;
db40: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
db50: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
db60: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
db70: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
db80: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
db90: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
dba0: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 53 74  n _keyInfo.GetSt
dbb0: 72 69 6e 67 28 69 20 2d 20 50 72 69 76 61 74 65  ring(i - Private
dbc0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
dbd0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  t);....        i
dbe0: 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  f ((_flags & SQL
dbf0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
dc00: 67 73 2e 4e 6f 56 65 72 69 66 79 54 65 78 74 41  gs.NoVerifyTextA
dc10: 66 66 69 6e 69 74 79 29 20 21 3d 20 53 51 4c 69  ffinity) != SQLi
dc20: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
dc30: 73 2e 4e 6f 56 65 72 69 66 79 54 65 78 74 41 66  s.NoVerifyTextAf
dc40: 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20  finity)..       
dc50: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
dc60: 69 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67  i, DbType.String
dc70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
dc80: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
dc90: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65  ement._sql.GetTe
dca0: 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  xt(_activeStatem
dcb0: 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d  ent, i);..    }.
dcc0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
dcd0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
dce0: 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75  trieves the colu
dcf0: 6d 6e 20 61 73 20 61 6e 20 6f 62 6a 65 63 74 20  mn as an object 
dd00: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
dd10: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
dd20: 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20  datatype of the 
dd30: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20  column..    /// 
dd40: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
dd50: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
dd60: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
dd70: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
dd80: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
dd90: 65 74 75 72 6e 73 3e 6f 62 6a 65 63 74 3c 2f 72  eturns>object</r
dda0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
ddb0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a  lic override obj
ddc0: 65 63 74 20 47 65 74 56 61 6c 75 65 28 69 6e 74  ect GetValue(int
ddd0: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
dde0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
ddf0: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
de00: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
de10: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
de20: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
de30: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
de40: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
de50: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
de60: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
de70: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
de80: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
de90: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
dea0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
deb0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
dec0: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
ded0: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
dee0: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
def0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
df00: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
df10: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
df20: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
df30: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
df40: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
df50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df60: 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75  null, value), ou
df70: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a  t complete);....
df80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
df90: 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20  complete)..     
dfa0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
dfb0: 6e 20 76 61 6c 75 65 2e 56 61 6c 75 65 3b 0d 0a  n value.Value;..
dfc0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
dfd0: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
dfe0: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
dff0: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
e000: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
e010: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
e020: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 56 61 6c 75  _keyInfo.GetValu
e030: 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  e(i - PrivateVis
e040: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
e050: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
e060: 74 65 54 79 70 65 20 74 79 70 20 3d 20 47 65 74  teType typ = Get
e070: 53 51 4c 69 74 65 54 79 70 65 28 5f 66 6c 61 67  SQLiteType(_flag
e080: 73 2c 20 69 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  s, i);....      
e090: 20 20 69 66 20 28 28 28 5f 66 6c 61 67 73 20 26    if (((_flags &
e0a0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
e0b0: 6e 46 6c 61 67 73 2e 44 65 74 65 63 74 54 65 78  nFlags.DetectTex
e0c0: 74 41 66 66 69 6e 69 74 79 29 20 3d 3d 20 53 51  tAffinity) == SQ
e0d0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
e0e0: 61 67 73 2e 44 65 74 65 63 74 54 65 78 74 41 66  ags.DetectTextAf
e0f0: 66 69 6e 69 74 79 29 20 26 26 0d 0a 20 20 20 20  finity) &&..    
e100: 20 20 20 20 20 20 20 20 28 28 74 79 70 20 3d 3d          ((typ ==
e110: 20 6e 75 6c 6c 29 20 7c 7c 20 28 74 79 70 2e 41   null) || (typ.A
e120: 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41  ffinity == TypeA
e130: 66 66 69 6e 69 74 79 2e 54 65 78 74 29 29 29 0d  ffinity.Text))).
e140: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e150: 20 20 20 20 20 20 20 20 74 79 70 20 3d 20 47 65          typ = Ge
e160: 74 53 51 4c 69 74 65 54 79 70 65 28 0d 0a 20 20  tSQLiteType(..  
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
e180: 70 2c 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  p, _activeStatem
e190: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74  ent._sql.GetText
e1a0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
e1b0: 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 20 20 20  t, i));..       
e1c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
e1d0: 20 69 66 20 28 28 28 5f 66 6c 61 67 73 20 26 20   if (((_flags & 
e1e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e1f0: 46 6c 61 67 73 2e 44 65 74 65 63 74 53 74 72 69  Flags.DetectStri
e200: 6e 67 54 79 70 65 29 20 3d 3d 20 53 51 4c 69 74  ngType) == SQLit
e210: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
e220: 2e 44 65 74 65 63 74 53 74 72 69 6e 67 54 79 70  .DetectStringTyp
e230: 65 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  e) &&..         
e240: 20 20 20 28 28 74 79 70 20 3d 3d 20 6e 75 6c 6c     ((typ == null
e250: 29 20 7c 7c 20 53 51 4c 69 74 65 43 6f 6e 76 65  ) || SQLiteConve
e260: 72 74 2e 49 73 53 74 72 69 6e 67 44 62 54 79 70  rt.IsStringDbTyp
e270: 65 28 74 79 70 2e 54 79 70 65 29 29 29 0d 0a 20  e(typ.Type))).. 
e280: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e290: 20 20 20 20 20 20 74 79 70 20 3d 20 47 65 74 53        typ = GetS
e2a0: 51 4c 69 74 65 54 79 70 65 28 0d 0a 20 20 20 20  QLiteType(..    
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 2c              typ,
e2c0: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
e2d0: 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f  t._sql.GetText(_
e2e0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
e2f0: 20 69 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d   i));..        }
e300: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
e310: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
e320: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 56 61 6c 75  ent._sql.GetValu
e330: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
e340: 6e 74 2c 20 5f 66 6c 61 67 73 2c 20 69 2c 20 74  nt, _flags, i, t
e350: 79 70 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  yp);..    }.... 
e360: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
e370: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 65 69  ..    /// Retrei
e380: 76 65 73 20 74 68 65 20 76 61 6c 75 65 73 20 6f  ves the values o
e390: 66 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d  f multiple colum
e3a0: 6e 73 2c 20 75 70 20 74 6f 20 74 68 65 20 73 69  ns, up to the si
e3b0: 7a 65 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69  ze of the suppli
e3c0: 65 64 20 61 72 72 61 79 0d 0a 20 20 20 20 2f 2f  ed array..    //
e3d0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
e3e0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
e3f0: 65 3d 22 76 61 6c 75 65 73 22 3e 54 68 65 20 61  e="values">The a
e400: 72 72 61 79 20 74 6f 20 66 69 6c 6c 20 77 69 74  rray to fill wit
e410: 68 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 74 68  h values from th
e420: 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
e430: 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73   current results
e440: 65 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  et</param>..    
e450: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
e460: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
e470: 6e 73 20 72 65 74 72 69 65 76 65 64 3c 2f 72 65  ns retrieved</re
e480: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
e490: 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  ic override int 
e4a0: 47 65 74 56 61 6c 75 65 73 28 6f 62 6a 65 63 74  GetValues(object
e4b0: 5b 5d 20 76 61 6c 75 65 73 29 0d 0a 20 20 20 20  [] values)..    
e4c0: 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69  {..      CheckDi
e4d0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
e4e0: 20 20 20 69 6e 74 20 6e 4d 61 78 20 3d 20 46 69     int nMax = Fi
e4f0: 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20  eldCount;..     
e500: 20 69 66 20 28 76 61 6c 75 65 73 2e 4c 65 6e 67   if (values.Leng
e510: 74 68 20 3c 20 6e 4d 61 78 29 20 6e 4d 61 78 20  th < nMax) nMax 
e520: 3d 20 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 3b  = values.Length;
e530: 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69  ....      for (i
e540: 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 6e 4d  nt n = 0; n < nM
e550: 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20  ax; n++)..      
e560: 7b 0d 0a 20 20 20 20 20 20 20 20 76 61 6c 75 65  {..        value
e570: 73 5b 6e 5d 20 3d 20 47 65 74 56 61 6c 75 65 28  s[n] = GetValue(
e580: 6e 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  n);..      }....
e590: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 4d 61        return nMa
e5a0: 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  x;..    }....   
e5b0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
e5c0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
e5d0: 61 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 63 6f 6e  a collection con
e5e0: 74 61 69 6e 69 6e 67 20 61 6c 6c 20 74 68 65 20  taining all the 
e5f0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 6e 64  column names and
e600: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 0d   values for the.
e610: 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74  .    /// current
e620: 20 72 6f 77 20 6f 66 20 64 61 74 61 20 69 6e 20   row of data in 
e630: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75  the current resu
e640: 6c 74 73 65 74 2c 20 69 66 20 61 6e 79 2e 20 20  ltset, if any.  
e650: 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 0d 0a  If there is no..
e660: 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20      /// current 
e670: 72 6f 77 20 6f 72 20 6e 6f 20 63 75 72 72 65 6e  row or no curren
e680: 74 20 72 65 73 75 6c 74 73 65 74 2c 20 61 6e 20  t resultset, an 
e690: 65 78 63 65 70 74 69 6f 6e 20 6d 61 79 20 62 65  exception may be
e6a0: 20 74 68 72 6f 77 6e 2e 0d 0a 20 20 20 20 2f 2f   thrown...    //
e6b0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
e6c0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
e6d0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6c  .    /// The col
e6e0: 6c 65 63 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 69  lection containi
e6f0: 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  ng the column na
e700: 6d 65 20 61 6e 64 20 76 61 6c 75 65 20 69 6e 66  me and value inf
e710: 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65  ormation for the
e720: 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e  ..    /// curren
e730: 74 20 72 6f 77 20 6f 66 20 64 61 74 61 20 69 6e  t row of data in
e740: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73   the current res
e750: 75 6c 74 73 65 74 20 6f 72 20 6e 75 6c 6c 20 69  ultset or null i
e760: 66 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  f this informati
e770: 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 63 61 6e 6e  on..    /// cann
e780: 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0d  ot be obtained..
e790: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
e7a0: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
e7b0: 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63 74  NameValueCollect
e7c0: 69 6f 6e 20 47 65 74 56 61 6c 75 65 73 28 29 0d  ion GetValues().
e7d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
e7e0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
e7f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
e800: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
e810: 74 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 5f  t == null) || (_
e820: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
e830: 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  _sql == null))..
e840: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
e850: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
e860: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
e870: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e  );....        in
e880: 74 20 6e 4d 61 78 20 3d 20 50 72 69 76 61 74 65  t nMax = Private
e890: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
e8a0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 4e 61 6d 65  t;..        Name
e8b0: 56 61 6c 75 65 43 6f 6c 6c 65 63 74 69 6f 6e 20  ValueCollection 
e8c0: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 4e 61 6d  result = new Nam
e8d0: 65 56 61 6c 75 65 43 6f 6c 6c 65 63 74 69 6f 6e  eValueCollection
e8e0: 28 6e 4d 61 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  (nMax);....     
e8f0: 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20     for (int n = 
e900: 30 3b 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b  0; n < nMax; n++
e910: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
e920: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
e930: 20 6e 61 6d 65 20 3d 20 5f 61 63 74 69 76 65 53   name = _activeS
e940: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f  tatement._sql.Co
e950: 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63 74 69 76 65  lumnName(_active
e960: 53 74 61 74 65 6d 65 6e 74 2c 20 6e 29 3b 0d 0a  Statement, n);..
e970: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
e980: 6e 67 20 76 61 6c 75 65 20 3d 20 5f 61 63 74 69  ng value = _acti
e990: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
e9a0: 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65  .GetText(_active
e9b0: 53 74 61 74 65 6d 65 6e 74 2c 20 6e 29 3b 0d 0a  Statement, n);..
e9c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
e9d0: 73 75 6c 74 2e 41 64 64 28 6e 61 6d 65 2c 20 76  sult.Add(name, v
e9e0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
e9f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
ea00: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
ea10: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
ea20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
ea30: 20 52 65 74 75 72 6e 73 20 54 72 75 65 20 69 66   Returns True if
ea40: 20 74 68 65 20 72 65 73 75 6c 74 73 65 74 20 68   the resultset h
ea50: 61 73 20 72 6f 77 73 20 74 68 61 74 20 63 61 6e  as rows that can
ea60: 20 62 65 20 66 65 74 63 68 65 64 0d 0a 20 20 20   be fetched..   
ea70: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
ea80: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
ea90: 72 69 64 65 20 62 6f 6f 6c 20 48 61 73 52 6f 77  ride bool HasRow
eaa0: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
eab0: 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  get..      {..  
eac0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
ead0: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
eae0: 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a  CheckClosed();..
eaf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
eb00: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
eb10: 66 20 74 68 65 20 22 73 74 69 63 6b 79 22 20 66  f the "sticky" f
eb20: 6c 61 67 20 68 61 73 20 62 65 65 6e 20 73 65 74  lag has been set
eb30: 2c 20 75 73 65 20 74 68 65 20 6e 65 77 20 62 65  , use the new be
eb40: 68 61 76 69 6f 72 2c 0d 0a 20 20 20 20 20 20 20  havior,..       
eb50: 20 2f 2f 20 20 20 20 20 20 20 77 68 69 63 68 20   //       which 
eb60: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
eb70: 20 69 66 20 74 68 65 72 65 20 77 65 72 65 20 65   if there were e
eb80: 76 65 72 20 61 6e 79 20 72 6f 77 73 20 69 6e 0d  ver any rows in.
eb90: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
eba0: 20 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64    the associated
ebb0: 20 72 65 73 75 6c 74 20 73 65 74 73 2e 20 20 47   result sets.  G
ebc0: 65 6e 65 72 61 6c 6c 79 2c 20 74 68 69 73 20 66  enerally, this f
ebd0: 6c 61 67 20 69 73 20 6f 6e 6c 79 0d 0a 20 20 20  lag is only..   
ebe0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73       //       us
ebf0: 65 66 75 6c 20 77 68 65 6e 20 69 74 20 69 73 20  eful when it is 
ec00: 6e 65 63 65 73 73 61 72 79 20 74 6f 20 72 65 74  necessary to ret
ec10: 61 69 6e 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  ain compatibilit
ec20: 79 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20  y with..        
ec30: 2f 2f 20 20 20 20 20 20 20 6f 74 68 65 72 20 41  //       other A
ec40: 44 4f 2e 4e 45 54 20 70 72 6f 76 69 64 65 72 73  DO.NET providers
ec50: 20 74 68 61 74 20 75 73 65 20 74 68 65 73 65 20   that use these 
ec60: 73 61 6d 65 20 73 65 6d 61 6e 74 69 63 73 20 66  same semantics f
ec70: 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  or..        //  
ec80: 20 20 20 20 20 74 68 65 20 48 61 73 52 6f 77 73       the HasRows
ec90: 20 70 72 6f 70 65 72 74 79 2e 0d 0a 20 20 20 20   property...    
eca0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ecb0: 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51  if ((_flags & SQ
ecc0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
ecd0: 61 67 73 2e 53 74 69 63 6b 79 48 61 73 52 6f 77  ags.StickyHasRow
ece0: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
ecf0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 53 74 69 63  ectionFlags.Stic
ed00: 6b 79 48 61 73 52 6f 77 73 29 0d 0a 20 20 20 20  kyHasRows)..    
ed10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 5f        return ((_
ed20: 72 65 61 64 69 6e 67 53 74 61 74 65 20 21 3d 20  readingState != 
ed30: 31 29 20 7c 7c 20 28 5f 73 74 65 70 43 6f 75 6e  1) || (_stepCoun
ed40: 74 20 3e 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20  t > 0));....    
ed50: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ed60: 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 69 73  // NOTE: This is
ed70: 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 65 68   the default beh
ed80: 61 76 69 6f 72 2e 20 20 49 74 20 72 65 74 75 72  avior.  It retur
ed90: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79  ns non-zero only
eda0: 20 69 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   if..        // 
edb0: 20 20 20 20 20 20 6d 6f 72 65 20 72 6f 77 73 20        more rows 
edc0: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 28 69  are available (i
edd0: 2e 65 2e 20 61 20 63 61 6c 6c 20 74 6f 20 74 68  .e. a call to th
ede0: 65 20 52 65 61 64 20 6d 65 74 68 6f 64 20 69 73  e Read method is
edf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
ee00: 20 20 20 65 78 70 65 63 74 65 64 20 74 6f 20 73     expected to s
ee10: 75 63 63 65 65 64 29 2e 20 20 50 72 69 6f 72 20  ucceed).  Prior 
ee20: 74 6f 20 74 68 65 20 69 6e 74 72 6f 64 75 63 74  to the introduct
ee30: 69 6f 6e 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ion of the..    
ee40: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 73 74      //       "st
ee50: 69 63 6b 79 22 20 66 6c 61 67 2c 20 74 68 69 73  icky" flag, this
ee60: 20 69 73 20 68 6f 77 20 74 68 69 73 20 70 72 6f   is how this pro
ee70: 70 65 72 74 79 20 68 61 73 20 61 6c 77 61 79 73  perty has always
ee80: 20 77 6f 72 6b 65 64 2e 0d 0a 20 20 20 20 20 20   worked...      
ee90: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 72 65    //..        re
eea0: 74 75 72 6e 20 28 5f 72 65 61 64 69 6e 67 53 74  turn (_readingSt
eeb0: 61 74 65 20 21 3d 20 31 29 3b 0d 0a 20 20 20 20  ate != 1);..    
eec0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
eed0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
eee0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
eef0: 20 54 72 75 65 20 69 66 20 74 68 65 20 64 61 74   True if the dat
ef00: 61 20 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73  a reader is clos
ef10: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
ef20: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c  mmary>..    publ
ef30: 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
ef40: 20 49 73 43 6c 6f 73 65 64 0d 0a 20 20 20 20 7b   IsClosed..    {
ef50: 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43 68  ..      get { Ch
ef60: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
ef70: 65 74 75 72 6e 20 28 5f 63 6f 6d 6d 61 6e 64 20  eturn (_command 
ef80: 3d 3d 20 6e 75 6c 6c 29 3b 20 7d 0d 0a 20 20 20  == null); }..   
ef90: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
efa0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
efb0: 20 52 65 74 75 72 6e 73 20 54 72 75 65 20 69 66   Returns True if
efc0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
efd0: 6f 6c 75 6d 6e 20 69 73 20 6e 75 6c 6c 0d 0a 20  olumn is null.. 
efe0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
eff0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
f000: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
f010: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
f020: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
f030: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72   /// <returns>Tr
f040: 75 65 20 6f 72 20 46 61 6c 73 65 3c 2f 72 65 74  ue or False</ret
f050: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
f060: 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  c override bool 
f070: 49 73 44 42 4e 75 6c 6c 28 69 6e 74 20 69 29 0d  IsDBNull(int i).
f080: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
f090: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
f0a0: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
f0b0: 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  ForGet();....   
f0c0: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
f0d0: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
f0e0: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
f0f0: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
f100: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
f110: 5f 6b 65 79 49 6e 66 6f 2e 49 73 44 42 4e 75 6c  _keyInfo.IsDBNul
f120: 6c 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  l(i - PrivateVis
f130: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
f140: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
f150: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
f160: 65 6e 74 2e 5f 73 71 6c 2e 49 73 4e 75 6c 6c 28  ent._sql.IsNull(
f170: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
f180: 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  , i);..    }....
f190: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
f1a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d 6f 76 65 73  >..    /// Moves
f1b0: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 65 73   to the next res
f1c0: 75 6c 74 73 65 74 20 69 6e 20 6d 75 6c 74 69 70  ultset in multip
f1d0: 6c 65 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67  le row-returning
f1e0: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20   SQL command... 
f1f0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
f200: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
f210: 72 6e 73 3e 54 72 75 65 20 69 66 20 74 68 65 20  rns>True if the 
f220: 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 75 63 63  command was succ
f230: 65 73 73 66 75 6c 20 61 6e 64 20 61 20 6e 65 77  essful and a new
f240: 20 72 65 73 75 6c 74 73 65 74 20 69 73 20 61 76   resultset is av
f250: 61 69 6c 61 62 6c 65 2c 20 46 61 6c 73 65 20 6f  ailable, False o
f260: 74 68 65 72 77 69 73 65 2e 3c 2f 72 65 74 75 72  therwise.</retur
f270: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
f280: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 4e 65  override bool Ne
f290: 78 74 52 65 73 75 6c 74 28 29 0d 0a 20 20 20 20  xtResult()..    
f2a0: 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69  {..      CheckDi
f2b0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
f2c0: 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d   CheckClosed();.
f2d0: 0a 20 20 20 20 20 20 69 66 20 28 5f 74 68 72 6f  .      if (_thro
f2e0: 77 4f 6e 44 69 73 70 6f 73 65 64 29 20 53 51 4c  wOnDisposed) SQL
f2f0: 69 74 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b  iteCommand.Check
f300: 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a 20  (_command);.... 
f310: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
f320: 6d 65 6e 74 20 73 74 6d 74 20 3d 20 6e 75 6c 6c  ment stmt = null
f330: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 66 69 65  ;..      int fie
f340: 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20  ldCount;..      
f350: 62 6f 6f 6c 20 73 63 68 65 6d 61 4f 6e 6c 79 20  bool schemaOnly 
f360: 3d 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61  = ((_commandBeha
f370: 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65  vior & CommandBe
f380: 68 61 76 69 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c  havior.SchemaOnl
f390: 79 29 20 21 3d 20 30 29 3b 0d 0a 0d 0a 20 20 20  y) != 0);....   
f3a0: 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d     while (true).
f3b0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
f3c0: 20 20 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75    if (stmt == nu
f3d0: 6c 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74 61  ll && _activeSta
f3e0: 74 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 20 26  tement != null &
f3f0: 26 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  & _activeStateme
f400: 6e 74 2e 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 20  nt._sql != null 
f410: 26 26 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  && _activeStatem
f420: 65 6e 74 2e 5f 73 71 6c 2e 49 73 4f 70 65 6e 28  ent._sql.IsOpen(
f430: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
f440: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 73 65           // Rese
f450: 74 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  t the previously
f460: 2d 65 78 65 63 75 74 65 64 20 73 74 61 74 65 6d  -executed statem
f470: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ent..          i
f480: 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 29 20  f (!schemaOnly) 
f490: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
f4a0: 2e 5f 73 71 6c 2e 52 65 73 65 74 28 5f 61 63 74  ._sql.Reset(_act
f4b0: 69 76 65 53 74 61 74 65 6d 65 6e 74 29 3b 0d 0a  iveStatement);..
f4c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49  ..          // I
f4d0: 66 20 77 65 27 72 65 20 6f 6e 6c 79 20 73 75 70  f we're only sup
f4e0: 70 6f 73 65 64 20 74 6f 20 72 65 74 75 72 6e 20  posed to return 
f4f0: 61 20 73 69 6e 67 6c 65 20 72 6f 77 73 65 74 2c  a single rowset,
f500: 20 73 74 65 70 20 74 68 72 6f 75 67 68 20 61 6c   step through al
f510: 6c 20 72 65 6d 61 69 6e 69 6e 67 20 73 74 61 74  l remaining stat
f520: 65 6d 65 6e 74 73 20 6f 6e 63 65 20 75 6e 74 69  ements once unti
f530: 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  l..          // 
f540: 74 68 65 79 20 61 72 65 20 61 6c 6c 20 64 6f 6e  they are all don
f550: 65 20 61 6e 64 20 72 65 74 75 72 6e 20 66 61 6c  e and return fal
f560: 73 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 6e  se to indicate n
f570: 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74 73 65 74  o more resultset
f580: 73 20 65 78 69 73 74 2e 0d 0a 20 20 20 20 20 20  s exist...      
f590: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
f5a0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
f5b0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 69 6e 67  andBehavior.Sing
f5c0: 6c 65 52 65 73 75 6c 74 29 20 21 3d 20 30 29 0d  leResult) != 0).
f5d0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
f5e0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 3b            for (;
f5f0: 20 3b 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20   ; )..          
f600: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f610: 20 20 20 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61     stmt = _comma
f620: 6e 64 2e 47 65 74 53 74 61 74 65 6d 65 6e 74 28  nd.GetStatement(
f630: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
f640: 49 6e 64 65 78 20 2b 20 31 29 3b 0d 0a 20 20 20  Index + 1);..   
f650: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
f660: 74 6d 74 20 3d 3d 20 6e 75 6c 6c 29 20 62 72 65  tmt == null) bre
f670: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
f680: 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d     _activeStatem
f690: 65 6e 74 49 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20  entIndex++;.... 
f6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
f6b0: 28 21 73 63 68 65 6d 61 4f 6e 6c 79 20 26 26 20  (!schemaOnly && 
f6c0: 73 74 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28 73  stmt._sql.Step(s
f6d0: 74 6d 74 29 29 20 5f 73 74 65 70 43 6f 75 6e 74  tmt)) _stepCount
f6e0: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
f6f0: 20 20 20 69 66 20 28 73 74 6d 74 2e 5f 73 71 6c     if (stmt._sql
f700: 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d  .ColumnCount(stm
f710: 74 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  t) == 0)..      
f720: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f730: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63             int c
f740: 68 61 6e 67 65 73 20 3d 20 30 3b 0d 0a 20 20 20  hanges = 0;..   
f750: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f760: 6c 20 72 65 61 64 4f 6e 6c 79 20 3d 20 66 61 6c  l readOnly = fal
f770: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
f780: 20 20 20 20 20 69 66 20 28 73 74 6d 74 2e 54 72       if (stmt.Tr
f790: 79 47 65 74 43 68 61 6e 67 65 73 28 72 65 66 20  yGetChanges(ref 
f7a0: 63 68 61 6e 67 65 73 2c 20 72 65 66 20 72 65 61  changes, ref rea
f7b0: 64 4f 6e 6c 79 29 29 0d 0a 20 20 20 20 20 20 20  dOnly))..       
f7c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
f7e0: 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20   (!readOnly)..  
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f800: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
f810: 20 20 20 20 20 20 20 69 66 20 28 5f 72 6f 77 73         if (_rows
f820: 41 66 66 65 63 74 65 64 20 3d 3d 20 2d 31 29 20  Affected == -1) 
f830: 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d 20  _rowsAffected = 
f840: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
f850: 20 20 20 20 20 20 20 20 5f 72 6f 77 73 41 66 66          _rowsAff
f860: 65 63 74 65 64 20 2b 3d 20 63 68 61 6e 67 65 73  ected += changes
f870: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f880: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
f890: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f8a0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
f8b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f8c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f8d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
f8e0: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
f8f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
f900: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
f910: 20 20 20 20 20 20 20 69 66 20 28 21 73 63 68 65         if (!sche
f920: 6d 61 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f 73 71  maOnly) stmt._sq
f930: 6c 2e 52 65 73 65 74 28 73 74 6d 74 29 3b 20 2f  l.Reset(stmt); /
f940: 2f 20 47 6f 74 74 61 20 72 65 73 65 74 20 61 66  / Gotta reset af
f950: 74 65 72 20 65 76 65 72 79 20 73 74 65 70 20 74  ter every step t
f960: 6f 20 72 65 6c 65 61 73 65 20 61 6e 79 20 6c 6f  o release any lo
f970: 63 6b 73 20 61 6e 64 20 73 75 63 68 21 0d 0a 20  cks and such!.. 
f980: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
f990: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
f9a0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
f9b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
f9c0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 47 65  ...        // Ge
f9d0: 74 20 74 68 65 20 6e 65 78 74 20 73 74 61 74 65  t the next state
f9e0: 6d 65 6e 74 20 74 6f 20 65 78 65 63 75 74 65 0d  ment to execute.
f9f0: 0a 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20  .        stmt = 
fa00: 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61 74  _command.GetStat
fa10: 65 6d 65 6e 74 28 5f 61 63 74 69 76 65 53 74 61  ement(_activeSta
fa20: 74 65 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31 29  tementIndex + 1)
fa30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ;....        // 
fa40: 49 66 20 77 65 27 76 65 20 72 65 61 63 68 65 64  If we've reached
fa50: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
fa60: 73 74 61 74 65 6d 65 6e 74 73 2c 20 72 65 74 75  statements, retu
fa70: 72 6e 20 66 61 6c 73 65 2c 20 6e 6f 20 6d 6f 72  rn false, no mor
fa80: 65 20 72 65 73 75 6c 74 73 65 74 73 0d 0a 20 20  e resultsets..  
fa90: 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d        if (stmt =
faa0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
fab0: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
fac0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 49  ....        // I
fad0: 66 20 77 65 20 77 65 72 65 20 6f 6e 20 61 20 63  f we were on a c
fae0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
faf0: 2c 20 73 65 74 20 74 68 65 20 73 74 61 74 65 20  , set the state 
fb00: 74 6f 20 22 64 6f 6e 65 20 72 65 61 64 69 6e 67  to "done reading
fb10: 22 20 66 6f 72 20 69 74 0d 0a 20 20 20 20 20 20  " for it..      
fb20: 20 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74    if (_readingSt
fb30: 61 74 65 20 3c 20 31 29 0d 0a 20 20 20 20 20 20  ate < 1)..      
fb40: 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74      _readingStat
fb50: 65 20 3d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20  e = 1;....      
fb60: 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65    _activeStateme
fb70: 6e 74 49 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20  ntIndex++;....  
fb80: 20 20 20 20 20 20 66 69 65 6c 64 43 6f 75 6e 74        fieldCount
fb90: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c   = stmt._sql.Col
fba0: 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d  umnCount(stmt);.
fbb0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66  ...        // If
fbc0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   the statement i
fbd0: 73 20 6e 6f 74 20 61 20 73 65 6c 65 63 74 20 73  s not a select s
fbe0: 74 61 74 65 6d 65 6e 74 20 6f 72 20 77 65 27 72  tatement or we'r
fbf0: 65 20 6e 6f 74 20 72 65 74 72 69 65 76 69 6e 67  e not retrieving
fc00: 20 73 63 68 65 6d 61 20 6f 6e 6c 79 2c 20 74 68   schema only, th
fc10: 65 6e 20 70 65 72 66 6f 72 6d 20 74 68 65 20 69  en perform the i
fc20: 6e 69 74 69 61 6c 20 73 74 65 70 0d 0a 20 20 20  nitial step..   
fc30: 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61       if (!schema
fc40: 4f 6e 6c 79 20 7c 7c 20 28 66 69 65 6c 64 43 6f  Only || (fieldCo
fc50: 75 6e 74 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20  unt == 0))..    
fc60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
fc70: 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79   if (!schemaOnly
fc80: 20 26 26 20 73 74 6d 74 2e 5f 73 71 6c 2e 53 74   && stmt._sql.St
fc90: 65 70 28 73 74 6d 74 29 29 0d 0a 20 20 20 20 20  ep(stmt))..     
fca0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fcb0: 20 20 20 20 5f 73 74 65 70 43 6f 75 6e 74 2b 2b      _stepCount++
fcc0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  ;..            _
fcd0: 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 2d  readingState = -
fce0: 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  1;..          }.
fcf0: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
fd00: 69 66 20 28 66 69 65 6c 64 43 6f 75 6e 74 20 3d  if (fieldCount =
fd10: 3d 20 30 29 20 2f 2f 20 4e 6f 20 72 6f 77 73 20  = 0) // No rows 
fd20: 72 65 74 75 72 6e 65 64 2c 20 69 66 20 66 69 65  returned, if fie
fd30: 6c 64 43 6f 75 6e 74 20 69 73 20 7a 65 72 6f 2c  ldCount is zero,
fd40: 20 73 6b 69 70 20 74 6f 20 74 68 65 20 6e 65 78   skip to the nex
fd50: 74 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20  t statement..   
fd60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
fd70: 20 20 20 20 20 20 69 6e 74 20 63 68 61 6e 67 65        int change
fd80: 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  s = 0;..        
fd90: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
fda0: 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  y = false;..    
fdb0: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74          if (stmt
fdc0: 2e 54 72 79 47 65 74 43 68 61 6e 67 65 73 28 72  .TryGetChanges(r
fdd0: 65 66 20 63 68 61 6e 67 65 73 2c 20 72 65 66 20  ef changes, ref 
fde0: 72 65 61 64 4f 6e 6c 79 29 29 0d 0a 20 20 20 20  readOnly))..    
fdf0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
fe00: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65           if (!re
fe10: 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20  adOnly)..       
fe20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
fe30: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 72            if (_r
fe40: 6f 77 73 41 66 66 65 63 74 65 64 20 3d 3d 20 2d  owsAffected == -
fe50: 31 29 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64  1) _rowsAffected
fe60: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
fe70: 20 20 20 20 20 20 20 5f 72 6f 77 73 41 66 66 65         _rowsAffe
fe80: 63 74 65 64 20 2b 3d 20 63 68 61 6e 67 65 73 3b  cted += changes;
fe90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fea0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
feb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
fec0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
fed0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
fee0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
fef0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ff00: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
ff10: 73 63 68 65 6d 61 4f 6e 6c 79 29 20 73 74 6d 74  schemaOnly) stmt
ff20: 2e 5f 73 71 6c 2e 52 65 73 65 74 28 73 74 6d 74  ._sql.Reset(stmt
ff30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
ff40: 63 6f 6e 74 69 6e 75 65 3b 20 2f 2f 20 53 6b 69  continue; // Ski
ff50: 70 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 61  p this command a
ff60: 6e 64 20 6d 6f 76 65 20 74 6f 20 74 68 65 20 6e  nd move to the n
ff70: 65 78 74 2c 20 69 74 20 77 61 73 20 6e 6f 74 20  ext, it was not 
ff80: 61 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  a row-returning 
ff90: 72 65 73 75 6c 74 73 65 74 0d 0a 20 20 20 20 20  resultset..     
ffa0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
ffb0: 20 20 65 6c 73 65 20 2f 2f 20 4e 6f 20 72 6f 77    else // No row
ffc0: 73 2c 20 66 69 65 6c 64 43 6f 75 6e 74 20 69 73  s, fieldCount is
ffd0: 20 6e 6f 6e 2d 7a 65 72 6f 20 73 6f 20 73 74 6f   non-zero so sto
ffe0: 70 20 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20  p here..        
fff0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10000 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d   _readingState =
10010 20 31 3b 20 2f 2f 20 54 68 69 73 20 63 6f 6d 6d   1; // This comm
10020 61 6e 64 20 72 65 74 75 72 6e 65 64 20 63 6f 6c  and returned col
10030 75 6d 6e 73 20 62 75 74 20 6e 6f 20 72 6f 77 73  umns but no rows
10040 2c 20 73 6f 20 72 65 74 75 72 6e 20 74 72 75 65  , so return true
10050 2c 20 62 75 74 20 48 61 73 52 6f 77 73 20 3d 20  , but HasRows = 
10060 66 61 6c 73 65 20 61 6e 64 20 52 65 61 64 28 29  false and Read()
10070 20 72 65 74 75 72 6e 73 20 66 61 6c 73 65 0d 0a   returns false..
10080 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
10090 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
100a0 20 20 2f 2f 20 41 68 68 2c 20 77 65 20 66 6f 75    // Ahh, we fou
100b0 6e 64 20 61 20 72 6f 77 2d 72 65 74 75 72 6e 69  nd a row-returni
100c0 6e 67 20 72 65 73 75 6c 74 73 65 74 20 65 6c 69  ng resultset eli
100d0 67 69 62 6c 65 20 74 6f 20 62 65 20 72 65 74 75  gible to be retu
100e0 72 6e 65 64 21 0d 0a 20 20 20 20 20 20 20 20 5f  rned!..        _
100f0 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20  activeStatement 
10100 3d 20 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  = stmt;..       
10110 20 5f 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20 66   _fieldCount = f
10120 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  ieldCount;..    
10130 20 20 20 20 5f 66 69 65 6c 64 49 6e 64 65 78 65      _fieldIndexe
10140 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
10150 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 28  ry<string, int>(
10160 53 74 72 69 6e 67 43 6f 6d 70 61 72 65 72 2e 4f  StringComparer.O
10170 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
10180 29 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 69 65  );..        _fie
10190 6c 64 54 79 70 65 41 72 72 61 79 20 3d 20 6e 65  ldTypeArray = ne
101a0 77 20 53 51 4c 69 74 65 54 79 70 65 5b 50 72 69  w SQLiteType[Pri
101b0 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
101c0 43 6f 75 6e 74 5d 3b 0d 0a 0d 0a 20 20 20 20 20  Count];....     
101d0 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64     if ((_command
101e0 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61  Behavior & Comma
101f0 6e 64 42 65 68 61 76 69 6f 72 2e 4b 65 79 49 6e  ndBehavior.KeyIn
10200 66 6f 29 20 21 3d 20 30 29 0d 0a 20 20 20 20 20  fo) != 0)..     
10210 20 20 20 20 20 4c 6f 61 64 4b 65 79 49 6e 66 6f       LoadKeyInfo
10220 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ();....        r
10230 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
10240 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
10250 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
10260 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d  ..    /// This m
10270 65 74 68 6f 64 20 61 74 74 65 6d 70 74 73 20 74  ethod attempts t
10280 6f 20 71 75 65 72 79 20 74 68 65 20 64 61 74 61  o query the data
10290 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
102a0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d  associated with.
102b0 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 64 61 74  .    /// the dat
102c0 61 20 72 65 61 64 65 72 20 69 6e 20 75 73 65 2e  a reader in use.
102d0 20 20 49 66 20 74 68 65 20 75 6e 64 65 72 6c 79    If the underly
102e0 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 63  ing command or c
102f0 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 0d 0a 20 20  onnection is..  
10300 20 20 2f 2f 2f 20 75 6e 61 76 61 69 6c 61 62 6c    /// unavailabl
10310 65 2c 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20  e, a null value 
10320 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64  will be returned
10330 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
10340 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
10350 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
10360 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  / The connection
10370 20 6f 62 6a 65 63 74 20 2d 4f 52 2d 20 6e 75 6c   object -OR- nul
10380 6c 20 69 66 20 69 74 20 69 73 20 75 6e 61 76 61  l if it is unava
10390 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f  ilable...    ///
103a0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
103b0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
103c0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
103d0 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d   GetConnection(.
103e0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44  .        SQLiteD
103f0 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52 65  ataReader dataRe
10400 61 64 65 72 0d 0a 20 20 20 20 20 20 20 20 29 0d  ader..        ).
10410 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
10420 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
10430 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10440 64 61 74 61 52 65 61 64 65 72 20 21 3d 20 6e 75  dataReader != nu
10450 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
10460 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10470 20 20 20 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e      SQLiteComman
10480 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 64 61 74 61  d command = data
10490 52 65 61 64 65 72 2e 5f 63 6f 6d 6d 61 6e 64 3b  Reader._command;
104a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
104b0 20 20 20 20 69 66 20 28 63 6f 6d 6d 61 6e 64 20      if (command 
104c0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
104d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
104e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104f0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
10500 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 63  n connection = c
10510 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
10520 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
10530 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
10540 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  nnection != null
10550 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10560 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10570 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 3b 0d 0a 20  n connection;.. 
10580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
10590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
105a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
105b0 20 20 20 20 63 61 74 63 68 20 28 4f 62 6a 65 63      catch (Objec
105c0 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69  tDisposedExcepti
105d0 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  on)..        {..
105e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
105f0 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
10600 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10610 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
10620 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
10630 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
10640 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65  // Retrieves the
10650 20 53 51 4c 69 74 65 54 79 70 65 20 66 6f 72 20   SQLiteType for 
10660 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 20 61  a given column a
10670 6e 64 20 72 6f 77 20 76 61 6c 75 65 2e 0d 0a 20  nd row value... 
10680 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
10690 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
106a0 6d 20 6e 61 6d 65 3d 22 6f 6c 64 54 79 70 65 22  m name="oldType"
106b0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f  >..    /// The o
106c0 72 69 67 69 6e 61 6c 20 53 51 4c 69 74 65 54 79  riginal SQLiteTy
106d0 70 65 20 73 74 72 75 63 74 75 72 65 2c 20 62 61  pe structure, ba
106e0 73 65 64 20 6f 6e 6c 79 20 6f 6e 20 74 68 65 20  sed only on the 
106f0 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  column...    ///
10700 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
10710 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
10720 74 65 78 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  text">..    /// 
10730 54 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75  The textual valu
10740 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
10750 66 6f 72 20 61 20 67 69 76 65 6e 20 72 6f 77 2e  for a given row.
10760 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
10770 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
10780 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  urns>..    /// T
10790 68 65 20 53 51 4c 69 74 65 54 79 70 65 20 73 74  he SQLiteType st
107a0 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 2f 2f  ructure...    //
107b0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
107c0 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
107d0 54 79 70 65 20 47 65 74 53 51 4c 69 74 65 54 79  Type GetSQLiteTy
107e0 70 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  pe(..        SQL
107f0 69 74 65 54 79 70 65 20 6f 6c 64 54 79 70 65 2c  iteType oldType,
10800 20 2f 2a 20 50 41 53 53 2d 54 48 52 4f 55 47 48   /* PASS-THROUGH
10810 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
10820 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20 20  ing text..      
10830 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
10840 20 20 20 20 69 66 20 28 53 51 4c 69 74 65 43 6f      if (SQLiteCo
10850 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 4e  nvert.LooksLikeN
10860 75 6c 6c 28 74 65 78 74 29 29 0d 0a 20 20 20 20  ull(text))..    
10870 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
10880 65 77 20 53 51 4c 69 74 65 54 79 70 65 28 54 79  ew SQLiteType(Ty
10890 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c  peAffinity.Null,
108a0 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 3b   DbType.Object);
108b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
108c0 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f  SQLiteConvert.Lo
108d0 6f 6b 73 4c 69 6b 65 49 6e 74 36 34 28 74 65 78  oksLikeInt64(tex
108e0 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
108f0 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69   return new SQLi
10900 74 65 54 79 70 65 28 54 79 70 65 41 66 66 69 6e  teType(TypeAffin
10910 69 74 79 2e 49 6e 74 36 34 2c 20 44 62 54 79 70  ity.Int64, DbTyp
10920 65 2e 49 6e 74 36 34 29 3b 0d 0a 0d 0a 20 20 20  e.Int64);....   
10930 20 20 20 20 20 69 66 20 28 53 51 4c 69 74 65 43       if (SQLiteC
10940 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65  onvert.LooksLike
10950 44 6f 75 62 6c 65 28 74 65 78 74 29 29 0d 0a 20  Double(text)).. 
10960 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10970 6e 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65  n new SQLiteType
10980 28 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f  (TypeAffinity.Do
10990 75 62 6c 65 2c 20 44 62 54 79 70 65 2e 44 6f 75  uble, DbType.Dou
109a0 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ble);....       
109b0 20 69 66 20 28 28 5f 61 63 74 69 76 65 53 74 61   if ((_activeSta
109c0 74 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 20  tement != null) 
109d0 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
109e0 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f  SQLiteConvert.Lo
109f0 6f 6b 73 4c 69 6b 65 44 61 74 65 54 69 6d 65 28  oksLikeDateTime(
10a00 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
10a10 2e 5f 73 71 6c 2c 20 74 65 78 74 29 29 0d 0a 20  ._sql, text)).. 
10a20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10a30 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
10a40 20 53 51 4c 69 74 65 54 79 70 65 28 54 79 70 65   SQLiteType(Type
10a50 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d  Affinity.DateTim
10a60 65 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69  e, DbType.DateTi
10a70 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  me);..        }.
10a80 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
10a90 6e 20 6f 6c 64 54 79 70 65 3b 0d 0a 20 20 20 20  n oldType;..    
10aa0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
10ab0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
10ac0 52 65 74 72 69 65 76 65 73 20 74 68 65 20 53 51  Retrieves the SQ
10ad0 4c 69 74 65 54 79 70 65 20 66 6f 72 20 61 20 67  LiteType for a g
10ae0 69 76 65 6e 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64  iven column, and
10af0 20 63 61 63 68 65 73 20 69 74 20 74 6f 20 61 76   caches it to av
10b00 6f 69 64 20 72 65 70 65 74 65 74 69 76 65 20 69  oid repetetive i
10b10 6e 74 65 72 6f 70 20 63 61 6c 6c 73 2e 0d 0a 20  nterop calls... 
10b20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
10b30 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
10b40 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54  m name="flags">T
10b50 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61  he flags associa
10b60 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72  ted with the par
10b70 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f  ent connection o
10b80 62 6a 65 63 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  bject.</param>..
10b90 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
10ba0 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
10bb0 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
10bc0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
10bd0 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 53 51 4c  / <returns>A SQL
10be0 69 74 65 54 79 70 65 20 73 74 72 75 63 74 75 72  iteType structur
10bf0 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  e</returns>..   
10c00 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 54   private SQLiteT
10c10 79 70 65 20 47 65 74 53 51 4c 69 74 65 54 79 70  ype GetSQLiteTyp
10c20 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e(SQLiteConnecti
10c30 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
10c40 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
10c50 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65        SQLiteType
10c60 20 74 79 70 20 3d 20 5f 66 69 65 6c 64 54 79 70   typ = _fieldTyp
10c70 65 41 72 72 61 79 5b 69 5d 3b 0d 0a 0d 0a 20 20  eArray[i];....  
10c80 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
10c90 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
10ca0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
10cb0 2f 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 69  / Initialize thi
10cc0 73 20 63 6f 6c 75 6d 6e 27 73 20 66 69 65 6c 64  s column's field
10cd0 20 74 79 70 65 20 69 6e 73 74 61 6e 63 65 0d 0a   type instance..
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 20              typ 
10cf0 3d 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61  = _fieldTypeArra
10d00 79 5b 69 5d 20 3d 20 6e 65 77 20 53 51 4c 69 74  y[i] = new SQLit
10d10 65 54 79 70 65 28 29 3b 0d 0a 20 20 20 20 20 20  eType();..      
10d20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
10d30 2f 20 49 66 20 6e 6f 74 20 69 6e 69 74 69 61 6c  / If not initial
10d40 69 7a 65 64 2c 20 74 68 65 6e 20 66 65 74 63 68  ized, then fetch
10d50 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 63 6f   the declared co
10d60 6c 75 6d 6e 20 64 61 74 61 74 79 70 65 20 61 6e  lumn datatype an
10d70 64 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6e  d attempt to con
10d80 76 65 72 74 20 69 74 0d 0a 20 20 20 20 20 20 20  vert it..       
10d90 20 2f 2f 20 74 6f 20 61 20 6b 6e 6f 77 6e 20 44   // to a known D
10da0 62 54 79 70 65 2e 0d 0a 20 20 20 20 20 20 20 20  bType...        
10db0 69 66 20 28 74 79 70 2e 41 66 66 69 6e 69 74 79  if (typ.Affinity
10dc0 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
10dd0 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 29 0d  .Uninitialized).
10de0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
10df0 20 20 20 20 20 20 20 20 74 79 70 2e 54 79 70 65          typ.Type
10e00 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74   = SQLiteConvert
10e10 2e 54 79 70 65 4e 61 6d 65 54 6f 44 62 54 79 70  .TypeNameToDbTyp
10e20 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
10e30 20 20 20 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f      GetConnectio
10e40 6e 28 74 68 69 73 29 2c 20 5f 61 63 74 69 76 65  n(this), _active
10e50 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43  Statement._sql.C
10e60 6f 6c 75 6d 6e 54 79 70 65 28 0d 0a 20 20 20 20  olumnType(..    
10e70 20 20 20 20 20 20 20 20 20 20 20 20 5f 61 63 74              _act
10e80 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c  iveStatement, i,
10e90 20 72 65 66 20 74 79 70 2e 41 66 66 69 6e 69 74   ref typ.Affinit
10ea0 79 29 2c 20 66 6c 61 67 73 29 3b 0d 0a 20 20 20  y), flags);..   
10eb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10ec0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  else..        {.
10ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70  .            typ
10ee0 2e 41 66 66 69 6e 69 74 79 20 3d 20 5f 61 63 74  .Affinity = _act
10ef0 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
10f00 6c 2e 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  l.ColumnAffinity
10f10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
10f20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d     _activeStatem
10f30 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 20 20  ent, i);..      
10f40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
10f50 65 74 75 72 6e 20 74 79 70 3b 0d 0a 20 20 20 20  eturn typ;..    
10f60 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
10f70 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
10f80 52 65 61 64 73 20 74 68 65 20 6e 65 78 74 20 72  Reads the next r
10f90 6f 77 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75  ow from the resu
10fa0 6c 74 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ltset..    /// <
10fb0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
10fc0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65  // <returns>True
10fd0 20 69 66 20 61 20 6e 65 77 20 72 6f 77 20 77 61   if a new row wa
10fe0 73 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 6c  s successfully l
10ff0 6f 61 64 65 64 20 61 6e 64 20 69 73 20 72 65 61  oaded and is rea
11000 64 79 20 66 6f 72 20 70 72 6f 63 65 73 73 69 6e  dy for processin
11010 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  g</returns>..   
11020 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
11030 20 62 6f 6f 6c 20 52 65 61 64 28 29 0d 0a 20 20   bool Read()..  
11040 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
11050 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
11060 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
11070 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 74 68  ;..      if (_th
11080 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29 20 53  rowOnDisposed) S
11090 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43 68 65  QLiteCommand.Che
110a0 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d  ck(_command);...
110b0 0a 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d  .      if ((_com
110c0 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43  mandBehavior & C
110d0 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53  ommandBehavior.S
110e0 63 68 65 6d 61 4f 6e 6c 79 29 20 21 3d 20 30 29  chemaOnly) != 0)
110f0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
11100 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
11110 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
11120 74 65 20 3d 3d 20 2d 31 29 20 2f 2f 20 46 69 72  te == -1) // Fir
11130 73 74 20 73 74 65 70 20 77 61 73 20 61 6c 72 65  st step was alre
11140 61 64 79 20 64 6f 6e 65 20 61 74 20 74 68 65 20  ady done at the 
11150 4e 65 78 74 52 65 73 75 6c 74 28 29 20 6c 65 76  NextResult() lev
11160 65 6c 2c 20 73 6f 20 64 6f 6e 27 74 20 73 74 65  el, so don't ste
11170 70 20 61 67 61 69 6e 2c 20 6a 75 73 74 20 72 65  p again, just re
11180 74 75 72 6e 20 74 72 75 65 2e 0d 0a 20 20 20 20  turn true...    
11190 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 72 65    {..        _re
111a0 61 64 69 6e 67 53 74 61 74 65 20 3d 20 30 3b 0d  adingState = 0;.
111b0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
111c0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  true;..      }..
111d0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f        else if (_
111e0 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 3d 20  readingState == 
111f0 30 29 20 2f 2f 20 41 63 74 69 76 65 6c 79 20 72  0) // Actively r
11200 65 61 64 69 6e 67 20 72 6f 77 73 0d 0a 20 20 20  eading rows..   
11210 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
11220 20 44 6f 6e 27 74 20 72 65 61 64 20 61 20 6e 65   Don't read a ne
11230 77 20 72 6f 77 20 69 66 20 74 68 65 20 63 6f 6d  w row if the com
11240 6d 61 6e 64 20 62 65 68 61 76 69 6f 72 20 64 69  mand behavior di
11250 63 74 61 74 65 73 20 53 69 6e 67 6c 65 52 6f 77  ctates SingleRow
11260 2e 20 20 57 65 27 76 65 20 61 6c 72 65 61 64 79  .  We've already
11270 20 72 65 61 64 20 74 68 65 20 66 69 72 73 74 20   read the first 
11280 72 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 69 66  row...        if
11290 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
112a0 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
112b0 61 76 69 6f 72 2e 53 69 6e 67 6c 65 52 6f 77 29  avior.SingleRow)
112c0 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
112d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
112e0 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
112f0 74 2e 5f 73 71 6c 2e 53 74 65 70 28 5f 61 63 74  t._sql.Step(_act
11300 69 76 65 53 74 61 74 65 6d 65 6e 74 29 20 3d 3d  iveStatement) ==
11310 20 74 72 75 65 29 0d 0a 20 20 20 20 20 20 20 20   true)..        
11320 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11330 20 5f 73 74 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a   _stepCount++;..
11340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
11350 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75   (_keyInfo != nu
11360 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
11370 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 52 65 73 65     _keyInfo.Rese
11380 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
11390 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
113a0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
113b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
113c0 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74      _readingStat
113d0 65 20 3d 20 31 3b 20 2f 2f 20 46 69 6e 69 73 68  e = 1; // Finish
113e0 65 64 20 72 65 61 64 69 6e 67 20 72 6f 77 73 0d  ed reading rows.
113f0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
11400 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
11410 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
11420 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
11430 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
11440 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
11450 61 66 66 65 63 74 65 64 20 62 79 20 74 68 65 20  affected by the 
11460 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20  statement being 
11470 65 78 65 63 75 74 65 64 2e 0d 0a 20 20 20 20 2f  executed...    /
11480 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 72 65 74  // The value ret
11490 75 72 6e 65 64 20 6d 61 79 20 6e 6f 74 20 62 65  urned may not be
114a0 20 61 63 63 75 72 61 74 65 20 66 6f 72 20 44 44   accurate for DD
114b0 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  L statements.  A
114c0 6c 73 6f 2c 20 69 74 0d 0a 20 20 20 20 2f 2f 2f  lso, it..    ///
114d0 20 77 69 6c 6c 20 62 65 20 2d 31 20 66 6f 72 20   will be -1 for 
114e0 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 68  any statement th
114f0 61 74 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69  at does not modi
11500 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20  fy the database 
11510 28 65 2e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 53  (e.g...    /// S
11520 45 4c 45 43 54 29 2e 20 20 49 66 20 61 6e 20 6f  ELECT).  If an o
11530 74 68 65 72 77 69 73 65 20 72 65 61 64 2d 6f 6e  therwise read-on
11540 6c 79 20 73 74 61 74 65 6d 65 6e 74 20 6d 6f 64  ly statement mod
11550 69 66 69 65 73 20 74 68 65 20 64 61 74 61 62 61  ifies the databa
11560 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 64 69  se..    /// indi
11570 72 65 63 74 6c 79 20 28 65 2e 67 2e 20 76 69 61  rectly (e.g. via
11580 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
11590 20 6f 72 20 75 73 65 72 2d 64 65 66 69 6e 65 64   or user-defined
115a0 20 66 75 6e 63 74 69 6f 6e 29 2c 20 74 68 65 0d   function), the.
115b0 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 72  .    /// value r
115c0 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65 66  eturned is undef
115d0 69 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ined...    /// <
115e0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
115f0 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
11600 6e 74 20 52 65 63 6f 72 64 73 41 66 66 65 63 74  nt RecordsAffect
11610 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ed..    {..     
11620 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
11630 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 5f  osed(); return _
11640 72 6f 77 73 41 66 66 65 63 74 65 64 3b 20 7d 0d  rowsAffected; }.
11650 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
11660 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
11670 20 2f 2f 2f 20 49 6e 64 65 78 65 72 20 74 6f 20   /// Indexer to 
11680 72 65 74 72 69 65 76 65 20 64 61 74 61 20 66 72  retrieve data fr
11690 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 67 69 76 65  om a column give
116a0 6e 20 69 74 73 20 6e 61 6d 65 0d 0a 20 20 20 20  n its name..    
116b0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
116c0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
116d0 61 6d 65 3d 22 6e 61 6d 65 22 3e 54 68 65 20 6e  ame="name">The n
116e0 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ame of the colum
116f0 6e 20 74 6f 20 72 65 74 72 69 65 76 65 20 64 61  n to retrieve da
11700 74 61 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a  ta for</param>..
11710 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
11720 3e 54 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61  >The value conta
11730 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75  ined in the colu
11740 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  mn</returns>..  
11750 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
11760 65 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 73 74  e object this[st
11770 72 69 6e 67 20 6e 61 6d 65 5d 0d 0a 20 20 20 20  ring name]..    
11780 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43  {..      get { C
11790 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
117a0 72 65 74 75 72 6e 20 47 65 74 56 61 6c 75 65 28  return GetValue(
117b0 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d 65 29  GetOrdinal(name)
117c0 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ); }..    }.... 
117d0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
117e0 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 65  ..    /// Indexe
117f0 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 64 61  r to retrieve da
11800 74 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e  ta from a column
11810 20 67 69 76 65 6e 20 69 74 73 20 69 0d 0a 20 20   given its i..  
11820 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
11830 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
11840 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
11850 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
11860 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
11870 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
11880 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64   value contained
11890 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f   in the column</
118a0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
118b0 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62  blic override ob
118c0 6a 65 63 74 20 74 68 69 73 5b 69 6e 74 20 69 5d  ject this[int i]
118d0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
118e0 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
118f0 65 64 28 29 3b 20 72 65 74 75 72 6e 20 47 65 74  ed(); return Get
11900 56 61 6c 75 65 28 69 29 3b 20 7d 0d 0a 20 20 20  Value(i); }..   
11910 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74   }....    privat
11920 65 20 76 6f 69 64 20 4c 6f 61 64 4b 65 79 49 6e  e void LoadKeyIn
11930 66 6f 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  fo()..    {..   
11940 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66       if (_keyInf
11950 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
11960 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11970 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 44 69 73 70     _keyInfo.Disp
11980 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
11990 20 20 20 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e      _keyInfo = n
119a0 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ull;..        }.
119b0 0a 0d 0a 20 20 20 20 20 20 20 20 5f 6b 65 79 49  ...        _keyI
119c0 6e 66 6f 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  nfo = new SQLite
119d0 4b 65 79 52 65 61 64 65 72 28 5f 63 6f 6d 6d 61  KeyReader(_comma
119e0 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74  nd.Connection, t
119f0 68 69 73 2c 20 5f 61 63 74 69 76 65 53 74 61 74  his, _activeStat
11a00 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ement);..    }..
11a10 20 20 7d 0d 0a 7d 0d 0a                            }..}..