System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 0cf57a2894040e377671472d67d69ffe113af6fe:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75  ns.Generic;..  u
0180: 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c  sing System.Coll
0190: 65 63 74 69 6f 6e 73 2e 53 70 65 63 69 61 6c 69  ections.Speciali
01a0: 7a 65 64 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  zed;..  using Sy
01b0: 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 75 73  stem.Data;..  us
01c0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
01d0: 43 6f 6d 6d 6f 6e 3b 0d 0a 20 20 75 73 69 6e 67  Common;..  using
01e0: 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a   System.Globaliz
01f0: 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20  ation;....  /// 
0200: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  <summary>..  ///
0210: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
0220: 74 61 74 69 6f 6e 20 6f 66 20 44 62 44 61 74 61  tation of DbData
0230: 52 65 61 64 65 72 2e 0d 0a 20 20 2f 2f 2f 20 3c  Reader...  /// <
0240: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62  /summary>..  pub
0250: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
0260: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
0270: 72 20 3a 20 44 62 44 61 74 61 52 65 61 64 65 72  r : DbDataReader
0280: 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ..  {..    /// <
0290: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
02a0: 2f 20 55 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d  / Underlying com
02b0: 6d 61 6e 64 20 74 68 69 73 20 72 65 61 64 65 72  mand this reader
02c0: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 0d   is attached to.
02d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
02e0: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
02f0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 5f   SQLiteCommand _
0300: 63 6f 6d 6d 61 6e 64 3b 0d 0a 20 20 20 20 2f 2f  command;..    //
0310: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0320: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 70   /// The flags p
0330: 65 72 74 61 69 6e 69 6e 67 20 74 6f 20 74 68 65  ertaining to the
0340: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6e 6e   associated conn
0350: 65 63 74 69 6f 6e 20 28 76 69 61 20 74 68 65 20  ection (via the 
0360: 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 2f  command)...    /
0370: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0380: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0390: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
03a0: 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20 2f 2f   _flags;..    //
03b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
03c0: 20 2f 2f 2f 20 49 6e 64 65 78 20 6f 66 20 74 68   /// Index of th
03d0: 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
03e0: 65 6e 74 20 69 6e 20 74 68 65 20 63 6f 6d 6d 61  ent in the comma
03f0: 6e 64 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nd being process
0400: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
0410: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
0420: 61 74 65 20 69 6e 74 20 5f 61 63 74 69 76 65 53  ate int _activeS
0430: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 3b 0d 0a  tatementIndex;..
0440: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0450: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65  >..    /// Curre
0460: 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  nt statement bei
0470: 6e 67 20 52 65 61 64 28 29 0d 0a 20 20 20 20 2f  ng Read()..    /
0480: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0490: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
04a0: 65 53 74 61 74 65 6d 65 6e 74 20 5f 61 63 74 69  eStatement _acti
04b0: 76 65 53 74 61 74 65 6d 65 6e 74 3b 0d 0a 20 20  veStatement;..  
04c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
04d0: 0a 20 20 20 20 2f 2f 2f 20 53 74 61 74 65 20 6f  .    /// State o
04e0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  f the current st
04f0: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72  atement being pr
0500: 6f 63 65 73 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  ocessed...    //
0510: 2f 20 2d 31 20 3d 20 46 69 72 73 74 20 53 74 65  / -1 = First Ste
0520: 70 28 29 20 65 78 65 63 75 74 65 64 2c 20 73 6f  p() executed, so
0530: 20 74 68 65 20 66 69 72 73 74 20 52 65 61 64 28   the first Read(
0540: 29 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65  ) will be ignore
0550: 64 0d 0a 20 20 20 20 2f 2f 2f 20 20 30 20 3d 20  d..    ///  0 = 
0560: 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67  Actively reading
0570: 0d 0a 20 20 20 20 2f 2f 2f 20 20 31 20 3d 20 46  ..    ///  1 = F
0580: 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 0d  inished reading.
0590: 0a 20 20 20 20 2f 2f 2f 20 20 32 20 3d 20 4e 6f  .    ///  2 = No
05a0: 6e 2d 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  n-row-returning 
05b0: 73 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 20 72 65  statement, no re
05c0: 63 6f 72 64 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cords..    /// <
05d0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
05e0: 72 69 76 61 74 65 20 69 6e 74 20 5f 72 65 61 64  rivate int _read
05f0: 69 6e 67 53 74 61 74 65 3b 0d 0a 20 20 20 20 2f  ingState;..    /
0600: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0610: 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20    /// Number of 
0620: 72 65 63 6f 72 64 73 20 61 66 66 65 63 74 65 64  records affected
0630: 20 62 79 20 74 68 65 20 69 6e 73 65 72 74 2f 75   by the insert/u
0640: 70 64 61 74 65 20 73 74 61 74 65 6d 65 6e 74 73  pdate statements
0650: 20 65 78 65 63 75 74 65 64 20 6f 6e 20 74 68 65   executed on the
0660: 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 2f 2f   command..    //
0670: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0680: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 5f 72    private int _r
0690: 6f 77 73 41 66 66 65 63 74 65 64 3b 0d 0a 20 20  owsAffected;..  
06a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
06b0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 75 6e 74 20 6f  .    /// Count o
06c0: 66 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d 6e  f fields (column
06d0: 73 29 20 69 6e 20 74 68 65 20 72 6f 77 2d 72 65  s) in the row-re
06e0: 74 75 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e  turning statemen
06f0: 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
0700: 67 20 70 72 6f 63 65 73 73 65 64 0d 0a 20 20 20  g processed..   
0710: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0720: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
0730: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20   _fieldCount;.. 
0740: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0750: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
0760: 6d 62 65 72 20 6f 66 20 63 61 6c 6c 73 20 74 6f  mber of calls to
0770: 20 53 74 65 70 28 29 20 74 68 61 74 20 68 61 76   Step() that hav
0780: 65 20 72 65 74 75 72 6e 65 64 20 74 72 75 65 20  e returned true 
0790: 28 69 2e 65 2e 20 74 68 65 20 6e 75 6d 62 65 72  (i.e. the number
07a0: 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0d 0a 20   of rows that.. 
07b0: 20 20 20 2f 2f 2f 20 68 61 76 65 20 62 65 65 6e     /// have been
07c0: 20 72 65 61 64 20 69 6e 20 74 68 65 20 63 75 72   read in the cur
07d0: 72 65 6e 74 20 72 65 73 75 6c 74 20 73 65 74 29  rent result set)
07e0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
07f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0800: 74 65 20 69 6e 74 20 5f 73 74 65 70 43 6f 75 6e  te int _stepCoun
0810: 74 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  t;..    /// <sum
0820: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d  mary>..    /// M
0830: 61 70 73 20 74 68 65 20 66 69 65 6c 64 20 28 63  aps the field (c
0840: 6f 6c 75 6d 6e 29 20 6e 61 6d 65 73 20 74 6f 20  olumn) names to 
0850: 74 68 65 69 72 20 63 6f 72 72 65 73 70 6f 6e 64  their correspond
0860: 69 6e 67 20 69 6e 64 65 78 65 73 20 77 69 74 68  ing indexes with
0870: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0d  in the results..
0880: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0890: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
08a0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
08b0: 6e 67 2c 20 69 6e 74 3e 20 5f 66 69 65 6c 64 49  ng, int> _fieldI
08c0: 6e 64 65 78 65 73 3b 0d 0a 20 20 20 20 2f 2f 2f  ndexes;..    ///
08d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
08e0: 2f 2f 2f 20 44 61 74 61 74 79 70 65 73 20 6f 66  /// Datatypes of
08f0: 20 61 63 74 69 76 65 20 66 69 65 6c 64 73 20 28   active fields (
0900: 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74 68 65 20  columns) in the 
0910: 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
0920: 74 2c 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  t, used for type
0930: 2d 72 65 73 74 72 69 63 74 69 6e 67 20 64 61 74  -restricting dat
0940: 61 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  a..    /// </sum
0950: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0960: 74 65 20 53 51 4c 69 74 65 54 79 70 65 5b 5d 20  te SQLiteType[] 
0970: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 3b  _fieldTypeArray;
0980: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0990: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
09a0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
09b0: 68 65 20 64 61 74 61 72 65 61 64 65 72 0d 0a 20  he datareader.. 
09c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
09d0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 43  >..    private C
09e0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 5f  ommandBehavior _
09f0: 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 3b  commandBehavior;
0a00: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0a10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
0a20: 66 20 73 65 74 2c 20 74 68 65 6e 20 64 69 73 70  f set, then disp
0a30: 6f 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61  ose of the comma
0a40: 6e 64 20 6f 62 6a 65 63 74 20 77 68 65 6e 20 74  nd object when t
0a50: 68 65 20 72 65 61 64 65 72 20 69 73 20 66 69 6e  he reader is fin
0a60: 69 73 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ished..    /// <
0a70: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
0a80: 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 64 69  nternal bool _di
0a90: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 3b 0d 0a 0d  sposeCommand;...
0aa0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0ab0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73  y>..    /// If s
0ac0: 65 74 2c 20 74 68 65 6e 20 72 61 69 73 65 20 61  et, then raise a
0ad0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 68 65 6e  n exception when
0ae0: 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61   the object is a
0af0: 63 63 65 73 73 65 64 20 61 66 74 65 72 20 62 65  ccessed after be
0b00: 69 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  ing disposed... 
0b10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0b20: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0b30: 62 6f 6f 6c 20 5f 74 68 72 6f 77 4f 6e 44 69 73  bool _throwOnDis
0b40: 70 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  posed;....    //
0b50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0b60: 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66   /// An array of
0b70: 20 72 6f 77 69 64 27 73 20 66 6f 72 20 74 68 65   rowid's for the
0b80: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
0b90: 74 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61  t if CommandBeha
0ba0: 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 20 69 73 20  vior.KeyInfo is 
0bb0: 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
0bc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0bd0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0be0: 65 4b 65 79 52 65 61 64 65 72 20 5f 6b 65 79 49  eKeyReader _keyI
0bf0: 6e 66 6f 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  nfo;....    /// 
0c00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0c10: 2f 2f 20 4d 61 74 63 68 65 73 20 74 68 65 20 76  // Matches the v
0c20: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  ersion of the co
0c30: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
0c40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0c50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20     internal int 
0c60: 5f 76 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  _version;....   
0c70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0c80: 20 20 20 20 2f 2f 2f 20 54 68 65 20 22 73 74 75      /// The "stu
0c90: 62 22 20 28 69 2e 65 2e 20 70 6c 61 63 65 68 6f  b" (i.e. placeho
0ca0: 6c 64 65 72 29 20 62 61 73 65 20 73 63 68 65 6d  lder) base schem
0cb0: 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 77 68  a name to use wh
0cc0: 65 6e 20 72 65 74 75 72 6e 69 6e 67 0d 0a 20 20  en returning..  
0cd0: 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 73 63 68    /// column sch
0ce0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ema information.
0cf0: 20 20 4d 61 74 63 68 65 73 20 74 68 65 20 62 61    Matches the ba
0d00: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 75  se schema name u
0d10: 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  sed by the..    
0d20: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 63  /// associated c
0d30: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
0d40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0d50: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
0d60: 6e 67 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61  ng _baseSchemaNa
0d70: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  me;....    /// <
0d80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0d90: 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74  / Internal const
0da0: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
0db0: 7a 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  zes the dataread
0dc0: 65 72 20 61 6e 64 20 73 65 74 73 20 75 70 20 74  er and sets up t
0dd0: 6f 20 62 65 67 69 6e 20 65 78 65 63 75 74 69 6e  o begin executin
0de0: 67 20 73 74 61 74 65 6d 65 6e 74 73 0d 0a 20 20  g statements..  
0df0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0e00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0e10: 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65 20   name="cmd">The 
0e20: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74 68  SQLiteCommand th
0e30: 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20 69  is data reader i
0e40: 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20  s for</param>.. 
0e50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e60: 6d 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20  me="behave">The 
0e70: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
0e80: 72 20 6f 66 20 74 68 65 20 64 61 74 61 20 72 65  r of the data re
0e90: 61 64 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ader</param>..  
0ea0: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
0eb0: 65 44 61 74 61 52 65 61 64 65 72 28 53 51 4c 69  eDataReader(SQLi
0ec0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43  teCommand cmd, C
0ed0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 62  ommandBehavior b
0ee0: 65 68 61 76 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ehave)..    {.. 
0ef0: 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69 73       _throwOnDis
0f00: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
0f10: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20       _command = 
0f20: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 5f 76 65 72  cmd;..      _ver
0f30: 73 69 6f 6e 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  sion = _command.
0f40: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 76 65 72 73  Connection._vers
0f50: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 5f 62 61 73  ion;..      _bas
0f60: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 5f 63  eSchemaName = _c
0f70: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
0f80: 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  n._baseSchemaNam
0f90: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 63 6f 6d  e;....      _com
0fa0: 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 3d 20 62  mandBehavior = b
0fb0: 65 68 61 76 65 3b 0d 0a 20 20 20 20 20 20 5f 61  ehave;..      _a
0fc0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
0fd0: 64 65 78 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  dex = -1;..     
0fe0: 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d   _rowsAffected =
0ff0: 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65   -1;....      Re
1000: 66 72 65 73 68 46 6c 61 67 73 28 29 3b 0d 0a 0d  freshFlags();...
1010: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
1020: 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
1030: 64 28 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  d(GetConnection(
1040: 74 68 69 73 29 2c 0d 0a 20 20 20 20 20 20 20 20  this),..        
1050: 20 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e    new Connection
1060: 45 76 65 6e 74 41 72 67 73 28 53 51 4c 69 74 65  EventArgs(SQLite
1070: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
1080: 79 70 65 2e 4e 65 77 44 61 74 61 52 65 61 64 65  ype.NewDataReade
1090: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 75  r,..          nu
10a0: 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61  ll, null, _comma
10b0: 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c 2c 20  nd, this, null, 
10c0: 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  null, new object
10d0: 5b 5d 20 7b 20 62 65 68 61 76 65 20 7d 29 29 3b  [] { behave }));
10e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 63  ....      if (_c
10f0: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
1100: 0a 20 20 20 20 20 20 20 20 20 20 4e 65 78 74 52  .          NextR
1110: 65 73 75 6c 74 28 29 3b 0d 0a 20 20 20 20 7d 0d  esult();..    }.
1120: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1190: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
11a0: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
11b0: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
11c0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
11d0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
11e0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
11f0: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
1200: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
1210: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
1220: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
1230: 64 20 26 26 20 5f 74 68 72 6f 77 4f 6e 44 69 73  d && _throwOnDis
1240: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
1250: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
1260: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
1270: 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c  ption(typeof(SQL
1280: 69 74 65 44 61 74 61 52 65 61 64 65 72 29 2e 4e  iteDataReader).N
1290: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
12a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1310: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1320: 0d 0a 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73  ..    /// Dispos
1330: 65 20 6f 66 20 61 6c 6c 20 72 65 73 6f 75 72 63  e of all resourc
1340: 65 73 20 75 73 65 64 20 62 79 20 74 68 69 73 20  es used by this 
1350: 64 61 74 61 72 65 61 64 65 72 2e 0d 0a 20 20 20  datareader...   
1360: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1380: 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22  name="disposing"
1390: 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70  ></param>..    p
13a0: 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64  rotected overrid
13b0: 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  e void Dispose(b
13c0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
13d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
13e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
13f0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1400: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1410: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1420: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
1430: 72 67 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  rgs(SQLiteConnec
1440: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 44 69  tionEventType.Di
1450: 73 70 6f 73 69 6e 67 44 61 74 61 52 65 61 64 65  sposingDataReade
1460: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
1470: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d  null, null, _com
1480: 6d 61 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c  mand, this, null
1490: 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65  , null, new obje
14a0: 63 74 5b 5d 20 7b 20 64 69 73 70 6f 73 69 6e 67  ct[] { disposing
14b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ,..            d
14c0: 69 73 70 6f 73 65 64 2c 20 5f 63 6f 6d 6d 61 6e  isposed, _comman
14d0: 64 42 65 68 61 76 69 6f 72 2c 20 5f 72 65 61 64  dBehavior, _read
14e0: 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f 77 73 41  ingState, _rowsA
14f0: 66 66 65 63 74 65 64 2c 20 5f 73 74 65 70 43 6f  ffected, _stepCo
1500: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
1510: 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 20 5f    _fieldCount, _
1520: 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 2c 20  disposeCommand, 
1530: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
1540: 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   }));....       
1550: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1570: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1580: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
15a0: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15d0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1610: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1620: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1630: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1640: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1650: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1680: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
16d0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
16e0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
16f0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1740: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1760: 4f 54 45 3a 20 46 69 78 20 66 6f 72 20 74 69 63  OTE: Fix for tic
1770: 6b 65 74 20 5b 65 31 62 32 65 30 66 37 36 39 5d  ket [e1b2e0f769]
1780: 2c 20 64 6f 20 4e 4f 54 20 74 68 72 6f 77 20 65  , do NOT throw e
1790: 78 63 65 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20  xceptions..     
17a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17b0: 20 20 20 20 77 68 69 6c 65 20 77 65 20 61 72 65      while we are
17c0: 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64 2e   being disposed.
17d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
17f0: 20 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69        _throwOnDi
1800: 73 70 6f 73 65 64 20 3d 20 66 61 6c 73 65 3b 0d  sposed = false;.
1810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1820: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1830: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
1840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1850: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
1860: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20  disposing);.... 
1870: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1880: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1890: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
18a0: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
18b0: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
18c0: 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  point...        
18d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
18e0: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
18f0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1900: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1910: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1980: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f  .    internal vo
1990: 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  id Cancel()..   
19a0: 20 7b 0d 0a 20 20 20 20 20 20 5f 76 65 72 73 69   {..      _versi
19b0: 6f 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  on = 0;..    }..
19c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
19d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c 6f  ry>..    /// Clo
19e0: 73 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  ses the dataread
19f0: 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20  er, potentially 
1a00: 63 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  closing the conn
1a10: 65 63 74 69 6f 6e 20 61 73 20 77 65 6c 6c 20 69  ection as well i
1a20: 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  f CommandBehavio
1a30: 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f  r.CloseConnectio
1a40: 6e 20 77 61 73 20 73 70 65 63 69 66 69 65 64 2e  n was specified.
1a50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1a60: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
1a70: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
1a80: 6c 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  lose()..    {.. 
1a90: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
1aa0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53  ed();....      S
1ab0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
1ac0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1ad0: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1ae0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f            new Co
1af0: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
1b00: 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  s(SQLiteConnecti
1b10: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73  onEventType.Clos
1b20: 69 6e 67 44 61 74 61 52 65 61 64 65 72 2c 0d 0a  ingDataReader,..
1b30: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
1b40: 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61 6e 64 2c 20  null, _command, 
1b50: 74 68 69 73 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  this, null, null
1b60: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
1b70: 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f   _commandBehavio
1b80: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 72  r,..          _r
1b90: 65 61 64 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f  eadingState, _ro
1ba0: 77 73 41 66 66 65 63 74 65 64 2c 20 5f 73 74 65  wsAffected, _ste
1bb0: 70 43 6f 75 6e 74 2c 20 5f 66 69 65 6c 64 43 6f  pCount, _fieldCo
1bc0: 75 6e 74 2c 20 5f 64 69 73 70 6f 73 65 43 6f 6d  unt, _disposeCom
1bd0: 6d 61 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  mand,..         
1be0: 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65   _throwOnDispose
1bf0: 64 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  d }));....      
1c00: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
1c10: 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61        if (_comma
1c20: 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nd != null)..   
1c30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c40: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1c50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c60: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1c70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c80: 20 20 2f 2f 20 4d 61 6b 65 20 73 75 72 65 20 77    // Make sure w
1c90: 65 27 76 65 20 6e 6f 74 20 62 65 65 6e 20 63 61  e've not been ca
1ca0: 6e 63 65 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  nceled..        
1cb0: 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73 69        if (_versi
1cc0: 6f 6e 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  on != 0)..      
1cd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ce0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d10: 20 20 20 20 20 77 68 69 6c 65 20 28 4e 65 78 74       while (Next
1d20: 52 65 73 75 6c 74 28 29 29 0d 0a 20 20 20 20 20  Result())..     
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d70: 20 20 20 20 20 20 20 20 63 61 74 63 68 28 53 51          catch(SQ
1d80: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 29 0d 0a  LiteException)..
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1db0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1dc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1dd0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 52 65       _command.Re
1de0: 73 65 74 44 61 74 61 52 65 61 64 65 72 28 29 3b  setDataReader();
1df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
1e10: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e30: 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64 61 74     // If the dat
1e40: 61 72 65 61 64 65 72 27 73 20 62 65 68 61 76 69  areader's behavi
1e50: 6f 72 20 69 6e 63 6c 75 64 65 73 20 63 6c 6f 73  or includes clos
1e60: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
1e70: 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73 6f 20 68  on, then do so h
1e80: 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ere...          
1e90: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
1ea0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
1eb0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73  andBehavior.Clos
1ec0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 21 3d 20  eConnection) != 
1ed0: 30 20 26 26 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  0 && _command.Co
1ee0: 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  nnection != null
1ef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f00: 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e     _command.Conn
1f10: 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d  ection.Close();.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f40: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
1f50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f60: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 64 69           if (_di
1f70: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 29 0d 0a 20  sposeCommand).. 
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63 6f               _co
1f90: 6d 6d 61 6e 64 2e 44 69 73 70 6f 73 65 28 29 3b  mmand.Dispose();
1fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
1fb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fc0: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 6e      _command = n
1fd0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f 61  ull;..        _a
1fe0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d  ctiveStatement =
1ff0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2000: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
2010: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f  null;..        _
2020: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d  fieldTypeArray =
2030: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d   null;..      }.
2040: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
2050: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2060: 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
2070: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2080: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65  {..          _ke
2090: 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b  yInfo.Dispose();
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79  ..          _key
20b0: 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Info = null;..  
20c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
20d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
20e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20f0: 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20 65    /// Throw an e
2100: 72 72 6f 72 20 69 66 20 74 68 65 20 64 61 74 61  rror if the data
2110: 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
2120: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2130: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
2140: 65 20 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73  e void CheckClos
2150: 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
2160: 20 20 20 69 66 20 28 21 5f 74 68 72 6f 77 4f 6e     if (!_throwOn
2170: 44 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  Disposed)..     
2180: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
2190: 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64      if (_command
21a0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
21b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
21c0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
21d0: 65 70 74 69 6f 6e 28 22 44 61 74 61 52 65 61 64  eption("DataRead
21e0: 65 72 20 68 61 73 20 62 65 65 6e 20 63 6c 6f 73  er has been clos
21f0: 65 64 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ed");....      i
2200: 66 20 28 5f 76 65 72 73 69 6f 6e 20 3d 3d 20 30  f (_version == 0
2210: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
2220: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2230: 74 69 6f 6e 28 22 45 78 65 63 75 74 69 6f 6e 20  tion("Execution 
2240: 77 61 73 20 61 62 6f 72 74 65 64 20 62 79 20 74  was aborted by t
2250: 68 65 20 75 73 65 72 22 29 3b 0d 0a 0d 0a 20 20  he user");....  
2260: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2270: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
2280: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
2290: 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ction;....      
22a0: 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  if (connection._
22b0: 76 65 72 73 69 6f 6e 20 21 3d 20 5f 76 65 72 73  version != _vers
22c0: 69 6f 6e 20 7c 7c 20 63 6f 6e 6e 65 63 74 69 6f  ion || connectio
22d0: 6e 2e 53 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65  n.State != Conne
22e0: 63 74 69 6f 6e 53 74 61 74 65 2e 4f 70 65 6e 29  ctionState.Open)
22f0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
2300: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
2310: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 43  tionException("C
2320: 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 63 6c  onnection was cl
2330: 6f 73 65 64 2c 20 73 74 61 74 65 6d 65 6e 74 20  osed, statement 
2340: 77 61 73 20 74 65 72 6d 69 6e 61 74 65 64 22 29  was terminated")
2350: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
2360: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2370: 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20     /// Throw an 
2380: 65 72 72 6f 72 20 69 66 20 61 20 72 6f 77 20 69  error if a row i
2390: 73 20 6e 6f 74 20 6c 6f 61 64 65 64 0d 0a 20 20  s not loaded..  
23a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
23b0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
23c0: 69 64 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77  id CheckValidRow
23d0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
23e0: 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
23f0: 74 65 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  te != 0)..      
2400: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
2410: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
2420: 70 74 69 6f 6e 28 22 4e 6f 20 63 75 72 72 65 6e  ption("No curren
2430: 74 20 72 6f 77 22 29 3b 0d 0a 20 20 20 20 7d 0d  t row");..    }.
2440: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2450: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
2460: 75 6d 65 72 61 74 6f 72 20 73 75 70 70 6f 72 74  umerator support
2470: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2480: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
2490: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
24a0: 20 44 62 45 6e 75 6d 65 72 61 74 6f 72 20 6f 62   DbEnumerator ob
24b0: 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ject.</returns>.
24c0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
24d0: 72 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 73  ride Collections
24e0: 2e 49 45 6e 75 6d 65 72 61 74 6f 72 20 47 65 74  .IEnumerator Get
24f0: 45 6e 75 6d 65 72 61 74 6f 72 28 29 0d 0a 20 20  Enumerator()..  
2500: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
2510: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
2520: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 62     return new Db
2530: 45 6e 75 6d 65 72 61 74 6f 72 28 74 68 69 73 2c  Enumerator(this,
2540: 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
2550: 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
2560: 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65  avior.CloseConne
2570: 63 74 69 6f 6e 29 20 3d 3d 20 43 6f 6d 6d 61 6e  ction) == Comman
2580: 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43  dBehavior.CloseC
2590: 6f 6e 6e 65 63 74 69 6f 6e 29 29 3b 0d 0a 20 20  onnection));..  
25a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
25b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
25c0: 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65  / Not implemente
25d0: 64 2e 20 20 52 65 74 75 72 6e 73 20 30 0d 0a 20  d.  Returns 0.. 
25e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
25f0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
2600: 65 72 72 69 64 65 20 69 6e 74 20 44 65 70 74 68  erride int Depth
2610: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
2620: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
2630: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2640: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43  ed();..        C
2650: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
2660: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
2670: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2680: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2690: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
26a0: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
26b0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
26c0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75  the current resu
26d0: 6c 74 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ltset..    /// <
26e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
26f0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
2700: 6e 74 20 46 69 65 6c 64 43 6f 75 6e 74 0d 0a 20  nt FieldCount.. 
2710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
2720: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2730: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
2740: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2750: 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  kClosed();....  
2760: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
2770: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
2780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66         return _f
2790: 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  ieldCount;....  
27a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69        return _fi
27b0: 65 6c 64 43 6f 75 6e 74 20 2b 20 5f 6b 65 79 49  eldCount + _keyI
27c0: 6e 66 6f 2e 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  nfo.Count;..    
27d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
27e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
27f0: 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 63 65 73 20  .    /// Forces 
2800: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
2810: 6c 61 67 73 20 63 61 63 68 65 64 20 62 79 20 74  lags cached by t
2820: 68 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20  his data reader 
2830: 74 6f 20 62 65 20 72 65 66 72 65 73 68 65 64 0d  to be refreshed.
2840: 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68  .    /// from th
2850: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6e  e underlying con
2860: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
2870: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2880: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 52 65    public void Re
2890: 66 72 65 73 68 46 6c 61 67 73 28 29 0d 0a 20 20  freshFlags()..  
28a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
28b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
28c0: 0a 20 20 20 20 20 20 20 20 5f 66 6c 61 67 73 20  .        _flags 
28d0: 3d 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  = SQLiteCommand.
28e0: 47 65 74 46 6c 61 67 73 28 5f 63 6f 6d 6d 61 6e  GetFlags(_comman
28f0: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
2900: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2910: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
2920: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2930: 6f 77 73 20 73 65 65 6e 20 73 6f 20 66 61 72 20  ows seen so far 
2940: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  in the current r
2950: 65 73 75 6c 74 20 73 65 74 2e 0d 0a 20 20 20 20  esult set...    
2960: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2970: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 53      public int S
2980: 74 65 70 43 6f 75 6e 74 0d 0a 20 20 20 20 7b 0d  tepCount..    {.
2990: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
29a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29b0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
29c0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
29d0: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
29e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29f0: 20 72 65 74 75 72 6e 20 5f 73 74 65 70 43 6f 75   return _stepCou
2a00: 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  nt;..        }..
2a10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
2a20: 76 61 74 65 20 69 6e 74 20 50 72 69 76 61 74 65  vate int Private
2a30: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
2a40: 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
2a50: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
2a60: 66 69 65 6c 64 43 6f 75 6e 74 3b 20 7d 0d 0a 20  fieldCount; }.. 
2a70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
2a80: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
2a90: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
2aa0: 75 6d 62 65 72 20 6f 66 20 76 69 73 69 62 6c 65  umber of visible
2ab0: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
2ac0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
2ad0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2ae0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
2af0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 69   override int Vi
2b00: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 0d  sibleFieldCount.
2b10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2b20: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2b30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
2b40: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68  d();..        Ch
2b50: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20  eckClosed();..  
2b60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 72 69        return Pri
2b70: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
2b80: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 7d 0d  Count;..      }.
2b90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2ba0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2bb0: 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
2bc0: 20 69 73 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   is used to make
2bd0: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
2be0: 20 73 65 74 20 69 73 20 6f 70 65 6e 20 61 6e 64   set is open and
2bf0: 20 61 20 72 6f 77 20 69 73 20 63 75 72 72 65 6e   a row is curren
2c00: 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a  tly available...
2c10: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2c20: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
2c30: 76 6f 69 64 20 56 65 72 69 66 79 46 6f 72 47 65  void VerifyForGe
2c40: 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t()..    {..    
2c50: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
2c60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2c70: 6b 56 61 6c 69 64 52 6f 77 28 29 3b 0d 0a 20 20  kValidRow();..  
2c80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2c90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2ca0: 2f 20 53 51 4c 69 74 65 20 69 73 20 69 6e 68 65  / SQLite is inhe
2cb0: 72 65 6e 74 6c 79 20 75 6e 2d 74 79 70 65 64 2e  rently un-typed.
2cc0: 20 20 41 6c 6c 20 64 61 74 61 74 79 70 65 73 20    All datatypes 
2cd0: 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20 6e 61  in SQLite are na
2ce0: 74 69 76 65 6c 79 20 73 74 72 69 6e 67 73 2e 20  tively strings. 
2cf0: 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   The definition 
2d00: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  of the columns o
2d10: 66 20 61 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  f a table..    /
2d20: 2f 2f 20 61 6e 64 20 74 68 65 20 61 66 66 69 6e  // and the affin
2d30: 69 74 79 20 6f 66 20 72 65 74 75 72 6e 65 64 20  ity of returned 
2d40: 74 79 70 65 73 20 61 72 65 20 61 6c 6c 20 77 65  types are all we
2d50: 20 68 61 76 65 20 74 6f 20 67 6f 20 6f 6e 20 74   have to go on t
2d60: 6f 20 74 79 70 65 2d 72 65 73 74 72 69 63 74 20  o type-restrict 
2d70: 64 61 74 61 20 69 6e 20 74 68 65 20 72 65 61 64  data in the read
2d80: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 0d 0a 20 20  er...    ///..  
2d90: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
2da0: 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ion attempts to 
2db0: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
2dc0: 74 79 70 65 20 6f 66 20 64 61 74 61 20 62 65 69  type of data bei
2dd0: 6e 67 20 72 65 71 75 65 73 74 65 64 20 6f 66 20  ng requested of 
2de0: 61 20 63 6f 6c 75 6d 6e 20 6d 61 74 63 68 65 73  a column matches
2df0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
2e00: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 6e   the column.  In
2e10: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63 61  ..    /// the ca
2e20: 73 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  se of columns th
2e30: 61 74 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  at are not backe
2e40: 64 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 64  d into a table d
2e50: 65 66 69 6e 69 74 69 6f 6e 2c 20 77 65 20 61 74  efinition, we at
2e60: 74 65 6d 70 74 20 74 6f 20 6d 61 74 63 68 20 75  tempt to match u
2e70: 70 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  p the affinity o
2e80: 66 20 61 20 63 6f 6c 75 6d 6e 20 28 69 6e 74 2c  f a column (int,
2e90: 20 64 6f 75 62 6c 65 2c 20 73 74 72 69 6e 67 20   double, string 
2ea0: 6f 72 20 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f  or blob)..    //
2eb0: 2f 20 74 6f 20 61 20 73 65 74 20 6f 66 20 6b 6e  / to a set of kn
2ec0: 6f 77 6e 20 74 79 70 65 73 20 74 68 61 74 20 63  own types that c
2ed0: 6c 6f 73 65 6c 79 20 6d 61 74 63 68 20 74 68 61  losely match tha
2ee0: 74 20 61 66 66 69 6e 69 74 79 2e 20 20 49 74 27  t affinity.  It'
2ef0: 73 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 73  s not an exact s
2f00: 63 69 65 6e 63 65 2c 20 62 75 74 20 69 74 73 20  cience, but its 
2f10: 74 68 65 20 62 65 73 74 20 77 65 20 63 61 6e 20  the best we can 
2f20: 64 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  do...    /// </s
2f30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2f40: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2f50: 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f  /// This functio
2f60: 6e 20 74 68 72 6f 77 73 20 61 6e 20 49 6e 76 61  n throws an Inva
2f70: 6c 69 64 54 79 70 65 43 61 73 74 28 29 20 65 78  lidTypeCast() ex
2f80: 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 72  ception if the r
2f90: 65 71 75 65 73 74 65 64 20 74 79 70 65 20 64 6f  equested type do
2fa0: 65 73 6e 27 74 20 6d 61 74 63 68 20 74 68 65 20  esn't match the 
2fb0: 63 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e 69 74  column's definit
2fc0: 69 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74 79 2e  ion or affinity.
2fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
2fe0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  rns>..    /// <p
2ff0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
3000: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
3010: 6f 6c 75 6d 6e 20 74 6f 20 74 79 70 65 2d 63 68  olumn to type-ch
3020: 65 63 6b 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eck</param>..   
3030: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3040: 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
3050: 77 65 20 77 61 6e 74 20 74 6f 20 67 65 74 20 6f  we want to get o
3060: 75 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ut of the column
3070: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 72  </param>..    pr
3080: 69 76 61 74 65 20 54 79 70 65 41 66 66 69 6e 69  ivate TypeAffini
3090: 74 79 20 56 65 72 69 66 79 54 79 70 65 28 69 6e  ty VerifyType(in
30a0: 74 20 69 2c 20 44 62 54 79 70 65 20 74 79 70 29  t i, DbType typ)
30b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
30c0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66   TypeAffinity af
30d0: 66 69 6e 69 74 79 20 3d 20 47 65 74 53 51 4c 69  finity = GetSQLi
30e0: 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 69  teType(_flags, i
30f0: 29 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 0d 0a 20  ).Affinity;.... 
3100: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61         switch (a
3110: 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20  ffinity)..      
3120: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3130: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
3140: 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
3150: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
3160: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74  yp == DbType.Int
3170: 36 34 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  64) return affin
3180: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3190: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
31a0: 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29 20 72   DbType.Int32) r
31b0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
31c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31d0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
31e0: 70 65 2e 49 6e 74 31 36 29 20 72 65 74 75 72 6e  pe.Int16) return
31f0: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3200: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3210: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 79  typ == DbType.By
3220: 74 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  te) return affin
3230: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3240: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
3250: 20 44 62 54 79 70 65 2e 53 42 79 74 65 29 20 72   DbType.SByte) r
3260: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3280: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3290: 70 65 2e 42 6f 6f 6c 65 61 6e 29 20 72 65 74 75  pe.Boolean) retu
32a0: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20  rn affinity;..  
32b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
32c0: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
32d0: 44 61 74 65 54 69 6d 65 29 20 72 65 74 75 72 6e  DateTime) return
32e0: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3300: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 6f  typ == DbType.Do
3310: 75 62 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66  uble) return aff
3320: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3330: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3340: 3d 3d 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65  == DbType.Single
3350: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
3360: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
3370: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
3380: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72  bType.Decimal) r
3390: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
33a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33b0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
33c0: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
33d0: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a  finity.Double:..
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f0: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3400: 65 2e 44 6f 75 62 6c 65 29 20 72 65 74 75 72 6e  e.Double) return
3410: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3420: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3430: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 69  typ == DbType.Si
3440: 6e 67 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66  ngle) return aff
3450: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3460: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3470: 3d 3d 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61  == DbType.Decima
3480: 6c 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  l) return affini
3490: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
34a0: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
34b0: 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29  DbType.DateTime)
34c0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
34d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
34e0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
34f0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
3500: 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0d 0a  Affinity.Text:..
3510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3520: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3530: 65 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e  e.String) return
3540: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3550: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3560: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 47 75  typ == DbType.Gu
3570: 69 64 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  id) return affin
3580: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3590: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
35a0: 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65   DbType.DateTime
35b0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
35c0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
35d0: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
35e0: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72  bType.Decimal) r
35f0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3610: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
3620: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
3630: 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
3640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
3650: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
3660: 47 75 69 64 29 20 72 65 74 75 72 6e 20 61 66 66  Guid) return aff
3670: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3680: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3690: 3d 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79  == DbType.Binary
36a0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
36b0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
36c0: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
36d0: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 20 72 65  bType.String) re
36e0: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a  turn affinity;..
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3700: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
3710: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 68 72  }....        thr
3720: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 43 61  ow new InvalidCa
3730: 73 74 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  stException();..
3740: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
3750: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3760: 2f 2f 2f 20 49 6e 76 6f 6b 65 73 20 74 68 65 20  /// Invokes the 
3770: 64 61 74 61 20 72 65 61 64 65 72 20 76 61 6c 75  data reader valu
3780: 65 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 66 69  e callback confi
3790: 67 75 72 65 64 20 66 6f 72 20 74 68 65 20 64 61  gured for the da
37a0: 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20  tabase..    /// 
37b0: 74 79 70 65 20 6e 61 6d 65 20 61 73 73 6f 63 69  type name associ
37c0: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70  ated with the sp
37d0: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 20  ecified column. 
37e0: 20 49 66 20 6e 6f 20 64 61 74 61 20 72 65 61 64   If no data read
37f0: 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75  er..    /// valu
3800: 65 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 61 76  e callback is av
3810: 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
3820: 64 61 74 61 62 61 73 65 20 74 79 70 65 20 6e 61  database type na
3830: 6d 65 2c 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d  me, do nothing..
3840: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3850: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
3860: 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22  ram name="index"
3870: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 69  >..    /// The i
3880: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
3890: 6d 6e 20 62 65 69 6e 67 20 72 65 61 64 2e 0d 0a  mn being read...
38a0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
38b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
38c0: 20 6e 61 6d 65 3d 22 65 76 65 6e 74 41 72 67 73   name="eventArgs
38d0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
38e0: 65 78 74 72 61 20 65 76 65 6e 74 20 64 61 74 61  extra event data
38f0: 20 74 6f 20 70 61 73 73 20 69 6e 74 6f 20 74 68   to pass into th
3900: 65 20 63 61 6c 6c 62 61 63 6b 2e 0d 0a 20 20 20  e callback...   
3910: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
3920: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3930: 6d 65 3d 22 63 6f 6d 70 6c 65 74 65 22 3e 0d 0a  me="complete">..
3940: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
3950: 20 69 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   if the default 
3960: 68 61 6e 64 6c 69 6e 67 20 66 6f 72 20 74 68 65  handling for the
3970: 20 64 61 74 61 20 72 65 61 64 65 72 20 63 61 6c   data reader cal
3980: 6c 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20  l should be..   
3990: 20 2f 2f 2f 20 73 6b 69 70 70 65 64 2e 20 20 49   /// skipped.  I
39a0: 66 20 74 68 69 73 20 69 73 20 73 65 74 20 74 6f  f this is set to
39b0: 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 74 68   non-zero and th
39c0: 65 20 6e 65 63 65 73 73 61 72 79 20 72 65 74 75  e necessary retu
39d0: 72 6e 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f  rn value..    //
39e0: 2f 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  / is unavailable
39f0: 20 6f 72 20 75 6e 73 75 69 74 61 62 6c 65 2c 20   or unsuitable, 
3a00: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 69 6c  an exception wil
3a10: 6c 20 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20  l be thrown...  
3a20: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
3a30: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
3a40: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
3a50: 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20  Callback(..     
3a60: 20 20 20 69 6e 74 20 69 6e 64 65 78 2c 0d 0a 20     int index,.. 
3a70: 20 20 20 20 20 20 20 53 51 4c 69 74 65 52 65 61         SQLiteRea
3a80: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 20  dValueEventArgs 
3a90: 65 76 65 6e 74 41 72 67 73 2c 0d 0a 20 20 20 20  eventArgs,..    
3aa0: 20 20 20 20 6f 75 74 20 62 6f 6f 6c 20 63 6f 6d      out bool com
3ab0: 70 6c 65 74 65 0d 0a 20 20 20 20 20 20 20 20 29  plete..        )
3ac0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
3ad0: 20 63 6f 6d 70 6c 65 74 65 20 3d 20 66 61 6c 73   complete = fals
3ae0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 6c 61  e;..        _fla
3af0: 67 73 20 26 3d 20 7e 53 51 4c 69 74 65 43 6f 6e  gs &= ~SQLiteCon
3b00: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
3b10: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
3b20: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 3b 0d 0a 0d  lueCallbacks;...
3b30: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
3b40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3b50: 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
3b60: 4e 61 6d 65 20 3d 20 47 65 74 44 61 74 61 54 79  Name = GetDataTy
3b70: 70 65 4e 61 6d 65 28 69 6e 64 65 78 29 3b 0d 0a  peName(index);..
3b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
3b90: 20 28 74 79 70 65 4e 61 6d 65 20 3d 3d 20 6e 75   (typeName == nu
3ba0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3bb0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
3bd0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
3be0: 6e 65 63 74 69 6f 6e 20 3d 20 47 65 74 43 6f 6e  nection = GetCon
3bf0: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 3b 0d 0a  nection(this);..
3c00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
3c10: 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 3d 20   (connection == 
3c20: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3c30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
3c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
3c50: 4c 69 74 65 54 79 70 65 43 61 6c 6c 62 61 63 6b  LiteTypeCallback
3c60: 73 20 63 61 6c 6c 62 61 63 6b 73 3b 0d 0a 0d 0a  s callbacks;....
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3c80: 21 63 6f 6e 6e 65 63 74 69 6f 6e 2e 54 72 79 47  !connection.TryG
3c90: 65 74 54 79 70 65 43 61 6c 6c 62 61 63 6b 73 28  etTypeCallbacks(
3ca0: 74 79 70 65 4e 61 6d 65 2c 20 6f 75 74 20 63 61  typeName, out ca
3cb0: 6c 6c 62 61 63 6b 73 29 20 7c 7c 0d 0a 20 20 20  llbacks) ||..   
3cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61               (ca
3cd0: 6c 6c 62 61 63 6b 73 20 3d 3d 20 6e 75 6c 6c 29  llbacks == null)
3ce0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3d00: 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20    return;..     
3d10: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3d20: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 52 65          SQLiteRe
3d30: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 20  adValueCallback 
3d40: 63 61 6c 6c 62 61 63 6b 20 3d 20 63 61 6c 6c 62  callback = callb
3d50: 61 63 6b 73 2e 52 65 61 64 56 61 6c 75 65 43 61  acks.ReadValueCa
3d60: 6c 6c 62 61 63 6b 3b 0d 0a 0d 0a 20 20 20 20 20  llback;....     
3d70: 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62         if (callb
3d80: 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ack == null)..  
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3da0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
3db0: 20 20 20 20 20 6f 62 6a 65 63 74 20 75 73 65 72       object user
3dc0: 44 61 74 61 20 3d 20 63 61 6c 6c 62 61 63 6b 73  Data = callbacks
3dd0: 2e 52 65 61 64 56 61 6c 75 65 55 73 65 72 44 61  .ReadValueUserDa
3de0: 74 61 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ta;....         
3df0: 20 20 20 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20     callback(..  
3e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 61                _a
3e10: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
3e20: 73 71 6c 2c 20 74 68 69 73 2c 20 5f 66 6c 61 67  sql, this, _flag
3e30: 73 2c 20 65 76 65 6e 74 41 72 67 73 2c 20 74 79  s, eventArgs, ty
3e40: 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
3e50: 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2c 20           index, 
3e60: 75 73 65 72 44 61 74 61 2c 20 6f 75 74 20 63 6f  userData, out co
3e70: 6d 70 6c 65 74 65 29 3b 20 2f 2a 20 74 68 72 6f  mplete); /* thro
3e80: 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d  w */..        }.
3e90: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
3ea0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
3eb0: 20 20 20 20 20 20 20 20 20 5f 66 6c 61 67 73 20           _flags 
3ec0: 7c 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  |= SQLiteConnect
3ed0: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
3ee0: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
3ef0: 61 6c 6c 62 61 63 6b 73 3b 0d 0a 20 20 20 20 20  allbacks;..     
3f00: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
3f10: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3f20: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  ..    /// Retrie
3f30: 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  ves the column a
3f40: 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
3f50: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
3f60: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
3f70: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
3f80: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
3f90: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
3fa0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
3fb0: 73 3e 62 6f 6f 6c 3c 2f 72 65 74 75 72 6e 73 3e  s>bool</returns>
3fc0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
3fd0: 72 72 69 64 65 20 62 6f 6f 6c 20 47 65 74 42 6f  rride bool GetBo
3fe0: 6f 6c 65 61 6e 28 69 6e 74 20 69 29 0d 0a 20 20  olean(int i)..  
3ff0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
4000: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
4010: 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72         VerifyFor
4020: 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Get();....      
4030: 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20    if ((_flags & 
4040: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
4050: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
4060: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
4070: 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65  backs) == SQLite
4080: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
4090: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
40a0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
40b0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
40c0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44           SQLiteD
40d0: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76  ataReaderValue v
40e0: 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  alue = new SQLit
40f0: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
4100: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4110: 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d   bool complete;.
4120: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
4130: 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61  nvokeReadValueCa
4140: 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51  llback(i, new SQ
4150: 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65  LiteReadValueEve
4160: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
4170: 20 20 20 20 20 20 20 20 20 22 47 65 74 42 6f 6f           "GetBoo
4180: 6c 65 61 6e 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c  lean", null, val
4190: 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74  ue), out complet
41a0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
41b0: 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29     if (complete)
41c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
41d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
41e0: 20 69 66 20 28 76 61 6c 75 65 2e 42 6f 6f 6c 65   if (value.Boole
41f0: 61 6e 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29  anValue == null)
4200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4210: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
4220: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
4230: 22 6d 69 73 73 69 6e 67 20 62 6f 6f 6c 65 61 6e  "missing boolean
4240: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b   return value");
4250: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4260: 20 20 20 20 72 65 74 75 72 6e 20 28 62 6f 6f 6c      return (bool
4270: 29 76 61 6c 75 65 2e 42 6f 6f 6c 65 61 6e 56 61  )value.BooleanVa
4280: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
4290: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
42a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
42b0: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
42c0: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
42d0: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
42e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
42f0: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
4300: 74 42 6f 6f 6c 65 61 6e 28 69 20 2d 20 50 72 69  tBoolean(i - Pri
4310: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
4320: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
4330: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
4340: 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29   DbType.Boolean)
4350: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
4360: 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42 6f 6f 6c  n Convert.ToBool
4370: 65 61 6e 28 47 65 74 56 61 6c 75 65 28 69 29 2c  ean(GetValue(i),
4380: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
4390: 72 65 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20  rentCulture);.. 
43a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
43b0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
43c0: 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65  // Retrieves the
43d0: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73 69 6e   column as a sin
43e0: 67 6c 65 20 62 79 74 65 20 76 61 6c 75 65 0d 0a  gle byte value..
43f0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4400: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
4410: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
4420: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
4430: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
4440: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62    /// <returns>b
4450: 79 74 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  yte</returns>.. 
4460: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
4470: 64 65 20 62 79 74 65 20 47 65 74 42 79 74 65 28  de byte GetByte(
4480: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
4490: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
44a0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
44b0: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
44c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
44d0: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
44e0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
44f0: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
4500: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
4510: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
4520: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
4530: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
4540: 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20  Callbacks)..    
4550: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4560: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
4570: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
4580: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
4590: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
45a0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
45b0: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
45c0: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
45d0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
45e0: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
45f0: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
4600: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4610: 20 20 20 22 47 65 74 42 79 74 65 22 2c 20 6e 75     "GetByte", nu
4620: 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20  ll, value), out 
4630: 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20  complete);....  
4640: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
4650: 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20  mplete)..       
4660: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4670: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
4680: 65 2e 42 79 74 65 56 61 6c 75 65 20 3d 3d 20 6e  e.ByteValue == n
4690: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
46a0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
46b0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
46c0: 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 62 79 74  ion("missing byt
46d0: 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29  e return value")
46e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
46f0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 62 79 74       return (byt
4700: 65 29 76 61 6c 75 65 2e 42 79 74 65 56 61 6c 75  e)value.ByteValu
4710: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
4720: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
4730: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
4740: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
4750: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
4760: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
4770: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4780: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42  rn _keyInfo.GetB
4790: 79 74 65 28 69 20 2d 20 50 72 69 76 61 74 65 56  yte(i - PrivateV
47a0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
47b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65  );....        Ve
47c0: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
47d0: 70 65 2e 42 79 74 65 29 3b 0d 0a 20 20 20 20 20  pe.Byte);..     
47e0: 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72     return Conver
47f0: 74 2e 54 6f 42 79 74 65 28 5f 61 63 74 69 76 65  t.ToByte(_active
4800: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
4810: 65 74 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53  etInt32(_activeS
4820: 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a  tatement, i));..
4830: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
4840: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
4850: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 61 20  /// Retrieves a 
4860: 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 61 72 72  column as an arr
4870: 61 79 20 6f 66 20 62 79 74 65 73 20 28 62 6c 6f  ay of bytes (blo
4880: 62 29 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  b)..    /// </su
4890: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
48a0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
48b0: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
48c0: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
48d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
48e0: 20 6e 61 6d 65 3d 22 66 69 65 6c 64 4f 66 66 73   name="fieldOffs
48f0: 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73  et">The zero-bas
4900: 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72  ed index of wher
4910: 65 20 74 6f 20 62 65 67 69 6e 20 72 65 61 64 69  e to begin readi
4920: 6e 67 20 74 68 65 20 64 61 74 61 3c 2f 70 61 72  ng the data</par
4930: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
4940: 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72  ram name="buffer
4950: 22 3e 54 68 65 20 62 75 66 66 65 72 20 74 6f 20  ">The buffer to 
4960: 77 72 69 74 65 20 74 68 65 20 62 79 74 65 73 20  write the bytes 
4970: 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  into</param>..  
4980: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4990: 65 3d 22 62 75 66 66 65 72 6f 66 66 73 65 74 22  e="bufferoffset"
49a0: 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20  >The zero-based 
49b0: 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20 74  index of where t
49c0: 6f 20 62 65 67 69 6e 20 77 72 69 74 69 6e 67 20  o begin writing 
49d0: 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c 2f  into the array</
49e0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
49f0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e  <param name="len
4a00: 67 74 68 22 3e 54 68 65 20 6e 75 6d 62 65 72 20  gth">The number 
4a10: 6f 66 20 62 79 74 65 73 20 74 6f 20 72 65 74 72  of bytes to retr
4a20: 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ieve</param>..  
4a30: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
4a40: 68 65 20 61 63 74 75 61 6c 20 6e 75 6d 62 65 72  he actual number
4a50: 20 6f 66 20 62 79 74 65 73 20 77 72 69 74 74 65   of bytes writte
4a60: 6e 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79  n into the array
4a70: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4a80: 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20  /// <remarks>.. 
4a90: 20 20 20 2f 2f 2f 20 54 6f 20 64 65 74 65 72 6d     /// To determ
4aa0: 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ine the number o
4ab0: 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 63  f bytes in the c
4ac0: 6f 6c 75 6d 6e 2c 20 70 61 73 73 20 61 20 6e 75  olumn, pass a nu
4ad0: 6c 6c 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  ll value for the
4ae0: 20 62 75 66 66 65 72 2e 20 20 54 68 65 20 74 6f   buffer.  The to
4af0: 74 61 6c 20 6c 65 6e 67 74 68 20 77 69 6c 6c 20  tal length will 
4b00: 62 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20  be returned...  
4b10: 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e    /// </remarks>
4b20: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
4b30: 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79  rride long GetBy
4b40: 74 65 73 28 69 6e 74 20 69 2c 20 6c 6f 6e 67 20  tes(int i, long 
4b50: 66 69 65 6c 64 4f 66 66 73 65 74 2c 20 62 79 74  fieldOffset, byt
4b60: 65 5b 5d 20 62 75 66 66 65 72 2c 20 69 6e 74 20  e[] buffer, int 
4b70: 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 69 6e  bufferoffset, in
4b80: 74 20 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b  t length)..    {
4b90: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
4ba0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
4bb0: 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74      VerifyForGet
4bc0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
4bd0: 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  f ((_flags & SQL
4be0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
4bf0: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
4c00: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
4c10: 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  ks) == SQLiteCon
4c20: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
4c30: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
4c40: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20  lueCallbacks).. 
4c50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4c60: 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61        SQLiteData
4c70: 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75  ReaderValue valu
4c80: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61  e = new SQLiteDa
4c90: 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b  taReaderValue();
4ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
4cb0: 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a  ol complete;....
4cc0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f              Invo
4cd0: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
4ce0: 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74  ack(i, new SQLit
4cf0: 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41  eReadValueEventA
4d00: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
4d10: 20 20 20 20 20 20 22 47 65 74 42 79 74 65 73 22        "GetBytes"
4d20: 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  , new SQLiteRead
4d30: 41 72 72 61 79 45 76 65 6e 74 41 72 67 73 28 66  ArrayEventArgs(f
4d40: 69 65 6c 64 4f 66 66 73 65 74 2c 0d 0a 20 20 20  ieldOffset,..   
4d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d60: 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f   buffer, buffero
4d70: 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 2c 20  ffset, length), 
4d80: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
4d90: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
4da0: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
4db0: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
4dc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4dd0: 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73      byte[] bytes
4de0: 20 3d 20 76 61 6c 75 65 2e 42 79 74 65 73 56 61   = value.BytesVa
4df0: 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
4e00: 20 20 20 20 20 20 20 20 69 66 20 28 62 79 74 65          if (byte
4e10: 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
4e20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e40: 20 20 20 41 72 72 61 79 2e 43 6f 70 79 28 62 79     Array.Copy(by
4e50: 74 65 73 2c 20 30 2c 20 62 75 66 66 65 72 2c 20  tes, 0, buffer, 
4e60: 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65  bufferoffset, le
4e70: 6e 67 74 68 29 3b 0d 0a 0d 0a 23 69 66 20 21 50  ngth);....#if !P
4e80: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
4e90: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4eb0: 74 75 72 6e 20 62 79 74 65 73 2e 4c 6f 6e 67 4c  turn bytes.LongL
4ec0: 65 6e 67 74 68 3b 0d 0a 23 65 6c 73 65 0d 0a 20  ength;..#else.. 
4ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ee0: 20 20 20 72 65 74 75 72 6e 20 62 79 74 65 73 2e     return bytes.
4ef0: 4c 65 6e 67 74 68 3b 0d 0a 23 65 6e 64 69 66 0d  Length;..#endif.
4f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4f10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
4f20: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
4f30: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f50: 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20   return -1;..   
4f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4f80: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4f90: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
4fa0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
4fb0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
4fc0: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
4fd0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
4fe0: 6b 65 79 49 6e 66 6f 2e 47 65 74 42 79 74 65 73  keyInfo.GetBytes
4ff0: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
5000: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20 66  bleFieldCount, f
5010: 69 65 6c 64 4f 66 66 73 65 74 2c 20 62 75 66 66  ieldOffset, buff
5020: 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74  er, bufferoffset
5030: 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20  , length);....  
5040: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
5050: 28 69 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72  (i, DbType.Binar
5060: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  y);..        ret
5070: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
5080: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74  ment._sql.GetByt
5090: 65 73 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  es(_activeStatem
50a0: 65 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69 65  ent, i, (int)fie
50b0: 6c 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65 72  ldOffset, buffer
50c0: 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20  , bufferoffset, 
50d0: 6c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d  length);..    }.
50e0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
50f0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
5100: 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e  turns the column
5110: 20 61 73 20 61 20 73 69 6e 67 6c 65 20 63 68 61   as a single cha
5120: 72 61 63 74 65 72 0d 0a 20 20 20 20 2f 2f 2f 20  racter..    /// 
5130: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
5140: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5150: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
5160: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
5170: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
5180: 65 74 75 72 6e 73 3e 63 68 61 72 3c 2f 72 65 74  eturns>char</ret
5190: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
51a0: 63 20 6f 76 65 72 72 69 64 65 20 63 68 61 72 20  c override char 
51b0: 47 65 74 43 68 61 72 28 69 6e 74 20 69 29 0d 0a  GetChar(int i)..
51c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
51d0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
51e0: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46  .        VerifyF
51f0: 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  orGet();....    
5200: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
5210: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
5220: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
5230: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
5240: 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69  llbacks) == SQLi
5250: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5260: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
5270: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
5280: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
5290: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
52a0: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
52b0: 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c   value = new SQL
52c0: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
52d0: 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ue();..         
52e0: 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65     bool complete
52f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5300: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
5310: 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20  Callback(i, new 
5320: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45  SQLiteReadValueE
5330: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
5340: 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 43             "GetC
5350: 68 61 72 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75  har", null, valu
5360: 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  e), out complete
5370: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5380: 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d    if (complete).
5390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53b0: 69 66 20 28 76 61 6c 75 65 2e 43 68 61 72 56 61  if (value.CharVa
53c0: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
53d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53e0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
53f0: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73  teException("mis
5400: 73 69 6e 67 20 63 68 61 72 61 63 74 65 72 20 72  sing character r
5410: 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a  eturn value");..
5420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5430: 20 20 72 65 74 75 72 6e 20 28 63 68 61 72 29 76    return (char)v
5440: 61 6c 75 65 2e 43 68 61 72 56 61 6c 75 65 3b 0d  alue.CharValue;.
5450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5460: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5470: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
5480: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
5490: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
54a0: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
54b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
54c0: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 43 68 61 72  _keyInfo.GetChar
54d0: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
54e0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d  bleFieldCount);.
54f0: 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ...        Verif
5500: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
5510: 53 42 79 74 65 29 3b 0d 0a 20 20 20 20 20 20 20  SByte);..       
5520: 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
5530: 54 6f 43 68 61 72 28 5f 61 63 74 69 76 65 53 74  ToChar(_activeSt
5540: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
5550: 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74 61  Int32(_activeSta
5560: 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20  tement, i));..  
5570: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
5580: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
5590: 2f 20 52 65 74 72 69 65 76 65 73 20 61 20 63 6f  / Retrieves a co
55a0: 6c 75 6d 6e 20 61 73 20 61 6e 20 61 72 72 61 79  lumn as an array
55b0: 20 6f 66 20 63 68 61 72 73 20 28 62 6c 6f 62 29   of chars (blob)
55c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
55d0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
55e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
55f0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
5600: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
5610: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5620: 61 6d 65 3d 22 66 69 65 6c 64 6f 66 66 73 65 74  ame="fieldoffset
5630: 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  ">The zero-based
5640: 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20   index of where 
5650: 74 6f 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67  to begin reading
5660: 20 74 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d   the data</param
5670: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
5680: 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 22 3e  m name="buffer">
5690: 54 68 65 20 62 75 66 66 65 72 20 74 6f 20 77 72  The buffer to wr
56a0: 69 74 65 20 74 68 65 20 63 68 61 72 61 63 74 65  ite the characte
56b0: 72 73 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e 0d  rs into</param>.
56c0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
56d0: 6e 61 6d 65 3d 22 62 75 66 66 65 72 6f 66 66 73  name="bufferoffs
56e0: 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73  et">The zero-bas
56f0: 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72  ed index of wher
5700: 65 20 74 6f 20 62 65 67 69 6e 20 77 72 69 74 69  e to begin writi
5710: 6e 67 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61  ng into the arra
5720: 79 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  y</param>..    /
5730: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5740: 6c 65 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d 62  length">The numb
5750: 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72  er of bytes to r
5760: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d  etrieve</param>.
5770: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
5780: 73 3e 54 68 65 20 61 63 74 75 61 6c 20 6e 75 6d  s>The actual num
5790: 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
57a0: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 74  s written into t
57b0: 68 65 20 61 72 72 61 79 3c 2f 72 65 74 75 72 6e  he array</return
57c0: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d  s>..    /// <rem
57d0: 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  arks>..    /// T
57e0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
57f0: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63  number of charac
5800: 74 65 72 73 20 69 6e 20 74 68 65 20 63 6f 6c 75  ters in the colu
5810: 6d 6e 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c 20  mn, pass a null 
5820: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62 75  value for the bu
5830: 66 66 65 72 2e 20 20 54 68 65 20 74 6f 74 61 6c  ffer.  The total
5840: 20 6c 65 6e 67 74 68 20 77 69 6c 6c 20 62 65 20   length will be 
5850: 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f  returned...    /
5860: 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20  // </remarks>.. 
5870: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
5880: 64 65 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73  de long GetChars
5890: 28 69 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65  (int i, long fie
58a0: 6c 64 6f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d  ldoffset, char[]
58b0: 20 62 75 66 66 65 72 2c 20 69 6e 74 20 62 75 66   buffer, int buf
58c0: 66 65 72 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c  feroffset, int l
58d0: 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20  ength)..    {.. 
58e0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
58f0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
5900: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
5910: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
5920: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
5930: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5940: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
5950: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
5960: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
5970: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
5980: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
5990: 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20  Callbacks)..    
59a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
59b0: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
59c0: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
59d0: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
59e0: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
59f0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
5a00: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
5a10: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
5a20: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
5a30: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
5a40: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
5a50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5a60: 20 20 20 22 47 65 74 43 68 61 72 73 22 2c 20 6e     "GetChars", n
5a70: 65 77 20 53 51 4c 69 74 65 52 65 61 64 41 72 72  ew SQLiteReadArr
5a80: 61 79 45 76 65 6e 74 41 72 67 73 28 66 69 65 6c  ayEventArgs(fiel
5a90: 64 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20  doffset,..      
5aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75                bu
5ab0: 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73  ffer, bufferoffs
5ac0: 65 74 2c 20 6c 65 6e 67 74 68 29 2c 20 76 61 6c  et, length), val
5ad0: 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74  ue), out complet
5ae0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
5af0: 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29     if (complete)
5b00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5b20: 20 63 68 61 72 5b 5d 20 63 68 61 72 73 20 3d 20   char[] chars = 
5b30: 76 61 6c 75 65 2e 43 68 61 72 73 56 61 6c 75 65  value.CharsValue
5b40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5b50: 20 20 20 20 20 69 66 20 28 63 68 61 72 73 20 21       if (chars !
5b60: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
5b70: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b90: 41 72 72 61 79 2e 43 6f 70 79 28 63 68 61 72 73  Array.Copy(chars
5ba0: 2c 20 30 2c 20 62 75 66 66 65 72 2c 20 62 75 66  , 0, buffer, buf
5bb0: 66 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74  feroffset, lengt
5bc0: 68 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  h);....#if !PLAT
5bd0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
5be0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
5bf0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5c00: 6e 20 63 68 61 72 73 2e 4c 6f 6e 67 4c 65 6e 67  n chars.LongLeng
5c10: 74 68 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  th;..#else..    
5c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c30: 72 65 74 75 72 6e 20 63 68 61 72 73 2e 4c 65 6e  return chars.Len
5c40: 67 74 68 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  gth;..#endif..  
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
5c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5c70: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
5c80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5ca0: 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 20 20  turn -1;..      
5cb0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5cc0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5cd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5ce0: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
5cf0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
5d00: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
5d10: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
5d20: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
5d30: 49 6e 66 6f 2e 47 65 74 43 68 61 72 73 28 69 20  Info.GetChars(i 
5d40: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
5d50: 46 69 65 6c 64 43 6f 75 6e 74 2c 20 66 69 65 6c  FieldCount, fiel
5d60: 64 6f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c  doffset, buffer,
5d70: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c   bufferoffset, l
5d80: 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20  ength);....     
5d90: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
5da0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5db0: 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69 66 79 54  nFlags.NoVerifyT
5dc0: 65 78 74 41 66 66 69 6e 69 74 79 29 20 21 3d 20  extAffinity) != 
5dd0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5de0: 46 6c 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 65  Flags.NoVerifyTe
5df0: 78 74 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20  xtAffinity)..   
5e00: 20 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54           VerifyT
5e10: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53 74  ype(i, DbType.St
5e20: 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ring);....      
5e30: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
5e40: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
5e50: 65 74 43 68 61 72 73 28 5f 61 63 74 69 76 65 53  etChars(_activeS
5e60: 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 28 69 6e  tatement, i, (in
5e70: 74 29 66 69 65 6c 64 6f 66 66 73 65 74 2c 20 62  t)fieldoffset, b
5e80: 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66  uffer, bufferoff
5e90: 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 20  set, length);.. 
5ea0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
5eb0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
5ec0: 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65  // Retrieves the
5ed0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 62 61 63   name of the bac
5ee0: 6b 2d 65 6e 64 20 64 61 74 61 74 79 70 65 20 6f  k-end datatype o
5ef0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a 20 20  f the column..  
5f00: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5f10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
5f20: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
5f30: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
5f40: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
5f50: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72  /// <returns>str
5f60: 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ing</returns>.. 
5f70: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
5f80: 64 65 20 73 74 72 69 6e 67 20 47 65 74 44 61 74  de string GetDat
5f90: 61 54 79 70 65 4e 61 6d 65 28 69 6e 74 20 69 29  aTypeName(int i)
5fa0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5fb0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5fc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
5fd0: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
5fe0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
5ff0: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
6000: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
6010: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
6020: 2e 47 65 74 44 61 74 61 54 79 70 65 4e 61 6d 65  .GetDataTypeName
6030: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
6040: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d  bleFieldCount);.
6050: 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70 65 41  ...        TypeA
6060: 66 66 69 6e 69 74 79 20 61 66 66 69 6e 20 3d 20  ffinity affin = 
6070: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 55 6e 69  TypeAffinity.Uni
6080: 6e 69 74 69 61 6c 69 7a 65 64 3b 0d 0a 20 20 20  nitialized;..   
6090: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
60a0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
60b0: 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 5f 61 63  l.ColumnType(_ac
60c0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
60d0: 2c 20 72 65 66 20 61 66 66 69 6e 29 3b 0d 0a 20  , ref affin);.. 
60e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
60f0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
6100: 2f 2f 20 52 65 74 72 69 65 76 65 20 74 68 65 20  // Retrieve the 
6110: 63 6f 6c 75 6d 6e 20 61 73 20 61 20 64 61 74 65  column as a date
6120: 2f 74 69 6d 65 20 76 61 6c 75 65 0d 0a 20 20 20  /time value..   
6130: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
6140: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
6150: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
6160: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
6170: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
6180: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 44 61 74 65  // <returns>Date
6190: 54 69 6d 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  Time</returns>..
61a0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
61b0: 69 64 65 20 44 61 74 65 54 69 6d 65 20 47 65 74  ide DateTime Get
61c0: 44 61 74 65 54 69 6d 65 28 69 6e 74 20 69 29 0d  DateTime(int i).
61d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
61e0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
61f0: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
6200: 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  ForGet();....   
6210: 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73       if ((_flags
6220: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
6230: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
6240: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
6250: 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c  allbacks) == SQL
6260: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6270: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
6280: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
6290: 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ks)..        {..
62a0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
62b0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
62c0: 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51  e value = new SQ
62d0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
62e0: 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue();..        
62f0: 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74      bool complet
6300: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
6310: 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75    InvokeReadValu
6320: 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77  eCallback(i, new
6330: 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65   SQLiteReadValue
6340: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
6350: 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74              "Get
6360: 44 61 74 65 54 69 6d 65 22 2c 20 6e 75 6c 6c 2c  DateTime", null,
6370: 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d   value), out com
6380: 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  plete);....     
6390: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c         if (compl
63a0: 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ete)..          
63b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
63c0: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 44       if (value.D
63d0: 61 74 65 54 69 6d 65 56 61 6c 75 65 20 3d 3d 20  ateTimeValue == 
63e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
63f0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
6400: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
6410: 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 64 61  tion("missing da
6420: 74 65 2f 74 69 6d 65 20 72 65 74 75 72 6e 20 76  te/time return v
6430: 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  alue");....     
6440: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6450: 6e 20 28 44 61 74 65 54 69 6d 65 29 76 61 6c 75  n (DateTime)valu
6460: 65 2e 44 61 74 65 54 69 6d 65 56 61 6c 75 65 3b  e.DateTimeValue;
6470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6480: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
6490: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
64a0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
64b0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
64c0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
64d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
64e0: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 61 74   _keyInfo.GetDat
64f0: 65 54 69 6d 65 28 69 20 2d 20 50 72 69 76 61 74  eTime(i - Privat
6500: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
6510: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
6520: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
6530: 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29 3b 0d  Type.DateTime);.
6540: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6550: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
6560: 2e 5f 73 71 6c 2e 47 65 74 44 61 74 65 54 69 6d  ._sql.GetDateTim
6570: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
6580: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
6590: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
65a0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
65b0: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 75 6d 6e  rieve the column
65c0: 20 61 73 20 61 20 64 65 63 69 6d 61 6c 20 76 61   as a decimal va
65d0: 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  lue..    /// </s
65e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
65f0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
6600: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
6610: 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d  e column.</param
6620: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
6630: 72 6e 73 3e 64 65 63 69 6d 61 6c 3c 2f 72 65 74  rns>decimal</ret
6640: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
6650: 63 20 6f 76 65 72 72 69 64 65 20 64 65 63 69 6d  c override decim
6660: 61 6c 20 47 65 74 44 65 63 69 6d 61 6c 28 69 6e  al GetDecimal(in
6670: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
6680: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6690: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
66a0: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
66b0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
66c0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
66d0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
66e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
66f0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
6700: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
6710: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
6720: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
6730: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
6740: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6750: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
6760: 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e  rValue value = n
6770: 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  ew SQLiteDataRea
6780: 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20  derValue();..   
6790: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f           bool co
67a0: 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20  mplete;....     
67b0: 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61         InvokeRea
67c0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69  dValueCallback(i
67d0: 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  , new SQLiteRead
67e0: 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d  ValueEventArgs(.
67f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6800: 20 22 47 65 74 44 65 63 69 6d 61 6c 22 2c 20 6e   "GetDecimal", n
6810: 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74  ull, value), out
6820: 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20   complete);.... 
6830: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
6840: 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20  omplete)..      
6850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6860: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
6870: 75 65 2e 44 65 63 69 6d 61 6c 56 61 6c 75 65 20  ue.DecimalValue 
6880: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
6890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
68a0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
68b0: 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67  ception("missing
68c0: 20 64 65 63 69 6d 61 6c 20 72 65 74 75 72 6e 20   decimal return 
68d0: 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  value");....    
68e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
68f0: 72 6e 20 28 64 65 63 69 6d 61 6c 29 76 61 6c 75  rn (decimal)valu
6900: 65 2e 44 65 63 69 6d 61 6c 56 61 6c 75 65 3b 0d  e.DecimalValue;.
6910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6920: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6930: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
6940: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
6950: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
6960: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
6970: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6980: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 65 63 69  _keyInfo.GetDeci
6990: 6d 61 6c 28 69 20 2d 20 50 72 69 76 61 74 65 56  mal(i - PrivateV
69a0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
69b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65  );....        Ve
69c0: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
69d0: 70 65 2e 44 65 63 69 6d 61 6c 29 3b 0d 0a 20 20  pe.Decimal);..  
69e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 65 63        return Dec
69f0: 69 6d 61 6c 2e 50 61 72 73 65 28 5f 61 63 74 69  imal.Parse(_acti
6a00: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
6a10: 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65  .GetText(_active
6a20: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 2c 20 4e  Statement, i), N
6a30: 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f  umberStyles.Allo
6a40: 77 44 65 63 69 6d 61 6c 50 6f 69 6e 74 20 7c 20  wDecimalPoint | 
6a50: 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c  NumberStyles.All
6a60: 6f 77 45 78 70 6f 6e 65 6e 74 20 7c 20 4e 75 6d  owExponent | Num
6a70: 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f 77 4c  berStyles.AllowL
6a80: 65 61 64 69 6e 67 53 69 67 6e 2c 20 43 75 6c 74  eadingSign, Cult
6a90: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
6aa0: 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20  tCulture);..    
6ab0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
6ac0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
6ad0: 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75  Returns the colu
6ae0: 6d 6e 20 61 73 20 61 20 64 6f 75 62 6c 65 0d 0a  mn as a double..
6af0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6b00: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
6b10: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
6b20: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
6b30: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
6b40: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 64    /// <returns>d
6b50: 6f 75 62 6c 65 3c 2f 72 65 74 75 72 6e 73 3e 0d  ouble</returns>.
6b60: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
6b70: 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74 44  ride double GetD
6b80: 6f 75 62 6c 65 28 69 6e 74 20 69 29 0d 0a 20 20  ouble(int i)..  
6b90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
6ba0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
6bb0: 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72         VerifyFor
6bc0: 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Get();....      
6bd0: 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20    if ((_flags & 
6be0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6bf0: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
6c00: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
6c10: 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65  backs) == SQLite
6c20: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6c30: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
6c40: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
6c50: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
6c60: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44           SQLiteD
6c70: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76  ataReaderValue v
6c80: 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  alue = new SQLit
6c90: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
6ca0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
6cb0: 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d   bool complete;.
6cc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
6cd0: 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61  nvokeReadValueCa
6ce0: 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51  llback(i, new SQ
6cf0: 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65  LiteReadValueEve
6d00: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
6d10: 20 20 20 20 20 20 20 20 20 22 47 65 74 44 6f 75           "GetDou
6d20: 62 6c 65 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75  ble", null, valu
6d30: 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  e), out complete
6d40: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6d50: 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d    if (complete).
6d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d80: 69 66 20 28 76 61 6c 75 65 2e 44 6f 75 62 6c 65  if (value.Double
6d90: 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Value == null)..
6da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6db0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
6dc0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d  LiteException("m
6dd0: 69 73 73 69 6e 67 20 64 6f 75 62 6c 65 20 72 65  issing double re
6de0: 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d  turn value");...
6df0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6e00: 20 72 65 74 75 72 6e 20 28 64 6f 75 62 6c 65 29   return (double)
6e10: 76 61 6c 75 65 2e 44 6f 75 62 6c 65 56 61 6c 75  value.DoubleValu
6e20: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6e30: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
6e40: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
6e50: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
6e60: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
6e70: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
6e80: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6e90: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44  rn _keyInfo.GetD
6ea0: 6f 75 62 6c 65 28 69 20 2d 20 50 72 69 76 61 74  ouble(i - Privat
6eb0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
6ec0: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
6ed0: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
6ee0: 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b 0d 0a 20  Type.Double);.. 
6ef0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
6f00: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
6f10: 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f 61  sql.GetDouble(_a
6f20: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
6f30: 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  i);..    }....  
6f40: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6f50: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
6f60: 20 74 68 65 20 2e 4e 45 54 20 74 79 70 65 20 6f   the .NET type o
6f70: 66 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e  f a given column
6f80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6f90: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
6fa0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
6fb0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
6fc0: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
6fd0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
6fe0: 3e 54 79 70 65 3c 2f 72 65 74 75 72 6e 73 3e 0d  >Type</returns>.
6ff0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
7000: 72 69 64 65 20 54 79 70 65 20 47 65 74 46 69 65  ride Type GetFie
7010: 6c 64 54 79 70 65 28 69 6e 74 20 69 29 0d 0a 20  ldType(int i).. 
7020: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
7030: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
7040: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
7050: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
7060: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
7070: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
7080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
7090: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
70a0: 74 46 69 65 6c 64 54 79 70 65 28 69 20 2d 20 50  tFieldType(i - P
70b0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
70c0: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
70d0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
70e0: 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65  teConvert.SQLite
70f0: 54 79 70 65 54 6f 54 79 70 65 28 47 65 74 53 51  TypeToType(GetSQ
7100: 4c 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c  LiteType(_flags,
7110: 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a   i));..    }....
7120: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
7130: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
7140: 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61  ns a column as a
7150: 20 66 6c 6f 61 74 20 76 61 6c 75 65 0d 0a 20 20   float value..  
7160: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
7170: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
7180: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
7190: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
71a0: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
71b0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 66 6c 6f  /// <returns>flo
71c0: 61 74 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  at</returns>..  
71d0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
71e0: 65 20 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61 74  e float GetFloat
71f0: 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
7200: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
7210: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
7220: 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
7230: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
7240: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
7250: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7260: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
7270: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
7280: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
7290: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
72a0: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
72b0: 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20  eCallbacks)..   
72c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
72d0: 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65      SQLiteDataRe
72e0: 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20  aderValue value 
72f0: 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61  = new SQLiteData
7300: 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a  ReaderValue();..
7310: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
7320: 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20   complete;....  
7330: 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65            Invoke
7340: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
7350: 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52  k(i, new SQLiteR
7360: 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67  eadValueEventArg
7370: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
7380: 20 20 20 20 22 47 65 74 46 6c 6f 61 74 22 2c 20      "GetFloat", 
7390: 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75  null, value), ou
73a0: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a  t complete);....
73b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
73c0: 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20  complete)..     
73d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
73e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
73f0: 6c 75 65 2e 46 6c 6f 61 74 56 61 6c 75 65 20 3d  lue.FloatValue =
7400: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7410: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
7420: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
7430: 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20  eption("missing 
7440: 66 6c 6f 61 74 20 72 65 74 75 72 6e 20 76 61 6c  float return val
7450: 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ue");....       
7460: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7470: 28 66 6c 6f 61 74 29 76 61 6c 75 65 2e 46 6c 6f  (float)value.Flo
7480: 61 74 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  atValue;..      
7490: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
74a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
74b0: 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69   (i >= PrivateVi
74c0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
74d0: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
74e0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
74f0: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
7500: 6f 2e 47 65 74 46 6c 6f 61 74 28 69 20 2d 20 50  o.GetFloat(i - P
7510: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
7520: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
7530: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
7540: 69 2c 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65  i, DbType.Single
7550: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
7560: 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 53 69 6e  rn Convert.ToSin
7570: 67 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  gle(_activeState
7580: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f 75  ment._sql.GetDou
7590: 62 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ble(_activeState
75a0: 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20  ment, i));..    
75b0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
75c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
75d0: 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75  Returns the colu
75e0: 6d 6e 20 61 73 20 61 20 47 75 69 64 0d 0a 20 20  mn as a Guid..  
75f0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
7600: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
7610: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
7620: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
7630: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
7640: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 47 75 69  /// <returns>Gui
7650: 64 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  d</returns>..   
7660: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
7670: 20 47 75 69 64 20 47 65 74 47 75 69 64 28 69 6e   Guid GetGuid(in
7680: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
7690: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
76a0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
76b0: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
76c0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
76d0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
76e0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
76f0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
7700: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
7710: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7720: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
7730: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
7740: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
7750: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7760: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
7770: 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e  rValue value = n
7780: 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  ew SQLiteDataRea
7790: 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20  derValue();..   
77a0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f           bool co
77b0: 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20  mplete;....     
77c0: 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61         InvokeRea
77d0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69  dValueCallback(i
77e0: 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  , new SQLiteRead
77f0: 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d  ValueEventArgs(.
7800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7810: 20 22 47 65 74 47 75 69 64 22 2c 20 6e 75 6c 6c   "GetGuid", null
7820: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
7830: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
7840: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
7850: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
7860: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7870: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
7880: 47 75 69 64 56 61 6c 75 65 20 3d 3d 20 6e 75 6c  GuidValue == nul
7890: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
78a0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
78b0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
78c0: 6e 28 22 6d 69 73 73 69 6e 67 20 67 75 69 64 20  n("missing guid 
78d0: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
78e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
78f0: 20 20 20 72 65 74 75 72 6e 20 28 47 75 69 64 29     return (Guid)
7900: 76 61 6c 75 65 2e 47 75 69 64 56 61 6c 75 65 3b  value.GuidValue;
7910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7920: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
7930: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
7940: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
7950: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
7960: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
7970: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7980: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 47 75 69   _keyInfo.GetGui
7990: 64 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  d(i - PrivateVis
79a0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
79b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70 65  ....        Type
79c0: 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e 69 74  Affinity affinit
79d0: 79 20 3d 20 56 65 72 69 66 79 54 79 70 65 28 69  y = VerifyType(i
79e0: 2c 20 44 62 54 79 70 65 2e 47 75 69 64 29 3b 0d  , DbType.Guid);.
79f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 66 66  .        if (aff
7a00: 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66  inity == TypeAff
7a10: 69 6e 69 74 79 2e 42 6c 6f 62 29 0d 0a 20 20 20  inity.Blob)..   
7a20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7a30: 20 20 20 20 62 79 74 65 5b 5d 20 62 75 66 66 65      byte[] buffe
7a40: 72 20 3d 20 6e 65 77 20 62 79 74 65 5b 31 36 5d  r = new byte[16]
7a50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  ;..            _
7a60: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
7a70: 5f 73 71 6c 2e 47 65 74 42 79 74 65 73 28 5f 61  _sql.GetBytes(_a
7a80: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
7a90: 69 2c 20 30 2c 20 62 75 66 66 65 72 2c 20 30 2c  i, 0, buffer, 0,
7aa0: 20 31 36 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   16);..         
7ab0: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
7ac0: 69 64 28 62 75 66 66 65 72 29 3b 0d 0a 20 20 20  id(buffer);..   
7ad0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7ae0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
7af0: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
7b00: 64 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  d(_activeStateme
7b10: 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28  nt._sql.GetText(
7b20: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
7b30: 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  , i));..    }...
7b40: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
7b50: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
7b60: 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  rns the column a
7b70: 73 20 61 20 73 68 6f 72 74 0d 0a 20 20 20 20 2f  s a short..    /
7b80: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
7b90: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
7ba0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
7bb0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
7bc0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
7bd0: 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74 31 36 3c   <returns>Int16<
7be0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
7bf0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49  ublic override I
7c00: 6e 74 31 36 20 47 65 74 49 6e 74 31 36 28 69 6e  nt16 GetInt16(in
7c10: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
7c20: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
7c30: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
7c40: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
7c50: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
7c60: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
7c70: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
7c80: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
7c90: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
7ca0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7cb0: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
7cc0: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
7cd0: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
7ce0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7cf0: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
7d00: 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e  rValue value = n
7d10: 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  ew SQLiteDataRea
7d20: 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20  derValue();..   
7d30: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f           bool co
7d40: 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20  mplete;....     
7d50: 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61         InvokeRea
7d60: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69  dValueCallback(i
7d70: 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  , new SQLiteRead
7d80: 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d  ValueEventArgs(.
7d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7da0: 20 22 47 65 74 49 6e 74 31 36 22 2c 20 6e 75 6c   "GetInt16", nul
7db0: 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63  l, value), out c
7dc0: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
7dd0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
7de0: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
7df0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7e00: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
7e10: 2e 49 6e 74 31 36 56 61 6c 75 65 20 3d 3d 20 6e  .Int16Value == n
7e20: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7e30: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
7e40: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
7e50: 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e 74  ion("missing int
7e60: 31 36 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22  16 return value"
7e70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7e80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e        return (In
7e90: 74 31 36 29 76 61 6c 75 65 2e 49 6e 74 31 36 56  t16)value.Int16V
7ea0: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
7eb0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
7ec0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
7ed0: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
7ee0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
7ef0: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
7f00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
7f10: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
7f20: 65 74 49 6e 74 31 36 28 69 20 2d 20 50 72 69 76  etInt16(i - Priv
7f30: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
7f40: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
7f50: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
7f60: 44 62 54 79 70 65 2e 49 6e 74 31 36 29 3b 0d 0a  DbType.Int16);..
7f70: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43          return C
7f80: 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 31 36 28 5f  onvert.ToInt16(_
7f90: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
7fa0: 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61  _sql.GetInt32(_a
7fb0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
7fc0: 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  i));..    }.... 
7fd0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
7fe0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  ..    /// Retrie
7ff0: 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  ves the column a
8000: 73 20 61 6e 20 69 6e 74 0d 0a 20 20 20 20 2f 2f  s an int..    //
8010: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
8020: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
8030: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
8040: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
8050: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
8060: 3c 72 65 74 75 72 6e 73 3e 49 6e 74 33 32 3c 2f  <returns>Int32</
8070: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
8080: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e  blic override In
8090: 74 33 32 20 47 65 74 49 6e 74 33 32 28 69 6e 74  t32 GetInt32(int
80a0: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
80b0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
80c0: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
80d0: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
80e0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
80f0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
8100: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
8110: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
8120: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
8130: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8140: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
8150: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
8160: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
8170: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8180: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
8190: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
81a0: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
81b0: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
81c0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
81d0: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
81e0: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
81f0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
8200: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
8210: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8230: 22 47 65 74 49 6e 74 33 32 22 2c 20 6e 75 6c 6c  "GetInt32", null
8240: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
8250: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
8260: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
8270: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
8280: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8290: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
82a0: 49 6e 74 33 32 56 61 6c 75 65 20 3d 3d 20 6e 75  Int32Value == nu
82b0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
82c0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
82d0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
82e0: 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 33  on("missing int3
82f0: 32 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29  2 return value")
8300: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8310: 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74       return (Int
8320: 33 32 29 76 61 6c 75 65 2e 49 6e 74 33 32 56 61  32)value.Int32Va
8330: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
8340: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
8350: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
8360: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
8370: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
8380: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
8390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
83a0: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
83b0: 74 49 6e 74 33 32 28 69 20 2d 20 50 72 69 76 61  tInt32(i - Priva
83c0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
83d0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
83e0: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
83f0: 62 54 79 70 65 2e 49 6e 74 33 32 29 3b 0d 0a 20  bType.Int32);.. 
8400: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
8410: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
8420: 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63  sql.GetInt32(_ac
8430: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
8440: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
8450: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8460: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
8470: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
8480: 61 20 6c 6f 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20  a long..    /// 
8490: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
84a0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
84b0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
84c0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
84d0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
84e0: 65 74 75 72 6e 73 3e 49 6e 74 36 34 3c 2f 72 65  eturns>Int64</re
84f0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
8500: 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 36  ic override Int6
8510: 34 20 47 65 74 49 6e 74 36 34 28 69 6e 74 20 69  4 GetInt64(int i
8520: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8530: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
8540: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
8550: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
8560: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
8570: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
8580: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
8590: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
85a0: 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53  eCallbacks) == S
85b0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
85c0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
85d0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
85e0: 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  acks)..        {
85f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
8600: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
8610: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
8620: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
8630: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
8640: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
8650: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
8660: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
8670: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
8680: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
8690: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
86b0: 65 74 49 6e 74 36 34 22 2c 20 6e 75 6c 6c 2c 20  etInt64", null, 
86c0: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
86d0: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
86e0: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
86f0: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
8700: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8710: 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 49 6e      if (value.In
8720: 74 36 34 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  t64Value == null
8730: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8740: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
8750: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
8760: 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 36 34 20  ("missing int64 
8770: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
8780: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8790: 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74 36 34     return (Int64
87a0: 29 76 61 6c 75 65 2e 49 6e 74 36 34 56 61 6c 75  )value.Int64Valu
87b0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
87c0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
87d0: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
87e0: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
87f0: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
8800: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
8810: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8820: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49  rn _keyInfo.GetI
8830: 6e 74 36 34 28 69 20 2d 20 50 72 69 76 61 74 65  nt64(i - Private
8840: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
8850: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56  t);....        V
8860: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
8870: 79 70 65 2e 49 6e 74 36 34 29 3b 0d 0a 20 20 20  ype.Int64);..   
8880: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
8890: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
88a0: 6c 2e 47 65 74 49 6e 74 36 34 28 5f 61 63 74 69  l.GetInt64(_acti
88b0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
88c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
88d0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
88e0: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
88f0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
8900: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20  column..    /// 
8910: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8920: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
8930: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
8940: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
8950: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
8960: 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72  eturns>string</r
8970: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
8980: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
8990: 69 6e 67 20 47 65 74 4e 61 6d 65 28 69 6e 74 20  ing GetName(int 
89a0: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
89b0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
89c0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
89d0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
89e0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
89f0: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
8a00: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8a10: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
8a20: 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50  fo.GetName(i - P
8a30: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
8a40: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
8a50: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
8a60: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
8a70: 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63  l.ColumnName(_ac
8a80: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
8a90: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
8aa0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8ab0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
8ac0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
8ad0: 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
8ae0: 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
8af0: 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a  cified column...
8b00: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8b10: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
8b20: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
8b30: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
8b40: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
8b50: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73    /// <returns>s
8b60: 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d  tring</returns>.
8b70: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69  .    public stri
8b80: 6e 67 20 47 65 74 44 61 74 61 62 61 73 65 4e 61  ng GetDatabaseNa
8b90: 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  me(int i)..    {
8ba0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
8bb0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
8bc0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
8bd0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
8be0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
8bf0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
8c00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8c10: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d   _keyInfo.GetNam
8c20: 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  e(i - PrivateVis
8c30: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
8c40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
8c50: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
8c60: 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 44  ent._sql.ColumnD
8c70: 61 74 61 62 61 73 65 4e 61 6d 65 28 5f 61 63 74  atabaseName(_act
8c80: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
8c90: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
8ca0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
8cb0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
8cc0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
8cd0: 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20  able associated 
8ce0: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
8cf0: 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20  ed column...    
8d00: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
8d10: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
8d20: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
8d30: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
8d40: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
8d50: 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e  / <returns>strin
8d60: 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  g</returns>..   
8d70: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47   public string G
8d80: 65 74 54 61 62 6c 65 4e 61 6d 65 28 69 6e 74 20  etTableName(int 
8d90: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
8da0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
8db0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
8dc0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
8dd0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
8de0: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
8df0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8e00: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
8e10: 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50  fo.GetName(i - P
8e20: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
8e30: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
8e40: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
8e50: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
8e60: 6c 2e 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d  l.ColumnTableNam
8e70: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
8e80: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
8e90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
8ea0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
8eb0: 75 72 6e 73 20 74 68 65 20 6f 72 69 67 69 6e 61  urns the origina
8ec0: 6c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 70  l name of the sp
8ed0: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d  ecified column..
8ee0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
8ef0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
8f00: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
8f10: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
8f20: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
8f30: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
8f40: 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e  string</returns>
8f50: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72  ..    public str
8f60: 69 6e 67 20 47 65 74 4f 72 69 67 69 6e 61 6c 4e  ing GetOriginalN
8f70: 61 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ame(int i)..    
8f80: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
8f90: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
8fa0: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
8fb0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
8fc0: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
8fd0: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
8fe0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
8ff0: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61  n _keyInfo.GetNa
9000: 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  me(i - PrivateVi
9010: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
9020: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
9030: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
9040: 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
9050: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 5f 61 63  OriginalName(_ac
9060: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
9070: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9080: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
9090: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
90a0: 73 20 74 68 65 20 69 20 6f 66 20 61 20 63 6f 6c  s the i of a col
90b0: 75 6d 6e 2c 20 67 69 76 65 6e 20 69 74 73 20 6e  umn, given its n
90c0: 61 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ame..    /// </s
90d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
90e0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61   <param name="na
90f0: 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20  me">The name of 
9100: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
9110: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a  trieve</param>..
9120: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
9130: 3e 54 68 65 20 69 6e 74 20 69 20 6f 66 20 74 68  >The int i of th
9140: 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
9150: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
9160: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 4f  verride int GetO
9170: 72 64 69 6e 61 6c 28 73 74 72 69 6e 67 20 6e 61  rdinal(string na
9180: 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
9190: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
91a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
91b0: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
91c0: 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  ) SQLiteCommand.
91d0: 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b  Check(_command);
91e0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ....      //..  
91f0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 72      // NOTE: Fir
9200: 73 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65  st, check if the
9210: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 63   column name cac
9220: 68 65 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  he has been init
9230: 69 61 6c 69 7a 65 64 20 79 65 74 2e 0d 0a 20 20  ialized yet...  
9240: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20      //       If 
9250: 6e 6f 74 2c 20 64 6f 20 69 74 20 6e 6f 77 2e 0d  not, do it now..
9260: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
9270: 20 69 66 20 28 5f 66 69 65 6c 64 49 6e 64 65 78   if (_fieldIndex
9280: 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
9290: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
92a0: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
92b0: 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73  new Dictionary<s
92c0: 74 72 69 6e 67 2c 20 69 6e 74 3e 28 0d 0a 20 20  tring, int>(..  
92d0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
92e0: 6e 67 43 6f 6d 70 61 72 65 72 2e 4f 72 64 69 6e  ngComparer.Ordin
92f0: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a  alIgnoreCase);..
9300: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9310: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
9320: 54 45 3a 20 4e 65 78 74 2c 20 73 65 65 20 69 66  TE: Next, see if
9330: 20 74 68 65 20 69 6e 64 65 78 20 66 6f 72 20 74   the index for t
9340: 68 65 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c  he requested col
9350: 75 6d 6e 20 6e 61 6d 65 20 68 61 73 20 62 65 65  umn name has bee
9360: 6e 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  n..      //     
9370: 20 20 63 61 63 68 65 64 20 61 6c 72 65 61 64 79    cached already
9380: 2e 20 20 49 66 20 73 6f 2c 20 72 65 74 75 72 6e  .  If so, return
9390: 20 74 68 65 20 63 61 63 68 65 64 20 76 61 6c 75   the cached valu
93a0: 65 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 0d 0a  e.  Otherwise,..
93b0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
93c0: 6f 6f 6b 75 70 20 74 68 65 20 76 61 6c 75 65 20  ookup the value 
93d0: 61 6e 64 20 74 68 65 6e 20 63 61 63 68 65 20 74  and then cache t
93e0: 68 65 20 72 65 73 75 6c 74 20 66 6f 72 20 66 75  he result for fu
93f0: 74 75 72 65 20 75 73 65 2e 0d 0a 20 20 20 20 20  ture use...     
9400: 20 2f 2f 0d 0a 20 20 20 20 20 20 69 6e 74 20 72   //..      int r
9410: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 21  ;....      if (!
9420: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 2e 54 72  _fieldIndexes.Tr
9430: 79 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  yGetValue(name, 
9440: 6f 75 74 20 72 29 29 0d 0a 20 20 20 20 20 20 7b  out r))..      {
9450: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 20 3d 20  ..          r = 
9460: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
9470: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 49 6e 64 65  ._sql.ColumnInde
9480: 78 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  x(_activeStateme
9490: 6e 74 2c 20 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  nt, name);....  
94a0: 20 20 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d          if (r ==
94b0: 20 2d 31 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20   -1 && _keyInfo 
94c0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
94d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
94e0: 20 20 20 20 20 72 20 3d 20 5f 6b 65 79 49 6e 66       r = _keyInf
94f0: 6f 2e 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d  o.GetOrdinal(nam
9500: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
9510: 20 20 20 69 66 20 28 72 20 3e 20 2d 31 29 20 72     if (r > -1) r
9520: 20 2b 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 3b 0d 0a 20  leFieldCount;.. 
9540: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
9550: 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 49 6e          _fieldIn
9560: 64 65 78 65 73 2e 41 64 64 28 6e 61 6d 65 2c 20  dexes.Add(name, 
9570: 72 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  r);..      }....
9580: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 3b 0d        return r;.
9590: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
95a0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
95b0: 20 2f 2f 2f 20 53 63 68 65 6d 61 20 69 6e 66 6f   /// Schema info
95c0: 72 6d 61 74 69 6f 6e 20 69 6e 20 53 51 4c 69 74  rmation in SQLit
95d0: 65 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 74  e is difficult t
95e0: 6f 20 6d 61 70 20 69 6e 74 6f 20 2e 4e 45 54 20  o map into .NET 
95f0: 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 73 6f 20  conventions, so 
9600: 61 20 6c 6f 74 20 6f 66 20 77 6f 72 6b 20 6d 75  a lot of work mu
9610: 73 74 20 62 65 20 64 6f 6e 65 0d 0a 20 20 20 20  st be done..    
9620: 2f 2f 2f 20 74 6f 20 67 61 74 68 65 72 20 74 68  /// to gather th
9630: 65 20 6e 65 63 65 73 73 61 72 79 20 69 6e 66 6f  e necessary info
9640: 72 6d 61 74 69 6f 6e 20 73 6f 20 69 74 20 63 61  rmation so it ca
9650: 6e 20 62 65 20 72 65 70 72 65 73 65 6e 74 65 64  n be represented
9660: 20 69 6e 20 61 6e 20 41 44 4f 2e 4e 45 54 20 6d   in an ADO.NET m
9670: 61 6e 6e 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  anner...    /// 
9680: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9690: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
96a0: 75 72 6e 73 20 61 20 44 61 74 61 54 61 62 6c 65  urns a DataTable
96b0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
96c0: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
96d0: 6f 6e 20 66 6f 72 20 74 68 65 20 61 63 74 69 76  on for the activ
96e0: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
96f0: 6e 74 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nt being process
9700: 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ed.</returns>.. 
9710: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
9720: 64 65 20 44 61 74 61 54 61 62 6c 65 20 47 65 74  de DataTable Get
9730: 53 63 68 65 6d 61 54 61 62 6c 65 28 29 0d 0a 20  SchemaTable().. 
9740: 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63     {..      Chec
9750: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
9760: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 53 63      return GetSc
9770: 68 65 6d 61 54 61 62 6c 65 28 74 72 75 65 2c 20  hemaTable(true, 
9780: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  false);..    }..
9790: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
97a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97e0: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
97f0: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 43 6c   ColumnParent Cl
9800: 61 73 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ass..    private
9810: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43 6f   sealed class Co
9820: 6c 75 6d 6e 50 61 72 65 6e 74 20 3a 20 49 45 71  lumnParent : IEq
9830: 75 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 43  ualityComparer<C
9840: 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 0d 0a 20 20  olumnParent>..  
9850: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
9860: 67 69 6f 6e 20 50 75 62 6c 69 63 20 46 69 65 6c  gion Public Fiel
9870: 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ds..        publ
9880: 69 63 20 73 74 72 69 6e 67 20 44 61 74 61 62 61  ic string Databa
9890: 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  seName;..       
98a0: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54   public string T
98b0: 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  ableName;..     
98c0: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
98d0: 20 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20   ColumnName;..  
98e0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
98f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
9900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9940: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
9950: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
9960: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
9970: 20 20 20 20 70 75 62 6c 69 63 20 43 6f 6c 75 6d      public Colum
9980: 6e 50 61 72 65 6e 74 28 29 0d 0a 20 20 20 20 20  nParent()..     
9990: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
99a0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
99b0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
99c0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
99d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9a10: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
9a20: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 0d 0a   ColumnParent(..
9a30: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9a40: 6e 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65 2c  ng databaseName,
9a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
9a60: 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 2c 0d  ring tableName,.
9a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
9a80: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 0d 0a  ing columnName..
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
9aa0: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
9ab0: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s()..        {..
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
9ad0: 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 20 3d 20  .DatabaseName = 
9ae0: 64 61 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20  databaseName;.. 
9af0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
9b00: 54 61 62 6c 65 4e 61 6d 65 20 3d 20 74 61 62 6c  TableName = tabl
9b10: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
9b20: 20 20 20 20 74 68 69 73 2e 43 6f 6c 75 6d 6e 4e      this.ColumnN
9b30: 61 6d 65 20 3d 20 63 6f 6c 75 6d 6e 4e 61 6d 65  ame = columnName
9b40: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
9b50: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
9b60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
9b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bb0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
9bc0: 72 65 67 69 6f 6e 20 49 45 71 75 61 6c 69 74 79  region IEquality
9bd0: 43 6f 6d 70 61 72 65 72 3c 43 6f 6c 75 6d 6e 50  Comparer<ColumnP
9be0: 61 72 65 6e 74 3e 20 4d 65 6d 62 65 72 73 0d 0a  arent> Members..
9bf0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
9c00: 6f 6f 6c 20 45 71 75 61 6c 73 28 43 6f 6c 75 6d  ool Equals(Colum
9c10: 6e 50 61 72 65 6e 74 20 78 2c 20 43 6f 6c 75 6d  nParent x, Colum
9c20: 6e 50 61 72 65 6e 74 20 79 29 0d 0a 20 20 20 20  nParent y)..    
9c30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9c40: 20 20 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c     if ((x == nul
9c50: 6c 29 20 26 26 20 28 79 20 3d 3d 20 6e 75 6c 6c  l) && (y == null
9c60: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
9c70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9c80: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
9c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
9cb0: 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29   if ((x == null)
9cc0: 20 7c 7c 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29   || (y == null))
9cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9cf0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9d10: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
9d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d40: 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
9d50: 6c 73 28 78 2e 44 61 74 61 62 61 73 65 4e 61 6d  ls(x.DatabaseNam
9d60: 65 2c 20 79 2e 44 61 74 61 62 61 73 65 4e 61 6d  e, y.DatabaseNam
9d70: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
9d90: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
9da0: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29  inalIgnoreCase))
9db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9dc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9dd0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9de0: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
9df0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
9e10: 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
9e20: 78 2e 54 61 62 6c 65 4e 61 6d 65 2c 20 79 2e 54  x.TableName, y.T
9e30: 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  ableName,..     
9e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e50: 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
9e60: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
9e70: 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20 20 20  eCase))..       
9e80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ea0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
9ec0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9ed0: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
9ee0: 45 71 75 61 6c 73 28 78 2e 43 6f 6c 75 6d 6e 4e  Equals(x.ColumnN
9ef0: 61 6d 65 2c 20 79 2e 43 6f 6c 75 6d 6e 4e 61 6d  ame, y.ColumnNam
9f00: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
9f10: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
9f20: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
9f30: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29  inalIgnoreCase))
9f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9f50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9f60: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9f70: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
9f80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9fa0: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
9fb0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9fc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
9fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a010: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a020: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 47 65 74    public int Get
a030: 48 61 73 68 43 6f 64 65 28 43 6f 6c 75 6d 6e 50  HashCode(ColumnP
a040: 61 72 65 6e 74 20 6f 62 6a 29 0d 0a 20 20 20 20  arent obj)..    
a050: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a060: 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20     int result = 
a070: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
a080: 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75    if ((obj != nu
a090: 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 44 61 74 61  ll) && (obj.Data
a0a0: 62 61 73 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  baseName != null
a0b0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
a0c0: 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62      result ^= ob
a0d0: 6a 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 2e 47  j.DatabaseName.G
a0e0: 65 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d  etHashCode();...
a0f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
a100: 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26  ((obj != null) &
a110: 26 20 28 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d 65  & (obj.TableName
a120: 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   != null))..    
a130: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
a140: 6c 74 20 5e 3d 20 6f 62 6a 2e 54 61 62 6c 65 4e  lt ^= obj.TableN
a150: 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28  ame.GetHashCode(
a160: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
a170: 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75    if ((obj != nu
a180: 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 43 6f 6c 75  ll) && (obj.Colu
a190: 6d 6e 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29  mnName != null))
a1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a1b0: 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e    result ^= obj.
a1c0: 43 6f 6c 75 6d 6e 4e 61 6d 65 2e 47 65 74 48 61  ColumnName.GetHa
a1d0: 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20  shCode();....   
a1e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a1f0: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
a200: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
a210: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
a220: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
a230: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
a240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a280: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
a290: 73 74 61 74 69 63 20 76 6f 69 64 20 47 65 74 53  static void GetS
a2a0: 74 61 74 65 6d 65 6e 74 43 6f 6c 75 6d 6e 50 61  tatementColumnPa
a2b0: 72 65 6e 74 73 28 0d 0a 20 20 20 20 20 20 20 20  rents(..        
a2c0: 53 51 4c 69 74 65 42 61 73 65 20 73 71 6c 2c 0d  SQLiteBase sql,.
a2d0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
a2e0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 0d 0a  tatement stmt,..
a2f0: 20 20 20 20 20 20 20 20 69 6e 74 20 66 69 65 6c          int fiel
a300: 64 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  dCount,..       
a310: 20 72 65 66 20 44 69 63 74 69 6f 6e 61 72 79 3c   ref Dictionary<
a320: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69  ColumnParent, Li
a330: 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54  st<int>> parentT
a340: 6f 43 6f 6c 75 6d 6e 73 2c 0d 0a 20 20 20 20 20  oColumns,..     
a350: 20 20 20 72 65 66 20 44 69 63 74 69 6f 6e 61 72     ref Dictionar
a360: 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72  y<int, ColumnPar
a370: 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54 6f 50 61 72  ent> columnToPar
a380: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ent..        )..
a390: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
a3a0: 66 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  f (parentToColum
a3b0: 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
a3c0: 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 54           parentT
a3d0: 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e 65 77 20 44  oColumns = new D
a3e0: 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e  ictionary<Column
a3f0: 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74  Parent, List<int
a400: 3e 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  >>(..           
a410: 20 20 20 20 20 6e 65 77 20 43 6f 6c 75 6d 6e 50       new ColumnP
a420: 61 72 65 6e 74 28 29 29 3b 0d 0a 0d 0a 20 20 20  arent());....   
a430: 20 20 20 20 20 69 66 20 28 63 6f 6c 75 6d 6e 54       if (columnT
a440: 6f 50 61 72 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  oParent == null)
a450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
a460: 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 20 6e  lumnToParent = n
a470: 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e  ew Dictionary<in
a480: 74 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e  t, ColumnParent>
a490: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  ();....        f
a4a0: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
a4b0: 20 3c 20 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e   < fieldCount; n
a4c0: 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ++)..        {..
a4d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
a4e0: 6e 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65 20  ng databaseName 
a4f0: 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 44 61 74 61  = sql.ColumnData
a500: 62 61 73 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e  baseName(stmt, n
a510: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a520: 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65  string tableName
a530: 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 54 61 62   = sql.ColumnTab
a540: 6c 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b  leName(stmt, n);
a550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
a560: 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 20  ring columnName 
a570: 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67  = sql.ColumnOrig
a580: 69 6e 61 6c 4e 61 6d 65 28 73 74 6d 74 2c 20 6e  inalName(stmt, n
a590: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
a5a0: 20 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6b    ColumnParent k
a5b0: 65 79 20 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e 50  ey = new ColumnP
a5c0: 61 72 65 6e 74 28 64 61 74 61 62 61 73 65 4e 61  arent(databaseNa
a5d0: 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65 2c 20 6e  me, tableName, n
a5e0: 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ull);..         
a5f0: 20 20 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20     ColumnParent 
a600: 76 61 6c 75 65 20 3d 20 6e 65 77 20 43 6f 6c 75  value = new Colu
a610: 6d 6e 50 61 72 65 6e 74 28 64 61 74 61 62 61 73  mnParent(databas
a620: 65 4e 61 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65  eName, tableName
a630: 2c 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0d 0a  , columnName);..
a640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 69  ..            Li
a650: 73 74 3c 69 6e 74 3e 20 69 6e 64 65 78 4c 69 73  st<int> indexLis
a660: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
a670: 20 20 69 66 20 28 21 70 61 72 65 6e 74 54 6f 43    if (!parentToC
a680: 6f 6c 75 6d 6e 73 2e 54 72 79 47 65 74 56 61 6c  olumns.TryGetVal
a690: 75 65 28 6b 65 79 2c 20 6f 75 74 20 69 6e 64 65  ue(key, out inde
a6a0: 78 4c 69 73 74 29 29 0d 0a 20 20 20 20 20 20 20  xList))..       
a6b0: 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 54           parentT
a6c0: 6f 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 6b 65 79  oColumns.Add(key
a6d0: 2c 20 6e 65 77 20 4c 69 73 74 3c 69 6e 74 3e 28  , new List<int>(
a6e0: 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 6e 20 7d 29  new int[] { n })
a6f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a700: 65 6c 73 65 20 69 66 20 28 69 6e 64 65 78 4c 69  else if (indexLi
a710: 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st != null)..   
a720: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
a730: 65 78 4c 69 73 74 2e 41 64 64 28 6e 29 3b 0d 0a  exList.Add(n);..
a740: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
a750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a760: 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e    parentToColumn
a770: 73 5b 6b 65 79 5d 20 3d 20 6e 65 77 20 4c 69 73  s[key] = new Lis
a780: 74 3c 69 6e 74 3e 28 6e 65 77 20 69 6e 74 5b 5d  t<int>(new int[]
a790: 20 7b 20 6e 20 7d 29 3b 0d 0a 0d 0a 20 20 20 20   { n });....    
a7a0: 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f          columnTo
a7b0: 50 61 72 65 6e 74 2e 41 64 64 28 6e 2c 20 76 61  Parent.Add(n, va
a7c0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
a7d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
a7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a830: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
a840: 20 69 6e 74 20 43 6f 75 6e 74 50 61 72 65 6e 74   int CountParent
a850: 73 28 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74  s(..        Dict
a860: 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72  ionary<ColumnPar
a870: 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20  ent, List<int>> 
a880: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 0d  parentToColumns.
a890: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
a8a0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72  {..        int r
a8b0: 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  esult = 0;....  
a8c0: 20 20 20 20 20 20 69 66 20 28 70 61 72 65 6e 74        if (parent
a8d0: 54 6f 43 6f 6c 75 6d 6e 73 20 21 3d 20 6e 75 6c  ToColumns != nul
a8e0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
a8f0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
a900: 63 68 20 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ch (ColumnParent
a910: 20 6b 65 79 20 69 6e 20 70 61 72 65 6e 74 54 6f   key in parentTo
a920: 43 6f 6c 75 6d 6e 73 2e 4b 65 79 73 29 0d 0a 20  Columns.Keys).. 
a930: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a950: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
a960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a970: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
a980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a990: 20 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d   string tableNam
a9a0: 65 20 3d 20 6b 65 79 2e 54 61 62 6c 65 4e 61 6d  e = key.TableNam
a9b0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
a9c0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
a9d0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
a9e0: 61 62 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  ableName))..    
a9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa00: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
aa20: 75 6c 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ult++;..        
aa30: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
aa40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
aa50: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
aa60: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
aa70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aab0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ////....    inte
aac0: 72 6e 61 6c 20 44 61 74 61 54 61 62 6c 65 20 47  rnal DataTable G
aad0: 65 74 53 63 68 65 6d 61 54 61 62 6c 65 28 62 6f  etSchemaTable(bo
aae0: 6f 6c 20 77 61 6e 74 55 6e 69 71 75 65 49 6e 66  ol wantUniqueInf
aaf0: 6f 2c 20 62 6f 6f 6c 20 77 61 6e 74 44 65 66 61  o, bool wantDefa
ab00: 75 6c 74 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ultValue)..    {
ab10: 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  ..      CheckClo
ab20: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 69 66  sed();..      if
ab30: 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73   (_throwOnDispos
ab40: 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ed) SQLiteComman
ab50: 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64  d.Check(_command
ab60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  );....      //..
ab70: 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a        // BUGFIX:
ab80: 20 57 65 20 6e 65 65 64 20 74 6f 20 71 75 69 63   We need to quic
ab90: 6b 6c 79 20 73 63 61 6e 20 61 6c 6c 20 74 68 65  kly scan all the
aba0: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
abb0: 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 2f 2f  urrent..      //
abc0: 20 20 20 20 20 20 20 20 20 22 72 65 73 75 6c 74           "result
abd0: 20 73 65 74 22 20 74 6f 20 73 65 65 20 68 6f 77   set" to see how
abe0: 20 6d 61 6e 79 20 64 69 73 74 69 6e 63 74 20 74   many distinct t
abf0: 61 62 6c 65 73 20 61 72 65 20 61 63 74 75 61 6c  ables are actual
ac00: 6c 79 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  ly..      //    
ac10: 20 20 20 20 20 69 6e 76 6f 6c 76 65 64 2e 20 20       involved.  
ac20: 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  This information
ac30: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f   is necessary so
ac40: 20 74 68 61 74 20 73 6f 6d 65 0d 0a 20 20 20 20   that some..    
ac50: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 74    //         int
ac60: 65 6c 6c 69 67 65 6e 74 20 64 65 63 69 73 69 6f  elligent decisio
ac70: 6e 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 77  ns can be made w
ac80: 68 65 6e 20 63 6f 6e 73 74 72 75 63 74 69 6e 67  hen constructing
ac90: 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20   the..      //  
aca0: 20 20 20 20 20 20 20 6d 65 74 61 64 61 74 61 20         metadata 
acb0: 62 65 6c 6f 77 2e 20 20 46 6f 72 20 65 78 61 6d  below.  For exam
acc0: 70 6c 65 2c 20 77 65 20 6e 65 65 64 20 74 6f 20  ple, we need to 
acd0: 62 65 20 76 65 72 79 20 63 61 72 65 66 75 6c 0d  be very careful.
ace0: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
acf0: 20 20 61 62 6f 75 74 20 66 6c 61 67 67 69 6e 67    about flagging
ad00: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 63 6f   a particular co
ad10: 6c 75 6d 6e 20 61 73 20 22 75 6e 69 71 75 65 22  lumn as "unique"
ad20: 20 6a 75 73 74 0d 0a 20 20 20 20 20 20 2f 2f 20   just..      // 
ad30: 20 20 20 20 20 20 20 20 62 65 63 61 75 73 65 20          because 
ad40: 69 74 20 77 61 73 20 69 6e 20 69 74 73 20 6f 72  it was in its or
ad50: 69 67 69 6e 61 6c 20 75 6e 64 65 72 6c 79 69 6e  iginal underlyin
ad60: 67 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  g database table
ad70: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
ad80: 20 20 20 69 66 20 74 68 65 72 65 20 61 72 65 20     if there are 
ad90: 6e 6f 77 20 6d 75 6c 74 69 70 6c 65 20 74 61 62  now multiple tab
ada0: 6c 65 73 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20  les involved in 
adb0: 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  the..      //   
adc0: 20 20 20 20 20 20 22 72 65 73 75 6c 74 20 73 65        "result se
add0: 74 22 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20  t".  See ticket 
ade0: 5b 37 65 33 66 61 39 33 37 34 34 5d 20 66 6f 72  [7e3fa93744] for
adf0: 20 6d 6f 72 65 20 64 65 74 61 69 6c 65 64 0d 0a   more detailed..
ae00: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
ae10: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0d 0a 20   information... 
ae20: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 44       //..      D
ae30: 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e  ictionary<Column
ae40: 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74  Parent, List<int
ae50: 3e 3e 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  >> parentToColum
ae60: 6e 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ns = null;..    
ae70: 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74    Dictionary<int
ae80: 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20  , ColumnParent> 
ae90: 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d  columnToParent =
aea0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
aeb0: 47 65 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c 75  GetStatementColu
aec0: 6d 6e 50 61 72 65 6e 74 73 28 0d 0a 20 20 20 20  mnParents(..    
aed0: 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43        _command.C
aee0: 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2c 20  onnection._sql, 
aef0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
af00: 2c 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a  , _fieldCount,..
af10: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 70 61            ref pa
af20: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 20 72  rentToColumns, r
af30: 65 66 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e  ef columnToParen
af40: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 44 61 74  t);....      Dat
af50: 61 54 61 62 6c 65 20 74 62 6c 20 3d 20 6e 65 77  aTable tbl = new
af60: 20 44 61 74 61 54 61 62 6c 65 28 22 53 63 68 65   DataTable("Sche
af70: 6d 61 54 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20  maTable");..    
af80: 20 20 44 61 74 61 54 61 62 6c 65 20 74 62 6c 49    DataTable tblI
af90: 6e 64 65 78 65 73 20 3d 20 6e 75 6c 6c 3b 0d 0a  ndexes = null;..
afa0: 20 20 20 20 20 20 44 61 74 61 54 61 62 6c 65 20        DataTable 
afb0: 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 3b  tblIndexColumns;
afc0: 0d 0a 20 20 20 20 20 20 44 61 74 61 52 6f 77 20  ..      DataRow 
afd0: 72 6f 77 3b 0d 0a 20 20 20 20 20 20 73 74 72 69  row;..      stri
afe0: 6e 67 20 74 65 6d 70 3b 0d 0a 20 20 20 20 20 20  ng temp;..      
aff0: 73 74 72 69 6e 67 20 73 74 72 43 61 74 61 6c 6f  string strCatalo
b000: 67 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  g = String.Empty
b010: 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ;..      string 
b020: 73 74 72 54 61 62 6c 65 20 3d 20 53 74 72 69 6e  strTable = Strin
b030: 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20  g.Empty;..      
b040: 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 75 6d 6e  string strColumn
b050: 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b   = String.Empty;
b060: 0d 0a 0d 0a 20 20 20 20 20 20 74 62 6c 2e 4c 6f  ....      tbl.Lo
b070: 63 61 6c 65 20 3d 20 43 75 6c 74 75 72 65 49 6e  cale = CultureIn
b080: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
b090: 75 72 65 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  ure;..      tbl.
b0a0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
b0b0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f  maTableColumn.Co
b0c0: 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66  lumnName, typeof
b0d0: 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (String));..    
b0e0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
b0f0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
b100: 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61  umn.ColumnOrdina
b110: 6c 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b  l, typeof(int));
b120: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
b130: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
b140: 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
b150: 53 69 7a 65 2c 20 74 79 70 65 6f 66 28 69 6e 74  Size, typeof(int
b160: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
b170: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
b180: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
b190: 65 72 69 63 50 72 65 63 69 73 69 6f 6e 2c 20 74  ericPrecision, t
b1a0: 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20  ypeof(int));..  
b1b0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
b1c0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
b1d0: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61  olumn.NumericSca
b1e0: 6c 65 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29  le, typeof(int))
b1f0: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
b200: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
b210: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69  ableColumn.IsUni
b220: 71 75 65 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  que, typeof(Bool
b230: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ean));..      tb
b240: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
b250: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
b260: 49 73 4b 65 79 2c 20 74 79 70 65 6f 66 28 42 6f  IsKey, typeof(Bo
b270: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
b280: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
b290: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
b2a0: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 65  nalColumn.BaseSe
b2b0: 72 76 65 72 4e 61 6d 65 2c 20 74 79 70 65 6f 66  rverName, typeof
b2c0: 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (string));..    
b2d0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
b2e0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
b2f0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65  ionalColumn.Base
b300: 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 20 74 79 70  CatalogName, typ
b310: 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20  eof(String));.. 
b320: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
b330: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
b340: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d  Column.BaseColum
b350: 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74  nName, typeof(St
b360: 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
b370: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
b380: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
b390: 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 2c  .BaseSchemaName,
b3a0: 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29   typeof(String))
b3b0: 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
b3c0: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
b3d0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
b3e0: 61 62 6c 65 4e 61 6d 65 2c 20 74 79 70 65 6f 66  ableName, typeof
b3f0: 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (String));..    
b400: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
b410: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
b420: 75 6d 6e 2e 44 61 74 61 54 79 70 65 2c 20 74 79  umn.DataType, ty
b430: 70 65 6f 66 28 54 79 70 65 29 29 3b 0d 0a 20 20  peof(Type));..  
b440: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
b450: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
b460: 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c  olumn.AllowDBNul
b470: 6c 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  l, typeof(Boolea
b480: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  n));..      tbl.
b490: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
b4a0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72  maTableColumn.Pr
b4b0: 6f 76 69 64 65 72 54 79 70 65 2c 20 74 79 70 65  oviderType, type
b4c0: 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20  of(int));..     
b4d0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
b4e0: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
b4f0: 6d 6e 2e 49 73 41 6c 69 61 73 65 64 2c 20 74 79  mn.IsAliased, ty
b500: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d  peof(Boolean));.
b510: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
b520: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
b530: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65  leColumn.IsExpre
b540: 73 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f  ssion, typeof(Bo
b550: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
b560: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
b570: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
b580: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f  nalColumn.IsAuto
b590: 49 6e 63 72 65 6d 65 6e 74 2c 20 74 79 70 65 6f  Increment, typeo
b5a0: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20  f(Boolean));..  
b5b0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
b5c0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
b5d0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
b5e0: 52 6f 77 56 65 72 73 69 6f 6e 2c 20 74 79 70 65  RowVersion, type
b5f0: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
b600: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
b610: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
b620: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
b630: 73 48 69 64 64 65 6e 2c 20 74 79 70 65 6f 66 28  sHidden, typeof(
b640: 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20  Boolean));..    
b650: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
b660: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
b670: 75 6d 6e 2e 49 73 4c 6f 6e 67 2c 20 74 79 70 65  umn.IsLong, type
b680: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
b690: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
b6a0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
b6b0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
b6c0: 73 52 65 61 64 4f 6e 6c 79 2c 20 74 79 70 65 6f  sReadOnly, typeo
b6d0: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20  f(Boolean));..  
b6e0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
b6f0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
b700: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 50 72  ptionalColumn.Pr
b710: 6f 76 69 64 65 72 53 70 65 63 69 66 69 63 44 61  oviderSpecificDa
b720: 74 61 54 79 70 65 2c 20 74 79 70 65 6f 66 28 54  taType, typeof(T
b730: 79 70 65 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ype));..      tb
b740: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
b750: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
b760: 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56  lColumn.DefaultV
b770: 61 6c 75 65 2c 20 74 79 70 65 6f 66 28 6f 62 6a  alue, typeof(obj
b780: 65 63 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ect));..      tb
b790: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 44  l.Columns.Add("D
b7a0: 61 74 61 54 79 70 65 4e 61 6d 65 22 2c 20 74 79  ataTypeName", ty
b7b0: 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a  peof(string));..
b7c0: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
b7d0: 73 2e 41 64 64 28 22 43 6f 6c 6c 61 74 69 6f 6e  s.Add("Collation
b7e0: 54 79 70 65 22 2c 20 74 79 70 65 6f 66 28 73 74  Type", typeof(st
b7f0: 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
b800: 62 6c 2e 42 65 67 69 6e 4c 6f 61 64 44 61 74 61  bl.BeginLoadData
b810: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  ();....      for
b820: 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
b830: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b   _fieldCount; n+
b840: 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  +)..      {..   
b850: 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65 20       SQLiteType 
b860: 73 71 6c 54 79 70 65 20 3d 20 47 65 74 53 51 4c  sqlType = GetSQL
b870: 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20  iteType(_flags, 
b880: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  n);....        r
b890: 6f 77 20 3d 20 74 62 6c 2e 4e 65 77 52 6f 77 28  ow = tbl.NewRow(
b8a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 62  );....        Db
b8b0: 54 79 70 65 20 74 79 70 20 3d 20 73 71 6c 54 79  Type typ = sqlTy
b8c0: 70 65 2e 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20  pe.Type;....    
b8d0: 20 20 20 20 2f 2f 20 44 65 66 61 75 6c 74 20 73      // Default s
b8e0: 65 74 74 69 6e 67 73 20 66 6f 72 20 74 68 65 20  ettings for the 
b8f0: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20  column..        
b900: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
b910: 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65  olumn.ColumnName
b920: 5d 20 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0d  ] = GetName(n);.
b930: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
b940: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43  emaTableColumn.C
b950: 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 5d 20 3d 20  olumnOrdinal] = 
b960: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  n;..        row[
b970: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
b980: 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20  n.ColumnSize] = 
b990: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44 62  SQLiteConvert.Db
b9a0: 54 79 70 65 54 6f 43 6f 6c 75 6d 6e 53 69 7a 65  TypeToColumnSize
b9b0: 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
b9c0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
b9d0: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65  olumn.NumericPre
b9e0: 63 69 73 69 6f 6e 5d 20 3d 20 53 51 4c 69 74 65  cision] = SQLite
b9f0: 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f  Convert.DbTypeTo
ba00: 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e  NumericPrecision
ba10: 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
ba20: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
ba30: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61  olumn.NumericSca
ba40: 6c 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76  le] = SQLiteConv
ba50: 65 72 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65  ert.DbTypeToNume
ba60: 72 69 63 53 63 61 6c 65 28 74 79 70 29 3b 0d 0a  ricScale(typ);..
ba70: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
ba80: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72  maTableColumn.Pr
ba90: 6f 76 69 64 65 72 54 79 70 65 5d 20 3d 20 73 71  oviderType] = sq
baa0: 6c 54 79 70 65 2e 54 79 70 65 3b 0d 0a 20 20 20  lType.Type;..   
bab0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
bac0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e  ableColumn.IsLon
bad0: 67 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  g] = false;..   
bae0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
baf0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77  ableColumn.Allow
bb00: 44 42 4e 75 6c 6c 5d 20 3d 20 74 72 75 65 3b 0d  DBNull] = true;.
bb10: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
bb20: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
bb30: 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c  Column.IsReadOnl
bb40: 79 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  y] = false;..   
bb50: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
bb60: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
bb70: 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e 5d  mn.IsRowVersion]
bb80: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
bb90: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
bba0: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75  leColumn.IsUniqu
bbb0: 65 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  e] = false;..   
bbc0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
bbd0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79  ableColumn.IsKey
bbe0: 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  ] = false;..    
bbf0: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
bc00: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
bc10: 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e  n.IsAutoIncremen
bc20: 74 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  t] = false;..   
bc30: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
bc40: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74 61 54  ableColumn.DataT
bc50: 79 70 65 5d 20 3d 20 47 65 74 46 69 65 6c 64 54  ype] = GetFieldT
bc60: 79 70 65 28 6e 29 3b 0d 0a 20 20 20 20 20 20 20  ype(n);..       
bc70: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
bc80: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
bc90: 73 48 69 64 64 65 6e 5d 20 3d 20 66 61 6c 73 65  sHidden] = false
bca0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53  ;..        row[S
bcb0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
bcc0: 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 5d  .BaseSchemaName]
bcd0: 20 3d 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61   = _baseSchemaNa
bce0: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  me;....        s
bcf0: 74 72 43 6f 6c 75 6d 6e 20 3d 20 63 6f 6c 75 6d  trColumn = colum
bd00: 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 43 6f 6c  nToParent[n].Col
bd10: 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  umnName;..      
bd20: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
bd30: 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f  ullOrEmpty(strCo
bd40: 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29 20  lumn) == false) 
bd50: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
bd60: 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e  olumn.BaseColumn
bd70: 4e 61 6d 65 5d 20 3d 20 73 74 72 43 6f 6c 75 6d  Name] = strColum
bd80: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 6f  n;....        ro
bd90: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
bda0: 75 6d 6e 2e 49 73 45 78 70 72 65 73 73 69 6f 6e  umn.IsExpression
bdb0: 5d 20 3d 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c  ] = String.IsNul
bdc0: 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f 6c 75  lOrEmpty(strColu
bdd0: 6d 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f  mn);..        ro
bde0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
bdf0: 75 6d 6e 2e 49 73 41 6c 69 61 73 65 64 5d 20 3d  umn.IsAliased] =
be00: 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65   (String.Compare
be10: 28 47 65 74 4e 61 6d 65 28 6e 29 2c 20 73 74 72  (GetName(n), str
be20: 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43 6f  Column, StringCo
be30: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
be40: 49 67 6e 6f 72 65 43 61 73 65 29 20 21 3d 20 30  IgnoreCase) != 0
be50: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65  );....        te
be60: 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72  mp = columnToPar
be70: 65 6e 74 5b 6e 5d 2e 54 61 62 6c 65 4e 61 6d 65  ent[n].TableName
be80: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ;..        if (S
be90: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
bea0: 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c  pty(temp) == fal
beb0: 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61  se) row[SchemaTa
bec0: 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61  bleColumn.BaseTa
bed0: 62 6c 65 4e 61 6d 65 5d 20 3d 20 74 65 6d 70 3b  bleName] = temp;
bee0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65 6d 70  ....        temp
bef0: 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e   = columnToParen
bf00: 74 5b 6e 5d 2e 44 61 74 61 62 61 73 65 4e 61 6d  t[n].DatabaseNam
bf10: 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  e;..        if (
bf20: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
bf30: 6d 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61  mpty(temp) == fa
bf40: 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54  lse) row[SchemaT
bf50: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
bf60: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
bf70: 6d 65 5d 20 3d 20 74 65 6d 70 3b 0d 0a 0d 0a 20  me] = temp;.... 
bf80: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61         string da
bf90: 74 61 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  taType = null;..
bfa0: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
bfb0: 20 68 61 76 65 20 61 20 74 61 62 6c 65 2d 62 6f   have a table-bo
bfc0: 75 6e 64 20 63 6f 6c 75 6d 6e 2c 20 65 78 74 72  und column, extr
bfd0: 61 63 74 20 74 68 65 20 65 78 74 72 61 20 69 6e  act the extra in
bfe0: 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 69  formation from i
bff0: 74 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  t..        if (S
c000: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
c010: 70 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d  pty(strColumn) =
c020: 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20  = false)..      
c030: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73    {..          s
c040: 74 72 69 6e 67 20 63 6f 6c 6c 53 65 71 20 3d 20  tring collSeq = 
c050: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
c060: 20 62 6f 6f 6c 20 62 4e 6f 74 4e 75 6c 6c 20 3d   bool bNotNull =
c070: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
c080: 20 20 20 62 6f 6f 6c 20 62 50 72 69 6d 61 72 79     bool bPrimary
c090: 4b 65 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  Key = false;..  
c0a0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 62 41 75          bool bAu
c0b0: 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 66 61  toIncrement = fa
c0c0: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
c0d0: 73 74 72 69 6e 67 5b 5d 20 61 72 53 69 7a 65 3b  string[] arSize;
c0e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
c0f0: 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20   Get the column 
c100: 6d 65 74 61 20 64 61 74 61 0d 0a 20 20 20 20 20  meta data..     
c110: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f       _command.Co
c120: 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2e 43 6f  nnection._sql.Co
c130: 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 0d 0a 20  lumnMetaData(.. 
c140: 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
c150: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
c160: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
c170: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
c180: 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ],..            
c190: 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65  (string)row[Sche
c1a0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
c1b0: 73 65 54 61 62 6c 65 4e 61 6d 65 5d 2c 0d 0a 20  seTableName],.. 
c1c0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 43 6f             strCo
c1d0: 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  lumn,..         
c1e0: 20 20 20 72 65 66 20 64 61 74 61 54 79 70 65 2c     ref dataType,
c1f0: 20 72 65 66 20 63 6f 6c 6c 53 65 71 2c 20 72 65   ref collSeq, re
c200: 66 20 62 4e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20  f bNotNull, ref 
c210: 62 50 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66  bPrimaryKey, ref
c220: 20 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29   bAutoIncrement)
c230: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
c240: 66 20 28 62 4e 6f 74 4e 75 6c 6c 20 7c 7c 20 62  f (bNotNull || b
c250: 50 72 69 6d 61 72 79 4b 65 79 29 20 72 6f 77 5b  PrimaryKey) row[
c260: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c270: 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d  n.AllowDBNull] =
c280: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
c290: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
c2a0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79  ableColumn.IsKey
c2b0: 5d 20 3d 20 62 50 72 69 6d 61 72 79 4b 65 79 20  ] = bPrimaryKey 
c2c0: 26 26 20 43 6f 75 6e 74 50 61 72 65 6e 74 73 28  && CountParents(
c2d0: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 29  parentToColumns)
c2e0: 20 3c 3d 20 31 3b 0d 0a 20 20 20 20 20 20 20 20   <= 1;..        
c2f0: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
c300: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
c310: 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d  IsAutoIncrement]
c320: 20 3d 20 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e   = bAutoIncremen
c330: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 6f  t;..          ro
c340: 77 5b 22 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65  w["CollationType
c350: 22 5d 20 3d 20 63 6f 6c 6c 53 65 71 3b 0d 0a 0d  "] = collSeq;...
c360: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 6f  .          // Fo
c370: 72 20 74 79 70 65 73 20 6c 69 6b 65 20 76 61 72  r types like var
c380: 63 68 61 72 28 35 30 29 20 61 6e 64 20 73 75 63  char(50) and suc
c390: 68 2c 20 65 78 74 72 61 63 74 20 74 68 65 20 73  h, extract the s
c3a0: 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61  ize..          a
c3b0: 72 53 69 7a 65 20 3d 20 64 61 74 61 54 79 70 65  rSize = dataType
c3c0: 2e 53 70 6c 69 74 28 27 28 27 29 3b 0d 0a 20 20  .Split('(');..  
c3d0: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69          if (arSi
c3e0: 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a  ze.Length > 1)..
c3f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c400: 20 20 20 20 20 20 20 20 20 64 61 74 61 54 79 70           dataTyp
c410: 65 20 3d 20 61 72 53 69 7a 65 5b 30 5d 3b 0d 0a  e = arSize[0];..
c420: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 53 69              arSi
c430: 7a 65 20 3d 20 61 72 53 69 7a 65 5b 31 5d 2e 53  ze = arSize[1].S
c440: 70 6c 69 74 28 27 29 27 29 3b 0d 0a 20 20 20 20  plit(')');..    
c450: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69          if (arSi
c460: 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a  ze.Length > 1)..
c470: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c480: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 53               arS
c490: 69 7a 65 20 3d 20 61 72 53 69 7a 65 5b 30 5d 2e  ize = arSize[0].
c4a0: 53 70 6c 69 74 28 27 2c 27 2c 20 27 2e 27 29 3b  Split(',', '.');
c4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c4c0: 69 66 20 28 73 71 6c 54 79 70 65 2e 54 79 70 65  if (sqlType.Type
c4d0: 20 3d 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72   == DbType.Binar
c4e0: 79 20 7c 7c 20 53 51 4c 69 74 65 43 6f 6e 76 65  y || SQLiteConve
c4f0: 72 74 2e 49 73 53 74 72 69 6e 67 44 62 54 79 70  rt.IsStringDbTyp
c500: 65 28 73 71 6c 54 79 70 65 2e 54 79 70 65 29 29  e(sqlType.Type))
c510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c520: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c530: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c540: 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53  leColumn.ColumnS
c550: 69 7a 65 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54  ize] = Convert.T
c560: 6f 49 6e 74 33 32 28 61 72 53 69 7a 65 5b 30 5d  oInt32(arSize[0]
c570: 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  , CultureInfo.In
c580: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b  variantCulture);
c590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c5a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
c5b0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
c5c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c5d0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
c5e0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75  maTableColumn.Nu
c5f0: 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e 5d 20  mericPrecision] 
c600: 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33  = Convert.ToInt3
c610: 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20 43 75 6c  2(arSize[0], Cul
c620: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
c630: 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20  ntCulture);..   
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
c650: 28 61 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e  (arSize.Length >
c660: 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   1)..           
c670: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
c680: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
c690: 65 72 69 63 53 63 61 6c 65 5d 20 3d 20 43 6f 6e  ericScale] = Con
c6a0: 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53  vert.ToInt32(arS
c6b0: 69 7a 65 5b 31 5d 2c 20 43 75 6c 74 75 72 65 49  ize[1], CultureI
c6c0: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
c6d0: 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  ture);..        
c6e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c6f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c700: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
c710: 20 69 66 20 28 77 61 6e 74 44 65 66 61 75 6c 74   if (wantDefault
c720: 56 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20  Value)..        
c730: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c740: 20 2f 2f 20 44 65 74 65 72 6d 69 6e 65 20 74 68   // Determine th
c750: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
c760: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20  for the column, 
c770: 77 68 69 63 68 20 73 75 63 6b 73 20 62 65 63 61  which sucks beca
c780: 75 73 65 20 77 65 20 68 61 76 65 20 74 6f 20 71  use we have to q
c790: 75 65 72 79 20 74 68 65 20 73 63 68 65 6d 61 20  uery the schema 
c7a0: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 0d  for each column.
c7b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
c7c0: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
c7d0: 64 20 63 6d 64 54 61 62 6c 65 20 3d 20 6e 65 77  d cmdTable = new
c7e0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 48   SQLiteCommand(H
c7f0: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
c800: 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ingFormat(Cultur
c810: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
c820: 75 6c 74 75 72 65 2c 20 22 50 52 41 47 4d 41 20  ulture, "PRAGMA 
c830: 5b 7b 30 7d 5d 2e 54 41 42 4c 45 5f 49 4e 46 4f  [{0}].TABLE_INFO
c840: 28 5b 7b 31 7d 5d 29 22 2c 0d 0a 20 20 20 20 20  ([{1}])",..     
c850: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
c860: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
c870: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c  Column.BaseCatal
c880: 6f 67 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20  ogName],..      
c890: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
c8a0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
c8b0: 73 65 54 61 62 6c 65 4e 61 6d 65 5d 0d 0a 20 20  seTableName]..  
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 29 2c 20 5f              ), _
c8d0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69  command.Connecti
c8e0: 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  on))..          
c8f0: 20 20 75 73 69 6e 67 20 28 44 62 44 61 74 61 52    using (DbDataR
c900: 65 61 64 65 72 20 72 64 54 61 62 6c 65 20 3d 20  eader rdTable = 
c910: 63 6d 64 54 61 62 6c 65 2e 45 78 65 63 75 74 65  cmdTable.Execute
c920: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
c930: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c940: 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 64 20          // Find 
c950: 74 68 65 20 6d 61 74 63 68 69 6e 67 20 63 6f 6c  the matching col
c960: 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  umn..           
c970: 20 20 20 77 68 69 6c 65 20 28 72 64 54 61 62 6c     while (rdTabl
c980: 65 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20  e.Read())..     
c990: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c9b0: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 28  String.Compare((
c9c0: 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d  string)row[Schem
c9d0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
c9e0: 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 2c 20 72 64  eColumnName], rd
c9f0: 54 61 62 6c 65 2e 47 65 74 53 74 72 69 6e 67 28  Table.GetString(
ca00: 31 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  1), StringCompar
ca10: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
ca20: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
ca40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ca50: 20 20 20 20 69 66 20 28 72 64 54 61 62 6c 65 2e      if (rdTable.
ca60: 49 73 44 42 4e 75 6c 6c 28 34 29 20 3d 3d 20 66  IsDBNull(4) == f
ca70: 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  alse)..         
ca80: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
ca90: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
caa0: 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74  alColumn.Default
cab0: 56 61 6c 75 65 5d 20 3d 20 72 64 54 61 62 6c 65  Value] = rdTable
cac0: 5b 34 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  [4];....        
cad0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
cae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
caf0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
cb00: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
cb10: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
cb20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
cb30: 20 44 65 74 65 72 6d 69 6e 65 20 49 73 55 6e 69   Determine IsUni
cb40: 71 75 65 20 70 72 6f 70 65 72 6c 79 2c 20 77 68  que properly, wh
cb50: 69 63 68 20 69 73 20 61 20 70 61 69 6e 20 69 6e  ich is a pain in
cb60: 20 74 68 65 20 62 75 74 74 21 0d 0a 20 20 20 20   the butt!..    
cb70: 20 20 20 20 20 20 69 66 20 28 77 61 6e 74 55 6e        if (wantUn
cb80: 69 71 75 65 49 6e 66 6f 29 0d 0a 20 20 20 20 20  iqueInfo)..     
cb90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cba0: 20 20 20 20 69 66 20 28 28 73 74 72 69 6e 67 29      if ((string)
cbb0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
cbc0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61  ptionalColumn.Ba
cbd0: 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20 21  seCatalogName] !
cbe0: 3d 20 73 74 72 43 61 74 61 6c 6f 67 0d 0a 20 20  = strCatalog..  
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28              || (
cc00: 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d  string)row[Schem
cc10: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
cc20: 65 54 61 62 6c 65 4e 61 6d 65 5d 20 21 3d 20 73  eTableName] != s
cc30: 74 72 54 61 62 6c 65 29 0d 0a 20 20 20 20 20 20  trTable)..      
cc40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
cc50: 20 20 20 20 20 20 20 73 74 72 43 61 74 61 6c 6f         strCatalo
cc60: 67 20 3d 20 28 73 74 72 69 6e 67 29 72 6f 77 5b  g = (string)row[
cc70: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
cc80: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61  nalColumn.BaseCa
cc90: 74 61 6c 6f 67 4e 61 6d 65 5d 3b 0d 0a 20 20 20  talogName];..   
cca0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 54 61             strTa
ccb0: 62 6c 65 20 3d 20 28 73 74 72 69 6e 67 29 72 6f  ble = (string)ro
ccc0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
ccd0: 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d  umn.BaseTableNam
cce0: 65 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e];....         
ccf0: 20 20 20 20 20 74 62 6c 49 6e 64 65 78 65 73 20       tblIndexes 
cd00: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
cd10: 63 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28  ction.GetSchema(
cd20: 22 49 6e 64 65 78 65 73 22 2c 20 6e 65 77 20 73  "Indexes", new s
cd30: 74 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20  tring[] {..     
cd40: 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
cd50: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
cd60: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
cd70: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
cd80: 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ],..            
cd90: 20 20 20 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20      null,..     
cda0: 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
cdb0: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
cdc0: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62  leColumn.BaseTab
cdd0: 6c 65 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20  leName],..      
cde0: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 20 7d            null }
cdf0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
ce00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
ce10: 20 66 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f   foreach (DataRo
ce20: 77 20 72 6f 77 49 6e 64 65 78 65 73 20 69 6e 20  w rowIndexes in 
ce30: 74 62 6c 49 6e 64 65 78 65 73 2e 52 6f 77 73 29  tblIndexes.Rows)
ce40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
ce50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
ce60: 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 20 3d  blIndexColumns =
ce70: 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63   _command.Connec
ce80: 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28 22  tion.GetSchema("
ce90: 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 22 2c 20 6e  IndexColumns", n
cea0: 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b 0d 0a 20  ew string[] {.. 
ceb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
cec0: 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d  string)row[Schem
ced0: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
cee0: 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67  lumn.BaseCatalog
cef0: 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20  Name],..        
cf00: 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 0d 0a 20          null,.. 
cf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
cf20: 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d  string)row[Schem
cf30: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
cf40: 65 54 61 62 6c 65 4e 61 6d 65 5d 2c 0d 0a 20 20  eTableName],..  
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
cf60: 74 72 69 6e 67 29 72 6f 77 49 6e 64 65 78 65 73  tring)rowIndexes
cf70: 5b 22 49 4e 44 45 58 5f 4e 41 4d 45 22 5d 2c 0d  ["INDEX_NAME"],.
cf80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cf90: 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20   null..         
cfa0: 20 20 20 20 20 20 20 7d 29 3b 0d 0a 20 20 20 20         });..    
cfb0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
cfc0: 68 20 28 44 61 74 61 52 6f 77 20 72 6f 77 43 6f  h (DataRow rowCo
cfd0: 6c 75 6d 6e 49 6e 64 65 78 20 69 6e 20 74 62 6c  lumnIndex in tbl
cfe0: 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77  IndexColumns.Row
cff0: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
d000: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d010: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
d020: 43 6f 6d 70 61 72 65 28 53 51 4c 69 74 65 43 6f  Compare(SQLiteCo
d030: 6e 76 65 72 74 2e 47 65 74 53 74 72 69 6e 67 4f  nvert.GetStringO
d040: 72 4e 75 6c 6c 28 72 6f 77 43 6f 6c 75 6d 6e 49  rNull(rowColumnI
d050: 6e 64 65 78 5b 22 43 4f 4c 55 4d 4e 5f 4e 41 4d  ndex["COLUMN_NAM
d060: 45 22 5d 29 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c  E"]), strColumn,
d070: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
d080: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
d090: 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20  ase) == 0)..    
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0c0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
d0d0: 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58         // BUGFIX
d0e0: 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  : Make sure that
d0f0: 20 77 65 20 6f 6e 6c 79 20 66 6c 61 67 20 74 68   we only flag th
d100: 69 73 20 63 6f 6c 75 6d 6e 20 61 73 20 22 75 6e  is column as "un
d110: 69 71 75 65 22 0d 0a 20 20 20 20 20 20 20 20 20  ique"..         
d120: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
d130: 20 20 20 20 69 66 20 77 65 20 61 72 65 20 6e 6f      if we are no
d140: 74 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20  t processing of 
d150: 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20 6d 75 6c  some kind of mul
d160: 74 69 2d 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  ti-table..      
d170: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
d180: 20 20 20 20 20 20 20 63 6f 6e 73 74 72 75 63 74         construct
d190: 20 28 69 2e 65 2e 20 61 20 6a 6f 69 6e 29 20 62   (i.e. a join) b
d1a0: 65 63 61 75 73 65 20 69 6e 20 74 68 61 74 20 63  ecause in that c
d1b0: 61 73 65 20 77 65 20 6d 75 73 74 0d 0a 20 20 20  ase we must..   
d1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d1d0: 2f 20 20 20 20 20 20 20 20 20 61 6c 6c 6f 77 20  /         allow 
d1e0: 64 75 70 6c 69 63 61 74 65 20 76 61 6c 75 65 73  duplicate values
d1f0: 20 28 72 65 66 65 72 20 74 6f 20 74 69 63 6b 65   (refer to ticke
d200: 74 20 5b 37 65 33 66 61 39 33 37 34 34 5d 29 2e  t [7e3fa93744]).
d210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d220: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
d230: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
d240: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 43 6f  rentToColumns.Co
d250: 75 6e 74 20 3d 3d 20 31 20 26 26 20 74 62 6c 49  unt == 1 && tblI
d260: 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73  ndexColumns.Rows
d270: 2e 43 6f 75 6e 74 20 3d 3d 20 31 20 26 26 20 28  .Count == 1 && (
d280: 62 6f 6f 6c 29 72 6f 77 5b 53 63 68 65 6d 61 54  bool)row[SchemaT
d290: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77  ableColumn.Allow
d2a0: 44 42 4e 75 6c 6c 5d 20 3d 3d 20 66 61 6c 73 65  DBNull] == false
d2b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
d2c0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
d2d0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55  aTableColumn.IsU
d2e0: 6e 69 71 75 65 5d 20 3d 20 72 6f 77 49 6e 64 65  nique] = rowInde
d2f0: 78 65 73 5b 22 55 4e 49 51 55 45 22 5d 3b 0d 0a  xes["UNIQUE"];..
d300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d310: 20 20 20 20 2f 2f 20 49 66 20 69 74 73 20 61 6e      // If its an
d320: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
d330: 20 6b 65 79 20 61 6e 64 20 74 68 65 20 6f 6e 6c   key and the onl
d340: 79 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 6e  y primary key in
d350: 20 74 68 65 20 74 61 62 6c 65 2c 20 74 68 65 6e   the table, then
d360: 20 69 74 73 20 61 20 72 6f 77 69 64 20 61 6c 69   its a rowid ali
d370: 61 73 20 61 6e 64 20 69 73 20 61 75 74 6f 69 6e  as and is autoin
d380: 63 72 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20  crement..       
d390: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
d3a0: 54 45 3a 20 20 43 75 72 72 65 6e 74 6c 79 20 63  TE:  Currently c
d3b0: 6f 6d 6d 65 6e 74 65 64 20 6f 75 74 20 62 65 63  ommented out bec
d3c0: 61 75 73 65 20 74 68 69 73 20 69 73 20 6e 6f 74  ause this is not
d3d0: 20 61 6c 77 61 79 73 20 74 68 65 20 64 65 73 69   always the desi
d3e0: 72 65 64 20 62 65 68 61 76 69 6f 72 2e 20 20 46  red behavior.  F
d3f0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 20 31 3a  or example, a 1:
d400: 31 20 72 65 6c 61 74 69 6f 6e 73 68 69 70 20 77  1 relationship w
d410: 69 74 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ith..           
d420: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
d430: 20 61 6e 6f 74 68 65 72 20 74 61 62 6c 65 2c 20   another table, 
d440: 77 68 65 72 65 20 74 68 65 20 6f 74 68 65 72 20  where the other 
d450: 74 61 62 6c 65 20 69 73 20 61 75 74 6f 69 6e 63  table is autoinc
d460: 72 65 6d 65 6e 74 2c 20 62 75 74 20 74 68 69 73  rement, but this
d470: 20 6f 6e 65 20 69 73 20 6e 6f 74 2c 20 61 6e 64   one is not, and
d480: 20 75 73 65 73 20 74 68 65 20 72 6f 77 69 64 20   uses the rowid 
d490: 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 2e 0d  from the other..
d4a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d4b0: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 49 74 20     //        It 
d4c0: 69 73 20 73 61 66 65 72 20 74 6f 20 6f 6e 6c 79  is safer to only
d4d0: 20 73 65 74 20 41 75 74 6f 69 6e 63 72 65 6d 65   set Autoincreme
d4e0: 6e 74 20 6f 6e 20 74 61 62 6c 65 73 20 77 68 65  nt on tables whe
d4f0: 72 65 20 77 65 27 72 65 20 53 55 52 45 20 74 68  re we're SURE th
d500: 65 20 75 73 65 72 20 73 70 65 63 69 66 69 65 64  e user specified
d510: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20   AUTOINCREMENT, 
d520: 65 76 65 6e 20 69 66 20 69 74 73 20 61 20 72 6f  even if its a ro
d530: 77 69 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 0d 0a 20  wid column..... 
d540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d550: 20 69 66 20 28 74 62 6c 49 6e 64 65 78 43 6f 6c   if (tblIndexCol
d560: 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74 20  umns.Rows.Count 
d570: 3d 3d 20 31 20 26 26 20 28 62 6f 6f 6c 29 72 6f  == 1 && (bool)ro
d580: 77 49 6e 64 65 78 65 73 5b 22 50 52 49 4d 41 52  wIndexes["PRIMAR
d590: 59 5f 4b 45 59 22 5d 20 3d 3d 20 74 72 75 65 20  Y_KEY"] == true 
d5a0: 26 26 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  && String.IsNull
d5b0: 4f 72 45 6d 70 74 79 28 64 61 74 61 54 79 70 65  OrEmpty(dataType
d5c0: 29 20 3d 3d 20 66 61 6c 73 65 20 26 26 0d 0a 20  ) == false &&.. 
d5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5e0: 20 20 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72     String.Compar
d5f0: 65 28 64 61 74 61 54 79 70 65 2c 20 22 69 6e 74  e(dataType, "int
d600: 65 67 65 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d  eger", StringCom
d610: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
d620: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
d630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d640: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d650: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 72             //  r
d660: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
d670: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41  tionalColumn.IsA
d680: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20  utoIncrement] = 
d690: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
d6a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6c0: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
d6d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d6e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d6f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d700: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
d710: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
d720: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74  sNullOrEmpty(dat
d730: 61 54 79 70 65 29 29 0d 0a 20 20 20 20 20 20 20  aType))..       
d740: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d750: 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61    TypeAffinity a
d760: 66 66 69 6e 20 3d 20 54 79 70 65 41 66 66 69 6e  ffin = TypeAffin
d770: 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65  ity.Uninitialize
d780: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
d790: 64 61 74 61 54 79 70 65 20 3d 20 5f 61 63 74 69  dataType = _acti
d7a0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
d7b0: 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 5f 61 63 74  .ColumnType(_act
d7c0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e 2c  iveStatement, n,
d7d0: 20 72 65 66 20 61 66 66 69 6e 29 3b 0d 0a 20 20   ref affin);..  
d7e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d7f0: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
d800: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
d810: 64 61 74 61 54 79 70 65 29 20 3d 3d 20 66 61 6c  dataType) == fal
d820: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
d830: 20 72 6f 77 5b 22 44 61 74 61 54 79 70 65 4e 61   row["DataTypeNa
d840: 6d 65 22 5d 20 3d 20 64 61 74 61 54 79 70 65 3b  me"] = dataType;
d850: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
d860: 20 20 20 20 20 74 62 6c 2e 52 6f 77 73 2e 41 64       tbl.Rows.Ad
d870: 64 28 72 6f 77 29 3b 0d 0a 20 20 20 20 20 20 7d  d(row);..      }
d880: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 6b  ....      if (_k
d890: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
d8a0: 0a 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66  .        _keyInf
d8b0: 6f 2e 41 70 70 65 6e 64 53 63 68 65 6d 61 54 61  o.AppendSchemaTa
d8c0: 62 6c 65 28 74 62 6c 29 3b 0d 0a 0d 0a 20 20 20  ble(tbl);....   
d8d0: 20 20 20 74 62 6c 2e 41 63 63 65 70 74 43 68 61     tbl.AcceptCha
d8e0: 6e 67 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 74  nges();..      t
d8f0: 62 6c 2e 45 6e 64 4c 6f 61 64 44 61 74 61 28 29  bl.EndLoadData()
d900: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
d910: 6e 20 74 62 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  n tbl;..    }...
d920: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
d930: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  y>..    /// Retr
d940: 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  ieves the column
d950: 20 61 73 20 61 20 73 74 72 69 6e 67 0d 0a 20 20   as a string..  
d960: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
d970: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
d980: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
d990: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
d9a0: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
d9b0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72  /// <returns>str
d9c0: 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ing</returns>.. 
d9d0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
d9e0: 64 65 20 73 74 72 69 6e 67 20 47 65 74 53 74 72  de string GetStr
d9f0: 69 6e 67 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ing(int i)..    
da00: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
da10: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
da20: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
da30: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
da40: 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51  if ((_flags & SQ
da50: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
da60: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
da70: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
da80: 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  cks) == SQLiteCo
da90: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
daa0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
dab0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a  alueCallbacks)..
dac0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
dad0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74         SQLiteDat
dae0: 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c  aReaderValue val
daf0: 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44  ue = new SQLiteD
db00: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29  ataReaderValue()
db10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
db20: 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d  ool complete;...
db30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76  .            Inv
db40: 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  okeReadValueCall
db50: 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69  back(i, new SQLi
db60: 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74  teReadValueEvent
db70: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
db80: 20 20 20 20 20 20 20 22 47 65 74 53 74 72 69 6e         "GetStrin
db90: 67 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29  g", null, value)
dba0: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
dbb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
dbc0: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
dbe0: 65 74 75 72 6e 20 76 61 6c 75 65 2e 53 74 72 69  eturn value.Stri
dbf0: 6e 67 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  ngValue;..      
dc00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
dc10: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
dc20: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
dc30: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
dc40: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
dc50: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
dc60: 66 6f 2e 47 65 74 53 74 72 69 6e 67 28 69 20 2d  fo.GetString(i -
dc70: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
dc80: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
dc90: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
dca0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
dcb0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72  ctionFlags.NoVer
dcc0: 69 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29  ifyTextAffinity)
dcd0: 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   != SQLiteConnec
dce0: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69  tionFlags.NoVeri
dcf0: 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29 0d  fyTextAffinity).
dd00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
dd10: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
dd20: 65 2e 53 74 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20  e.String);....  
dd30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
dd40: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
dd50: 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69  ql.GetText(_acti
dd60: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
dd70: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
dd80: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
dd90: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
dda0: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e  the column as an
ddb0: 20 6f 62 6a 65 63 74 20 63 6f 72 72 65 73 70 6f   object correspo
ddc0: 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 75 6e 64  nding to the und
ddd0: 65 72 6c 79 69 6e 67 20 64 61 74 61 74 79 70 65  erlying datatype
dde0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0d 0a   of the column..
ddf0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
de00: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
de10: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
de20: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
de30: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
de40: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 6f    /// <returns>o
de50: 62 6a 65 63 74 3c 2f 72 65 74 75 72 6e 73 3e 0d  bject</returns>.
de60: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
de70: 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56  ride object GetV
de80: 61 6c 75 65 28 69 6e 74 20 69 29 0d 0a 20 20 20  alue(int i)..   
de90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
dea0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
deb0: 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47        VerifyForG
dec0: 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  et();....       
ded0: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
dee0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
def0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
df00: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
df10: 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43  acks) == SQLiteC
df20: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
df30: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
df40: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d  ValueCallbacks).
df50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
df60: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
df70: 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61  taReaderValue va
df80: 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  lue = new SQLite
df90: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28  DataReaderValue(
dfa0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
dfb0: 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a  bool complete;..
dfc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
dfd0: 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c  vokeReadValueCal
dfe0: 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c  lback(i, new SQL
dff0: 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e  iteReadValueEven
e000: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
e010: 20 20 20 20 20 20 20 20 22 47 65 74 56 61 6c 75          "GetValu
e020: 65 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29  e", null, value)
e030: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
e040: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e050: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
e060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
e070: 65 74 75 72 6e 20 76 61 6c 75 65 2e 56 61 6c 75  eturn value.Valu
e080: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
e090: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
e0a0: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
e0b0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
e0c0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
e0d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
e0e0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
e0f0: 56 61 6c 75 65 28 69 20 2d 20 50 72 69 76 61 74  Value(i - Privat
e100: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
e110: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
e120: 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 20 3d  SQLiteType typ =
e130: 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 5f   GetSQLiteType(_
e140: 66 6c 61 67 73 2c 20 69 29 3b 0d 0a 0d 0a 20 20  flags, i);....  
e150: 20 20 20 20 20 20 69 66 20 28 28 28 5f 66 6c 61        if (((_fla
e160: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
e170: 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63  ctionFlags.Detec
e180: 74 54 65 78 74 41 66 66 69 6e 69 74 79 29 20 3d  tTextAffinity) =
e190: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
e1a0: 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63 74 54 65  onFlags.DetectTe
e1b0: 78 74 41 66 66 69 6e 69 74 79 29 20 26 26 0d 0a  xtAffinity) &&..
e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 28 28 74 79              ((ty
e1d0: 70 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 74  p == null) || (t
e1e0: 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54  yp.Affinity == T
e1f0: 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74  ypeAffinity.Text
e200: 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  )))..        {..
e210: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 20              typ 
e220: 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  = GetSQLiteType(
e230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e240: 20 20 74 79 70 2c 20 5f 61 63 74 69 76 65 53 74    typ, _activeSt
e250: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
e260: 54 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74  Text(_activeStat
e270: 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20  ement, i));..   
e280: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e290: 65 6c 73 65 20 69 66 20 28 28 28 5f 66 6c 61 67  else if (((_flag
e2a0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
e2b0: 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63 74  tionFlags.Detect
e2c0: 53 74 72 69 6e 67 54 79 70 65 29 20 3d 3d 20 53  StringType) == S
e2d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e2e0: 6c 61 67 73 2e 44 65 74 65 63 74 53 74 72 69 6e  lags.DetectStrin
e2f0: 67 54 79 70 65 29 20 26 26 0d 0a 20 20 20 20 20  gType) &&..     
e300: 20 20 20 20 20 20 20 28 28 74 79 70 20 3d 3d 20         ((typ == 
e310: 6e 75 6c 6c 29 20 7c 7c 20 53 51 4c 69 74 65 43  null) || SQLiteC
e320: 6f 6e 76 65 72 74 2e 49 73 53 74 72 69 6e 67 44  onvert.IsStringD
e330: 62 54 79 70 65 28 74 79 70 2e 54 79 70 65 29 29  bType(typ.Type))
e340: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
e350: 20 20 20 20 20 20 20 20 20 20 74 79 70 20 3d 20            typ = 
e360: 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 0d 0a  GetSQLiteType(..
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e380: 74 79 70 2c 20 5f 61 63 74 69 76 65 53 74 61 74  typ, _activeStat
e390: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65  ement._sql.GetTe
e3a0: 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  xt(_activeStatem
e3b0: 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 20  ent, i));..     
e3c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e3d0: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
e3e0: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
e3f0: 56 61 6c 75 65 28 5f 61 63 74 69 76 65 53 74 61  Value(_activeSta
e400: 74 65 6d 65 6e 74 2c 20 5f 66 6c 61 67 73 2c 20  tement, _flags, 
e410: 69 2c 20 74 79 70 29 3b 0d 0a 20 20 20 20 7d 0d  i, typ);..    }.
e420: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
e430: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
e440: 74 72 65 69 76 65 73 20 74 68 65 20 76 61 6c 75  treives the valu
e450: 65 73 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 63  es of multiple c
e460: 6f 6c 75 6d 6e 73 2c 20 75 70 20 74 6f 20 74 68  olumns, up to th
e470: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 73 75  e size of the su
e480: 70 70 6c 69 65 64 20 61 72 72 61 79 0d 0a 20 20  pplied array..  
e490: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e4a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
e4b0: 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 54   name="values">T
e4c0: 68 65 20 61 72 72 61 79 20 74 6f 20 66 69 6c 6c  he array to fill
e4d0: 20 77 69 74 68 20 76 61 6c 75 65 73 20 66 72 6f   with values fro
e4e0: 6d 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  m the columns in
e4f0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73   the current res
e500: 75 6c 74 73 65 74 3c 2f 70 61 72 61 6d 3e 0d 0a  ultset</param>..
e510: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
e520: 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  >The number of c
e530: 6f 6c 75 6d 6e 73 20 72 65 74 72 69 65 76 65 64  olumns retrieved
e540: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
e550: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
e560: 69 6e 74 20 47 65 74 56 61 6c 75 65 73 28 6f 62  int GetValues(ob
e570: 6a 65 63 74 5b 5d 20 76 61 6c 75 65 73 29 0d 0a  ject[] values)..
e580: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65      {..      Che
e590: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
e5a0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 4d 61 78 20  .      int nMax 
e5b0: 3d 20 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20  = FieldCount;.. 
e5c0: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 73 2e       if (values.
e5d0: 4c 65 6e 67 74 68 20 3c 20 6e 4d 61 78 29 20 6e  Length < nMax) n
e5e0: 4d 61 78 20 3d 20 76 61 6c 75 65 73 2e 4c 65 6e  Max = values.Len
e5f0: 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  gth;....      fo
e600: 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20  r (int n = 0; n 
e610: 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20  < nMax; n++)..  
e620: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 76      {..        v
e630: 61 6c 75 65 73 5b 6e 5d 20 3d 20 47 65 74 56 61  alues[n] = GetVa
e640: 6c 75 65 28 6e 29 3b 0d 0a 20 20 20 20 20 20 7d  lue(n);..      }
e650: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
e660: 20 6e 4d 61 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d   nMax;..    }...
e670: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
e680: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
e690: 72 6e 73 20 61 20 63 6f 6c 6c 65 63 74 69 6f 6e  rns a collection
e6a0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20   containing all 
e6b0: 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  the column names
e6c0: 20 61 6e 64 20 76 61 6c 75 65 73 20 66 6f 72 20   and values for 
e6d0: 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72  the..    /// cur
e6e0: 72 65 6e 74 20 72 6f 77 20 6f 66 20 64 61 74 61  rent row of data
e6f0: 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
e700: 72 65 73 75 6c 74 73 65 74 2c 20 69 66 20 61 6e  resultset, if an
e710: 79 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  y.  If there is 
e720: 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72  no..    /// curr
e730: 65 6e 74 20 72 6f 77 20 6f 72 20 6e 6f 20 63 75  ent row or no cu
e740: 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 2c  rrent resultset,
e750: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 6d 61   an exception ma
e760: 79 20 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20  y be thrown...  
e770: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e780: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
e790: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
e7a0: 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 63 6f 6e 74   collection cont
e7b0: 61 69 6e 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  aining the colum
e7c0: 6e 20 6e 61 6d 65 20 61 6e 64 20 76 61 6c 75 65  n name and value
e7d0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72   information for
e7e0: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75   the..    /// cu
e7f0: 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 64 61 74  rrent row of dat
e800: 61 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  a in the current
e810: 20 72 65 73 75 6c 74 73 65 74 20 6f 72 20 6e 75   resultset or nu
e820: 6c 6c 20 69 66 20 74 68 69 73 20 69 6e 66 6f 72  ll if this infor
e830: 6d 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20  mation..    /// 
e840: 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e  cannot be obtain
e850: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ed...    /// </r
e860: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
e870: 6c 69 63 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c  lic NameValueCol
e880: 6c 65 63 74 69 6f 6e 20 47 65 74 56 61 6c 75 65  lection GetValue
e890: 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  s()..    {..    
e8a0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
e8b0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
e8c0: 69 66 20 28 28 5f 61 63 74 69 76 65 53 74 61 74  if ((_activeStat
e8d0: 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ement == null) |
e8e0: 7c 20 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  | (_activeStatem
e8f0: 65 6e 74 2e 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  ent._sql == null
e900: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
e910: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
e920: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
e930: 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion();....      
e940: 20 20 69 6e 74 20 6e 4d 61 78 20 3d 20 50 72 69    int nMax = Pri
e950: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
e960: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20  Count;..        
e970: 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63 74  NameValueCollect
e980: 69 6f 6e 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  ion result = new
e990: 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63   NameValueCollec
e9a0: 74 69 6f 6e 28 6e 4d 61 78 29 3b 0d 0a 0d 0a 20  tion(nMax);.... 
e9b0: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
e9c0: 6e 20 3d 20 30 3b 20 6e 20 3c 20 6e 4d 61 78 3b  n = 0; n < nMax;
e9d0: 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 7b   n++)..        {
e9e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
e9f0: 72 69 6e 67 20 6e 61 6d 65 20 3d 20 5f 61 63 74  ring name = _act
ea00: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
ea10: 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63  l.ColumnName(_ac
ea20: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e  tiveStatement, n
ea30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
ea40: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 3d 20 5f  string value = _
ea50: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
ea60: 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63  _sql.GetText(_ac
ea70: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e  tiveStatement, n
ea80: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
ea90: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 6e 61 6d    result.Add(nam
eaa0: 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  e, value);..    
eab0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
eac0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
ead0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
eae0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
eaf0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75   /// Returns Tru
eb00: 65 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 73  e if the results
eb10: 65 74 20 68 61 73 20 72 6f 77 73 20 74 68 61 74  et has rows that
eb20: 20 63 61 6e 20 62 65 20 66 65 74 63 68 65 64 0d   can be fetched.
eb30: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
eb40: 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
eb50: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 48 61  override bool Ha
eb60: 73 52 6f 77 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  sRows..    {..  
eb70: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
eb80: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
eb90: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
eba0: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
ebb0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
ebc0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
ebd0: 45 3a 20 49 66 20 74 68 65 20 22 73 74 69 63 6b  E: If the "stick
ebe0: 79 22 20 66 6c 61 67 20 68 61 73 20 62 65 65 6e  y" flag has been
ebf0: 20 73 65 74 2c 20 75 73 65 20 74 68 65 20 6e 65   set, use the ne
ec00: 77 20 62 65 68 61 76 69 6f 72 2c 0d 0a 20 20 20  w behavior,..   
ec10: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77 68       //       wh
ec20: 69 63 68 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ich returns non-
ec30: 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20 77 65  zero if there we
ec40: 72 65 20 65 76 65 72 20 61 6e 79 20 72 6f 77 73  re ever any rows
ec50: 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   in..        // 
ec60: 20 20 20 20 20 20 74 68 65 20 61 73 73 6f 63 69        the associ
ec70: 61 74 65 64 20 72 65 73 75 6c 74 20 73 65 74 73  ated result sets
ec80: 2e 20 20 47 65 6e 65 72 61 6c 6c 79 2c 20 74 68  .  Generally, th
ec90: 69 73 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 0d  is flag is only.
eca0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
ecb0: 20 20 75 73 65 66 75 6c 20 77 68 65 6e 20 69 74    useful when it
ecc0: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f   is necessary to
ecd0: 20 72 65 74 61 69 6e 20 63 6f 6d 70 61 74 69 62   retain compatib
ece0: 69 6c 69 74 79 20 77 69 74 68 0d 0a 20 20 20 20  ility with..    
ecf0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68      //       oth
ed00: 65 72 20 41 44 4f 2e 4e 45 54 20 70 72 6f 76 69  er ADO.NET provi
ed10: 64 65 72 73 20 74 68 61 74 20 75 73 65 20 74 68  ders that use th
ed20: 65 73 65 20 73 61 6d 65 20 73 65 6d 61 6e 74 69  ese same semanti
ed30: 63 73 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  cs for..        
ed40: 2f 2f 20 20 20 20 20 20 20 74 68 65 20 48 61 73  //       the Has
ed50: 52 6f 77 73 20 70 72 6f 70 65 72 74 79 2e 0d 0a  Rows property...
ed60: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
ed70: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
ed80: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
ed90: 6f 6e 46 6c 61 67 73 2e 53 74 69 63 6b 79 48 61  onFlags.StickyHa
eda0: 73 52 6f 77 73 29 20 3d 3d 20 53 51 4c 69 74 65  sRows) == SQLite
edb0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
edc0: 53 74 69 63 6b 79 48 61 73 52 6f 77 73 29 0d 0a  StickyHasRows)..
edd0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
ede0: 20 28 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65   ((_readingState
edf0: 20 21 3d 20 31 29 20 7c 7c 20 28 5f 73 74 65 70   != 1) || (_step
ee00: 43 6f 75 6e 74 20 3e 20 30 29 29 3b 0d 0a 0d 0a  Count > 0));....
ee10: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
ee20: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
ee30: 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  s is the default
ee40: 20 62 65 68 61 76 69 6f 72 2e 20 20 49 74 20 72   behavior.  It r
ee50: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20  eturns non-zero 
ee60: 6f 6e 6c 79 20 69 66 0d 0a 20 20 20 20 20 20 20  only if..       
ee70: 20 2f 2f 20 20 20 20 20 20 20 6d 6f 72 65 20 72   //       more r
ee80: 6f 77 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ows are availabl
ee90: 65 20 28 69 2e 65 2e 20 61 20 63 61 6c 6c 20 74  e (i.e. a call t
eea0: 6f 20 74 68 65 20 52 65 61 64 20 6d 65 74 68 6f  o the Read metho
eeb0: 64 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  d is..        //
eec0: 20 20 20 20 20 20 20 65 78 70 65 63 74 65 64 20         expected 
eed0: 74 6f 20 73 75 63 63 65 65 64 29 2e 20 20 50 72  to succeed).  Pr
eee0: 69 6f 72 20 74 6f 20 74 68 65 20 69 6e 74 72 6f  ior to the intro
eef0: 64 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 0d 0a  duction of the..
ef00: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
ef10: 20 22 73 74 69 63 6b 79 22 20 66 6c 61 67 2c 20   "sticky" flag, 
ef20: 74 68 69 73 20 69 73 20 68 6f 77 20 74 68 69 73  this is how this
ef30: 20 70 72 6f 70 65 72 74 79 20 68 61 73 20 61 6c   property has al
ef40: 77 61 79 73 20 77 6f 72 6b 65 64 2e 0d 0a 20 20  ways worked...  
ef50: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
ef60: 20 20 72 65 74 75 72 6e 20 28 5f 72 65 61 64 69    return (_readi
ef70: 6e 67 53 74 61 74 65 20 21 3d 20 31 29 3b 0d 0a  ngState != 1);..
ef80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
ef90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
efa0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
efb0: 75 72 6e 73 20 54 72 75 65 20 69 66 20 74 68 65  urns True if the
efc0: 20 64 61 74 61 20 72 65 61 64 65 72 20 69 73 20   data reader is 
efd0: 63 6c 6f 73 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  closed..    /// 
efe0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
eff0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
f000: 62 6f 6f 6c 20 49 73 43 6c 6f 73 65 64 0d 0a 20  bool IsClosed.. 
f010: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20     {..      get 
f020: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
f030: 29 3b 20 72 65 74 75 72 6e 20 28 5f 63 6f 6d 6d  ); return (_comm
f040: 61 6e 64 20 3d 3d 20 6e 75 6c 6c 29 3b 20 7d 0d  and == null); }.
f050: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
f060: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
f070: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75   /// Returns Tru
f080: 65 20 69 66 20 74 68 65 20 73 70 65 63 69 66 69  e if the specifi
f090: 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 75 6c  ed column is nul
f0a0: 6c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  l..    /// </sum
f0b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
f0c0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
f0d0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
f0e0: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
f0f0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
f100: 73 3e 54 72 75 65 20 6f 72 20 46 61 6c 73 65 3c  s>True or False<
f110: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
f120: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62  ublic override b
f130: 6f 6f 6c 20 49 73 44 42 4e 75 6c 6c 28 69 6e 74  ool IsDBNull(int
f140: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
f150: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
f160: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
f170: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
f180: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
f190: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
f1a0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
f1b0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
f1c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
f1d0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 49 73 44  urn _keyInfo.IsD
f1e0: 42 4e 75 6c 6c 28 69 20 2d 20 50 72 69 76 61 74  BNull(i - Privat
f1f0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
f200: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
f210: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
f220: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4e  atement._sql.IsN
f230: 75 6c 6c 28 5f 61 63 74 69 76 65 53 74 61 74 65  ull(_activeState
f240: 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d  ment, i);..    }
f250: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
f260: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d  mary>..    /// M
f270: 6f 76 65 73 20 74 6f 20 74 68 65 20 6e 65 78 74  oves to the next
f280: 20 72 65 73 75 6c 74 73 65 74 20 69 6e 20 6d 75   resultset in mu
f290: 6c 74 69 70 6c 65 20 72 6f 77 2d 72 65 74 75 72  ltiple row-retur
f2a0: 6e 69 6e 67 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ning SQL command
f2b0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
f2c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
f2d0: 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20  returns>True if 
f2e0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  the command was 
f2f0: 73 75 63 63 65 73 73 66 75 6c 20 61 6e 64 20 61  successful and a
f300: 20 6e 65 77 20 72 65 73 75 6c 74 73 65 74 20 69   new resultset i
f310: 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 46 61 6c  s available, Fal
f320: 73 65 20 6f 74 68 65 72 77 69 73 65 2e 3c 2f 72  se otherwise.</r
f330: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
f340: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
f350: 6c 20 4e 65 78 74 52 65 73 75 6c 74 28 29 0d 0a  l NextResult()..
f360: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65      {..      Che
f370: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
f380: 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64       CheckClosed
f390: 28 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  ();..      if (_
f3a0: 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29  throwOnDisposed)
f3b0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43   SQLiteCommand.C
f3c0: 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d  heck(_command);.
f3d0: 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53  ...      SQLiteS
f3e0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 20 3d 20  tatement stmt = 
f3f0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74  null;..      int
f400: 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20   fieldCount;..  
f410: 20 20 20 20 62 6f 6f 6c 20 73 63 68 65 6d 61 4f      bool schemaO
f420: 6e 6c 79 20 3d 20 28 28 5f 63 6f 6d 6d 61 6e 64  nly = ((_command
f430: 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61  Behavior & Comma
f440: 6e 64 42 65 68 61 76 69 6f 72 2e 53 63 68 65 6d  ndBehavior.Schem
f450: 61 4f 6e 6c 79 29 20 21 3d 20 30 29 3b 0d 0a 0d  aOnly) != 0);...
f460: 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 74 72  .      while (tr
f470: 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ue)..      {..  
f480: 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d        if (stmt =
f490: 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76  = null && _activ
f4a0: 65 53 74 61 74 65 6d 65 6e 74 20 21 3d 20 6e 75  eStatement != nu
f4b0: 6c 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74 61  ll && _activeSta
f4c0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 20 21 3d 20 6e  tement._sql != n
f4d0: 75 6c 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74  ull && _activeSt
f4e0: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4f  atement._sql.IsO
f4f0: 70 65 6e 28 29 29 0d 0a 20 20 20 20 20 20 20 20  pen())..        
f500: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
f510: 52 65 73 65 74 20 74 68 65 20 70 72 65 76 69 6f  Reset the previo
f520: 75 73 6c 79 2d 65 78 65 63 75 74 65 64 20 73 74  usly-executed st
f530: 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20  atement..       
f540: 20 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e     if (!schemaOn
f550: 6c 79 29 20 5f 61 63 74 69 76 65 53 74 61 74 65  ly) _activeState
f560: 6d 65 6e 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28  ment._sql.Reset(
f570: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
f580: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f590: 2f 2f 20 49 66 20 77 65 27 72 65 20 6f 6e 6c 79  // If we're only
f5a0: 20 73 75 70 70 6f 73 65 64 20 74 6f 20 72 65 74   supposed to ret
f5b0: 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  urn a single row
f5c0: 73 65 74 2c 20 73 74 65 70 20 74 68 72 6f 75 67  set, step throug
f5d0: 68 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20  h all remaining 
f5e0: 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 63 65 20  statements once 
f5f0: 75 6e 74 69 6c 0d 0a 20 20 20 20 20 20 20 20 20  until..         
f600: 20 2f 2f 20 74 68 65 79 20 61 72 65 20 61 6c 6c   // they are all
f610: 20 64 6f 6e 65 20 61 6e 64 20 72 65 74 75 72 6e   done and return
f620: 20 66 61 6c 73 65 20 74 6f 20 69 6e 64 69 63 61   false to indica
f630: 74 65 20 6e 6f 20 6d 6f 72 65 20 72 65 73 75 6c  te no more resul
f640: 74 73 65 74 73 20 65 78 69 73 74 2e 0d 0a 20 20  tsets exist...  
f650: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f          if ((_co
f660: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20  mmandBehavior & 
f670: 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e  CommandBehavior.
f680: 53 69 6e 67 6c 65 52 65 73 75 6c 74 29 20 21 3d  SingleResult) !=
f690: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b   0)..          {
f6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
f6b0: 72 20 28 3b 20 3b 20 29 0d 0a 20 20 20 20 20 20  r (; ; )..      
f6c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f6d0: 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20 5f 63         stmt = _c
f6e0: 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61 74 65 6d  ommand.GetStatem
f6f0: 65 6e 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ent(_activeState
f700: 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31 29 3b 0d  mentIndex + 1);.
f710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
f720: 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c 29  f (stmt == null)
f730: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
f740: 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74         _activeSt
f750: 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b 0d  atementIndex++;.
f760: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
f770: 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79   if (!schemaOnly
f780: 20 26 26 20 73 74 6d 74 2e 5f 73 71 6c 2e 53 74   && stmt._sql.St
f790: 65 70 28 73 74 6d 74 29 29 20 5f 73 74 65 70 43  ep(stmt)) _stepC
f7a0: 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  ount++;..       
f7b0: 20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 2e         if (stmt.
f7c0: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74  _sql.ColumnCount
f7d0: 28 73 74 6d 74 29 20 3d 3d 20 30 29 0d 0a 20 20  (stmt) == 0)..  
f7e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
f800: 6e 74 20 63 68 61 6e 67 65 73 20 3d 20 30 3b 0d  nt changes = 0;.
f810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f820: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 20 3d   bool readOnly =
f830: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
f840: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d           if (stm
f850: 74 2e 54 72 79 47 65 74 43 68 61 6e 67 65 73 28  t.TryGetChanges(
f860: 72 65 66 20 63 68 61 6e 67 65 73 2c 20 72 65 66  ref changes, ref
f870: 20 72 65 61 64 4f 6e 6c 79 29 29 0d 0a 20 20 20   readOnly))..   
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
f890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8a0: 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29    if (!readOnly)
f8b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f8c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f8d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
f8e0: 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d 3d 20  rowsAffected == 
f8f0: 2d 31 29 20 5f 72 6f 77 73 41 66 66 65 63 74 65  -1) _rowsAffecte
f900: 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  d = 0;..        
f910: 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 6f 77              _row
f920: 73 41 66 66 65 63 74 65 64 20 2b 3d 20 63 68 61  sAffected += cha
f930: 6e 67 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  nges;..         
f940: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
f950: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
f960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
f970: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
f980: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f990: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
f9a0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
f9b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
f9c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f9d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
f9e0: 73 63 68 65 6d 61 4f 6e 6c 79 29 20 73 74 6d 74  schemaOnly) stmt
f9f0: 2e 5f 73 71 6c 2e 52 65 73 65 74 28 73 74 6d 74  ._sql.Reset(stmt
fa00: 29 3b 20 2f 2f 20 47 6f 74 74 61 20 72 65 73 65  ); // Gotta rese
fa10: 74 20 61 66 74 65 72 20 65 76 65 72 79 20 73 74  t after every st
fa20: 65 70 20 74 6f 20 72 65 6c 65 61 73 65 20 61 6e  ep to release an
fa30: 79 20 6c 6f 63 6b 73 20 61 6e 64 20 73 75 63 68  y locks and such
fa40: 21 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  !..            }
fa50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
fa60: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
fa70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
fa80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
fa90: 2f 20 47 65 74 20 74 68 65 20 6e 65 78 74 20 73  / Get the next s
faa0: 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78 65 63  tatement to exec
fab0: 75 74 65 0d 0a 20 20 20 20 20 20 20 20 73 74 6d  ute..        stm
fac0: 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74  t = _command.Get
fad0: 53 74 61 74 65 6d 65 6e 74 28 5f 61 63 74 69 76  Statement(_activ
fae0: 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 20  eStatementIndex 
faf0: 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  + 1);....       
fb00: 20 2f 2f 20 49 66 20 77 65 27 76 65 20 72 65 61   // If we've rea
fb10: 63 68 65 64 20 74 68 65 20 65 6e 64 20 6f 66 20  ched the end of 
fb20: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  the statements, 
fb30: 72 65 74 75 72 6e 20 66 61 6c 73 65 2c 20 6e 6f  return false, no
fb40: 20 6d 6f 72 65 20 72 65 73 75 6c 74 73 65 74 73   more resultsets
fb50: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74  ..        if (st
fb60: 6d 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  mt == null)..   
fb70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
fb80: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
fb90: 2f 2f 20 49 66 20 77 65 20 77 65 72 65 20 6f 6e  // If we were on
fba0: 20 61 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c   a current resul
fbb0: 74 73 65 74 2c 20 73 65 74 20 74 68 65 20 73 74  tset, set the st
fbc0: 61 74 65 20 74 6f 20 22 64 6f 6e 65 20 72 65 61  ate to "done rea
fbd0: 64 69 6e 67 22 20 66 6f 72 20 69 74 0d 0a 20 20  ding" for it..  
fbe0: 20 20 20 20 20 20 69 66 20 28 5f 72 65 61 64 69        if (_readi
fbf0: 6e 67 53 74 61 74 65 20 3c 20 31 29 0d 0a 20 20  ngState < 1)..  
fc00: 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67          _reading
fc10: 53 74 61 74 65 20 3d 20 31 3b 0d 0a 0d 0a 20 20  State = 1;....  
fc20: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
fc30: 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b 0d 0a  tementIndex++;..
fc40: 0d 0a 20 20 20 20 20 20 20 20 66 69 65 6c 64 43  ..        fieldC
fc50: 6f 75 6e 74 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ount = stmt._sql
fc60: 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d  .ColumnCount(stm
fc70: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  t);....        /
fc80: 2f 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  / If the stateme
fc90: 6e 74 20 69 73 20 6e 6f 74 20 61 20 73 65 6c 65  nt is not a sele
fca0: 63 74 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  ct statement or 
fcb0: 77 65 27 72 65 20 6e 6f 74 20 72 65 74 72 69 65  we're not retrie
fcc0: 76 69 6e 67 20 73 63 68 65 6d 61 20 6f 6e 6c 79  ving schema only
fcd0: 2c 20 74 68 65 6e 20 70 65 72 66 6f 72 6d 20 74  , then perform t
fce0: 68 65 20 69 6e 69 74 69 61 6c 20 73 74 65 70 0d  he initial step.
fcf0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 73 63  .        if (!sc
fd00: 68 65 6d 61 4f 6e 6c 79 20 7c 7c 20 28 66 69 65  hemaOnly || (fie
fd10: 6c 64 43 6f 75 6e 74 20 3d 3d 20 30 29 29 0d 0a  ldCount == 0))..
fd20: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
fd30: 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61       if (!schema
fd40: 4f 6e 6c 79 20 26 26 20 73 74 6d 74 2e 5f 73 71  Only && stmt._sq
fd50: 6c 2e 53 74 65 70 28 73 74 6d 74 29 29 0d 0a 20  l.Step(stmt)).. 
fd60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
fd70: 20 20 20 20 20 20 20 20 5f 73 74 65 70 43 6f 75          _stepCou
fd80: 6e 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  nt++;..         
fd90: 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65     _readingState
fda0: 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20 20   = -1;..        
fdb0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65    }..          e
fdc0: 6c 73 65 20 69 66 20 28 66 69 65 6c 64 43 6f 75  lse if (fieldCou
fdd0: 6e 74 20 3d 3d 20 30 29 20 2f 2f 20 4e 6f 20 72  nt == 0) // No r
fde0: 6f 77 73 20 72 65 74 75 72 6e 65 64 2c 20 69 66  ows returned, if
fdf0: 20 66 69 65 6c 64 43 6f 75 6e 74 20 69 73 20 7a   fieldCount is z
fe00: 65 72 6f 2c 20 73 6b 69 70 20 74 6f 20 74 68 65  ero, skip to the
fe10: 20 6e 65 78 74 20 73 74 61 74 65 6d 65 6e 74 0d   next statement.
fe20: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
fe30: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 68            int ch
fe40: 61 6e 67 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20  anges = 0;..    
fe50: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
fe60: 64 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  dOnly = false;..
fe70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
fe80: 73 74 6d 74 2e 54 72 79 47 65 74 43 68 61 6e 67  stmt.TryGetChang
fe90: 65 73 28 72 65 66 20 63 68 61 6e 67 65 73 2c 20  es(ref changes, 
fea0: 72 65 66 20 72 65 61 64 4f 6e 6c 79 29 29 0d 0a  ref readOnly))..
feb0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
fed0: 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20  (!readOnly)..   
fee0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
fef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
ff00: 20 28 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20   (_rowsAffected 
ff10: 3d 3d 20 2d 31 29 20 5f 72 6f 77 73 41 66 66 65  == -1) _rowsAffe
ff20: 63 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  cted = 0;..     
ff30: 20 20 20 20 20 20 20 20 20 20 20 5f 72 6f 77 73             _rows
ff40: 41 66 66 65 63 74 65 64 20 2b 3d 20 63 68 61 6e  Affected += chan
ff50: 67 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ges;..          
ff60: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
ff70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
ff80: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
ff90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ffa0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
ffb0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
ffc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  }..            i
ffd0: 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 29 20  f (!schemaOnly) 
ffe0: 73 74 6d 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28  stmt._sql.Reset(
fff0: 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  stmt);..        
10000 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 20 2f 2f      continue; //
10010 20 53 6b 69 70 20 74 68 69 73 20 63 6f 6d 6d 61   Skip this comma
10020 6e 64 20 61 6e 64 20 6d 6f 76 65 20 74 6f 20 74  nd and move to t
10030 68 65 20 6e 65 78 74 2c 20 69 74 20 77 61 73 20  he next, it was 
10040 6e 6f 74 20 61 20 72 6f 77 2d 72 65 74 75 72 6e  not a row-return
10050 69 6e 67 20 72 65 73 75 6c 74 73 65 74 0d 0a 20  ing resultset.. 
10060 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10070 20 20 20 20 20 20 65 6c 73 65 20 2f 2f 20 4e 6f        else // No
10080 20 72 6f 77 73 2c 20 66 69 65 6c 64 43 6f 75 6e   rows, fieldCoun
10090 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 73 6f  t is non-zero so
100a0 20 73 74 6f 70 20 68 65 72 65 0d 0a 20 20 20 20   stop here..    
100b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
100c0 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61       _readingSta
100d0 74 65 20 3d 20 31 3b 20 2f 2f 20 54 68 69 73 20  te = 1; // This 
100e0 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 65 64  command returned
100f0 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20 6e 6f 20   columns but no 
10100 72 6f 77 73 2c 20 73 6f 20 72 65 74 75 72 6e 20  rows, so return 
10110 74 72 75 65 2c 20 62 75 74 20 48 61 73 52 6f 77  true, but HasRow
10120 73 20 3d 20 66 61 6c 73 65 20 61 6e 64 20 52 65  s = false and Re
10130 61 64 28 29 20 72 65 74 75 72 6e 73 20 66 61 6c  ad() returns fal
10140 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  se..          }.
10150 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
10160 20 20 20 20 20 20 2f 2f 20 41 68 68 2c 20 77 65        // Ahh, we
10170 20 66 6f 75 6e 64 20 61 20 72 6f 77 2d 72 65 74   found a row-ret
10180 75 72 6e 69 6e 67 20 72 65 73 75 6c 74 73 65 74  urning resultset
10190 20 65 6c 69 67 69 62 6c 65 20 74 6f 20 62 65 20   eligible to be 
101a0 72 65 74 75 72 6e 65 64 21 0d 0a 20 20 20 20 20  returned!..     
101b0 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d     _activeStatem
101c0 65 6e 74 20 3d 20 73 74 6d 74 3b 0d 0a 20 20 20  ent = stmt;..   
101d0 20 20 20 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74       _fieldCount
101e0 20 3d 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a   = fieldCount;..
101f0 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 49 6e          _fieldIn
10200 64 65 78 65 73 20 3d 20 6e 65 77 20 44 69 63 74  dexes = new Dict
10210 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69  ionary<string, i
10220 6e 74 3e 28 53 74 72 69 6e 67 43 6f 6d 70 61 72  nt>(StringCompar
10230 65 72 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  er.OrdinalIgnore
10240 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Case);..        
10250 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20  _fieldTypeArray 
10260 3d 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65  = new SQLiteType
10270 5b 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46  [PrivateVisibleF
10280 69 65 6c 64 43 6f 75 6e 74 5d 3b 0d 0a 0d 0a 20  ieldCount];.... 
10290 20 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d         if ((_com
102a0 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43  mandBehavior & C
102b0 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 4b  ommandBehavior.K
102c0 65 79 49 6e 66 6f 29 20 21 3d 20 30 29 0d 0a 20  eyInfo) != 0).. 
102d0 20 20 20 20 20 20 20 20 20 4c 6f 61 64 4b 65 79           LoadKey
102e0 49 6e 66 6f 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Info();....     
102f0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
10300 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
10310 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
10320 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
10330 69 73 20 6d 65 74 68 6f 64 20 61 74 74 65 6d 70  is method attemp
10340 74 73 20 74 6f 20 71 75 65 72 79 20 74 68 65 20  ts to query the 
10350 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10360 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
10370 69 74 68 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65  ith..    /// the
10380 20 64 61 74 61 20 72 65 61 64 65 72 20 69 6e 20   data reader in 
10390 75 73 65 2e 20 20 49 66 20 74 68 65 20 75 6e 64  use.  If the und
103a0 65 72 6c 79 69 6e 67 20 63 6f 6d 6d 61 6e 64 20  erlying command 
103b0 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  or connection is
103c0 0d 0a 20 20 20 20 2f 2f 2f 20 75 6e 61 76 61 69  ..    /// unavai
103d0 6c 61 62 6c 65 2c 20 61 20 6e 75 6c 6c 20 76 61  lable, a null va
103e0 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 74 75  lue will be retu
103f0 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  rned...    /// <
10400 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
10410 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
10420 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63    /// The connec
10430 74 69 6f 6e 20 6f 62 6a 65 63 74 20 2d 4f 52 2d  tion object -OR-
10440 20 6e 75 6c 6c 20 69 66 20 69 74 20 69 73 20 75   null if it is u
10450 6e 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20  navailable...   
10460 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
10470 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
10480 74 69 63 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  tic SQLiteConnec
10490 74 69 6f 6e 20 47 65 74 43 6f 6e 6e 65 63 74 69  tion GetConnecti
104a0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  on(..        SQL
104b0 69 74 65 44 61 74 61 52 65 61 64 65 72 20 64 61  iteDataReader da
104c0 74 61 52 65 61 64 65 72 0d 0a 20 20 20 20 20 20  taReader..      
104d0 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
104e0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
104f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10500 69 66 20 28 64 61 74 61 52 65 61 64 65 72 20 21  if (dataReader !
10510 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
10520 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10530 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
10540 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
10550 64 61 74 61 52 65 61 64 65 72 2e 5f 63 6f 6d 6d  dataReader._comm
10560 61 6e 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  and;....        
10570 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 6d          if (comm
10580 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  and != null)..  
10590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
105a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
105b0 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
105c0 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ction connection
105d0 20 3d 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65   = command.Conne
105e0 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ction;....      
105f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
10600 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 21 3d 20   (connection != 
10610 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10630 65 74 75 72 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  eturn connection
10640 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10650 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10660 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
10670 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 4f          catch (O
10680 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63  bjectDisposedExc
10690 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20  eption)..       
106a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
106b0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
106c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
106d0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
106e0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
106f0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
10700 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
10710 20 74 68 65 20 53 51 4c 69 74 65 54 79 70 65 20   the SQLiteType 
10720 66 6f 72 20 61 20 67 69 76 65 6e 20 63 6f 6c 75  for a given colu
10730 6d 6e 20 61 6e 64 20 72 6f 77 20 76 61 6c 75 65  mn and row value
10740 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
10750 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
10760 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 6c 64 54  param name="oldT
10770 79 70 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ype">..    /// T
10780 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 69  he original SQLi
10790 74 65 54 79 70 65 20 73 74 72 75 63 74 75 72 65  teType structure
107a0 2c 20 62 61 73 65 64 20 6f 6e 6c 79 20 6f 6e 20  , based only on 
107b0 74 68 65 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20  the column...   
107c0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
107d0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
107e0 6d 65 3d 22 74 65 78 74 22 3e 0d 0a 20 20 20 20  me="text">..    
107f0 2f 2f 2f 20 54 68 65 20 74 65 78 74 75 61 6c 20  /// The textual 
10800 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c  value of the col
10810 75 6d 6e 20 66 6f 72 20 61 20 67 69 76 65 6e 20  umn for a given 
10820 72 6f 77 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  row...    /// </
10830 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
10840 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
10850 2f 2f 20 54 68 65 20 53 51 4c 69 74 65 54 79 70  // The SQLiteTyp
10860 65 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  e structure...  
10870 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
10880 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 53 51  ..    private SQ
10890 4c 69 74 65 54 79 70 65 20 47 65 74 53 51 4c 69  LiteType GetSQLi
108a0 74 65 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20  teType(..       
108b0 20 53 51 4c 69 74 65 54 79 70 65 20 6f 6c 64 54   SQLiteType oldT
108c0 79 70 65 2c 20 2f 2a 20 50 41 53 53 2d 54 48 52  ype, /* PASS-THR
108d0 4f 55 47 48 20 2a 2f 0d 0a 20 20 20 20 20 20 20  OUGH */..       
108e0 20 73 74 72 69 6e 67 20 74 65 78 74 0d 0a 20 20   string text..  
108f0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
10900 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69          if (SQLi
10910 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c  teConvert.LooksL
10920 69 6b 65 4e 75 6c 6c 28 74 65 78 74 29 29 0d 0a  ikeNull(text))..
10930 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10940 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70  rn new SQLiteTyp
10950 65 28 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e  e(TypeAffinity.N
10960 75 6c 6c 2c 20 44 62 54 79 70 65 2e 4f 62 6a 65  ull, DbType.Obje
10970 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ct);....        
10980 69 66 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72  if (SQLiteConver
10990 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 49 6e 74 36 34  t.LooksLikeInt64
109a0 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20  (text))..       
109b0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
109c0 53 51 4c 69 74 65 54 79 70 65 28 54 79 70 65 41  SQLiteType(TypeA
109d0 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 20 44  ffinity.Int64, D
109e0 62 54 79 70 65 2e 49 6e 74 36 34 29 3b 0d 0a 0d  bType.Int64);...
109f0 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c  .        if (SQL
10a00 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73  iteConvert.Looks
10a10 4c 69 6b 65 44 6f 75 62 6c 65 28 74 65 78 74 29  LikeDouble(text)
10a20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
10a30 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65  eturn new SQLite
10a40 54 79 70 65 28 54 79 70 65 41 66 66 69 6e 69 74  Type(TypeAffinit
10a50 79 2e 44 6f 75 62 6c 65 2c 20 44 62 54 79 70 65  y.Double, DbType
10a60 2e 44 6f 75 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20  .Double);....   
10a70 20 20 20 20 20 69 66 20 28 28 5f 61 63 74 69 76       if ((_activ
10a80 65 53 74 61 74 65 6d 65 6e 74 20 21 3d 20 6e 75  eStatement != nu
10a90 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ll) &&..        
10aa0 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 76 65 72      SQLiteConver
10ab0 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 44 61 74 65 54  t.LooksLikeDateT
10ac0 69 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ime(_activeState
10ad0 6d 65 6e 74 2e 5f 73 71 6c 2c 20 74 65 78 74 29  ment._sql, text)
10ae0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
10af0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10b00 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 28   new SQLiteType(
10b10 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74  TypeAffinity.Dat
10b20 65 54 69 6d 65 2c 20 44 62 54 79 70 65 2e 44 61  eTime, DbType.Da
10b30 74 65 54 69 6d 65 29 3b 0d 0a 20 20 20 20 20 20  teTime);..      
10b40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
10b50 65 74 75 72 6e 20 6f 6c 64 54 79 70 65 3b 0d 0a  eturn oldType;..
10b60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
10b70 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
10b80 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
10b90 65 20 53 51 4c 69 74 65 54 79 70 65 20 66 6f 72  e SQLiteType for
10ba0 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 2c   a given column,
10bb0 20 61 6e 64 20 63 61 63 68 65 73 20 69 74 20 74   and caches it t
10bc0 6f 20 61 76 6f 69 64 20 72 65 70 65 74 65 74 69  o avoid repeteti
10bd0 76 65 20 69 6e 74 65 72 6f 70 20 63 61 6c 6c 73  ve interop calls
10be0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
10bf0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
10c00 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67  param name="flag
10c10 73 22 3e 54 68 65 20 66 6c 61 67 73 20 61 73 73  s">The flags ass
10c20 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
10c30 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69   parent connecti
10c40 6f 6e 20 6f 62 6a 65 63 74 2e 3c 2f 70 61 72 61  on object.</para
10c50 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
10c60 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
10c70 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
10c80 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
10c90 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41    /// <returns>A
10ca0 20 53 51 4c 69 74 65 54 79 70 65 20 73 74 72 75   SQLiteType stru
10cb0 63 74 75 72 65 3c 2f 72 65 74 75 72 6e 73 3e 0d  cture</returns>.
10cc0 0a 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c  .    private SQL
10cd0 69 74 65 54 79 70 65 20 47 65 74 53 51 4c 69 74  iteType GetSQLit
10ce0 65 54 79 70 65 28 53 51 4c 69 74 65 43 6f 6e 6e  eType(SQLiteConn
10cf0 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
10d00 73 2c 20 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  s, int i)..    {
10d10 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
10d20 54 79 70 65 20 74 79 70 20 3d 20 5f 66 69 65 6c  Type typ = _fiel
10d30 64 54 79 70 65 41 72 72 61 79 5b 69 5d 3b 0d 0a  dTypeArray[i];..
10d40 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 79  ..        if (ty
10d50 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p == null)..    
10d60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10d70 20 20 20 2f 2f 20 49 6e 69 74 69 61 6c 69 7a 65     // Initialize
10d80 20 74 68 69 73 20 63 6f 6c 75 6d 6e 27 73 20 66   this column's f
10d90 69 65 6c 64 20 74 79 70 65 20 69 6e 73 74 61 6e  ield type instan
10da0 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
10db0 74 79 70 20 3d 20 5f 66 69 65 6c 64 54 79 70 65  typ = _fieldType
10dc0 41 72 72 61 79 5b 69 5d 20 3d 20 6e 65 77 20 53  Array[i] = new S
10dd0 51 4c 69 74 65 54 79 70 65 28 29 3b 0d 0a 20 20  QLiteType();..  
10de0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
10df0 20 20 20 2f 2f 20 49 66 20 6e 6f 74 20 69 6e 69     // If not ini
10e00 74 69 61 6c 69 7a 65 64 2c 20 74 68 65 6e 20 66  tialized, then f
10e10 65 74 63 68 20 74 68 65 20 64 65 63 6c 61 72 65  etch the declare
10e20 64 20 63 6f 6c 75 6d 6e 20 64 61 74 61 74 79 70  d column datatyp
10e30 65 20 61 6e 64 20 61 74 74 65 6d 70 74 20 74 6f  e and attempt to
10e40 20 63 6f 6e 76 65 72 74 20 69 74 0d 0a 20 20 20   convert it..   
10e50 20 20 20 20 20 2f 2f 20 74 6f 20 61 20 6b 6e 6f       // to a kno
10e60 77 6e 20 44 62 54 79 70 65 2e 0d 0a 20 20 20 20  wn DbType...    
10e70 20 20 20 20 69 66 20 28 74 79 70 2e 41 66 66 69      if (typ.Affi
10e80 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69  nity == TypeAffi
10e90 6e 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a  nity.Uninitializ
10ea0 65 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ed)..        {..
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 2e              typ.
10ec0 54 79 70 65 20 3d 20 53 51 4c 69 74 65 43 6f 6e  Type = SQLiteCon
10ed0 76 65 72 74 2e 54 79 70 65 4e 61 6d 65 54 6f 44  vert.TypeNameToD
10ee0 62 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20  bType(..        
10ef0 20 20 20 20 20 20 20 20 47 65 74 43 6f 6e 6e 65          GetConne
10f00 63 74 69 6f 6e 28 74 68 69 73 29 2c 20 5f 61 63  ction(this), _ac
10f10 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
10f20 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 0d 0a  ql.ColumnType(..
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f40 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
10f50 2c 20 69 2c 20 72 65 66 20 74 79 70 2e 41 66 66  , i, ref typ.Aff
10f60 69 6e 69 74 79 29 2c 20 66 6c 61 67 73 29 3b 0d  inity), flags);.
10f70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
10f80 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
10f90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10fa0 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 20   typ.Affinity = 
10fb0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
10fc0 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 41 66 66 69  ._sql.ColumnAffi
10fd0 6e 69 74 79 28 0d 0a 20 20 20 20 20 20 20 20 20  nity(..         
10fe0 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74         _activeSt
10ff0 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20  atement, i);..  
11000 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
11010 20 20 20 72 65 74 75 72 6e 20 74 79 70 3b 0d 0a     return typ;..
11020 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
11030 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
11040 2f 2f 2f 20 52 65 61 64 73 20 74 68 65 20 6e 65  /// Reads the ne
11050 78 74 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20  xt row from the 
11060 72 65 73 75 6c 74 73 65 74 0d 0a 20 20 20 20 2f  resultset..    /
11070 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
11080 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
11090 54 72 75 65 20 69 66 20 61 20 6e 65 77 20 72 6f  True if a new ro
110a0 77 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  w was successful
110b0 6c 79 20 6c 6f 61 64 65 64 20 61 6e 64 20 69 73  ly loaded and is
110c0 20 72 65 61 64 79 20 66 6f 72 20 70 72 6f 63 65   ready for proce
110d0 73 73 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d  ssing</returns>.
110e0 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
110f0 72 69 64 65 20 62 6f 6f 6c 20 52 65 61 64 28 29  ride bool Read()
11100 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43  ..    {..      C
11110 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
11120 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73  .      CheckClos
11130 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  ed();..      if 
11140 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65  (_throwOnDispose
11150 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  d) SQLiteCommand
11160 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29  .Check(_command)
11170 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28  ;....      if ((
11180 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72  _commandBehavior
11190 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69   & CommandBehavi
111a0 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29 20 21  or.SchemaOnly) !
111b0 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 72 65  = 0)..        re
111c0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
111d0 20 20 20 20 20 69 66 20 28 5f 72 65 61 64 69 6e       if (_readin
111e0 67 53 74 61 74 65 20 3d 3d 20 2d 31 29 20 2f 2f  gState == -1) //
111f0 20 46 69 72 73 74 20 73 74 65 70 20 77 61 73 20   First step was 
11200 61 6c 72 65 61 64 79 20 64 6f 6e 65 20 61 74 20  already done at 
11210 74 68 65 20 4e 65 78 74 52 65 73 75 6c 74 28 29  the NextResult()
11220 20 6c 65 76 65 6c 2c 20 73 6f 20 64 6f 6e 27 74   level, so don't
11230 20 73 74 65 70 20 61 67 61 69 6e 2c 20 6a 75 73   step again, jus
11240 74 20 72 65 74 75 72 6e 20 74 72 75 65 2e 0d 0a  t return true...
11250 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11260 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d   _readingState =
11270 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74   0;..        ret
11280 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
11290 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69   }..      else i
112a0 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65  f (_readingState
112b0 20 3d 3d 20 30 29 20 2f 2f 20 41 63 74 69 76 65   == 0) // Active
112c0 6c 79 20 72 65 61 64 69 6e 67 20 72 6f 77 73 0d  ly reading rows.
112d0 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
112e0 20 20 2f 2f 20 44 6f 6e 27 74 20 72 65 61 64 20    // Don't read 
112f0 61 20 6e 65 77 20 72 6f 77 20 69 66 20 74 68 65  a new row if the
11300 20 63 6f 6d 6d 61 6e 64 20 62 65 68 61 76 69 6f   command behavio
11310 72 20 64 69 63 74 61 74 65 73 20 53 69 6e 67 6c  r dictates Singl
11320 65 52 6f 77 2e 20 20 57 65 27 76 65 20 61 6c 72  eRow.  We've alr
11330 65 61 64 79 20 72 65 61 64 20 74 68 65 20 66 69  eady read the fi
11340 72 73 74 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20  rst row...      
11350 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42    if ((_commandB
11360 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e  ehavior & Comman
11370 64 42 65 68 61 76 69 6f 72 2e 53 69 6e 67 6c 65  dBehavior.Single
11380 52 6f 77 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20  Row) == 0)..    
11390 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
113a0 20 69 66 20 28 5f 61 63 74 69 76 65 53 74 61 74   if (_activeStat
113b0 65 6d 65 6e 74 2e 5f 73 71 6c 2e 53 74 65 70 28  ement._sql.Step(
113c0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
113d0 29 20 3d 3d 20 74 72 75 65 29 0d 0a 20 20 20 20  ) == true)..    
113e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
113f0 20 20 20 20 20 5f 73 74 65 70 43 6f 75 6e 74 2b       _stepCount+
11400 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  +;....          
11410 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21    if (_keyInfo !
11420 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
11430 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e         _keyInfo.
11440 52 65 73 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  Reset();....    
11450 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
11460 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
11470 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
11480 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67          _reading
11490 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f 20 46 69  State = 1; // Fi
114a0 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 20 72  nished reading r
114b0 6f 77 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ows..      }....
114c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
114d0 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  se;..    }....  
114e0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
114f0 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
11500 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
11510 6f 77 73 20 61 66 66 65 63 74 65 64 20 62 79 20  ows affected by 
11520 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
11530 69 6e 67 20 65 78 65 63 75 74 65 64 2e 0d 0a 20  ing executed... 
11540 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65     /// The value
11550 20 72 65 74 75 72 6e 65 64 20 6d 61 79 20 6e 6f   returned may no
11560 74 20 62 65 20 61 63 63 75 72 61 74 65 20 66 6f  t be accurate fo
11570 72 20 44 44 4c 20 73 74 61 74 65 6d 65 6e 74 73  r DDL statements
11580 2e 20 20 41 6c 73 6f 2c 20 69 74 0d 0a 20 20 20  .  Also, it..   
11590 20 2f 2f 2f 20 77 69 6c 6c 20 62 65 20 2d 31 20   /// will be -1 
115a0 66 6f 72 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  for any statemen
115b0 74 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  t that does not 
115c0 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74 61 62  modify the datab
115d0 61 73 65 20 28 65 2e 67 2e 0d 0a 20 20 20 20 2f  ase (e.g...    /
115e0 2f 2f 20 53 45 4c 45 43 54 29 2e 20 20 49 66 20  // SELECT).  If 
115f0 61 6e 20 6f 74 68 65 72 77 69 73 65 20 72 65 61  an otherwise rea
11600 64 2d 6f 6e 6c 79 20 73 74 61 74 65 6d 65 6e 74  d-only statement
11610 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 64 61   modifies the da
11620 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20  tabase..    /// 
11630 69 6e 64 69 72 65 63 74 6c 79 20 28 65 2e 67 2e  indirectly (e.g.
11640 20 76 69 61 20 61 20 76 69 72 74 75 61 6c 20 74   via a virtual t
11650 61 62 6c 65 20 6f 72 20 75 73 65 72 2d 64 65 66  able or user-def
11660 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 29 2c 20  ined function), 
11670 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c  the..    /// val
11680 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 75  ue returned is u
11690 6e 64 65 66 69 6e 65 64 2e 0d 0a 20 20 20 20 2f  ndefined...    /
116a0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
116b0 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
116c0 64 65 20 69 6e 74 20 52 65 63 6f 72 64 73 41 66  de int RecordsAf
116d0 66 65 63 74 65 64 0d 0a 20 20 20 20 7b 0d 0a 20  fected..    {.. 
116e0 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
116f0 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
11700 72 6e 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64  rn _rowsAffected
11710 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ; }..    }....  
11720 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
11730 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72  .    /// Indexer
11740 20 74 6f 20 72 65 74 72 69 65 76 65 20 64 61 74   to retrieve dat
11750 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20  a from a column 
11760 67 69 76 65 6e 20 69 74 73 20 6e 61 6d 65 0d 0a  given its name..
11770 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
11780 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
11790 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 54  am name="name">T
117a0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
117b0 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76  olumn to retriev
117c0 65 20 64 61 74 61 20 66 6f 72 3c 2f 70 61 72 61  e data for</para
117d0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
117e0 75 72 6e 73 3e 54 68 65 20 76 61 6c 75 65 20 63  urns>The value c
117f0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
11800 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e  column</returns>
11810 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
11820 72 72 69 64 65 20 6f 62 6a 65 63 74 20 74 68 69  rride object thi
11830 73 5b 73 74 72 69 6e 67 20 6e 61 6d 65 5d 0d 0a  s[string name]..
11840 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
11850 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
11860 28 29 3b 20 72 65 74 75 72 6e 20 47 65 74 56 61  (); return GetVa
11870 6c 75 65 28 47 65 74 4f 72 64 69 6e 61 6c 28 6e  lue(GetOrdinal(n
11880 61 6d 65 29 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d  ame)); }..    }.
11890 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
118a0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e  ary>..    /// In
118b0 64 65 78 65 72 20 74 6f 20 72 65 74 72 69 65 76  dexer to retriev
118c0 65 20 64 61 74 61 20 66 72 6f 6d 20 61 20 63 6f  e data from a co
118d0 6c 75 6d 6e 20 67 69 76 65 6e 20 69 74 73 20 69  lumn given its i
118e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
118f0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
11900 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
11910 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
11920 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
11930 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
11940 3e 54 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61  >The value conta
11950 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75  ined in the colu
11960 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  mn</returns>..  
11970 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
11980 65 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 69 6e  e object this[in
11990 74 20 69 5d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i]..    {..   
119a0 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
119b0 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
119c0 20 47 65 74 56 61 6c 75 65 28 69 29 3b 20 7d 0d   GetValue(i); }.
119d0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
119e0 69 76 61 74 65 20 76 6f 69 64 20 4c 6f 61 64 4b  ivate void LoadK
119f0 65 79 49 6e 66 6f 28 29 0d 0a 20 20 20 20 7b 0d  eyInfo()..    {.
11a00 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 6b 65  .        if (_ke
11a10 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
11a20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11a30 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e         _keyInfo.
11a40 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
11a50 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f          _keyInfo
11a60 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
11a70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f    }....        _
11a80 6b 65 79 49 6e 66 6f 20 3d 20 6e 65 77 20 53 51  keyInfo = new SQ
11a90 4c 69 74 65 4b 65 79 52 65 61 64 65 72 28 5f 63  LiteKeyReader(_c
11aa0 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
11ab0 6e 2c 20 74 68 69 73 2c 20 5f 61 63 74 69 76 65  n, this, _active
11ac0 53 74 61 74 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  Statement);..   
11ad0 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a               }..  }..}..