System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 129bf12078a68c412ed96ad9001777d7c0639af3:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75  ns.Generic;..  u
0180: 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c  sing System.Coll
0190: 65 63 74 69 6f 6e 73 2e 53 70 65 63 69 61 6c 69  ections.Speciali
01a0: 7a 65 64 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  zed;..  using Sy
01b0: 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 75 73  stem.Data;..  us
01c0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
01d0: 43 6f 6d 6d 6f 6e 3b 0d 0a 20 20 75 73 69 6e 67  Common;..  using
01e0: 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a   System.Globaliz
01f0: 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20  ation;....  /// 
0200: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  <summary>..  ///
0210: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
0220: 74 61 74 69 6f 6e 20 6f 66 20 44 62 44 61 74 61  tation of DbData
0230: 52 65 61 64 65 72 2e 0d 0a 20 20 2f 2f 2f 20 3c  Reader...  /// <
0240: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62  /summary>..  pub
0250: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
0260: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
0270: 72 20 3a 20 44 62 44 61 74 61 52 65 61 64 65 72  r : DbDataReader
0280: 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ..  {..    /// <
0290: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
02a0: 2f 20 55 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d  / Underlying com
02b0: 6d 61 6e 64 20 74 68 69 73 20 72 65 61 64 65 72  mand this reader
02c0: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 0d   is attached to.
02d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
02e0: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
02f0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 5f   SQLiteCommand _
0300: 63 6f 6d 6d 61 6e 64 3b 0d 0a 20 20 20 20 2f 2f  command;..    //
0310: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0320: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 70   /// The flags p
0330: 65 72 74 61 69 6e 69 6e 67 20 74 6f 20 74 68 65  ertaining to the
0340: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6e 6e   associated conn
0350: 65 63 74 69 6f 6e 20 28 76 69 61 20 74 68 65 20  ection (via the 
0360: 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 2f  command)...    /
0370: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0380: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0390: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
03a0: 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20 2f 2f   _flags;..    //
03b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
03c0: 20 2f 2f 2f 20 49 6e 64 65 78 20 6f 66 20 74 68   /// Index of th
03d0: 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
03e0: 65 6e 74 20 69 6e 20 74 68 65 20 63 6f 6d 6d 61  ent in the comma
03f0: 6e 64 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nd being process
0400: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
0410: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
0420: 61 74 65 20 69 6e 74 20 5f 61 63 74 69 76 65 53  ate int _activeS
0430: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 3b 0d 0a  tatementIndex;..
0440: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0450: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65  >..    /// Curre
0460: 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  nt statement bei
0470: 6e 67 20 52 65 61 64 28 29 0d 0a 20 20 20 20 2f  ng Read()..    /
0480: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0490: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
04a0: 65 53 74 61 74 65 6d 65 6e 74 20 5f 61 63 74 69  eStatement _acti
04b0: 76 65 53 74 61 74 65 6d 65 6e 74 3b 0d 0a 20 20  veStatement;..  
04c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
04d0: 0a 20 20 20 20 2f 2f 2f 20 53 74 61 74 65 20 6f  .    /// State o
04e0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  f the current st
04f0: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72  atement being pr
0500: 6f 63 65 73 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  ocessed...    //
0510: 2f 20 2d 31 20 3d 20 46 69 72 73 74 20 53 74 65  / -1 = First Ste
0520: 70 28 29 20 65 78 65 63 75 74 65 64 2c 20 73 6f  p() executed, so
0530: 20 74 68 65 20 66 69 72 73 74 20 52 65 61 64 28   the first Read(
0540: 29 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65  ) will be ignore
0550: 64 0d 0a 20 20 20 20 2f 2f 2f 20 20 30 20 3d 20  d..    ///  0 = 
0560: 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67  Actively reading
0570: 0d 0a 20 20 20 20 2f 2f 2f 20 20 31 20 3d 20 46  ..    ///  1 = F
0580: 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 0d  inished reading.
0590: 0a 20 20 20 20 2f 2f 2f 20 20 32 20 3d 20 4e 6f  .    ///  2 = No
05a0: 6e 2d 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  n-row-returning 
05b0: 73 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 20 72 65  statement, no re
05c0: 63 6f 72 64 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cords..    /// <
05d0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
05e0: 72 69 76 61 74 65 20 69 6e 74 20 5f 72 65 61 64  rivate int _read
05f0: 69 6e 67 53 74 61 74 65 3b 0d 0a 20 20 20 20 2f  ingState;..    /
0600: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0610: 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20    /// Number of 
0620: 72 65 63 6f 72 64 73 20 61 66 66 65 63 74 65 64  records affected
0630: 20 62 79 20 74 68 65 20 69 6e 73 65 72 74 2f 75   by the insert/u
0640: 70 64 61 74 65 20 73 74 61 74 65 6d 65 6e 74 73  pdate statements
0650: 20 65 78 65 63 75 74 65 64 20 6f 6e 20 74 68 65   executed on the
0660: 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 2f 2f   command..    //
0670: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0680: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 5f 72    private int _r
0690: 6f 77 73 41 66 66 65 63 74 65 64 3b 0d 0a 20 20  owsAffected;..  
06a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
06b0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 75 6e 74 20 6f  .    /// Count o
06c0: 66 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d 6e  f fields (column
06d0: 73 29 20 69 6e 20 74 68 65 20 72 6f 77 2d 72 65  s) in the row-re
06e0: 74 75 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e  turning statemen
06f0: 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
0700: 67 20 70 72 6f 63 65 73 73 65 64 0d 0a 20 20 20  g processed..   
0710: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0720: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
0730: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20   _fieldCount;.. 
0740: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0750: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
0760: 6d 62 65 72 20 6f 66 20 63 61 6c 6c 73 20 74 6f  mber of calls to
0770: 20 53 74 65 70 28 29 20 74 68 61 74 20 68 61 76   Step() that hav
0780: 65 20 72 65 74 75 72 6e 65 64 20 74 72 75 65 20  e returned true 
0790: 28 69 2e 65 2e 20 74 68 65 20 6e 75 6d 62 65 72  (i.e. the number
07a0: 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0d 0a 20   of rows that.. 
07b0: 20 20 20 2f 2f 2f 20 68 61 76 65 20 62 65 65 6e     /// have been
07c0: 20 72 65 61 64 20 69 6e 20 74 68 65 20 63 75 72   read in the cur
07d0: 72 65 6e 74 20 72 65 73 75 6c 74 20 73 65 74 29  rent result set)
07e0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
07f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0800: 74 65 20 69 6e 74 20 5f 73 74 65 70 43 6f 75 6e  te int _stepCoun
0810: 74 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  t;..    /// <sum
0820: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d  mary>..    /// M
0830: 61 70 73 20 74 68 65 20 66 69 65 6c 64 20 28 63  aps the field (c
0840: 6f 6c 75 6d 6e 29 20 6e 61 6d 65 73 20 74 6f 20  olumn) names to 
0850: 74 68 65 69 72 20 63 6f 72 72 65 73 70 6f 6e 64  their correspond
0860: 69 6e 67 20 69 6e 64 65 78 65 73 20 77 69 74 68  ing indexes with
0870: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0d  in the results..
0880: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0890: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
08a0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
08b0: 6e 67 2c 20 69 6e 74 3e 20 5f 66 69 65 6c 64 49  ng, int> _fieldI
08c0: 6e 64 65 78 65 73 3b 0d 0a 20 20 20 20 2f 2f 2f  ndexes;..    ///
08d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
08e0: 2f 2f 2f 20 44 61 74 61 74 79 70 65 73 20 6f 66  /// Datatypes of
08f0: 20 61 63 74 69 76 65 20 66 69 65 6c 64 73 20 28   active fields (
0900: 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74 68 65 20  columns) in the 
0910: 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
0920: 74 2c 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  t, used for type
0930: 2d 72 65 73 74 72 69 63 74 69 6e 67 20 64 61 74  -restricting dat
0940: 61 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  a..    /// </sum
0950: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0960: 74 65 20 53 51 4c 69 74 65 54 79 70 65 5b 5d 20  te SQLiteType[] 
0970: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 3b  _fieldTypeArray;
0980: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0990: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
09a0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
09b0: 68 65 20 64 61 74 61 72 65 61 64 65 72 0d 0a 20  he datareader.. 
09c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
09d0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 43  >..    private C
09e0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 5f  ommandBehavior _
09f0: 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 3b  commandBehavior;
0a00: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0a10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
0a20: 66 20 73 65 74 2c 20 74 68 65 6e 20 64 69 73 70  f set, then disp
0a30: 6f 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61  ose of the comma
0a40: 6e 64 20 6f 62 6a 65 63 74 20 77 68 65 6e 20 74  nd object when t
0a50: 68 65 20 72 65 61 64 65 72 20 69 73 20 66 69 6e  he reader is fin
0a60: 69 73 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ished..    /// <
0a70: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
0a80: 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 64 69  nternal bool _di
0a90: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 3b 0d 0a 0d  sposeCommand;...
0aa0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0ab0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73  y>..    /// If s
0ac0: 65 74 2c 20 74 68 65 6e 20 72 61 69 73 65 20 61  et, then raise a
0ad0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 68 65 6e  n exception when
0ae0: 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61   the object is a
0af0: 63 63 65 73 73 65 64 20 61 66 74 65 72 20 62 65  ccessed after be
0b00: 69 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  ing disposed... 
0b10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0b20: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0b30: 62 6f 6f 6c 20 5f 74 68 72 6f 77 4f 6e 44 69 73  bool _throwOnDis
0b40: 70 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  posed;....    //
0b50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0b60: 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66   /// An array of
0b70: 20 72 6f 77 69 64 27 73 20 66 6f 72 20 74 68 65   rowid's for the
0b80: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
0b90: 74 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61  t if CommandBeha
0ba0: 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 20 69 73 20  vior.KeyInfo is 
0bb0: 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
0bc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0bd0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0be0: 65 4b 65 79 52 65 61 64 65 72 20 5f 6b 65 79 49  eKeyReader _keyI
0bf0: 6e 66 6f 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  nfo;....    /// 
0c00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0c10: 2f 2f 20 4d 61 74 63 68 65 73 20 74 68 65 20 76  // Matches the v
0c20: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  ersion of the co
0c30: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
0c40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0c50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20     internal int 
0c60: 5f 76 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  _version;....   
0c70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0c80: 20 20 20 20 2f 2f 2f 20 54 68 65 20 22 73 74 75      /// The "stu
0c90: 62 22 20 28 69 2e 65 2e 20 70 6c 61 63 65 68 6f  b" (i.e. placeho
0ca0: 6c 64 65 72 29 20 62 61 73 65 20 73 63 68 65 6d  lder) base schem
0cb0: 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 77 68  a name to use wh
0cc0: 65 6e 20 72 65 74 75 72 6e 69 6e 67 0d 0a 20 20  en returning..  
0cd0: 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 73 63 68    /// column sch
0ce0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ema information.
0cf0: 20 20 4d 61 74 63 68 65 73 20 74 68 65 20 62 61    Matches the ba
0d00: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 75  se schema name u
0d10: 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  sed by the..    
0d20: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 63  /// associated c
0d30: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
0d40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0d50: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
0d60: 6e 67 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61  ng _baseSchemaNa
0d70: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  me;....    /// <
0d80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0d90: 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74  / Internal const
0da0: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
0db0: 7a 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  zes the dataread
0dc0: 65 72 20 61 6e 64 20 73 65 74 73 20 75 70 20 74  er and sets up t
0dd0: 6f 20 62 65 67 69 6e 20 65 78 65 63 75 74 69 6e  o begin executin
0de0: 67 20 73 74 61 74 65 6d 65 6e 74 73 0d 0a 20 20  g statements..  
0df0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0e00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0e10: 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65 20   name="cmd">The 
0e20: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74 68  SQLiteCommand th
0e30: 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20 69  is data reader i
0e40: 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20  s for</param>.. 
0e50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e60: 6d 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20  me="behave">The 
0e70: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
0e80: 72 20 6f 66 20 74 68 65 20 64 61 74 61 20 72 65  r of the data re
0e90: 61 64 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ader</param>..  
0ea0: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
0eb0: 65 44 61 74 61 52 65 61 64 65 72 28 53 51 4c 69  eDataReader(SQLi
0ec0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43  teCommand cmd, C
0ed0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 62  ommandBehavior b
0ee0: 65 68 61 76 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ehave)..    {.. 
0ef0: 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69 73       _throwOnDis
0f00: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
0f10: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20       _command = 
0f20: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 5f 76 65 72  cmd;..      _ver
0f30: 73 69 6f 6e 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  sion = _command.
0f40: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 76 65 72 73  Connection._vers
0f50: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 5f 62 61 73  ion;..      _bas
0f60: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 5f 63  eSchemaName = _c
0f70: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
0f80: 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  n._baseSchemaNam
0f90: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 63 6f 6d  e;....      _com
0fa0: 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 3d 20 62  mandBehavior = b
0fb0: 65 68 61 76 65 3b 0d 0a 20 20 20 20 20 20 5f 61  ehave;..      _a
0fc0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
0fd0: 64 65 78 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  dex = -1;..     
0fe0: 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d   _rowsAffected =
0ff0: 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65   -1;....      Re
1000: 66 72 65 73 68 46 6c 61 67 73 28 29 3b 0d 0a 0d  freshFlags();...
1010: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
1020: 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
1030: 64 28 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  d(GetConnection(
1040: 74 68 69 73 29 2c 0d 0a 20 20 20 20 20 20 20 20  this),..        
1050: 20 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e    new Connection
1060: 45 76 65 6e 74 41 72 67 73 28 53 51 4c 69 74 65  EventArgs(SQLite
1070: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
1080: 79 70 65 2e 4e 65 77 44 61 74 61 52 65 61 64 65  ype.NewDataReade
1090: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 75  r,..          nu
10a0: 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61  ll, null, _comma
10b0: 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c 2c 20  nd, this, null, 
10c0: 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  null, new object
10d0: 5b 5d 20 7b 20 62 65 68 61 76 65 20 7d 29 29 3b  [] { behave }));
10e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 63  ....      if (_c
10f0: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
1100: 0a 20 20 20 20 20 20 20 20 20 20 4e 65 78 74 52  .          NextR
1110: 65 73 75 6c 74 28 29 3b 0d 0a 20 20 20 20 7d 0d  esult();..    }.
1120: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1190: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
11a0: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
11b0: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
11c0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
11d0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
11e0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
11f0: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
1200: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
1210: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
1220: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
1230: 64 20 26 26 20 5f 74 68 72 6f 77 4f 6e 44 69 73  d && _throwOnDis
1240: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
1250: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
1260: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
1270: 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c  ption(typeof(SQL
1280: 69 74 65 44 61 74 61 52 65 61 64 65 72 29 2e 4e  iteDataReader).N
1290: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
12a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1310: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1320: 0d 0a 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73  ..    /// Dispos
1330: 65 20 6f 66 20 61 6c 6c 20 72 65 73 6f 75 72 63  e of all resourc
1340: 65 73 20 75 73 65 64 20 62 79 20 74 68 69 73 20  es used by this 
1350: 64 61 74 61 72 65 61 64 65 72 2e 0d 0a 20 20 20  datareader...   
1360: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1380: 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22  name="disposing"
1390: 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70  ></param>..    p
13a0: 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64  rotected overrid
13b0: 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  e void Dispose(b
13c0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
13d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
13e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
13f0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1400: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1410: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1420: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
1430: 72 67 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  rgs(SQLiteConnec
1440: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 44 69  tionEventType.Di
1450: 73 70 6f 73 69 6e 67 44 61 74 61 52 65 61 64 65  sposingDataReade
1460: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
1470: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d  null, null, _com
1480: 6d 61 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c  mand, this, null
1490: 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65  , null, new obje
14a0: 63 74 5b 5d 20 7b 20 64 69 73 70 6f 73 69 6e 67  ct[] { disposing
14b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ,..            d
14c0: 69 73 70 6f 73 65 64 2c 20 5f 63 6f 6d 6d 61 6e  isposed, _comman
14d0: 64 42 65 68 61 76 69 6f 72 2c 20 5f 72 65 61 64  dBehavior, _read
14e0: 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f 77 73 41  ingState, _rowsA
14f0: 66 66 65 63 74 65 64 2c 20 5f 73 74 65 70 43 6f  ffected, _stepCo
1500: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
1510: 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 20 5f    _fieldCount, _
1520: 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 2c 20  disposeCommand, 
1530: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
1540: 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   }));....       
1550: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1570: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1580: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
15a0: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15d0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1610: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1620: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1630: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1640: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1650: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1680: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
16d0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
16e0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
16f0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1740: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1760: 4f 54 45 3a 20 46 69 78 20 66 6f 72 20 74 69 63  OTE: Fix for tic
1770: 6b 65 74 20 5b 65 31 62 32 65 30 66 37 36 39 5d  ket [e1b2e0f769]
1780: 2c 20 64 6f 20 4e 4f 54 20 74 68 72 6f 77 20 65  , do NOT throw e
1790: 78 63 65 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20  xceptions..     
17a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17b0: 20 20 20 20 77 68 69 6c 65 20 77 65 20 61 72 65      while we are
17c0: 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64 2e   being disposed.
17d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
17f0: 20 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69        _throwOnDi
1800: 73 70 6f 73 65 64 20 3d 20 66 61 6c 73 65 3b 0d  sposed = false;.
1810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1820: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1830: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
1840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1850: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
1860: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20  disposing);.... 
1870: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1880: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1890: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
18a0: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
18b0: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
18c0: 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  point...        
18d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
18e0: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
18f0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1900: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1910: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1980: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f  .    internal vo
1990: 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  id Cancel()..   
19a0: 20 7b 0d 0a 20 20 20 20 20 20 5f 76 65 72 73 69   {..      _versi
19b0: 6f 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  on = 0;..    }..
19c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
19d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c 6f  ry>..    /// Clo
19e0: 73 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  ses the dataread
19f0: 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20  er, potentially 
1a00: 63 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  closing the conn
1a10: 65 63 74 69 6f 6e 20 61 73 20 77 65 6c 6c 20 69  ection as well i
1a20: 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  f CommandBehavio
1a30: 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f  r.CloseConnectio
1a40: 6e 20 77 61 73 20 73 70 65 63 69 66 69 65 64 2e  n was specified.
1a50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1a60: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
1a70: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
1a80: 6c 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  lose()..    {.. 
1a90: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
1aa0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53  ed();....      S
1ab0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
1ac0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1ad0: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1ae0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f            new Co
1af0: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
1b00: 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  s(SQLiteConnecti
1b10: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73  onEventType.Clos
1b20: 69 6e 67 44 61 74 61 52 65 61 64 65 72 2c 0d 0a  ingDataReader,..
1b30: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
1b40: 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61 6e 64 2c 20  null, _command, 
1b50: 74 68 69 73 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  this, null, null
1b60: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
1b70: 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f   _commandBehavio
1b80: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 72  r,..          _r
1b90: 65 61 64 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f  eadingState, _ro
1ba0: 77 73 41 66 66 65 63 74 65 64 2c 20 5f 73 74 65  wsAffected, _ste
1bb0: 70 43 6f 75 6e 74 2c 20 5f 66 69 65 6c 64 43 6f  pCount, _fieldCo
1bc0: 75 6e 74 2c 20 5f 64 69 73 70 6f 73 65 43 6f 6d  unt, _disposeCom
1bd0: 6d 61 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  mand,..         
1be0: 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65   _throwOnDispose
1bf0: 64 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  d }));....      
1c00: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
1c10: 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61        if (_comma
1c20: 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nd != null)..   
1c30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c40: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1c50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c60: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1c70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c80: 20 20 2f 2f 20 4d 61 6b 65 20 73 75 72 65 20 77    // Make sure w
1c90: 65 27 76 65 20 6e 6f 74 20 62 65 65 6e 20 63 61  e've not been ca
1ca0: 6e 63 65 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  nceled..        
1cb0: 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73 69        if (_versi
1cc0: 6f 6e 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  on != 0)..      
1cd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ce0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d10: 20 20 20 20 20 77 68 69 6c 65 20 28 4e 65 78 74       while (Next
1d20: 52 65 73 75 6c 74 28 29 29 0d 0a 20 20 20 20 20  Result())..     
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d70: 20 20 20 20 20 20 20 20 63 61 74 63 68 28 53 51          catch(SQ
1d80: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 29 0d 0a  LiteException)..
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1db0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1dc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1dd0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 52 65       _command.Re
1de0: 73 65 74 44 61 74 61 52 65 61 64 65 72 28 29 3b  setDataReader();
1df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
1e10: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e30: 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64 61 74     // If the dat
1e40: 61 72 65 61 64 65 72 27 73 20 62 65 68 61 76 69  areader's behavi
1e50: 6f 72 20 69 6e 63 6c 75 64 65 73 20 63 6c 6f 73  or includes clos
1e60: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
1e70: 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73 6f 20 68  on, then do so h
1e80: 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ere...          
1e90: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
1ea0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
1eb0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73  andBehavior.Clos
1ec0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 21 3d 20  eConnection) != 
1ed0: 30 20 26 26 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  0 && _command.Co
1ee0: 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  nnection != null
1ef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f00: 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e     _command.Conn
1f10: 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d  ection.Close();.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f40: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
1f50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f60: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 64 69           if (_di
1f70: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 29 0d 0a 20  sposeCommand).. 
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63 6f               _co
1f90: 6d 6d 61 6e 64 2e 44 69 73 70 6f 73 65 28 29 3b  mmand.Dispose();
1fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
1fb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fc0: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 6e      _command = n
1fd0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f 61  ull;..        _a
1fe0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d  ctiveStatement =
1ff0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2000: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
2010: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f  null;..        _
2020: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d  fieldTypeArray =
2030: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d   null;..      }.
2040: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
2050: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2060: 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
2070: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2080: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65  {..          _ke
2090: 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b  yInfo.Dispose();
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79  ..          _key
20b0: 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Info = null;..  
20c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
20d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
20e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20f0: 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20 65    /// Throw an e
2100: 72 72 6f 72 20 69 66 20 74 68 65 20 64 61 74 61  rror if the data
2110: 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
2120: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2130: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
2140: 65 20 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73  e void CheckClos
2150: 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
2160: 20 20 20 69 66 20 28 21 5f 74 68 72 6f 77 4f 6e     if (!_throwOn
2170: 44 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  Disposed)..     
2180: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
2190: 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64      if (_command
21a0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
21b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
21c0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
21d0: 65 70 74 69 6f 6e 28 22 44 61 74 61 52 65 61 64  eption("DataRead
21e0: 65 72 20 68 61 73 20 62 65 65 6e 20 63 6c 6f 73  er has been clos
21f0: 65 64 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ed");....      i
2200: 66 20 28 5f 76 65 72 73 69 6f 6e 20 3d 3d 20 30  f (_version == 0
2210: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
2220: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2230: 74 69 6f 6e 28 22 45 78 65 63 75 74 69 6f 6e 20  tion("Execution 
2240: 77 61 73 20 61 62 6f 72 74 65 64 20 62 79 20 74  was aborted by t
2250: 68 65 20 75 73 65 72 22 29 3b 0d 0a 0d 0a 20 20  he user");....  
2260: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2270: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
2280: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
2290: 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ction;....      
22a0: 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  if (connection._
22b0: 76 65 72 73 69 6f 6e 20 21 3d 20 5f 76 65 72 73  version != _vers
22c0: 69 6f 6e 20 7c 7c 20 63 6f 6e 6e 65 63 74 69 6f  ion || connectio
22d0: 6e 2e 53 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65  n.State != Conne
22e0: 63 74 69 6f 6e 53 74 61 74 65 2e 4f 70 65 6e 29  ctionState.Open)
22f0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
2300: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
2310: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 43  tionException("C
2320: 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 63 6c  onnection was cl
2330: 6f 73 65 64 2c 20 73 74 61 74 65 6d 65 6e 74 20  osed, statement 
2340: 77 61 73 20 74 65 72 6d 69 6e 61 74 65 64 22 29  was terminated")
2350: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
2360: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2370: 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20     /// Throw an 
2380: 65 72 72 6f 72 20 69 66 20 61 20 72 6f 77 20 69  error if a row i
2390: 73 20 6e 6f 74 20 6c 6f 61 64 65 64 0d 0a 20 20  s not loaded..  
23a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
23b0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
23c0: 69 64 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77  id CheckValidRow
23d0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
23e0: 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
23f0: 74 65 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  te != 0)..      
2400: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
2410: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
2420: 70 74 69 6f 6e 28 22 4e 6f 20 63 75 72 72 65 6e  ption("No curren
2430: 74 20 72 6f 77 22 29 3b 0d 0a 20 20 20 20 7d 0d  t row");..    }.
2440: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2450: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
2460: 75 6d 65 72 61 74 6f 72 20 73 75 70 70 6f 72 74  umerator support
2470: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2480: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
2490: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
24a0: 20 44 62 45 6e 75 6d 65 72 61 74 6f 72 20 6f 62   DbEnumerator ob
24b0: 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ject.</returns>.
24c0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
24d0: 72 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 73  ride Collections
24e0: 2e 49 45 6e 75 6d 65 72 61 74 6f 72 20 47 65 74  .IEnumerator Get
24f0: 45 6e 75 6d 65 72 61 74 6f 72 28 29 0d 0a 20 20  Enumerator()..  
2500: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
2510: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
2520: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 62     return new Db
2530: 45 6e 75 6d 65 72 61 74 6f 72 28 74 68 69 73 2c  Enumerator(this,
2540: 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
2550: 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
2560: 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65  avior.CloseConne
2570: 63 74 69 6f 6e 29 20 3d 3d 20 43 6f 6d 6d 61 6e  ction) == Comman
2580: 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43  dBehavior.CloseC
2590: 6f 6e 6e 65 63 74 69 6f 6e 29 29 3b 0d 0a 20 20  onnection));..  
25a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
25b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
25c0: 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65  / Not implemente
25d0: 64 2e 20 20 52 65 74 75 72 6e 73 20 30 0d 0a 20  d.  Returns 0.. 
25e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
25f0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
2600: 65 72 72 69 64 65 20 69 6e 74 20 44 65 70 74 68  erride int Depth
2610: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
2620: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
2630: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2640: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43  ed();..        C
2650: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
2660: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
2670: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2680: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2690: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
26a0: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
26b0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
26c0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75  the current resu
26d0: 6c 74 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ltset..    /// <
26e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
26f0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
2700: 6e 74 20 46 69 65 6c 64 43 6f 75 6e 74 0d 0a 20  nt FieldCount.. 
2710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
2720: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2730: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
2740: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2750: 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  kClosed();....  
2760: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
2770: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
2780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66         return _f
2790: 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  ieldCount;....  
27a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69        return _fi
27b0: 65 6c 64 43 6f 75 6e 74 20 2b 20 5f 6b 65 79 49  eldCount + _keyI
27c0: 6e 66 6f 2e 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  nfo.Count;..    
27d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
27e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
27f0: 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 63 65 73 20  .    /// Forces 
2800: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
2810: 6c 61 67 73 20 63 61 63 68 65 64 20 62 79 20 74  lags cached by t
2820: 68 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20  his data reader 
2830: 74 6f 20 62 65 20 72 65 66 72 65 73 68 65 64 0d  to be refreshed.
2840: 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68  .    /// from th
2850: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6e  e underlying con
2860: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
2870: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2880: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 52 65    public void Re
2890: 66 72 65 73 68 46 6c 61 67 73 28 29 0d 0a 20 20  freshFlags()..  
28a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
28b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
28c0: 0a 20 20 20 20 20 20 20 20 5f 66 6c 61 67 73 20  .        _flags 
28d0: 3d 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  = SQLiteCommand.
28e0: 47 65 74 46 6c 61 67 73 28 5f 63 6f 6d 6d 61 6e  GetFlags(_comman
28f0: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
2900: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2910: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
2920: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2930: 6f 77 73 20 73 65 65 6e 20 73 6f 20 66 61 72 20  ows seen so far 
2940: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  in the current r
2950: 65 73 75 6c 74 20 73 65 74 2e 0d 0a 20 20 20 20  esult set...    
2960: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2970: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 53      public int S
2980: 74 65 70 43 6f 75 6e 74 0d 0a 20 20 20 20 7b 0d  tepCount..    {.
2990: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
29a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29b0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
29c0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
29d0: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
29e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29f0: 20 72 65 74 75 72 6e 20 5f 73 74 65 70 43 6f 75   return _stepCou
2a00: 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  nt;..        }..
2a10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
2a20: 76 61 74 65 20 69 6e 74 20 50 72 69 76 61 74 65  vate int Private
2a30: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
2a40: 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
2a50: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
2a60: 66 69 65 6c 64 43 6f 75 6e 74 3b 20 7d 0d 0a 20  fieldCount; }.. 
2a70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
2a80: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
2a90: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
2aa0: 75 6d 62 65 72 20 6f 66 20 76 69 73 69 62 6c 65  umber of visible
2ab0: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
2ac0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
2ad0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2ae0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
2af0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 69   override int Vi
2b00: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 0d  sibleFieldCount.
2b10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2b20: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2b30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
2b40: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68  d();..        Ch
2b50: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20  eckClosed();..  
2b60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 72 69        return Pri
2b70: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
2b80: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 7d 0d  Count;..      }.
2b90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2ba0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2bb0: 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
2bc0: 20 69 73 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   is used to make
2bd0: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
2be0: 20 73 65 74 20 69 73 20 6f 70 65 6e 20 61 6e 64   set is open and
2bf0: 20 61 20 72 6f 77 20 69 73 20 63 75 72 72 65 6e   a row is curren
2c00: 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a  tly available...
2c10: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2c20: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
2c30: 76 6f 69 64 20 56 65 72 69 66 79 46 6f 72 47 65  void VerifyForGe
2c40: 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t()..    {..    
2c50: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
2c60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2c70: 6b 56 61 6c 69 64 52 6f 77 28 29 3b 0d 0a 20 20  kValidRow();..  
2c80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2c90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2ca0: 2f 20 53 51 4c 69 74 65 20 69 73 20 69 6e 68 65  / SQLite is inhe
2cb0: 72 65 6e 74 6c 79 20 75 6e 2d 74 79 70 65 64 2e  rently un-typed.
2cc0: 20 20 41 6c 6c 20 64 61 74 61 74 79 70 65 73 20    All datatypes 
2cd0: 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20 6e 61  in SQLite are na
2ce0: 74 69 76 65 6c 79 20 73 74 72 69 6e 67 73 2e 20  tively strings. 
2cf0: 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   The definition 
2d00: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  of the columns o
2d10: 66 20 61 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  f a table..    /
2d20: 2f 2f 20 61 6e 64 20 74 68 65 20 61 66 66 69 6e  // and the affin
2d30: 69 74 79 20 6f 66 20 72 65 74 75 72 6e 65 64 20  ity of returned 
2d40: 74 79 70 65 73 20 61 72 65 20 61 6c 6c 20 77 65  types are all we
2d50: 20 68 61 76 65 20 74 6f 20 67 6f 20 6f 6e 20 74   have to go on t
2d60: 6f 20 74 79 70 65 2d 72 65 73 74 72 69 63 74 20  o type-restrict 
2d70: 64 61 74 61 20 69 6e 20 74 68 65 20 72 65 61 64  data in the read
2d80: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 0d 0a 20 20  er...    ///..  
2d90: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
2da0: 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ion attempts to 
2db0: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
2dc0: 74 79 70 65 20 6f 66 20 64 61 74 61 20 62 65 69  type of data bei
2dd0: 6e 67 20 72 65 71 75 65 73 74 65 64 20 6f 66 20  ng requested of 
2de0: 61 20 63 6f 6c 75 6d 6e 20 6d 61 74 63 68 65 73  a column matches
2df0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
2e00: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 6e   the column.  In
2e10: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63 61  ..    /// the ca
2e20: 73 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  se of columns th
2e30: 61 74 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  at are not backe
2e40: 64 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 64  d into a table d
2e50: 65 66 69 6e 69 74 69 6f 6e 2c 20 77 65 20 61 74  efinition, we at
2e60: 74 65 6d 70 74 20 74 6f 20 6d 61 74 63 68 20 75  tempt to match u
2e70: 70 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  p the affinity o
2e80: 66 20 61 20 63 6f 6c 75 6d 6e 20 28 69 6e 74 2c  f a column (int,
2e90: 20 64 6f 75 62 6c 65 2c 20 73 74 72 69 6e 67 20   double, string 
2ea0: 6f 72 20 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f  or blob)..    //
2eb0: 2f 20 74 6f 20 61 20 73 65 74 20 6f 66 20 6b 6e  / to a set of kn
2ec0: 6f 77 6e 20 74 79 70 65 73 20 74 68 61 74 20 63  own types that c
2ed0: 6c 6f 73 65 6c 79 20 6d 61 74 63 68 20 74 68 61  losely match tha
2ee0: 74 20 61 66 66 69 6e 69 74 79 2e 20 20 49 74 27  t affinity.  It'
2ef0: 73 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 73  s not an exact s
2f00: 63 69 65 6e 63 65 2c 20 62 75 74 20 69 74 73 20  cience, but its 
2f10: 74 68 65 20 62 65 73 74 20 77 65 20 63 61 6e 20  the best we can 
2f20: 64 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  do...    /// </s
2f30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2f40: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2f50: 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f  /// This functio
2f60: 6e 20 74 68 72 6f 77 73 20 61 6e 20 49 6e 76 61  n throws an Inva
2f70: 6c 69 64 54 79 70 65 43 61 73 74 28 29 20 65 78  lidTypeCast() ex
2f80: 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 72  ception if the r
2f90: 65 71 75 65 73 74 65 64 20 74 79 70 65 20 64 6f  equested type do
2fa0: 65 73 6e 27 74 20 6d 61 74 63 68 20 74 68 65 20  esn't match the 
2fb0: 63 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e 69 74  column's definit
2fc0: 69 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74 79 2e  ion or affinity.
2fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
2fe0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  rns>..    /// <p
2ff0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
3000: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
3010: 6f 6c 75 6d 6e 20 74 6f 20 74 79 70 65 2d 63 68  olumn to type-ch
3020: 65 63 6b 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eck</param>..   
3030: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3040: 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
3050: 77 65 20 77 61 6e 74 20 74 6f 20 67 65 74 20 6f  we want to get o
3060: 75 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ut of the column
3070: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 72  </param>..    pr
3080: 69 76 61 74 65 20 54 79 70 65 41 66 66 69 6e 69  ivate TypeAffini
3090: 74 79 20 56 65 72 69 66 79 54 79 70 65 28 69 6e  ty VerifyType(in
30a0: 74 20 69 2c 20 44 62 54 79 70 65 20 74 79 70 29  t i, DbType typ)
30b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
30c0: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
30d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
30e0: 6c 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 79 70  lags.NoVerifyTyp
30f0: 65 41 66 66 69 6e 69 74 79 29 20 3d 3d 20 53 51  eAffinity) == SQ
3100: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3110: 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 79 70 65  ags.NoVerifyType
3120: 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20  Affinity)..     
3130: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79         return Ty
3140: 70 65 41 66 66 69 6e 69 74 79 2e 4e 6f 6e 65 3b  peAffinity.None;
3150: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70 65  ....        Type
3160: 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e 69 74  Affinity affinit
3170: 79 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70  y = GetSQLiteTyp
3180: 65 28 5f 66 6c 61 67 73 2c 20 69 29 2e 41 66 66  e(_flags, i).Aff
3190: 69 6e 69 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  inity;....      
31a0: 20 20 73 77 69 74 63 68 20 28 61 66 66 69 6e 69    switch (affini
31b0: 74 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ty)..        {..
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
31d0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
31e0: 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  t64:..          
31f0: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
3200: 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29 20 72   DbType.Int64) r
3210: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3230: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3240: 70 65 2e 49 6e 74 33 32 29 20 72 65 74 75 72 6e  pe.Int32) return
3250: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3260: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3270: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e  typ == DbType.In
3280: 74 31 36 29 20 72 65 74 75 72 6e 20 61 66 66 69  t16) return affi
3290: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
32a0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
32b0: 3d 20 44 62 54 79 70 65 2e 42 79 74 65 29 20 72  = DbType.Byte) r
32c0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
32d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32e0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
32f0: 70 65 2e 53 42 79 74 65 29 20 72 65 74 75 72 6e  pe.SByte) return
3300: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3310: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3320: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 6f  typ == DbType.Bo
3330: 6f 6c 65 61 6e 29 20 72 65 74 75 72 6e 20 61 66  olean) return af
3340: 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20  finity;..       
3350: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
3360: 20 3d 3d 20 44 62 54 79 70 65 2e 44 61 74 65 54   == DbType.DateT
3370: 69 6d 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  ime) return affi
3380: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
3390: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
33a0: 3d 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29  = DbType.Double)
33b0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
33c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33d0: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
33e0: 54 79 70 65 2e 53 69 6e 67 6c 65 29 20 72 65 74  Type.Single) ret
33f0: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3410: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3420: 2e 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e  .Decimal) return
3430: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3440: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3450: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
3460: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
3470: 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
3480: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
3490: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 6f 75  yp == DbType.Dou
34a0: 62 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  ble) return affi
34b0: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
34c0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
34d0: 3d 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29  = DbType.Single)
34e0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
34f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3500: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
3510: 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72 65  Type.Decimal) re
3520: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a  turn affinity;..
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3540: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3550: 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74 75  e.DateTime) retu
3560: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20  rn affinity;..  
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
3580: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
3590: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
35a0: 69 74 79 2e 54 65 78 74 3a 0d 0a 20 20 20 20 20  ity.Text:..     
35b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
35c0: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 74 72  yp == DbType.Str
35d0: 69 6e 67 29 20 72 65 74 75 72 6e 20 61 66 66 69  ing) return affi
35e0: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
35f0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
3600: 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29 20 72  = DbType.Guid) r
3610: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3630: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3640: 70 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74  pe.DateTime) ret
3650: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3670: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3680: 2e 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e  .Decimal) return
3690: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
36a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
36b0: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
36c0: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
36d0: 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20  y.Blob:..       
36e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
36f0: 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29   == DbType.Guid)
3700: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
3710: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3720: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
3730: 54 79 70 65 2e 42 69 6e 61 72 79 29 20 72 65 74  Type.Binary) ret
3740: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3760: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3770: 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e 20  .String) return 
3780: 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  affinity;..     
3790: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
37a0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
37b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
37c0: 77 20 49 6e 76 61 6c 69 64 43 61 73 74 45 78 63  w InvalidCastExc
37d0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 7d  eption();..    }
37e0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
37f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
3800: 6e 76 6f 6b 65 73 20 74 68 65 20 64 61 74 61 20  nvokes the data 
3810: 72 65 61 64 65 72 20 76 61 6c 75 65 20 63 61 6c  reader value cal
3820: 6c 62 61 63 6b 20 63 6f 6e 66 69 67 75 72 65 64  lback configured
3830: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
3840: 65 0d 0a 20 20 20 20 2f 2f 2f 20 74 79 70 65 20  e..    /// type 
3850: 6e 61 6d 65 20 61 73 73 6f 63 69 61 74 65 64 20  name associated 
3860: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
3870: 65 64 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 6e  ed column.  If n
3880: 6f 20 64 61 74 61 20 72 65 61 64 65 72 0d 0a 20  o data reader.. 
3890: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 63 61 6c     /// value cal
38a0: 6c 62 61 63 6b 20 69 73 20 61 76 61 69 6c 61 62  lback is availab
38b0: 6c 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  le for the datab
38c0: 61 73 65 20 74 79 70 65 20 6e 61 6d 65 2c 20 64  ase type name, d
38d0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
38e0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
38f0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
3900: 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20  ame="index">..  
3910: 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78 20    /// The index 
3920: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65  of the column be
3930: 69 6e 67 20 72 65 61 64 2e 0d 0a 20 20 20 20 2f  ing read...    /
3940: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
3950: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3960: 3d 22 65 76 65 6e 74 41 72 67 73 22 3e 0d 0a 20  ="eventArgs">.. 
3970: 20 20 20 2f 2f 2f 20 54 68 65 20 65 78 74 72 61     /// The extra
3980: 20 65 76 65 6e 74 20 64 61 74 61 20 74 6f 20 70   event data to p
3990: 61 73 73 20 69 6e 74 6f 20 74 68 65 20 63 61 6c  ass into the cal
39a0: 6c 62 61 63 6b 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lback...    /// 
39b0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
39c0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
39d0: 6f 6d 70 6c 65 74 65 22 3e 0d 0a 20 20 20 20 2f  omplete">..    /
39e0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
39f0: 68 65 20 64 65 66 61 75 6c 74 20 68 61 6e 64 6c  he default handl
3a00: 69 6e 67 20 66 6f 72 20 74 68 65 20 64 61 74 61  ing for the data
3a10: 20 72 65 61 64 65 72 20 63 61 6c 6c 20 73 68 6f   reader call sho
3a20: 75 6c 64 20 62 65 0d 0a 20 20 20 20 2f 2f 2f 20  uld be..    /// 
3a30: 73 6b 69 70 70 65 64 2e 20 20 49 66 20 74 68 69  skipped.  If thi
3a40: 73 20 69 73 20 73 65 74 20 74 6f 20 6e 6f 6e 2d  s is set to non-
3a50: 7a 65 72 6f 20 61 6e 64 20 74 68 65 20 6e 65 63  zero and the nec
3a60: 65 73 73 61 72 79 20 72 65 74 75 72 6e 20 76 61  essary return va
3a70: 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 73 20  lue..    /// is 
3a80: 75 6e 61 76 61 69 6c 61 62 6c 65 20 6f 72 20 75  unavailable or u
3a90: 6e 73 75 69 74 61 62 6c 65 2c 20 61 6e 20 65 78  nsuitable, an ex
3aa0: 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ception will be 
3ab0: 74 68 72 6f 77 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  thrown...    ///
3ac0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70   </param>..    p
3ad0: 72 69 76 61 74 65 20 76 6f 69 64 20 49 6e 76 6f  rivate void Invo
3ae0: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
3af0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 69 6e  ack(..        in
3b00: 74 20 69 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20  t index,..      
3b10: 20 20 53 51 4c 69 74 65 52 65 61 64 45 76 65 6e    SQLiteReadEven
3b20: 74 41 72 67 73 20 65 76 65 6e 74 41 72 67 73 2c  tArgs eventArgs,
3b30: 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20 62 6f  ..        out bo
3b40: 6f 6c 20 63 6f 6d 70 6c 65 74 65 0d 0a 20 20 20  ol complete..   
3b50: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
3b60: 20 20 20 20 20 20 20 63 6f 6d 70 6c 65 74 65 20         complete 
3b70: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
3b80: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
3b90: 6f 6e 46 6c 61 67 73 20 6f 6c 64 46 6c 61 67 73  onFlags oldFlags
3ba0: 20 3d 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20   = _flags;..    
3bb0: 20 20 20 20 5f 66 6c 61 67 73 20 26 3d 20 7e 53      _flags &= ~S
3bc0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
3bd0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
3be0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
3bf0: 61 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  acks;....       
3c00: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
3c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
3c20: 69 6e 67 20 74 79 70 65 4e 61 6d 65 20 3d 20 47  ing typeName = G
3c30: 65 74 44 61 74 61 54 79 70 65 4e 61 6d 65 28 69  etDataTypeName(i
3c40: 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
3c50: 20 20 20 20 20 20 69 66 20 28 74 79 70 65 4e 61        if (typeNa
3c60: 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
3c80: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
3c90: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
3ca0: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
3cb0: 3d 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  = GetConnection(
3cc0: 74 68 69 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  this);....      
3cd0: 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63        if (connec
3ce0: 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3d00: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
3d10: 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65        SQLiteType
3d20: 43 61 6c 6c 62 61 63 6b 73 20 63 61 6c 6c 62 61  Callbacks callba
3d30: 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  cks;....        
3d40: 20 20 20 20 69 66 20 28 21 63 6f 6e 6e 65 63 74      if (!connect
3d50: 69 6f 6e 2e 54 72 79 47 65 74 54 79 70 65 43 61  ion.TryGetTypeCa
3d60: 6c 6c 62 61 63 6b 73 28 74 79 70 65 4e 61 6d 65  llbacks(typeName
3d70: 2c 20 6f 75 74 20 63 61 6c 6c 62 61 63 6b 73 29  , out callbacks)
3d80: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
3d90: 20 20 20 20 20 28 63 61 6c 6c 62 61 63 6b 73 20       (callbacks 
3da0: 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
3db0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3dc0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3dd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3de0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3df0: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 43  SQLiteReadValueC
3e00: 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
3e10: 20 3d 20 63 61 6c 6c 62 61 63 6b 73 2e 52 65 61   = callbacks.Rea
3e20: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 3b 0d  dValueCallback;.
3e30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
3e40: 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
3e50: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3e60: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
3e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
3e80: 65 63 74 20 75 73 65 72 44 61 74 61 20 3d 20 63  ect userData = c
3e90: 61 6c 6c 62 61 63 6b 73 2e 52 65 61 64 56 61 6c  allbacks.ReadVal
3ea0: 75 65 55 73 65 72 44 61 74 61 3b 0d 0a 0d 0a 20  ueUserData;.... 
3eb0: 20 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62             callb
3ec0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
3ed0: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
3ee0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2c 20 74 68 69  tement._sql, thi
3ef0: 73 2c 20 6f 6c 64 46 6c 61 67 73 2c 20 65 76 65  s, oldFlags, eve
3f00: 6e 74 41 72 67 73 2c 20 74 79 70 65 4e 61 6d 65  ntArgs, typeName
3f10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3f20: 20 20 20 69 6e 64 65 78 2c 20 75 73 65 72 44 61     index, userDa
3f30: 74 61 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  ta, out complete
3f40: 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
3f50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3f60: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
3f70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3f80: 20 20 20 5f 66 6c 61 67 73 20 7c 3d 20 53 51 4c     _flags |= SQL
3f90: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
3fa0: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
3fb0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
3fc0: 6b 73 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ks;..        }..
3fd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
3fe0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3ff0: 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20  /// Attempts to 
4000: 71 75 65 72 79 20 74 68 65 20 69 6e 74 65 67 65  query the intege
4010: 72 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72  r identifier for
4020: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
4030: 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 2f 2f 2f  .  This..    ///
4040: 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 66   will not work f
4050: 6f 72 20 74 61 62 6c 65 73 20 74 68 61 74 20 77  or tables that w
4060: 65 72 65 20 63 72 65 61 74 65 64 20 57 49 54 48  ere created WITH
4070: 4f 55 54 20 52 4f 57 49 44 20 2d 4f 52 2d 20 69  OUT ROWID -OR- i
4080: 66 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 71  f the..    /// q
4090: 75 65 72 79 20 64 6f 65 73 20 6e 6f 74 20 69 6e  uery does not in
40a0: 63 6c 75 64 65 20 74 68 65 20 22 72 6f 77 69 64  clude the "rowid
40b0: 22 20 63 6f 6c 75 6d 6e 20 6f 72 20 6f 6e 65 20  " column or one 
40c0: 6f 66 20 69 74 73 20 61 6c 69 61 73 65 73 20 2d  of its aliases -
40d0: 4f 52 2d 0d 0a 20 20 20 20 2f 2f 2f 20 69 66 20  OR-..    /// if 
40e0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
40f0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 22  QLiteDataReader"
4100: 20 2f 3e 20 77 61 73 20 6e 6f 74 20 63 72 65 61   /> was not crea
4110: 74 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20  ted with the..  
4120: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
4130: 22 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72  "CommandBehavior
4140: 2e 4b 65 79 49 6e 66 6f 22 2f 3e 20 66 6c 61 67  .KeyInfo"/> flag
4150: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
4160: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
4170: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 0d  param name="i">.
4180: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64  .    /// The ind
4190: 65 78 20 6f 66 20 74 68 65 20 42 4c 4f 42 20 63  ex of the BLOB c
41a0: 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  olumn...    /// 
41b0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
41c0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
41d0: 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72   /// The integer
41e0: 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20   identifier for 
41f0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
4200: 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20  -OR- null if it 
4210: 63 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 2f  could not..    /
4220: 2f 2f 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64  // be determined
4230: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
4240: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
4250: 6e 61 6c 20 6c 6f 6e 67 3f 20 47 65 74 52 6f 77  nal long? GetRow
4260: 49 64 28 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  Id(..        int
4270: 20 69 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20   i..        ).. 
4280: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
4290: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
42a0: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
42b0: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
42c0: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
42d0: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
42e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
42f0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
4300: 20 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65   string database
4310: 4e 61 6d 65 20 3d 20 47 65 74 44 61 74 61 62 61  Name = GetDataba
4320: 73 65 4e 61 6d 65 28 69 29 3b 0d 0a 20 20 20 20  seName(i);..    
4330: 20 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c 65      string table
4340: 4e 61 6d 65 20 3d 20 47 65 74 54 61 62 6c 65 4e  Name = GetTableN
4350: 61 6d 65 28 69 29 3b 0d 0a 20 20 20 20 20 20 20  ame(i);..       
4360: 20 69 6e 74 20 69 52 6f 77 49 64 20 3d 20 5f 6b   int iRowId = _k
4370: 65 79 49 6e 66 6f 2e 47 65 74 52 6f 77 49 64 49  eyInfo.GetRowIdI
4380: 6e 64 65 78 28 64 61 74 61 62 61 73 65 4e 61 6d  ndex(databaseNam
4390: 65 2c 20 74 61 62 6c 65 4e 61 6d 65 29 3b 0d 0a  e, tableName);..
43a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 52  ..        if (iR
43b0: 6f 77 49 64 20 21 3d 20 2d 31 29 0d 0a 20 20 20  owId != -1)..   
43c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
43d0: 47 65 74 49 6e 74 36 34 28 69 52 6f 77 49 64 29  GetInt64(iRowId)
43e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
43f0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
4400: 52 6f 77 49 64 28 64 61 74 61 62 61 73 65 4e 61  RowId(databaseNa
4410: 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65 29 3b 0d  me, tableName);.
4420: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
4430: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
4440: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
4450: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 3c  he column as a <
4460: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
4470: 42 6c 6f 62 22 20 2f 3e 20 6f 62 6a 65 63 74 2e  Blob" /> object.
4480: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 77  ..    /// This w
4490: 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 72  ill not work for
44a0: 20 74 61 62 6c 65 73 20 74 68 61 74 20 77 65 72   tables that wer
44b0: 65 20 63 72 65 61 74 65 64 20 57 49 54 48 4f 55  e created WITHOU
44c0: 54 20 52 4f 57 49 44 0d 0a 20 20 20 20 2f 2f 2f  T ROWID..    ///
44d0: 20 2d 4f 52 2d 20 69 66 20 74 68 65 20 71 75 65   -OR- if the que
44e0: 72 79 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63 6c  ry does not incl
44f0: 75 64 65 20 74 68 65 20 22 72 6f 77 69 64 22 20  ude the "rowid" 
4500: 63 6f 6c 75 6d 6e 20 6f 72 20 6f 6e 65 0d 0a 20  column or one.. 
4510: 20 20 20 2f 2f 2f 20 6f 66 20 69 74 73 20 61 6c     /// of its al
4520: 69 61 73 65 73 20 2d 4f 52 2d 20 69 66 20 74 68  iases -OR- if th
4530: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
4540: 69 74 65 44 61 74 61 52 65 61 64 65 72 22 20 2f  iteDataReader" /
4550: 3e 20 77 61 73 0d 0a 20 20 20 20 2f 2f 2f 20 6e  > was..    /// n
4560: 6f 74 20 63 72 65 61 74 65 64 20 77 69 74 68 20  ot created with 
4570: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43  the <see cref="C
4580: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 4b  ommandBehavior.K
4590: 65 79 49 6e 66 6f 22 20 2f 3e 0d 0a 20 20 20 20  eyInfo" />..    
45a0: 2f 2f 2f 20 66 6c 61 67 2e 0d 0a 20 20 20 20 2f  /// flag...    /
45b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
45c0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
45d0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
45e0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
45f0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
4600: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65   <param name="re
4610: 61 64 4f 6e 6c 79 22 3e 0d 0a 20 20 20 20 2f 2f  adOnly">..    //
4620: 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6f 70  / Non-zero to op
4630: 65 6e 20 74 68 65 20 62 6c 6f 62 20 6f 62 6a 65  en the blob obje
4640: 63 74 20 66 6f 72 20 72 65 61 64 2d 6f 6e 6c 79  ct for read-only
4650: 20 61 63 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f   access...    //
4660: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
4670: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 6e  /// <returns>A n
4680: 65 77 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ew <see cref="SQ
4690: 4c 69 74 65 42 6c 6f 62 22 20 2f 3e 20 6f 62 6a  LiteBlob" /> obj
46a0: 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ect.</returns>..
46b0: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
46c0: 65 42 6c 6f 62 20 47 65 74 42 6c 6f 62 28 69 6e  eBlob GetBlob(in
46d0: 74 20 69 2c 20 62 6f 6f 6c 20 72 65 61 64 4f 6e  t i, bool readOn
46e0: 6c 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ly)..    {..    
46f0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
4700: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
4710: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
4720: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
4730: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
4740: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
4750: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
4760: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
4770: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
4780: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
4790: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
47a0: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
47b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
47c0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
47d0: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
47e0: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
47f0: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
4800: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
4810: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
4820: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
4830: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
4840: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
4850: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
4860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4870: 22 47 65 74 42 6c 6f 62 22 2c 20 6e 65 77 20 53  "GetBlob", new S
4880: 51 4c 69 74 65 52 65 61 64 42 6c 6f 62 45 76 65  QLiteReadBlobEve
4890: 6e 74 41 72 67 73 28 72 65 61 64 4f 6e 6c 79 29  ntArgs(readOnly)
48a0: 2c 20 76 61 6c 75 65 29 2c 0d 0a 20 20 20 20 20  , value),..     
48b0: 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 20 63             out c
48c0: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
48d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
48e0: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
48f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
4900: 53 51 4c 69 74 65 42 6c 6f 62 29 76 61 6c 75 65  SQLiteBlob)value
4910: 2e 42 6c 6f 62 56 61 6c 75 65 3b 0d 0a 20 20 20  .BlobValue;..   
4920: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4930: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
4940: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
4950: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
4960: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
4970: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
4980: 79 49 6e 66 6f 2e 47 65 74 42 6c 6f 62 28 69 20  yInfo.GetBlob(i 
4990: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
49a0: 46 69 65 6c 64 43 6f 75 6e 74 2c 20 72 65 61 64  FieldCount, read
49b0: 4f 6e 6c 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Only);....      
49c0: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42    return SQLiteB
49d0: 6c 6f 62 2e 43 72 65 61 74 65 28 74 68 69 73 2c  lob.Create(this,
49e0: 20 69 2c 20 72 65 61 64 4f 6e 6c 79 29 3b 0d 0a   i, readOnly);..
49f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
4a00: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
4a10: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
4a20: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 62 6f  e column as a bo
4a30: 6f 6c 65 61 6e 20 76 61 6c 75 65 0d 0a 20 20 20  olean value..   
4a40: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
4a50: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
4a60: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
4a70: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
4a80: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
4a90: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62 6f 6f 6c  // <returns>bool
4aa0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4ab0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
4ac0: 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65 61 6e 28  bool GetBoolean(
4ad0: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
4ae0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
4af0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
4b00: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
4b10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
4b20: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
4b30: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
4b40: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
4b50: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
4b60: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
4b70: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
4b80: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
4b90: 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20  Callbacks)..    
4ba0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4bb0: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
4bc0: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
4bd0: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
4be0: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
4bf0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
4c00: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
4c10: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
4c20: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
4c30: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
4c40: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
4c50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4c60: 20 20 20 22 47 65 74 42 6f 6f 6c 65 61 6e 22 2c     "GetBoolean",
4c70: 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f   null, value), o
4c80: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
4c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4ca0: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
4cb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4cc0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
4cd0: 61 6c 75 65 2e 42 6f 6f 6c 65 61 6e 56 61 6c 75  alue.BooleanValu
4ce0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d00: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
4d10: 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69  Exception("missi
4d20: 6e 67 20 62 6f 6f 6c 65 61 6e 20 72 65 74 75 72  ng boolean retur
4d30: 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20  n value");....  
4d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4d50: 74 75 72 6e 20 28 62 6f 6f 6c 29 76 61 6c 75 65  turn (bool)value
4d60: 2e 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 3b 0d 0a  .BooleanValue;..
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4d80: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4d90: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
4da0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
4db0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
4dc0: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
4dd0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
4de0: 6b 65 79 49 6e 66 6f 2e 47 65 74 42 6f 6f 6c 65  keyInfo.GetBoole
4df0: 61 6e 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  an(i - PrivateVi
4e00: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
4e10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ;....        Ver
4e20: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
4e30: 65 2e 42 6f 6f 6c 65 61 6e 29 3b 0d 0a 20 20 20  e.Boolean);..   
4e40: 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
4e50: 65 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28 47 65  ert.ToBoolean(Ge
4e60: 74 56 61 6c 75 65 28 69 29 2c 20 43 75 6c 74 75  tValue(i), Cultu
4e70: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
4e80: 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lture);..    }..
4e90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
4ea0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
4eb0: 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d  rieves the colum
4ec0: 6e 20 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79  n as a single by
4ed0: 74 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f  te value..    //
4ee0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
4ef0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4f00: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
4f10: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
4f20: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
4f30: 3c 72 65 74 75 72 6e 73 3e 62 79 74 65 3c 2f 72  <returns>byte</r
4f40: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
4f50: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 79 74  lic override byt
4f60: 65 20 47 65 74 42 79 74 65 28 69 6e 74 20 69 29  e GetByte(int i)
4f70: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4f80: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
4f90: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
4fa0: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
4fb0: 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
4fc0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
4fd0: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
4fe0: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
4ff0: 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51  Callbacks) == SQ
5000: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
5010: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
5020: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
5030: 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  cks)..        {.
5040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
5050: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
5060: 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53  ue value = new S
5070: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
5080: 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  alue();..       
5090: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65       bool comple
50a0: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
50b0: 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c     InvokeReadVal
50c0: 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65  ueCallback(i, ne
50d0: 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75  w SQLiteReadValu
50e0: 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  eEventArgs(..   
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
5100: 74 42 79 74 65 22 2c 20 6e 75 6c 6c 2c 20 76 61  tByte", null, va
5110: 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65  lue), out comple
5120: 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
5130: 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65      if (complete
5140: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5160: 20 20 69 66 20 28 76 61 6c 75 65 2e 42 79 74 65    if (value.Byte
5170: 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Value == null)..
5180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5190: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
51a0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d  LiteException("m
51b0: 69 73 73 69 6e 67 20 62 79 74 65 20 72 65 74 75  issing byte retu
51c0: 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  rn value");.... 
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
51e0: 65 74 75 72 6e 20 28 62 79 74 65 29 76 61 6c 75  eturn (byte)valu
51f0: 65 2e 42 79 74 65 56 61 6c 75 65 3b 0d 0a 20 20  e.ByteValue;..  
5200: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5210: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5220: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
5230: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
5240: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
5250: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
5260: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
5270: 79 49 6e 66 6f 2e 47 65 74 42 79 74 65 28 69 20  yInfo.GetByte(i 
5280: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
5290: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
52a0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79          VerifyTy
52b0: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42 79 74  pe(i, DbType.Byt
52c0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
52d0: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
52e0: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74  ment._sql.GetByt
52f0: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
5300: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
5310: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5320: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
5330: 72 69 65 76 65 73 20 61 20 63 6f 6c 75 6d 6e 20  rieves a column 
5340: 61 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20 62  as an array of b
5350: 79 74 65 73 20 28 62 6c 6f 62 29 0d 0a 20 20 20  ytes (blob)..   
5360: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
5380: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
5390: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
53a0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
53b0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
53c0: 66 69 65 6c 64 4f 66 66 73 65 74 22 3e 54 68 65  fieldOffset">The
53d0: 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65   zero-based inde
53e0: 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65  x of where to be
53f0: 67 69 6e 20 72 65 61 64 69 6e 67 20 74 68 65 20  gin reading the 
5400: 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  data</param>..  
5410: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5420: 65 3d 22 62 75 66 66 65 72 22 3e 54 68 65 20 62  e="buffer">The b
5430: 75 66 66 65 72 20 74 6f 20 77 72 69 74 65 20 74  uffer to write t
5440: 68 65 20 62 79 74 65 73 20 69 6e 74 6f 3c 2f 70  he bytes into</p
5450: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5460: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66  param name="buff
5470: 65 72 6f 66 66 73 65 74 22 3e 54 68 65 20 7a 65  eroffset">The ze
5480: 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f  ro-based index o
5490: 66 20 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e  f where to begin
54a0: 20 77 72 69 74 69 6e 67 20 69 6e 74 6f 20 74 68   writing into th
54b0: 65 20 61 72 72 61 79 3c 2f 70 61 72 61 6d 3e 0d  e array</param>.
54c0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
54d0: 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 54 68  name="length">Th
54e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
54f0: 73 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  s to retrieve</p
5500: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5510: 72 65 74 75 72 6e 73 3e 54 68 65 20 61 63 74 75  returns>The actu
5520: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
5530: 65 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  es written into 
5540: 74 68 65 20 61 72 72 61 79 3c 2f 72 65 74 75 72  the array</retur
5550: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ns>..    /// <re
5560: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
5570: 54 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  To determine the
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
5590: 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20   in the column, 
55a0: 70 61 73 73 20 61 20 6e 75 6c 6c 20 76 61 6c 75  pass a null valu
55b0: 65 20 66 6f 72 20 74 68 65 20 62 75 66 66 65 72  e for the buffer
55c0: 2e 20 20 54 68 65 20 74 6f 74 61 6c 20 6c 65 6e  .  The total len
55d0: 67 74 68 20 77 69 6c 6c 20 62 65 20 72 65 74 75  gth will be retu
55e0: 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  rned...    /// <
55f0: 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 70  /remarks>..    p
5600: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6c  ublic override l
5610: 6f 6e 67 20 47 65 74 42 79 74 65 73 28 69 6e 74  ong GetBytes(int
5620: 20 69 2c 20 6c 6f 6e 67 20 66 69 65 6c 64 4f 66   i, long fieldOf
5630: 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 75 66  fset, byte[] buf
5640: 66 65 72 2c 20 69 6e 74 20 62 75 66 66 65 72 6f  fer, int buffero
5650: 66 66 73 65 74 2c 20 69 6e 74 20 6c 65 6e 67 74  ffset, int lengt
5660: 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  h)..    {..     
5670: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
5680: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
5690: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
56a0: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
56b0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
56c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
56d0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
56e0: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
56f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5700: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
5710: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
5720: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
5730: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
5740: 51 4c 69 74 65 52 65 61 64 41 72 72 61 79 45 76  QLiteReadArrayEv
5750: 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41 72 67  entArgs eventArg
5760: 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 52 65  s = new SQLiteRe
5770: 61 64 41 72 72 61 79 45 76 65 6e 74 41 72 67 73  adArrayEventArgs
5780: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5790: 20 20 20 66 69 65 6c 64 4f 66 66 73 65 74 2c 20     fieldOffset, 
57a0: 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66  buffer, bufferof
57b0: 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  fset, length);..
57c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
57d0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
57e0: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
57f0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
5800: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
5810: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
5820: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
5830: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
5840: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
5850: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
5860: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
5870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
5880: 65 74 42 79 74 65 73 22 2c 20 65 76 65 6e 74 41  etBytes", eventA
5890: 72 67 73 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74  rgs, value), out
58a0: 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20   complete);.... 
58b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
58c0: 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20  omplete)..      
58d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
58e0: 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
58f0: 62 79 74 65 73 20 3d 20 76 61 6c 75 65 2e 42 79  bytes = value.By
5900: 74 65 73 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  tesValue;....   
5910: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
5920: 28 62 79 74 65 73 20 21 3d 20 6e 75 6c 6c 29 0d  (bytes != null).
5930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5940: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
5950: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
5960: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
5970: 20 20 20 20 20 20 20 20 41 72 72 61 79 2e 43 6f          Array.Co
5980: 70 79 28 62 79 74 65 73 2c 20 2f 2a 20 74 68 72  py(bytes, /* thr
5990: 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
59b0: 76 65 6e 74 41 72 67 73 2e 44 61 74 61 4f 66 66  ventArgs.DataOff
59c0: 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 42  set, eventArgs.B
59d0: 79 74 65 42 75 66 66 65 72 2c 0d 0a 20 20 20 20  yteBuffer,..    
59e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59f0: 20 20 20 20 65 76 65 6e 74 41 72 67 73 2e 42 75      eventArgs.Bu
5a00: 66 66 65 72 4f 66 66 73 65 74 2c 20 65 76 65 6e  fferOffset, even
5a10: 74 41 72 67 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  tArgs.Length);..
5a20: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
5a30: 20 20 20 20 20 20 20 20 20 20 20 41 72 72 61 79             Array
5a40: 2e 43 6f 70 79 28 62 79 74 65 73 2c 20 2f 2a 20  .Copy(bytes, /* 
5a50: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a70: 20 20 28 69 6e 74 29 65 76 65 6e 74 41 72 67 73    (int)eventArgs
5a80: 2e 44 61 74 61 4f 66 66 73 65 74 2c 20 65 76 65  .DataOffset, eve
5a90: 6e 74 41 72 67 73 2e 42 79 74 65 42 75 66 66 65  ntArgs.ByteBuffe
5aa0: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 65 76 65 6e              even
5ac0: 74 41 72 67 73 2e 42 75 66 66 65 72 4f 66 66 73  tArgs.BufferOffs
5ad0: 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 4c 65  et, eventArgs.Le
5ae0: 6e 67 74 68 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ngth);..#endif..
5af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 65 76 65        return eve
5b10: 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a  ntArgs.Length;..
5b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b30: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
5b40: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
5b50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b70: 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20  return -1;..    
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5b90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5ba0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5bb0: 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76     if (i >= Priv
5bc0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
5bd0: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
5be0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
5bf0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
5c00: 65 79 49 6e 66 6f 2e 47 65 74 42 79 74 65 73 28  eyInfo.GetBytes(
5c10: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
5c20: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20 66 69  leFieldCount, fi
5c30: 65 6c 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65  eldOffset, buffe
5c40: 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c  r, bufferoffset,
5c50: 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20   length);....   
5c60: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
5c70: 69 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79  i, DbType.Binary
5c80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
5c90: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
5ca0: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65  ent._sql.GetByte
5cb0: 73 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  s(_activeStateme
5cc0: 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69 65 6c  nt, i, (int)fiel
5cd0: 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c  dOffset, buffer,
5ce0: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c   bufferoffset, l
5cf0: 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ength);..    }..
5d00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5d10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
5d20: 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  urns the column 
5d30: 61 73 20 61 20 73 69 6e 67 6c 65 20 63 68 61 72  as a single char
5d40: 61 63 74 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c  acter..    /// <
5d50: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
5d60: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5d70: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
5d80: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
5d90: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
5da0: 74 75 72 6e 73 3e 63 68 61 72 3c 2f 72 65 74 75  turns>char</retu
5db0: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
5dc0: 20 6f 76 65 72 72 69 64 65 20 63 68 61 72 20 47   override char G
5dd0: 65 74 43 68 61 72 28 69 6e 74 20 69 29 0d 0a 20  etChar(int i).. 
5de0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
5df0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
5e00: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
5e10: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
5e20: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
5e30: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5e40: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
5e50: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
5e60: 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74  lbacks) == SQLit
5e70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5e80: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
5e90: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
5ea0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
5eb0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
5ec0: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
5ed0: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
5ee0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
5ef0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
5f00: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
5f10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5f20: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
5f30: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
5f40: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
5f50: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
5f60: 20 20 20 20 20 20 20 20 20 20 22 47 65 74 43 68            "GetCh
5f70: 61 72 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65  ar", null, value
5f80: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
5f90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5fa0: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
5fb0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5fd0: 66 20 28 76 61 6c 75 65 2e 43 68 61 72 56 61 6c  f (value.CharVal
5fe0: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6000: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
6010: 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73  eException("miss
6020: 69 6e 67 20 63 68 61 72 61 63 74 65 72 20 72 65  ing character re
6030: 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d  turn value");...
6040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6050: 20 72 65 74 75 72 6e 20 28 63 68 61 72 29 76 61   return (char)va
6060: 6c 75 65 2e 43 68 61 72 56 61 6c 75 65 3b 0d 0a  lue.CharValue;..
6070: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6080: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6090: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
60a0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
60b0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
60c0: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
60d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
60e0: 6b 65 79 49 6e 66 6f 2e 47 65 74 43 68 61 72 28  keyInfo.GetChar(
60f0: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
6100: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
6110: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
6120: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53  Type(i, DbType.S
6130: 42 79 74 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Byte);..        
6140: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
6150: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
6160: 43 68 61 72 28 5f 61 63 74 69 76 65 53 74 61 74  Char(_activeStat
6170: 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20  ement, i);..    
6180: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
6190: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
61a0: 52 65 74 72 69 65 76 65 73 20 61 20 63 6f 6c 75  Retrieves a colu
61b0: 6d 6e 20 61 73 20 61 6e 20 61 72 72 61 79 20 6f  mn as an array o
61c0: 66 20 63 68 61 72 73 20 28 62 6c 6f 62 29 0d 0a  f chars (blob)..
61d0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
61e0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
61f0: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
6200: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
6210: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
6220: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
6230: 65 3d 22 66 69 65 6c 64 6f 66 66 73 65 74 22 3e  e="fieldoffset">
6240: 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69  The zero-based i
6250: 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f  ndex of where to
6260: 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67 20 74   begin reading t
6270: 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0d  he data</param>.
6280: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
6290: 6e 61 6d 65 3d 22 62 75 66 66 65 72 22 3e 54 68  name="buffer">Th
62a0: 65 20 62 75 66 66 65 72 20 74 6f 20 77 72 69 74  e buffer to writ
62b0: 65 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73  e the characters
62c0: 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e 0d 0a 20   into</param>.. 
62d0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
62e0: 6d 65 3d 22 62 75 66 66 65 72 6f 66 66 73 65 74  me="bufferoffset
62f0: 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  ">The zero-based
6300: 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20   index of where 
6310: 74 6f 20 62 65 67 69 6e 20 77 72 69 74 69 6e 67  to begin writing
6320: 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c   into the array<
6330: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
6340: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65   <param name="le
6350: 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d 62 65 72  ngth">The number
6360: 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72 65 74   of bytes to ret
6370: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rieve</param>.. 
6380: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
6390: 54 68 65 20 61 63 74 75 61 6c 20 6e 75 6d 62 65  The actual numbe
63a0: 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
63b0: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 74 68 65  written into the
63c0: 20 61 72 72 61 79 3c 2f 72 65 74 75 72 6e 73 3e   array</returns>
63d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72  ..    /// <remar
63e0: 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 6f 20  ks>..    /// To 
63f0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
6400: 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
6410: 72 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  rs in the column
6420: 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c 20 76 61  , pass a null va
6430: 6c 75 65 20 66 6f 72 20 74 68 65 20 62 75 66 66  lue for the buff
6440: 65 72 2e 20 20 54 68 65 20 74 6f 74 61 6c 20 6c  er.  The total l
6450: 65 6e 67 74 68 20 77 69 6c 6c 20 62 65 20 72 65  ength will be re
6460: 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  turned...    ///
6470: 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20   </remarks>..   
6480: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
6490: 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 69   long GetChars(i
64a0: 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65 6c 64  nt i, long field
64b0: 6f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62  offset, char[] b
64c0: 75 66 66 65 72 2c 20 69 6e 74 20 62 75 66 66 65  uffer, int buffe
64d0: 72 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c 65 6e  roffset, int len
64e0: 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
64f0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6500: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
6510: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
6520: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
6530: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
6540: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
6550: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
6560: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
6570: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
6580: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
6590: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
65a0: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
65b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
65c0: 20 53 51 4c 69 74 65 52 65 61 64 41 72 72 61 79   SQLiteReadArray
65d0: 45 76 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41  EventArgs eventA
65e0: 72 67 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  rgs = new SQLite
65f0: 52 65 61 64 41 72 72 61 79 45 76 65 6e 74 41 72  ReadArrayEventAr
6600: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
6610: 20 20 20 20 20 66 69 65 6c 64 6f 66 66 73 65 74       fieldoffset
6620: 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72  , buffer, buffer
6630: 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b  offset, length);
6640: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6650: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
6660: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
6670: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
6680: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
6690: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
66a0: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
66b0: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
66c0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
66d0: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
66e0: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6700: 22 47 65 74 43 68 61 72 73 22 2c 20 65 76 65 6e  "GetChars", even
6710: 74 41 72 67 73 2c 20 76 61 6c 75 65 29 2c 20 6f  tArgs, value), o
6720: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
6730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
6740: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
6750: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6760: 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 5b             char[
6770: 5d 20 63 68 61 72 73 20 3d 20 76 61 6c 75 65 2e  ] chars = value.
6780: 43 68 61 72 73 56 61 6c 75 65 3b 0d 0a 0d 0a 20  CharsValue;.... 
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
67a0: 66 20 28 63 68 61 72 73 20 21 3d 20 6e 75 6c 6c  f (chars != null
67b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
67c0: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
67d0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
67e0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
67f0: 20 20 20 20 20 20 20 20 20 20 41 72 72 61 79 2e            Array.
6800: 43 6f 70 79 28 63 68 61 72 73 2c 20 2f 2a 20 74  Copy(chars, /* t
6810: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6830: 20 65 76 65 6e 74 41 72 67 73 2e 44 61 74 61 4f   eventArgs.DataO
6840: 66 66 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73  ffset, eventArgs
6850: 2e 43 68 61 72 42 75 66 66 65 72 2c 0d 0a 20 20  .CharBuffer,..  
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6870: 20 20 20 20 20 20 65 76 65 6e 74 41 72 67 73 2e        eventArgs.
6880: 42 75 66 66 65 72 4f 66 66 73 65 74 2c 20 65 76  BufferOffset, ev
6890: 65 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 29 3b  entArgs.Length);
68a0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 72 72               Arr
68c0: 61 79 2e 43 6f 70 79 28 63 68 61 72 73 2c 20 2f  ay.Copy(chars, /
68d0: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
68e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68f0: 20 20 20 20 28 69 6e 74 29 65 76 65 6e 74 41 72      (int)eventAr
6900: 67 73 2e 44 61 74 61 4f 66 66 73 65 74 2c 20 65  gs.DataOffset, e
6910: 76 65 6e 74 41 72 67 73 2e 43 68 61 72 42 75 66  ventArgs.CharBuf
6920: 66 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fer,..          
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76                ev
6940: 65 6e 74 41 72 67 73 2e 42 75 66 66 65 72 4f 66  entArgs.BufferOf
6950: 66 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e  fset, eventArgs.
6960: 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6e 64 69 66  Length);..#endif
6970: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6980: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 65          return e
6990: 76 65 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 3b  ventArgs.Length;
69a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
69b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
69c0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
69d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
69e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69f0: 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20    return -1;..  
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6a20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6a30: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
6a40: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
6a50: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
6a60: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
6a70: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6a80: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 43 68 61 72  _keyInfo.GetChar
6a90: 73 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  s(i - PrivateVis
6aa0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20  ibleFieldCount, 
6ab0: 66 69 65 6c 64 6f 66 66 73 65 74 2c 20 62 75 66  fieldoffset, buf
6ac0: 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65  fer, bufferoffse
6ad0: 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20  t, length);.... 
6ae0: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
6af0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
6b00: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72  ctionFlags.NoVer
6b10: 69 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29  ifyTextAffinity)
6b20: 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   != SQLiteConnec
6b30: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69  tionFlags.NoVeri
6b40: 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29 0d  fyTextAffinity).
6b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
6b60: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
6b70: 65 2e 53 74 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20  e.String);....  
6b80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
6b90: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
6ba0: 71 6c 2e 47 65 74 43 68 61 72 73 28 5f 61 63 74  ql.GetChars(_act
6bb0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c  iveStatement, i,
6bc0: 20 28 69 6e 74 29 66 69 65 6c 64 6f 66 66 73 65   (int)fieldoffse
6bd0: 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65  t, buffer, buffe
6be0: 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29  roffset, length)
6bf0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6c00: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6c10: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
6c20: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
6c30: 20 62 61 63 6b 2d 65 6e 64 20 64 61 74 61 74 79   back-end dataty
6c40: 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  pe of the column
6c50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6c60: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
6c70: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
6c80: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
6c90: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
6ca0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
6cb0: 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73  >string</returns
6cc0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
6cd0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
6ce0: 74 44 61 74 61 54 79 70 65 4e 61 6d 65 28 69 6e  tDataTypeName(in
6cf0: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
6d00: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6d10: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6d20: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
6d30: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
6d40: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
6d50: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6d60: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
6d70: 49 6e 66 6f 2e 47 65 74 44 61 74 61 54 79 70 65  Info.GetDataType
6d80: 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65  Name(i - Private
6d90: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
6da0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54  t);....        T
6db0: 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66 69  ypeAffinity affi
6dc0: 6e 20 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79  n = TypeAffinity
6dd0: 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3b 0d  .Uninitialized;.
6de0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6df0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
6e00: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65  ._sql.ColumnType
6e10: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
6e20: 74 2c 20 69 2c 20 72 65 66 20 61 66 66 69 6e 29  t, i, ref affin)
6e30: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6e40: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6e50: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 20     /// Retrieve 
6e60: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
6e70: 64 61 74 65 2f 74 69 6d 65 20 76 61 6c 75 65 0d  date/time value.
6e80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
6e90: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
6ea0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
6eb0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
6ec0: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
6ed0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
6ee0: 44 61 74 65 54 69 6d 65 3c 2f 72 65 74 75 72 6e  DateTime</return
6ef0: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
6f00: 76 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65  verride DateTime
6f10: 20 47 65 74 44 61 74 65 54 69 6d 65 28 69 6e 74   GetDateTime(int
6f20: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
6f30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6f40: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
6f50: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
6f60: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
6f70: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
6f80: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
6f90: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
6fa0: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
6fb0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6fc0: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
6fd0: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
6fe0: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
6ff0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7000: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
7010: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
7020: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
7030: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
7040: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
7050: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
7060: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
7070: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
7080: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
7090: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70b0: 22 47 65 74 44 61 74 65 54 69 6d 65 22 2c 20 6e  "GetDateTime", n
70c0: 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74  ull, value), out
70d0: 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20   complete);.... 
70e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
70f0: 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20  omplete)..      
7100: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7110: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
7120: 75 65 2e 44 61 74 65 54 69 6d 65 56 61 6c 75 65  ue.DateTimeValue
7130: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
7140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
7150: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7160: 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e  xception("missin
7170: 67 20 64 61 74 65 2f 74 69 6d 65 20 72 65 74 75  g date/time retu
7180: 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  rn value");.... 
7190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
71a0: 65 74 75 72 6e 20 28 44 61 74 65 54 69 6d 65 29  eturn (DateTime)
71b0: 76 61 6c 75 65 2e 44 61 74 65 54 69 6d 65 56 61  value.DateTimeVa
71c0: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
71d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
71e0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
71f0: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
7200: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
7210: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
7220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
7230: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
7240: 74 44 61 74 65 54 69 6d 65 28 69 20 2d 20 50 72  tDateTime(i - Pr
7250: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
7260: 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
7270: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
7280: 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d  , DbType.DateTim
7290: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
72a0: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
72b0: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 61 74  ment._sql.GetDat
72c0: 65 54 69 6d 65 28 5f 61 63 74 69 76 65 53 74 61  eTime(_activeSta
72d0: 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20  tement, i);..   
72e0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
72f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7300: 20 52 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   Retrieve the co
7310: 6c 75 6d 6e 20 61 73 20 61 20 64 65 63 69 6d 61  lumn as a decima
7320: 6c 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f  l value..    ///
7330: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
7340: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
7350: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
7360: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
7370: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
7380: 72 65 74 75 72 6e 73 3e 64 65 63 69 6d 61 6c 3c  returns>decimal<
7390: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
73a0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64  ublic override d
73b0: 65 63 69 6d 61 6c 20 47 65 74 44 65 63 69 6d 61  ecimal GetDecima
73c0: 6c 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  l(int i)..    {.
73d0: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
73e0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
73f0: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
7400: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
7410: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
7420: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7430: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
7440: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
7450: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
7460: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
7470: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
7480: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
7490: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
74a0: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
74b0: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
74c0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
74d0: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
74e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
74f0: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
7500: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
7510: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
7520: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
7530: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
7540: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
7550: 20 20 20 20 20 22 47 65 74 44 65 63 69 6d 61 6c       "GetDecimal
7560: 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c  ", null, value),
7570: 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d   out complete);.
7580: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
7590: 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20  f (complete)..  
75a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
75b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
75c0: 28 76 61 6c 75 65 2e 44 65 63 69 6d 61 6c 56 61  (value.DecimalVa
75d0: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75f0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
7600: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73  teException("mis
7610: 73 69 6e 67 20 64 65 63 69 6d 61 6c 20 72 65 74  sing decimal ret
7620: 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a  urn value");....
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7640: 72 65 74 75 72 6e 20 28 64 65 63 69 6d 61 6c 29  return (decimal)
7650: 76 61 6c 75 65 2e 44 65 63 69 6d 61 6c 56 61 6c  value.DecimalVal
7660: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
7670: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
7680: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
7690: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
76a0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
76b0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
76c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
76d0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
76e0: 44 65 63 69 6d 61 6c 28 69 20 2d 20 50 72 69 76  Decimal(i - Priv
76f0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
7700: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
7710: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
7720: 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 3b  DbType.Decimal);
7730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 43 75 6c 74  ....        Cult
7740: 75 72 65 49 6e 66 6f 20 63 75 6c 74 75 72 65 49  ureInfo cultureI
7750: 6e 66 6f 20 3d 20 43 75 6c 74 75 72 65 49 6e 66  nfo = CultureInf
7760: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
7770: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
7780: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
7790: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
77a0: 2e 47 65 74 49 6e 76 61 72 69 61 6e 74 44 65 63  .GetInvariantDec
77b0: 69 6d 61 6c 29 20 3d 3d 20 53 51 4c 69 74 65 43  imal) == SQLiteC
77c0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47  onnectionFlags.G
77d0: 65 74 49 6e 76 61 72 69 61 6e 74 44 65 63 69 6d  etInvariantDecim
77e0: 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  al)..           
77f0: 20 63 75 6c 74 75 72 65 49 6e 66 6f 20 3d 20 43   cultureInfo = C
7800: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
7810: 69 61 6e 74 43 75 6c 74 75 72 65 3b 0d 0a 0d 0a  iantCulture;....
7820: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
7830: 65 63 69 6d 61 6c 2e 50 61 72 73 65 28 5f 61 63  ecimal.Parse(_ac
7840: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
7850: 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69  ql.GetText(_acti
7860: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 2c  veStatement, i),
7870: 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c   NumberStyles.Al
7880: 6c 6f 77 44 65 63 69 6d 61 6c 50 6f 69 6e 74 20  lowDecimalPoint 
7890: 7c 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41  | NumberStyles.A
78a0: 6c 6c 6f 77 45 78 70 6f 6e 65 6e 74 20 7c 20 4e  llowExponent | N
78b0: 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f  umberStyles.Allo
78c0: 77 4c 65 61 64 69 6e 67 53 69 67 6e 2c 20 63 75  wLeadingSign, cu
78d0: 6c 74 75 72 65 49 6e 66 6f 29 3b 0d 0a 20 20 20  ltureInfo);..   
78e0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
78f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7900: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
7910: 75 6d 6e 20 61 73 20 61 20 64 6f 75 62 6c 65 0d  umn as a double.
7920: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
7930: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
7940: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
7950: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
7960: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
7970: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
7980: 64 6f 75 62 6c 65 3c 2f 72 65 74 75 72 6e 73 3e  double</returns>
7990: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
79a0: 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74  rride double Get
79b0: 44 6f 75 62 6c 65 28 69 6e 74 20 69 29 0d 0a 20  Double(int i).. 
79c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
79d0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
79e0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
79f0: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
7a00: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
7a10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7a20: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
7a30: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
7a40: 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74  lbacks) == SQLit
7a50: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7a60: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
7a70: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
7a80: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7a90: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
7aa0: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
7ab0: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
7ac0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
7ad0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
7ae0: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
7af0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7b00: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
7b10: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
7b20: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
7b30: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
7b40: 20 20 20 20 20 20 20 20 20 20 22 47 65 74 44 6f            "GetDo
7b50: 75 62 6c 65 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c  uble", null, val
7b60: 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74  ue), out complet
7b70: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
7b80: 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29     if (complete)
7b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
7ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7bb0: 20 69 66 20 28 76 61 6c 75 65 2e 44 6f 75 62 6c   if (value.Doubl
7bc0: 65 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  eValue == null).
7bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7be0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
7bf0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
7c00: 6d 69 73 73 69 6e 67 20 64 6f 75 62 6c 65 20 72  missing double r
7c10: 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a  eturn value");..
7c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7c30: 20 20 72 65 74 75 72 6e 20 28 64 6f 75 62 6c 65    return (double
7c40: 29 76 61 6c 75 65 2e 44 6f 75 62 6c 65 56 61 6c  )value.DoubleVal
7c50: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
7c60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
7c70: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
7c80: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
7c90: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
7ca0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
7cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7cc0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
7cd0: 44 6f 75 62 6c 65 28 69 20 2d 20 50 72 69 76 61  Double(i - Priva
7ce0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
7cf0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
7d00: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
7d10: 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b 0d 0a  bType.Double);..
7d20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
7d30: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
7d40: 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f  _sql.GetDouble(_
7d50: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
7d60: 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   i);..    }.... 
7d70: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
7d80: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
7d90: 73 20 74 68 65 20 2e 4e 45 54 20 74 79 70 65 20  s the .NET type 
7da0: 6f 66 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d  of a given colum
7db0: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  n..    /// </sum
7dc0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
7dd0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
7de0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
7df0: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
7e00: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
7e10: 73 3e 54 79 70 65 3c 2f 72 65 74 75 72 6e 73 3e  s>Type</returns>
7e20: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
7e30: 72 72 69 64 65 20 54 79 70 65 20 47 65 74 46 69  rride Type GetFi
7e40: 65 6c 64 54 79 70 65 28 69 6e 74 20 69 29 0d 0a  eldType(int i)..
7e50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
7e60: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
7e70: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
7e80: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
7e90: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
7ea0: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
7eb0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
7ec0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
7ed0: 65 74 46 69 65 6c 64 54 79 70 65 28 69 20 2d 20  etFieldType(i - 
7ee0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
7ef0: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
7f00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7f10: 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74  iteConvert.SQLit
7f20: 65 54 79 70 65 54 6f 54 79 70 65 28 47 65 74 53  eTypeToType(GetS
7f30: 51 4c 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73  QLiteType(_flags
7f40: 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  , i));..    }...
7f50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
7f60: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
7f70: 72 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20  rns a column as 
7f80: 61 20 66 6c 6f 61 74 20 76 61 6c 75 65 0d 0a 20  a float value.. 
7f90: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7fa0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
7fb0: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
7fc0: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
7fd0: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
7fe0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 66 6c   /// <returns>fl
7ff0: 6f 61 74 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  oat</returns>.. 
8000: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
8010: 64 65 20 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61  de float GetFloa
8020: 74 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  t(int i)..    {.
8030: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
8040: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
8050: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
8060: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
8070: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
8080: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8090: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
80a0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
80b0: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
80c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
80d0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
80e0: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
80f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8100: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
8110: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
8120: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
8130: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
8140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
8150: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
8160: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
8170: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
8180: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
8190: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
81a0: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
81b0: 20 20 20 20 20 22 47 65 74 46 6c 6f 61 74 22 2c       "GetFloat",
81c0: 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f   null, value), o
81d0: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
81e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
81f0: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
8200: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8210: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
8220: 61 6c 75 65 2e 46 6c 6f 61 74 56 61 6c 75 65 20  alue.FloatValue 
8230: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
8250: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8260: 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67  ception("missing
8270: 20 66 6c 6f 61 74 20 72 65 74 75 72 6e 20 76 61   float return va
8280: 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lue");....      
8290: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
82a0: 20 28 66 6c 6f 61 74 29 76 61 6c 75 65 2e 46 6c   (float)value.Fl
82b0: 6f 61 74 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  oatValue;..     
82c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
82d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
82e0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
82f0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
8300: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
8310: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8320: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
8330: 66 6f 2e 47 65 74 46 6c 6f 61 74 28 69 20 2d 20  fo.GetFloat(i - 
8340: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
8350: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
8360: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
8370: 28 69 2c 20 44 62 54 79 70 65 2e 53 69 6e 67 6c  (i, DbType.Singl
8380: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
8390: 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 53 69  urn Convert.ToSi
83a0: 6e 67 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74  ngle(_activeStat
83b0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f  ement._sql.GetDo
83c0: 75 62 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74  uble(_activeStat
83d0: 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20  ement, i));..   
83e0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
83f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
8400: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
8410: 75 6d 6e 20 61 73 20 61 20 47 75 69 64 0d 0a 20  umn as a Guid.. 
8420: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8430: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
8440: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
8450: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
8460: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
8470: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 47 75   /// <returns>Gu
8480: 69 64 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  id</returns>..  
8490: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
84a0: 65 20 47 75 69 64 20 47 65 74 47 75 69 64 28 69  e Guid GetGuid(i
84b0: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
84c0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
84d0: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
84e0: 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d  VerifyForGet();.
84f0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
8500: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
8510: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
8520: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
8530: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20  ValueCallbacks) 
8540: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8550: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
8560: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
8570: 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20  allbacks)..     
8580: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8590: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
85a0: 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20  erValue value = 
85b0: 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65  new SQLiteDataRe
85c0: 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20  aderValue();..  
85d0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
85e0: 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20  omplete;....    
85f0: 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65          InvokeRe
8600: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28  adValueCallback(
8610: 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61  i, new SQLiteRea
8620: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28  dValueEventArgs(
8630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8640: 20 20 22 47 65 74 47 75 69 64 22 2c 20 6e 75 6c    "GetGuid", nul
8650: 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63  l, value), out c
8660: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
8670: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
8680: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
8690: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
86a0: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
86b0: 2e 47 75 69 64 56 61 6c 75 65 20 3d 3d 20 6e 75  .GuidValue == nu
86c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
86d0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
86e0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
86f0: 6f 6e 28 22 6d 69 73 73 69 6e 67 20 67 75 69 64  on("missing guid
8700: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b   return value");
8710: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8720: 20 20 20 20 72 65 74 75 72 6e 20 28 47 75 69 64      return (Guid
8730: 29 76 61 6c 75 65 2e 47 75 69 64 56 61 6c 75 65  )value.GuidValue
8740: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8750: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
8760: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
8770: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
8780: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
8790: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
87a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
87b0: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 47 75  n _keyInfo.GetGu
87c0: 69 64 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  id(i - PrivateVi
87d0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
87e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70  ;....        Typ
87f0: 65 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e 69  eAffinity affini
8800: 74 79 20 3d 20 56 65 72 69 66 79 54 79 70 65 28  ty = VerifyType(
8810: 69 2c 20 44 62 54 79 70 65 2e 47 75 69 64 29 3b  i, DbType.Guid);
8820: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 66  ..        if (af
8830: 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66  finity == TypeAf
8840: 66 69 6e 69 74 79 2e 42 6c 6f 62 29 0d 0a 20 20  finity.Blob)..  
8850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8860: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 75 66 66       byte[] buff
8870: 65 72 20 3d 20 6e 65 77 20 62 79 74 65 5b 31 36  er = new byte[16
8880: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
8890: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
88a0: 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65 73 28 5f  ._sql.GetBytes(_
88b0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
88c0: 20 69 2c 20 30 2c 20 62 75 66 66 65 72 2c 20 30   i, 0, buffer, 0
88d0: 2c 20 31 36 29 3b 0d 0a 20 20 20 20 20 20 20 20  , 16);..        
88e0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47      return new G
88f0: 75 69 64 28 62 75 66 66 65 72 29 3b 0d 0a 20 20  uid(buffer);..  
8900: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8910: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
8920: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
8930: 69 64 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  id(_activeStatem
8940: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74  ent._sql.GetText
8950: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
8960: 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  t, i));..    }..
8970: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
8980: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
8990: 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  urns the column 
89a0: 61 73 20 61 20 73 68 6f 72 74 0d 0a 20 20 20 20  as a short..    
89b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
89c0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
89d0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
89e0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
89f0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
8a00: 2f 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74 31 36  / <returns>Int16
8a10: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
8a20: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
8a30: 49 6e 74 31 36 20 47 65 74 49 6e 74 31 36 28 69  Int16 GetInt16(i
8a40: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
8a50: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
8a60: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
8a70: 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d  VerifyForGet();.
8a80: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
8a90: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
8aa0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
8ab0: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
8ac0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20  ValueCallbacks) 
8ad0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8ae0: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
8af0: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
8b00: 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20  allbacks)..     
8b10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8b20: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
8b30: 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20  erValue value = 
8b40: 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65  new SQLiteDataRe
8b50: 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20  aderValue();..  
8b60: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
8b70: 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20  omplete;....    
8b80: 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65          InvokeRe
8b90: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28  adValueCallback(
8ba0: 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61  i, new SQLiteRea
8bb0: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28  dValueEventArgs(
8bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8bd0: 20 20 22 47 65 74 49 6e 74 31 36 22 2c 20 6e 75    "GetInt16", nu
8be0: 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20  ll, value), out 
8bf0: 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20  complete);....  
8c00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
8c10: 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20  mplete)..       
8c20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8c30: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
8c40: 65 2e 49 6e 74 31 36 56 61 6c 75 65 20 3d 3d 20  e.Int16Value == 
8c50: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8c60: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
8c70: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8c80: 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e  tion("missing in
8c90: 74 31 36 20 72 65 74 75 72 6e 20 76 61 6c 75 65  t16 return value
8ca0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
8cb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49         return (I
8cc0: 6e 74 31 36 29 76 61 6c 75 65 2e 49 6e 74 31 36  nt16)value.Int16
8cd0: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
8ce0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
8cf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
8d00: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
8d10: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
8d20: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
8d30: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8d40: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
8d50: 47 65 74 49 6e 74 31 36 28 69 20 2d 20 50 72 69  GetInt16(i - Pri
8d60: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
8d70: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
8d80: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
8d90: 20 44 62 54 79 70 65 2e 49 6e 74 31 36 29 3b 0d   DbType.Int16);.
8da0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8db0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
8dc0: 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 31 36 28 5f  ._sql.GetInt16(_
8dd0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
8de0: 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   i);..    }.... 
8df0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
8e00: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  ..    /// Retrie
8e10: 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  ves the column a
8e20: 73 20 61 6e 20 69 6e 74 0d 0a 20 20 20 20 2f 2f  s an int..    //
8e30: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
8e40: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
8e50: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
8e60: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
8e70: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
8e80: 3c 72 65 74 75 72 6e 73 3e 49 6e 74 33 32 3c 2f  <returns>Int32</
8e90: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
8ea0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e  blic override In
8eb0: 74 33 32 20 47 65 74 49 6e 74 33 32 28 69 6e 74  t32 GetInt32(int
8ec0: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
8ed0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
8ee0: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
8ef0: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
8f00: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
8f10: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
8f20: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
8f30: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
8f40: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
8f50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8f60: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
8f70: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
8f80: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
8f90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8fa0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
8fb0: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
8fc0: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
8fd0: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
8fe0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
8ff0: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
9000: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
9010: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
9020: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
9030: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9050: 22 47 65 74 49 6e 74 33 32 22 2c 20 6e 75 6c 6c  "GetInt32", null
9060: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
9070: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
9080: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
9090: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
90a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
90b0: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
90c0: 49 6e 74 33 32 56 61 6c 75 65 20 3d 3d 20 6e 75  Int32Value == nu
90d0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
90e0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
90f0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
9100: 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 33  on("missing int3
9110: 32 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29  2 return value")
9120: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9130: 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74       return (Int
9140: 33 32 29 76 61 6c 75 65 2e 49 6e 74 33 32 56 61  32)value.Int32Va
9150: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
9160: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
9170: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
9180: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
9190: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
91a0: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
91b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
91c0: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
91d0: 74 49 6e 74 33 32 28 69 20 2d 20 50 72 69 76 61  tInt32(i - Priva
91e0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
91f0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
9200: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
9210: 62 54 79 70 65 2e 49 6e 74 33 32 29 3b 0d 0a 20  bType.Int32);.. 
9220: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
9230: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
9240: 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63  sql.GetInt32(_ac
9250: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
9260: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9270: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
9280: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
9290: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
92a0: 61 20 6c 6f 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20  a long..    /// 
92b0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
92c0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
92d0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
92e0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
92f0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
9300: 65 74 75 72 6e 73 3e 49 6e 74 36 34 3c 2f 72 65  eturns>Int64</re
9310: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
9320: 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 36  ic override Int6
9330: 34 20 47 65 74 49 6e 74 36 34 28 69 6e 74 20 69  4 GetInt64(int i
9340: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9350: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9360: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
9370: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
9380: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
9390: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
93a0: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
93b0: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
93c0: 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53  eCallbacks) == S
93d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
93e0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
93f0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
9400: 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  acks)..        {
9410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
9420: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
9430: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
9440: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
9450: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
9460: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
9470: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
9480: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
9490: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
94a0: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
94b0: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
94d0: 65 74 49 6e 74 36 34 22 2c 20 6e 75 6c 6c 2c 20  etInt64", null, 
94e0: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
94f0: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
9500: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
9510: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
9520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9530: 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 49 6e      if (value.In
9540: 74 36 34 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  t64Value == null
9550: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9560: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
9570: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
9580: 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 36 34 20  ("missing int64 
9590: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
95a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
95b0: 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74 36 34     return (Int64
95c0: 29 76 61 6c 75 65 2e 49 6e 74 36 34 56 61 6c 75  )value.Int64Valu
95d0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
95e0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
95f0: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
9600: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
9610: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
9620: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
9630: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9640: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49  rn _keyInfo.GetI
9650: 6e 74 36 34 28 69 20 2d 20 50 72 69 76 61 74 65  nt64(i - Private
9660: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
9670: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56  t);....        V
9680: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
9690: 79 70 65 2e 49 6e 74 36 34 29 3b 0d 0a 20 20 20  ype.Int64);..   
96a0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
96b0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
96c0: 6c 2e 47 65 74 49 6e 74 36 34 28 5f 61 63 74 69  l.GetInt64(_acti
96d0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
96e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
96f0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
9700: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
9710: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
9720: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20  column..    /// 
9730: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9740: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
9750: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
9760: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
9770: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
9780: 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72  eturns>string</r
9790: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
97a0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
97b0: 69 6e 67 20 47 65 74 4e 61 6d 65 28 69 6e 74 20  ing GetName(int 
97c0: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
97d0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
97e0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
97f0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
9800: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
9810: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
9820: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
9830: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
9840: 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50  fo.GetName(i - P
9850: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
9860: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
9870: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
9880: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
9890: 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63  l.ColumnName(_ac
98a0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
98b0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
98c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
98d0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
98e0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
98f0: 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
9900: 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
9910: 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a  cified column...
9920: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
9930: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
9940: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
9950: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
9960: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
9970: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73    /// <returns>s
9980: 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d  tring</returns>.
9990: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69  .    public stri
99a0: 6e 67 20 47 65 74 44 61 74 61 62 61 73 65 4e 61  ng GetDatabaseNa
99b0: 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  me(int i)..    {
99c0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
99d0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
99e0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
99f0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
9a00: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
9a10: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
9a20: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9a30: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d   _keyInfo.GetNam
9a40: 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  e(i - PrivateVis
9a50: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
9a60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
9a70: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
9a80: 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 44  ent._sql.ColumnD
9a90: 61 74 61 62 61 73 65 4e 61 6d 65 28 5f 61 63 74  atabaseName(_act
9aa0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
9ab0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9ac0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
9ad0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
9ae0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
9af0: 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20  able associated 
9b00: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
9b10: 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20  ed column...    
9b20: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9b30: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
9b40: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
9b50: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
9b60: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
9b70: 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e  / <returns>strin
9b80: 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  g</returns>..   
9b90: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47   public string G
9ba0: 65 74 54 61 62 6c 65 4e 61 6d 65 28 69 6e 74 20  etTableName(int 
9bb0: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
9bc0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
9bd0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
9be0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
9bf0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
9c00: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
9c10: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
9c20: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
9c30: 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50  fo.GetName(i - P
9c40: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
9c50: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
9c60: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
9c70: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
9c80: 6c 2e 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d  l.ColumnTableNam
9c90: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
9ca0: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
9cb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
9cc0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
9cd0: 75 72 6e 73 20 74 68 65 20 6f 72 69 67 69 6e 61  urns the origina
9ce0: 6c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 70  l name of the sp
9cf0: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d  ecified column..
9d00: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
9d10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
9d20: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
9d30: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
9d40: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
9d50: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
9d60: 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e  string</returns>
9d70: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72  ..    public str
9d80: 69 6e 67 20 47 65 74 4f 72 69 67 69 6e 61 6c 4e  ing GetOriginalN
9d90: 61 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ame(int i)..    
9da0: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
9db0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
9dc0: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
9dd0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
9de0: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
9df0: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
9e00: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9e10: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61  n _keyInfo.GetNa
9e20: 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  me(i - PrivateVi
9e30: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
9e40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
9e50: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
9e60: 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
9e70: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 5f 61 63  OriginalName(_ac
9e80: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
9e90: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9ea0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
9eb0: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
9ec0: 73 20 74 68 65 20 69 20 6f 66 20 61 20 63 6f 6c  s the i of a col
9ed0: 75 6d 6e 2c 20 67 69 76 65 6e 20 69 74 73 20 6e  umn, given its n
9ee0: 61 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ame..    /// </s
9ef0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
9f00: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61   <param name="na
9f10: 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20  me">The name of 
9f20: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
9f30: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a  trieve</param>..
9f40: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
9f50: 3e 54 68 65 20 69 6e 74 20 69 20 6f 66 20 74 68  >The int i of th
9f60: 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
9f70: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
9f80: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 4f  verride int GetO
9f90: 72 64 69 6e 61 6c 28 73 74 72 69 6e 67 20 6e 61  rdinal(string na
9fa0: 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
9fb0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9fc0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
9fd0: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
9fe0: 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  ) SQLiteCommand.
9ff0: 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b  Check(_command);
a000: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ....      //..  
a010: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 72      // NOTE: Fir
a020: 73 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65  st, check if the
a030: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 63   column name cac
a040: 68 65 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  he has been init
a050: 69 61 6c 69 7a 65 64 20 79 65 74 2e 0d 0a 20 20  ialized yet...  
a060: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20      //       If 
a070: 6e 6f 74 2c 20 64 6f 20 69 74 20 6e 6f 77 2e 0d  not, do it now..
a080: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
a090: 20 69 66 20 28 5f 66 69 65 6c 64 49 6e 64 65 78   if (_fieldIndex
a0a0: 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
a0b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a0c0: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
a0d0: 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73  new Dictionary<s
a0e0: 74 72 69 6e 67 2c 20 69 6e 74 3e 28 0d 0a 20 20  tring, int>(..  
a0f0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
a100: 6e 67 43 6f 6d 70 61 72 65 72 2e 4f 72 64 69 6e  ngComparer.Ordin
a110: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a  alIgnoreCase);..
a120: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a130: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
a140: 54 45 3a 20 4e 65 78 74 2c 20 73 65 65 20 69 66  TE: Next, see if
a150: 20 74 68 65 20 69 6e 64 65 78 20 66 6f 72 20 74   the index for t
a160: 68 65 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c  he requested col
a170: 75 6d 6e 20 6e 61 6d 65 20 68 61 73 20 62 65 65  umn name has bee
a180: 6e 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  n..      //     
a190: 20 20 63 61 63 68 65 64 20 61 6c 72 65 61 64 79    cached already
a1a0: 2e 20 20 49 66 20 73 6f 2c 20 72 65 74 75 72 6e  .  If so, return
a1b0: 20 74 68 65 20 63 61 63 68 65 64 20 76 61 6c 75   the cached valu
a1c0: 65 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 0d 0a  e.  Otherwise,..
a1d0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
a1e0: 6f 6f 6b 75 70 20 74 68 65 20 76 61 6c 75 65 20  ookup the value 
a1f0: 61 6e 64 20 74 68 65 6e 20 63 61 63 68 65 20 74  and then cache t
a200: 68 65 20 72 65 73 75 6c 74 20 66 6f 72 20 66 75  he result for fu
a210: 74 75 72 65 20 75 73 65 2e 0d 0a 20 20 20 20 20  ture use...     
a220: 20 2f 2f 0d 0a 20 20 20 20 20 20 69 6e 74 20 72   //..      int r
a230: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 21  ;....      if (!
a240: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 2e 54 72  _fieldIndexes.Tr
a250: 79 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  yGetValue(name, 
a260: 6f 75 74 20 72 29 29 0d 0a 20 20 20 20 20 20 7b  out r))..      {
a270: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 20 3d 20  ..          r = 
a280: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
a290: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 49 6e 64 65  ._sql.ColumnInde
a2a0: 78 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  x(_activeStateme
a2b0: 6e 74 2c 20 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  nt, name);....  
a2c0: 20 20 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d          if (r ==
a2d0: 20 2d 31 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20   -1 && _keyInfo 
a2e0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
a2f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a300: 20 20 20 20 20 72 20 3d 20 5f 6b 65 79 49 6e 66       r = _keyInf
a310: 6f 2e 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d  o.GetOrdinal(nam
a320: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
a330: 20 20 20 69 66 20 28 72 20 3e 20 2d 31 29 20 72     if (r > -1) r
a340: 20 2b 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   += PrivateVisib
a350: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20  leFieldCount;.. 
a360: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
a370: 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 49 6e          _fieldIn
a380: 64 65 78 65 73 2e 41 64 64 28 6e 61 6d 65 2c 20  dexes.Add(name, 
a390: 72 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  r);..      }....
a3a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 3b 0d        return r;.
a3b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
a3c0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
a3d0: 20 2f 2f 2f 20 53 63 68 65 6d 61 20 69 6e 66 6f   /// Schema info
a3e0: 72 6d 61 74 69 6f 6e 20 69 6e 20 53 51 4c 69 74  rmation in SQLit
a3f0: 65 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 74  e is difficult t
a400: 6f 20 6d 61 70 20 69 6e 74 6f 20 2e 4e 45 54 20  o map into .NET 
a410: 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 73 6f 20  conventions, so 
a420: 61 20 6c 6f 74 20 6f 66 20 77 6f 72 6b 20 6d 75  a lot of work mu
a430: 73 74 20 62 65 20 64 6f 6e 65 0d 0a 20 20 20 20  st be done..    
a440: 2f 2f 2f 20 74 6f 20 67 61 74 68 65 72 20 74 68  /// to gather th
a450: 65 20 6e 65 63 65 73 73 61 72 79 20 69 6e 66 6f  e necessary info
a460: 72 6d 61 74 69 6f 6e 20 73 6f 20 69 74 20 63 61  rmation so it ca
a470: 6e 20 62 65 20 72 65 70 72 65 73 65 6e 74 65 64  n be represented
a480: 20 69 6e 20 61 6e 20 41 44 4f 2e 4e 45 54 20 6d   in an ADO.NET m
a490: 61 6e 6e 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  anner...    /// 
a4a0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
a4b0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
a4c0: 75 72 6e 73 20 61 20 44 61 74 61 54 61 62 6c 65  urns a DataTable
a4d0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
a4e0: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
a4f0: 6f 6e 20 66 6f 72 20 74 68 65 20 61 63 74 69 76  on for the activ
a500: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
a510: 6e 74 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nt being process
a520: 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ed.</returns>.. 
a530: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
a540: 64 65 20 44 61 74 61 54 61 62 6c 65 20 47 65 74  de DataTable Get
a550: 53 63 68 65 6d 61 54 61 62 6c 65 28 29 0d 0a 20  SchemaTable().. 
a560: 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63     {..      Chec
a570: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
a580: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 53 63      return GetSc
a590: 68 65 6d 61 54 61 62 6c 65 28 74 72 75 65 2c 20  hemaTable(true, 
a5a0: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  false);..    }..
a5b0: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
a5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a600: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
a610: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 43 6c   ColumnParent Cl
a620: 61 73 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ass..    private
a630: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43 6f   sealed class Co
a640: 6c 75 6d 6e 50 61 72 65 6e 74 20 3a 20 49 45 71  lumnParent : IEq
a650: 75 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 43  ualityComparer<C
a660: 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 0d 0a 20 20  olumnParent>..  
a670: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
a680: 67 69 6f 6e 20 50 75 62 6c 69 63 20 46 69 65 6c  gion Public Fiel
a690: 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ds..        publ
a6a0: 69 63 20 73 74 72 69 6e 67 20 44 61 74 61 62 61  ic string Databa
a6b0: 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  seName;..       
a6c0: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54   public string T
a6d0: 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  ableName;..     
a6e0: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
a6f0: 20 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20   ColumnName;..  
a700: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
a710: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a760: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
a770: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
a780: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
a790: 20 20 20 20 70 75 62 6c 69 63 20 43 6f 6c 75 6d      public Colum
a7a0: 6e 50 61 72 65 6e 74 28 29 0d 0a 20 20 20 20 20  nParent()..     
a7b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a7c0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
a7d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
a7e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a830: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
a840: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 0d 0a   ColumnParent(..
a850: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
a860: 6e 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65 2c  ng databaseName,
a870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
a880: 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 2c 0d  ring tableName,.
a890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
a8a0: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 0d 0a  ing columnName..
a8b0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
a8c0: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
a8d0: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s()..        {..
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
a8f0: 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 20 3d 20  .DatabaseName = 
a900: 64 61 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20  databaseName;.. 
a910: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
a920: 54 61 62 6c 65 4e 61 6d 65 20 3d 20 74 61 62 6c  TableName = tabl
a930: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
a940: 20 20 20 20 74 68 69 73 2e 43 6f 6c 75 6d 6e 4e      this.ColumnN
a950: 61 6d 65 20 3d 20 63 6f 6c 75 6d 6e 4e 61 6d 65  ame = columnName
a960: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
a970: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
a980: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
a9e0: 72 65 67 69 6f 6e 20 49 45 71 75 61 6c 69 74 79  region IEquality
a9f0: 43 6f 6d 70 61 72 65 72 3c 43 6f 6c 75 6d 6e 50  Comparer<ColumnP
aa00: 61 72 65 6e 74 3e 20 4d 65 6d 62 65 72 73 0d 0a  arent> Members..
aa10: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
aa20: 6f 6f 6c 20 45 71 75 61 6c 73 28 43 6f 6c 75 6d  ool Equals(Colum
aa30: 6e 50 61 72 65 6e 74 20 78 2c 20 43 6f 6c 75 6d  nParent x, Colum
aa40: 6e 50 61 72 65 6e 74 20 79 29 0d 0a 20 20 20 20  nParent y)..    
aa50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
aa60: 20 20 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c     if ((x == nul
aa70: 6c 29 20 26 26 20 28 79 20 3d 3d 20 6e 75 6c 6c  l) && (y == null
aa80: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
aa90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
aaa0: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
aab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
aac0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
aad0: 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29   if ((x == null)
aae0: 20 7c 7c 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29   || (y == null))
aaf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
ab00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ab10: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ab30: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
ab40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ab50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab60: 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
ab70: 6c 73 28 78 2e 44 61 74 61 62 61 73 65 4e 61 6d  ls(x.DatabaseNam
ab80: 65 2c 20 79 2e 44 61 74 61 62 61 73 65 4e 61 6d  e, y.DatabaseNam
ab90: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
abb0: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
abc0: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29  inalIgnoreCase))
abd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
abe0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
abf0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ac00: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
ac10: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ac20: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ac30: 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
ac40: 78 2e 54 61 62 6c 65 4e 61 6d 65 2c 20 79 2e 54  x.TableName, y.T
ac50: 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  ableName,..     
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac70: 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
ac80: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
ac90: 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20 20 20  eCase))..       
aca0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acc0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
ace0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
acf0: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
ad00: 45 71 75 61 6c 73 28 78 2e 43 6f 6c 75 6d 6e 4e  Equals(x.ColumnN
ad10: 61 6d 65 2c 20 79 2e 43 6f 6c 75 6d 6e 4e 61 6d  ame, y.ColumnNam
ad20: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
ad40: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
ad50: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29  inalIgnoreCase))
ad60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ad70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ad80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ad90: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
ada0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
adb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
adc0: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
add0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ade0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
adf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae30: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
ae40: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 47 65 74    public int Get
ae50: 48 61 73 68 43 6f 64 65 28 43 6f 6c 75 6d 6e 50  HashCode(ColumnP
ae60: 61 72 65 6e 74 20 6f 62 6a 29 0d 0a 20 20 20 20  arent obj)..    
ae70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ae80: 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20     int result = 
ae90: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
aea0: 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75    if ((obj != nu
aeb0: 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 44 61 74 61  ll) && (obj.Data
aec0: 62 61 73 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  baseName != null
aed0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
aee0: 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62      result ^= ob
aef0: 6a 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 2e 47  j.DatabaseName.G
af00: 65 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d  etHashCode();...
af10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
af20: 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26  ((obj != null) &
af30: 26 20 28 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d 65  & (obj.TableName
af40: 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   != null))..    
af50: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
af60: 6c 74 20 5e 3d 20 6f 62 6a 2e 54 61 62 6c 65 4e  lt ^= obj.TableN
af70: 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28  ame.GetHashCode(
af80: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
af90: 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75    if ((obj != nu
afa0: 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 43 6f 6c 75  ll) && (obj.Colu
afb0: 6d 6e 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29  mnName != null))
afc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
afd0: 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e    result ^= obj.
afe0: 43 6f 6c 75 6d 6e 4e 61 6d 65 2e 47 65 74 48 61  ColumnName.GetHa
aff0: 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20  shCode();....   
b000: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
b010: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
b020: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
b030: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
b040: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
b050: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
b060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0a0: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
b0b0: 73 74 61 74 69 63 20 76 6f 69 64 20 47 65 74 53  static void GetS
b0c0: 74 61 74 65 6d 65 6e 74 43 6f 6c 75 6d 6e 50 61  tatementColumnPa
b0d0: 72 65 6e 74 73 28 0d 0a 20 20 20 20 20 20 20 20  rents(..        
b0e0: 53 51 4c 69 74 65 42 61 73 65 20 73 71 6c 2c 0d  SQLiteBase sql,.
b0f0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
b100: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 0d 0a  tatement stmt,..
b110: 20 20 20 20 20 20 20 20 69 6e 74 20 66 69 65 6c          int fiel
b120: 64 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  dCount,..       
b130: 20 72 65 66 20 44 69 63 74 69 6f 6e 61 72 79 3c   ref Dictionary<
b140: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69  ColumnParent, Li
b150: 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54  st<int>> parentT
b160: 6f 43 6f 6c 75 6d 6e 73 2c 0d 0a 20 20 20 20 20  oColumns,..     
b170: 20 20 20 72 65 66 20 44 69 63 74 69 6f 6e 61 72     ref Dictionar
b180: 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72  y<int, ColumnPar
b190: 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54 6f 50 61 72  ent> columnToPar
b1a0: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ent..        )..
b1b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
b1c0: 66 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  f (parentToColum
b1d0: 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
b1e0: 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 54           parentT
b1f0: 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e 65 77 20 44  oColumns = new D
b200: 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e  ictionary<Column
b210: 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74  Parent, List<int
b220: 3e 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  >>(..           
b230: 20 20 20 20 20 6e 65 77 20 43 6f 6c 75 6d 6e 50       new ColumnP
b240: 61 72 65 6e 74 28 29 29 3b 0d 0a 0d 0a 20 20 20  arent());....   
b250: 20 20 20 20 20 69 66 20 28 63 6f 6c 75 6d 6e 54       if (columnT
b260: 6f 50 61 72 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  oParent == null)
b270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
b280: 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 20 6e  lumnToParent = n
b290: 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e  ew Dictionary<in
b2a0: 74 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e  t, ColumnParent>
b2b0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  ();....        f
b2c0: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
b2d0: 20 3c 20 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e   < fieldCount; n
b2e0: 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ++)..        {..
b2f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
b300: 6e 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65 20  ng databaseName 
b310: 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 44 61 74 61  = sql.ColumnData
b320: 62 61 73 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e  baseName(stmt, n
b330: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b340: 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65  string tableName
b350: 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 54 61 62   = sql.ColumnTab
b360: 6c 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b  leName(stmt, n);
b370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
b380: 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 20  ring columnName 
b390: 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67  = sql.ColumnOrig
b3a0: 69 6e 61 6c 4e 61 6d 65 28 73 74 6d 74 2c 20 6e  inalName(stmt, n
b3b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
b3c0: 20 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6b    ColumnParent k
b3d0: 65 79 20 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e 50  ey = new ColumnP
b3e0: 61 72 65 6e 74 28 64 61 74 61 62 61 73 65 4e 61  arent(databaseNa
b3f0: 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65 2c 20 6e  me, tableName, n
b400: 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ull);..         
b410: 20 20 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20     ColumnParent 
b420: 76 61 6c 75 65 20 3d 20 6e 65 77 20 43 6f 6c 75  value = new Colu
b430: 6d 6e 50 61 72 65 6e 74 28 64 61 74 61 62 61 73  mnParent(databas
b440: 65 4e 61 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65  eName, tableName
b450: 2c 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0d 0a  , columnName);..
b460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 69  ..            Li
b470: 73 74 3c 69 6e 74 3e 20 69 6e 64 65 78 4c 69 73  st<int> indexLis
b480: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
b490: 20 20 69 66 20 28 21 70 61 72 65 6e 74 54 6f 43    if (!parentToC
b4a0: 6f 6c 75 6d 6e 73 2e 54 72 79 47 65 74 56 61 6c  olumns.TryGetVal
b4b0: 75 65 28 6b 65 79 2c 20 6f 75 74 20 69 6e 64 65  ue(key, out inde
b4c0: 78 4c 69 73 74 29 29 0d 0a 20 20 20 20 20 20 20  xList))..       
b4d0: 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 54           parentT
b4e0: 6f 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 6b 65 79  oColumns.Add(key
b4f0: 2c 20 6e 65 77 20 4c 69 73 74 3c 69 6e 74 3e 28  , new List<int>(
b500: 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 6e 20 7d 29  new int[] { n })
b510: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b520: 65 6c 73 65 20 69 66 20 28 69 6e 64 65 78 4c 69  else if (indexLi
b530: 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st != null)..   
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
b550: 65 78 4c 69 73 74 2e 41 64 64 28 6e 29 3b 0d 0a  exList.Add(n);..
b560: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
b570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b580: 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e    parentToColumn
b590: 73 5b 6b 65 79 5d 20 3d 20 6e 65 77 20 4c 69 73  s[key] = new Lis
b5a0: 74 3c 69 6e 74 3e 28 6e 65 77 20 69 6e 74 5b 5d  t<int>(new int[]
b5b0: 20 7b 20 6e 20 7d 29 3b 0d 0a 0d 0a 20 20 20 20   { n });....    
b5c0: 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f          columnTo
b5d0: 50 61 72 65 6e 74 2e 41 64 64 28 6e 2c 20 76 61  Parent.Add(n, va
b5e0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
b5f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
b600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b650: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
b660: 20 69 6e 74 20 43 6f 75 6e 74 50 61 72 65 6e 74   int CountParent
b670: 73 28 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74  s(..        Dict
b680: 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72  ionary<ColumnPar
b690: 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20  ent, List<int>> 
b6a0: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 0d  parentToColumns.
b6b0: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
b6c0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72  {..        int r
b6d0: 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  esult = 0;....  
b6e0: 20 20 20 20 20 20 69 66 20 28 70 61 72 65 6e 74        if (parent
b6f0: 54 6f 43 6f 6c 75 6d 6e 73 20 21 3d 20 6e 75 6c  ToColumns != nul
b700: 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
b710: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
b720: 63 68 20 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ch (ColumnParent
b730: 20 6b 65 79 20 69 6e 20 70 61 72 65 6e 74 54 6f   key in parentTo
b740: 43 6f 6c 75 6d 6e 73 2e 4b 65 79 73 29 0d 0a 20  Columns.Keys).. 
b750: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b770: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b790: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
b7a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b7b0: 20 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d   string tableNam
b7c0: 65 20 3d 20 6b 65 79 2e 54 61 62 6c 65 4e 61 6d  e = key.TableNam
b7d0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
b7e0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
b7f0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
b800: 61 62 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  ableName))..    
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b820: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
b830: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
b840: 75 6c 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ult++;..        
b850: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
b860: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
b870: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
b880: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
b890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ////....    inte
b8e0: 72 6e 61 6c 20 44 61 74 61 54 61 62 6c 65 20 47  rnal DataTable G
b8f0: 65 74 53 63 68 65 6d 61 54 61 62 6c 65 28 62 6f  etSchemaTable(bo
b900: 6f 6c 20 77 61 6e 74 55 6e 69 71 75 65 49 6e 66  ol wantUniqueInf
b910: 6f 2c 20 62 6f 6f 6c 20 77 61 6e 74 44 65 66 61  o, bool wantDefa
b920: 75 6c 74 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ultValue)..    {
b930: 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  ..      CheckClo
b940: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 69 66  sed();..      if
b950: 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73   (_throwOnDispos
b960: 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ed) SQLiteComman
b970: 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64  d.Check(_command
b980: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  );....      //..
b990: 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a        // BUGFIX:
b9a0: 20 57 65 20 6e 65 65 64 20 74 6f 20 71 75 69 63   We need to quic
b9b0: 6b 6c 79 20 73 63 61 6e 20 61 6c 6c 20 74 68 65  kly scan all the
b9c0: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
b9d0: 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 2f 2f  urrent..      //
b9e0: 20 20 20 20 20 20 20 20 20 22 72 65 73 75 6c 74           "result
b9f0: 20 73 65 74 22 20 74 6f 20 73 65 65 20 68 6f 77   set" to see how
ba00: 20 6d 61 6e 79 20 64 69 73 74 69 6e 63 74 20 74   many distinct t
ba10: 61 62 6c 65 73 20 61 72 65 20 61 63 74 75 61 6c  ables are actual
ba20: 6c 79 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  ly..      //    
ba30: 20 20 20 20 20 69 6e 76 6f 6c 76 65 64 2e 20 20       involved.  
ba40: 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  This information
ba50: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f   is necessary so
ba60: 20 74 68 61 74 20 73 6f 6d 65 0d 0a 20 20 20 20   that some..    
ba70: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 74    //         int
ba80: 65 6c 6c 69 67 65 6e 74 20 64 65 63 69 73 69 6f  elligent decisio
ba90: 6e 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 77  ns can be made w
baa0: 68 65 6e 20 63 6f 6e 73 74 72 75 63 74 69 6e 67  hen constructing
bab0: 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20   the..      //  
bac0: 20 20 20 20 20 20 20 6d 65 74 61 64 61 74 61 20         metadata 
bad0: 62 65 6c 6f 77 2e 20 20 46 6f 72 20 65 78 61 6d  below.  For exam
bae0: 70 6c 65 2c 20 77 65 20 6e 65 65 64 20 74 6f 20  ple, we need to 
baf0: 62 65 20 76 65 72 79 20 63 61 72 65 66 75 6c 0d  be very careful.
bb00: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
bb10: 20 20 61 62 6f 75 74 20 66 6c 61 67 67 69 6e 67    about flagging
bb20: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 63 6f   a particular co
bb30: 6c 75 6d 6e 20 61 73 20 22 75 6e 69 71 75 65 22  lumn as "unique"
bb40: 20 6a 75 73 74 0d 0a 20 20 20 20 20 20 2f 2f 20   just..      // 
bb50: 20 20 20 20 20 20 20 20 62 65 63 61 75 73 65 20          because 
bb60: 69 74 20 77 61 73 20 69 6e 20 69 74 73 20 6f 72  it was in its or
bb70: 69 67 69 6e 61 6c 20 75 6e 64 65 72 6c 79 69 6e  iginal underlyin
bb80: 67 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  g database table
bb90: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
bba0: 20 20 20 69 66 20 74 68 65 72 65 20 61 72 65 20     if there are 
bbb0: 6e 6f 77 20 6d 75 6c 74 69 70 6c 65 20 74 61 62  now multiple tab
bbc0: 6c 65 73 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20  les involved in 
bbd0: 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  the..      //   
bbe0: 20 20 20 20 20 20 22 72 65 73 75 6c 74 20 73 65        "result se
bbf0: 74 22 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20  t".  See ticket 
bc00: 5b 37 65 33 66 61 39 33 37 34 34 5d 20 66 6f 72  [7e3fa93744] for
bc10: 20 6d 6f 72 65 20 64 65 74 61 69 6c 65 64 0d 0a   more detailed..
bc20: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
bc30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0d 0a 20   information... 
bc40: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 44       //..      D
bc50: 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e  ictionary<Column
bc60: 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74  Parent, List<int
bc70: 3e 3e 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  >> parentToColum
bc80: 6e 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ns = null;..    
bc90: 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74    Dictionary<int
bca0: 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20  , ColumnParent> 
bcb0: 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d  columnToParent =
bcc0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
bcd0: 47 65 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c 75  GetStatementColu
bce0: 6d 6e 50 61 72 65 6e 74 73 28 0d 0a 20 20 20 20  mnParents(..    
bcf0: 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43        _command.C
bd00: 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2c 20  onnection._sql, 
bd10: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
bd20: 2c 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a  , _fieldCount,..
bd30: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 70 61            ref pa
bd40: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 20 72  rentToColumns, r
bd50: 65 66 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e  ef columnToParen
bd60: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 44 61 74  t);....      Dat
bd70: 61 54 61 62 6c 65 20 74 62 6c 20 3d 20 6e 65 77  aTable tbl = new
bd80: 20 44 61 74 61 54 61 62 6c 65 28 22 53 63 68 65   DataTable("Sche
bd90: 6d 61 54 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20  maTable");..    
bda0: 20 20 44 61 74 61 54 61 62 6c 65 20 74 62 6c 49    DataTable tblI
bdb0: 6e 64 65 78 65 73 20 3d 20 6e 75 6c 6c 3b 0d 0a  ndexes = null;..
bdc0: 20 20 20 20 20 20 44 61 74 61 54 61 62 6c 65 20        DataTable 
bdd0: 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 3b  tblIndexColumns;
bde0: 0d 0a 20 20 20 20 20 20 44 61 74 61 52 6f 77 20  ..      DataRow 
bdf0: 72 6f 77 3b 0d 0a 20 20 20 20 20 20 73 74 72 69  row;..      stri
be00: 6e 67 20 74 65 6d 70 3b 0d 0a 20 20 20 20 20 20  ng temp;..      
be10: 73 74 72 69 6e 67 20 73 74 72 43 61 74 61 6c 6f  string strCatalo
be20: 67 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  g = String.Empty
be30: 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ;..      string 
be40: 73 74 72 54 61 62 6c 65 20 3d 20 53 74 72 69 6e  strTable = Strin
be50: 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20  g.Empty;..      
be60: 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 75 6d 6e  string strColumn
be70: 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b   = String.Empty;
be80: 0d 0a 0d 0a 20 20 20 20 20 20 74 62 6c 2e 4c 6f  ....      tbl.Lo
be90: 63 61 6c 65 20 3d 20 43 75 6c 74 75 72 65 49 6e  cale = CultureIn
bea0: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
beb0: 75 72 65 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  ure;..      tbl.
bec0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
bed0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f  maTableColumn.Co
bee0: 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66  lumnName, typeof
bef0: 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (String));..    
bf00: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
bf10: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
bf20: 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61  umn.ColumnOrdina
bf30: 6c 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b  l, typeof(int));
bf40: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
bf50: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
bf60: 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
bf70: 53 69 7a 65 2c 20 74 79 70 65 6f 66 28 69 6e 74  Size, typeof(int
bf80: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
bf90: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
bfa0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
bfb0: 65 72 69 63 50 72 65 63 69 73 69 6f 6e 2c 20 74  ericPrecision, t
bfc0: 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20  ypeof(int));..  
bfd0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
bfe0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
bff0: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61  olumn.NumericSca
c000: 6c 65 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29  le, typeof(int))
c010: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
c020: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
c030: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69  ableColumn.IsUni
c040: 71 75 65 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  que, typeof(Bool
c050: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ean));..      tb
c060: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c070: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c080: 49 73 4b 65 79 2c 20 74 79 70 65 6f 66 28 42 6f  IsKey, typeof(Bo
c090: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
c0a0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c0b0: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
c0c0: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 65  nalColumn.BaseSe
c0d0: 72 76 65 72 4e 61 6d 65 2c 20 74 79 70 65 6f 66  rverName, typeof
c0e0: 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (string));..    
c0f0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c100: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
c110: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65  ionalColumn.Base
c120: 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 20 74 79 70  CatalogName, typ
c130: 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20  eof(String));.. 
c140: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c150: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c160: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d  Column.BaseColum
c170: 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74  nName, typeof(St
c180: 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
c190: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
c1a0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
c1b0: 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 2c  .BaseSchemaName,
c1c0: 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29   typeof(String))
c1d0: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
c1e0: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
c1f0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
c200: 61 62 6c 65 4e 61 6d 65 2c 20 74 79 70 65 6f 66  ableName, typeof
c210: 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (String));..    
c220: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c230: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
c240: 75 6d 6e 2e 44 61 74 61 54 79 70 65 2c 20 74 79  umn.DataType, ty
c250: 70 65 6f 66 28 54 79 70 65 29 29 3b 0d 0a 20 20  peof(Type));..  
c260: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c270: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
c280: 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c  olumn.AllowDBNul
c290: 6c 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  l, typeof(Boolea
c2a0: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  n));..      tbl.
c2b0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
c2c0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72  maTableColumn.Pr
c2d0: 6f 76 69 64 65 72 54 79 70 65 2c 20 74 79 70 65  oviderType, type
c2e0: 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20  of(int));..     
c2f0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c300: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
c310: 6d 6e 2e 49 73 41 6c 69 61 73 65 64 2c 20 74 79  mn.IsAliased, ty
c320: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d  peof(Boolean));.
c330: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
c340: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
c350: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65  leColumn.IsExpre
c360: 73 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f  ssion, typeof(Bo
c370: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
c380: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c390: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
c3a0: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f  nalColumn.IsAuto
c3b0: 49 6e 63 72 65 6d 65 6e 74 2c 20 74 79 70 65 6f  Increment, typeo
c3c0: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20  f(Boolean));..  
c3d0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c3e0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
c3f0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
c400: 52 6f 77 56 65 72 73 69 6f 6e 2c 20 74 79 70 65  RowVersion, type
c410: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
c420: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c430: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c440: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
c450: 73 48 69 64 64 65 6e 2c 20 74 79 70 65 6f 66 28  sHidden, typeof(
c460: 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20  Boolean));..    
c470: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c480: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
c490: 75 6d 6e 2e 49 73 4c 6f 6e 67 2c 20 74 79 70 65  umn.IsLong, type
c4a0: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
c4b0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c4c0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c4d0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
c4e0: 73 52 65 61 64 4f 6e 6c 79 2c 20 74 79 70 65 6f  sReadOnly, typeo
c4f0: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20  f(Boolean));..  
c500: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c510: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
c520: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 50 72  ptionalColumn.Pr
c530: 6f 76 69 64 65 72 53 70 65 63 69 66 69 63 44 61  oviderSpecificDa
c540: 74 61 54 79 70 65 2c 20 74 79 70 65 6f 66 28 54  taType, typeof(T
c550: 79 70 65 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ype));..      tb
c560: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c570: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
c580: 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56  lColumn.DefaultV
c590: 61 6c 75 65 2c 20 74 79 70 65 6f 66 28 6f 62 6a  alue, typeof(obj
c5a0: 65 63 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ect));..      tb
c5b0: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 44  l.Columns.Add("D
c5c0: 61 74 61 54 79 70 65 4e 61 6d 65 22 2c 20 74 79  ataTypeName", ty
c5d0: 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a  peof(string));..
c5e0: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
c5f0: 73 2e 41 64 64 28 22 43 6f 6c 6c 61 74 69 6f 6e  s.Add("Collation
c600: 54 79 70 65 22 2c 20 74 79 70 65 6f 66 28 73 74  Type", typeof(st
c610: 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
c620: 62 6c 2e 42 65 67 69 6e 4c 6f 61 64 44 61 74 61  bl.BeginLoadData
c630: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  ();....      for
c640: 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
c650: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b   _fieldCount; n+
c660: 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  +)..      {..   
c670: 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65 20       SQLiteType 
c680: 73 71 6c 54 79 70 65 20 3d 20 47 65 74 53 51 4c  sqlType = GetSQL
c690: 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20  iteType(_flags, 
c6a0: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  n);....        r
c6b0: 6f 77 20 3d 20 74 62 6c 2e 4e 65 77 52 6f 77 28  ow = tbl.NewRow(
c6c0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 62  );....        Db
c6d0: 54 79 70 65 20 74 79 70 20 3d 20 73 71 6c 54 79  Type typ = sqlTy
c6e0: 70 65 2e 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20  pe.Type;....    
c6f0: 20 20 20 20 2f 2f 20 44 65 66 61 75 6c 74 20 73      // Default s
c700: 65 74 74 69 6e 67 73 20 66 6f 72 20 74 68 65 20  ettings for the 
c710: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20  column..        
c720: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
c730: 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65  olumn.ColumnName
c740: 5d 20 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0d  ] = GetName(n);.
c750: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
c760: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43  emaTableColumn.C
c770: 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 5d 20 3d 20  olumnOrdinal] = 
c780: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  n;..        row[
c790: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c7a0: 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20  n.ColumnSize] = 
c7b0: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44 62  SQLiteConvert.Db
c7c0: 54 79 70 65 54 6f 43 6f 6c 75 6d 6e 53 69 7a 65  TypeToColumnSize
c7d0: 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
c7e0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
c7f0: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65  olumn.NumericPre
c800: 63 69 73 69 6f 6e 5d 20 3d 20 53 51 4c 69 74 65  cision] = SQLite
c810: 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f  Convert.DbTypeTo
c820: 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e  NumericPrecision
c830: 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
c840: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
c850: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61  olumn.NumericSca
c860: 6c 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76  le] = SQLiteConv
c870: 65 72 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65  ert.DbTypeToNume
c880: 72 69 63 53 63 61 6c 65 28 74 79 70 29 3b 0d 0a  ricScale(typ);..
c890: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
c8a0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72  maTableColumn.Pr
c8b0: 6f 76 69 64 65 72 54 79 70 65 5d 20 3d 20 73 71  oviderType] = sq
c8c0: 6c 54 79 70 65 2e 54 79 70 65 3b 0d 0a 20 20 20  lType.Type;..   
c8d0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
c8e0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e  ableColumn.IsLon
c8f0: 67 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  g] = false;..   
c900: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
c910: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77  ableColumn.Allow
c920: 44 42 4e 75 6c 6c 5d 20 3d 20 74 72 75 65 3b 0d  DBNull] = true;.
c930: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
c940: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
c950: 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c  Column.IsReadOnl
c960: 79 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  y] = false;..   
c970: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
c980: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
c990: 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e 5d  mn.IsRowVersion]
c9a0: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
c9b0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c9c0: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75  leColumn.IsUniqu
c9d0: 65 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  e] = false;..   
c9e0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
c9f0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79  ableColumn.IsKey
ca00: 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  ] = false;..    
ca10: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
ca20: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
ca30: 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e  n.IsAutoIncremen
ca40: 74 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  t] = false;..   
ca50: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
ca60: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74 61 54  ableColumn.DataT
ca70: 79 70 65 5d 20 3d 20 47 65 74 46 69 65 6c 64 54  ype] = GetFieldT
ca80: 79 70 65 28 6e 29 3b 0d 0a 20 20 20 20 20 20 20  ype(n);..       
ca90: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
caa0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
cab0: 73 48 69 64 64 65 6e 5d 20 3d 20 66 61 6c 73 65  sHidden] = false
cac0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53  ;..        row[S
cad0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
cae0: 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 5d  .BaseSchemaName]
caf0: 20 3d 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61   = _baseSchemaNa
cb00: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  me;....        s
cb10: 74 72 43 6f 6c 75 6d 6e 20 3d 20 63 6f 6c 75 6d  trColumn = colum
cb20: 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 43 6f 6c  nToParent[n].Col
cb30: 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  umnName;..      
cb40: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
cb50: 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f  ullOrEmpty(strCo
cb60: 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29 20  lumn) == false) 
cb70: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
cb80: 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e  olumn.BaseColumn
cb90: 4e 61 6d 65 5d 20 3d 20 73 74 72 43 6f 6c 75 6d  Name] = strColum
cba0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 6f  n;....        ro
cbb0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
cbc0: 75 6d 6e 2e 49 73 45 78 70 72 65 73 73 69 6f 6e  umn.IsExpression
cbd0: 5d 20 3d 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c  ] = String.IsNul
cbe0: 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f 6c 75  lOrEmpty(strColu
cbf0: 6d 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f  mn);..        ro
cc00: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
cc10: 75 6d 6e 2e 49 73 41 6c 69 61 73 65 64 5d 20 3d  umn.IsAliased] =
cc20: 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65   (String.Compare
cc30: 28 47 65 74 4e 61 6d 65 28 6e 29 2c 20 73 74 72  (GetName(n), str
cc40: 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43 6f  Column, StringCo
cc50: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
cc60: 49 67 6e 6f 72 65 43 61 73 65 29 20 21 3d 20 30  IgnoreCase) != 0
cc70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65  );....        te
cc80: 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72  mp = columnToPar
cc90: 65 6e 74 5b 6e 5d 2e 54 61 62 6c 65 4e 61 6d 65  ent[n].TableName
cca0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ;..        if (S
ccb0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
ccc0: 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c  pty(temp) == fal
ccd0: 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61  se) row[SchemaTa
cce0: 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61  bleColumn.BaseTa
ccf0: 62 6c 65 4e 61 6d 65 5d 20 3d 20 74 65 6d 70 3b  bleName] = temp;
cd00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65 6d 70  ....        temp
cd10: 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e   = columnToParen
cd20: 74 5b 6e 5d 2e 44 61 74 61 62 61 73 65 4e 61 6d  t[n].DatabaseNam
cd30: 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  e;..        if (
cd40: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
cd50: 6d 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61  mpty(temp) == fa
cd60: 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54  lse) row[SchemaT
cd70: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
cd80: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
cd90: 6d 65 5d 20 3d 20 74 65 6d 70 3b 0d 0a 0d 0a 20  me] = temp;.... 
cda0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61         string da
cdb0: 74 61 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  taType = null;..
cdc0: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
cdd0: 20 68 61 76 65 20 61 20 74 61 62 6c 65 2d 62 6f   have a table-bo
cde0: 75 6e 64 20 63 6f 6c 75 6d 6e 2c 20 65 78 74 72  und column, extr
cdf0: 61 63 74 20 74 68 65 20 65 78 74 72 61 20 69 6e  act the extra in
ce00: 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 69  formation from i
ce10: 74 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  t..        if (S
ce20: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
ce30: 70 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d  pty(strColumn) =
ce40: 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20  = false)..      
ce50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73    {..          s
ce60: 74 72 69 6e 67 20 62 61 73 65 43 61 74 61 6c 6f  tring baseCatalo
ce70: 67 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 45  gName = String.E
ce80: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
ce90: 20 20 20 69 66 20 28 72 6f 77 5b 53 63 68 65 6d     if (row[Schem
cea0: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
ceb0: 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67  lumn.BaseCatalog
cec0: 4e 61 6d 65 5d 20 21 3d 20 44 42 4e 75 6c 6c 2e  Name] != DBNull.
ced0: 56 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20  Value)..        
cee0: 20 20 20 20 20 20 62 61 73 65 43 61 74 61 6c 6f        baseCatalo
cef0: 67 4e 61 6d 65 20 3d 20 28 73 74 72 69 6e 67 29  gName = (string)
cf00: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
cf10: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61  ptionalColumn.Ba
cf20: 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 3b 0d  seCatalogName];.
cf30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  ...          str
cf40: 69 6e 67 20 62 61 73 65 54 61 62 6c 65 4e 61 6d  ing baseTableNam
cf50: 65 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  e = String.Empty
cf60: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
cf70: 66 20 28 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  f (row[SchemaTab
cf80: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62  leColumn.BaseTab
cf90: 6c 65 4e 61 6d 65 5d 20 21 3d 20 44 42 4e 75 6c  leName] != DBNul
cfa0: 6c 2e 56 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  l.Value)..      
cfb0: 20 20 20 20 20 20 20 20 62 61 73 65 54 61 62 6c          baseTabl
cfc0: 65 4e 61 6d 65 20 3d 20 28 73 74 72 69 6e 67 29  eName = (string)
cfd0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
cfe0: 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e  olumn.BaseTableN
cff0: 61 6d 65 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame];....       
d000: 20 20 20 73 74 72 69 6e 67 20 63 6f 6c 6c 53 65     string collSe
d010: 71 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  q = null;..     
d020: 20 20 20 20 20 62 6f 6f 6c 20 62 4e 6f 74 4e 75       bool bNotNu
d030: 6c 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ll = false;..   
d040: 20 20 20 20 20 20 20 62 6f 6f 6c 20 62 50 72 69         bool bPri
d050: 6d 61 72 79 4b 65 79 20 3d 20 66 61 6c 73 65 3b  maryKey = false;
d060: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c  ..          bool
d070: 20 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20   bAutoIncrement 
d080: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
d090: 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 53      string[] arS
d0a0: 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ize;....        
d0b0: 20 20 2f 2f 20 47 65 74 20 74 68 65 20 63 6f 6c    // Get the col
d0c0: 75 6d 6e 20 6d 65 74 61 20 64 61 74 61 0d 0a 20  umn meta data.. 
d0d0: 20 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e           _comman
d0e0: 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71  d.Connection._sq
d0f0: 6c 2e 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61  l.ColumnMetaData
d100: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  (..            b
d110: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 0d  aseCatalogName,.
d120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73  .            bas
d130: 65 54 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  eTableName,..   
d140: 20 20 20 20 20 20 20 20 20 73 74 72 43 6f 6c 75           strColu
d150: 6d 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mn,..           
d160: 20 72 65 66 20 64 61 74 61 54 79 70 65 2c 20 72   ref dataType, r
d170: 65 66 20 63 6f 6c 6c 53 65 71 2c 20 72 65 66 20  ef collSeq, ref 
d180: 62 4e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 62 50  bNotNull, ref bP
d190: 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 62  rimaryKey, ref b
d1a0: 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 3b 0d  AutoIncrement);.
d1b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
d1c0: 28 62 4e 6f 74 4e 75 6c 6c 20 7c 7c 20 62 50 72  (bNotNull || bPr
d1d0: 69 6d 61 72 79 4b 65 79 29 20 72 6f 77 5b 53 63  imaryKey) 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 20 66  AllowDBNull] = f
d200: 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
d210: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
d220: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20  leColumn.IsKey] 
d230: 3d 20 62 50 72 69 6d 61 72 79 4b 65 79 20 26 26  = bPrimaryKey &&
d240: 20 43 6f 75 6e 74 50 61 72 65 6e 74 73 28 70 61   CountParents(pa
d250: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 29 20 3c  rentToColumns) <
d260: 3d 20 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 1;..          
d270: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
d280: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
d290: 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d  AutoIncrement] =
d2a0: 20 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 3b   bAutoIncrement;
d2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b  ..          row[
d2c0: 22 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 22 5d  "CollationType"]
d2d0: 20 3d 20 63 6f 6c 6c 53 65 71 3b 0d 0a 0d 0a 20   = collSeq;.... 
d2e0: 20 20 20 20 20 20 20 20 20 2f 2f 20 46 6f 72 20           // For 
d2f0: 74 79 70 65 73 20 6c 69 6b 65 20 76 61 72 63 68  types like varch
d300: 61 72 28 35 30 29 20 61 6e 64 20 73 75 63 68 2c  ar(50) and such,
d310: 20 65 78 74 72 61 63 74 20 74 68 65 20 73 69 7a   extract the siz
d320: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61 72 53  e..          arS
d330: 69 7a 65 20 3d 20 64 61 74 61 54 79 70 65 2e 53  ize = dataType.S
d340: 70 6c 69 74 28 27 28 27 29 3b 0d 0a 20 20 20 20  plit('(');..    
d350: 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a 65        if (arSize
d360: 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20  .Length > 1)..  
d370: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d380: 20 20 20 20 20 20 20 64 61 74 61 54 79 70 65 20         dataType 
d390: 3d 20 61 72 53 69 7a 65 5b 30 5d 3b 0d 0a 20 20  = arSize[0];..  
d3a0: 20 20 20 20 20 20 20 20 20 20 61 72 53 69 7a 65            arSize
d3b0: 20 3d 20 61 72 53 69 7a 65 5b 31 5d 2e 53 70 6c   = arSize[1].Spl
d3c0: 69 74 28 27 29 27 29 3b 0d 0a 20 20 20 20 20 20  it(')');..      
d3d0: 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a 65        if (arSize
d3e0: 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20  .Length > 1)..  
d3f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d400: 20 20 20 20 20 20 20 20 20 20 20 61 72 53 69 7a             arSiz
d410: 65 20 3d 20 61 72 53 69 7a 65 5b 30 5d 2e 53 70  e = arSize[0].Sp
d420: 6c 69 74 28 27 2c 27 2c 20 27 2e 27 29 3b 0d 0a  lit(',', '.');..
d430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d440: 20 28 73 71 6c 54 79 70 65 2e 54 79 70 65 20 3d   (sqlType.Type =
d450: 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 20  = DbType.Binary 
d460: 7c 7c 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  || SQLiteConvert
d470: 2e 49 73 53 74 72 69 6e 67 44 62 54 79 70 65 28  .IsStringDbType(
d480: 73 71 6c 54 79 70 65 2e 54 79 70 65 29 29 0d 0a  sqlType.Type))..
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
d4a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d4b0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
d4c0: 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a  Column.ColumnSiz
d4d0: 65 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49  e] = Convert.ToI
d4e0: 6e 74 33 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20  nt32(arSize[0], 
d4f0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
d500: 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a  riantCulture);..
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
d520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65  .              e
d530: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
d540: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d550: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
d560: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65  TableColumn.Nume
d570: 72 69 63 50 72 65 63 69 73 69 6f 6e 5d 20 3d 20  ricPrecision] = 
d580: 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28  Convert.ToInt32(
d590: 61 72 53 69 7a 65 5b 30 5d 2c 20 43 75 6c 74 75  arSize[0], Cultu
d5a0: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
d5b0: 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20  Culture);..     
d5c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
d5d0: 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31  rSize.Length > 1
d5e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
d5f0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
d600: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72  ableColumn.Numer
d610: 69 63 53 63 61 6c 65 5d 20 3d 20 43 6f 6e 76 65  icScale] = Conve
d620: 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53 69 7a  rt.ToInt32(arSiz
d630: 65 5b 31 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66  e[1], CultureInf
d640: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
d650: 72 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  re);..          
d660: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
d670: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
d680: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  }....          i
d690: 66 20 28 77 61 6e 74 44 65 66 61 75 6c 74 56 61  f (wantDefaultVa
d6a0: 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  lue)..          
d6b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
d6c0: 2f 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20  / Determine the 
d6d0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
d6e0: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 77 68  r the column, wh
d6f0: 69 63 68 20 73 75 63 6b 73 20 62 65 63 61 75 73  ich sucks becaus
d700: 65 20 77 65 20 68 61 76 65 20 74 6f 20 71 75 65  e we have to que
d710: 72 79 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f  ry the schema fo
d720: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 0d 0a 20  r each column.. 
d730: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
d740: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
d750: 63 6d 64 54 61 62 6c 65 20 3d 20 6e 65 77 20 53  cmdTable = new S
d760: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 48 65 6c  QLiteCommand(Hel
d770: 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
d780: 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  gFormat(CultureI
d790: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
d7a0: 74 75 72 65 2c 20 22 50 52 41 47 4d 41 20 5b 7b  ture, "PRAGMA [{
d7b0: 30 7d 5d 2e 54 41 42 4c 45 5f 49 4e 46 4f 28 5b  0}].TABLE_INFO([
d7c0: 7b 31 7d 5d 29 22 2c 0d 0a 20 20 20 20 20 20 20  {1}])",..       
d7d0: 20 20 20 20 20 20 20 62 61 73 65 43 61 74 61 6c         baseCatal
d7e0: 6f 67 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ogName,..       
d7f0: 20 20 20 20 20 20 20 62 61 73 65 54 61 62 6c 65         baseTable
d800: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
d810: 20 20 20 20 29 2c 20 5f 63 6f 6d 6d 61 6e 64 2e      ), _command.
d820: 43 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a 20 20  Connection))..  
d830: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
d840: 28 44 62 44 61 74 61 52 65 61 64 65 72 20 72 64  (DbDataReader rd
d850: 54 61 62 6c 65 20 3d 20 63 6d 64 54 61 62 6c 65  Table = cmdTable
d860: 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29  .ExecuteReader()
d870: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
d880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d890: 2f 2f 20 46 69 6e 64 20 74 68 65 20 6d 61 74 63  // Find the matc
d8a0: 68 69 6e 67 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20  hing column..   
d8b0: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
d8c0: 20 28 72 64 54 61 62 6c 65 2e 52 65 61 64 28 29   (rdTable.Read()
d8d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
d8e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d8f0: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43      if (String.C
d900: 6f 6d 70 61 72 65 28 28 73 74 72 69 6e 67 29 72  ompare((string)r
d910: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
d920: 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e  lumn.BaseColumnN
d930: 61 6d 65 5d 2c 20 72 64 54 61 62 6c 65 2e 47 65  ame], rdTable.Ge
d940: 74 53 74 72 69 6e 67 28 31 29 2c 20 53 74 72 69  tString(1), Stri
d950: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
d960: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
d970: 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
d980: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d990: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d9a0: 72 64 54 61 62 6c 65 2e 49 73 44 42 4e 75 6c 6c  rdTable.IsDBNull
d9b0: 28 34 29 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20  (4) == false).. 
d9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9d0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
d9e0: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
d9f0: 2e 44 65 66 61 75 6c 74 56 61 6c 75 65 5d 20 3d  .DefaultValue] =
da00: 20 72 64 54 61 62 6c 65 5b 34 5d 3b 0d 0a 0d 0a   rdTable[4];....
da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da20: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
da30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
da40: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
da50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
da60: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
da70: 20 20 20 20 20 20 2f 2f 20 44 65 74 65 72 6d 69        // Determi
da80: 6e 65 20 49 73 55 6e 69 71 75 65 20 70 72 6f 70  ne IsUnique prop
da90: 65 72 6c 79 2c 20 77 68 69 63 68 20 69 73 20 61  erly, which is a
daa0: 20 70 61 69 6e 20 69 6e 20 74 68 65 20 62 75 74   pain in the but
dab0: 74 21 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  t!..          if
dac0: 20 28 77 61 6e 74 55 6e 69 71 75 65 49 6e 66 6f   (wantUniqueInfo
dad0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
daf0: 62 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 20  baseCatalogName 
db00: 21 3d 20 73 74 72 43 61 74 61 6c 6f 67 0d 0a 20  != strCatalog.. 
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20               || 
db20: 62 61 73 65 54 61 62 6c 65 4e 61 6d 65 20 21 3d  baseTableName !=
db30: 20 73 74 72 54 61 62 6c 65 29 0d 0a 20 20 20 20   strTable)..    
db40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
db50: 20 20 20 20 20 20 20 20 20 73 74 72 43 61 74 61           strCata
db60: 6c 6f 67 20 3d 20 62 61 73 65 43 61 74 61 6c 6f  log = baseCatalo
db70: 67 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  gName;..        
db80: 20 20 20 20 20 20 73 74 72 54 61 62 6c 65 20 3d        strTable =
db90: 20 62 61 73 65 54 61 62 6c 65 4e 61 6d 65 3b 0d   baseTableName;.
dba0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
dbb0: 20 74 62 6c 49 6e 64 65 78 65 73 20 3d 20 5f 63   tblIndexes = _c
dbc0: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
dbd0: 6e 2e 47 65 74 53 63 68 65 6d 61 28 22 49 6e 64  n.GetSchema("Ind
dbe0: 65 78 65 73 22 2c 20 6e 65 77 20 73 74 72 69 6e  exes", new strin
dbf0: 67 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  g[] {..         
dc00: 20 20 20 20 20 20 20 62 61 73 65 43 61 74 61 6c         baseCatal
dc10: 6f 67 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ogName,..       
dc20: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 0d 0a           null,..
dc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc40: 62 61 73 65 54 61 62 6c 65 4e 61 6d 65 2c 0d 0a  baseTableName,..
dc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc60: 6e 75 6c 6c 20 7d 29 3b 0d 0a 20 20 20 20 20 20  null });..      
dc70: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
dc80: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
dc90: 44 61 74 61 52 6f 77 20 72 6f 77 49 6e 64 65 78  DataRow rowIndex
dca0: 65 73 20 69 6e 20 74 62 6c 49 6e 64 65 78 65 73  es in tblIndexes
dcb0: 2e 52 6f 77 73 29 0d 0a 20 20 20 20 20 20 20 20  .Rows)..        
dcc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
dcd0: 20 20 20 20 20 74 62 6c 49 6e 64 65 78 43 6f 6c       tblIndexCol
dce0: 75 6d 6e 73 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  umns = _command.
dcf0: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53 63  Connection.GetSc
dd00: 68 65 6d 61 28 22 49 6e 64 65 78 43 6f 6c 75 6d  hema("IndexColum
dd10: 6e 73 22 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b  ns", new string[
dd20: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..           
dd30: 20 20 20 20 20 62 61 73 65 43 61 74 61 6c 6f 67       baseCatalog
dd40: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
dd50: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 0d 0a 20 20         null,..  
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61                ba
dd70: 73 65 54 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20  seTableName,..  
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
dd90: 74 72 69 6e 67 29 72 6f 77 49 6e 64 65 78 65 73  tring)rowIndexes
dda0: 5b 22 49 4e 44 45 58 5f 4e 41 4d 45 22 5d 2c 0d  ["INDEX_NAME"],.
ddb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ddc0: 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20   null..         
ddd0: 20 20 20 20 20 20 20 7d 29 3b 0d 0a 20 20 20 20         });..    
dde0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
ddf0: 68 20 28 44 61 74 61 52 6f 77 20 72 6f 77 43 6f  h (DataRow rowCo
de00: 6c 75 6d 6e 49 6e 64 65 78 20 69 6e 20 74 62 6c  lumnIndex in tbl
de10: 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77  IndexColumns.Row
de20: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
de30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
de40: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
de50: 43 6f 6d 70 61 72 65 28 53 51 4c 69 74 65 43 6f  Compare(SQLiteCo
de60: 6e 76 65 72 74 2e 47 65 74 53 74 72 69 6e 67 4f  nvert.GetStringO
de70: 72 4e 75 6c 6c 28 72 6f 77 43 6f 6c 75 6d 6e 49  rNull(rowColumnI
de80: 6e 64 65 78 5b 22 43 4f 4c 55 4d 4e 5f 4e 41 4d  ndex["COLUMN_NAM
de90: 45 22 5d 29 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c  E"]), strColumn,
dea0: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
deb0: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
dec0: 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20  ase) == 0)..    
ded0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
df00: 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58         // BUGFIX
df10: 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  : Make sure that
df20: 20 77 65 20 6f 6e 6c 79 20 66 6c 61 67 20 74 68   we only flag th
df30: 69 73 20 63 6f 6c 75 6d 6e 20 61 73 20 22 75 6e  is column as "un
df40: 69 71 75 65 22 0d 0a 20 20 20 20 20 20 20 20 20  ique"..         
df50: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
df60: 20 20 20 20 69 66 20 77 65 20 61 72 65 20 6e 6f      if we are no
df70: 74 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20  t processing of 
df80: 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20 6d 75 6c  some kind of mul
df90: 74 69 2d 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  ti-table..      
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
dfb0: 20 20 20 20 20 20 20 63 6f 6e 73 74 72 75 63 74         construct
dfc0: 20 28 69 2e 65 2e 20 61 20 6a 6f 69 6e 29 20 62   (i.e. a join) b
dfd0: 65 63 61 75 73 65 20 69 6e 20 74 68 61 74 20 63  ecause in that c
dfe0: 61 73 65 20 77 65 20 6d 75 73 74 0d 0a 20 20 20  ase we must..   
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e000: 2f 20 20 20 20 20 20 20 20 20 61 6c 6c 6f 77 20  /         allow 
e010: 64 75 70 6c 69 63 61 74 65 20 76 61 6c 75 65 73  duplicate values
e020: 20 28 72 65 66 65 72 20 74 6f 20 74 69 63 6b 65   (refer to ticke
e030: 74 20 5b 37 65 33 66 61 39 33 37 34 34 5d 29 2e  t [7e3fa93744]).
e040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e050: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
e060: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
e070: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 43 6f  rentToColumns.Co
e080: 75 6e 74 20 3d 3d 20 31 20 26 26 20 74 62 6c 49  unt == 1 && tblI
e090: 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73  ndexColumns.Rows
e0a0: 2e 43 6f 75 6e 74 20 3d 3d 20 31 20 26 26 20 28  .Count == 1 && (
e0b0: 62 6f 6f 6c 29 72 6f 77 5b 53 63 68 65 6d 61 54  bool)row[SchemaT
e0c0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77  ableColumn.Allow
e0d0: 44 42 4e 75 6c 6c 5d 20 3d 3d 20 66 61 6c 73 65  DBNull] == false
e0e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e0f0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
e100: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55  aTableColumn.IsU
e110: 6e 69 71 75 65 5d 20 3d 20 72 6f 77 49 6e 64 65  nique] = rowInde
e120: 78 65 73 5b 22 55 4e 49 51 55 45 22 5d 3b 0d 0a  xes["UNIQUE"];..
e130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e140: 20 20 20 20 2f 2f 20 49 66 20 69 74 73 20 61 6e      // If its an
e150: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
e160: 20 6b 65 79 20 61 6e 64 20 74 68 65 20 6f 6e 6c   key and the onl
e170: 79 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 6e  y primary key in
e180: 20 74 68 65 20 74 61 62 6c 65 2c 20 74 68 65 6e   the table, then
e190: 20 69 74 73 20 61 20 72 6f 77 69 64 20 61 6c 69   its a rowid ali
e1a0: 61 73 20 61 6e 64 20 69 73 20 61 75 74 6f 69 6e  as and is autoin
e1b0: 63 72 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20  crement..       
e1c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
e1d0: 54 45 3a 20 20 43 75 72 72 65 6e 74 6c 79 20 63  TE:  Currently c
e1e0: 6f 6d 6d 65 6e 74 65 64 20 6f 75 74 20 62 65 63  ommented out bec
e1f0: 61 75 73 65 20 74 68 69 73 20 69 73 20 6e 6f 74  ause this is not
e200: 20 61 6c 77 61 79 73 20 74 68 65 20 64 65 73 69   always the desi
e210: 72 65 64 20 62 65 68 61 76 69 6f 72 2e 20 20 46  red behavior.  F
e220: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 20 31 3a  or example, a 1:
e230: 31 20 72 65 6c 61 74 69 6f 6e 73 68 69 70 20 77  1 relationship w
e240: 69 74 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ith..           
e250: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
e260: 20 61 6e 6f 74 68 65 72 20 74 61 62 6c 65 2c 20   another table, 
e270: 77 68 65 72 65 20 74 68 65 20 6f 74 68 65 72 20  where the other 
e280: 74 61 62 6c 65 20 69 73 20 61 75 74 6f 69 6e 63  table is autoinc
e290: 72 65 6d 65 6e 74 2c 20 62 75 74 20 74 68 69 73  rement, but this
e2a0: 20 6f 6e 65 20 69 73 20 6e 6f 74 2c 20 61 6e 64   one is not, and
e2b0: 20 75 73 65 73 20 74 68 65 20 72 6f 77 69 64 20   uses the rowid 
e2c0: 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 2e 0d  from the other..
e2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e2e0: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 49 74 20     //        It 
e2f0: 69 73 20 73 61 66 65 72 20 74 6f 20 6f 6e 6c 79  is safer to only
e300: 20 73 65 74 20 41 75 74 6f 69 6e 63 72 65 6d 65   set Autoincreme
e310: 6e 74 20 6f 6e 20 74 61 62 6c 65 73 20 77 68 65  nt on tables whe
e320: 72 65 20 77 65 27 72 65 20 53 55 52 45 20 74 68  re we're SURE th
e330: 65 20 75 73 65 72 20 73 70 65 63 69 66 69 65 64  e user specified
e340: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20   AUTOINCREMENT, 
e350: 65 76 65 6e 20 69 66 20 69 74 73 20 61 20 72 6f  even if its a ro
e360: 77 69 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 0d 0a 20  wid column..... 
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e380: 20 69 66 20 28 74 62 6c 49 6e 64 65 78 43 6f 6c   if (tblIndexCol
e390: 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74 20  umns.Rows.Count 
e3a0: 3d 3d 20 31 20 26 26 20 28 62 6f 6f 6c 29 72 6f  == 1 && (bool)ro
e3b0: 77 49 6e 64 65 78 65 73 5b 22 50 52 49 4d 41 52  wIndexes["PRIMAR
e3c0: 59 5f 4b 45 59 22 5d 20 3d 3d 20 74 72 75 65 20  Y_KEY"] == true 
e3d0: 26 26 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  && String.IsNull
e3e0: 4f 72 45 6d 70 74 79 28 64 61 74 61 54 79 70 65  OrEmpty(dataType
e3f0: 29 20 3d 3d 20 66 61 6c 73 65 20 26 26 0d 0a 20  ) == false &&.. 
e400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e410: 20 20 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72     String.Compar
e420: 65 28 64 61 74 61 54 79 70 65 2c 20 22 69 6e 74  e(dataType, "int
e430: 65 67 65 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d  eger", StringCom
e440: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
e450: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
e460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e470: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e480: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 72             //  r
e490: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
e4a0: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41  tionalColumn.IsA
e4b0: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20  utoIncrement] = 
e4c0: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
e4d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
e4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4f0: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
e500: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e510: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
e520: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e530: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
e540: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
e550: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74  sNullOrEmpty(dat
e560: 61 54 79 70 65 29 29 0d 0a 20 20 20 20 20 20 20  aType))..       
e570: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e580: 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61    TypeAffinity a
e590: 66 66 69 6e 20 3d 20 54 79 70 65 41 66 66 69 6e  ffin = TypeAffin
e5a0: 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65  ity.Uninitialize
e5b0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
e5c0: 64 61 74 61 54 79 70 65 20 3d 20 5f 61 63 74 69  dataType = _acti
e5d0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
e5e0: 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 5f 61 63 74  .ColumnType(_act
e5f0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e 2c  iveStatement, n,
e600: 20 72 65 66 20 61 66 66 69 6e 29 3b 0d 0a 20 20   ref affin);..  
e610: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
e620: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
e630: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
e640: 64 61 74 61 54 79 70 65 29 20 3d 3d 20 66 61 6c  dataType) == fal
e650: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
e660: 20 72 6f 77 5b 22 44 61 74 61 54 79 70 65 4e 61   row["DataTypeNa
e670: 6d 65 22 5d 20 3d 20 64 61 74 61 54 79 70 65 3b  me"] = dataType;
e680: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
e690: 20 20 20 20 20 74 62 6c 2e 52 6f 77 73 2e 41 64       tbl.Rows.Ad
e6a0: 64 28 72 6f 77 29 3b 0d 0a 20 20 20 20 20 20 7d  d(row);..      }
e6b0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 6b  ....      if (_k
e6c0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
e6d0: 0a 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66  .        _keyInf
e6e0: 6f 2e 41 70 70 65 6e 64 53 63 68 65 6d 61 54 61  o.AppendSchemaTa
e6f0: 62 6c 65 28 74 62 6c 29 3b 0d 0a 0d 0a 20 20 20  ble(tbl);....   
e700: 20 20 20 74 62 6c 2e 41 63 63 65 70 74 43 68 61     tbl.AcceptCha
e710: 6e 67 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 74  nges();..      t
e720: 62 6c 2e 45 6e 64 4c 6f 61 64 44 61 74 61 28 29  bl.EndLoadData()
e730: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
e740: 6e 20 74 62 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  n tbl;..    }...
e750: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
e760: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  y>..    /// Retr
e770: 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  ieves the column
e780: 20 61 73 20 61 20 73 74 72 69 6e 67 0d 0a 20 20   as a string..  
e790: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e7a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
e7b0: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
e7c0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
e7d0: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
e7e0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72  /// <returns>str
e7f0: 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ing</returns>.. 
e800: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
e810: 64 65 20 73 74 72 69 6e 67 20 47 65 74 53 74 72  de string GetStr
e820: 69 6e 67 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ing(int i)..    
e830: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
e840: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
e850: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
e860: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
e870: 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51  if ((_flags & SQ
e880: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
e890: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
e8a0: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
e8b0: 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  cks) == SQLiteCo
e8c0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
e8d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
e8e0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a  alueCallbacks)..
e8f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e900: 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74         SQLiteDat
e910: 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c  aReaderValue val
e920: 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44  ue = new SQLiteD
e930: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29  ataReaderValue()
e940: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
e950: 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d  ool complete;...
e960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76  .            Inv
e970: 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  okeReadValueCall
e980: 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69  back(i, new SQLi
e990: 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74  teReadValueEvent
e9a0: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
e9b0: 20 20 20 20 20 20 20 22 47 65 74 53 74 72 69 6e         "GetStrin
e9c0: 67 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29  g", null, value)
e9d0: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
e9e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e9f0: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
ea00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
ea10: 65 74 75 72 6e 20 76 61 6c 75 65 2e 53 74 72 69  eturn value.Stri
ea20: 6e 67 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  ngValue;..      
ea30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
ea40: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
ea50: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
ea60: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
ea70: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
ea80: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
ea90: 66 6f 2e 47 65 74 53 74 72 69 6e 67 28 69 20 2d  fo.GetString(i -
eaa0: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
eab0: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
eac0: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
ead0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
eae0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72  ctionFlags.NoVer
eaf0: 69 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29  ifyTextAffinity)
eb00: 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   != SQLiteConnec
eb10: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69  tionFlags.NoVeri
eb20: 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29 0d  fyTextAffinity).
eb30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
eb40: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
eb50: 65 2e 53 74 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20  e.String);....  
eb60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
eb70: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
eb80: 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69  ql.GetText(_acti
eb90: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
eba0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
ebb0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
ebc0: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
ebd0: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e  the column as an
ebe0: 20 6f 62 6a 65 63 74 20 63 6f 72 72 65 73 70 6f   object correspo
ebf0: 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 75 6e 64  nding to the und
ec00: 65 72 6c 79 69 6e 67 20 64 61 74 61 74 79 70 65  erlying datatype
ec10: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a   of the column..
ec20: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
ec30: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
ec40: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
ec50: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
ec60: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
ec70: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 6f    /// <returns>o
ec80: 62 6a 65 63 74 3c 2f 72 65 74 75 72 6e 73 3e 0d  bject</returns>.
ec90: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
eca0: 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56  ride object GetV
ecb0: 61 6c 75 65 28 69 6e 74 20 69 29 0d 0a 20 20 20  alue(int i)..   
ecc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
ecd0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
ece0: 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47        VerifyForG
ecf0: 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  et();....       
ed00: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
ed10: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
ed20: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
ed30: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
ed40: 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43  acks) == SQLiteC
ed50: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
ed60: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
ed70: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d  ValueCallbacks).
ed80: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
ed90: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
eda0: 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61  taReaderValue va
edb0: 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  lue = new SQLite
edc0: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28  DataReaderValue(
edd0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
ede0: 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a  bool complete;..
edf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
ee00: 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c  vokeReadValueCal
ee10: 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c  lback(i, new SQL
ee20: 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e  iteReadValueEven
ee30: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
ee40: 20 20 20 20 20 20 20 20 22 47 65 74 56 61 6c 75          "GetValu
ee50: 65 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29  e", null, value)
ee60: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
ee70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ee80: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
ee90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
eea0: 65 74 75 72 6e 20 76 61 6c 75 65 2e 56 61 6c 75  eturn value.Valu
eeb0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
eec0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
eed0: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
eee0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
eef0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
ef00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
ef10: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
ef20: 56 61 6c 75 65 28 69 20 2d 20 50 72 69 76 61 74  Value(i - Privat
ef30: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
ef40: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
ef50: 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 20 3d  SQLiteType typ =
ef60: 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 5f   GetSQLiteType(_
ef70: 66 6c 61 67 73 2c 20 69 29 3b 0d 0a 0d 0a 20 20  flags, i);....  
ef80: 20 20 20 20 20 20 69 66 20 28 28 28 5f 66 6c 61        if (((_fla
ef90: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
efa0: 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63  ctionFlags.Detec
efb0: 74 54 65 78 74 41 66 66 69 6e 69 74 79 29 20 3d  tTextAffinity) =
efc0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
efd0: 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63 74 54 65  onFlags.DetectTe
efe0: 78 74 41 66 66 69 6e 69 74 79 29 20 26 26 0d 0a  xtAffinity) &&..
eff0: 20 20 20 20 20 20 20 20 20 20 20 20 28 28 74 79              ((ty
f000: 70 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 74  p == null) || (t
f010: 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54  yp.Affinity == T
f020: 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74  ypeAffinity.Text
f030: 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  )))..        {..
f040: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 20              typ 
f050: 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  = GetSQLiteType(
f060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f070: 20 20 74 79 70 2c 20 5f 61 63 74 69 76 65 53 74    typ, _activeSt
f080: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
f090: 54 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74  Text(_activeStat
f0a0: 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20  ement, i));..   
f0b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
f0c0: 65 6c 73 65 20 69 66 20 28 28 28 5f 66 6c 61 67  else if (((_flag
f0d0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
f0e0: 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63 74  tionFlags.Detect
f0f0: 53 74 72 69 6e 67 54 79 70 65 29 20 3d 3d 20 53  StringType) == S
f100: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
f110: 6c 61 67 73 2e 44 65 74 65 63 74 53 74 72 69 6e  lags.DetectStrin
f120: 67 54 79 70 65 29 20 26 26 0d 0a 20 20 20 20 20  gType) &&..     
f130: 20 20 20 20 20 20 20 28 28 74 79 70 20 3d 3d 20         ((typ == 
f140: 6e 75 6c 6c 29 20 7c 7c 20 53 51 4c 69 74 65 43  null) || SQLiteC
f150: 6f 6e 76 65 72 74 2e 49 73 53 74 72 69 6e 67 44  onvert.IsStringD
f160: 62 54 79 70 65 28 74 79 70 2e 54 79 70 65 29 29  bType(typ.Type))
f170: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
f180: 20 20 20 20 20 20 20 20 20 20 74 79 70 20 3d 20            typ = 
f190: 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 0d 0a  GetSQLiteType(..
f1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1b0: 74 79 70 2c 20 5f 61 63 74 69 76 65 53 74 61 74  typ, _activeStat
f1c0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65  ement._sql.GetTe
f1d0: 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  xt(_activeStatem
f1e0: 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 20  ent, i));..     
f1f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f200: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
f210: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
f220: 56 61 6c 75 65 28 5f 61 63 74 69 76 65 53 74 61  Value(_activeSta
f230: 74 65 6d 65 6e 74 2c 20 5f 66 6c 61 67 73 2c 20  tement, _flags, 
f240: 69 2c 20 74 79 70 29 3b 0d 0a 20 20 20 20 7d 0d  i, typ);..    }.
f250: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
f260: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
f270: 74 72 65 69 76 65 73 20 74 68 65 20 76 61 6c 75  treives the valu
f280: 65 73 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 63  es of multiple c
f290: 6f 6c 75 6d 6e 73 2c 20 75 70 20 74 6f 20 74 68  olumns, up to th
f2a0: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 73 75  e size of the su
f2b0: 70 70 6c 69 65 64 20 61 72 72 61 79 0d 0a 20 20  pplied array..  
f2c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
f2d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
f2e0: 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 54   name="values">T
f2f0: 68 65 20 61 72 72 61 79 20 74 6f 20 66 69 6c 6c  he array to fill
f300: 20 77 69 74 68 20 76 61 6c 75 65 73 20 66 72 6f   with values fro
f310: 6d 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  m the columns in
f320: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73   the current res
f330: 75 6c 74 73 65 74 3c 2f 70 61 72 61 6d 3e 0d 0a  ultset</param>..
f340: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
f350: 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  >The number of c
f360: 6f 6c 75 6d 6e 73 20 72 65 74 72 69 65 76 65 64  olumns retrieved
f370: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
f380: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
f390: 69 6e 74 20 47 65 74 56 61 6c 75 65 73 28 6f 62  int GetValues(ob
f3a0: 6a 65 63 74 5b 5d 20 76 61 6c 75 65 73 29 0d 0a  ject[] values)..
f3b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65      {..      Che
f3c0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
f3d0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 4d 61 78 20  .      int nMax 
f3e0: 3d 20 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20  = FieldCount;.. 
f3f0: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 73 2e       if (values.
f400: 4c 65 6e 67 74 68 20 3c 20 6e 4d 61 78 29 20 6e  Length < nMax) n
f410: 4d 61 78 20 3d 20 76 61 6c 75 65 73 2e 4c 65 6e  Max = values.Len
f420: 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  gth;....      fo
f430: 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20  r (int n = 0; n 
f440: 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20  < nMax; n++)..  
f450: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 76      {..        v
f460: 61 6c 75 65 73 5b 6e 5d 20 3d 20 47 65 74 56 61  alues[n] = GetVa
f470: 6c 75 65 28 6e 29 3b 0d 0a 20 20 20 20 20 20 7d  lue(n);..      }
f480: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
f490: 20 6e 4d 61 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d   nMax;..    }...
f4a0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
f4b0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
f4c0: 72 6e 73 20 61 20 63 6f 6c 6c 65 63 74 69 6f 6e  rns a collection
f4d0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20   containing all 
f4e0: 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  the column names
f4f0: 20 61 6e 64 20 76 61 6c 75 65 73 20 66 6f 72 20   and values for 
f500: 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72  the..    /// cur
f510: 72 65 6e 74 20 72 6f 77 20 6f 66 20 64 61 74 61  rent row of data
f520: 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
f530: 72 65 73 75 6c 74 73 65 74 2c 20 69 66 20 61 6e  resultset, if an
f540: 79 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  y.  If there is 
f550: 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72  no..    /// curr
f560: 65 6e 74 20 72 6f 77 20 6f 72 20 6e 6f 20 63 75  ent row or no cu
f570: 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 2c  rrent resultset,
f580: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 6d 61   an exception ma
f590: 79 20 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20  y be thrown...  
f5a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
f5b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
f5c0: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
f5d0: 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 63 6f 6e 74   collection cont
f5e0: 61 69 6e 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  aining the colum
f5f0: 6e 20 6e 61 6d 65 20 61 6e 64 20 76 61 6c 75 65  n name and value
f600: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72   information for
f610: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75   the..    /// cu
f620: 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 64 61 74  rrent row of dat
f630: 61 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  a in the current
f640: 20 72 65 73 75 6c 74 73 65 74 20 6f 72 20 6e 75   resultset or nu
f650: 6c 6c 20 69 66 20 74 68 69 73 20 69 6e 66 6f 72  ll if this infor
f660: 6d 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20  mation..    /// 
f670: 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e  cannot be obtain
f680: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ed...    /// </r
f690: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
f6a0: 6c 69 63 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c  lic NameValueCol
f6b0: 6c 65 63 74 69 6f 6e 20 47 65 74 56 61 6c 75 65  lection GetValue
f6c0: 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  s()..    {..    
f6d0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
f6e0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
f6f0: 69 66 20 28 28 5f 61 63 74 69 76 65 53 74 61 74  if ((_activeStat
f700: 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ement == null) |
f710: 7c 20 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  | (_activeStatem
f720: 65 6e 74 2e 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  ent._sql == null
f730: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
f740: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
f750: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
f760: 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion();....      
f770: 20 20 69 6e 74 20 6e 4d 61 78 20 3d 20 50 72 69    int nMax = Pri
f780: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
f790: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20  Count;..        
f7a0: 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63 74  NameValueCollect
f7b0: 69 6f 6e 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  ion result = new
f7c0: 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63   NameValueCollec
f7d0: 74 69 6f 6e 28 6e 4d 61 78 29 3b 0d 0a 0d 0a 20  tion(nMax);.... 
f7e0: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
f7f0: 6e 20 3d 20 30 3b 20 6e 20 3c 20 6e 4d 61 78 3b  n = 0; n < nMax;
f800: 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 7b   n++)..        {
f810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
f820: 72 69 6e 67 20 6e 61 6d 65 20 3d 20 5f 61 63 74  ring name = _act
f830: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
f840: 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63  l.ColumnName(_ac
f850: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e  tiveStatement, n
f860: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
f870: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 3d 20 5f  string value = _
f880: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
f890: 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63  _sql.GetText(_ac
f8a0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e  tiveStatement, n
f8b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f8c0: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 6e 61 6d    result.Add(nam
f8d0: 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  e, value);..    
f8e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
f8f0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
f900: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
f910: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
f920: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75   /// Returns Tru
f930: 65 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 73  e if the results
f940: 65 74 20 68 61 73 20 72 6f 77 73 20 74 68 61 74  et has rows that
f950: 20 63 61 6e 20 62 65 20 66 65 74 63 68 65 64 0d   can be fetched.
f960: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
f970: 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
f980: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 48 61  override bool Ha
f990: 73 52 6f 77 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  sRows..    {..  
f9a0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
f9b0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
f9c0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
f9d0: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
f9e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
f9f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
fa00: 45 3a 20 49 66 20 74 68 65 20 22 73 74 69 63 6b  E: If the "stick
fa10: 79 22 20 66 6c 61 67 20 68 61 73 20 62 65 65 6e  y" flag has been
fa20: 20 73 65 74 2c 20 75 73 65 20 74 68 65 20 6e 65   set, use the ne
fa30: 77 20 62 65 68 61 76 69 6f 72 2c 0d 0a 20 20 20  w behavior,..   
fa40: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77 68       //       wh
fa50: 69 63 68 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ich returns non-
fa60: 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20 77 65  zero if there we
fa70: 72 65 20 65 76 65 72 20 61 6e 79 20 72 6f 77 73  re ever any rows
fa80: 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   in..        // 
fa90: 20 20 20 20 20 20 74 68 65 20 61 73 73 6f 63 69        the associ
faa0: 61 74 65 64 20 72 65 73 75 6c 74 20 73 65 74 73  ated result sets
fab0: 2e 20 20 47 65 6e 65 72 61 6c 6c 79 2c 20 74 68  .  Generally, th
fac0: 69 73 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 0d  is flag is only.
fad0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
fae0: 20 20 75 73 65 66 75 6c 20 77 68 65 6e 20 69 74    useful when it
faf0: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f   is necessary to
fb00: 20 72 65 74 61 69 6e 20 63 6f 6d 70 61 74 69 62   retain compatib
fb10: 69 6c 69 74 79 20 77 69 74 68 0d 0a 20 20 20 20  ility with..    
fb20: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68      //       oth
fb30: 65 72 20 41 44 4f 2e 4e 45 54 20 70 72 6f 76 69  er ADO.NET provi
fb40: 64 65 72 73 20 74 68 61 74 20 75 73 65 20 74 68  ders that use th
fb50: 65 73 65 20 73 61 6d 65 20 73 65 6d 61 6e 74 69  ese same semanti
fb60: 63 73 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  cs for..        
fb70: 2f 2f 20 20 20 20 20 20 20 74 68 65 20 48 61 73  //       the Has
fb80: 52 6f 77 73 20 70 72 6f 70 65 72 74 79 2e 0d 0a  Rows property...
fb90: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
fba0: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
fbb0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
fbc0: 6f 6e 46 6c 61 67 73 2e 53 74 69 63 6b 79 48 61  onFlags.StickyHa
fbd0: 73 52 6f 77 73 29 20 3d 3d 20 53 51 4c 69 74 65  sRows) == SQLite
fbe0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
fbf0: 53 74 69 63 6b 79 48 61 73 52 6f 77 73 29 0d 0a  StickyHasRows)..
fc00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
fc10: 20 28 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65   ((_readingState
fc20: 20 21 3d 20 31 29 20 7c 7c 20 28 5f 73 74 65 70   != 1) || (_step
fc30: 43 6f 75 6e 74 20 3e 20 30 29 29 3b 0d 0a 0d 0a  Count > 0));....
fc40: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
fc50: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
fc60: 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  s is the default
fc70: 20 62 65 68 61 76 69 6f 72 2e 20 20 49 74 20 72   behavior.  It r
fc80: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20  eturns non-zero 
fc90: 6f 6e 6c 79 20 69 66 0d 0a 20 20 20 20 20 20 20  only if..       
fca0: 20 2f 2f 20 20 20 20 20 20 20 6d 6f 72 65 20 72   //       more r
fcb0: 6f 77 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ows are availabl
fcc0: 65 20 28 69 2e 65 2e 20 61 20 63 61 6c 6c 20 74  e (i.e. a call t
fcd0: 6f 20 74 68 65 20 52 65 61 64 20 6d 65 74 68 6f  o the Read metho
fce0: 64 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  d is..        //
fcf0: 20 20 20 20 20 20 20 65 78 70 65 63 74 65 64 20         expected 
fd00: 74 6f 20 73 75 63 63 65 65 64 29 2e 20 20 50 72  to succeed).  Pr
fd10: 69 6f 72 20 74 6f 20 74 68 65 20 69 6e 74 72 6f  ior to the intro
fd20: 64 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 0d 0a  duction of the..
fd30: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
fd40: 20 22 73 74 69 63 6b 79 22 20 66 6c 61 67 2c 20   "sticky" flag, 
fd50: 74 68 69 73 20 69 73 20 68 6f 77 20 74 68 69 73  this is how this
fd60: 20 70 72 6f 70 65 72 74 79 20 68 61 73 20 61 6c   property has al
fd70: 77 61 79 73 20 77 6f 72 6b 65 64 2e 0d 0a 20 20  ways worked...  
fd80: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
fd90: 20 20 72 65 74 75 72 6e 20 28 5f 72 65 61 64 69    return (_readi
fda0: 6e 67 53 74 61 74 65 20 21 3d 20 31 29 3b 0d 0a  ngState != 1);..
fdb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
fdc0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
fdd0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
fde0: 75 72 6e 73 20 54 72 75 65 20 69 66 20 74 68 65  urns True if the
fdf0: 20 64 61 74 61 20 72 65 61 64 65 72 20 69 73 20   data reader is 
fe00: 63 6c 6f 73 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  closed..    /// 
fe10: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
fe20: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
fe30: 62 6f 6f 6c 20 49 73 43 6c 6f 73 65 64 0d 0a 20  bool IsClosed.. 
fe40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20     {..      get 
fe50: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
fe60: 29 3b 20 72 65 74 75 72 6e 20 28 5f 63 6f 6d 6d  ); return (_comm
fe70: 61 6e 64 20 3d 3d 20 6e 75 6c 6c 29 3b 20 7d 0d  and == null); }.
fe80: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
fe90: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
fea0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75   /// Returns Tru
feb0: 65 20 69 66 20 74 68 65 20 73 70 65 63 69 66 69  e if the specifi
fec0: 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 75 6c  ed column is nul
fed0: 6c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  l..    /// </sum
fee0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
fef0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
ff00: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
ff10: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
ff20: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
ff30: 73 3e 54 72 75 65 20 6f 72 20 46 61 6c 73 65 3c  s>True or False<
ff40: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
ff50: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62  ublic override b
ff60: 6f 6f 6c 20 49 73 44 42 4e 75 6c 6c 28 69 6e 74  ool IsDBNull(int
ff70: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
ff80: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
ff90: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
ffa0: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
ffb0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
ffc0: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
ffd0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
ffe0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
fff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
10000 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 49 73 44  urn _keyInfo.IsD
10010 42 4e 75 6c 6c 28 69 20 2d 20 50 72 69 76 61 74  BNull(i - Privat
10020 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
10030 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
10040 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
10050 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4e  atement._sql.IsN
10060 75 6c 6c 28 5f 61 63 74 69 76 65 53 74 61 74 65  ull(_activeState
10070 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d  ment, i);..    }
10080 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
10090 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d  mary>..    /// M
100a0 6f 76 65 73 20 74 6f 20 74 68 65 20 6e 65 78 74  oves to the next
100b0 20 72 65 73 75 6c 74 73 65 74 20 69 6e 20 6d 75   resultset in mu
100c0 6c 74 69 70 6c 65 20 72 6f 77 2d 72 65 74 75 72  ltiple row-retur
100d0 6e 69 6e 67 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ning SQL command
100e0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
100f0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
10100 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20  returns>True if 
10110 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  the command was 
10120 73 75 63 63 65 73 73 66 75 6c 20 61 6e 64 20 61  successful and a
10130 20 6e 65 77 20 72 65 73 75 6c 74 73 65 74 20 69   new resultset i
10140 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 46 61 6c  s available, Fal
10150 73 65 20 6f 74 68 65 72 77 69 73 65 2e 3c 2f 72  se otherwise.</r
10160 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
10170 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
10180 6c 20 4e 65 78 74 52 65 73 75 6c 74 28 29 0d 0a  l NextResult()..
10190 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65      {..      Che
101a0 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
101b0 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64       CheckClosed
101c0 28 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  ();..      if (_
101d0 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29  throwOnDisposed)
101e0 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43   SQLiteCommand.C
101f0 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d  heck(_command);.
10200 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53  ...      SQLiteS
10210 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 20 3d 20  tatement stmt = 
10220 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74  null;..      int
10230 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20   fieldCount;..  
10240 20 20 20 20 62 6f 6f 6c 20 73 63 68 65 6d 61 4f      bool schemaO
10250 6e 6c 79 20 3d 20 28 28 5f 63 6f 6d 6d 61 6e 64  nly = ((_command
10260 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61  Behavior & Comma
10270 6e 64 42 65 68 61 76 69 6f 72 2e 53 63 68 65 6d  ndBehavior.Schem
10280 61 4f 6e 6c 79 29 20 21 3d 20 30 29 3b 0d 0a 0d  aOnly) != 0);...
10290 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 74 72  .      while (tr
102a0 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ue)..      {..  
102b0 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d        if (stmt =
102c0 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76  = null && _activ
102d0 65 53 74 61 74 65 6d 65 6e 74 20 21 3d 20 6e 75  eStatement != nu
102e0 6c 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74 61  ll && _activeSta
102f0 74 65 6d 65 6e 74 2e 5f 73 71 6c 20 21 3d 20 6e  tement._sql != n
10300 75 6c 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74  ull && _activeSt
10310 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4f  atement._sql.IsO
10320 70 65 6e 28 29 29 0d 0a 20 20 20 20 20 20 20 20  pen())..        
10330 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
10340 52 65 73 65 74 20 74 68 65 20 70 72 65 76 69 6f  Reset the previo
10350 75 73 6c 79 2d 65 78 65 63 75 74 65 64 20 73 74  usly-executed st
10360 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20  atement..       
10370 20 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e     if (!schemaOn
10380 6c 79 29 20 5f 61 63 74 69 76 65 53 74 61 74 65  ly) _activeState
10390 6d 65 6e 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28  ment._sql.Reset(
103a0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
103b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
103c0 2f 2f 20 49 66 20 77 65 27 72 65 20 6f 6e 6c 79  // If we're only
103d0 20 73 75 70 70 6f 73 65 64 20 74 6f 20 72 65 74   supposed to ret
103e0 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  urn a single row
103f0 73 65 74 2c 20 73 74 65 70 20 74 68 72 6f 75 67  set, step throug
10400 68 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20  h all remaining 
10410 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 63 65 20  statements once 
10420 75 6e 74 69 6c 0d 0a 20 20 20 20 20 20 20 20 20  until..         
10430 20 2f 2f 20 74 68 65 79 20 61 72 65 20 61 6c 6c   // they are all
10440 20 64 6f 6e 65 20 61 6e 64 20 72 65 74 75 72 6e   done and return
10450 20 66 61 6c 73 65 20 74 6f 20 69 6e 64 69 63 61   false to indica
10460 74 65 20 6e 6f 20 6d 6f 72 65 20 72 65 73 75 6c  te no more resul
10470 74 73 65 74 73 20 65 78 69 73 74 2e 0d 0a 20 20  tsets exist...  
10480 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f          if ((_co
10490 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20  mmandBehavior & 
104a0 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e  CommandBehavior.
104b0 53 69 6e 67 6c 65 52 65 73 75 6c 74 29 20 21 3d  SingleResult) !=
104c0 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b   0)..          {
104d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
104e0 72 20 28 3b 20 3b 20 29 0d 0a 20 20 20 20 20 20  r (; ; )..      
104f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10500 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20 5f 63         stmt = _c
10510 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61 74 65 6d  ommand.GetStatem
10520 65 6e 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ent(_activeState
10530 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31 29 3b 0d  mentIndex + 1);.
10540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
10550 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c 29  f (stmt == null)
10560 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
10570 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74         _activeSt
10580 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b 0d  atementIndex++;.
10590 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
105a0 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79   if (!schemaOnly
105b0 20 26 26 20 73 74 6d 74 2e 5f 73 71 6c 2e 53 74   && stmt._sql.St
105c0 65 70 28 73 74 6d 74 29 29 20 5f 73 74 65 70 43  ep(stmt)) _stepC
105d0 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  ount++;..       
105e0 20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 2e         if (stmt.
105f0 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74  _sql.ColumnCount
10600 28 73 74 6d 74 29 20 3d 3d 20 30 29 0d 0a 20 20  (stmt) == 0)..  
10610 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10630 6e 74 20 63 68 61 6e 67 65 73 20 3d 20 30 3b 0d  nt changes = 0;.
10640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10650 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 20 3d   bool readOnly =
10660 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
10670 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d           if (stm
10680 74 2e 54 72 79 47 65 74 43 68 61 6e 67 65 73 28  t.TryGetChanges(
10690 72 65 66 20 63 68 61 6e 67 65 73 2c 20 72 65 66  ref changes, ref
106a0 20 72 65 61 64 4f 6e 6c 79 29 29 0d 0a 20 20 20   readOnly))..   
106b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
106c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106d0 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29    if (!readOnly)
106e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
106f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10700 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
10710 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d 3d 20  rowsAffected == 
10720 2d 31 29 20 5f 72 6f 77 73 41 66 66 65 63 74 65  -1) _rowsAffecte
10730 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  d = 0;..        
10740 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 6f 77              _row
10750 73 41 66 66 65 63 74 65 64 20 2b 3d 20 63 68 61  sAffected += cha
10760 6e 67 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  nges;..         
10770 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10780 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
10790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
107a0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
107b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
107c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
107d0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
107e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
107f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
10800 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
10810 73 63 68 65 6d 61 4f 6e 6c 79 29 20 73 74 6d 74  schemaOnly) stmt
10820 2e 5f 73 71 6c 2e 52 65 73 65 74 28 73 74 6d 74  ._sql.Reset(stmt
10830 29 3b 20 2f 2f 20 47 6f 74 74 61 20 72 65 73 65  ); // Gotta rese
10840 74 20 61 66 74 65 72 20 65 76 65 72 79 20 73 74  t after every st
10850 65 70 20 74 6f 20 72 65 6c 65 61 73 65 20 61 6e  ep to release an
10860 79 20 6c 6f 63 6b 73 20 61 6e 64 20 73 75 63 68  y locks and such
10870 21 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  !..            }
10880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
10890 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
108a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
108b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
108c0 2f 20 47 65 74 20 74 68 65 20 6e 65 78 74 20 73  / Get the next s
108d0 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78 65 63  tatement to exec
108e0 75 74 65 0d 0a 20 20 20 20 20 20 20 20 73 74 6d  ute..        stm
108f0 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74  t = _command.Get
10900 53 74 61 74 65 6d 65 6e 74 28 5f 61 63 74 69 76  Statement(_activ
10910 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 20  eStatementIndex 
10920 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  + 1);....       
10930 20 2f 2f 20 49 66 20 77 65 27 76 65 20 72 65 61   // If we've rea
10940 63 68 65 64 20 74 68 65 20 65 6e 64 20 6f 66 20  ched the end of 
10950 74 68 65 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  the statements, 
10960 72 65 74 75 72 6e 20 66 61 6c 73 65 2c 20 6e 6f  return false, no
10970 20 6d 6f 72 65 20 72 65 73 75 6c 74 73 65 74 73   more resultsets
10980 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74  ..        if (st
10990 6d 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  mt == null)..   
109a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
109b0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
109c0 2f 2f 20 49 66 20 77 65 20 77 65 72 65 20 6f 6e  // If we were on
109d0 20 61 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c   a current resul
109e0 74 73 65 74 2c 20 73 65 74 20 74 68 65 20 73 74  tset, set the st
109f0 61 74 65 20 74 6f 20 22 64 6f 6e 65 20 72 65 61  ate to "done rea
10a00 64 69 6e 67 22 20 66 6f 72 20 69 74 0d 0a 20 20  ding" for it..  
10a10 20 20 20 20 20 20 69 66 20 28 5f 72 65 61 64 69        if (_readi
10a20 6e 67 53 74 61 74 65 20 3c 20 31 29 0d 0a 20 20  ngState < 1)..  
10a30 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67          _reading
10a40 53 74 61 74 65 20 3d 20 31 3b 0d 0a 0d 0a 20 20  State = 1;....  
10a50 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
10a60 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b 0d 0a  tementIndex++;..
10a70 0d 0a 20 20 20 20 20 20 20 20 66 69 65 6c 64 43  ..        fieldC
10a80 6f 75 6e 74 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ount = stmt._sql
10a90 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d  .ColumnCount(stm
10aa0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  t);....        /
10ab0 2f 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  / If the stateme
10ac0 6e 74 20 69 73 20 6e 6f 74 20 61 20 73 65 6c 65  nt is not a sele
10ad0 63 74 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  ct statement or 
10ae0 77 65 27 72 65 20 6e 6f 74 20 72 65 74 72 69 65  we're not retrie
10af0 76 69 6e 67 20 73 63 68 65 6d 61 20 6f 6e 6c 79  ving schema only
10b00 2c 20 74 68 65 6e 20 70 65 72 66 6f 72 6d 20 74  , then perform t
10b10 68 65 20 69 6e 69 74 69 61 6c 20 73 74 65 70 0d  he initial step.
10b20 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 73 63  .        if (!sc
10b30 68 65 6d 61 4f 6e 6c 79 20 7c 7c 20 28 66 69 65  hemaOnly || (fie
10b40 6c 64 43 6f 75 6e 74 20 3d 3d 20 30 29 29 0d 0a  ldCount == 0))..
10b50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10b60 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61       if (!schema
10b70 4f 6e 6c 79 20 26 26 20 73 74 6d 74 2e 5f 73 71  Only && stmt._sq
10b80 6c 2e 53 74 65 70 28 73 74 6d 74 29 29 0d 0a 20  l.Step(stmt)).. 
10b90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10ba0 20 20 20 20 20 20 20 20 5f 73 74 65 70 43 6f 75          _stepCou
10bb0 6e 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  nt++;..         
10bc0 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65     _readingState
10bd0 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20 20   = -1;..        
10be0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65    }..          e
10bf0 6c 73 65 20 69 66 20 28 66 69 65 6c 64 43 6f 75  lse if (fieldCou
10c00 6e 74 20 3d 3d 20 30 29 20 2f 2f 20 4e 6f 20 72  nt == 0) // No r
10c10 6f 77 73 20 72 65 74 75 72 6e 65 64 2c 20 69 66  ows returned, if
10c20 20 66 69 65 6c 64 43 6f 75 6e 74 20 69 73 20 7a   fieldCount is z
10c30 65 72 6f 2c 20 73 6b 69 70 20 74 6f 20 74 68 65  ero, skip to the
10c40 20 6e 65 78 74 20 73 74 61 74 65 6d 65 6e 74 0d   next statement.
10c50 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
10c60 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 68            int ch
10c70 61 6e 67 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20  anges = 0;..    
10c80 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
10c90 64 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  dOnly = false;..
10ca0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10cb0 73 74 6d 74 2e 54 72 79 47 65 74 43 68 61 6e 67  stmt.TryGetChang
10cc0 65 73 28 72 65 66 20 63 68 61 6e 67 65 73 2c 20  es(ref changes, 
10cd0 72 65 66 20 72 65 61 64 4f 6e 6c 79 29 29 0d 0a  ref readOnly))..
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10d00 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20  (!readOnly)..   
10d10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
10d30 20 28 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20   (_rowsAffected 
10d40 3d 3d 20 2d 31 29 20 5f 72 6f 77 73 41 66 66 65  == -1) _rowsAffe
10d50 63 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  cted = 0;..     
10d60 20 20 20 20 20 20 20 20 20 20 20 5f 72 6f 77 73             _rows
10d70 41 66 66 65 63 74 65 64 20 2b 3d 20 63 68 61 6e  Affected += chan
10d80 67 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ges;..          
10d90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10da0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10db0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
10dc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10dd0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
10de0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10df0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  }..            i
10e00 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 29 20  f (!schemaOnly) 
10e10 73 74 6d 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28  stmt._sql.Reset(
10e20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  stmt);..        
10e30 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 20 2f 2f      continue; //
10e40 20 53 6b 69 70 20 74 68 69 73 20 63 6f 6d 6d 61   Skip this comma
10e50 6e 64 20 61 6e 64 20 6d 6f 76 65 20 74 6f 20 74  nd and move to t
10e60 68 65 20 6e 65 78 74 2c 20 69 74 20 77 61 73 20  he next, it was 
10e70 6e 6f 74 20 61 20 72 6f 77 2d 72 65 74 75 72 6e  not a row-return
10e80 69 6e 67 20 72 65 73 75 6c 74 73 65 74 0d 0a 20  ing resultset.. 
10e90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10ea0 20 20 20 20 20 20 65 6c 73 65 20 2f 2f 20 4e 6f        else // No
10eb0 20 72 6f 77 73 2c 20 66 69 65 6c 64 43 6f 75 6e   rows, fieldCoun
10ec0 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 73 6f  t is non-zero so
10ed0 20 73 74 6f 70 20 68 65 72 65 0d 0a 20 20 20 20   stop here..    
10ee0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10ef0 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61       _readingSta
10f00 74 65 20 3d 20 31 3b 20 2f 2f 20 54 68 69 73 20  te = 1; // This 
10f10 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 65 64  command returned
10f20 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20 6e 6f 20   columns but no 
10f30 72 6f 77 73 2c 20 73 6f 20 72 65 74 75 72 6e 20  rows, so return 
10f40 74 72 75 65 2c 20 62 75 74 20 48 61 73 52 6f 77  true, but HasRow
10f50 73 20 3d 20 66 61 6c 73 65 20 61 6e 64 20 52 65  s = false and Re
10f60 61 64 28 29 20 72 65 74 75 72 6e 73 20 66 61 6c  ad() returns fal
10f70 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  se..          }.
10f80 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
10f90 20 20 20 20 20 20 2f 2f 20 41 68 68 2c 20 77 65        // Ahh, we
10fa0 20 66 6f 75 6e 64 20 61 20 72 6f 77 2d 72 65 74   found a row-ret
10fb0 75 72 6e 69 6e 67 20 72 65 73 75 6c 74 73 65 74  urning resultset
10fc0 20 65 6c 69 67 69 62 6c 65 20 74 6f 20 62 65 20   eligible to be 
10fd0 72 65 74 75 72 6e 65 64 21 0d 0a 20 20 20 20 20  returned!..     
10fe0 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d     _activeStatem
10ff0 65 6e 74 20 3d 20 73 74 6d 74 3b 0d 0a 20 20 20  ent = stmt;..   
11000 20 20 20 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74       _fieldCount
11010 20 3d 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a   = fieldCount;..
11020 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 49 6e          _fieldIn
11030 64 65 78 65 73 20 3d 20 6e 65 77 20 44 69 63 74  dexes = new Dict
11040 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69  ionary<string, i
11050 6e 74 3e 28 53 74 72 69 6e 67 43 6f 6d 70 61 72  nt>(StringCompar
11060 65 72 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  er.OrdinalIgnore
11070 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Case);..        
11080 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20  _fieldTypeArray 
11090 3d 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65  = new SQLiteType
110a0 5b 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46  [PrivateVisibleF
110b0 69 65 6c 64 43 6f 75 6e 74 5d 3b 0d 0a 0d 0a 20  ieldCount];.... 
110c0 20 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d         if ((_com
110d0 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43  mandBehavior & C
110e0 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 4b  ommandBehavior.K
110f0 65 79 49 6e 66 6f 29 20 21 3d 20 30 29 0d 0a 20  eyInfo) != 0).. 
11100 20 20 20 20 20 20 20 20 20 4c 6f 61 64 4b 65 79           LoadKey
11110 49 6e 66 6f 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Info();....     
11120 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
11130 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
11140 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
11150 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
11160 69 73 20 6d 65 74 68 6f 64 20 61 74 74 65 6d 70  is method attemp
11170 74 73 20 74 6f 20 71 75 65 72 79 20 74 68 65 20  ts to query the 
11180 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11190 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
111a0 69 74 68 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65  ith..    /// the
111b0 20 64 61 74 61 20 72 65 61 64 65 72 20 69 6e 20   data reader in 
111c0 75 73 65 2e 20 20 49 66 20 74 68 65 20 75 6e 64  use.  If the und
111d0 65 72 6c 79 69 6e 67 20 63 6f 6d 6d 61 6e 64 20  erlying command 
111e0 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  or connection is
111f0 0d 0a 20 20 20 20 2f 2f 2f 20 75 6e 61 76 61 69  ..    /// unavai
11200 6c 61 62 6c 65 2c 20 61 20 6e 75 6c 6c 20 76 61  lable, a null va
11210 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 74 75  lue will be retu
11220 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  rned...    /// <
11230 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
11240 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
11250 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63    /// The connec
11260 74 69 6f 6e 20 6f 62 6a 65 63 74 20 2d 4f 52 2d  tion object -OR-
11270 20 6e 75 6c 6c 20 69 66 20 69 74 20 69 73 20 75   null if it is u
11280 6e 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20  navailable...   
11290 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
112a0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
112b0 61 74 69 63 20 53 51 4c 69 74 65 43 6f 6e 6e 65  atic SQLiteConne
112c0 63 74 69 6f 6e 20 47 65 74 43 6f 6e 6e 65 63 74  ction GetConnect
112d0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51  ion(..        SQ
112e0 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 20 64  LiteDataReader d
112f0 61 74 61 52 65 61 64 65 72 0d 0a 20 20 20 20 20  ataReader..     
11300 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
11310 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
11320 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11330 20 69 66 20 28 64 61 74 61 52 65 61 64 65 72 20   if (dataReader 
11340 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
11350 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11360 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
11370 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
11380 20 64 61 74 61 52 65 61 64 65 72 2e 5f 63 6f 6d   dataReader._com
11390 6d 61 6e 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mand;....       
113a0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
113b0 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  mand != null).. 
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
113d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
113e0 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
113f0 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
11400 6e 20 3d 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e  n = command.Conn
11410 65 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20  ection;....     
11420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11430 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 21 3d  f (connection !=
11440 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
11450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11460 72 65 74 75 72 6e 20 63 6f 6e 6e 65 63 74 69 6f  return connectio
11470 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
11480 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11490 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
114a0 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28  .        catch (
114b0 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
114c0 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  ception)..      
114d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
114e0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
114f0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
11500 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
11510 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  l;..    }....   
11520 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
11530 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
11540 73 20 74 68 65 20 53 51 4c 69 74 65 54 79 70 65  s the SQLiteType
11550 20 66 6f 72 20 61 20 67 69 76 65 6e 20 63 6f 6c   for a given col
11560 75 6d 6e 20 61 6e 64 20 72 6f 77 20 76 61 6c 75  umn and row valu
11570 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
11580 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
11590 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 6c 64  <param name="old
115a0 54 79 70 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Type">..    /// 
115b0 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c  The original SQL
115c0 69 74 65 54 79 70 65 20 73 74 72 75 63 74 75 72  iteType structur
115d0 65 2c 20 62 61 73 65 64 20 6f 6e 6c 79 20 6f 6e  e, based only on
115e0 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20   the column...  
115f0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
11600 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
11610 61 6d 65 3d 22 74 65 78 74 22 3e 0d 0a 20 20 20  ame="text">..   
11620 20 2f 2f 2f 20 54 68 65 20 74 65 78 74 75 61 6c   /// The textual
11630 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
11640 6c 75 6d 6e 20 66 6f 72 20 61 20 67 69 76 65 6e  lumn for a given
11650 20 72 6f 77 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c   row...    /// <
11660 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
11670 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
11680 2f 2f 2f 20 54 68 65 20 53 51 4c 69 74 65 54 79  /// The SQLiteTy
11690 70 65 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  pe structure... 
116a0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
116b0 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 53  >..    private S
116c0 51 4c 69 74 65 54 79 70 65 20 47 65 74 53 51 4c  QLiteType GetSQL
116d0 69 74 65 54 79 70 65 28 0d 0a 20 20 20 20 20 20  iteType(..      
116e0 20 20 53 51 4c 69 74 65 54 79 70 65 20 6f 6c 64    SQLiteType old
116f0 54 79 70 65 2c 20 2f 2a 20 50 41 53 53 2d 54 48  Type, /* PASS-TH
11700 52 4f 55 47 48 20 2a 2f 0d 0a 20 20 20 20 20 20  ROUGH */..      
11710 20 20 73 74 72 69 6e 67 20 74 65 78 74 0d 0a 20    string text.. 
11720 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
11730 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c  .        if (SQL
11740 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73  iteConvert.Looks
11750 4c 69 6b 65 4e 75 6c 6c 28 74 65 78 74 29 29 0d  LikeNull(text)).
11760 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
11770 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 54 79  urn new SQLiteTy
11780 70 65 28 54 79 70 65 41 66 66 69 6e 69 74 79 2e  pe(TypeAffinity.
11790 4e 75 6c 6c 2c 20 44 62 54 79 70 65 2e 4f 62 6a  Null, DbType.Obj
117a0 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ect);....       
117b0 20 69 66 20 28 53 51 4c 69 74 65 43 6f 6e 76 65   if (SQLiteConve
117c0 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 49 6e 74 36  rt.LooksLikeInt6
117d0 34 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20  4(text))..      
117e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
117f0 20 53 51 4c 69 74 65 54 79 70 65 28 54 79 70 65   SQLiteType(Type
11800 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 20  Affinity.Int64, 
11810 44 62 54 79 70 65 2e 49 6e 74 36 34 29 3b 0d 0a  DbType.Int64);..
11820 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 51  ..        if (SQ
11830 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b  LiteConvert.Look
11840 73 4c 69 6b 65 44 6f 75 62 6c 65 28 74 65 78 74  sLikeDouble(text
11850 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
11860 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74  return new SQLit
11870 65 54 79 70 65 28 54 79 70 65 41 66 66 69 6e 69  eType(TypeAffini
11880 74 79 2e 44 6f 75 62 6c 65 2c 20 44 62 54 79 70  ty.Double, DbTyp
11890 65 2e 44 6f 75 62 6c 65 29 3b 0d 0a 0d 0a 20 20  e.Double);....  
118a0 20 20 20 20 20 20 69 66 20 28 28 5f 61 63 74 69        if ((_acti
118b0 76 65 53 74 61 74 65 6d 65 6e 74 20 21 3d 20 6e  veStatement != n
118c0 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ull) &&..       
118d0 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 76 65       SQLiteConve
118e0 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 44 61 74 65  rt.LooksLikeDate
118f0 54 69 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74  Time(_activeStat
11900 65 6d 65 6e 74 2e 5f 73 71 6c 2c 20 74 65 78 74  ement._sql, text
11910 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
11920 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11930 6e 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65  n new SQLiteType
11940 28 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61  (TypeAffinity.Da
11950 74 65 54 69 6d 65 2c 20 44 62 54 79 70 65 2e 44  teTime, DbType.D
11960 61 74 65 54 69 6d 65 29 3b 0d 0a 20 20 20 20 20  ateTime);..     
11970 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
11980 72 65 74 75 72 6e 20 6f 6c 64 54 79 70 65 3b 0d  return oldType;.
11990 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
119a0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
119b0 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
119c0 68 65 20 53 51 4c 69 74 65 54 79 70 65 20 66 6f  he SQLiteType fo
119d0 72 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e  r a given column
119e0 2c 20 61 6e 64 20 63 61 63 68 65 73 20 69 74 20  , and caches it 
119f0 74 6f 20 61 76 6f 69 64 20 72 65 70 65 74 65 74  to avoid repetet
11a00 69 76 65 20 69 6e 74 65 72 6f 70 20 63 61 6c 6c  ive interop call
11a10 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
11a20 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
11a30 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61  <param name="fla
11a40 67 73 22 3e 54 68 65 20 66 6c 61 67 73 20 61 73  gs">The flags as
11a50 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
11a60 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63 74  e parent connect
11a70 69 6f 6e 20 6f 62 6a 65 63 74 2e 3c 2f 70 61 72  ion object.</par
11a80 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
11a90 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
11aa0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
11ab0 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
11ac0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
11ad0 41 20 53 51 4c 69 74 65 54 79 70 65 20 73 74 72  A SQLiteType str
11ae0 75 63 74 75 72 65 3c 2f 72 65 74 75 72 6e 73 3e  ucture</returns>
11af0 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 53 51  ..    private SQ
11b00 4c 69 74 65 54 79 70 65 20 47 65 74 53 51 4c 69  LiteType GetSQLi
11b10 74 65 54 79 70 65 28 53 51 4c 69 74 65 43 6f 6e  teType(SQLiteCon
11b20 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
11b30 67 73 2c 20 69 6e 74 20 69 29 0d 0a 20 20 20 20  gs, int i)..    
11b40 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
11b50 65 54 79 70 65 20 74 79 70 20 3d 20 5f 66 69 65  eType typ = _fie
11b60 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d 3b 0d  ldTypeArray[i];.
11b70 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 74  ...        if (t
11b80 79 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  yp == null)..   
11b90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11ba0 20 20 20 20 2f 2f 20 49 6e 69 74 69 61 6c 69 7a      // Initializ
11bb0 65 20 74 68 69 73 20 63 6f 6c 75 6d 6e 27 73 20  e this column's 
11bc0 66 69 65 6c 64 20 74 79 70 65 20 69 6e 73 74 61  field type insta
11bd0 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nce..           
11be0 20 74 79 70 20 3d 20 5f 66 69 65 6c 64 54 79 70   typ = _fieldTyp
11bf0 65 41 72 72 61 79 5b 69 5d 20 3d 20 6e 65 77 20  eArray[i] = new 
11c00 53 51 4c 69 74 65 54 79 70 65 28 29 3b 0d 0a 20  SQLiteType();.. 
11c10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11c20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 74 20 69 6e      // If not in
11c30 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 65 6e 20  itialized, then 
11c40 66 65 74 63 68 20 74 68 65 20 64 65 63 6c 61 72  fetch the declar
11c50 65 64 20 63 6f 6c 75 6d 6e 20 64 61 74 61 74 79  ed column dataty
11c60 70 65 20 61 6e 64 20 61 74 74 65 6d 70 74 20 74  pe and attempt t
11c70 6f 20 63 6f 6e 76 65 72 74 20 69 74 0d 0a 20 20  o convert it..  
11c80 20 20 20 20 20 20 2f 2f 20 74 6f 20 61 20 6b 6e        // to a kn
11c90 6f 77 6e 20 44 62 54 79 70 65 2e 0d 0a 20 20 20  own DbType...   
11ca0 20 20 20 20 20 69 66 20 28 74 79 70 2e 41 66 66       if (typ.Aff
11cb0 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66  inity == TypeAff
11cc0 69 6e 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69  inity.Uninitiali
11cd0 7a 65 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  zed)..        {.
11ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70  .            typ
11cf0 2e 54 79 70 65 20 3d 20 53 51 4c 69 74 65 43 6f  .Type = SQLiteCo
11d00 6e 76 65 72 74 2e 54 79 70 65 4e 61 6d 65 54 6f  nvert.TypeNameTo
11d10 44 62 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20  DbType(..       
11d20 20 20 20 20 20 20 20 20 20 47 65 74 43 6f 6e 6e           GetConn
11d30 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 20 5f 61  ection(this), _a
11d40 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
11d50 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 0d  sql.ColumnType(.
11d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11d70 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
11d80 74 2c 20 69 2c 20 72 65 66 20 74 79 70 2e 41 66  t, i, ref typ.Af
11d90 66 69 6e 69 74 79 29 2c 20 66 6c 61 67 73 29 3b  finity), flags);
11da0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
11db0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
11dc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11dd0 20 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d    typ.Affinity =
11de0 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
11df0 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 41 66 66  t._sql.ColumnAff
11e00 69 6e 69 74 79 28 0d 0a 20 20 20 20 20 20 20 20  inity(..        
11e10 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
11e20 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20  tatement, i);.. 
11e30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11e40 20 20 20 20 72 65 74 75 72 6e 20 74 79 70 3b 0d      return typ;.
11e50 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
11e60 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
11e70 20 2f 2f 2f 20 52 65 61 64 73 20 74 68 65 20 6e   /// Reads the n
11e80 65 78 74 20 72 6f 77 20 66 72 6f 6d 20 74 68 65  ext row from the
11e90 20 72 65 73 75 6c 74 73 65 74 0d 0a 20 20 20 20   resultset..    
11ea0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
11eb0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
11ec0 3e 54 72 75 65 20 69 66 20 61 20 6e 65 77 20 72  >True if a new r
11ed0 6f 77 20 77 61 73 20 73 75 63 63 65 73 73 66 75  ow was successfu
11ee0 6c 6c 79 20 6c 6f 61 64 65 64 20 61 6e 64 20 69  lly loaded and i
11ef0 73 20 72 65 61 64 79 20 66 6f 72 20 70 72 6f 63  s ready for proc
11f00 65 73 73 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e  essing</returns>
11f10 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
11f20 72 72 69 64 65 20 62 6f 6f 6c 20 52 65 61 64 28  rride bool Read(
11f30 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11f40 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
11f50 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  ..      CheckClo
11f60 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 69 66  sed();..      if
11f70 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73   (_throwOnDispos
11f80 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ed) SQLiteComman
11f90 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64  d.Check(_command
11fa0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
11fb0 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  (_commandBehavio
11fc0 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76  r & CommandBehav
11fd0 69 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29 20  ior.SchemaOnly) 
11fe0 21 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 72  != 0)..        r
11ff0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
12000 20 20 20 20 20 20 69 66 20 28 5f 72 65 61 64 69        if (_readi
12010 6e 67 53 74 61 74 65 20 3d 3d 20 2d 31 29 20 2f  ngState == -1) /
12020 2f 20 46 69 72 73 74 20 73 74 65 70 20 77 61 73  / First step was
12030 20 61 6c 72 65 61 64 79 20 64 6f 6e 65 20 61 74   already done at
12040 20 74 68 65 20 4e 65 78 74 52 65 73 75 6c 74 28   the NextResult(
12050 29 20 6c 65 76 65 6c 2c 20 73 6f 20 64 6f 6e 27  ) level, so don'
12060 74 20 73 74 65 70 20 61 67 61 69 6e 2c 20 6a 75  t step again, ju
12070 73 74 20 72 65 74 75 72 6e 20 74 72 75 65 2e 0d  st return true..
12080 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
12090 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20    _readingState 
120a0 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  = 0;..        re
120b0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
120c0 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 20    }..      else 
120d0 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74  if (_readingStat
120e0 65 20 3d 3d 20 30 29 20 2f 2f 20 41 63 74 69 76  e == 0) // Activ
120f0 65 6c 79 20 72 65 61 64 69 6e 67 20 72 6f 77 73  ely reading rows
12100 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
12110 20 20 20 2f 2f 20 44 6f 6e 27 74 20 72 65 61 64     // Don't read
12120 20 61 20 6e 65 77 20 72 6f 77 20 69 66 20 74 68   a new row if th
12130 65 20 63 6f 6d 6d 61 6e 64 20 62 65 68 61 76 69  e command behavi
12140 6f 72 20 64 69 63 74 61 74 65 73 20 53 69 6e 67  or dictates Sing
12150 6c 65 52 6f 77 2e 20 20 57 65 27 76 65 20 61 6c  leRow.  We've al
12160 72 65 61 64 79 20 72 65 61 64 20 74 68 65 20 66  ready read the f
12170 69 72 73 74 20 72 6f 77 2e 0d 0a 20 20 20 20 20  irst row...     
12180 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64     if ((_command
12190 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61  Behavior & Comma
121a0 6e 64 42 65 68 61 76 69 6f 72 2e 53 69 6e 67 6c  ndBehavior.Singl
121b0 65 52 6f 77 29 20 3d 3d 20 30 29 0d 0a 20 20 20  eRow) == 0)..   
121c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
121d0 20 20 69 66 20 28 5f 61 63 74 69 76 65 53 74 61    if (_activeSta
121e0 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 53 74 65 70  tement._sql.Step
121f0 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
12200 74 29 20 3d 3d 20 74 72 75 65 29 0d 0a 20 20 20  t) == true)..   
12210 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12220 20 20 20 20 20 20 5f 73 74 65 70 43 6f 75 6e 74        _stepCount
12230 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
12240 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20     if (_keyInfo 
12250 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
12260 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f          _keyInfo
12270 2e 52 65 73 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  .Reset();....   
12280 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
12290 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
122a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
122b0 0a 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e  .        _readin
122c0 67 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f 20 46  gState = 1; // F
122d0 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 20  inished reading 
122e0 72 6f 77 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  rows..      }...
122f0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61  .      return fa
12300 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lse;..    }.... 
12310 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
12320 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
12330 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
12340 72 6f 77 73 20 61 66 66 65 63 74 65 64 20 62 79  rows affected by
12350 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62   the statement b
12360 65 69 6e 67 20 65 78 65 63 75 74 65 64 2e 0d 0a  eing executed...
12370 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75      /// The valu
12380 65 20 72 65 74 75 72 6e 65 64 20 6d 61 79 20 6e  e returned may n
12390 6f 74 20 62 65 20 61 63 63 75 72 61 74 65 20 66  ot be accurate f
123a0 6f 72 20 44 44 4c 20 73 74 61 74 65 6d 65 6e 74  or DDL statement
123b0 73 2e 20 20 41 6c 73 6f 2c 20 69 74 0d 0a 20 20  s.  Also, it..  
123c0 20 20 2f 2f 2f 20 77 69 6c 6c 20 62 65 20 2d 31    /// will be -1
123d0 20 66 6f 72 20 61 6e 79 20 73 74 61 74 65 6d 65   for any stateme
123e0 6e 74 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  nt that does not
123f0 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74 61   modify the data
12400 62 61 73 65 20 28 65 2e 67 2e 0d 0a 20 20 20 20  base (e.g...    
12410 2f 2f 2f 20 53 45 4c 45 43 54 29 2e 20 20 49 66  /// SELECT).  If
12420 20 61 6e 20 6f 74 68 65 72 77 69 73 65 20 72 65   an otherwise re
12430 61 64 2d 6f 6e 6c 79 20 73 74 61 74 65 6d 65 6e  ad-only statemen
12440 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 64  t modifies the d
12450 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f  atabase..    ///
12460 20 69 6e 64 69 72 65 63 74 6c 79 20 28 65 2e 67   indirectly (e.g
12470 2e 20 76 69 61 20 61 20 76 69 72 74 75 61 6c 20  . via a virtual 
12480 74 61 62 6c 65 20 6f 72 20 75 73 65 72 2d 64 65  table or user-de
12490 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 29 2c  fined function),
124a0 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 76 61   the..    /// va
124b0 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 20  lue returned is 
124c0 75 6e 64 65 66 69 6e 65 64 2e 0d 0a 20 20 20 20  undefined...    
124d0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
124e0 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
124f0 69 64 65 20 69 6e 74 20 52 65 63 6f 72 64 73 41  ide int RecordsA
12500 66 66 65 63 74 65 64 0d 0a 20 20 20 20 7b 0d 0a  ffected..    {..
12510 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
12520 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
12530 75 72 6e 20 5f 72 6f 77 73 41 66 66 65 63 74 65  urn _rowsAffecte
12540 64 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  d; }..    }.... 
12550 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
12560 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 65  ..    /// Indexe
12570 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 64 61  r to retrieve da
12580 74 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e  ta from a column
12590 20 67 69 76 65 6e 20 69 74 73 20 6e 61 6d 65 0d   given its name.
125a0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
125b0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
125c0 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e  ram name="name">
125d0 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
125e0 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
125f0 76 65 20 64 61 74 61 20 66 6f 72 3c 2f 70 61 72  ve data for</par
12600 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
12610 74 75 72 6e 73 3e 54 68 65 20 76 61 6c 75 65 20  turns>The value 
12620 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
12630 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73   column</returns
12640 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
12650 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 74 68  erride object th
12660 69 73 5b 73 74 72 69 6e 67 20 6e 61 6d 65 5d 0d  is[string name].
12670 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
12680 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
12690 64 28 29 3b 20 72 65 74 75 72 6e 20 47 65 74 56  d(); return GetV
126a0 61 6c 75 65 28 47 65 74 4f 72 64 69 6e 61 6c 28  alue(GetOrdinal(
126b0 6e 61 6d 65 29 29 3b 20 7d 0d 0a 20 20 20 20 7d  name)); }..    }
126c0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
126d0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
126e0 6e 64 65 78 65 72 20 74 6f 20 72 65 74 72 69 65  ndexer to retrie
126f0 76 65 20 64 61 74 61 20 66 72 6f 6d 20 61 20 63  ve data from a c
12700 6f 6c 75 6d 6e 20 67 69 76 65 6e 20 69 74 73 20  olumn given its 
12710 69 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  i..    /// </sum
12720 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
12730 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
12740 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
12750 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
12760 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
12770 73 3e 54 68 65 20 76 61 6c 75 65 20 63 6f 6e 74  s>The value cont
12780 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c  ained in the col
12790 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  umn</returns>.. 
127a0 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
127b0 64 65 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 69  de object this[i
127c0 6e 74 20 69 5d 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i]..    {..  
127d0 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
127e0 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
127f0 6e 20 47 65 74 56 61 6c 75 65 28 69 29 3b 20 7d  n GetValue(i); }
12800 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
12810 72 69 76 61 74 65 20 76 6f 69 64 20 4c 6f 61 64  rivate void Load
12820 4b 65 79 49 6e 66 6f 28 29 0d 0a 20 20 20 20 7b  KeyInfo()..    {
12830 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 6b  ..        if (_k
12840 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
12850 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
12860 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f          _keyInfo
12870 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
12880 20 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66           _keyInf
12890 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  o = null;..     
128a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
128b0 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 65 77 20 53  _keyInfo = new S
128c0 51 4c 69 74 65 4b 65 79 52 65 61 64 65 72 28 5f  QLiteKeyReader(_
128d0 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69  command.Connecti
128e0 6f 6e 2c 20 74 68 69 73 2c 20 5f 61 63 74 69 76  on, this, _activ
128f0 65 53 74 61 74 65 6d 65 6e 74 29 3b 0d 0a 20 20  eStatement);..  
12900 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a             }..  }..}..