System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 0665ed63b7351cecf7070a1a174907d328cfed80:


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 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
7740: 20 44 65 63 69 6d 61 6c 2e 50 61 72 73 65 28 5f   Decimal.Parse(_
7750: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
7760: 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63  _sql.GetText(_ac
7770: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
7780: 29 2c 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e  ), NumberStyles.
7790: 41 6c 6c 6f 77 44 65 63 69 6d 61 6c 50 6f 69 6e  AllowDecimalPoin
77a0: 74 20 7c 20 4e 75 6d 62 65 72 53 74 79 6c 65 73  t | NumberStyles
77b0: 2e 41 6c 6c 6f 77 45 78 70 6f 6e 65 6e 74 20 7c  .AllowExponent |
77c0: 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c   NumberStyles.Al
77d0: 6c 6f 77 4c 65 61 64 69 6e 67 53 69 67 6e 2c 20  lowLeadingSign, 
77e0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
77f0: 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a  riantCulture);..
7800: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
7810: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
7820: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
7830: 63 6f 6c 75 6d 6e 20 61 73 20 61 20 64 6f 75 62  column as a doub
7840: 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  le..    /// </su
7850: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
7860: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
7870: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
7880: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
7890: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
78a0: 6e 73 3e 64 6f 75 62 6c 65 3c 2f 72 65 74 75 72  ns>double</retur
78b0: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
78c0: 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20  override double 
78d0: 47 65 74 44 6f 75 62 6c 65 28 69 6e 74 20 69 29  GetDouble(int i)
78e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
78f0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
7900: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
7910: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
7920: 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
7930: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
7940: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
7950: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
7960: 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51  Callbacks) == SQ
7970: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7980: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
7990: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
79a0: 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  cks)..        {.
79b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
79c0: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
79d0: 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53  ue value = new S
79e0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
79f0: 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  alue();..       
7a00: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65       bool comple
7a10: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
7a20: 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c     InvokeReadVal
7a30: 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65  ueCallback(i, ne
7a40: 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75  w SQLiteReadValu
7a50: 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  eEventArgs(..   
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
7a70: 74 44 6f 75 62 6c 65 22 2c 20 6e 75 6c 6c 2c 20  tDouble", null, 
7a80: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
7a90: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
7aa0: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
7ab0: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
7ac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7ad0: 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 44 6f      if (value.Do
7ae0: 75 62 6c 65 56 61 6c 75 65 20 3d 3d 20 6e 75 6c  ubleValue == nul
7af0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7b00: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
7b10: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
7b20: 6e 28 22 6d 69 73 73 69 6e 67 20 64 6f 75 62 6c  n("missing doubl
7b30: 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29  e return value")
7b40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
7b50: 20 20 20 20 20 72 65 74 75 72 6e 20 28 64 6f 75       return (dou
7b60: 62 6c 65 29 76 61 6c 75 65 2e 44 6f 75 62 6c 65  ble)value.Double
7b70: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
7b80: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
7b90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
7ba0: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
7bb0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
7bc0: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
7bd0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7be0: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
7bf0: 47 65 74 44 6f 75 62 6c 65 28 69 20 2d 20 50 72  GetDouble(i - Pr
7c00: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
7c10: 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
7c20: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
7c30: 2c 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29  , DbType.Double)
7c40: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
7c50: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
7c60: 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c  nt._sql.GetDoubl
7c70: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
7c80: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
7c90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
7ca0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
7cb0: 75 72 6e 73 20 74 68 65 20 2e 4e 45 54 20 74 79  urns the .NET ty
7cc0: 70 65 20 6f 66 20 61 20 67 69 76 65 6e 20 63 6f  pe of a given co
7cd0: 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  lumn..    /// </
7ce0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
7cf0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
7d00: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
7d10: 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
7d20: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
7d30: 75 72 6e 73 3e 54 79 70 65 3c 2f 72 65 74 75 72  urns>Type</retur
7d40: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
7d50: 6f 76 65 72 72 69 64 65 20 54 79 70 65 20 47 65  override Type Ge
7d60: 74 46 69 65 6c 64 54 79 70 65 28 69 6e 74 20 69  tFieldType(int i
7d70: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7d80: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
7d90: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
7da0: 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69   (i >= PrivateVi
7db0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
7dc0: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
7dd0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7de0: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
7df0: 6f 2e 47 65 74 46 69 65 6c 64 54 79 70 65 28 69  o.GetFieldType(i
7e00: 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c   - PrivateVisibl
7e10: 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d  eFieldCount);...
7e20: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
7e30: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51  SQLiteConvert.SQ
7e40: 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 47  LiteTypeToType(G
7e50: 65 74 53 51 4c 69 74 65 54 79 70 65 28 5f 66 6c  etSQLiteType(_fl
7e60: 61 67 73 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d  ags, i));..    }
7e70: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
7e80: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
7e90: 65 74 75 72 6e 73 20 61 20 63 6f 6c 75 6d 6e 20  eturns a column 
7ea0: 61 73 20 61 20 66 6c 6f 61 74 20 76 61 6c 75 65  as a float value
7eb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
7ec0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
7ed0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
7ee0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
7ef0: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
7f00: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
7f10: 3e 66 6c 6f 61 74 3c 2f 72 65 74 75 72 6e 73 3e  >float</returns>
7f20: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
7f30: 72 72 69 64 65 20 66 6c 6f 61 74 20 47 65 74 46  rride float GetF
7f40: 6c 6f 61 74 28 69 6e 74 20 69 29 0d 0a 20 20 20  loat(int i)..   
7f50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
7f60: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
7f70: 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47        VerifyForG
7f80: 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  et();....       
7f90: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
7fa0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7fb0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
7fc0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
7fd0: 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43  acks) == SQLiteC
7fe0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
7ff0: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
8000: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d  ValueCallbacks).
8010: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8020: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
8030: 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61  taReaderValue va
8040: 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  lue = new SQLite
8050: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28  DataReaderValue(
8060: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8070: 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a  bool complete;..
8080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
8090: 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c  vokeReadValueCal
80a0: 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c  lback(i, new SQL
80b0: 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e  iteReadValueEven
80c0: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
80d0: 20 20 20 20 20 20 20 20 22 47 65 74 46 6c 6f 61          "GetFloa
80e0: 74 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29  t", null, value)
80f0: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
8100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8110: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
8120: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8140: 20 28 76 61 6c 75 65 2e 46 6c 6f 61 74 56 61 6c   (value.FloatVal
8150: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
8160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8170: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
8180: 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73  eException("miss
8190: 69 6e 67 20 66 6c 6f 61 74 20 72 65 74 75 72 6e  ing float return
81a0: 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20   value");....   
81b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
81c0: 75 72 6e 20 28 66 6c 6f 61 74 29 76 61 6c 75 65  urn (float)value
81d0: 2e 46 6c 6f 61 74 56 61 6c 75 65 3b 0d 0a 20 20  .FloatValue;..  
81e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
81f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8200: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
8210: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
8220: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
8230: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
8240: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
8250: 79 49 6e 66 6f 2e 47 65 74 46 6c 6f 61 74 28 69  yInfo.GetFloat(i
8260: 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c   - PrivateVisibl
8270: 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d  eFieldCount);...
8280: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54  .        VerifyT
8290: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53 69  ype(i, DbType.Si
82a0: 6e 67 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  ngle);..        
82b0: 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54  return Convert.T
82c0: 6f 53 69 6e 67 6c 65 28 5f 61 63 74 69 76 65 53  oSingle(_activeS
82d0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
82e0: 74 44 6f 75 62 6c 65 28 5f 61 63 74 69 76 65 53  tDouble(_activeS
82f0: 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a  tatement, i));..
8300: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
8310: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8320: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
8330: 63 6f 6c 75 6d 6e 20 61 73 20 61 20 47 75 69 64  column as a Guid
8340: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
8350: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
8360: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
8370: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
8380: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
8390: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
83a0: 3e 47 75 69 64 3c 2f 72 65 74 75 72 6e 73 3e 0d  >Guid</returns>.
83b0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
83c0: 72 69 64 65 20 47 75 69 64 20 47 65 74 47 75 69  ride Guid GetGui
83d0: 64 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  d(int i)..    {.
83e0: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
83f0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
8400: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
8410: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
8420: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
8430: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8440: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
8450: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
8460: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
8470: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
8480: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
8490: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
84a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
84b0: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
84c0: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
84d0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
84e0: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
84f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
8500: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
8510: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
8520: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
8530: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
8540: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
8550: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
8560: 20 20 20 20 20 22 47 65 74 47 75 69 64 22 2c 20       "GetGuid", 
8570: 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75  null, value), ou
8580: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a  t complete);....
8590: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
85a0: 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20  complete)..     
85b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
85c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
85d0: 6c 75 65 2e 47 75 69 64 56 61 6c 75 65 20 3d 3d  lue.GuidValue ==
85e0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
8600: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
8610: 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 67  ption("missing g
8620: 75 69 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  uid return value
8630: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
8640: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 47         return (G
8650: 75 69 64 29 76 61 6c 75 65 2e 47 75 69 64 56 61  uid)value.GuidVa
8660: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
8670: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
8680: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
8690: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
86a0: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
86b0: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
86c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
86d0: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
86e0: 74 47 75 69 64 28 69 20 2d 20 50 72 69 76 61 74  tGuid(i - Privat
86f0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
8700: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
8710: 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66  TypeAffinity aff
8720: 69 6e 69 74 79 20 3d 20 56 65 72 69 66 79 54 79  inity = VerifyTy
8730: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 47 75 69  pe(i, DbType.Gui
8740: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  d);..        if 
8750: 28 61 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70  (affinity == Typ
8760: 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 29 0d  eAffinity.Blob).
8770: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8780: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
8790: 75 66 66 65 72 20 3d 20 6e 65 77 20 62 79 74 65  uffer = new byte
87a0: 5b 31 36 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20  [16];..         
87b0: 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d     _activeStatem
87c0: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65  ent._sql.GetByte
87d0: 73 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  s(_activeStateme
87e0: 6e 74 2c 20 69 2c 20 30 2c 20 62 75 66 66 65 72  nt, i, 0, buffer
87f0: 2c 20 30 2c 20 31 36 29 3b 0d 0a 20 20 20 20 20  , 0, 16);..     
8800: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
8810: 77 20 47 75 69 64 28 62 75 66 66 65 72 29 3b 0d  w Guid(buffer);.
8820: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
8830: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
8840: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
8850: 20 47 75 69 64 28 5f 61 63 74 69 76 65 53 74 61   Guid(_activeSta
8860: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54  tement._sql.GetT
8870: 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ext(_activeState
8880: 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20  ment, i));..    
8890: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
88a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
88b0: 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75  Returns the colu
88c0: 6d 6e 20 61 73 20 61 20 73 68 6f 72 74 0d 0a 20  mn as a short.. 
88d0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
88e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
88f0: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
8900: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
8910: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
8920: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 49 6e   /// <returns>In
8930: 74 31 36 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  t16</returns>.. 
8940: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
8950: 64 65 20 49 6e 74 31 36 20 47 65 74 49 6e 74 31  de Int16 GetInt1
8960: 36 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  6(int i)..    {.
8970: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
8980: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
8990: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
89a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
89b0: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
89c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
89d0: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
89e0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
89f0: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
8a00: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
8a10: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
8a20: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
8a30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8a40: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
8a50: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
8a60: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
8a70: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
8a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
8a90: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
8aa0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
8ab0: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
8ac0: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
8ad0: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
8ae0: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
8af0: 20 20 20 20 20 22 47 65 74 49 6e 74 31 36 22 2c       "GetInt16",
8b00: 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f   null, value), o
8b10: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
8b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
8b30: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
8b40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8b50: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
8b60: 61 6c 75 65 2e 49 6e 74 31 36 56 61 6c 75 65 20  alue.Int16Value 
8b70: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
8b90: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8ba0: 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67  ception("missing
8bb0: 20 69 6e 74 31 36 20 72 65 74 75 72 6e 20 76 61   int16 return va
8bc0: 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lue");....      
8bd0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8be0: 20 28 49 6e 74 31 36 29 76 61 6c 75 65 2e 49 6e   (Int16)value.In
8bf0: 74 31 36 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  t16Value;..     
8c00: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8c10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
8c20: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
8c30: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
8c40: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
8c50: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8c60: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
8c70: 66 6f 2e 47 65 74 49 6e 74 31 36 28 69 20 2d 20  fo.GetInt16(i - 
8c80: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
8c90: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
8ca0: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
8cb0: 28 69 2c 20 44 62 54 79 70 65 2e 49 6e 74 31 36  (i, DbType.Int16
8cc0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
8cd0: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
8ce0: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 31  ent._sql.GetInt1
8cf0: 36 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  6(_activeStateme
8d00: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
8d10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
8d20: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
8d30: 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d  rieves the colum
8d40: 6e 20 61 73 20 61 6e 20 69 6e 74 0d 0a 20 20 20  n as an int..   
8d50: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8d60: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
8d70: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
8d80: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
8d90: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
8da0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74 33  // <returns>Int3
8db0: 32 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  2</returns>..   
8dc0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
8dd0: 20 49 6e 74 33 32 20 47 65 74 49 6e 74 33 32 28   Int32 GetInt32(
8de0: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
8df0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
8e00: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
8e10: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
8e20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
8e30: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
8e40: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
8e50: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
8e60: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
8e70: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
8e80: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
8e90: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
8ea0: 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20  Callbacks)..    
8eb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8ec0: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
8ed0: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
8ee0: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
8ef0: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
8f00: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
8f10: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
8f20: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
8f30: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
8f40: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
8f50: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
8f60: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8f70: 20 20 20 22 47 65 74 49 6e 74 33 32 22 2c 20 6e     "GetInt32", n
8f80: 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74  ull, value), out
8f90: 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20   complete);.... 
8fa0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
8fb0: 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20  omplete)..      
8fc0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8fd0: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
8fe0: 75 65 2e 49 6e 74 33 32 56 61 6c 75 65 20 3d 3d  ue.Int32Value ==
8ff0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9000: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
9010: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
9020: 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69  ption("missing i
9030: 6e 74 33 32 20 72 65 74 75 72 6e 20 76 61 6c 75  nt32 return valu
9040: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
9050: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
9060: 49 6e 74 33 32 29 76 61 6c 75 65 2e 49 6e 74 33  Int32)value.Int3
9070: 32 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  2Value;..       
9080: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
9090: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
90a0: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
90b0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
90c0: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
90d0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
90e0: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
90f0: 2e 47 65 74 49 6e 74 33 32 28 69 20 2d 20 50 72  .GetInt32(i - Pr
9100: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
9110: 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
9120: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
9130: 2c 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29 3b  , DbType.Int32);
9140: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
9150: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
9160: 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28  t._sql.GetInt32(
9170: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
9180: 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  , i);..    }....
9190: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
91a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
91b0: 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  eves the column 
91c0: 61 73 20 61 20 6c 6f 6e 67 0d 0a 20 20 20 20 2f  as a long..    /
91d0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
91e0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
91f0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
9200: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
9210: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
9220: 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74 36 34 3c   <returns>Int64<
9230: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
9240: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49  ublic override I
9250: 6e 74 36 34 20 47 65 74 49 6e 74 36 34 28 69 6e  nt64 GetInt64(in
9260: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
9270: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
9280: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
9290: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
92a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
92b0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
92c0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
92d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
92e0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
92f0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
9300: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
9310: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
9320: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
9330: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9340: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
9350: 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e  rValue value = n
9360: 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  ew SQLiteDataRea
9370: 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20  derValue();..   
9380: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f           bool co
9390: 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20  mplete;....     
93a0: 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61         InvokeRea
93b0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69  dValueCallback(i
93c0: 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  , new SQLiteRead
93d0: 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d  ValueEventArgs(.
93e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
93f0: 20 22 47 65 74 49 6e 74 36 34 22 2c 20 6e 75 6c   "GetInt64", nul
9400: 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63  l, value), out c
9410: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
9420: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
9430: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
9440: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9450: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
9460: 2e 49 6e 74 36 34 56 61 6c 75 65 20 3d 3d 20 6e  .Int64Value == n
9470: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9480: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
9490: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
94a0: 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e 74  ion("missing int
94b0: 36 34 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22  64 return value"
94c0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
94d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e        return (In
94e0: 74 36 34 29 76 61 6c 75 65 2e 49 6e 74 36 34 56  t64)value.Int64V
94f0: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
9500: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
9510: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
9520: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
9530: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
9540: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
9550: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
9560: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
9570: 65 74 49 6e 74 36 34 28 69 20 2d 20 50 72 69 76  etInt64(i - Priv
9580: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
9590: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
95a0: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
95b0: 44 62 54 79 70 65 2e 49 6e 74 36 34 29 3b 0d 0a  DbType.Int64);..
95c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
95d0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
95e0: 5f 73 71 6c 2e 47 65 74 49 6e 74 36 34 28 5f 61  _sql.GetInt64(_a
95f0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
9600: 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  i);..    }....  
9610: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
9620: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
9630: 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  es the name of t
9640: 68 65 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f  he column..    /
9650: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
9660: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
9670: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
9680: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
9690: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
96a0: 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67   <returns>string
96b0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
96c0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
96d0: 73 74 72 69 6e 67 20 47 65 74 4e 61 6d 65 28 69  string GetName(i
96e0: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
96f0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
9700: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
9710: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
9720: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
9730: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
9740: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
9750: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
9760: 79 49 6e 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20  yInfo.GetName(i 
9770: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
9780: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
9790: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
97a0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
97b0: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28  _sql.ColumnName(
97c0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
97d0: 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  , i);..    }....
97e0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
97f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
9800: 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
9810: 68 65 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  he database asso
9820: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
9830: 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e  specified column
9840: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
9850: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
9860: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
9870: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
9880: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
9890: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
98a0: 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e  s>string</return
98b0: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  s>..    public s
98c0: 74 72 69 6e 67 20 47 65 74 44 61 74 61 62 61 73  tring GetDatabas
98d0: 65 4e 61 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20  eName(int i)..  
98e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
98f0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
9900: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
9910: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
9920: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
9930: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
9940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
9950: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
9960: 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65  Name(i - Private
9970: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
9980: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  t);....        r
9990: 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61  eturn _activeSta
99a0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75  tement._sql.Colu
99b0: 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28 5f  mnDatabaseName(_
99c0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
99d0: 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   i);..    }.... 
99e0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
99f0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
9a00: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
9a10: 65 20 74 61 62 6c 65 20 61 73 73 6f 63 69 61 74  e table associat
9a20: 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ed with the spec
9a30: 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20  ified column... 
9a40: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9a50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
9a60: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
9a70: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
9a80: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
9a90: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74   /// <returns>st
9aa0: 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ring</returns>..
9ab0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
9ac0: 67 20 47 65 74 54 61 62 6c 65 4e 61 6d 65 28 69  g GetTableName(i
9ad0: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
9ae0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
9af0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
9b00: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
9b10: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
9b20: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
9b30: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
9b40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
9b50: 79 49 6e 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20  yInfo.GetName(i 
9b60: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
9b70: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
9b80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
9b90: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
9ba0: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 61 62 6c 65  _sql.ColumnTable
9bb0: 4e 61 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74  Name(_activeStat
9bc0: 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20  ement, i);..    
9bd0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
9be0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9bf0: 52 65 74 75 72 6e 73 20 74 68 65 20 6f 72 69 67  Returns the orig
9c00: 69 6e 61 6c 20 6e 61 6d 65 20 6f 66 20 74 68 65  inal name of the
9c10: 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d   specified colum
9c20: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
9c30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9c40: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
9c50: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
9c60: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
9c70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
9c80: 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72  ns>string</retur
9c90: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
9ca0: 73 74 72 69 6e 67 20 47 65 74 4f 72 69 67 69 6e  string GetOrigin
9cb0: 61 6c 4e 61 6d 65 28 69 6e 74 20 69 29 0d 0a 20  alName(int i).. 
9cc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
9cd0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
9ce0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
9cf0: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
9d00: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
9d10: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
9d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
9d30: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
9d40: 74 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61 74  tName(i - Privat
9d50: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
9d60: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
9d70: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
9d80: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c  atement._sql.Col
9d90: 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28  umnOriginalName(
9da0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
9db0: 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  , i);..    }....
9dc0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9dd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
9de0: 65 76 65 73 20 74 68 65 20 69 20 6f 66 20 61 20  eves the i of a 
9df0: 63 6f 6c 75 6d 6e 2c 20 67 69 76 65 6e 20 69 74  column, given it
9e00: 73 20 6e 61 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20  s name..    /// 
9e10: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9e20: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
9e30: 22 6e 61 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20  "name">The name 
9e40: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
9e50: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
9e60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
9e70: 72 6e 73 3e 54 68 65 20 69 6e 74 20 69 20 6f 66  rns>The int i of
9e80: 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74   the column</ret
9e90: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
9ea0: 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  c override int G
9eb0: 65 74 4f 72 64 69 6e 61 6c 28 73 74 72 69 6e 67  etOrdinal(string
9ec0: 20 6e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20   name)..    {.. 
9ed0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
9ee0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ed();....      i
9ef0: 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f  f (_throwOnDispo
9f00: 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61  sed) SQLiteComma
9f10: 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e  nd.Check(_comman
9f20: 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d  d);....      //.
9f30: 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20  .      // NOTE: 
9f40: 46 69 72 73 74 2c 20 63 68 65 63 6b 20 69 66 20  First, check if 
9f50: 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  the column name 
9f60: 63 61 63 68 65 20 68 61 73 20 62 65 65 6e 20 69  cache has been i
9f70: 6e 69 74 69 61 6c 69 7a 65 64 20 79 65 74 2e 0d  nitialized yet..
9f80: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
9f90: 49 66 20 6e 6f 74 2c 20 64 6f 20 69 74 20 6e 6f  If not, do it no
9fa0: 77 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  w...      //..  
9fb0: 20 20 20 20 69 66 20 28 5f 66 69 65 6c 64 49 6e      if (_fieldIn
9fc0: 64 65 78 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  dexes == null)..
9fd0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9fe0: 20 20 20 5f 66 69 65 6c 64 49 6e 64 65 78 65 73     _fieldIndexes
9ff0: 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72   = new Dictionar
a000: 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 28 0d  y<string, int>(.
a010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
a020: 74 72 69 6e 67 43 6f 6d 70 61 72 65 72 2e 4f 72  tringComparer.Or
a030: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
a040: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
a050: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f      //..      //
a060: 20 4e 4f 54 45 3a 20 4e 65 78 74 2c 20 73 65 65   NOTE: Next, see
a070: 20 69 66 20 74 68 65 20 69 6e 64 65 78 20 66 6f   if the index fo
a080: 72 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  r the requested 
a090: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 68 61 73 20  column name has 
a0a0: 62 65 65 6e 0d 0a 20 20 20 20 20 20 2f 2f 20 20  been..      //  
a0b0: 20 20 20 20 20 63 61 63 68 65 64 20 61 6c 72 65       cached alre
a0c0: 61 64 79 2e 20 20 49 66 20 73 6f 2c 20 72 65 74  ady.  If so, ret
a0d0: 75 72 6e 20 74 68 65 20 63 61 63 68 65 64 20 76  urn the cached v
a0e0: 61 6c 75 65 2e 20 20 4f 74 68 65 72 77 69 73 65  alue.  Otherwise
a0f0: 2c 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  ,..      //     
a100: 20 20 6c 6f 6f 6b 75 70 20 74 68 65 20 76 61 6c    lookup the val
a110: 75 65 20 61 6e 64 20 74 68 65 6e 20 63 61 63 68  ue and then cach
a120: 65 20 74 68 65 20 72 65 73 75 6c 74 20 66 6f 72  e the result for
a130: 20 66 75 74 75 72 65 20 75 73 65 2e 0d 0a 20 20   future use...  
a140: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 6e      //..      in
a150: 74 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  t r;....      if
a160: 20 28 21 5f 66 69 65 6c 64 49 6e 64 65 78 65 73   (!_fieldIndexes
a170: 2e 54 72 79 47 65 74 56 61 6c 75 65 28 6e 61 6d  .TryGetValue(nam
a180: 65 2c 20 6f 75 74 20 72 29 29 0d 0a 20 20 20 20  e, out r))..    
a190: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72    {..          r
a1a0: 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d   = _activeStatem
a1b0: 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 49  ent._sql.ColumnI
a1c0: 6e 64 65 78 28 5f 61 63 74 69 76 65 53 74 61 74  ndex(_activeStat
a1d0: 65 6d 65 6e 74 2c 20 6e 61 6d 65 29 3b 0d 0a 0d  ement, name);...
a1e0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72  .          if (r
a1f0: 20 3d 3d 20 2d 31 20 26 26 20 5f 6b 65 79 49 6e   == -1 && _keyIn
a200: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
a210: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a220: 20 20 20 20 20 20 20 20 72 20 3d 20 5f 6b 65 79          r = _key
a230: 49 6e 66 6f 2e 47 65 74 4f 72 64 69 6e 61 6c 28  Info.GetOrdinal(
a240: 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  name);..        
a250: 20 20 20 20 20 20 69 66 20 28 72 20 3e 20 2d 31        if (r > -1
a260: 29 20 72 20 2b 3d 20 50 72 69 76 61 74 65 56 69  ) r += PrivateVi
a270: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 3b  sibleFieldCount;
a280: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
a290: 0a 20 20 20 20 20 20 20 20 20 20 5f 66 69 65 6c  .          _fiel
a2a0: 64 49 6e 64 65 78 65 73 2e 41 64 64 28 6e 61 6d  dIndexes.Add(nam
a2b0: 65 2c 20 72 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  e, r);..      }.
a2c0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
a2d0: 72 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  r;..    }....   
a2e0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
a2f0: 20 20 20 20 2f 2f 2f 20 53 63 68 65 6d 61 20 69      /// Schema i
a300: 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 53 51  nformation in SQ
a310: 4c 69 74 65 20 69 73 20 64 69 66 66 69 63 75 6c  Lite is difficul
a320: 74 20 74 6f 20 6d 61 70 20 69 6e 74 6f 20 2e 4e  t to map into .N
a330: 45 54 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  ET conventions, 
a340: 73 6f 20 61 20 6c 6f 74 20 6f 66 20 77 6f 72 6b  so a lot of work
a350: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 0d 0a 20   must be done.. 
a360: 20 20 20 2f 2f 2f 20 74 6f 20 67 61 74 68 65 72     /// to gather
a370: 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 69   the necessary i
a380: 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 6f 20 69 74  nformation so it
a390: 20 63 61 6e 20 62 65 20 72 65 70 72 65 73 65 6e   can be represen
a3a0: 74 65 64 20 69 6e 20 61 6e 20 41 44 4f 2e 4e 45  ted in an ADO.NE
a3b0: 54 20 6d 61 6e 6e 65 72 2e 0d 0a 20 20 20 20 2f  T manner...    /
a3c0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
a3d0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
a3e0: 52 65 74 75 72 6e 73 20 61 20 44 61 74 61 54 61  Returns a DataTa
a3f0: 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ble containing t
a400: 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  he schema inform
a410: 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 61 63  ation for the ac
a420: 74 69 76 65 20 53 45 4c 45 43 54 20 73 74 61 74  tive SELECT stat
a430: 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72 6f 63  ement being proc
a440: 65 73 73 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e  essed.</returns>
a450: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
a460: 72 72 69 64 65 20 44 61 74 61 54 61 62 6c 65 20  rride DataTable 
a470: 47 65 74 53 63 68 65 6d 61 54 61 62 6c 65 28 29  GetSchemaTable()
a480: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43  ..    {..      C
a490: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
a4a0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65  .      return Ge
a4b0: 74 53 63 68 65 6d 61 54 61 62 6c 65 28 74 72 75  tSchemaTable(tru
a4c0: 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
a4d0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
a4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a520: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
a530: 69 6f 6e 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ion ColumnParent
a540: 20 43 6c 61 73 73 0d 0a 20 20 20 20 70 72 69 76   Class..    priv
a550: 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
a560: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 3a 20   ColumnParent : 
a570: 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61 72 65  IEqualityCompare
a580: 72 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 0d  r<ColumnParent>.
a590: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
a5a0: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 46  #region Public F
a5b0: 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 70  ields..        p
a5c0: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 61 74  ublic string Dat
a5d0: 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  abaseName;..    
a5e0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
a5f0: 67 20 54 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20  g TableName;..  
a600: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
a610: 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d  ing ColumnName;.
a620: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
a630: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
a640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a680: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a690: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
a6a0: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
a6b0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 43 6f         public Co
a6c0: 6c 75 6d 6e 50 61 72 65 6e 74 28 29 0d 0a 20 20  lumnParent()..  
a6d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a6e0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
a6f0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
a700: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
a710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
a760: 6c 69 63 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  lic ColumnParent
a770: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
a780: 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 4e 61  tring databaseNa
a790: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
a7a0: 20 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d   string tableNam
a7b0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
a7c0: 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d  string columnNam
a7d0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
a7e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 3a 20  ..            : 
a7f0: 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20  this()..        
a800: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
a810: 68 69 73 2e 44 61 74 61 62 61 73 65 4e 61 6d 65  his.DatabaseName
a820: 20 3d 20 64 61 74 61 62 61 73 65 4e 61 6d 65 3b   = databaseName;
a830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
a840: 69 73 2e 54 61 62 6c 65 4e 61 6d 65 20 3d 20 74  is.TableName = t
a850: 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  ableName;..     
a860: 20 20 20 20 20 20 20 74 68 69 73 2e 43 6f 6c 75         this.Colu
a870: 6d 6e 4e 61 6d 65 20 3d 20 63 6f 6c 75 6d 6e 4e  mnName = columnN
a880: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ame;..        }.
a890: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
a8a0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
a8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a900: 20 20 23 72 65 67 69 6f 6e 20 49 45 71 75 61 6c    #region IEqual
a910: 69 74 79 43 6f 6d 70 61 72 65 72 3c 43 6f 6c 75  ityComparer<Colu
a920: 6d 6e 50 61 72 65 6e 74 3e 20 4d 65 6d 62 65 72  mnParent> Member
a930: 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  s..        publi
a940: 63 20 62 6f 6f 6c 20 45 71 75 61 6c 73 28 43 6f  c bool Equals(Co
a950: 6c 75 6d 6e 50 61 72 65 6e 74 20 78 2c 20 43 6f  lumnParent x, Co
a960: 6c 75 6d 6e 50 61 72 65 6e 74 20 79 29 0d 0a 20  lumnParent y).. 
a970: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a980: 20 20 20 20 20 20 69 66 20 28 28 78 20 3d 3d 20        if ((x == 
a990: 6e 75 6c 6c 29 20 26 26 20 28 79 20 3d 3d 20 6e  null) && (y == n
a9a0: 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
a9b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a9c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
a9d0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
a9e0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
a9f0: 6c 73 65 20 69 66 20 28 28 78 20 3d 3d 20 6e 75  lse if ((x == nu
aa00: 6c 6c 29 20 7c 7c 20 28 79 20 3d 3d 20 6e 75 6c  ll) || (y == nul
aa10: 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
aa20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
aa30: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
aa40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
aa50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
aa60: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
aa70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
aa80: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45     if (!String.E
aa90: 71 75 61 6c 73 28 78 2e 44 61 74 61 62 61 73 65  quals(x.Database
aaa0: 4e 61 6d 65 2c 20 79 2e 44 61 74 61 62 61 73 65  Name, y.Database
aab0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
aac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
aad0: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
aae0: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
aaf0: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
ab00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
ab20: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
ab30: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
ab40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab50: 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
ab60: 6c 73 28 78 2e 54 61 62 6c 65 4e 61 6d 65 2c 20  ls(x.TableName, 
ab70: 79 2e 54 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20  y.TableName,..  
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab90: 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
aba0: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
abb0: 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20  noreCase))..    
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
abd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abe0: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
abf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ac00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
ac10: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
ac20: 6e 67 2e 45 71 75 61 6c 73 28 78 2e 43 6f 6c 75  ng.Equals(x.Colu
ac30: 6d 6e 4e 61 6d 65 2c 20 79 2e 43 6f 6c 75 6d 6e  mnName, y.Column
ac40: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
ac60: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
ac70: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
ac80: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
ac90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
acb0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
acc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ace0: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
acf0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
ad00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ad10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ad20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
ad60: 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20       public int 
ad70: 47 65 74 48 61 73 68 43 6f 64 65 28 43 6f 6c 75  GetHashCode(Colu
ad80: 6d 6e 50 61 72 65 6e 74 20 6f 62 6a 29 0d 0a 20  mnParent obj).. 
ad90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ada0: 20 20 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74        int result
adb0: 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   = 0;....       
adc0: 20 20 20 20 20 69 66 20 28 28 6f 62 6a 20 21 3d       if ((obj !=
add0: 20 6e 75 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 44   null) && (obj.D
ade0: 61 74 61 62 61 73 65 4e 61 6d 65 20 21 3d 20 6e  atabaseName != n
adf0: 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
ae00: 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 5e 3d         result ^=
ae10: 20 6f 62 6a 2e 44 61 74 61 62 61 73 65 4e 61 6d   obj.DatabaseNam
ae20: 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28 29 3b  e.GetHashCode();
ae30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ae40: 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c  if ((obj != null
ae50: 29 20 26 26 20 28 6f 62 6a 2e 54 61 62 6c 65 4e  ) && (obj.TableN
ae60: 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ame != null)).. 
ae70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
ae80: 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e 54 61 62  esult ^= obj.Tab
ae90: 6c 65 4e 61 6d 65 2e 47 65 74 48 61 73 68 43 6f  leName.GetHashCo
aea0: 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de();....       
aeb0: 20 20 20 20 20 69 66 20 28 28 6f 62 6a 20 21 3d       if ((obj !=
aec0: 20 6e 75 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 43   null) && (obj.C
aed0: 6f 6c 75 6d 6e 4e 61 6d 65 20 21 3d 20 6e 75 6c  olumnName != nul
aee0: 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
aef0: 20 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f       result ^= o
af00: 62 6a 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2e 47 65  bj.ColumnName.Ge
af10: 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a  tHashCode();....
af20: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
af30: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
af40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
af50: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d  endregion..    }
af60: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
af70: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
af80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afc0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61  ///....    priva
afd0: 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 47  te static void G
afe0: 65 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c 75 6d  etStatementColum
aff0: 6e 50 61 72 65 6e 74 73 28 0d 0a 20 20 20 20 20  nParents(..     
b000: 20 20 20 53 51 4c 69 74 65 42 61 73 65 20 73 71     SQLiteBase sq
b010: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  l,..        SQLi
b020: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
b030: 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 66  ,..        int f
b040: 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  ieldCount,..    
b050: 20 20 20 20 72 65 66 20 44 69 63 74 69 6f 6e 61      ref Dictiona
b060: 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c  ry<ColumnParent,
b070: 20 4c 69 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65   List<int>> pare
b080: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 0d 0a 20 20  ntToColumns,..  
b090: 20 20 20 20 20 20 72 65 66 20 44 69 63 74 69 6f        ref Dictio
b0a0: 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e  nary<int, Column
b0b0: 50 61 72 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54 6f  Parent> columnTo
b0c0: 50 61 72 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  Parent..        
b0d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b0e0: 20 20 69 66 20 28 70 61 72 65 6e 74 54 6f 43 6f    if (parentToCo
b0f0: 6c 75 6d 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  lumns == null)..
b100: 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65              pare
b110: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e 65  ntToColumns = ne
b120: 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c  w Dictionary<Col
b130: 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c  umnParent, List<
b140: 69 6e 74 3e 3e 28 0d 0a 20 20 20 20 20 20 20 20  int>>(..        
b150: 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f 6c 75          new Colu
b160: 6d 6e 50 61 72 65 6e 74 28 29 29 3b 0d 0a 0d 0a  mnParent());....
b170: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6c 75          if (colu
b180: 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 3d 20 6e 75  mnToParent == nu
b190: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
b1a0: 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20   columnToParent 
b1b0: 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
b1c0: 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72 65  <int, ColumnPare
b1d0: 6e 74 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nt>();....      
b1e0: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
b1f0: 3b 20 6e 20 3c 20 66 69 65 6c 64 43 6f 75 6e 74  ; n < fieldCount
b200: 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  ; n++)..        
b210: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
b220: 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 4e 61  tring databaseNa
b230: 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 44  me = sql.ColumnD
b240: 61 74 61 62 61 73 65 4e 61 6d 65 28 73 74 6d 74  atabaseName(stmt
b250: 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  , n);..         
b260: 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c 65 4e     string tableN
b270: 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e  ame = sql.Column
b280: 54 61 62 6c 65 4e 61 6d 65 28 73 74 6d 74 2c 20  TableName(stmt, 
b290: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
b2a0: 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61   string columnNa
b2b0: 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 4f  me = sql.ColumnO
b2c0: 72 69 67 69 6e 61 6c 4e 61 6d 65 28 73 74 6d 74  riginalName(stmt
b2d0: 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  , n);....       
b2e0: 20 20 20 20 20 43 6f 6c 75 6d 6e 50 61 72 65 6e       ColumnParen
b2f0: 74 20 6b 65 79 20 3d 20 6e 65 77 20 43 6f 6c 75  t key = new Colu
b300: 6d 6e 50 61 72 65 6e 74 28 64 61 74 61 62 61 73  mnParent(databas
b310: 65 4e 61 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65  eName, tableName
b320: 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
b330: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 50 61 72 65        ColumnPare
b340: 6e 74 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 43  nt value = new C
b350: 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 64 61 74 61  olumnParent(data
b360: 62 61 73 65 4e 61 6d 65 2c 20 74 61 62 6c 65 4e  baseName, tableN
b370: 61 6d 65 2c 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29  ame, columnName)
b380: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b390: 20 4c 69 73 74 3c 69 6e 74 3e 20 69 6e 64 65 78   List<int> index
b3a0: 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  List;....       
b3b0: 20 20 20 20 20 69 66 20 28 21 70 61 72 65 6e 74       if (!parent
b3c0: 54 6f 43 6f 6c 75 6d 6e 73 2e 54 72 79 47 65 74  ToColumns.TryGet
b3d0: 56 61 6c 75 65 28 6b 65 79 2c 20 6f 75 74 20 69  Value(key, out i
b3e0: 6e 64 65 78 4c 69 73 74 29 29 0d 0a 20 20 20 20  ndexList))..    
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65              pare
b400: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  ntToColumns.Add(
b410: 6b 65 79 2c 20 6e 65 77 20 4c 69 73 74 3c 69 6e  key, new List<in
b420: 74 3e 28 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 6e  t>(new int[] { n
b430: 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   }));..         
b440: 20 20 20 65 6c 73 65 20 69 66 20 28 69 6e 64 65     else if (inde
b450: 78 4c 69 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a  xList != null)..
b460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b470: 69 6e 64 65 78 4c 69 73 74 2e 41 64 64 28 6e 29  indexList.Add(n)
b480: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  ;..            e
b490: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
b4a0: 20 20 20 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c       parentToCol
b4b0: 75 6d 6e 73 5b 6b 65 79 5d 20 3d 20 6e 65 77 20  umns[key] = new 
b4c0: 4c 69 73 74 3c 69 6e 74 3e 28 6e 65 77 20 69 6e  List<int>(new in
b4d0: 74 5b 5d 20 7b 20 6e 20 7d 29 3b 0d 0a 0d 0a 20  t[] { n });.... 
b4e0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 75 6d             colum
b4f0: 6e 54 6f 50 61 72 65 6e 74 2e 41 64 64 28 6e 2c  nToParent.Add(n,
b500: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
b510: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
b520: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
b530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b570: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
b580: 74 69 63 20 69 6e 74 20 43 6f 75 6e 74 50 61 72  tic int CountPar
b590: 65 6e 74 73 28 0d 0a 20 20 20 20 20 20 20 20 44  ents(..        D
b5a0: 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e  ictionary<Column
b5b0: 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74  Parent, List<int
b5c0: 3e 3e 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  >> parentToColum
b5d0: 6e 73 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  ns..        ).. 
b5e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 6e     {..        in
b5f0: 74 20 72 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d  t result = 0;...
b600: 0a 20 20 20 20 20 20 20 20 69 66 20 28 70 61 72  .        if (par
b610: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 21 3d 20  entToColumns != 
b620: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
b630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
b640: 72 65 61 63 68 20 28 43 6f 6c 75 6d 6e 50 61 72  reach (ColumnPar
b650: 65 6e 74 20 6b 65 79 20 69 6e 20 70 61 72 65 6e  ent key in paren
b660: 74 54 6f 43 6f 6c 75 6d 6e 73 2e 4b 65 79 73 29  tToColumns.Keys)
b670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
b680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b690: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
b6a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b6b0: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
b6c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b6d0: 20 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c 65      string table
b6e0: 4e 61 6d 65 20 3d 20 6b 65 79 2e 54 61 62 6c 65  Name = key.Table
b6f0: 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
b700: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
b710: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
b720: 79 28 74 61 62 6c 65 4e 61 6d 65 29 29 0d 0a 20  y(tableName)).. 
b730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b740: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b760: 72 65 73 75 6c 74 2b 2b 3b 0d 0a 20 20 20 20 20  result++;..     
b770: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b780: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
b790: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
b7a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
b7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69  ///////....    i
b800: 6e 74 65 72 6e 61 6c 20 44 61 74 61 54 61 62 6c  nternal DataTabl
b810: 65 20 47 65 74 53 63 68 65 6d 61 54 61 62 6c 65  e GetSchemaTable
b820: 28 62 6f 6f 6c 20 77 61 6e 74 55 6e 69 71 75 65  (bool wantUnique
b830: 49 6e 66 6f 2c 20 62 6f 6f 6c 20 77 61 6e 74 44  Info, bool wantD
b840: 65 66 61 75 6c 74 56 61 6c 75 65 29 0d 0a 20 20  efaultValue)..  
b850: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
b860: 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  Closed();..     
b870: 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73   if (_throwOnDis
b880: 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d  posed) SQLiteCom
b890: 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d  mand.Check(_comm
b8a0: 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  and);....      /
b8b0: 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 42 55 47 46  /..      // BUGF
b8c0: 49 58 3a 20 57 65 20 6e 65 65 64 20 74 6f 20 71  IX: We need to q
b8d0: 75 69 63 6b 6c 79 20 73 63 61 6e 20 61 6c 6c 20  uickly scan all 
b8e0: 74 68 65 20 66 69 65 6c 64 73 20 69 6e 20 74 68  the fields in th
b8f0: 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20  e current..     
b900: 20 2f 2f 20 20 20 20 20 20 20 20 20 22 72 65 73   //         "res
b910: 75 6c 74 20 73 65 74 22 20 74 6f 20 73 65 65 20  ult set" to see 
b920: 68 6f 77 20 6d 61 6e 79 20 64 69 73 74 69 6e 63  how many distinc
b930: 74 20 74 61 62 6c 65 73 20 61 72 65 20 61 63 74  t tables are act
b940: 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 2f 2f 20  ually..      // 
b950: 20 20 20 20 20 20 20 20 69 6e 76 6f 6c 76 65 64          involved
b960: 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74  .  This informat
b970: 69 6f 6e 20 69 73 20 6e 65 63 65 73 73 61 72 79  ion is necessary
b980: 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 0d 0a 20   so that some.. 
b990: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
b9a0: 69 6e 74 65 6c 6c 69 67 65 6e 74 20 64 65 63 69  intelligent deci
b9b0: 73 69 6f 6e 73 20 63 61 6e 20 62 65 20 6d 61 64  sions can be mad
b9c0: 65 20 77 68 65 6e 20 63 6f 6e 73 74 72 75 63 74  e when construct
b9d0: 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 2f  ing the..      /
b9e0: 2f 20 20 20 20 20 20 20 20 20 6d 65 74 61 64 61  /         metada
b9f0: 74 61 20 62 65 6c 6f 77 2e 20 20 46 6f 72 20 65  ta below.  For e
ba00: 78 61 6d 70 6c 65 2c 20 77 65 20 6e 65 65 64 20  xample, we need 
ba10: 74 6f 20 62 65 20 76 65 72 79 20 63 61 72 65 66  to be very caref
ba20: 75 6c 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  ul..      //    
ba30: 20 20 20 20 20 61 62 6f 75 74 20 66 6c 61 67 67       about flagg
ba40: 69 6e 67 20 61 20 70 61 72 74 69 63 75 6c 61 72  ing a particular
ba50: 20 63 6f 6c 75 6d 6e 20 61 73 20 22 75 6e 69 71   column as "uniq
ba60: 75 65 22 20 6a 75 73 74 0d 0a 20 20 20 20 20 20  ue" just..      
ba70: 2f 2f 20 20 20 20 20 20 20 20 20 62 65 63 61 75  //         becau
ba80: 73 65 20 69 74 20 77 61 73 20 69 6e 20 69 74 73  se it was in its
ba90: 20 6f 72 69 67 69 6e 61 6c 20 75 6e 64 65 72 6c   original underl
baa0: 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 74 61  ying database ta
bab0: 62 6c 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  ble..      //   
bac0: 20 20 20 20 20 20 69 66 20 74 68 65 72 65 20 61        if there a
bad0: 72 65 20 6e 6f 77 20 6d 75 6c 74 69 70 6c 65 20  re now multiple 
bae0: 74 61 62 6c 65 73 20 69 6e 76 6f 6c 76 65 64 20  tables involved 
baf0: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f  in the..      //
bb00: 20 20 20 20 20 20 20 20 20 22 72 65 73 75 6c 74           "result
bb10: 20 73 65 74 22 2e 20 20 53 65 65 20 74 69 63 6b   set".  See tick
bb20: 65 74 20 5b 37 65 33 66 61 39 33 37 34 34 5d 20  et [7e3fa93744] 
bb30: 66 6f 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 65  for more detaile
bb40: 64 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  d..      //     
bb50: 20 20 20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e      information.
bb60: 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20  ..      //..    
bb70: 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c    Dictionary<Col
bb80: 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c  umnParent, List<
bb90: 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54 6f 43 6f  int>> parentToCo
bba0: 6c 75 6d 6e 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  lumns = null;.. 
bbb0: 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79 3c       Dictionary<
bbc0: 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e  int, ColumnParen
bbd0: 74 3e 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e  t> columnToParen
bbe0: 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  t = null;....   
bbf0: 20 20 20 47 65 74 53 74 61 74 65 6d 65 6e 74 43     GetStatementC
bc00: 6f 6c 75 6d 6e 50 61 72 65 6e 74 73 28 0d 0a 20  olumnParents(.. 
bc10: 20 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e           _comman
bc20: 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71  d.Connection._sq
bc30: 6c 2c 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  l, _activeStatem
bc40: 65 6e 74 2c 20 5f 66 69 65 6c 64 43 6f 75 6e 74  ent, _fieldCount
bc50: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 66  ,..          ref
bc60: 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73   parentToColumns
bc70: 2c 20 72 65 66 20 63 6f 6c 75 6d 6e 54 6f 50 61  , ref columnToPa
bc80: 72 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rent);....      
bc90: 44 61 74 61 54 61 62 6c 65 20 74 62 6c 20 3d 20  DataTable tbl = 
bca0: 6e 65 77 20 44 61 74 61 54 61 62 6c 65 28 22 53  new DataTable("S
bcb0: 63 68 65 6d 61 54 61 62 6c 65 22 29 3b 0d 0a 20  chemaTable");.. 
bcc0: 20 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 74       DataTable t
bcd0: 62 6c 49 6e 64 65 78 65 73 20 3d 20 6e 75 6c 6c  blIndexes = null
bce0: 3b 0d 0a 20 20 20 20 20 20 44 61 74 61 54 61 62  ;..      DataTab
bcf0: 6c 65 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d  le tblIndexColum
bd00: 6e 73 3b 0d 0a 20 20 20 20 20 20 44 61 74 61 52  ns;..      DataR
bd10: 6f 77 20 72 6f 77 3b 0d 0a 20 20 20 20 20 20 73  ow row;..      s
bd20: 74 72 69 6e 67 20 74 65 6d 70 3b 0d 0a 20 20 20  tring temp;..   
bd30: 20 20 20 73 74 72 69 6e 67 20 73 74 72 43 61 74     string strCat
bd40: 61 6c 6f 67 20 3d 20 53 74 72 69 6e 67 2e 45 6d  alog = String.Em
bd50: 70 74 79 3b 0d 0a 20 20 20 20 20 20 73 74 72 69  pty;..      stri
bd60: 6e 67 20 73 74 72 54 61 62 6c 65 20 3d 20 53 74  ng strTable = St
bd70: 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20  ring.Empty;..   
bd80: 20 20 20 73 74 72 69 6e 67 20 73 74 72 43 6f 6c     string strCol
bd90: 75 6d 6e 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70  umn = String.Emp
bda0: 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 74 62 6c  ty;....      tbl
bdb0: 2e 4c 6f 63 61 6c 65 20 3d 20 43 75 6c 74 75 72  .Locale = Cultur
bdc0: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
bdd0: 75 6c 74 75 72 65 3b 0d 0a 20 20 20 20 20 20 74  ulture;..      t
bde0: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
bdf0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
be00: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70  .ColumnName, typ
be10: 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20  eof(String));.. 
be20: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
be30: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
be40: 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64  Column.ColumnOrd
be50: 69 6e 61 6c 2c 20 74 79 70 65 6f 66 28 69 6e 74  inal, typeof(int
be60: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
be70: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
be80: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c  aTableColumn.Col
be90: 75 6d 6e 53 69 7a 65 2c 20 74 79 70 65 6f 66 28  umnSize, typeof(
bea0: 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  int));..      tb
beb0: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
bec0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
bed0: 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e  NumericPrecision
bee0: 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d  , typeof(int));.
bef0: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
bf00: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
bf10: 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63  leColumn.Numeric
bf20: 53 63 61 6c 65 2c 20 74 79 70 65 6f 66 28 69 6e  Scale, typeof(in
bf30: 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  t));..      tbl.
bf40: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
bf50: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
bf60: 55 6e 69 71 75 65 2c 20 74 79 70 65 6f 66 28 42  Unique, typeof(B
bf70: 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20  oolean));..     
bf80: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
bf90: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
bfa0: 6d 6e 2e 49 73 4b 65 79 2c 20 74 79 70 65 6f 66  mn.IsKey, typeof
bfb0: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20  (Boolean));..   
bfc0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
bfd0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  dd(SchemaTableOp
bfe0: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73  tionalColumn.Bas
bff0: 65 53 65 72 76 65 72 4e 61 6d 65 2c 20 74 79 70  eServerName, typ
c000: 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20  eof(string));.. 
c010: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c020: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c030: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42  OptionalColumn.B
c040: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 20  aseCatalogName, 
c050: 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b  typeof(String));
c060: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
c070: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
c080: 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f  bleColumn.BaseCo
c090: 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66  lumnName, typeof
c0a0: 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (String));..    
c0b0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c0c0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
c0d0: 75 6d 6e 2e 42 61 73 65 53 63 68 65 6d 61 4e 61  umn.BaseSchemaNa
c0e0: 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e  me, typeof(Strin
c0f0: 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  g));..      tbl.
c100: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
c110: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
c120: 73 65 54 61 62 6c 65 4e 61 6d 65 2c 20 74 79 70  seTableName, 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 44 61 74 61 54 79 70 65 2c  Column.DataType,
c170: 20 74 79 70 65 6f 66 28 54 79 70 65 29 29 3b 0d   typeof(Type));.
c180: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
c190: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
c1a0: 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42  leColumn.AllowDB
c1b0: 4e 75 6c 6c 2c 20 74 79 70 65 6f 66 28 42 6f 6f  Null, typeof(Boo
c1c0: 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74  lean));..      t
c1d0: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
c1e0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
c1f0: 2e 50 72 6f 76 69 64 65 72 54 79 70 65 2c 20 74  .ProviderType, t
c200: 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20  ypeof(int));..  
c210: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c220: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
c230: 6f 6c 75 6d 6e 2e 49 73 41 6c 69 61 73 65 64 2c  olumn.IsAliased,
c240: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
c250: 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
c260: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
c270: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45 78  TableColumn.IsEx
c280: 70 72 65 73 73 69 6f 6e 2c 20 74 79 70 65 6f 66  pression, typeof
c290: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20  (Boolean));..   
c2a0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
c2b0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  dd(SchemaTableOp
c2c0: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41  tionalColumn.IsA
c2d0: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 2c 20 74 79  utoIncrement, ty
c2e0: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d  peof(Boolean));.
c2f0: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
c300: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
c310: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
c320: 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e 2c 20 74  .IsRowVersion, t
c330: 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b  ypeof(Boolean));
c340: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
c350: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
c360: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
c370: 6e 2e 49 73 48 69 64 64 65 6e 2c 20 74 79 70 65  n.IsHidden, type
c380: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
c390: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c3a0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c3b0: 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e 67 2c 20 74  Column.IsLong, t
c3c0: 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b  ypeof(Boolean));
c3d0: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
c3e0: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
c3f0: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
c400: 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 2c 20 74 79  n.IsReadOnly, ty
c410: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d  peof(Boolean));.
c420: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
c430: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
c440: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
c450: 2e 50 72 6f 76 69 64 65 72 53 70 65 63 69 66 69  .ProviderSpecifi
c460: 63 44 61 74 61 54 79 70 65 2c 20 74 79 70 65 6f  cDataType, typeo
c470: 66 28 54 79 70 65 29 29 3b 0d 0a 20 20 20 20 20  f(Type));..     
c480: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c490: 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  (SchemaTableOpti
c4a0: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75  onalColumn.Defau
c4b0: 6c 74 56 61 6c 75 65 2c 20 74 79 70 65 6f 66 28  ltValue, typeof(
c4c0: 6f 62 6a 65 63 74 29 29 3b 0d 0a 20 20 20 20 20  object));..     
c4d0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c4e0: 28 22 44 61 74 61 54 79 70 65 4e 61 6d 65 22 2c  ("DataTypeName",
c4f0: 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29   typeof(string))
c500: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
c510: 75 6d 6e 73 2e 41 64 64 28 22 43 6f 6c 6c 61 74  umns.Add("Collat
c520: 69 6f 6e 54 79 70 65 22 2c 20 74 79 70 65 6f 66  ionType", typeof
c530: 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (string));..    
c540: 20 20 74 62 6c 2e 42 65 67 69 6e 4c 6f 61 64 44    tbl.BeginLoadD
c550: 61 74 61 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ata();....      
c560: 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20  for (int n = 0; 
c570: 6e 20 3c 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b  n < _fieldCount;
c580: 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   n++)..      {..
c590: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 54 79          SQLiteTy
c5a0: 70 65 20 73 71 6c 54 79 70 65 20 3d 20 47 65 74  pe sqlType = Get
c5b0: 53 51 4c 69 74 65 54 79 70 65 28 5f 66 6c 61 67  SQLiteType(_flag
c5c0: 73 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  s, n);....      
c5d0: 20 20 72 6f 77 20 3d 20 74 62 6c 2e 4e 65 77 52    row = tbl.NewR
c5e0: 6f 77 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ow();....       
c5f0: 20 44 62 54 79 70 65 20 74 79 70 20 3d 20 73 71   DbType typ = sq
c600: 6c 54 79 70 65 2e 54 79 70 65 3b 0d 0a 0d 0a 20  lType.Type;.... 
c610: 20 20 20 20 20 20 20 2f 2f 20 44 65 66 61 75 6c         // Defaul
c620: 74 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20 74  t settings for t
c630: 68 65 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20  he column..     
c640: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c650: 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e  leColumn.ColumnN
c660: 61 6d 65 5d 20 3d 20 47 65 74 4e 61 6d 65 28 6e  ame] = GetName(n
c670: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  );..        row[
c680: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c690: 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 5d  n.ColumnOrdinal]
c6a0: 20 3d 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 72   = n;..        r
c6b0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
c6c0: 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d  lumn.ColumnSize]
c6d0: 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74   = SQLiteConvert
c6e0: 2e 44 62 54 79 70 65 54 6f 43 6f 6c 75 6d 6e 53  .DbTypeToColumnS
c6f0: 69 7a 65 28 74 79 70 29 3b 0d 0a 20 20 20 20 20  ize(typ);..     
c700: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c710: 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63  leColumn.Numeric
c720: 50 72 65 63 69 73 69 6f 6e 5d 20 3d 20 53 51 4c  Precision] = SQL
c730: 69 74 65 43 6f 6e 76 65 72 74 2e 44 62 54 79 70  iteConvert.DbTyp
c740: 65 54 6f 4e 75 6d 65 72 69 63 50 72 65 63 69 73  eToNumericPrecis
c750: 69 6f 6e 28 74 79 70 29 3b 0d 0a 20 20 20 20 20  ion(typ);..     
c760: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c770: 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63  leColumn.Numeric
c780: 53 63 61 6c 65 5d 20 3d 20 53 51 4c 69 74 65 43  Scale] = SQLiteC
c790: 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f 4e  onvert.DbTypeToN
c7a0: 75 6d 65 72 69 63 53 63 61 6c 65 28 74 79 70 29  umericScale(typ)
c7b0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53  ;..        row[S
c7c0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
c7d0: 2e 50 72 6f 76 69 64 65 72 54 79 70 65 5d 20 3d  .ProviderType] =
c7e0: 20 73 71 6c 54 79 70 65 2e 54 79 70 65 3b 0d 0a   sqlType.Type;..
c7f0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
c800: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
c810: 4c 6f 6e 67 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a  Long] = false;..
c820: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
c830: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c  maTableColumn.Al
c840: 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 20 74 72 75  lowDBNull] = tru
c850: 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  e;..        row[
c860: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
c870: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64  nalColumn.IsRead
c880: 4f 6e 6c 79 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a  Only] = false;..
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 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
c8b0: 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69  olumn.IsRowVersi
c8c0: 6f 6e 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  on] = false;..  
c8d0: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
c8e0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e  TableColumn.IsUn
c8f0: 69 71 75 65 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a  ique] = false;..
c900: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
c910: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
c920: 4b 65 79 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  Key] = false;.. 
c930: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
c940: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
c950: 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65  lumn.IsAutoIncre
c960: 6d 65 6e 74 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a  ment] = false;..
c970: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
c980: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61  maTableColumn.Da
c990: 74 61 54 79 70 65 5d 20 3d 20 47 65 74 46 69 65  taType] = GetFie
c9a0: 6c 64 54 79 70 65 28 6e 29 3b 0d 0a 20 20 20 20  ldType(n);..    
c9b0: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
c9c0: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
c9d0: 6e 2e 49 73 48 69 64 64 65 6e 5d 20 3d 20 66 61  n.IsHidden] = fa
c9e0: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f  lse;..        ro
c9f0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
ca00: 75 6d 6e 2e 42 61 73 65 53 63 68 65 6d 61 4e 61  umn.BaseSchemaNa
ca10: 6d 65 5d 20 3d 20 5f 62 61 73 65 53 63 68 65 6d  me] = _baseSchem
ca20: 61 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  aName;....      
ca30: 20 20 73 74 72 43 6f 6c 75 6d 6e 20 3d 20 63 6f    strColumn = co
ca40: 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e  lumnToParent[n].
ca50: 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20  ColumnName;..   
ca60: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
ca70: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74  IsNullOrEmpty(st
ca80: 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73  rColumn) == fals
ca90: 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  e) row[SchemaTab
caa0: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c  leColumn.BaseCol
cab0: 75 6d 6e 4e 61 6d 65 5d 20 3d 20 73 74 72 43 6f  umnName] = strCo
cac0: 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lumn;....       
cad0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
cae0: 43 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65 73 73  Column.IsExpress
caf0: 69 6f 6e 5d 20 3d 20 53 74 72 69 6e 67 2e 49 73  ion] = String.Is
cb00: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43  NullOrEmpty(strC
cb10: 6f 6c 75 6d 6e 29 3b 0d 0a 20 20 20 20 20 20 20  olumn);..       
cb20: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
cb30: 43 6f 6c 75 6d 6e 2e 49 73 41 6c 69 61 73 65 64  Column.IsAliased
cb40: 5d 20 3d 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70  ] = (String.Comp
cb50: 61 72 65 28 47 65 74 4e 61 6d 65 28 6e 29 2c 20  are(GetName(n), 
cb60: 73 74 72 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e  strColumn, Strin
cb70: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
cb80: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 21  nalIgnoreCase) !
cb90: 3d 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  = 0);....       
cba0: 20 74 65 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f   temp = columnTo
cbb0: 50 61 72 65 6e 74 5b 6e 5d 2e 54 61 62 6c 65 4e  Parent[n].TableN
cbc0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ame;..        if
cbd0: 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
cbe0: 72 45 6d 70 74 79 28 74 65 6d 70 29 20 3d 3d 20  rEmpty(temp) == 
cbf0: 66 61 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d  false) row[Schem
cc00: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
cc10: 65 54 61 62 6c 65 4e 61 6d 65 5d 20 3d 20 74 65  eTableName] = te
cc20: 6d 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  mp;....        t
cc30: 65 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61  emp = columnToPa
cc40: 72 65 6e 74 5b 6e 5d 2e 44 61 74 61 62 61 73 65  rent[n].Database
cc50: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 69  Name;..        i
cc60: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
cc70: 4f 72 45 6d 70 74 79 28 74 65 6d 70 29 20 3d 3d  OrEmpty(temp) ==
cc80: 20 66 61 6c 73 65 29 20 72 6f 77 5b 53 63 68 65   false) row[Sche
cc90: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
cca0: 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f  olumn.BaseCatalo
ccb0: 67 4e 61 6d 65 5d 20 3d 20 74 65 6d 70 3b 0d 0a  gName] = temp;..
ccc0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
ccd0: 20 64 61 74 61 54 79 70 65 20 3d 20 6e 75 6c 6c   dataType = null
cce0: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66  ;..        // If
ccf0: 20 77 65 20 68 61 76 65 20 61 20 74 61 62 6c 65   we have a table
cd00: 2d 62 6f 75 6e 64 20 63 6f 6c 75 6d 6e 2c 20 65  -bound column, e
cd10: 78 74 72 61 63 74 20 74 68 65 20 65 78 74 72 61  xtract the extra
cd20: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
cd30: 6d 20 69 74 0d 0a 20 20 20 20 20 20 20 20 69 66  m it..        if
cd40: 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
cd50: 72 45 6d 70 74 79 28 73 74 72 43 6f 6c 75 6d 6e  rEmpty(strColumn
cd60: 29 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20  ) == false)..   
cd70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cd80: 20 20 73 74 72 69 6e 67 20 63 6f 6c 6c 53 65 71    string collSeq
cd90: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
cda0: 20 20 20 20 62 6f 6f 6c 20 62 4e 6f 74 4e 75 6c      bool bNotNul
cdb0: 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  l = false;..    
cdc0: 20 20 20 20 20 20 62 6f 6f 6c 20 62 50 72 69 6d        bool bPrim
cdd0: 61 72 79 4b 65 79 20 3d 20 66 61 6c 73 65 3b 0d  aryKey = false;.
cde0: 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  .          bool 
cdf0: 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d  bAutoIncrement =
ce00: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
ce10: 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 53 69     string[] arSi
ce20: 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ze;....         
ce30: 20 2f 2f 20 47 65 74 20 74 68 65 20 63 6f 6c 75   // Get the colu
ce40: 6d 6e 20 6d 65 74 61 20 64 61 74 61 0d 0a 20 20  mn meta data..  
ce50: 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64          _command
ce60: 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c  .Connection._sql
ce70: 2e 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28  .ColumnMetaData(
ce80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73  ..            (s
ce90: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
cea0: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
ceb0: 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e  umn.BaseCatalogN
cec0: 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame],..         
ced0: 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53     (string)row[S
cee0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
cef0: 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 2c  .BaseTableName],
cf00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
cf10: 72 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20 20  rColumn,..      
cf20: 20 20 20 20 20 20 72 65 66 20 64 61 74 61 54 79        ref dataTy
cf30: 70 65 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 2c  pe, ref collSeq,
cf40: 20 72 65 66 20 62 4e 6f 74 4e 75 6c 6c 2c 20 72   ref bNotNull, r
cf50: 65 66 20 62 50 72 69 6d 61 72 79 4b 65 79 2c 20  ef bPrimaryKey, 
cf60: 72 65 66 20 62 41 75 74 6f 49 6e 63 72 65 6d 65  ref bAutoIncreme
cf70: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
cf80: 20 20 69 66 20 28 62 4e 6f 74 4e 75 6c 6c 20 7c    if (bNotNull |
cf90: 7c 20 62 50 72 69 6d 61 72 79 4b 65 79 29 20 72  | bPrimaryKey) r
cfa0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
cfb0: 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c  lumn.AllowDBNull
cfc0: 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  ] = false;....  
cfd0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
cfe0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
cff0: 4b 65 79 5d 20 3d 20 62 50 72 69 6d 61 72 79 4b  Key] = bPrimaryK
d000: 65 79 20 26 26 20 43 6f 75 6e 74 50 61 72 65 6e  ey && CountParen
d010: 74 73 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  ts(parentToColum
d020: 6e 73 29 20 3c 3d 20 31 3b 0d 0a 20 20 20 20 20  ns) <= 1;..     
d030: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
d040: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
d050: 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65  mn.IsAutoIncreme
d060: 6e 74 5d 20 3d 20 62 41 75 74 6f 49 6e 63 72 65  nt] = bAutoIncre
d070: 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ment;..         
d080: 20 72 6f 77 5b 22 43 6f 6c 6c 61 74 69 6f 6e 54   row["CollationT
d090: 79 70 65 22 5d 20 3d 20 63 6f 6c 6c 53 65 71 3b  ype"] = collSeq;
d0a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
d0b0: 20 46 6f 72 20 74 79 70 65 73 20 6c 69 6b 65 20   For types like 
d0c0: 76 61 72 63 68 61 72 28 35 30 29 20 61 6e 64 20  varchar(50) and 
d0d0: 73 75 63 68 2c 20 65 78 74 72 61 63 74 20 74 68  such, extract th
d0e0: 65 20 73 69 7a 65 0d 0a 20 20 20 20 20 20 20 20  e size..        
d0f0: 20 20 61 72 53 69 7a 65 20 3d 20 64 61 74 61 54    arSize = dataT
d100: 79 70 65 2e 53 70 6c 69 74 28 27 28 27 29 3b 0d  ype.Split('(');.
d110: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61  .          if (a
d120: 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31  rSize.Length > 1
d130: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
d140: 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
d150: 54 79 70 65 20 3d 20 61 72 53 69 7a 65 5b 30 5d  Type = arSize[0]
d160: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61  ;..            a
d170: 72 53 69 7a 65 20 3d 20 61 72 53 69 7a 65 5b 31  rSize = arSize[1
d180: 5d 2e 53 70 6c 69 74 28 27 29 27 29 3b 0d 0a 20  ].Split(')');.. 
d190: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
d1a0: 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31  rSize.Length > 1
d1b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
d1c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d1d0: 61 72 53 69 7a 65 20 3d 20 61 72 53 69 7a 65 5b  arSize = arSize[
d1e0: 30 5d 2e 53 70 6c 69 74 28 27 2c 27 2c 20 27 2e  0].Split(',', '.
d1f0: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ');..           
d200: 20 20 20 69 66 20 28 73 71 6c 54 79 70 65 2e 54     if (sqlType.T
d210: 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 42 69  ype == DbType.Bi
d220: 6e 61 72 79 20 7c 7c 20 53 51 4c 69 74 65 43 6f  nary || SQLiteCo
d230: 6e 76 65 72 74 2e 49 73 53 74 72 69 6e 67 44 62  nvert.IsStringDb
d240: 54 79 70 65 28 73 71 6c 54 79 70 65 2e 54 79 70  Type(sqlType.Typ
d250: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
d260: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d270: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
d280: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75  TableColumn.Colu
d290: 6d 6e 53 69 7a 65 5d 20 3d 20 43 6f 6e 76 65 72  mnSize] = Conver
d2a0: 74 2e 54 6f 49 6e 74 33 32 28 61 72 53 69 7a 65  t.ToInt32(arSize
d2b0: 5b 30 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f  [0], CultureInfo
d2c0: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
d2d0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
d2e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
d2f0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
d300: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d310: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
d320: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
d330: 2e 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f  .NumericPrecisio
d340: 6e 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49  n] = Convert.ToI
d350: 6e 74 33 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20  nt32(arSize[0], 
d360: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
d370: 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a  riantCulture);..
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d390: 69 66 20 28 61 72 53 69 7a 65 2e 4c 65 6e 67 74  if (arSize.Lengt
d3a0: 68 20 3e 20 31 29 0d 0a 20 20 20 20 20 20 20 20  h > 1)..        
d3b0: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
d3c0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
d3d0: 4e 75 6d 65 72 69 63 53 63 61 6c 65 5d 20 3d 20  NumericScale] = 
d3e0: 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28  Convert.ToInt32(
d3f0: 61 72 53 69 7a 65 5b 31 5d 2c 20 43 75 6c 74 75  arSize[1], Cultu
d400: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
d410: 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20  Culture);..     
d420: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d430: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d440: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
d450: 20 20 20 20 69 66 20 28 77 61 6e 74 44 65 66 61      if (wantDefa
d460: 75 6c 74 56 61 6c 75 65 29 0d 0a 20 20 20 20 20  ultValue)..     
d470: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d480: 20 20 20 20 2f 2f 20 44 65 74 65 72 6d 69 6e 65      // Determine
d490: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
d4a0: 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ue for the colum
d4b0: 6e 2c 20 77 68 69 63 68 20 73 75 63 6b 73 20 62  n, which sucks b
d4c0: 65 63 61 75 73 65 20 77 65 20 68 61 76 65 20 74  ecause we have t
d4d0: 6f 20 71 75 65 72 79 20 74 68 65 20 73 63 68 65  o query the sche
d4e0: 6d 61 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ma for each colu
d4f0: 6d 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  mn..            
d500: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
d510: 6d 61 6e 64 20 63 6d 64 54 61 62 6c 65 20 3d 20  mand cmdTable = 
d520: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  new SQLiteComman
d530: 64 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  d(HelperMethods.
d540: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c  StringFormat(Cul
d550: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
d560: 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 52 41 47  ntCulture, "PRAG
d570: 4d 41 20 5b 7b 30 7d 5d 2e 54 41 42 4c 45 5f 49  MA [{0}].TABLE_I
d580: 4e 46 4f 28 5b 7b 31 7d 5d 29 22 2c 0d 0a 20 20  NFO([{1}])",..  
d590: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
d5a0: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
d5b0: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61  nalColumn.BaseCa
d5c0: 74 61 6c 6f 67 4e 61 6d 65 5d 2c 0d 0a 20 20 20  talogName],..   
d5d0: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
d5e0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
d5f0: 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 0d  .BaseTableName].
d600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29  .              )
d610: 2c 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  , _command.Conne
d620: 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  ction))..       
d630: 20 20 20 20 20 75 73 69 6e 67 20 28 44 62 44 61       using (DbDa
d640: 74 61 52 65 61 64 65 72 20 72 64 54 61 62 6c 65  taReader rdTable
d650: 20 3d 20 63 6d 64 54 61 62 6c 65 2e 45 78 65 63   = cmdTable.Exec
d660: 75 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20  uteReader())..  
d670: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d680: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69             // Fi
d690: 6e 64 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  nd the matching 
d6a0: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20  column..        
d6b0: 20 20 20 20 20 20 77 68 69 6c 65 20 28 72 64 54        while (rdT
d6c0: 61 62 6c 65 2e 52 65 61 64 28 29 29 0d 0a 20 20  able.Read())..  
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d6f0: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
d700: 65 28 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63  e((string)row[Sc
d710: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
d720: 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 2c  BaseColumnName],
d730: 20 72 64 54 61 62 6c 65 2e 47 65 74 53 74 72 69   rdTable.GetStri
d740: 6e 67 28 31 29 2c 20 53 74 72 69 6e 67 43 6f 6d  ng(1), StringCom
d750: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
d760: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
d770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d780: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d790: 20 20 20 20 20 20 20 69 66 20 28 72 64 54 61 62         if (rdTab
d7a0: 6c 65 2e 49 73 44 42 4e 75 6c 6c 28 34 29 20 3d  le.IsDBNull(4) =
d7b0: 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20  = false)..      
d7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
d7d0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
d7e0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61  ionalColumn.Defa
d7f0: 75 6c 74 56 61 6c 75 65 5d 20 3d 20 72 64 54 61  ultValue] = rdTa
d800: 62 6c 65 5b 34 5d 3b 0d 0a 0d 0a 20 20 20 20 20  ble[4];....     
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
d820: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
d830: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d840: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
d850: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d860: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
d870: 20 2f 2f 20 44 65 74 65 72 6d 69 6e 65 20 49 73   // Determine Is
d880: 55 6e 69 71 75 65 20 70 72 6f 70 65 72 6c 79 2c  Unique properly,
d890: 20 77 68 69 63 68 20 69 73 20 61 20 70 61 69 6e   which is a pain
d8a0: 20 69 6e 20 74 68 65 20 62 75 74 74 21 0d 0a 20   in the butt!.. 
d8b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 77 61 6e           if (wan
d8c0: 74 55 6e 69 71 75 65 49 6e 66 6f 29 0d 0a 20 20  tUniqueInfo)..  
d8d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d8e0: 20 20 20 20 20 20 20 69 66 20 28 28 73 74 72 69         if ((stri
d8f0: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
d900: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
d910: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
d920: 5d 20 21 3d 20 73 74 72 43 61 74 61 6c 6f 67 0d  ] != strCatalog.
d930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  .              |
d940: 7c 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63  | (string)row[Sc
d950: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
d960: 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 20 21  BaseTableName] !
d970: 3d 20 73 74 72 54 61 62 6c 65 29 0d 0a 20 20 20  = strTable)..   
d980: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d990: 20 20 20 20 20 20 20 20 20 20 73 74 72 43 61 74            strCat
d9a0: 61 6c 6f 67 20 3d 20 28 73 74 72 69 6e 67 29 72  alog = (string)r
d9b0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
d9c0: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73  tionalColumn.Bas
d9d0: 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 3b 0d 0a  eCatalogName];..
d9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
d9f0: 72 54 61 62 6c 65 20 3d 20 28 73 74 72 69 6e 67  rTable = (string
da00: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
da10: 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65  Column.BaseTable
da20: 4e 61 6d 65 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name];....      
da30: 20 20 20 20 20 20 20 20 74 62 6c 49 6e 64 65 78          tblIndex
da40: 65 73 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  es = _command.Co
da50: 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53 63 68 65  nnection.GetSche
da60: 6d 61 28 22 49 6e 64 65 78 65 73 22 2c 20 6e 65  ma("Indexes", ne
da70: 77 20 73 74 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20  w string[] {..  
da80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
da90: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
daa0: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
dab0: 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e  umn.BaseCatalogN
dac0: 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame],..         
dad0: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 0d 0a 20 20         null,..  
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
daf0: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
db00: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
db10: 54 61 62 6c 65 4e 61 6d 65 5d 2c 0d 0a 20 20 20  TableName],..   
db20: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
db30: 6c 20 7d 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  l });..         
db40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
db50: 20 20 20 20 66 6f 72 65 61 63 68 20 28 44 61 74      foreach (Dat
db60: 61 52 6f 77 20 72 6f 77 49 6e 64 65 78 65 73 20  aRow rowIndexes 
db70: 69 6e 20 74 62 6c 49 6e 64 65 78 65 73 2e 52 6f  in tblIndexes.Ro
db80: 77 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ws)..           
db90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
dba0: 20 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e    tblIndexColumn
dbb0: 73 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e  s = _command.Con
dbc0: 6e 65 63 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d  nection.GetSchem
dbd0: 61 28 22 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 22  a("IndexColumns"
dbe0: 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b  , new string[] {
dbf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dc00: 20 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63    (string)row[Sc
dc10: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
dc20: 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61  lColumn.BaseCata
dc30: 6c 6f 67 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20  logName],..     
dc40: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
dc50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dc60: 20 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63    (string)row[Sc
dc70: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
dc80: 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 2c 0d  BaseTableName],.
dc90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dca0: 20 28 73 74 72 69 6e 67 29 72 6f 77 49 6e 64 65   (string)rowInde
dcb0: 78 65 73 5b 22 49 4e 44 45 58 5f 4e 41 4d 45 22  xes["INDEX_NAME"
dcc0: 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ],..            
dcd0: 20 20 20 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20      null..      
dce0: 20 20 20 20 20 20 20 20 20 20 7d 29 3b 0d 0a 20            });.. 
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
dd00: 65 61 63 68 20 28 44 61 74 61 52 6f 77 20 72 6f  each (DataRow ro
dd10: 77 43 6f 6c 75 6d 6e 49 6e 64 65 78 20 69 6e 20  wColumnIndex in 
dd20: 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e  tblIndexColumns.
dd30: 52 6f 77 73 29 0d 0a 20 20 20 20 20 20 20 20 20  Rows)..         
dd40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
dd50: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
dd60: 6e 67 2e 43 6f 6d 70 61 72 65 28 53 51 4c 69 74  ng.Compare(SQLit
dd70: 65 43 6f 6e 76 65 72 74 2e 47 65 74 53 74 72 69  eConvert.GetStri
dd80: 6e 67 4f 72 4e 75 6c 6c 28 72 6f 77 43 6f 6c 75  ngOrNull(rowColu
dd90: 6d 6e 49 6e 64 65 78 5b 22 43 4f 4c 55 4d 4e 5f  mnIndex["COLUMN_
dda0: 4e 41 4d 45 22 5d 29 2c 20 73 74 72 43 6f 6c 75  NAME"]), strColu
ddb0: 6d 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  mn, StringCompar
ddc0: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
ddd0: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
ddf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
de00: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
de10: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47            // BUG
de20: 46 49 58 3a 20 4d 61 6b 65 20 73 75 72 65 20 74  FIX: Make sure t
de30: 68 61 74 20 77 65 20 6f 6e 6c 79 20 66 6c 61 67  hat we only flag
de40: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 61 73 20   this column as 
de50: 22 75 6e 69 71 75 65 22 0d 0a 20 20 20 20 20 20  "unique"..      
de60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
de70: 20 20 20 20 20 20 20 69 66 20 77 65 20 61 72 65         if we are
de80: 20 6e 6f 74 20 70 72 6f 63 65 73 73 69 6e 67 20   not processing 
de90: 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20  of some kind of 
dea0: 6d 75 6c 74 69 2d 74 61 62 6c 65 0d 0a 20 20 20  multi-table..   
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dec0: 2f 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 72  /         constr
ded0: 75 63 74 20 28 69 2e 65 2e 20 61 20 6a 6f 69 6e  uct (i.e. a join
dee0: 29 20 62 65 63 61 75 73 65 20 69 6e 20 74 68 61  ) because in tha
def0: 74 20 63 61 73 65 20 77 65 20 6d 75 73 74 0d 0a  t case we must..
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df10: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 61 6c 6c    //         all
df20: 6f 77 20 64 75 70 6c 69 63 61 74 65 20 76 61 6c  ow duplicate val
df30: 75 65 73 20 28 72 65 66 65 72 20 74 6f 20 74 69  ues (refer to ti
df40: 63 6b 65 74 20 5b 37 65 33 66 61 39 33 37 34 34  cket [7e3fa93744
df50: 5d 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ])...           
df60: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
df70: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
df80: 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73  (parentToColumns
df90: 2e 43 6f 75 6e 74 20 3d 3d 20 31 20 26 26 20 74  .Count == 1 && t
dfa0: 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52  blIndexColumns.R
dfb0: 6f 77 73 2e 43 6f 75 6e 74 20 3d 3d 20 31 20 26  ows.Count == 1 &
dfc0: 26 20 28 62 6f 6f 6c 29 72 6f 77 5b 53 63 68 65  & (bool)row[Sche
dfd0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c  maTableColumn.Al
dfe0: 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 3d 20 66 61  lowDBNull] == fa
dff0: 6c 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  lse)..          
e000: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
e010: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
e020: 49 73 55 6e 69 71 75 65 5d 20 3d 20 72 6f 77 49  IsUnique] = rowI
e030: 6e 64 65 78 65 73 5b 22 55 4e 49 51 55 45 22 5d  ndexes["UNIQUE"]
e040: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
e050: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 69 74 73         // If its
e060: 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d   an integer prim
e070: 61 72 79 20 6b 65 79 20 61 6e 64 20 74 68 65 20  ary key and the 
e080: 6f 6e 6c 79 20 70 72 69 6d 61 72 79 20 6b 65 79  only primary key
e090: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 74   in the table, t
e0a0: 68 65 6e 20 69 74 73 20 61 20 72 6f 77 69 64 20  hen its a rowid 
e0b0: 61 6c 69 61 73 20 61 6e 64 20 69 73 20 61 75 74  alias and is aut
e0c0: 6f 69 6e 63 72 65 6d 65 6e 74 0d 0a 20 20 20 20  oincrement..    
e0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
e0e0: 20 4e 4f 54 45 3a 20 20 43 75 72 72 65 6e 74 6c   NOTE:  Currentl
e0f0: 79 20 63 6f 6d 6d 65 6e 74 65 64 20 6f 75 74 20  y commented out 
e100: 62 65 63 61 75 73 65 20 74 68 69 73 20 69 73 20  because this is 
e110: 6e 6f 74 20 61 6c 77 61 79 73 20 74 68 65 20 64  not always the d
e120: 65 73 69 72 65 64 20 62 65 68 61 76 69 6f 72 2e  esired behavior.
e130: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61    For example, a
e140: 20 31 3a 31 20 72 65 6c 61 74 69 6f 6e 73 68 69   1:1 relationshi
e150: 70 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20  p with..        
e160: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
e170: 20 20 20 20 61 6e 6f 74 68 65 72 20 74 61 62 6c      another tabl
e180: 65 2c 20 77 68 65 72 65 20 74 68 65 20 6f 74 68  e, where the oth
e190: 65 72 20 74 61 62 6c 65 20 69 73 20 61 75 74 6f  er table is auto
e1a0: 69 6e 63 72 65 6d 65 6e 74 2c 20 62 75 74 20 74  increment, but t
e1b0: 68 69 73 20 6f 6e 65 20 69 73 20 6e 6f 74 2c 20  his one is not, 
e1c0: 61 6e 64 20 75 73 65 73 20 74 68 65 20 72 6f 77  and uses the row
e1d0: 69 64 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65  id from the othe
e1e0: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...            
e1f0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
e200: 49 74 20 69 73 20 73 61 66 65 72 20 74 6f 20 6f  It is safer to o
e210: 6e 6c 79 20 73 65 74 20 41 75 74 6f 69 6e 63 72  nly set Autoincr
e220: 65 6d 65 6e 74 20 6f 6e 20 74 61 62 6c 65 73 20  ement on tables 
e230: 77 68 65 72 65 20 77 65 27 72 65 20 53 55 52 45  where we're SURE
e240: 20 74 68 65 20 75 73 65 72 20 73 70 65 63 69 66   the user specif
e250: 69 65 64 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  ied AUTOINCREMEN
e260: 54 2c 20 65 76 65 6e 20 69 66 20 69 74 73 20 61  T, even if its a
e270: 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 2e 0d 0a   rowid column...
e280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e290: 20 20 20 20 69 66 20 28 74 62 6c 49 6e 64 65 78      if (tblIndex
e2a0: 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75  Columns.Rows.Cou
e2b0: 6e 74 20 3d 3d 20 31 20 26 26 20 28 62 6f 6f 6c  nt == 1 && (bool
e2c0: 29 72 6f 77 49 6e 64 65 78 65 73 5b 22 50 52 49  )rowIndexes["PRI
e2d0: 4d 41 52 59 5f 4b 45 59 22 5d 20 3d 3d 20 74 72  MARY_KEY"] == tr
e2e0: 75 65 20 26 26 20 53 74 72 69 6e 67 2e 49 73 4e  ue && String.IsN
e2f0: 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74 61 54  ullOrEmpty(dataT
e300: 79 70 65 29 20 3d 3d 20 66 61 6c 73 65 20 26 26  ype) == false &&
e310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e320: 20 20 20 20 20 20 53 74 72 69 6e 67 2e 43 6f 6d        String.Com
e330: 70 61 72 65 28 64 61 74 61 54 79 70 65 2c 20 22  pare(dataType, "
e340: 69 6e 74 65 67 65 72 22 2c 20 53 74 72 69 6e 67  integer", String
e350: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
e360: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
e370: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
e380: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
e3a0: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
e3b0: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
e3c0: 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d  IsAutoIncrement]
e3d0: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
e3f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e400: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
e410: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
e420: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
e430: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
e440: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
e450: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
e460: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
e470: 64 61 74 61 54 79 70 65 29 29 0d 0a 20 20 20 20  dataType))..    
e480: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e490: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
e4a0: 79 20 61 66 66 69 6e 20 3d 20 54 79 70 65 41 66  y affin = TypeAf
e4b0: 66 69 6e 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c  finity.Uninitial
e4c0: 69 7a 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  ized;..         
e4d0: 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 5f 61     dataType = _a
e4e0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
e4f0: 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 5f  sql.ColumnType(_
e500: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
e510: 20 6e 2c 20 72 65 66 20 61 66 66 69 6e 29 3b 0d   n, ref affin);.
e520: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
e530: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
e540: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
e550: 74 79 28 64 61 74 61 54 79 70 65 29 20 3d 3d 20  ty(dataType) == 
e560: 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 20 20  false)..        
e570: 20 20 20 20 72 6f 77 5b 22 44 61 74 61 54 79 70      row["DataTyp
e580: 65 4e 61 6d 65 22 5d 20 3d 20 64 61 74 61 54 79  eName"] = dataTy
e590: 70 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  pe;..        }..
e5a0: 20 20 20 20 20 20 20 20 74 62 6c 2e 52 6f 77 73          tbl.Rows
e5b0: 2e 41 64 64 28 72 6f 77 29 3b 0d 0a 20 20 20 20  .Add(row);..    
e5c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if 
e5d0: 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c  (_keyInfo != nul
e5e0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 5f 6b 65 79  l)..        _key
e5f0: 49 6e 66 6f 2e 41 70 70 65 6e 64 53 63 68 65 6d  Info.AppendSchem
e600: 61 54 61 62 6c 65 28 74 62 6c 29 3b 0d 0a 0d 0a  aTable(tbl);....
e610: 20 20 20 20 20 20 74 62 6c 2e 41 63 63 65 70 74        tbl.Accept
e620: 43 68 61 6e 67 65 73 28 29 3b 0d 0a 20 20 20 20  Changes();..    
e630: 20 20 74 62 6c 2e 45 6e 64 4c 6f 61 64 44 61 74    tbl.EndLoadDat
e640: 61 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  a();....      re
e650: 74 75 72 6e 20 74 62 6c 3b 0d 0a 20 20 20 20 7d  turn tbl;..    }
e660: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
e670: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
e680: 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c  etrieves the col
e690: 75 6d 6e 20 61 73 20 61 20 73 74 72 69 6e 67 0d  umn as a string.
e6a0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
e6b0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
e6c0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
e6d0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
e6e0: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
e6f0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
e700: 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e  string</returns>
e710: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
e720: 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
e730: 53 74 72 69 6e 67 28 69 6e 74 20 69 29 0d 0a 20  String(int i).. 
e740: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
e750: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
e760: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
e770: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
e780: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
e790: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
e7a0: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
e7b0: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
e7c0: 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74  lbacks) == SQLit
e7d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
e7e0: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
e7f0: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
e800: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
e810: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
e820: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
e830: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
e840: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
e850: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
e860: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
e870: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e880: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
e890: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
e8a0: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
e8b0: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
e8c0: 20 20 20 20 20 20 20 20 20 20 22 47 65 74 53 74            "GetSt
e8d0: 72 69 6e 67 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c  ring", null, val
e8e0: 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74  ue), out complet
e8f0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
e900: 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29     if (complete)
e910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e920: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 53    return value.S
e930: 74 72 69 6e 67 56 61 6c 75 65 3b 0d 0a 20 20 20  tringValue;..   
e940: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
e950: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
e960: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
e970: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
e980: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
e990: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
e9a0: 79 49 6e 66 6f 2e 47 65 74 53 74 72 69 6e 67 28  yInfo.GetString(
e9b0: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
e9c0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
e9d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
e9e0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
e9f0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
ea00: 56 65 72 69 66 79 54 65 78 74 41 66 66 69 6e 69  VerifyTextAffini
ea10: 74 79 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e  ty) != SQLiteCon
ea20: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56  nectionFlags.NoV
ea30: 65 72 69 66 79 54 65 78 74 41 66 66 69 6e 69 74  erifyTextAffinit
ea40: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
ea50: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
ea60: 54 79 70 65 2e 53 74 72 69 6e 67 29 3b 0d 0a 0d  Type.String);...
ea70: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
ea80: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
ea90: 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61  ._sql.GetText(_a
eaa0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
eab0: 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  i);..    }....  
eac0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
ead0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
eae0: 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73  es the column as
eaf0: 20 61 6e 20 6f 62 6a 65 63 74 20 63 6f 72 72 65   an object corre
eb00: 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20  sponding to the 
eb10: 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 74  underlying datat
eb20: 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ype of the colum
eb30: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  n..    /// </sum
eb40: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
eb50: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
eb60: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
eb70: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
eb80: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
eb90: 73 3e 6f 62 6a 65 63 74 3c 2f 72 65 74 75 72 6e  s>object</return
eba0: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
ebb0: 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47  verride object G
ebc0: 65 74 56 61 6c 75 65 28 69 6e 74 20 69 29 0d 0a  etValue(int i)..
ebd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
ebe0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
ebf0: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46  .        VerifyF
ec00: 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  orGet();....    
ec10: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
ec20: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
ec30: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
ec40: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
ec50: 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69  llbacks) == SQLi
ec60: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
ec70: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
ec80: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
ec90: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
eca0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
ecb0: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
ecc0: 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c   value = new SQL
ecd0: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
ece0: 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ue();..         
ecf0: 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65     bool complete
ed00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ed10: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
ed20: 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20  Callback(i, new 
ed30: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45  SQLiteReadValueE
ed40: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
ed50: 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 56             "GetV
ed60: 61 6c 75 65 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c  alue", null, val
ed70: 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74  ue), out complet
ed80: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
ed90: 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29     if (complete)
eda0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
edb0: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 56    return value.V
edc0: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  alue;..        }
edd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
ede0: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
edf0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
ee00: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
ee10: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
ee20: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
ee30: 47 65 74 56 61 6c 75 65 28 69 20 2d 20 50 72 69  GetValue(i - Pri
ee40: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
ee50: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
ee60: 20 20 20 53 51 4c 69 74 65 54 79 70 65 20 74 79     SQLiteType ty
ee70: 70 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70  p = GetSQLiteTyp
ee80: 65 28 5f 66 6c 61 67 73 2c 20 69 29 3b 0d 0a 0d  e(_flags, i);...
ee90: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 28 5f  .        if (((_
eea0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
eeb0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65  nnectionFlags.De
eec0: 74 65 63 74 54 65 78 74 41 66 66 69 6e 69 74 79  tectTextAffinity
eed0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
eee0: 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63  ctionFlags.Detec
eef0: 74 54 65 78 74 41 66 66 69 6e 69 74 79 29 20 26  tTextAffinity) &
ef00: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  &..            (
ef10: 28 74 79 70 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  (typ == null) ||
ef20: 20 28 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d   (typ.Affinity =
ef30: 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54  = TypeAffinity.T
ef40: 65 78 74 29 29 29 0d 0a 20 20 20 20 20 20 20 20  ext)))..        
ef50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
ef60: 79 70 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79  yp = GetSQLiteTy
ef70: 70 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pe(..           
ef80: 20 20 20 20 20 74 79 70 2c 20 5f 61 63 74 69 76       typ, _activ
ef90: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
efa0: 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65 53  GetText(_activeS
efb0: 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a  tatement, i));..
efc0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
efd0: 20 20 20 65 6c 73 65 20 69 66 20 28 28 28 5f 66     else if (((_f
efe0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
eff0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74  nectionFlags.Det
f000: 65 63 74 53 74 72 69 6e 67 54 79 70 65 29 20 3d  ectStringType) =
f010: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
f020: 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63 74 53 74  onFlags.DetectSt
f030: 72 69 6e 67 54 79 70 65 29 20 26 26 0d 0a 20 20  ringType) &&..  
f040: 20 20 20 20 20 20 20 20 20 20 28 28 74 79 70 20            ((typ 
f050: 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 53 51 4c 69  == null) || SQLi
f060: 74 65 43 6f 6e 76 65 72 74 2e 49 73 53 74 72 69  teConvert.IsStri
f070: 6e 67 44 62 54 79 70 65 28 74 79 70 2e 54 79 70  ngDbType(typ.Typ
f080: 65 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  e)))..        {.
f090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70  .            typ
f0a0: 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65   = GetSQLiteType
f0b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f0c0: 20 20 20 74 79 70 2c 20 5f 61 63 74 69 76 65 53     typ, _activeS
f0d0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
f0e0: 74 54 65 78 74 28 5f 61 63 74 69 76 65 53 74 61  tText(_activeSta
f0f0: 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20  tement, i));..  
f100: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f110: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
f120: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
f130: 47 65 74 56 61 6c 75 65 28 5f 61 63 74 69 76 65  GetValue(_active
f140: 53 74 61 74 65 6d 65 6e 74 2c 20 5f 66 6c 61 67  Statement, _flag
f150: 73 2c 20 69 2c 20 74 79 70 29 3b 0d 0a 20 20 20  s, i, typ);..   
f160: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
f170: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
f180: 20 52 65 74 72 65 69 76 65 73 20 74 68 65 20 76   Retreives the v
f190: 61 6c 75 65 73 20 6f 66 20 6d 75 6c 74 69 70 6c  alues of multipl
f1a0: 65 20 63 6f 6c 75 6d 6e 73 2c 20 75 70 20 74 6f  e columns, up to
f1b0: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
f1c0: 20 73 75 70 70 6c 69 65 64 20 61 72 72 61 79 0d   supplied array.
f1d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
f1e0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
f1f0: 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73  ram name="values
f200: 22 3e 54 68 65 20 61 72 72 61 79 20 74 6f 20 66  ">The array to f
f210: 69 6c 6c 20 77 69 74 68 20 76 61 6c 75 65 73 20  ill with values 
f220: 66 72 6f 6d 20 74 68 65 20 63 6f 6c 75 6d 6e 73  from the columns
f230: 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
f240: 72 65 73 75 6c 74 73 65 74 3c 2f 70 61 72 61 6d  resultset</param
f250: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
f260: 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f  rns>The number o
f270: 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74 72 69 65  f columns retrie
f280: 76 65 64 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ved</returns>.. 
f290: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
f2a0: 64 65 20 69 6e 74 20 47 65 74 56 61 6c 75 65 73  de int GetValues
f2b0: 28 6f 62 6a 65 63 74 5b 5d 20 76 61 6c 75 65 73  (object[] values
f2c0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
f2d0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
f2e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 4d  ....      int nM
f2f0: 61 78 20 3d 20 46 69 65 6c 64 43 6f 75 6e 74 3b  ax = FieldCount;
f300: 0d 0a 20 20 20 20 20 20 69 66 20 28 76 61 6c 75  ..      if (valu
f310: 65 73 2e 4c 65 6e 67 74 68 20 3c 20 6e 4d 61 78  es.Length < nMax
f320: 29 20 6e 4d 61 78 20 3d 20 76 61 6c 75 65 73 2e  ) nMax = values.
f330: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
f340: 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b   for (int n = 0;
f350: 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0d   n < nMax; n++).
f360: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
f370: 20 20 76 61 6c 75 65 73 5b 6e 5d 20 3d 20 47 65    values[n] = Ge
f380: 74 56 61 6c 75 65 28 6e 29 3b 0d 0a 20 20 20 20  tValue(n);..    
f390: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
f3a0: 75 72 6e 20 6e 4d 61 78 3b 0d 0a 20 20 20 20 7d  urn nMax;..    }
f3b0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
f3c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
f3d0: 65 74 75 72 6e 73 20 61 20 63 6f 6c 6c 65 63 74  eturns a collect
f3e0: 69 6f 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61  ion containing a
f3f0: 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  ll the column na
f400: 6d 65 73 20 61 6e 64 20 76 61 6c 75 65 73 20 66  mes and values f
f410: 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  or the..    /// 
f420: 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 64  current row of d
f430: 61 74 61 20 69 6e 20 74 68 65 20 63 75 72 72 65  ata in the curre
f440: 6e 74 20 72 65 73 75 6c 74 73 65 74 2c 20 69 66  nt resultset, if
f450: 20 61 6e 79 2e 20 20 49 66 20 74 68 65 72 65 20   any.  If there 
f460: 69 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20 63  is no..    /// c
f470: 75 72 72 65 6e 74 20 72 6f 77 20 6f 72 20 6e 6f  urrent row or no
f480: 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73   current results
f490: 65 74 2c 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  et, an exception
f4a0: 20 6d 61 79 20 62 65 20 74 68 72 6f 77 6e 2e 0d   may be thrown..
f4b0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
f4c0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
f4d0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
f4e0: 54 68 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 63  The collection c
f4f0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 63 6f  ontaining the co
f500: 6c 75 6d 6e 20 6e 61 6d 65 20 61 6e 64 20 76 61  lumn name and va
f510: 6c 75 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lue information 
f520: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
f530: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20   current row of 
f540: 64 61 74 61 20 69 6e 20 74 68 65 20 63 75 72 72  data in the curr
f550: 65 6e 74 20 72 65 73 75 6c 74 73 65 74 20 6f 72  ent resultset or
f560: 20 6e 75 6c 6c 20 69 66 20 74 68 69 73 20 69 6e   null if this in
f570: 66 6f 72 6d 61 74 69 6f 6e 0d 0a 20 20 20 20 2f  formation..    /
f580: 2f 2f 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  // cannot be obt
f590: 61 69 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ained...    /// 
f5a0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
f5b0: 70 75 62 6c 69 63 20 4e 61 6d 65 56 61 6c 75 65  public NameValue
f5c0: 43 6f 6c 6c 65 63 74 69 6f 6e 20 47 65 74 56 61  Collection GetVa
f5d0: 6c 75 65 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  lues()..    {.. 
f5e0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
f5f0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
f600: 20 20 20 69 66 20 28 28 5f 61 63 74 69 76 65 53     if ((_activeS
f610: 74 61 74 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c  tatement == null
f620: 29 20 7c 7c 20 28 5f 61 63 74 69 76 65 53 74 61  ) || (_activeSta
f630: 74 65 6d 65 6e 74 2e 5f 73 71 6c 20 3d 3d 20 6e  tement._sql == n
f640: 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
f650: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
f660: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
f670: 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20  eption();....   
f680: 20 20 20 20 20 69 6e 74 20 6e 4d 61 78 20 3d 20       int nMax = 
f690: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
f6a0: 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20  eldCount;..     
f6b0: 20 20 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c     NameValueColl
f6c0: 65 63 74 69 6f 6e 20 72 65 73 75 6c 74 20 3d 20  ection result = 
f6d0: 6e 65 77 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c  new NameValueCol
f6e0: 6c 65 63 74 69 6f 6e 28 6e 4d 61 78 29 3b 0d 0a  lection(nMax);..
f6f0: 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69  ..        for (i
f700: 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 6e 4d  nt n = 0; n < nM
f710: 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20  ax; n++)..      
f720: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f730: 20 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 5f   string name = _
f740: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
f750: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28  _sql.ColumnName(
f760: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
f770: 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  , n);..         
f780: 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20     string value 
f790: 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  = _activeStateme
f7a0: 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28  nt._sql.GetText(
f7b0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
f7c0: 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  , n);....       
f7d0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
f7e0: 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  name, value);.. 
f7f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
f800: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
f810: 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  t;..    }....   
f820: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
f830: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
f840: 54 72 75 65 20 69 66 20 74 68 65 20 72 65 73 75  True if the resu
f850: 6c 74 73 65 74 20 68 61 73 20 72 6f 77 73 20 74  ltset has rows t
f860: 68 61 74 20 63 61 6e 20 62 65 20 66 65 74 63 68  hat can be fetch
f870: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
f880: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c  mmary>..    publ
f890: 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
f8a0: 20 48 61 73 52 6f 77 73 0d 0a 20 20 20 20 7b 0d   HasRows..    {.
f8b0: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
f8c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
f8d0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
f8e0: 20 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73         CheckClos
f8f0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
f900: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
f910: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 73 74  NOTE: If the "st
f920: 69 63 6b 79 22 20 66 6c 61 67 20 68 61 73 20 62  icky" flag has b
f930: 65 65 6e 20 73 65 74 2c 20 75 73 65 20 74 68 65  een set, use the
f940: 20 6e 65 77 20 62 65 68 61 76 69 6f 72 2c 0d 0a   new behavior,..
f950: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
f960: 20 77 68 69 63 68 20 72 65 74 75 72 6e 73 20 6e   which returns n
f970: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 72 65  on-zero if there
f980: 20 77 65 72 65 20 65 76 65 72 20 61 6e 79 20 72   were ever any r
f990: 6f 77 73 20 69 6e 0d 0a 20 20 20 20 20 20 20 20  ows in..        
f9a0: 2f 2f 20 20 20 20 20 20 20 74 68 65 20 61 73 73  //       the ass
f9b0: 6f 63 69 61 74 65 64 20 72 65 73 75 6c 74 20 73  ociated result s
f9c0: 65 74 73 2e 20 20 47 65 6e 65 72 61 6c 6c 79 2c  ets.  Generally,
f9d0: 20 74 68 69 73 20 66 6c 61 67 20 69 73 20 6f 6e   this flag is on
f9e0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ly..        //  
f9f0: 20 20 20 20 20 75 73 65 66 75 6c 20 77 68 65 6e       useful when
fa00: 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79   it is necessary
fa10: 20 74 6f 20 72 65 74 61 69 6e 20 63 6f 6d 70 61   to retain compa
fa20: 74 69 62 69 6c 69 74 79 20 77 69 74 68 0d 0a 20  tibility with.. 
fa30: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
fa40: 6f 74 68 65 72 20 41 44 4f 2e 4e 45 54 20 70 72  other ADO.NET pr
fa50: 6f 76 69 64 65 72 73 20 74 68 61 74 20 75 73 65  oviders that use
fa60: 20 74 68 65 73 65 20 73 61 6d 65 20 73 65 6d 61   these same sema
fa70: 6e 74 69 63 73 20 66 6f 72 0d 0a 20 20 20 20 20  ntics for..     
fa80: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
fa90: 48 61 73 52 6f 77 73 20 70 72 6f 70 65 72 74 79  HasRows property
faa0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
fab0: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
fac0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
fad0: 63 74 69 6f 6e 46 6c 61 67 73 2e 53 74 69 63 6b  ctionFlags.Stick
fae0: 79 48 61 73 52 6f 77 73 29 20 3d 3d 20 53 51 4c  yHasRows) == SQL
faf0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
fb00: 67 73 2e 53 74 69 63 6b 79 48 61 73 52 6f 77 73  gs.StickyHasRows
fb10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  )..          ret
fb20: 75 72 6e 20 28 28 5f 72 65 61 64 69 6e 67 53 74  urn ((_readingSt
fb30: 61 74 65 20 21 3d 20 31 29 20 7c 7c 20 28 5f 73  ate != 1) || (_s
fb40: 74 65 70 43 6f 75 6e 74 20 3e 20 30 29 29 3b 0d  tepCount > 0));.
fb50: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
fb60: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
fb70: 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61  This is the defa
fb80: 75 6c 74 20 62 65 68 61 76 69 6f 72 2e 20 20 49  ult behavior.  I
fb90: 74 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  t returns non-ze
fba0: 72 6f 20 6f 6e 6c 79 20 69 66 0d 0a 20 20 20 20  ro only if..    
fbb0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 72      //       mor
fbc0: 65 20 72 6f 77 73 20 61 72 65 20 61 76 61 69 6c  e rows are avail
fbd0: 61 62 6c 65 20 28 69 2e 65 2e 20 61 20 63 61 6c  able (i.e. a cal
fbe0: 6c 20 74 6f 20 74 68 65 20 52 65 61 64 20 6d 65  l to the Read me
fbf0: 74 68 6f 64 20 69 73 0d 0a 20 20 20 20 20 20 20  thod is..       
fc00: 20 2f 2f 20 20 20 20 20 20 20 65 78 70 65 63 74   //       expect
fc10: 65 64 20 74 6f 20 73 75 63 63 65 65 64 29 2e 20  ed to succeed). 
fc20: 20 50 72 69 6f 72 20 74 6f 20 74 68 65 20 69 6e   Prior to the in
fc30: 74 72 6f 64 75 63 74 69 6f 6e 20 6f 66 20 74 68  troduction of th
fc40: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  e..        //   
fc50: 20 20 20 20 22 73 74 69 63 6b 79 22 20 66 6c 61      "sticky" fla
fc60: 67 2c 20 74 68 69 73 20 69 73 20 68 6f 77 20 74  g, this is how t
fc70: 68 69 73 20 70 72 6f 70 65 72 74 79 20 68 61 73  his property has
fc80: 20 61 6c 77 61 79 73 20 77 6f 72 6b 65 64 2e 0d   always worked..
fc90: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
fca0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f 72 65       return (_re
fcb0: 61 64 69 6e 67 53 74 61 74 65 20 21 3d 20 31 29  adingState != 1)
fcc0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
fcd0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
fce0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
fcf0: 52 65 74 75 72 6e 73 20 54 72 75 65 20 69 66 20  Returns True if 
fd00: 74 68 65 20 64 61 74 61 20 72 65 61 64 65 72 20  the data reader 
fd10: 69 73 20 63 6c 6f 73 65 64 0d 0a 20 20 20 20 2f  is closed..    /
fd20: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
fd30: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
fd40: 64 65 20 62 6f 6f 6c 20 49 73 43 6c 6f 73 65 64  de bool IsClosed
fd50: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
fd60: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
fd70: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 28 5f 63  ed(); return (_c
fd80: 6f 6d 6d 61 6e 64 20 3d 3d 20 6e 75 6c 6c 29 3b  ommand == null);
fd90: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
fda0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
fdb0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
fdc0: 54 72 75 65 20 69 66 20 74 68 65 20 73 70 65 63  True if the spec
fdd0: 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  ified column is 
fde0: 6e 75 6c 6c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  null..    /// </
fdf0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
fe00: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
fe10: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
fe20: 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
fe30: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
fe40: 75 72 6e 73 3e 54 72 75 65 20 6f 72 20 46 61 6c  urns>True or Fal
fe50: 73 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  se</returns>..  
fe60: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
fe70: 65 20 62 6f 6f 6c 20 49 73 44 42 4e 75 6c 6c 28  e bool IsDBNull(
fe80: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
fe90: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
fea0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
feb0: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
fec0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
fed0: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
fee0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
fef0: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
ff00: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
ff10: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
ff20: 49 73 44 42 4e 75 6c 6c 28 69 20 2d 20 50 72 69  IsDBNull(i - Pri
ff30: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
ff40: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
ff50: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
ff60: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
ff70: 49 73 4e 75 6c 6c 28 5f 61 63 74 69 76 65 53 74  IsNull(_activeSt
ff80: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20  atement, i);..  
ff90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
ffa0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
ffb0: 2f 20 4d 6f 76 65 73 20 74 6f 20 74 68 65 20 6e  / Moves to the n
ffc0: 65 78 74 20 72 65 73 75 6c 74 73 65 74 20 69 6e  ext resultset in
ffd0: 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 2d 72 65   multiple row-re
ffe0: 74 75 72 6e 69 6e 67 20 53 51 4c 20 63 6f 6d 6d  turning SQL comm
fff0: 61 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  and...    /// </
10000 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
10010 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20  / <returns>True 
10020 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77  if the command w
10030 61 73 20 73 75 63 63 65 73 73 66 75 6c 20 61 6e  as successful an
10040 64 20 61 20 6e 65 77 20 72 65 73 75 6c 74 73 65  d a new resultse
10050 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  t is available, 
10060 46 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e  False otherwise.
10070 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
10080 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
10090 62 6f 6f 6c 20 4e 65 78 74 52 65 73 75 6c 74 28  bool NextResult(
100a0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
100b0 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
100c0 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  ..      CheckClo
100d0 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 69 66  sed();..      if
100e0 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73   (_throwOnDispos
100f0 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ed) SQLiteComman
10100 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64  d.Check(_command
10110 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69  );....      SQLi
10120 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
10130 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
10140 69 6e 74 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0d  int fieldCount;.
10150 0a 20 20 20 20 20 20 62 6f 6f 6c 20 73 63 68 65  .      bool sche
10160 6d 61 4f 6e 6c 79 20 3d 20 28 28 5f 63 6f 6d 6d  maOnly = ((_comm
10170 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f  andBehavior & Co
10180 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 63  mmandBehavior.Sc
10190 68 65 6d 61 4f 6e 6c 79 29 20 21 3d 20 30 29 3b  hemaOnly) != 0);
101a0 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20  ....      while 
101b0 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d  (true)..      {.
101c0 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d  .        if (stm
101d0 74 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63  t == null && _ac
101e0 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 21 3d  tiveStatement !=
101f0 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76 65   null && _active
10200 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 20 21  Statement._sql !
10210 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76  = null && _activ
10220 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
10230 49 73 4f 70 65 6e 28 29 29 0d 0a 20 20 20 20 20  IsOpen())..     
10240 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10250 2f 2f 20 52 65 73 65 74 20 74 68 65 20 70 72 65  // Reset the pre
10260 76 69 6f 75 73 6c 79 2d 65 78 65 63 75 74 65 64  viously-executed
10270 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20   statement..    
10280 20 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d        if (!schem
10290 61 4f 6e 6c 79 29 20 5f 61 63 74 69 76 65 53 74  aOnly) _activeSt
102a0 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 52 65 73  atement._sql.Res
102b0 65 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  et(_activeStatem
102c0 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ent);....       
102d0 20 20 20 2f 2f 20 49 66 20 77 65 27 72 65 20 6f     // If we're o
102e0 6e 6c 79 20 73 75 70 70 6f 73 65 64 20 74 6f 20  nly supposed to 
102f0 72 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20  return a single 
10300 72 6f 77 73 65 74 2c 20 73 74 65 70 20 74 68 72  rowset, step thr
10310 6f 75 67 68 20 61 6c 6c 20 72 65 6d 61 69 6e 69  ough all remaini
10320 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e  ng statements on
10330 63 65 20 75 6e 74 69 6c 0d 0a 20 20 20 20 20 20  ce until..      
10340 20 20 20 20 2f 2f 20 74 68 65 79 20 61 72 65 20      // they are 
10350 61 6c 6c 20 64 6f 6e 65 20 61 6e 64 20 72 65 74  all done and ret
10360 75 72 6e 20 66 61 6c 73 65 20 74 6f 20 69 6e 64  urn false to ind
10370 69 63 61 74 65 20 6e 6f 20 6d 6f 72 65 20 72 65  icate no more re
10380 73 75 6c 74 73 65 74 73 20 65 78 69 73 74 2e 0d  sultsets exist..
10390 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28  .          if ((
103a0 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72  _commandBehavior
103b0 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69   & CommandBehavi
103c0 6f 72 2e 53 69 6e 67 6c 65 52 65 73 75 6c 74 29  or.SingleResult)
103d0 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   != 0)..        
103e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
103f0 20 66 6f 72 20 28 3b 20 3b 20 29 0d 0a 20 20 20   for (; ; )..   
10400 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10410 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d            stmt =
10420 20 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61   _command.GetSta
10430 74 65 6d 65 6e 74 28 5f 61 63 74 69 76 65 53 74  tement(_activeSt
10440 61 74 65 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31  atementIndex + 1
10450 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
10460 20 20 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75    if (stmt == nu
10470 6c 6c 29 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20  ll) break;..    
10480 20 20 20 20 20 20 20 20 20 20 5f 61 63 74 69 76            _activ
10490 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b  eStatementIndex+
104a0 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  +;....          
104b0 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f      if (!schemaO
104c0 6e 6c 79 20 26 26 20 73 74 6d 74 2e 5f 73 71 6c  nly && stmt._sql
104d0 2e 53 74 65 70 28 73 74 6d 74 29 29 20 5f 73 74  .Step(stmt)) _st
104e0 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20 20  epCount++;..    
104f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
10500 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f  mt._sql.ColumnCo
10510 75 6e 74 28 73 74 6d 74 29 20 3d 3d 20 30 29 0d  unt(stmt) == 0).
10520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
10530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10540 20 20 69 6e 74 20 63 68 61 6e 67 65 73 20 3d 20    int changes = 
10550 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
10560 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
10570 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  y = false;..    
10580 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10590 73 74 6d 74 2e 54 72 79 47 65 74 43 68 61 6e 67  stmt.TryGetChang
105a0 65 73 28 72 65 66 20 63 68 61 6e 67 65 73 2c 20  es(ref changes, 
105b0 72 65 66 20 72 65 61 64 4f 6e 6c 79 29 29 0d 0a  ref readOnly))..
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
105e0 20 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e       if (!readOn
105f0 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly)..           
10600 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
10620 20 28 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20   (_rowsAffected 
10630 3d 3d 20 2d 31 29 20 5f 72 6f 77 73 41 66 66 65  == -1) _rowsAffe
10640 63 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  cted = 0;..     
10650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
10660 72 6f 77 73 41 66 66 65 63 74 65 64 20 2b 3d 20  rowsAffected += 
10670 63 68 61 6e 67 65 73 3b 0d 0a 20 20 20 20 20 20  changes;..      
10680 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
10690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
106a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
106b0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
106c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
106d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
106e0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
106f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
10710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
10720 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 29 20 73   (!schemaOnly) s
10730 74 6d 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28 73  tmt._sql.Reset(s
10740 74 6d 74 29 3b 20 2f 2f 20 47 6f 74 74 61 20 72  tmt); // Gotta r
10750 65 73 65 74 20 61 66 74 65 72 20 65 76 65 72 79  eset after every
10760 20 73 74 65 70 20 74 6f 20 72 65 6c 65 61 73 65   step to release
10770 20 61 6e 79 20 6c 6f 63 6b 73 20 61 6e 64 20 73   any locks and s
10780 75 63 68 21 0d 0a 20 20 20 20 20 20 20 20 20 20  uch!..          
10790 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
107a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
107b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
107c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
107d0 20 20 2f 2f 20 47 65 74 20 74 68 65 20 6e 65 78    // Get the nex
107e0 74 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 65  t statement to e
107f0 78 65 63 75 74 65 0d 0a 20 20 20 20 20 20 20 20  xecute..        
10800 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  stmt = _command.
10810 47 65 74 53 74 61 74 65 6d 65 6e 74 28 5f 61 63  GetStatement(_ac
10820 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64  tiveStatementInd
10830 65 78 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20  ex + 1);....    
10840 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20      // If we've 
10850 72 65 61 63 68 65 64 20 74 68 65 20 65 6e 64 20  reached the end 
10860 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
10870 73 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2c  s, return false,
10880 20 6e 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74 73   no more results
10890 65 74 73 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ets..        if 
108a0 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (stmt == null)..
108b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
108c0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
108d0 20 20 20 2f 2f 20 49 66 20 77 65 20 77 65 72 65     // If we were
108e0 20 6f 6e 20 61 20 63 75 72 72 65 6e 74 20 72 65   on a current re
108f0 73 75 6c 74 73 65 74 2c 20 73 65 74 20 74 68 65  sultset, set the
10900 20 73 74 61 74 65 20 74 6f 20 22 64 6f 6e 65 20   state to "done 
10910 72 65 61 64 69 6e 67 22 20 66 6f 72 20 69 74 0d  reading" for it.
10920 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 72 65  .        if (_re
10930 61 64 69 6e 67 53 74 61 74 65 20 3c 20 31 29 0d  adingState < 1).
10940 0a 20 20 20 20 20 20 20 20 20 20 5f 72 65 61 64  .          _read
10950 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 0d 0a 0d  ingState = 1;...
10960 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65  .        _active
10970 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b  StatementIndex++
10980 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 69 65  ;....        fie
10990 6c 64 43 6f 75 6e 74 20 3d 20 73 74 6d 74 2e 5f  ldCount = stmt._
109a0 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28  sql.ColumnCount(
109b0 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  stmt);....      
109c0 20 20 2f 2f 20 49 66 20 74 68 65 20 73 74 61 74    // If the stat
109d0 65 6d 65 6e 74 20 69 73 20 6e 6f 74 20 61 20 73  ement is not a s
109e0 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
109f0 6f 72 20 77 65 27 72 65 20 6e 6f 74 20 72 65 74  or we're not ret
10a00 72 69 65 76 69 6e 67 20 73 63 68 65 6d 61 20 6f  rieving schema o
10a10 6e 6c 79 2c 20 74 68 65 6e 20 70 65 72 66 6f 72  nly, then perfor
10a20 6d 20 74 68 65 20 69 6e 69 74 69 61 6c 20 73 74  m the initial st
10a30 65 70 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ep..        if (
10a40 21 73 63 68 65 6d 61 4f 6e 6c 79 20 7c 7c 20 28  !schemaOnly || (
10a50 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d 20 30 29  fieldCount == 0)
10a60 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
10a70 20 20 20 20 20 20 20 20 69 66 20 28 21 73 63 68          if (!sch
10a80 65 6d 61 4f 6e 6c 79 20 26 26 20 73 74 6d 74 2e  emaOnly && stmt.
10a90 5f 73 71 6c 2e 53 74 65 70 28 73 74 6d 74 29 29  _sql.Step(stmt))
10aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
10ab0 20 20 20 20 20 20 20 20 20 20 20 5f 73 74 65 70             _step
10ac0 43 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20 20 20 20  Count++;..      
10ad0 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74        _readingSt
10ae0 61 74 65 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  ate = -1;..     
10af0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10b00 20 20 65 6c 73 65 20 69 66 20 28 66 69 65 6c 64    else if (field
10b10 43 6f 75 6e 74 20 3d 3d 20 30 29 20 2f 2f 20 4e  Count == 0) // N
10b20 6f 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 2c  o rows returned,
10b30 20 69 66 20 66 69 65 6c 64 43 6f 75 6e 74 20 69   if fieldCount i
10b40 73 20 7a 65 72 6f 2c 20 73 6b 69 70 20 74 6f 20  s zero, skip to 
10b50 74 68 65 20 6e 65 78 74 20 73 74 61 74 65 6d 65  the next stateme
10b60 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  nt..          {.
10b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
10b80 20 63 68 61 6e 67 65 73 20 3d 20 30 3b 0d 0a 20   changes = 0;.. 
10b90 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
10ba0 72 65 61 64 4f 6e 6c 79 20 3d 20 66 61 6c 73 65  readOnly = false
10bb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ;..            i
10bc0 66 20 28 73 74 6d 74 2e 54 72 79 47 65 74 43 68  f (stmt.TryGetCh
10bd0 61 6e 67 65 73 28 72 65 66 20 63 68 61 6e 67 65  anges(ref change
10be0 73 2c 20 72 65 66 20 72 65 61 64 4f 6e 6c 79 29  s, ref readOnly)
10bf0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
10c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10c10 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a  if (!readOnly)..
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
10c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c40 20 69 66 20 28 5f 72 6f 77 73 41 66 66 65 63 74   if (_rowsAffect
10c50 65 64 20 3d 3d 20 2d 31 29 20 5f 72 6f 77 73 41  ed == -1) _rowsA
10c60 66 66 65 63 74 65 64 20 3d 20 30 3b 0d 0a 20 20  ffected = 0;..  
10c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 72                _r
10c80 6f 77 73 41 66 66 65 63 74 65 64 20 2b 3d 20 63  owsAffected += c
10c90 68 61 6e 67 65 73 3b 0d 0a 20 20 20 20 20 20 20  hanges;..       
10ca0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10cb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
10cc0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
10cd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10ce0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
10cf0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
10d00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10d10 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c    if (!schemaOnl
10d20 79 29 20 73 74 6d 74 2e 5f 73 71 6c 2e 52 65 73  y) stmt._sql.Res
10d30 65 74 28 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20  et(stmt);..     
10d40 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
10d50 20 2f 2f 20 53 6b 69 70 20 74 68 69 73 20 63 6f   // Skip this co
10d60 6d 6d 61 6e 64 20 61 6e 64 20 6d 6f 76 65 20 74  mmand and move t
10d70 6f 20 74 68 65 20 6e 65 78 74 2c 20 69 74 20 77  o the next, it w
10d80 61 73 20 6e 6f 74 20 61 20 72 6f 77 2d 72 65 74  as not a row-ret
10d90 75 72 6e 69 6e 67 20 72 65 73 75 6c 74 73 65 74  urning resultset
10da0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
10db0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 2f 2f           else //
10dc0 20 4e 6f 20 72 6f 77 73 2c 20 66 69 65 6c 64 43   No rows, fieldC
10dd0 6f 75 6e 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  ount is non-zero
10de0 20 73 6f 20 73 74 6f 70 20 68 65 72 65 0d 0a 20   so stop here.. 
10df0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10e00 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67          _reading
10e10 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f 20 54 68  State = 1; // Th
10e20 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72  is command retur
10e30 6e 65 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20  ned columns but 
10e40 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 72 65 74 75  no rows, so retu
10e50 72 6e 20 74 72 75 65 2c 20 62 75 74 20 48 61 73  rn true, but Has
10e60 52 6f 77 73 20 3d 20 66 61 6c 73 65 20 61 6e 64  Rows = false and
10e70 20 52 65 61 64 28 29 20 72 65 74 75 72 6e 73 20   Read() returns 
10e80 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  false..         
10e90 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
10ea0 0a 20 20 20 20 20 20 20 20 2f 2f 20 41 68 68 2c  .        // Ahh,
10eb0 20 77 65 20 66 6f 75 6e 64 20 61 20 72 6f 77 2d   we found a row-
10ec0 72 65 74 75 72 6e 69 6e 67 20 72 65 73 75 6c 74  returning result
10ed0 73 65 74 20 65 6c 69 67 69 62 6c 65 20 74 6f 20  set eligible to 
10ee0 62 65 20 72 65 74 75 72 6e 65 64 21 0d 0a 20 20  be returned!..  
10ef0 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
10f00 74 65 6d 65 6e 74 20 3d 20 73 74 6d 74 3b 0d 0a  tement = stmt;..
10f10 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 43 6f          _fieldCo
10f20 75 6e 74 20 3d 20 66 69 65 6c 64 43 6f 75 6e 74  unt = fieldCount
10f30 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 69 65 6c  ;..        _fiel
10f40 64 49 6e 64 65 78 65 73 20 3d 20 6e 65 77 20 44  dIndexes = new D
10f50 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67  ictionary<string
10f60 2c 20 69 6e 74 3e 28 53 74 72 69 6e 67 43 6f 6d  , int>(StringCom
10f70 70 61 72 65 72 2e 4f 72 64 69 6e 61 6c 49 67 6e  parer.OrdinalIgn
10f80 6f 72 65 43 61 73 65 29 3b 0d 0a 20 20 20 20 20  oreCase);..     
10f90 20 20 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72     _fieldTypeArr
10fa0 61 79 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 54  ay = new SQLiteT
10fb0 79 70 65 5b 50 72 69 76 61 74 65 56 69 73 69 62  ype[PrivateVisib
10fc0 6c 65 46 69 65 6c 64 43 6f 75 6e 74 5d 3b 0d 0a  leFieldCount];..
10fd0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
10fe0 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20  commandBehavior 
10ff0 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  & CommandBehavio
11000 72 2e 4b 65 79 49 6e 66 6f 29 20 21 3d 20 30 29  r.KeyInfo) != 0)
11010 0d 0a 20 20 20 20 20 20 20 20 20 20 4c 6f 61 64  ..          Load
11020 4b 65 79 49 6e 66 6f 28 29 3b 0d 0a 0d 0a 20 20  KeyInfo();....  
11030 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
11040 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  e;..      }..   
11050 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
11060 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
11070 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61 74 74   This method att
11080 65 6d 70 74 73 20 74 6f 20 71 75 65 72 79 20 74  empts to query t
11090 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
110a0 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
110b0 64 20 77 69 74 68 0d 0a 20 20 20 20 2f 2f 2f 20  d with..    /// 
110c0 74 68 65 20 64 61 74 61 20 72 65 61 64 65 72 20  the data reader 
110d0 69 6e 20 75 73 65 2e 20 20 49 66 20 74 68 65 20  in use.  If the 
110e0 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d 6d 61  underlying comma
110f0 6e 64 20 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e  nd or connection
11100 20 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 75 6e 61   is..    /// una
11110 76 61 69 6c 61 62 6c 65 2c 20 61 20 6e 75 6c 6c  vailable, a null
11120 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72   value will be r
11130 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f  eturned...    //
11140 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
11150 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
11160 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e  .    /// The con
11170 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 2d  nection object -
11180 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20 69  OR- null if it i
11190 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2e 0d 0a  s unavailable...
111a0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
111b0 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
111c0 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 43 6f   static SQLiteCo
111d0 6e 6e 65 63 74 69 6f 6e 20 47 65 74 43 6f 6e 6e  nnection GetConn
111e0 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ection(..       
111f0 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
11200 72 20 64 61 74 61 52 65 61 64 65 72 0d 0a 20 20  r dataReader..  
11210 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
11220 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
11230 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11240 20 20 20 20 69 66 20 28 64 61 74 61 52 65 61 64      if (dataRead
11250 65 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  er != null)..   
11260 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11270 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
11280 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
11290 64 20 3d 20 64 61 74 61 52 65 61 64 65 72 2e 5f  d = dataReader._
112a0 63 6f 6d 6d 61 6e 64 3b 0d 0a 0d 0a 20 20 20 20  command;....    
112b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
112c0 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29  command != null)
112d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
112e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
112f0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
11300 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
11310 74 69 6f 6e 20 3d 20 63 6f 6d 6d 61 6e 64 2e 43  tion = command.C
11320 6f 6e 6e 65 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20  onnection;....  
11330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11340 20 20 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e    if (connection
11350 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
11360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11370 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 6e 65 63     return connec
11380 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  tion;..         
11390 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
113a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
113b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63   }..        catc
113c0 68 20 28 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  h (ObjectDispose
113d0 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20  dException)..   
113e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
113f0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
11400 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  g...        }...
11410 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
11420 6e 75 6c 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  null;..    }....
11430 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
11440 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
11450 65 76 65 73 20 74 68 65 20 53 51 4c 69 74 65 54  eves the SQLiteT
11460 79 70 65 20 66 6f 72 20 61 20 67 69 76 65 6e 20  ype for a given 
11470 63 6f 6c 75 6d 6e 20 61 6e 64 20 72 6f 77 20 76  column and row v
11480 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  alue...    /// <
11490 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
114a0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
114b0 6f 6c 64 54 79 70 65 22 3e 0d 0a 20 20 20 20 2f  oldType">..    /
114c0 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  // The original 
114d0 53 51 4c 69 74 65 54 79 70 65 20 73 74 72 75 63  SQLiteType struc
114e0 74 75 72 65 2c 20 62 61 73 65 64 20 6f 6e 6c 79  ture, based only
114f0 20 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0d   on the column..
11500 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
11510 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
11520 6d 20 6e 61 6d 65 3d 22 74 65 78 74 22 3e 0d 0a  m name="text">..
11530 20 20 20 20 2f 2f 2f 20 54 68 65 20 74 65 78 74      /// The text
11540 75 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ual value of the
11550 20 63 6f 6c 75 6d 6e 20 66 6f 72 20 61 20 67 69   column for a gi
11560 76 65 6e 20 72 6f 77 2e 0d 0a 20 20 20 20 2f 2f  ven row...    //
11570 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
11580 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
11590 20 20 20 2f 2f 2f 20 54 68 65 20 53 51 4c 69 74     /// The SQLit
115a0 65 54 79 70 65 20 73 74 72 75 63 74 75 72 65 2e  eType structure.
115b0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
115c0 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  rns>..    privat
115d0 65 20 53 51 4c 69 74 65 54 79 70 65 20 47 65 74  e SQLiteType Get
115e0 53 51 4c 69 74 65 54 79 70 65 28 0d 0a 20 20 20  SQLiteType(..   
115f0 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65 20       SQLiteType 
11600 6f 6c 64 54 79 70 65 2c 20 2f 2a 20 50 41 53 53  oldType, /* PASS
11610 2d 54 48 52 4f 55 47 48 20 2a 2f 0d 0a 20 20 20  -THROUGH */..   
11620 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74       string text
11630 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
11640 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
11650 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f  SQLiteConvert.Lo
11660 6f 6b 73 4c 69 6b 65 4e 75 6c 6c 28 74 65 78 74  oksLikeNull(text
11670 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
11680 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74  return new SQLit
11690 65 54 79 70 65 28 54 79 70 65 41 66 66 69 6e 69  eType(TypeAffini
116a0 74 79 2e 4e 75 6c 6c 2c 20 44 62 54 79 70 65 2e  ty.Null, DbType.
116b0 4f 62 6a 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20  Object);....    
116c0 20 20 20 20 69 66 20 28 53 51 4c 69 74 65 43 6f      if (SQLiteCo
116d0 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 49  nvert.LooksLikeI
116e0 6e 74 36 34 28 74 65 78 74 29 29 0d 0a 20 20 20  nt64(text))..   
116f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11700 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 28 54  new SQLiteType(T
11710 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
11720 34 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29  4, DbType.Int64)
11730 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
11740 28 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c  (SQLiteConvert.L
11750 6f 6f 6b 73 4c 69 6b 65 44 6f 75 62 6c 65 28 74  ooksLikeDouble(t
11760 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ext))..         
11770 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51     return new SQ
11780 4c 69 74 65 54 79 70 65 28 54 79 70 65 41 66 66  LiteType(TypeAff
11790 69 6e 69 74 79 2e 44 6f 75 62 6c 65 2c 20 44 62  inity.Double, Db
117a0 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b 0d 0a 0d  Type.Double);...
117b0 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 61  .        if ((_a
117c0 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 21  ctiveStatement !
117d0 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20  = null) &&..    
117e0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
117f0 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 44  nvert.LooksLikeD
11800 61 74 65 54 69 6d 65 28 5f 61 63 74 69 76 65 53  ateTime(_activeS
11810 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2c 20 74  tatement._sql, t
11820 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ext))..        {
11830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
11840 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 54  turn new SQLiteT
11850 79 70 65 28 54 79 70 65 41 66 66 69 6e 69 74 79  ype(TypeAffinity
11860 2e 44 61 74 65 54 69 6d 65 2c 20 44 62 54 79 70  .DateTime, DbTyp
11870 65 2e 44 61 74 65 54 69 6d 65 29 3b 0d 0a 20 20  e.DateTime);..  
11880 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
11890 20 20 20 72 65 74 75 72 6e 20 6f 6c 64 54 79 70     return oldTyp
118a0 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
118b0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
118c0 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
118d0 73 20 74 68 65 20 53 51 4c 69 74 65 54 79 70 65  s the SQLiteType
118e0 20 66 6f 72 20 61 20 67 69 76 65 6e 20 63 6f 6c   for a given col
118f0 75 6d 6e 2c 20 61 6e 64 20 63 61 63 68 65 73 20  umn, and caches 
11900 69 74 20 74 6f 20 61 76 6f 69 64 20 72 65 70 65  it to avoid repe
11910 74 65 74 69 76 65 20 69 6e 74 65 72 6f 70 20 63  tetive interop c
11920 61 6c 6c 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  alls...    /// <
11930 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
11940 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
11950 66 6c 61 67 73 22 3e 54 68 65 20 66 6c 61 67 73  flags">The flags
11960 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
11970 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e   the parent conn
11980 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 3c 2f  ection object.</
11990 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
119a0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
119b0 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
119c0 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
119d0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
119e0 6e 73 3e 41 20 53 51 4c 69 74 65 54 79 70 65 20  ns>A SQLiteType 
119f0 73 74 72 75 63 74 75 72 65 3c 2f 72 65 74 75 72  structure</retur
11a00 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ns>..    private
11a10 20 53 51 4c 69 74 65 54 79 70 65 20 47 65 74 53   SQLiteType GetS
11a20 51 4c 69 74 65 54 79 70 65 28 53 51 4c 69 74 65  QLiteType(SQLite
11a30 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
11a40 66 6c 61 67 73 2c 20 69 6e 74 20 69 29 0d 0a 20  flags, int i).. 
11a50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
11a60 4c 69 74 65 54 79 70 65 20 74 79 70 20 3d 20 5f  LiteType typ = _
11a70 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69  fieldTypeArray[i
11a80 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  ];....        if
11a90 20 28 74 79 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (typ == null)..
11aa0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11ab0 20 20 20 20 20 20 20 2f 2f 20 49 6e 69 74 69 61         // Initia
11ac0 6c 69 7a 65 20 74 68 69 73 20 63 6f 6c 75 6d 6e  lize this column
11ad0 27 73 20 66 69 65 6c 64 20 74 79 70 65 20 69 6e  's field type in
11ae0 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  stance..        
11af0 20 20 20 20 74 79 70 20 3d 20 5f 66 69 65 6c 64      typ = _field
11b00 54 79 70 65 41 72 72 61 79 5b 69 5d 20 3d 20 6e  TypeArray[i] = n
11b10 65 77 20 53 51 4c 69 74 65 54 79 70 65 28 29 3b  ew SQLiteType();
11b20 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
11b30 20 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 74         // If not
11b40 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68   initialized, th
11b50 65 6e 20 66 65 74 63 68 20 74 68 65 20 64 65 63  en fetch the dec
11b60 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 20 64 61 74  lared column dat
11b70 61 74 79 70 65 20 61 6e 64 20 61 74 74 65 6d 70  atype and attemp
11b80 74 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 0d  t to convert it.
11b90 0a 20 20 20 20 20 20 20 20 2f 2f 20 74 6f 20 61  .        // to a
11ba0 20 6b 6e 6f 77 6e 20 44 62 54 79 70 65 2e 0d 0a   known DbType...
11bb0 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e          if (typ.
11bc0 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65  Affinity == Type
11bd0 41 66 66 69 6e 69 74 79 2e 55 6e 69 6e 69 74 69  Affinity.Uniniti
11be0 61 6c 69 7a 65 64 29 0d 0a 20 20 20 20 20 20 20  alized)..       
11bf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11c00 74 79 70 2e 54 79 70 65 20 3d 20 53 51 4c 69 74  typ.Type = SQLit
11c10 65 43 6f 6e 76 65 72 74 2e 54 79 70 65 4e 61 6d  eConvert.TypeNam
11c20 65 54 6f 44 62 54 79 70 65 28 0d 0a 20 20 20 20  eToDbType(..    
11c30 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 43              GetC
11c40 6f 6e 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c  onnection(this),
11c50 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
11c60 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70  t._sql.ColumnTyp
11c70 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
11c80 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65      _activeState
11c90 6d 65 6e 74 2c 20 69 2c 20 72 65 66 20 74 79 70  ment, i, ref typ
11ca0 2e 41 66 66 69 6e 69 74 79 29 2c 20 66 6c 61 67  .Affinity), flag
11cb0 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  s);..        }..
11cc0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
11cd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11ce0 20 20 20 20 20 74 79 70 2e 41 66 66 69 6e 69 74       typ.Affinit
11cf0 79 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65  y = _activeState
11d00 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
11d10 41 66 66 69 6e 69 74 79 28 0d 0a 20 20 20 20 20  Affinity(..     
11d20 20 20 20 20 20 20 20 20 20 20 20 5f 61 63 74 69             _acti
11d30 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
11d40 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
11d50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 79         return ty
11d60 70 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  p;..    }....   
11d70 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
11d80 20 20 20 20 2f 2f 2f 20 52 65 61 64 73 20 74 68      /// Reads th
11d90 65 20 6e 65 78 74 20 72 6f 77 20 66 72 6f 6d 20  e next row from 
11da0 74 68 65 20 72 65 73 75 6c 74 73 65 74 0d 0a 20  the resultset.. 
11db0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
11dc0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
11dd0 72 6e 73 3e 54 72 75 65 20 69 66 20 61 20 6e 65  rns>True if a ne
11de0 77 20 72 6f 77 20 77 61 73 20 73 75 63 63 65 73  w row was succes
11df0 73 66 75 6c 6c 79 20 6c 6f 61 64 65 64 20 61 6e  sfully loaded an
11e00 64 20 69 73 20 72 65 61 64 79 20 66 6f 72 20 70  d is ready for p
11e10 72 6f 63 65 73 73 69 6e 67 3c 2f 72 65 74 75 72  rocessing</retur
11e20 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
11e30 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 52 65  override bool Re
11e40 61 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ad()..    {..   
11e50 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
11e60 28 29 3b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b  ();..      Check
11e70 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  Closed();..     
11e80 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73   if (_throwOnDis
11e90 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d  posed) SQLiteCom
11ea0 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d  mand.Check(_comm
11eb0 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  and);....      i
11ec0 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61  f ((_commandBeha
11ed0 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65  vior & CommandBe
11ee0 68 61 76 69 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c  havior.SchemaOnl
11ef0 79 29 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  y) != 0)..      
11f00 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
11f10 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 72 65  ...      if (_re
11f20 61 64 69 6e 67 53 74 61 74 65 20 3d 3d 20 2d 31  adingState == -1
11f30 29 20 2f 2f 20 46 69 72 73 74 20 73 74 65 70 20  ) // First step 
11f40 77 61 73 20 61 6c 72 65 61 64 79 20 64 6f 6e 65  was already done
11f50 20 61 74 20 74 68 65 20 4e 65 78 74 52 65 73 75   at the NextResu
11f60 6c 74 28 29 20 6c 65 76 65 6c 2c 20 73 6f 20 64  lt() level, so d
11f70 6f 6e 27 74 20 73 74 65 70 20 61 67 61 69 6e 2c  on't step again,
11f80 20 6a 75 73 74 20 72 65 74 75 72 6e 20 74 72 75   just return tru
11f90 65 2e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  e...      {..   
11fa0 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61       _readingSta
11fb0 74 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  te = 0;..       
11fc0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
11fd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c       }..      el
11fe0 73 65 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53  se if (_readingS
11ff0 74 61 74 65 20 3d 3d 20 30 29 20 2f 2f 20 41 63  tate == 0) // Ac
12000 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67 20 72  tively reading r
12010 6f 77 73 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ows..      {..  
12020 20 20 20 20 20 20 2f 2f 20 44 6f 6e 27 74 20 72        // Don't r
12030 65 61 64 20 61 20 6e 65 77 20 72 6f 77 20 69 66  ead a new row if
12040 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 62 65 68   the command beh
12050 61 76 69 6f 72 20 64 69 63 74 61 74 65 73 20 53  avior dictates S
12060 69 6e 67 6c 65 52 6f 77 2e 20 20 57 65 27 76 65  ingleRow.  We've
12070 20 61 6c 72 65 61 64 79 20 72 65 61 64 20 74 68   already read th
12080 65 20 66 69 72 73 74 20 72 6f 77 2e 0d 0a 20 20  e first row...  
12090 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d        if ((_comm
120a0 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f  andBehavior & Co
120b0 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 69  mmandBehavior.Si
120c0 6e 67 6c 65 52 6f 77 29 20 3d 3d 20 30 29 0d 0a  ngleRow) == 0)..
120d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
120e0 20 20 20 20 20 69 66 20 28 5f 61 63 74 69 76 65       if (_active
120f0 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 53  Statement._sql.S
12100 74 65 70 28 5f 61 63 74 69 76 65 53 74 61 74 65  tep(_activeState
12110 6d 65 6e 74 29 20 3d 3d 20 74 72 75 65 29 0d 0a  ment) == true)..
12120 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12130 20 20 20 20 20 20 20 20 20 5f 73 74 65 70 43 6f           _stepCo
12140 75 6e 74 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20  unt++;....      
12150 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
12160 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
12170 20 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79 49             _keyI
12180 6e 66 6f 2e 52 65 73 65 74 28 29 3b 0d 0a 0d 0a  nfo.Reset();....
12190 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
121a0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
121b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
121c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 72 65 61  ....        _rea
121d0 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 20 2f  dingState = 1; /
121e0 2f 20 46 69 6e 69 73 68 65 64 20 72 65 61 64 69  / Finished readi
121f0 6e 67 20 72 6f 77 73 0d 0a 20 20 20 20 20 20 7d  ng rows..      }
12200 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
12210 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a   false;..    }..
12220 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
12230 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
12240 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
12250 6f 66 20 72 6f 77 73 20 61 66 66 65 63 74 65 64  of rows affected
12260 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
12270 74 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64  t being executed
12280 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76  ...    /// The v
12290 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 6d 61  alue returned ma
122a0 79 20 6e 6f 74 20 62 65 20 61 63 63 75 72 61 74  y not be accurat
122b0 65 20 66 6f 72 20 44 44 4c 20 73 74 61 74 65 6d  e for DDL statem
122c0 65 6e 74 73 2e 20 20 41 6c 73 6f 2c 20 69 74 0d  ents.  Also, it.
122d0 0a 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 62 65  .    /// will be
122e0 20 2d 31 20 66 6f 72 20 61 6e 79 20 73 74 61 74   -1 for any stat
122f0 65 6d 65 6e 74 20 74 68 61 74 20 64 6f 65 73 20  ement that does 
12300 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64  not modify the d
12310 61 74 61 62 61 73 65 20 28 65 2e 67 2e 0d 0a 20  atabase (e.g... 
12320 20 20 20 2f 2f 2f 20 53 45 4c 45 43 54 29 2e 20     /// SELECT). 
12330 20 49 66 20 61 6e 20 6f 74 68 65 72 77 69 73 65   If an otherwise
12340 20 72 65 61 64 2d 6f 6e 6c 79 20 73 74 61 74 65   read-only state
12350 6d 65 6e 74 20 6d 6f 64 69 66 69 65 73 20 74 68  ment modifies th
12360 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  e database..    
12370 2f 2f 2f 20 69 6e 64 69 72 65 63 74 6c 79 20 28  /// indirectly (
12380 65 2e 67 2e 20 76 69 61 20 61 20 76 69 72 74 75  e.g. via a virtu
12390 61 6c 20 74 61 62 6c 65 20 6f 72 20 75 73 65 72  al table or user
123a0 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
123b0 6e 29 2c 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  n), the..    ///
123c0 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
123d0 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0d 0a 20  is undefined... 
123e0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
123f0 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
12400 65 72 72 69 64 65 20 69 6e 74 20 52 65 63 6f 72  erride int Recor
12410 64 73 41 66 66 65 63 74 65 64 0d 0a 20 20 20 20  dsAffected..    
12420 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43  {..      get { C
12430 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
12440 72 65 74 75 72 6e 20 5f 72 6f 77 73 41 66 66 65  return _rowsAffe
12450 63 74 65 64 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a  cted; }..    }..
12460 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
12470 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 64  ry>..    /// Ind
12480 65 78 65 72 20 74 6f 20 72 65 74 72 69 65 76 65  exer to retrieve
12490 20 64 61 74 61 20 66 72 6f 6d 20 61 20 63 6f 6c   data from a col
124a0 75 6d 6e 20 67 69 76 65 6e 20 69 74 73 20 6e 61  umn given its na
124b0 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  me..    /// </su
124c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
124d0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d  <param name="nam
124e0 65 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  e">The name of t
124f0 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
12500 72 69 65 76 65 20 64 61 74 61 20 66 6f 72 3c 2f  rieve data for</
12510 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
12520 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 76 61 6c  <returns>The val
12530 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ue contained in 
12540 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75  the column</retu
12550 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
12560 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
12570 20 74 68 69 73 5b 73 74 72 69 6e 67 20 6e 61 6d   this[string nam
12580 65 5d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e]..    {..     
12590 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
125a0 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 47  osed(); return G
125b0 65 74 56 61 6c 75 65 28 47 65 74 4f 72 64 69 6e  etValue(GetOrdin
125c0 61 6c 28 6e 61 6d 65 29 29 3b 20 7d 0d 0a 20 20  al(name)); }..  
125d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
125e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
125f0 2f 20 49 6e 64 65 78 65 72 20 74 6f 20 72 65 74  / Indexer to ret
12600 72 69 65 76 65 20 64 61 74 61 20 66 72 6f 6d 20  rieve data from 
12610 61 20 63 6f 6c 75 6d 6e 20 67 69 76 65 6e 20 69  a column given i
12620 74 73 20 69 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ts i..    /// </
12630 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
12640 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
12650 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
12660 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
12670 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
12680 75 72 6e 73 3e 54 68 65 20 76 61 6c 75 65 20 63  urns>The value c
12690 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
126a0 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e  column</returns>
126b0 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
126c0 72 72 69 64 65 20 6f 62 6a 65 63 74 20 74 68 69  rride object thi
126d0 73 5b 69 6e 74 20 69 5d 0d 0a 20 20 20 20 7b 0d  s[int i]..    {.
126e0 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65  .      get { Che
126f0 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
12700 74 75 72 6e 20 47 65 74 56 61 6c 75 65 28 69 29  turn GetValue(i)
12710 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ; }..    }....  
12720 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 4c    private void L
12730 6f 61 64 4b 65 79 49 6e 66 6f 28 29 0d 0a 20 20  oadKeyInfo()..  
12740 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
12750 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c  (_keyInfo != nul
12760 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
12770 20 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79 49             _keyI
12780 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  nfo.Dispose();..
12790 20 20 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79              _key
127a0 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Info = null;..  
127b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
127c0 20 20 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 65     _keyInfo = ne
127d0 77 20 53 51 4c 69 74 65 4b 65 79 52 65 61 64 65  w SQLiteKeyReade
127e0 72 28 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  r(_command.Conne
127f0 63 74 69 6f 6e 2c 20 74 68 69 73 2c 20 5f 61 63  ction, this, _ac
12800 74 69 76 65 53 74 61 74 65 6d 65 6e 74 29 3b 0d  tiveStatement);.
12810 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a  .    }..  }..}..