System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 46861f34eb75db29afc39b7122fceb85efb9aa01:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75  ns.Generic;..  u
0180: 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c  sing System.Coll
0190: 65 63 74 69 6f 6e 73 2e 53 70 65 63 69 61 6c 69  ections.Speciali
01a0: 7a 65 64 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  zed;..  using Sy
01b0: 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 75 73  stem.Data;..  us
01c0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
01d0: 43 6f 6d 6d 6f 6e 3b 0d 0a 20 20 75 73 69 6e 67  Common;..  using
01e0: 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a   System.Globaliz
01f0: 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20  ation;....  /// 
0200: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  <summary>..  ///
0210: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
0220: 74 61 74 69 6f 6e 20 6f 66 20 44 62 44 61 74 61  tation of DbData
0230: 52 65 61 64 65 72 2e 0d 0a 20 20 2f 2f 2f 20 3c  Reader...  /// <
0240: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62  /summary>..  pub
0250: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
0260: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
0270: 72 20 3a 20 44 62 44 61 74 61 52 65 61 64 65 72  r : DbDataReader
0280: 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ..  {..    /// <
0290: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
02a0: 2f 20 55 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d  / Underlying com
02b0: 6d 61 6e 64 20 74 68 69 73 20 72 65 61 64 65 72  mand this reader
02c0: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 0d   is attached to.
02d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
02e0: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
02f0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 5f   SQLiteCommand _
0300: 63 6f 6d 6d 61 6e 64 3b 0d 0a 20 20 20 20 2f 2f  command;..    //
0310: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0320: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 70   /// The flags p
0330: 65 72 74 61 69 6e 69 6e 67 20 74 6f 20 74 68 65  ertaining to the
0340: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6e 6e   associated conn
0350: 65 63 74 69 6f 6e 20 28 76 69 61 20 74 68 65 20  ection (via the 
0360: 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 2f  command)...    /
0370: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0380: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0390: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
03a0: 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20 2f 2f   _flags;..    //
03b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
03c0: 20 2f 2f 2f 20 49 6e 64 65 78 20 6f 66 20 74 68   /// Index of th
03d0: 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
03e0: 65 6e 74 20 69 6e 20 74 68 65 20 63 6f 6d 6d 61  ent in the comma
03f0: 6e 64 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nd being process
0400: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
0410: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
0420: 61 74 65 20 69 6e 74 20 5f 61 63 74 69 76 65 53  ate int _activeS
0430: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 3b 0d 0a  tatementIndex;..
0440: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0450: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65  >..    /// Curre
0460: 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  nt statement bei
0470: 6e 67 20 52 65 61 64 28 29 0d 0a 20 20 20 20 2f  ng Read()..    /
0480: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0490: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
04a0: 65 53 74 61 74 65 6d 65 6e 74 20 5f 61 63 74 69  eStatement _acti
04b0: 76 65 53 74 61 74 65 6d 65 6e 74 3b 0d 0a 20 20  veStatement;..  
04c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
04d0: 0a 20 20 20 20 2f 2f 2f 20 53 74 61 74 65 20 6f  .    /// State o
04e0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  f the current st
04f0: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72  atement being pr
0500: 6f 63 65 73 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  ocessed...    //
0510: 2f 20 2d 31 20 3d 20 46 69 72 73 74 20 53 74 65  / -1 = First Ste
0520: 70 28 29 20 65 78 65 63 75 74 65 64 2c 20 73 6f  p() executed, so
0530: 20 74 68 65 20 66 69 72 73 74 20 52 65 61 64 28   the first Read(
0540: 29 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65  ) will be ignore
0550: 64 0d 0a 20 20 20 20 2f 2f 2f 20 20 30 20 3d 20  d..    ///  0 = 
0560: 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67  Actively reading
0570: 0d 0a 20 20 20 20 2f 2f 2f 20 20 31 20 3d 20 46  ..    ///  1 = F
0580: 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 0d  inished reading.
0590: 0a 20 20 20 20 2f 2f 2f 20 20 32 20 3d 20 4e 6f  .    ///  2 = No
05a0: 6e 2d 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  n-row-returning 
05b0: 73 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 20 72 65  statement, no re
05c0: 63 6f 72 64 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cords..    /// <
05d0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
05e0: 72 69 76 61 74 65 20 69 6e 74 20 5f 72 65 61 64  rivate int _read
05f0: 69 6e 67 53 74 61 74 65 3b 0d 0a 20 20 20 20 2f  ingState;..    /
0600: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0610: 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20    /// Number of 
0620: 72 65 63 6f 72 64 73 20 61 66 66 65 63 74 65 64  records affected
0630: 20 62 79 20 74 68 65 20 69 6e 73 65 72 74 2f 75   by the insert/u
0640: 70 64 61 74 65 20 73 74 61 74 65 6d 65 6e 74 73  pdate statements
0650: 20 65 78 65 63 75 74 65 64 20 6f 6e 20 74 68 65   executed on the
0660: 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 2f 2f   command..    //
0670: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0680: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 5f 72    private int _r
0690: 6f 77 73 41 66 66 65 63 74 65 64 3b 0d 0a 20 20  owsAffected;..  
06a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
06b0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 75 6e 74 20 6f  .    /// Count o
06c0: 66 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d 6e  f fields (column
06d0: 73 29 20 69 6e 20 74 68 65 20 72 6f 77 2d 72 65  s) in the row-re
06e0: 74 75 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e  turning statemen
06f0: 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
0700: 67 20 70 72 6f 63 65 73 73 65 64 0d 0a 20 20 20  g processed..   
0710: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0720: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
0730: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20   _fieldCount;.. 
0740: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0750: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
0760: 6d 62 65 72 20 6f 66 20 63 61 6c 6c 73 20 74 6f  mber of calls to
0770: 20 53 74 65 70 28 29 20 74 68 61 74 20 68 61 76   Step() that hav
0780: 65 20 72 65 74 75 72 6e 65 64 20 74 72 75 65 20  e returned true 
0790: 28 69 2e 65 2e 20 74 68 65 20 6e 75 6d 62 65 72  (i.e. the number
07a0: 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0d 0a 20   of rows that.. 
07b0: 20 20 20 2f 2f 2f 20 68 61 76 65 20 62 65 65 6e     /// have been
07c0: 20 72 65 61 64 20 69 6e 20 74 68 65 20 63 75 72   read in the cur
07d0: 72 65 6e 74 20 72 65 73 75 6c 74 20 73 65 74 29  rent result set)
07e0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
07f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0800: 74 65 20 69 6e 74 20 5f 73 74 65 70 43 6f 75 6e  te int _stepCoun
0810: 74 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  t;..    /// <sum
0820: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d  mary>..    /// M
0830: 61 70 73 20 74 68 65 20 66 69 65 6c 64 20 28 63  aps the field (c
0840: 6f 6c 75 6d 6e 29 20 6e 61 6d 65 73 20 74 6f 20  olumn) names to 
0850: 74 68 65 69 72 20 63 6f 72 72 65 73 70 6f 6e 64  their correspond
0860: 69 6e 67 20 69 6e 64 65 78 65 73 20 77 69 74 68  ing indexes with
0870: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0d  in the results..
0880: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0890: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
08a0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
08b0: 6e 67 2c 20 69 6e 74 3e 20 5f 66 69 65 6c 64 49  ng, int> _fieldI
08c0: 6e 64 65 78 65 73 3b 0d 0a 20 20 20 20 2f 2f 2f  ndexes;..    ///
08d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
08e0: 2f 2f 2f 20 44 61 74 61 74 79 70 65 73 20 6f 66  /// Datatypes of
08f0: 20 61 63 74 69 76 65 20 66 69 65 6c 64 73 20 28   active fields (
0900: 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74 68 65 20  columns) in the 
0910: 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
0920: 74 2c 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  t, used for type
0930: 2d 72 65 73 74 72 69 63 74 69 6e 67 20 64 61 74  -restricting dat
0940: 61 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  a..    /// </sum
0950: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0960: 74 65 20 53 51 4c 69 74 65 54 79 70 65 5b 5d 20  te SQLiteType[] 
0970: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 3b  _fieldTypeArray;
0980: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0990: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
09a0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
09b0: 68 65 20 64 61 74 61 72 65 61 64 65 72 0d 0a 20  he datareader.. 
09c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
09d0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 43  >..    private C
09e0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 5f  ommandBehavior _
09f0: 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 3b  commandBehavior;
0a00: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0a10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
0a20: 66 20 73 65 74 2c 20 74 68 65 6e 20 64 69 73 70  f set, then disp
0a30: 6f 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61  ose of the comma
0a40: 6e 64 20 6f 62 6a 65 63 74 20 77 68 65 6e 20 74  nd object when t
0a50: 68 65 20 72 65 61 64 65 72 20 69 73 20 66 69 6e  he reader is fin
0a60: 69 73 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ished..    /// <
0a70: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
0a80: 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 64 69  nternal bool _di
0a90: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 3b 0d 0a 0d  sposeCommand;...
0aa0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0ab0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73  y>..    /// If s
0ac0: 65 74 2c 20 74 68 65 6e 20 72 61 69 73 65 20 61  et, then raise a
0ad0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 68 65 6e  n exception when
0ae0: 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61   the object is a
0af0: 63 63 65 73 73 65 64 20 61 66 74 65 72 20 62 65  ccessed after be
0b00: 69 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  ing disposed... 
0b10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0b20: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0b30: 62 6f 6f 6c 20 5f 74 68 72 6f 77 4f 6e 44 69 73  bool _throwOnDis
0b40: 70 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  posed;....    //
0b50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0b60: 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66   /// An array of
0b70: 20 72 6f 77 69 64 27 73 20 66 6f 72 20 74 68 65   rowid's for the
0b80: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
0b90: 74 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61  t if CommandBeha
0ba0: 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 20 69 73 20  vior.KeyInfo is 
0bb0: 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
0bc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0bd0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0be0: 65 4b 65 79 52 65 61 64 65 72 20 5f 6b 65 79 49  eKeyReader _keyI
0bf0: 6e 66 6f 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  nfo;....    /// 
0c00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0c10: 2f 2f 20 4d 61 74 63 68 65 73 20 74 68 65 20 76  // Matches the v
0c20: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  ersion of the co
0c30: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
0c40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0c50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20     internal int 
0c60: 5f 76 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  _version;....   
0c70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0c80: 20 20 20 20 2f 2f 2f 20 54 68 65 20 22 73 74 75      /// The "stu
0c90: 62 22 20 28 69 2e 65 2e 20 70 6c 61 63 65 68 6f  b" (i.e. placeho
0ca0: 6c 64 65 72 29 20 62 61 73 65 20 73 63 68 65 6d  lder) base schem
0cb0: 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 77 68  a name to use wh
0cc0: 65 6e 20 72 65 74 75 72 6e 69 6e 67 0d 0a 20 20  en returning..  
0cd0: 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 73 63 68    /// column sch
0ce0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ema information.
0cf0: 20 20 4d 61 74 63 68 65 73 20 74 68 65 20 62 61    Matches the ba
0d00: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 75  se schema name u
0d10: 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  sed by the..    
0d20: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 63  /// associated c
0d30: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
0d40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0d50: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
0d60: 6e 67 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61  ng _baseSchemaNa
0d70: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  me;....    /// <
0d80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0d90: 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74  / Internal const
0da0: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
0db0: 7a 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  zes the dataread
0dc0: 65 72 20 61 6e 64 20 73 65 74 73 20 75 70 20 74  er and sets up t
0dd0: 6f 20 62 65 67 69 6e 20 65 78 65 63 75 74 69 6e  o begin executin
0de0: 67 20 73 74 61 74 65 6d 65 6e 74 73 0d 0a 20 20  g statements..  
0df0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0e00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0e10: 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65 20   name="cmd">The 
0e20: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74 68  SQLiteCommand th
0e30: 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20 69  is data reader i
0e40: 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20  s for</param>.. 
0e50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e60: 6d 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20  me="behave">The 
0e70: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
0e80: 72 20 6f 66 20 74 68 65 20 64 61 74 61 20 72 65  r of the data re
0e90: 61 64 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ader</param>..  
0ea0: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
0eb0: 65 44 61 74 61 52 65 61 64 65 72 28 53 51 4c 69  eDataReader(SQLi
0ec0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43  teCommand cmd, C
0ed0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 62  ommandBehavior b
0ee0: 65 68 61 76 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ehave)..    {.. 
0ef0: 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69 73       _throwOnDis
0f00: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
0f10: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20       _command = 
0f20: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 5f 76 65 72  cmd;..      _ver
0f30: 73 69 6f 6e 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  sion = _command.
0f40: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 76 65 72 73  Connection._vers
0f50: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 5f 62 61 73  ion;..      _bas
0f60: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 5f 63  eSchemaName = _c
0f70: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
0f80: 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  n._baseSchemaNam
0f90: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 63 6f 6d  e;....      _com
0fa0: 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 3d 20 62  mandBehavior = b
0fb0: 65 68 61 76 65 3b 0d 0a 20 20 20 20 20 20 5f 61  ehave;..      _a
0fc0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
0fd0: 64 65 78 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  dex = -1;..     
0fe0: 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d   _rowsAffected =
0ff0: 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65   -1;....      Re
1000: 66 72 65 73 68 46 6c 61 67 73 28 29 3b 0d 0a 0d  freshFlags();...
1010: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
1020: 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
1030: 64 28 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  d(GetConnection(
1040: 74 68 69 73 29 2c 0d 0a 20 20 20 20 20 20 20 20  this),..        
1050: 20 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e    new Connection
1060: 45 76 65 6e 74 41 72 67 73 28 53 51 4c 69 74 65  EventArgs(SQLite
1070: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
1080: 79 70 65 2e 4e 65 77 44 61 74 61 52 65 61 64 65  ype.NewDataReade
1090: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 75  r,..          nu
10a0: 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61  ll, null, _comma
10b0: 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c 2c 20  nd, this, null, 
10c0: 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  null, new object
10d0: 5b 5d 20 7b 20 62 65 68 61 76 65 20 7d 29 29 3b  [] { behave }));
10e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 63  ....      if (_c
10f0: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
1100: 0a 20 20 20 20 20 20 20 20 20 20 4e 65 78 74 52  .          NextR
1110: 65 73 75 6c 74 28 29 3b 0d 0a 20 20 20 20 7d 0d  esult();..    }.
1120: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1190: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
11a0: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
11b0: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
11c0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
11d0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
11e0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
11f0: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
1200: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
1210: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
1220: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
1230: 64 20 26 26 20 5f 74 68 72 6f 77 4f 6e 44 69 73  d && _throwOnDis
1240: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
1250: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
1260: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
1270: 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c  ption(typeof(SQL
1280: 69 74 65 44 61 74 61 52 65 61 64 65 72 29 2e 4e  iteDataReader).N
1290: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
12a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1310: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1320: 0d 0a 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73  ..    /// Dispos
1330: 65 20 6f 66 20 61 6c 6c 20 72 65 73 6f 75 72 63  e of all resourc
1340: 65 73 20 75 73 65 64 20 62 79 20 74 68 69 73 20  es used by this 
1350: 64 61 74 61 72 65 61 64 65 72 2e 0d 0a 20 20 20  datareader...   
1360: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1380: 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22  name="disposing"
1390: 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70  ></param>..    p
13a0: 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64  rotected overrid
13b0: 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  e void Dispose(b
13c0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
13d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
13e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
13f0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1400: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1410: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1420: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
1430: 72 67 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  rgs(SQLiteConnec
1440: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 44 69  tionEventType.Di
1450: 73 70 6f 73 69 6e 67 44 61 74 61 52 65 61 64 65  sposingDataReade
1460: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
1470: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d  null, null, _com
1480: 6d 61 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c  mand, this, null
1490: 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65  , null, new obje
14a0: 63 74 5b 5d 20 7b 20 64 69 73 70 6f 73 69 6e 67  ct[] { disposing
14b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ,..            d
14c0: 69 73 70 6f 73 65 64 2c 20 5f 63 6f 6d 6d 61 6e  isposed, _comman
14d0: 64 42 65 68 61 76 69 6f 72 2c 20 5f 72 65 61 64  dBehavior, _read
14e0: 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f 77 73 41  ingState, _rowsA
14f0: 66 66 65 63 74 65 64 2c 20 5f 73 74 65 70 43 6f  ffected, _stepCo
1500: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
1510: 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 20 5f    _fieldCount, _
1520: 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 2c 20  disposeCommand, 
1530: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
1540: 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   }));....       
1550: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1570: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1580: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
15a0: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15d0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1610: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1620: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1630: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1640: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1650: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1680: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
16d0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
16e0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
16f0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1740: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1760: 4f 54 45 3a 20 46 69 78 20 66 6f 72 20 74 69 63  OTE: Fix for tic
1770: 6b 65 74 20 5b 65 31 62 32 65 30 66 37 36 39 5d  ket [e1b2e0f769]
1780: 2c 20 64 6f 20 4e 4f 54 20 74 68 72 6f 77 20 65  , do NOT throw e
1790: 78 63 65 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20  xceptions..     
17a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17b0: 20 20 20 20 77 68 69 6c 65 20 77 65 20 61 72 65      while we are
17c0: 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64 2e   being disposed.
17d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
17f0: 20 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69        _throwOnDi
1800: 73 70 6f 73 65 64 20 3d 20 66 61 6c 73 65 3b 0d  sposed = false;.
1810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1820: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1830: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
1840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1850: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
1860: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20  disposing);.... 
1870: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1880: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1890: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
18a0: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
18b0: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
18c0: 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  point...        
18d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
18e0: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
18f0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1900: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1910: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1980: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f  .    internal vo
1990: 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  id Cancel()..   
19a0: 20 7b 0d 0a 20 20 20 20 20 20 5f 76 65 72 73 69   {..      _versi
19b0: 6f 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  on = 0;..    }..
19c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
19d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c 6f  ry>..    /// Clo
19e0: 73 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  ses the dataread
19f0: 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20  er, potentially 
1a00: 63 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  closing the conn
1a10: 65 63 74 69 6f 6e 20 61 73 20 77 65 6c 6c 20 69  ection as well i
1a20: 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  f CommandBehavio
1a30: 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f  r.CloseConnectio
1a40: 6e 20 77 61 73 20 73 70 65 63 69 66 69 65 64 2e  n was specified.
1a50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1a60: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
1a70: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
1a80: 6c 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  lose()..    {.. 
1a90: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
1aa0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53  ed();....      S
1ab0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
1ac0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1ad0: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1ae0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f            new Co
1af0: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
1b00: 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  s(SQLiteConnecti
1b10: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73  onEventType.Clos
1b20: 69 6e 67 44 61 74 61 52 65 61 64 65 72 2c 0d 0a  ingDataReader,..
1b30: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
1b40: 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61 6e 64 2c 20  null, _command, 
1b50: 74 68 69 73 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  this, null, null
1b60: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
1b70: 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f   _commandBehavio
1b80: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 72  r,..          _r
1b90: 65 61 64 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f  eadingState, _ro
1ba0: 77 73 41 66 66 65 63 74 65 64 2c 20 5f 73 74 65  wsAffected, _ste
1bb0: 70 43 6f 75 6e 74 2c 20 5f 66 69 65 6c 64 43 6f  pCount, _fieldCo
1bc0: 75 6e 74 2c 20 5f 64 69 73 70 6f 73 65 43 6f 6d  unt, _disposeCom
1bd0: 6d 61 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  mand,..         
1be0: 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65   _throwOnDispose
1bf0: 64 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  d }));....      
1c00: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
1c10: 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61        if (_comma
1c20: 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nd != null)..   
1c30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c40: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1c50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c60: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1c70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c80: 20 20 2f 2f 20 4d 61 6b 65 20 73 75 72 65 20 77    // Make sure w
1c90: 65 27 76 65 20 6e 6f 74 20 62 65 65 6e 20 63 61  e've not been ca
1ca0: 6e 63 65 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  nceled..        
1cb0: 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73 69        if (_versi
1cc0: 6f 6e 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  on != 0)..      
1cd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ce0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d10: 20 20 20 20 20 77 68 69 6c 65 20 28 4e 65 78 74       while (Next
1d20: 52 65 73 75 6c 74 28 29 29 0d 0a 20 20 20 20 20  Result())..     
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d70: 20 20 20 20 20 20 20 20 63 61 74 63 68 28 53 51          catch(SQ
1d80: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 29 0d 0a  LiteException)..
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1db0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1dc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1dd0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 52 65       _command.Re
1de0: 73 65 74 44 61 74 61 52 65 61 64 65 72 28 29 3b  setDataReader();
1df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
1e10: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e30: 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64 61 74     // If the dat
1e40: 61 72 65 61 64 65 72 27 73 20 62 65 68 61 76 69  areader's behavi
1e50: 6f 72 20 69 6e 63 6c 75 64 65 73 20 63 6c 6f 73  or includes clos
1e60: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
1e70: 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73 6f 20 68  on, then do so h
1e80: 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ere...          
1e90: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
1ea0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
1eb0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73  andBehavior.Clos
1ec0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 21 3d 20  eConnection) != 
1ed0: 30 20 26 26 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  0 && _command.Co
1ee0: 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  nnection != null
1ef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f00: 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e     _command.Conn
1f10: 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d  ection.Close();.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f40: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
1f50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f60: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 64 69           if (_di
1f70: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 29 0d 0a 20  sposeCommand).. 
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63 6f               _co
1f90: 6d 6d 61 6e 64 2e 44 69 73 70 6f 73 65 28 29 3b  mmand.Dispose();
1fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
1fb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fc0: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 6e      _command = n
1fd0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f 61  ull;..        _a
1fe0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d  ctiveStatement =
1ff0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2000: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
2010: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f  null;..        _
2020: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d  fieldTypeArray =
2030: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d   null;..      }.
2040: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
2050: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2060: 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
2070: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2080: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65  {..          _ke
2090: 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b  yInfo.Dispose();
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79  ..          _key
20b0: 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Info = null;..  
20c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
20d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
20e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20f0: 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20 65    /// Throw an e
2100: 72 72 6f 72 20 69 66 20 74 68 65 20 64 61 74 61  rror if the data
2110: 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
2120: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2130: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
2140: 65 20 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73  e void CheckClos
2150: 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
2160: 20 20 20 69 66 20 28 21 5f 74 68 72 6f 77 4f 6e     if (!_throwOn
2170: 44 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  Disposed)..     
2180: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
2190: 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64      if (_command
21a0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
21b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
21c0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
21d0: 65 70 74 69 6f 6e 28 22 44 61 74 61 52 65 61 64  eption("DataRead
21e0: 65 72 20 68 61 73 20 62 65 65 6e 20 63 6c 6f 73  er has been clos
21f0: 65 64 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ed");....      i
2200: 66 20 28 5f 76 65 72 73 69 6f 6e 20 3d 3d 20 30  f (_version == 0
2210: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
2220: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2230: 74 69 6f 6e 28 22 45 78 65 63 75 74 69 6f 6e 20  tion("Execution 
2240: 77 61 73 20 61 62 6f 72 74 65 64 20 62 79 20 74  was aborted by t
2250: 68 65 20 75 73 65 72 22 29 3b 0d 0a 0d 0a 20 20  he user");....  
2260: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2270: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
2280: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
2290: 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ction;....      
22a0: 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  if (connection._
22b0: 76 65 72 73 69 6f 6e 20 21 3d 20 5f 76 65 72 73  version != _vers
22c0: 69 6f 6e 20 7c 7c 20 63 6f 6e 6e 65 63 74 69 6f  ion || connectio
22d0: 6e 2e 53 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65  n.State != Conne
22e0: 63 74 69 6f 6e 53 74 61 74 65 2e 4f 70 65 6e 29  ctionState.Open)
22f0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
2300: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
2310: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 43  tionException("C
2320: 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 63 6c  onnection was cl
2330: 6f 73 65 64 2c 20 73 74 61 74 65 6d 65 6e 74 20  osed, statement 
2340: 77 61 73 20 74 65 72 6d 69 6e 61 74 65 64 22 29  was terminated")
2350: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
2360: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2370: 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20     /// Throw an 
2380: 65 72 72 6f 72 20 69 66 20 61 20 72 6f 77 20 69  error if a row i
2390: 73 20 6e 6f 74 20 6c 6f 61 64 65 64 0d 0a 20 20  s not loaded..  
23a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
23b0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
23c0: 69 64 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77  id CheckValidRow
23d0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
23e0: 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
23f0: 74 65 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  te != 0)..      
2400: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
2410: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
2420: 70 74 69 6f 6e 28 22 4e 6f 20 63 75 72 72 65 6e  ption("No curren
2430: 74 20 72 6f 77 22 29 3b 0d 0a 20 20 20 20 7d 0d  t row");..    }.
2440: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2450: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
2460: 75 6d 65 72 61 74 6f 72 20 73 75 70 70 6f 72 74  umerator support
2470: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2480: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
2490: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
24a0: 20 44 62 45 6e 75 6d 65 72 61 74 6f 72 20 6f 62   DbEnumerator ob
24b0: 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ject.</returns>.
24c0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
24d0: 72 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 73  ride Collections
24e0: 2e 49 45 6e 75 6d 65 72 61 74 6f 72 20 47 65 74  .IEnumerator Get
24f0: 45 6e 75 6d 65 72 61 74 6f 72 28 29 0d 0a 20 20  Enumerator()..  
2500: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
2510: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
2520: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 62     return new Db
2530: 45 6e 75 6d 65 72 61 74 6f 72 28 74 68 69 73 2c  Enumerator(this,
2540: 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
2550: 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
2560: 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65  avior.CloseConne
2570: 63 74 69 6f 6e 29 20 3d 3d 20 43 6f 6d 6d 61 6e  ction) == Comman
2580: 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43  dBehavior.CloseC
2590: 6f 6e 6e 65 63 74 69 6f 6e 29 29 3b 0d 0a 20 20  onnection));..  
25a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
25b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
25c0: 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65  / Not implemente
25d0: 64 2e 20 20 52 65 74 75 72 6e 73 20 30 0d 0a 20  d.  Returns 0.. 
25e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
25f0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
2600: 65 72 72 69 64 65 20 69 6e 74 20 44 65 70 74 68  erride int Depth
2610: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
2620: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
2630: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2640: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43  ed();..        C
2650: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
2660: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
2670: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2680: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2690: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
26a0: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
26b0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
26c0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75  the current resu
26d0: 6c 74 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ltset..    /// <
26e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
26f0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
2700: 6e 74 20 46 69 65 6c 64 43 6f 75 6e 74 0d 0a 20  nt FieldCount.. 
2710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
2720: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2730: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
2740: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2750: 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  kClosed();....  
2760: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
2770: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
2780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66         return _f
2790: 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  ieldCount;....  
27a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69        return _fi
27b0: 65 6c 64 43 6f 75 6e 74 20 2b 20 5f 6b 65 79 49  eldCount + _keyI
27c0: 6e 66 6f 2e 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  nfo.Count;..    
27d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
27e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
27f0: 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 63 65 73 20  .    /// Forces 
2800: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
2810: 6c 61 67 73 20 63 61 63 68 65 64 20 62 79 20 74  lags cached by t
2820: 68 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20  his data reader 
2830: 74 6f 20 62 65 20 72 65 66 72 65 73 68 65 64 0d  to be refreshed.
2840: 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68  .    /// from th
2850: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6e  e underlying con
2860: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
2870: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2880: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 52 65    public void Re
2890: 66 72 65 73 68 46 6c 61 67 73 28 29 0d 0a 20 20  freshFlags()..  
28a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
28b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
28c0: 0a 20 20 20 20 20 20 20 20 5f 66 6c 61 67 73 20  .        _flags 
28d0: 3d 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  = SQLiteCommand.
28e0: 47 65 74 46 6c 61 67 73 28 5f 63 6f 6d 6d 61 6e  GetFlags(_comman
28f0: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
2900: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2910: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
2920: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2930: 6f 77 73 20 73 65 65 6e 20 73 6f 20 66 61 72 20  ows seen so far 
2940: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  in the current r
2950: 65 73 75 6c 74 20 73 65 74 2e 0d 0a 20 20 20 20  esult set...    
2960: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2970: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 53      public int S
2980: 74 65 70 43 6f 75 6e 74 0d 0a 20 20 20 20 7b 0d  tepCount..    {.
2990: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
29a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29b0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
29c0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
29d0: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
29e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29f0: 20 72 65 74 75 72 6e 20 5f 73 74 65 70 43 6f 75   return _stepCou
2a00: 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  nt;..        }..
2a10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
2a20: 76 61 74 65 20 69 6e 74 20 50 72 69 76 61 74 65  vate int Private
2a30: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
2a40: 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
2a50: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
2a60: 66 69 65 6c 64 43 6f 75 6e 74 3b 20 7d 0d 0a 20  fieldCount; }.. 
2a70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
2a80: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
2a90: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
2aa0: 75 6d 62 65 72 20 6f 66 20 76 69 73 69 62 6c 65  umber of visible
2ab0: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
2ac0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
2ad0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2ae0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
2af0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 69   override int Vi
2b00: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 0d  sibleFieldCount.
2b10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2b20: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2b30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
2b40: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68  d();..        Ch
2b50: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20  eckClosed();..  
2b60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 72 69        return Pri
2b70: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
2b80: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 7d 0d  Count;..      }.
2b90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2ba0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2bb0: 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
2bc0: 20 69 73 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   is used to make
2bd0: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
2be0: 20 73 65 74 20 69 73 20 6f 70 65 6e 20 61 6e 64   set is open and
2bf0: 20 61 20 72 6f 77 20 69 73 20 63 75 72 72 65 6e   a row is curren
2c00: 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a  tly available...
2c10: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2c20: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
2c30: 76 6f 69 64 20 56 65 72 69 66 79 46 6f 72 47 65  void VerifyForGe
2c40: 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t()..    {..    
2c50: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
2c60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2c70: 6b 56 61 6c 69 64 52 6f 77 28 29 3b 0d 0a 20 20  kValidRow();..  
2c80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2c90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2ca0: 2f 20 53 51 4c 69 74 65 20 69 73 20 69 6e 68 65  / SQLite is inhe
2cb0: 72 65 6e 74 6c 79 20 75 6e 2d 74 79 70 65 64 2e  rently un-typed.
2cc0: 20 20 41 6c 6c 20 64 61 74 61 74 79 70 65 73 20    All datatypes 
2cd0: 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20 6e 61  in SQLite are na
2ce0: 74 69 76 65 6c 79 20 73 74 72 69 6e 67 73 2e 20  tively strings. 
2cf0: 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   The definition 
2d00: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  of the columns o
2d10: 66 20 61 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  f a table..    /
2d20: 2f 2f 20 61 6e 64 20 74 68 65 20 61 66 66 69 6e  // and the affin
2d30: 69 74 79 20 6f 66 20 72 65 74 75 72 6e 65 64 20  ity of returned 
2d40: 74 79 70 65 73 20 61 72 65 20 61 6c 6c 20 77 65  types are all we
2d50: 20 68 61 76 65 20 74 6f 20 67 6f 20 6f 6e 20 74   have to go on t
2d60: 6f 20 74 79 70 65 2d 72 65 73 74 72 69 63 74 20  o type-restrict 
2d70: 64 61 74 61 20 69 6e 20 74 68 65 20 72 65 61 64  data in the read
2d80: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 0d 0a 20 20  er...    ///..  
2d90: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
2da0: 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ion attempts to 
2db0: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
2dc0: 74 79 70 65 20 6f 66 20 64 61 74 61 20 62 65 69  type of data bei
2dd0: 6e 67 20 72 65 71 75 65 73 74 65 64 20 6f 66 20  ng requested of 
2de0: 61 20 63 6f 6c 75 6d 6e 20 6d 61 74 63 68 65 73  a column matches
2df0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
2e00: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 6e   the column.  In
2e10: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63 61  ..    /// the ca
2e20: 73 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  se of columns th
2e30: 61 74 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  at are not backe
2e40: 64 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 64  d into a table d
2e50: 65 66 69 6e 69 74 69 6f 6e 2c 20 77 65 20 61 74  efinition, we at
2e60: 74 65 6d 70 74 20 74 6f 20 6d 61 74 63 68 20 75  tempt to match u
2e70: 70 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  p the affinity o
2e80: 66 20 61 20 63 6f 6c 75 6d 6e 20 28 69 6e 74 2c  f a column (int,
2e90: 20 64 6f 75 62 6c 65 2c 20 73 74 72 69 6e 67 20   double, string 
2ea0: 6f 72 20 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f  or blob)..    //
2eb0: 2f 20 74 6f 20 61 20 73 65 74 20 6f 66 20 6b 6e  / to a set of kn
2ec0: 6f 77 6e 20 74 79 70 65 73 20 74 68 61 74 20 63  own types that c
2ed0: 6c 6f 73 65 6c 79 20 6d 61 74 63 68 20 74 68 61  losely match tha
2ee0: 74 20 61 66 66 69 6e 69 74 79 2e 20 20 49 74 27  t affinity.  It'
2ef0: 73 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 73  s not an exact s
2f00: 63 69 65 6e 63 65 2c 20 62 75 74 20 69 74 73 20  cience, but its 
2f10: 74 68 65 20 62 65 73 74 20 77 65 20 63 61 6e 20  the best we can 
2f20: 64 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  do...    /// </s
2f30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2f40: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2f50: 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f  /// This functio
2f60: 6e 20 74 68 72 6f 77 73 20 61 6e 20 49 6e 76 61  n throws an Inva
2f70: 6c 69 64 54 79 70 65 43 61 73 74 28 29 20 65 78  lidTypeCast() ex
2f80: 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 72  ception if the r
2f90: 65 71 75 65 73 74 65 64 20 74 79 70 65 20 64 6f  equested type do
2fa0: 65 73 6e 27 74 20 6d 61 74 63 68 20 74 68 65 20  esn't match the 
2fb0: 63 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e 69 74  column's definit
2fc0: 69 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74 79 2e  ion or affinity.
2fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
2fe0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  rns>..    /// <p
2ff0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
3000: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
3010: 6f 6c 75 6d 6e 20 74 6f 20 74 79 70 65 2d 63 68  olumn to type-ch
3020: 65 63 6b 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eck</param>..   
3030: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3040: 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
3050: 77 65 20 77 61 6e 74 20 74 6f 20 67 65 74 20 6f  we want to get o
3060: 75 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ut of the column
3070: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 72  </param>..    pr
3080: 69 76 61 74 65 20 54 79 70 65 41 66 66 69 6e 69  ivate TypeAffini
3090: 74 79 20 56 65 72 69 66 79 54 79 70 65 28 69 6e  ty VerifyType(in
30a0: 74 20 69 2c 20 44 62 54 79 70 65 20 74 79 70 29  t i, DbType typ)
30b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
30c0: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
30d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
30e0: 6c 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 79 70  lags.NoVerifyTyp
30f0: 65 41 66 66 69 6e 69 74 79 29 20 3d 3d 20 53 51  eAffinity) == SQ
3100: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3110: 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 79 70 65  ags.NoVerifyType
3120: 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20  Affinity)..     
3130: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79         return Ty
3140: 70 65 41 66 66 69 6e 69 74 79 2e 4e 6f 6e 65 3b  peAffinity.None;
3150: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70 65  ....        Type
3160: 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e 69 74  Affinity affinit
3170: 79 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70  y = GetSQLiteTyp
3180: 65 28 5f 66 6c 61 67 73 2c 20 69 29 2e 41 66 66  e(_flags, i).Aff
3190: 69 6e 69 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  inity;....      
31a0: 20 20 73 77 69 74 63 68 20 28 61 66 66 69 6e 69    switch (affini
31b0: 74 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ty)..        {..
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
31d0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
31e0: 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  t64:..          
31f0: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
3200: 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29 20 72   DbType.Int64) r
3210: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3230: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3240: 70 65 2e 49 6e 74 33 32 29 20 72 65 74 75 72 6e  pe.Int32) return
3250: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3260: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3270: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e  typ == DbType.In
3280: 74 31 36 29 20 72 65 74 75 72 6e 20 61 66 66 69  t16) return affi
3290: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
32a0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
32b0: 3d 20 44 62 54 79 70 65 2e 42 79 74 65 29 20 72  = DbType.Byte) r
32c0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
32d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32e0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
32f0: 70 65 2e 53 42 79 74 65 29 20 72 65 74 75 72 6e  pe.SByte) return
3300: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3310: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3320: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 6f  typ == DbType.Bo
3330: 6f 6c 65 61 6e 29 20 72 65 74 75 72 6e 20 61 66  olean) return af
3340: 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20  finity;..       
3350: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
3360: 20 3d 3d 20 44 62 54 79 70 65 2e 44 61 74 65 54   == DbType.DateT
3370: 69 6d 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  ime) return affi
3380: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
3390: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
33a0: 3d 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29  = DbType.Double)
33b0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
33c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33d0: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
33e0: 54 79 70 65 2e 53 69 6e 67 6c 65 29 20 72 65 74  Type.Single) ret
33f0: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3410: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3420: 2e 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e  .Decimal) return
3430: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3440: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3450: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
3460: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
3470: 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
3480: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
3490: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 6f 75  yp == DbType.Dou
34a0: 62 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  ble) return affi
34b0: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
34c0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
34d0: 3d 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29  = DbType.Single)
34e0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
34f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3500: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
3510: 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72 65  Type.Decimal) re
3520: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a  turn affinity;..
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3540: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3550: 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74 75  e.DateTime) retu
3560: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20  rn affinity;..  
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
3580: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
3590: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
35a0: 69 74 79 2e 54 65 78 74 3a 0d 0a 20 20 20 20 20  ity.Text:..     
35b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
35c0: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 74 72  yp == DbType.Str
35d0: 69 6e 67 29 20 72 65 74 75 72 6e 20 61 66 66 69  ing) return affi
35e0: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
35f0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
3600: 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29 20 72  = DbType.Guid) r
3610: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3630: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3640: 70 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74  pe.DateTime) ret
3650: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3670: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3680: 2e 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e  .Decimal) return
3690: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
36a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
36b0: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
36c0: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
36d0: 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20  y.Blob:..       
36e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
36f0: 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29   == DbType.Guid)
3700: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
3710: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3720: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
3730: 54 79 70 65 2e 42 69 6e 61 72 79 29 20 72 65 74  Type.Binary) ret
3740: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3760: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3770: 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e 20  .String) return 
3780: 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  affinity;..     
3790: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
37a0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
37b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
37c0: 77 20 49 6e 76 61 6c 69 64 43 61 73 74 45 78 63  w InvalidCastExc
37d0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 7d  eption();..    }
37e0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
37f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
3800: 6e 76 6f 6b 65 73 20 74 68 65 20 64 61 74 61 20  nvokes the data 
3810: 72 65 61 64 65 72 20 76 61 6c 75 65 20 63 61 6c  reader value cal
3820: 6c 62 61 63 6b 20 63 6f 6e 66 69 67 75 72 65 64  lback configured
3830: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
3840: 65 0d 0a 20 20 20 20 2f 2f 2f 20 74 79 70 65 20  e..    /// type 
3850: 6e 61 6d 65 20 61 73 73 6f 63 69 61 74 65 64 20  name associated 
3860: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
3870: 65 64 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 6e  ed column.  If n
3880: 6f 20 64 61 74 61 20 72 65 61 64 65 72 0d 0a 20  o data reader.. 
3890: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 63 61 6c     /// value cal
38a0: 6c 62 61 63 6b 20 69 73 20 61 76 61 69 6c 61 62  lback is availab
38b0: 6c 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  le for the datab
38c0: 61 73 65 20 74 79 70 65 20 6e 61 6d 65 2c 20 64  ase type name, d
38d0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
38e0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
38f0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
3900: 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20  ame="index">..  
3910: 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78 20    /// The index 
3920: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65  of the column be
3930: 69 6e 67 20 72 65 61 64 2e 0d 0a 20 20 20 20 2f  ing read...    /
3940: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
3950: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3960: 3d 22 65 76 65 6e 74 41 72 67 73 22 3e 0d 0a 20  ="eventArgs">.. 
3970: 20 20 20 2f 2f 2f 20 54 68 65 20 65 78 74 72 61     /// The extra
3980: 20 65 76 65 6e 74 20 64 61 74 61 20 74 6f 20 70   event data to p
3990: 61 73 73 20 69 6e 74 6f 20 74 68 65 20 63 61 6c  ass into the cal
39a0: 6c 62 61 63 6b 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lback...    /// 
39b0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
39c0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
39d0: 6f 6d 70 6c 65 74 65 22 3e 0d 0a 20 20 20 20 2f  omplete">..    /
39e0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
39f0: 68 65 20 64 65 66 61 75 6c 74 20 68 61 6e 64 6c  he default handl
3a00: 69 6e 67 20 66 6f 72 20 74 68 65 20 64 61 74 61  ing for the data
3a10: 20 72 65 61 64 65 72 20 63 61 6c 6c 20 73 68 6f   reader call sho
3a20: 75 6c 64 20 62 65 0d 0a 20 20 20 20 2f 2f 2f 20  uld be..    /// 
3a30: 73 6b 69 70 70 65 64 2e 20 20 49 66 20 74 68 69  skipped.  If thi
3a40: 73 20 69 73 20 73 65 74 20 74 6f 20 6e 6f 6e 2d  s is set to non-
3a50: 7a 65 72 6f 20 61 6e 64 20 74 68 65 20 6e 65 63  zero and the nec
3a60: 65 73 73 61 72 79 20 72 65 74 75 72 6e 20 76 61  essary return va
3a70: 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 73 20  lue..    /// is 
3a80: 75 6e 61 76 61 69 6c 61 62 6c 65 20 6f 72 20 75  unavailable or u
3a90: 6e 73 75 69 74 61 62 6c 65 2c 20 61 6e 20 65 78  nsuitable, an ex
3aa0: 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ception will be 
3ab0: 74 68 72 6f 77 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  thrown...    ///
3ac0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70   </param>..    p
3ad0: 72 69 76 61 74 65 20 76 6f 69 64 20 49 6e 76 6f  rivate void Invo
3ae0: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
3af0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 69 6e  ack(..        in
3b00: 74 20 69 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20  t index,..      
3b10: 20 20 53 51 4c 69 74 65 52 65 61 64 45 76 65 6e    SQLiteReadEven
3b20: 74 41 72 67 73 20 65 76 65 6e 74 41 72 67 73 2c  tArgs eventArgs,
3b30: 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20 62 6f  ..        out bo
3b40: 6f 6c 20 63 6f 6d 70 6c 65 74 65 0d 0a 20 20 20  ol complete..   
3b50: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
3b60: 20 20 20 20 20 20 20 63 6f 6d 70 6c 65 74 65 20         complete 
3b70: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
3b80: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
3b90: 6f 6e 46 6c 61 67 73 20 6f 6c 64 46 6c 61 67 73  onFlags oldFlags
3ba0: 20 3d 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20   = _flags;..    
3bb0: 20 20 20 20 5f 66 6c 61 67 73 20 26 3d 20 7e 53      _flags &= ~S
3bc0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
3bd0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
3be0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
3bf0: 61 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  acks;....       
3c00: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
3c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
3c20: 69 6e 67 20 74 79 70 65 4e 61 6d 65 20 3d 20 47  ing typeName = G
3c30: 65 74 44 61 74 61 54 79 70 65 4e 61 6d 65 28 69  etDataTypeName(i
3c40: 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
3c50: 20 20 20 20 20 20 69 66 20 28 74 79 70 65 4e 61        if (typeNa
3c60: 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
3c80: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
3c90: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
3ca0: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
3cb0: 3d 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  = GetConnection(
3cc0: 74 68 69 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  this);....      
3cd0: 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63        if (connec
3ce0: 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3d00: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
3d10: 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65        SQLiteType
3d20: 43 61 6c 6c 62 61 63 6b 73 20 63 61 6c 6c 62 61  Callbacks callba
3d30: 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  cks;....        
3d40: 20 20 20 20 69 66 20 28 21 63 6f 6e 6e 65 63 74      if (!connect
3d50: 69 6f 6e 2e 54 72 79 47 65 74 54 79 70 65 43 61  ion.TryGetTypeCa
3d60: 6c 6c 62 61 63 6b 73 28 74 79 70 65 4e 61 6d 65  llbacks(typeName
3d70: 2c 20 6f 75 74 20 63 61 6c 6c 62 61 63 6b 73 29  , out callbacks)
3d80: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
3d90: 20 20 20 20 20 28 63 61 6c 6c 62 61 63 6b 73 20       (callbacks 
3da0: 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
3db0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3dc0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3dd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3de0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3df0: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 43  SQLiteReadValueC
3e00: 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
3e10: 20 3d 20 63 61 6c 6c 62 61 63 6b 73 2e 52 65 61   = callbacks.Rea
3e20: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 3b 0d  dValueCallback;.
3e30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
3e40: 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
3e50: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3e60: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
3e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
3e80: 65 63 74 20 75 73 65 72 44 61 74 61 20 3d 20 63  ect userData = c
3e90: 61 6c 6c 62 61 63 6b 73 2e 52 65 61 64 56 61 6c  allbacks.ReadVal
3ea0: 75 65 55 73 65 72 44 61 74 61 3b 0d 0a 0d 0a 20  ueUserData;.... 
3eb0: 20 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62             callb
3ec0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
3ed0: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
3ee0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2c 20 74 68 69  tement._sql, thi
3ef0: 73 2c 20 6f 6c 64 46 6c 61 67 73 2c 20 65 76 65  s, oldFlags, eve
3f00: 6e 74 41 72 67 73 2c 20 74 79 70 65 4e 61 6d 65  ntArgs, typeName
3f10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3f20: 20 20 20 69 6e 64 65 78 2c 20 75 73 65 72 44 61     index, userDa
3f30: 74 61 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  ta, out complete
3f40: 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
3f50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3f60: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
3f70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3f80: 20 20 20 5f 66 6c 61 67 73 20 7c 3d 20 53 51 4c     _flags |= SQL
3f90: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
3fa0: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
3fb0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
3fc0: 6b 73 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ks;..        }..
3fd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
3fe0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3ff0: 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20  /// Attempts to 
4000: 71 75 65 72 79 20 74 68 65 20 69 6e 74 65 67 65  query the intege
4010: 72 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72  r identifier for
4020: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
4030: 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 2f 2f 2f  .  This..    ///
4040: 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 66   will not work f
4050: 6f 72 20 74 61 62 6c 65 73 20 74 68 61 74 20 77  or tables that w
4060: 65 72 65 20 63 72 65 61 74 65 64 20 57 49 54 48  ere created WITH
4070: 4f 55 54 20 52 4f 57 49 44 20 2d 4f 52 2d 20 69  OUT ROWID -OR- i
4080: 66 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 71  f the..    /// q
4090: 75 65 72 79 20 64 6f 65 73 20 6e 6f 74 20 69 6e  uery does not in
40a0: 63 6c 75 64 65 20 74 68 65 20 22 72 6f 77 69 64  clude the "rowid
40b0: 22 20 63 6f 6c 75 6d 6e 20 6f 72 20 6f 6e 65 20  " column or one 
40c0: 6f 66 20 69 74 73 20 61 6c 69 61 73 65 73 20 2d  of its aliases -
40d0: 4f 52 2d 0d 0a 20 20 20 20 2f 2f 2f 20 69 66 20  OR-..    /// if 
40e0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
40f0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 22  QLiteDataReader"
4100: 20 2f 3e 20 77 61 73 20 6e 6f 74 20 63 72 65 61   /> was not crea
4110: 74 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20  ted with the..  
4120: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
4130: 22 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72  "CommandBehavior
4140: 2e 4b 65 79 49 6e 66 6f 22 2f 3e 20 66 6c 61 67  .KeyInfo"/> flag
4150: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
4160: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
4170: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 0d  param name="i">.
4180: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64  .    /// The ind
4190: 65 78 20 6f 66 20 74 68 65 20 42 4c 4f 42 20 63  ex of the BLOB c
41a0: 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  olumn...    /// 
41b0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
41c0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
41d0: 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72   /// The integer
41e0: 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20   identifier for 
41f0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
4200: 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20  -OR- null if it 
4210: 63 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 2f  could not..    /
4220: 2f 2f 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64  // be determined
4230: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
4240: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
4250: 6e 61 6c 20 6c 6f 6e 67 3f 20 47 65 74 52 6f 77  nal long? GetRow
4260: 49 64 28 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  Id(..        int
4270: 20 69 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20   i..        ).. 
4280: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
4290: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
42a0: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
42b0: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
42c0: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
42d0: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
42e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
42f0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
4300: 20 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65   string database
4310: 4e 61 6d 65 20 3d 20 47 65 74 44 61 74 61 62 61  Name = GetDataba
4320: 73 65 4e 61 6d 65 28 69 29 3b 0d 0a 20 20 20 20  seName(i);..    
4330: 20 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c 65      string table
4340: 4e 61 6d 65 20 3d 20 47 65 74 54 61 62 6c 65 4e  Name = GetTableN
4350: 61 6d 65 28 69 29 3b 0d 0a 20 20 20 20 20 20 20  ame(i);..       
4360: 20 69 6e 74 20 69 52 6f 77 49 64 20 3d 20 5f 6b   int iRowId = _k
4370: 65 79 49 6e 66 6f 2e 47 65 74 52 6f 77 49 64 49  eyInfo.GetRowIdI
4380: 6e 64 65 78 28 64 61 74 61 62 61 73 65 4e 61 6d  ndex(databaseNam
4390: 65 2c 20 74 61 62 6c 65 4e 61 6d 65 29 3b 0d 0a  e, tableName);..
43a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 52  ..        if (iR
43b0: 6f 77 49 64 20 21 3d 20 2d 31 29 0d 0a 20 20 20  owId != -1)..   
43c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
43d0: 47 65 74 49 6e 74 36 34 28 69 52 6f 77 49 64 29  GetInt64(iRowId)
43e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
43f0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
4400: 52 6f 77 49 64 28 64 61 74 61 62 61 73 65 4e 61  RowId(databaseNa
4410: 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65 29 3b 0d  me, tableName);.
4420: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
4430: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
4440: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
4450: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 3c  he column as a <
4460: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
4470: 42 6c 6f 62 22 20 2f 3e 20 6f 62 6a 65 63 74 2e  Blob" /> object.
4480: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 77  ..    /// This w
4490: 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 72  ill not work for
44a0: 20 74 61 62 6c 65 73 20 74 68 61 74 20 77 65 72   tables that wer
44b0: 65 20 63 72 65 61 74 65 64 20 57 49 54 48 4f 55  e created WITHOU
44c0: 54 20 52 4f 57 49 44 0d 0a 20 20 20 20 2f 2f 2f  T ROWID..    ///
44d0: 20 2d 4f 52 2d 20 69 66 20 74 68 65 20 71 75 65   -OR- if the que
44e0: 72 79 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63 6c  ry does not incl
44f0: 75 64 65 20 74 68 65 20 22 72 6f 77 69 64 22 20  ude the "rowid" 
4500: 63 6f 6c 75 6d 6e 20 6f 72 20 6f 6e 65 0d 0a 20  column or one.. 
4510: 20 20 20 2f 2f 2f 20 6f 66 20 69 74 73 20 61 6c     /// of its al
4520: 69 61 73 65 73 20 2d 4f 52 2d 20 69 66 20 74 68  iases -OR- if th
4530: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
4540: 69 74 65 44 61 74 61 52 65 61 64 65 72 22 20 2f  iteDataReader" /
4550: 3e 20 77 61 73 0d 0a 20 20 20 20 2f 2f 2f 20 6e  > was..    /// n
4560: 6f 74 20 63 72 65 61 74 65 64 20 77 69 74 68 20  ot created with 
4570: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43  the <see cref="C
4580: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 4b  ommandBehavior.K
4590: 65 79 49 6e 66 6f 22 20 2f 3e 0d 0a 20 20 20 20  eyInfo" />..    
45a0: 2f 2f 2f 20 66 6c 61 67 2e 0d 0a 20 20 20 20 2f  /// flag...    /
45b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
45c0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
45d0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
45e0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
45f0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
4600: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65   <param name="re
4610: 61 64 4f 6e 6c 79 22 3e 0d 0a 20 20 20 20 2f 2f  adOnly">..    //
4620: 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6f 70  / Non-zero to op
4630: 65 6e 20 74 68 65 20 62 6c 6f 62 20 6f 62 6a 65  en the blob obje
4640: 63 74 20 66 6f 72 20 72 65 61 64 2d 6f 6e 6c 79  ct for read-only
4650: 20 61 63 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f   access...    //
4660: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
4670: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 6e  /// <returns>A n
4680: 65 77 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ew <see cref="SQ
4690: 4c 69 74 65 42 6c 6f 62 22 20 2f 3e 20 6f 62 6a  LiteBlob" /> obj
46a0: 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ect.</returns>..
46b0: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
46c0: 65 42 6c 6f 62 20 47 65 74 42 6c 6f 62 28 69 6e  eBlob GetBlob(in
46d0: 74 20 69 2c 20 62 6f 6f 6c 20 72 65 61 64 4f 6e  t i, bool readOn
46e0: 6c 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ly)..    {..    
46f0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
4700: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
4710: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
4720: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
4730: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
4740: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
4750: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
4760: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
4770: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
4780: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
4790: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
47a0: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
47b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
47c0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
47d0: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
47e0: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
47f0: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
4800: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
4810: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
4820: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
4830: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
4840: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
4850: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
4860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4870: 22 47 65 74 42 6c 6f 62 22 2c 20 6e 65 77 20 53  "GetBlob", new S
4880: 51 4c 69 74 65 52 65 61 64 42 6c 6f 62 45 76 65  QLiteReadBlobEve
4890: 6e 74 41 72 67 73 28 72 65 61 64 4f 6e 6c 79 29  ntArgs(readOnly)
48a0: 2c 20 76 61 6c 75 65 29 2c 0d 0a 20 20 20 20 20  , value),..     
48b0: 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 20 63             out c
48c0: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
48d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
48e0: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
48f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
4900: 53 51 4c 69 74 65 42 6c 6f 62 29 76 61 6c 75 65  SQLiteBlob)value
4910: 2e 42 6c 6f 62 56 61 6c 75 65 3b 0d 0a 20 20 20  .BlobValue;..   
4920: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4930: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
4940: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
4950: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
4960: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
4970: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
4980: 79 49 6e 66 6f 2e 47 65 74 42 6c 6f 62 28 69 20  yInfo.GetBlob(i 
4990: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
49a0: 46 69 65 6c 64 43 6f 75 6e 74 2c 20 72 65 61 64  FieldCount, read
49b0: 4f 6e 6c 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Only);....      
49c0: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42    return SQLiteB
49d0: 6c 6f 62 2e 43 72 65 61 74 65 28 74 68 69 73 2c  lob.Create(this,
49e0: 20 69 2c 20 72 65 61 64 4f 6e 6c 79 29 3b 0d 0a   i, readOnly);..
49f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
4a00: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
4a10: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
4a20: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 62 6f  e column as a bo
4a30: 6f 6c 65 61 6e 20 76 61 6c 75 65 0d 0a 20 20 20  olean value..   
4a40: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
4a50: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
4a60: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
4a70: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
4a80: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
4a90: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62 6f 6f 6c  // <returns>bool
4aa0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4ab0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
4ac0: 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65 61 6e 28  bool GetBoolean(
4ad0: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
4ae0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
4af0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
4b00: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
4b10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
4b20: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
4b30: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
4b40: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
4b50: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
4b60: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
4b70: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
4b80: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
4b90: 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20  Callbacks)..    
4ba0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4bb0: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
4bc0: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
4bd0: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
4be0: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
4bf0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
4c00: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
4c10: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
4c20: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
4c30: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
4c40: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
4c50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4c60: 20 20 20 22 47 65 74 42 6f 6f 6c 65 61 6e 22 2c     "GetBoolean",
4c70: 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f   null, value), o
4c80: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
4c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4ca0: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
4cb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4cc0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
4cd0: 61 6c 75 65 2e 42 6f 6f 6c 65 61 6e 56 61 6c 75  alue.BooleanValu
4ce0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d00: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
4d10: 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69  Exception("missi
4d20: 6e 67 20 62 6f 6f 6c 65 61 6e 20 72 65 74 75 72  ng boolean retur
4d30: 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20  n value");....  
4d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4d50: 74 75 72 6e 20 28 62 6f 6f 6c 29 76 61 6c 75 65  turn (bool)value
4d60: 2e 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 3b 0d 0a  .BooleanValue;..
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4d80: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4d90: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
4da0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
4db0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
4dc0: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
4dd0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
4de0: 6b 65 79 49 6e 66 6f 2e 47 65 74 42 6f 6f 6c 65  keyInfo.GetBoole
4df0: 61 6e 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  an(i - PrivateVi
4e00: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
4e10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ;....        Ver
4e20: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
4e30: 65 2e 42 6f 6f 6c 65 61 6e 29 3b 0d 0a 20 20 20  e.Boolean);..   
4e40: 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
4e50: 65 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28 47 65  ert.ToBoolean(Ge
4e60: 74 56 61 6c 75 65 28 69 29 2c 20 43 75 6c 74 75  tValue(i), Cultu
4e70: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
4e80: 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lture);..    }..
4e90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
4ea0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
4eb0: 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d  rieves the colum
4ec0: 6e 20 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79  n as a single by
4ed0: 74 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f  te value..    //
4ee0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
4ef0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4f00: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
4f10: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
4f20: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
4f30: 3c 72 65 74 75 72 6e 73 3e 62 79 74 65 3c 2f 72  <returns>byte</r
4f40: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
4f50: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 79 74  lic override byt
4f60: 65 20 47 65 74 42 79 74 65 28 69 6e 74 20 69 29  e GetByte(int i)
4f70: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4f80: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
4f90: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
4fa0: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
4fb0: 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
4fc0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
4fd0: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
4fe0: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
4ff0: 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51  Callbacks) == SQ
5000: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
5010: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
5020: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
5030: 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  cks)..        {.
5040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
5050: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
5060: 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53  ue value = new S
5070: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
5080: 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  alue();..       
5090: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65       bool comple
50a0: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
50b0: 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c     InvokeReadVal
50c0: 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65  ueCallback(i, ne
50d0: 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75  w SQLiteReadValu
50e0: 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  eEventArgs(..   
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
5100: 74 42 79 74 65 22 2c 20 6e 75 6c 6c 2c 20 76 61  tByte", null, va
5110: 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65  lue), out comple
5120: 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
5130: 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65      if (complete
5140: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5160: 20 20 69 66 20 28 76 61 6c 75 65 2e 42 79 74 65    if (value.Byte
5170: 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Value == null)..
5180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5190: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
51a0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d  LiteException("m
51b0: 69 73 73 69 6e 67 20 62 79 74 65 20 72 65 74 75  issing byte retu
51c0: 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  rn value");.... 
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
51e0: 65 74 75 72 6e 20 28 62 79 74 65 29 76 61 6c 75  eturn (byte)valu
51f0: 65 2e 42 79 74 65 56 61 6c 75 65 3b 0d 0a 20 20  e.ByteValue;..  
5200: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5210: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5220: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
5230: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
5240: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
5250: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
5260: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
5270: 79 49 6e 66 6f 2e 47 65 74 42 79 74 65 28 69 20  yInfo.GetByte(i 
5280: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
5290: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
52a0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79          VerifyTy
52b0: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42 79 74  pe(i, DbType.Byt
52c0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
52d0: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
52e0: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74  ment._sql.GetByt
52f0: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
5300: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
5310: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5320: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
5330: 72 69 65 76 65 73 20 61 20 63 6f 6c 75 6d 6e 20  rieves a column 
5340: 61 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20 62  as an array of b
5350: 79 74 65 73 20 28 62 6c 6f 62 29 0d 0a 20 20 20  ytes (blob)..   
5360: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
5380: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
5390: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
53a0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
53b0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
53c0: 66 69 65 6c 64 4f 66 66 73 65 74 22 3e 54 68 65  fieldOffset">The
53d0: 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65   zero-based inde
53e0: 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65  x of where to be
53f0: 67 69 6e 20 72 65 61 64 69 6e 67 20 74 68 65 20  gin reading the 
5400: 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  data</param>..  
5410: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5420: 65 3d 22 62 75 66 66 65 72 22 3e 54 68 65 20 62  e="buffer">The b
5430: 75 66 66 65 72 20 74 6f 20 77 72 69 74 65 20 74  uffer to write t
5440: 68 65 20 62 79 74 65 73 20 69 6e 74 6f 3c 2f 70  he bytes into</p
5450: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5460: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66  param name="buff
5470: 65 72 6f 66 66 73 65 74 22 3e 54 68 65 20 7a 65  eroffset">The ze
5480: 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f  ro-based index o
5490: 66 20 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e  f where to begin
54a0: 20 77 72 69 74 69 6e 67 20 69 6e 74 6f 20 74 68   writing into th
54b0: 65 20 61 72 72 61 79 3c 2f 70 61 72 61 6d 3e 0d  e array</param>.
54c0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
54d0: 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 54 68  name="length">Th
54e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
54f0: 73 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  s to retrieve</p
5500: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5510: 72 65 74 75 72 6e 73 3e 54 68 65 20 61 63 74 75  returns>The actu
5520: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
5530: 65 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  es written into 
5540: 74 68 65 20 61 72 72 61 79 3c 2f 72 65 74 75 72  the array</retur
5550: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ns>..    /// <re
5560: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
5570: 54 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  To determine the
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
5590: 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20   in the column, 
55a0: 70 61 73 73 20 61 20 6e 75 6c 6c 20 76 61 6c 75  pass a null valu
55b0: 65 20 66 6f 72 20 74 68 65 20 62 75 66 66 65 72  e for the buffer
55c0: 2e 20 20 54 68 65 20 74 6f 74 61 6c 20 6c 65 6e  .  The total len
55d0: 67 74 68 20 77 69 6c 6c 20 62 65 20 72 65 74 75  gth will be retu
55e0: 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  rned...    /// <
55f0: 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 70  /remarks>..    p
5600: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6c  ublic override l
5610: 6f 6e 67 20 47 65 74 42 79 74 65 73 28 69 6e 74  ong GetBytes(int
5620: 20 69 2c 20 6c 6f 6e 67 20 66 69 65 6c 64 4f 66   i, long fieldOf
5630: 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 75 66  fset, byte[] buf
5640: 66 65 72 2c 20 69 6e 74 20 62 75 66 66 65 72 6f  fer, int buffero
5650: 66 66 73 65 74 2c 20 69 6e 74 20 6c 65 6e 67 74  ffset, int lengt
5660: 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  h)..    {..     
5670: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
5680: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
5690: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
56a0: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
56b0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
56c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
56d0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
56e0: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
56f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5700: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
5710: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
5720: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
5730: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
5740: 51 4c 69 74 65 52 65 61 64 41 72 72 61 79 45 76  QLiteReadArrayEv
5750: 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41 72 67  entArgs eventArg
5760: 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 52 65  s = new SQLiteRe
5770: 61 64 41 72 72 61 79 45 76 65 6e 74 41 72 67 73  adArrayEventArgs
5780: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5790: 20 20 20 66 69 65 6c 64 4f 66 66 73 65 74 2c 20     fieldOffset, 
57a0: 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66  buffer, bufferof
57b0: 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  fset, length);..
57c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
57d0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
57e0: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
57f0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
5800: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
5810: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
5820: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
5830: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
5840: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
5850: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
5860: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
5870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
5880: 65 74 42 79 74 65 73 22 2c 20 65 76 65 6e 74 41  etBytes", eventA
5890: 72 67 73 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74  rgs, value), out
58a0: 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20   complete);.... 
58b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
58c0: 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20  omplete)..      
58d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
58e0: 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
58f0: 62 79 74 65 73 20 3d 20 76 61 6c 75 65 2e 42 79  bytes = value.By
5900: 74 65 73 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  tesValue;....   
5910: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
5920: 28 62 79 74 65 73 20 21 3d 20 6e 75 6c 6c 29 0d  (bytes != null).
5930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5940: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
5950: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
5960: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
5970: 20 20 20 20 20 20 20 20 41 72 72 61 79 2e 43 6f          Array.Co
5980: 70 79 28 62 79 74 65 73 2c 20 2f 2a 20 74 68 72  py(bytes, /* thr
5990: 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
59b0: 76 65 6e 74 41 72 67 73 2e 44 61 74 61 4f 66 66  ventArgs.DataOff
59c0: 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 42  set, eventArgs.B
59d0: 79 74 65 42 75 66 66 65 72 2c 0d 0a 20 20 20 20  yteBuffer,..    
59e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59f0: 20 20 20 20 65 76 65 6e 74 41 72 67 73 2e 42 75      eventArgs.Bu
5a00: 66 66 65 72 4f 66 66 73 65 74 2c 20 65 76 65 6e  fferOffset, even
5a10: 74 41 72 67 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  tArgs.Length);..
5a20: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
5a30: 20 20 20 20 20 20 20 20 20 20 20 41 72 72 61 79             Array
5a40: 2e 43 6f 70 79 28 62 79 74 65 73 2c 20 2f 2a 20  .Copy(bytes, /* 
5a50: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a70: 20 20 28 69 6e 74 29 65 76 65 6e 74 41 72 67 73    (int)eventArgs
5a80: 2e 44 61 74 61 4f 66 66 73 65 74 2c 20 65 76 65  .DataOffset, eve
5a90: 6e 74 41 72 67 73 2e 42 79 74 65 42 75 66 66 65  ntArgs.ByteBuffe
5aa0: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 65 76 65 6e              even
5ac0: 74 41 72 67 73 2e 42 75 66 66 65 72 4f 66 66 73  tArgs.BufferOffs
5ad0: 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 4c 65  et, eventArgs.Le
5ae0: 6e 67 74 68 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ngth);..#endif..
5af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 65 76 65        return eve
5b10: 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a  ntArgs.Length;..
5b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b30: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
5b40: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
5b50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b70: 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20  return -1;..    
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5b90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5ba0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5bb0: 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76     if (i >= Priv
5bc0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
5bd0: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
5be0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
5bf0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
5c00: 65 79 49 6e 66 6f 2e 47 65 74 42 79 74 65 73 28  eyInfo.GetBytes(
5c10: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
5c20: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20 66 69  leFieldCount, fi
5c30: 65 6c 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65  eldOffset, buffe
5c40: 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c  r, bufferoffset,
5c50: 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20   length);....   
5c60: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
5c70: 69 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79  i, DbType.Binary
5c80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
5c90: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
5ca0: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65  ent._sql.GetByte
5cb0: 73 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  s(_activeStateme
5cc0: 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69 65 6c  nt, i, (int)fiel
5cd0: 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c  dOffset, buffer,
5ce0: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c   bufferoffset, l
5cf0: 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ength);..    }..
5d00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5d10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
5d20: 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  urns the column 
5d30: 61 73 20 61 20 73 69 6e 67 6c 65 20 63 68 61 72  as a single char
5d40: 61 63 74 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c  acter..    /// <
5d50: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
5d60: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5d70: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
5d80: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
5d90: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
5da0: 74 75 72 6e 73 3e 63 68 61 72 3c 2f 72 65 74 75  turns>char</retu
5db0: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
5dc0: 20 6f 76 65 72 72 69 64 65 20 63 68 61 72 20 47   override char G
5dd0: 65 74 43 68 61 72 28 69 6e 74 20 69 29 0d 0a 20  etChar(int i).. 
5de0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
5df0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
5e00: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
5e10: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
5e20: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
5e30: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5e40: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
5e50: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
5e60: 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74  lbacks) == SQLit
5e70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5e80: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
5e90: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
5ea0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
5eb0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
5ec0: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
5ed0: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
5ee0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
5ef0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
5f00: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
5f10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5f20: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
5f30: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
5f40: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
5f50: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
5f60: 20 20 20 20 20 20 20 20 20 20 22 47 65 74 43 68            "GetCh
5f70: 61 72 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65  ar", null, value
5f80: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
5f90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5fa0: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
5fb0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5fd0: 66 20 28 76 61 6c 75 65 2e 43 68 61 72 56 61 6c  f (value.CharVal
5fe0: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6000: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
6010: 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73  eException("miss
6020: 69 6e 67 20 63 68 61 72 61 63 74 65 72 20 72 65  ing character re
6030: 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d  turn value");...
6040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6050: 20 72 65 74 75 72 6e 20 28 63 68 61 72 29 76 61   return (char)va
6060: 6c 75 65 2e 43 68 61 72 56 61 6c 75 65 3b 0d 0a  lue.CharValue;..
6070: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6080: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6090: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
60a0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
60b0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
60c0: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
60d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
60e0: 6b 65 79 49 6e 66 6f 2e 47 65 74 43 68 61 72 28  keyInfo.GetChar(
60f0: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
6100: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
6110: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
6120: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53  Type(i, DbType.S
6130: 42 79 74 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Byte);..        
6140: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
6150: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
6160: 43 68 61 72 28 5f 61 63 74 69 76 65 53 74 61 74  Char(_activeStat
6170: 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20  ement, i);..    
6180: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
6190: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
61a0: 52 65 74 72 69 65 76 65 73 20 61 20 63 6f 6c 75  Retrieves a colu
61b0: 6d 6e 20 61 73 20 61 6e 20 61 72 72 61 79 20 6f  mn as an array o
61c0: 66 20 63 68 61 72 73 20 28 62 6c 6f 62 29 0d 0a  f chars (blob)..
61d0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
61e0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
61f0: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
6200: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
6210: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
6220: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
6230: 65 3d 22 66 69 65 6c 64 6f 66 66 73 65 74 22 3e  e="fieldoffset">
6240: 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69  The zero-based i
6250: 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f  ndex of where to
6260: 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67 20 74   begin reading t
6270: 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0d  he data</param>.
6280: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
6290: 6e 61 6d 65 3d 22 62 75 66 66 65 72 22 3e 54 68  name="buffer">Th
62a0: 65 20 62 75 66 66 65 72 20 74 6f 20 77 72 69 74  e buffer to writ
62b0: 65 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73  e the characters
62c0: 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e 0d 0a 20   into</param>.. 
62d0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
62e0: 6d 65 3d 22 62 75 66 66 65 72 6f 66 66 73 65 74  me="bufferoffset
62f0: 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  ">The zero-based
6300: 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20   index of where 
6310: 74 6f 20 62 65 67 69 6e 20 77 72 69 74 69 6e 67  to begin writing
6320: 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c   into the array<
6330: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
6340: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65   <param name="le
6350: 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d 62 65 72  ngth">The number
6360: 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72 65 74   of bytes to ret
6370: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rieve</param>.. 
6380: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
6390: 54 68 65 20 61 63 74 75 61 6c 20 6e 75 6d 62 65  The actual numbe
63a0: 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
63b0: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 74 68 65  written into the
63c0: 20 61 72 72 61 79 3c 2f 72 65 74 75 72 6e 73 3e   array</returns>
63d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72  ..    /// <remar
63e0: 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 6f 20  ks>..    /// To 
63f0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
6400: 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
6410: 72 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  rs in the column
6420: 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c 20 76 61  , pass a null va
6430: 6c 75 65 20 66 6f 72 20 74 68 65 20 62 75 66 66  lue for the buff
6440: 65 72 2e 20 20 54 68 65 20 74 6f 74 61 6c 20 6c  er.  The total l
6450: 65 6e 67 74 68 20 77 69 6c 6c 20 62 65 20 72 65  ength will be re
6460: 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  turned...    ///
6470: 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20   </remarks>..   
6480: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
6490: 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 69   long GetChars(i
64a0: 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65 6c 64  nt i, long field
64b0: 6f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62  offset, char[] b
64c0: 75 66 66 65 72 2c 20 69 6e 74 20 62 75 66 66 65  uffer, int buffe
64d0: 72 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c 65 6e  roffset, int len
64e0: 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
64f0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6500: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
6510: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
6520: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
6530: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
6540: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
6550: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
6560: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
6570: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
6580: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
6590: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
65a0: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
65b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
65c0: 20 53 51 4c 69 74 65 52 65 61 64 41 72 72 61 79   SQLiteReadArray
65d0: 45 76 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41  EventArgs eventA
65e0: 72 67 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  rgs = new SQLite
65f0: 52 65 61 64 41 72 72 61 79 45 76 65 6e 74 41 72  ReadArrayEventAr
6600: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
6610: 20 20 20 20 20 66 69 65 6c 64 6f 66 66 73 65 74       fieldoffset
6620: 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72  , buffer, buffer
6630: 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b  offset, length);
6640: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6650: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
6660: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
6670: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
6680: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
6690: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
66a0: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
66b0: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
66c0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
66d0: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
66e0: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6700: 22 47 65 74 43 68 61 72 73 22 2c 20 65 76 65 6e  "GetChars", even
6710: 74 41 72 67 73 2c 20 76 61 6c 75 65 29 2c 20 6f  tArgs, value), o
6720: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
6730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
6740: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
6750: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6760: 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 5b             char[
6770: 5d 20 63 68 61 72 73 20 3d 20 76 61 6c 75 65 2e  ] chars = value.
6780: 43 68 61 72 73 56 61 6c 75 65 3b 0d 0a 0d 0a 20  CharsValue;.... 
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
67a0: 66 20 28 63 68 61 72 73 20 21 3d 20 6e 75 6c 6c  f (chars != null
67b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
67c0: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
67d0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
67e0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
67f0: 20 20 20 20 20 20 20 20 20 20 41 72 72 61 79 2e            Array.
6800: 43 6f 70 79 28 63 68 61 72 73 2c 20 2f 2a 20 74  Copy(chars, /* t
6810: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6830: 20 65 76 65 6e 74 41 72 67 73 2e 44 61 74 61 4f   eventArgs.DataO
6840: 66 66 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73  ffset, eventArgs
6850: 2e 43 68 61 72 42 75 66 66 65 72 2c 0d 0a 20 20  .CharBuffer,..  
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6870: 20 20 20 20 20 20 65 76 65 6e 74 41 72 67 73 2e        eventArgs.
6880: 42 75 66 66 65 72 4f 66 66 73 65 74 2c 20 65 76  BufferOffset, ev
6890: 65 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 29 3b  entArgs.Length);
68a0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 72 72               Arr
68c0: 61 79 2e 43 6f 70 79 28 63 68 61 72 73 2c 20 2f  ay.Copy(chars, /
68d0: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
68e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68f0: 20 20 20 20 28 69 6e 74 29 65 76 65 6e 74 41 72      (int)eventAr
6900: 67 73 2e 44 61 74 61 4f 66 66 73 65 74 2c 20 65  gs.DataOffset, e
6910: 76 65 6e 74 41 72 67 73 2e 43 68 61 72 42 75 66  ventArgs.CharBuf
6920: 66 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fer,..          
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76                ev
6940: 65 6e 74 41 72 67 73 2e 42 75 66 66 65 72 4f 66  entArgs.BufferOf
6950: 66 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e  fset, eventArgs.
6960: 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6e 64 69 66  Length);..#endif
6970: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6980: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 65          return e
6990: 76 65 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 3b  ventArgs.Length;
69a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
69b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
69c0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
69d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
69e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69f0: 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20    return -1;..  
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6a20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6a30: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
6a40: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
6a50: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
6a60: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
6a70: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6a80: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 43 68 61 72  _keyInfo.GetChar
6a90: 73 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  s(i - PrivateVis
6aa0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20  ibleFieldCount, 
6ab0: 66 69 65 6c 64 6f 66 66 73 65 74 2c 20 62 75 66  fieldoffset, buf
6ac0: 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65  fer, bufferoffse
6ad0: 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20  t, length);.... 
6ae0: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
6af0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
6b00: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72  ctionFlags.NoVer
6b10: 69 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29  ifyTextAffinity)
6b20: 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   != SQLiteConnec
6b30: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69  tionFlags.NoVeri
6b40: 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29 0d  fyTextAffinity).
6b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
6b60: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
6b70: 65 2e 53 74 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20  e.String);....  
6b80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
6b90: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
6ba0: 71 6c 2e 47 65 74 43 68 61 72 73 28 5f 61 63 74  ql.GetChars(_act
6bb0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c  iveStatement, i,
6bc0: 20 28 69 6e 74 29 66 69 65 6c 64 6f 66 66 73 65   (int)fieldoffse
6bd0: 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65  t, buffer, buffe
6be0: 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29  roffset, length)
6bf0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6c00: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6c10: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
6c20: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
6c30: 20 62 61 63 6b 2d 65 6e 64 20 64 61 74 61 74 79   back-end dataty
6c40: 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  pe of the column
6c50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6c60: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
6c70: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
6c80: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
6c90: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
6ca0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
6cb0: 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73  >string</returns
6cc0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
6cd0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
6ce0: 74 44 61 74 61 54 79 70 65 4e 61 6d 65 28 69 6e  tDataTypeName(in
6cf0: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
6d00: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6d10: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6d20: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
6d30: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
6d40: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
6d50: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6d60: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
6d70: 49 6e 66 6f 2e 47 65 74 44 61 74 61 54 79 70 65  Info.GetDataType
6d80: 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65  Name(i - Private
6d90: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
6da0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54  t);....        T
6db0: 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66 69  ypeAffinity affi
6dc0: 6e 20 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79  n = TypeAffinity
6dd0: 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3b 0d  .Uninitialized;.
6de0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6df0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
6e00: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65  ._sql.ColumnType
6e10: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
6e20: 74 2c 20 69 2c 20 72 65 66 20 61 66 66 69 6e 29  t, i, ref affin)
6e30: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6e40: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6e50: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 20     /// Retrieve 
6e60: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
6e70: 64 61 74 65 2f 74 69 6d 65 20 76 61 6c 75 65 0d  date/time value.
6e80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
6e90: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
6ea0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
6eb0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
6ec0: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
6ed0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
6ee0: 44 61 74 65 54 69 6d 65 3c 2f 72 65 74 75 72 6e  DateTime</return
6ef0: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
6f00: 76 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65  verride DateTime
6f10: 20 47 65 74 44 61 74 65 54 69 6d 65 28 69 6e 74   GetDateTime(int
6f20: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
6f30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6f40: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
6f50: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
6f60: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
6f70: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
6f80: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
6f90: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
6fa0: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
6fb0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6fc0: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
6fd0: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
6fe0: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
6ff0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7000: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
7010: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
7020: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
7030: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
7040: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
7050: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
7060: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
7070: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
7080: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
7090: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70b0: 22 47 65 74 44 61 74 65 54 69 6d 65 22 2c 20 6e  "GetDateTime", n
70c0: 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74  ull, value), out
70d0: 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20   complete);.... 
70e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
70f0: 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20  omplete)..      
7100: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7110: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
7120: 75 65 2e 44 61 74 65 54 69 6d 65 56 61 6c 75 65  ue.DateTimeValue
7130: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
7140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
7150: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7160: 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e  xception("missin
7170: 67 20 64 61 74 65 2f 74 69 6d 65 20 72 65 74 75  g date/time retu
7180: 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  rn value");.... 
7190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
71a0: 65 74 75 72 6e 20 28 44 61 74 65 54 69 6d 65 29  eturn (DateTime)
71b0: 76 61 6c 75 65 2e 44 61 74 65 54 69 6d 65 56 61  value.DateTimeVa
71c0: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
71d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
71e0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
71f0: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
7200: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
7210: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
7220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
7230: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
7240: 74 44 61 74 65 54 69 6d 65 28 69 20 2d 20 50 72  tDateTime(i - Pr
7250: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
7260: 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
7270: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
7280: 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d  , DbType.DateTim
7290: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
72a0: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
72b0: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 61 74  ment._sql.GetDat
72c0: 65 54 69 6d 65 28 5f 61 63 74 69 76 65 53 74 61  eTime(_activeSta
72d0: 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20  tement, i);..   
72e0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
72f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7300: 20 52 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   Retrieve the co
7310: 6c 75 6d 6e 20 61 73 20 61 20 64 65 63 69 6d 61  lumn as a decima
7320: 6c 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f  l value..    ///
7330: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
7340: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
7350: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
7360: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
7370: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
7380: 72 65 74 75 72 6e 73 3e 64 65 63 69 6d 61 6c 3c  returns>decimal<
7390: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
73a0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64  ublic override d
73b0: 65 63 69 6d 61 6c 20 47 65 74 44 65 63 69 6d 61  ecimal GetDecima
73c0: 6c 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  l(int i)..    {.
73d0: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
73e0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
73f0: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
7400: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
7410: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
7420: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7430: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
7440: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
7450: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
7460: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
7470: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
7480: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
7490: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
74a0: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
74b0: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
74c0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
74d0: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
74e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
74f0: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
7500: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
7510: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
7520: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
7530: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
7540: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
7550: 20 20 20 20 20 22 47 65 74 44 65 63 69 6d 61 6c       "GetDecimal
7560: 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c  ", null, value),
7570: 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d   out complete);.
7580: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
7590: 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20  f (complete)..  
75a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
75b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
75c0: 28 76 61 6c 75 65 2e 44 65 63 69 6d 61 6c 56 61  (value.DecimalVa
75d0: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75f0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
7600: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73  teException("mis
7610: 73 69 6e 67 20 64 65 63 69 6d 61 6c 20 72 65 74  sing decimal ret
7620: 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a  urn value");....
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7640: 72 65 74 75 72 6e 20 28 64 65 63 69 6d 61 6c 29  return (decimal)
7650: 76 61 6c 75 65 2e 44 65 63 69 6d 61 6c 56 61 6c  value.DecimalVal
7660: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
7670: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
7680: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
7690: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
76a0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
76b0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
76c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
76d0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
76e0: 44 65 63 69 6d 61 6c 28 69 20 2d 20 50 72 69 76  Decimal(i - Priv
76f0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
7700: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
7710: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
7720: 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 3b  DbType.Decimal);
7730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 43 75 6c 74  ....        Cult
7740: 75 72 65 49 6e 66 6f 20 63 75 6c 74 75 72 65 49  ureInfo cultureI
7750: 6e 66 6f 20 3d 20 43 75 6c 74 75 72 65 49 6e 66  nfo = CultureInf
7760: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
7770: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
7780: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
7790: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
77a0: 2e 47 65 74 49 6e 76 61 72 69 61 6e 74 44 65 63  .GetInvariantDec
77b0: 69 6d 61 6c 29 20 3d 3d 20 53 51 4c 69 74 65 43  imal) == SQLiteC
77c0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47  onnectionFlags.G
77d0: 65 74 49 6e 76 61 72 69 61 6e 74 44 65 63 69 6d  etInvariantDecim
77e0: 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  al)..           
77f0: 20 63 75 6c 74 75 72 65 49 6e 66 6f 20 3d 20 43   cultureInfo = C
7800: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
7810: 69 61 6e 74 43 75 6c 74 75 72 65 3b 0d 0a 0d 0a  iantCulture;....
7820: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
7830: 65 63 69 6d 61 6c 2e 50 61 72 73 65 28 5f 61 63  ecimal.Parse(_ac
7840: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
7850: 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69  ql.GetText(_acti
7860: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 2c  veStatement, i),
7870: 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c   NumberStyles.Al
7880: 6c 6f 77 44 65 63 69 6d 61 6c 50 6f 69 6e 74 20  lowDecimalPoint 
7890: 7c 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41  | NumberStyles.A
78a0: 6c 6c 6f 77 45 78 70 6f 6e 65 6e 74 20 7c 20 4e  llowExponent | N
78b0: 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f  umberStyles.Allo
78c0: 77 4c 65 61 64 69 6e 67 53 69 67 6e 2c 20 63 75  wLeadingSign, cu
78d0: 6c 74 75 72 65 49 6e 66 6f 29 3b 0d 0a 20 20 20  ltureInfo);..   
78e0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
78f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7900: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
7910: 75 6d 6e 20 61 73 20 61 20 64 6f 75 62 6c 65 0d  umn as a double.
7920: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
7930: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
7940: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
7950: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
7960: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
7970: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
7980: 64 6f 75 62 6c 65 3c 2f 72 65 74 75 72 6e 73 3e  double</returns>
7990: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
79a0: 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74  rride double Get
79b0: 44 6f 75 62 6c 65 28 69 6e 74 20 69 29 0d 0a 20  Double(int i).. 
79c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
79d0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
79e0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
79f0: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
7a00: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
7a10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7a20: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
7a30: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
7a40: 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74  lbacks) == SQLit
7a50: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7a60: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
7a70: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
7a80: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7a90: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
7aa0: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
7ab0: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
7ac0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
7ad0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
7ae0: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
7af0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7b00: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
7b10: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
7b20: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
7b30: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
7b40: 20 20 20 20 20 20 20 20 20 20 22 47 65 74 44 6f            "GetDo
7b50: 75 62 6c 65 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c  uble", null, val
7b60: 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74  ue), out complet
7b70: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
7b80: 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29     if (complete)
7b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
7ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7bb0: 20 69 66 20 28 76 61 6c 75 65 2e 44 6f 75 62 6c   if (value.Doubl
7bc0: 65 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  eValue == null).
7bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7be0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
7bf0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
7c00: 6d 69 73 73 69 6e 67 20 64 6f 75 62 6c 65 20 72  missing double r
7c10: 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a  eturn value");..
7c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7c30: 20 20 72 65 74 75 72 6e 20 28 64 6f 75 62 6c 65    return (double
7c40: 29 76 61 6c 75 65 2e 44 6f 75 62 6c 65 56 61 6c  )value.DoubleVal
7c50: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
7c60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
7c70: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
7c80: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
7c90: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
7ca0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
7cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7cc0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
7cd0: 44 6f 75 62 6c 65 28 69 20 2d 20 50 72 69 76 61  Double(i - Priva
7ce0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
7cf0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
7d00: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
7d10: 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b 0d 0a  bType.Double);..
7d20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
7d30: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
7d40: 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f  _sql.GetDouble(_
7d50: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
7d60: 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   i);..    }.... 
7d70: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
7d80: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
7d90: 73 20 74 68 65 20 2e 4e 45 54 20 74 79 70 65 20  s the .NET type 
7da0: 6f 66 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d  of a given colum
7db0: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  n..    /// </sum
7dc0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
7dd0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
7de0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
7df0: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
7e00: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
7e10: 73 3e 54 79 70 65 3c 2f 72 65 74 75 72 6e 73 3e  s>Type</returns>
7e20: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
7e30: 72 72 69 64 65 20 54 79 70 65 20 47 65 74 46 69  rride Type GetFi
7e40: 65 6c 64 54 79 70 65 28 69 6e 74 20 69 29 0d 0a  eldType(int i)..
7e50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
7e60: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
7e70: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
7e80: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
7e90: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
7ea0: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
7eb0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
7ec0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
7ed0: 65 74 46 69 65 6c 64 54 79 70 65 28 69 20 2d 20  etFieldType(i - 
7ee0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
7ef0: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
7f00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7f10: 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74  iteConvert.SQLit
7f20: 65 54 79 70 65 54 6f 54 79 70 65 28 47 65 74 53  eTypeToType(GetS
7f30: 51 4c 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73  QLiteType(_flags
7f40: 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  , i));..    }...
7f50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
7f60: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
7f70: 72 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20  rns a column as 
7f80: 61 20 66 6c 6f 61 74 20 76 61 6c 75 65 0d 0a 20  a float value.. 
7f90: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7fa0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
7fb0: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
7fc0: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
7fd0: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
7fe0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 66 6c   /// <returns>fl
7ff0: 6f 61 74 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  oat</returns>.. 
8000: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
8010: 64 65 20 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61  de float GetFloa
8020: 74 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  t(int i)..    {.
8030: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
8040: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
8050: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
8060: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
8070: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
8080: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8090: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
80a0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
80b0: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
80c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
80d0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
80e0: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
80f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8100: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
8110: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
8120: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
8130: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
8140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
8150: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
8160: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
8170: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
8180: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
8190: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
81a0: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
81b0: 20 20 20 20 20 22 47 65 74 46 6c 6f 61 74 22 2c       "GetFloat",
81c0: 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f   null, value), o
81d0: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
81e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
81f0: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
8200: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8210: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
8220: 61 6c 75 65 2e 46 6c 6f 61 74 56 61 6c 75 65 20  alue.FloatValue 
8230: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
8250: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8260: 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67  ception("missing
8270: 20 66 6c 6f 61 74 20 72 65 74 75 72 6e 20 76 61   float return va
8280: 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lue");....      
8290: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
82a0: 20 28 66 6c 6f 61 74 29 76 61 6c 75 65 2e 46 6c   (float)value.Fl
82b0: 6f 61 74 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  oatValue;..     
82c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
82d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
82e0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
82f0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
8300: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
8310: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8320: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
8330: 66 6f 2e 47 65 74 46 6c 6f 61 74 28 69 20 2d 20  fo.GetFloat(i - 
8340: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
8350: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
8360: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
8370: 28 69 2c 20 44 62 54 79 70 65 2e 53 69 6e 67 6c  (i, DbType.Singl
8380: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
8390: 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 53 69  urn Convert.ToSi
83a0: 6e 67 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74  ngle(_activeStat
83b0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f  ement._sql.GetDo
83c0: 75 62 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74  uble(_activeStat
83d0: 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20  ement, i));..   
83e0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
83f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
8400: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
8410: 75 6d 6e 20 61 73 20 61 20 47 75 69 64 0d 0a 20  umn as a Guid.. 
8420: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8430: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
8440: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
8450: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
8460: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
8470: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 47 75   /// <returns>Gu
8480: 69 64 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  id</returns>..  
8490: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
84a0: 65 20 47 75 69 64 20 47 65 74 47 75 69 64 28 69  e Guid GetGuid(i
84b0: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
84c0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
84d0: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
84e0: 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d  VerifyForGet();.
84f0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
8500: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
8510: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
8520: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
8530: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20  ValueCallbacks) 
8540: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8550: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
8560: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
8570: 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20  allbacks)..     
8580: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8590: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
85a0: 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20  erValue value = 
85b0: 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65  new SQLiteDataRe
85c0: 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20  aderValue();..  
85d0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
85e0: 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20  omplete;....    
85f0: 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65          InvokeRe
8600: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28  adValueCallback(
8610: 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61  i, new SQLiteRea
8620: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28  dValueEventArgs(
8630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8640: 20 20 22 47 65 74 47 75 69 64 22 2c 20 6e 75 6c    "GetGuid", nul
8650: 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63  l, value), out c
8660: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
8670: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
8680: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
8690: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
86a0: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
86b0: 2e 47 75 69 64 56 61 6c 75 65 20 3d 3d 20 6e 75  .GuidValue == nu
86c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
86d0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
86e0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
86f0: 6f 6e 28 22 6d 69 73 73 69 6e 67 20 67 75 69 64  on("missing guid
8700: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b   return value");
8710: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8720: 20 20 20 20 72 65 74 75 72 6e 20 28 47 75 69 64      return (Guid
8730: 29 76 61 6c 75 65 2e 47 75 69 64 56 61 6c 75 65  )value.GuidValue
8740: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8750: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
8760: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
8770: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
8780: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
8790: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
87a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
87b0: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 47 75  n _keyInfo.GetGu
87c0: 69 64 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  id(i - PrivateVi
87d0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
87e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70  ;....        Typ
87f0: 65 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e 69  eAffinity affini
8800: 74 79 20 3d 20 56 65 72 69 66 79 54 79 70 65 28  ty = VerifyType(
8810: 69 2c 20 44 62 54 79 70 65 2e 47 75 69 64 29 3b  i, DbType.Guid);
8820: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 66  ..        if (af
8830: 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66  finity == TypeAf
8840: 66 69 6e 69 74 79 2e 42 6c 6f 62 29 0d 0a 20 20  finity.Blob)..  
8850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8860: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 75 66 66       byte[] buff
8870: 65 72 20 3d 20 6e 65 77 20 62 79 74 65 5b 31 36  er = new byte[16
8880: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
8890: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
88a0: 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65 73 28 5f  ._sql.GetBytes(_
88b0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
88c0: 20 69 2c 20 30 2c 20 62 75 66 66 65 72 2c 20 30   i, 0, buffer, 0
88d0: 2c 20 31 36 29 3b 0d 0a 20 20 20 20 20 20 20 20  , 16);..        
88e0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47      return new G
88f0: 75 69 64 28 62 75 66 66 65 72 29 3b 0d 0a 20 20  uid(buffer);..  
8900: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8910: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
8920: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
8930: 69 64 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  id(_activeStatem
8940: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74  ent._sql.GetText
8950: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
8960: 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  t, i));..    }..
8970: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
8980: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
8990: 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  urns the column 
89a0: 61 73 20 61 20 73 68 6f 72 74 0d 0a 20 20 20 20  as a short..    
89b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
89c0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
89d0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
89e0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
89f0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
8a00: 2f 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74 31 36  / <returns>Int16
8a10: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
8a20: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
8a30: 49 6e 74 31 36 20 47 65 74 49 6e 74 31 36 28 69  Int16 GetInt16(i
8a40: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
8a50: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
8a60: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
8a70: 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d  VerifyForGet();.
8a80: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
8a90: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
8aa0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
8ab0: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
8ac0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20  ValueCallbacks) 
8ad0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8ae0: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
8af0: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
8b00: 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20  allbacks)..     
8b10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8b20: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
8b30: 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20  erValue value = 
8b40: 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65  new SQLiteDataRe
8b50: 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20  aderValue();..  
8b60: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
8b70: 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20  omplete;....    
8b80: 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65          InvokeRe
8b90: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28  adValueCallback(
8ba0: 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61  i, new SQLiteRea
8bb0: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28  dValueEventArgs(
8bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8bd0: 20 20 22 47 65 74 49 6e 74 31 36 22 2c 20 6e 75    "GetInt16", nu
8be0: 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20  ll, value), out 
8bf0: 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20  complete);....  
8c00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
8c10: 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20  mplete)..       
8c20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8c30: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
8c40: 65 2e 49 6e 74 31 36 56 61 6c 75 65 20 3d 3d 20  e.Int16Value == 
8c50: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8c60: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
8c70: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8c80: 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e  tion("missing in
8c90: 74 31 36 20 72 65 74 75 72 6e 20 76 61 6c 75 65  t16 return value
8ca0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
8cb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49         return (I
8cc0: 6e 74 31 36 29 76 61 6c 75 65 2e 49 6e 74 31 36  nt16)value.Int16
8cd0: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
8ce0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
8cf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
8d00: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
8d10: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
8d20: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
8d30: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8d40: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
8d50: 47 65 74 49 6e 74 31 36 28 69 20 2d 20 50 72 69  GetInt16(i - Pri
8d60: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
8d70: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
8d80: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
8d90: 20 44 62 54 79 70 65 2e 49 6e 74 31 36 29 3b 0d   DbType.Int16);.
8da0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8db0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
8dc0: 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 31 36 28 5f  ._sql.GetInt16(_
8dd0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
8de0: 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   i);..    }.... 
8df0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
8e00: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  ..    /// Retrie
8e10: 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  ves the column a
8e20: 73 20 61 6e 20 69 6e 74 0d 0a 20 20 20 20 2f 2f  s an int..    //
8e30: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
8e40: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
8e50: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
8e60: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
8e70: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
8e80: 3c 72 65 74 75 72 6e 73 3e 49 6e 74 33 32 3c 2f  <returns>Int32</
8e90: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
8ea0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e  blic override In
8eb0: 74 33 32 20 47 65 74 49 6e 74 33 32 28 69 6e 74  t32 GetInt32(int
8ec0: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
8ed0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
8ee0: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
8ef0: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
8f00: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
8f10: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
8f20: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
8f30: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
8f40: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
8f50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8f60: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
8f70: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
8f80: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
8f90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8fa0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
8fb0: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
8fc0: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
8fd0: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
8fe0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
8ff0: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
9000: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
9010: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
9020: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
9030: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9050: 22 47 65 74 49 6e 74 33 32 22 2c 20 6e 75 6c 6c  "GetInt32", null
9060: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
9070: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
9080: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
9090: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
90a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
90b0: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
90c0: 49 6e 74 33 32 56 61 6c 75 65 20 3d 3d 20 6e 75  Int32Value == nu
90d0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
90e0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
90f0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
9100: 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 33  on("missing int3
9110: 32 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29  2 return value")
9120: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9130: 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74       return (Int
9140: 33 32 29 76 61 6c 75 65 2e 49 6e 74 33 32 56 61  32)value.Int32Va
9150: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
9160: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
9170: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
9180: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
9190: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
91a0: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
91b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
91c0: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
91d0: 74 49 6e 74 33 32 28 69 20 2d 20 50 72 69 76 61  tInt32(i - Priva
91e0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
91f0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
9200: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
9210: 62 54 79 70 65 2e 49 6e 74 33 32 29 3b 0d 0a 20  bType.Int32);.. 
9220: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
9230: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
9240: 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63  sql.GetInt32(_ac
9250: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
9260: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9270: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
9280: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
9290: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
92a0: 61 20 6c 6f 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20  a long..    /// 
92b0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
92c0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
92d0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
92e0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
92f0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
9300: 65 74 75 72 6e 73 3e 49 6e 74 36 34 3c 2f 72 65  eturns>Int64</re
9310: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
9320: 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 36  ic override Int6
9330: 34 20 47 65 74 49 6e 74 36 34 28 69 6e 74 20 69  4 GetInt64(int i
9340: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9350: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9360: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
9370: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
9380: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
9390: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
93a0: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
93b0: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
93c0: 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53  eCallbacks) == S
93d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
93e0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
93f0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
9400: 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  acks)..        {
9410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
9420: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
9430: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
9440: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
9450: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
9460: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
9470: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
9480: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
9490: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
94a0: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
94b0: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
94d0: 65 74 49 6e 74 36 34 22 2c 20 6e 75 6c 6c 2c 20  etInt64", null, 
94e0: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
94f0: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
9500: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
9510: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
9520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9530: 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 49 6e      if (value.In
9540: 74 36 34 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  t64Value == null
9550: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9560: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
9570: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
9580: 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 36 34 20  ("missing int64 
9590: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
95a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
95b0: 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74 36 34     return (Int64
95c0: 29 76 61 6c 75 65 2e 49 6e 74 36 34 56 61 6c 75  )value.Int64Valu
95d0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
95e0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
95f0: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
9600: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
9610: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
9620: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
9630: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9640: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49  rn _keyInfo.GetI
9650: 6e 74 36 34 28 69 20 2d 20 50 72 69 76 61 74 65  nt64(i - Private
9660: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
9670: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56  t);....        V
9680: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
9690: 79 70 65 2e 49 6e 74 36 34 29 3b 0d 0a 20 20 20  ype.Int64);..   
96a0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
96b0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
96c0: 6c 2e 47 65 74 49 6e 74 36 34 28 5f 61 63 74 69  l.GetInt64(_acti
96d0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
96e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
96f0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
9700: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
9710: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
9720: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20  column..    /// 
9730: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9740: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
9750: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
9760: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
9770: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
9780: 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72  eturns>string</r
9790: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
97a0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
97b0: 69 6e 67 20 47 65 74 4e 61 6d 65 28 69 6e 74 20  ing GetName(int 
97c0: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
97d0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
97e0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
97f0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
9800: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
9810: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
9820: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
9830: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
9840: 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50  fo.GetName(i - P
9850: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
9860: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
9870: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
9880: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
9890: 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63  l.ColumnName(_ac
98a0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
98b0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
98c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
98d0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
98e0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
98f0: 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
9900: 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
9910: 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a  cified column...
9920: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
9930: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
9940: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
9950: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
9960: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
9970: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73    /// <returns>s
9980: 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d  tring</returns>.
9990: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69  .    public stri
99a0: 6e 67 20 47 65 74 44 61 74 61 62 61 73 65 4e 61  ng GetDatabaseNa
99b0: 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  me(int i)..    {
99c0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
99d0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
99e0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
99f0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
9a00: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
9a10: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
9a20: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9a30: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d   _keyInfo.GetNam
9a40: 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  e(i - PrivateVis
9a50: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
9a60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
9a70: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
9a80: 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 44  ent._sql.ColumnD
9a90: 61 74 61 62 61 73 65 4e 61 6d 65 28 5f 61 63 74  atabaseName(_act
9aa0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
9ab0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9ac0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
9ad0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
9ae0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
9af0: 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20  able associated 
9b00: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
9b10: 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20  ed column...    
9b20: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9b30: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
9b40: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
9b50: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
9b60: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
9b70: 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e  / <returns>strin
9b80: 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  g</returns>..   
9b90: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47   public string G
9ba0: 65 74 54 61 62 6c 65 4e 61 6d 65 28 69 6e 74 20  etTableName(int 
9bb0: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
9bc0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
9bd0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
9be0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
9bf0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
9c00: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
9c10: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
9c20: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
9c30: 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50  fo.GetName(i - P
9c40: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
9c50: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
9c60: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
9c70: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
9c80: 6c 2e 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d  l.ColumnTableNam
9c90: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
9ca0: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
9cb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
9cc0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
9cd0: 75 72 6e 73 20 74 68 65 20 6f 72 69 67 69 6e 61  urns the origina
9ce0: 6c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 70  l name of the sp
9cf0: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d  ecified column..
9d00: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
9d10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
9d20: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
9d30: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
9d40: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
9d50: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
9d60: 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e  string</returns>
9d70: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72  ..    public str
9d80: 69 6e 67 20 47 65 74 4f 72 69 67 69 6e 61 6c 4e  ing GetOriginalN
9d90: 61 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ame(int i)..    
9da0: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
9db0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
9dc0: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
9dd0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
9de0: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
9df0: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
9e00: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9e10: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61  n _keyInfo.GetNa
9e20: 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  me(i - PrivateVi
9e30: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
9e40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
9e50: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
9e60: 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
9e70: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 5f 61 63  OriginalName(_ac
9e80: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
9e90: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9ea0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
9eb0: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
9ec0: 73 20 74 68 65 20 69 20 6f 66 20 61 20 63 6f 6c  s the i of a col
9ed0: 75 6d 6e 2c 20 67 69 76 65 6e 20 69 74 73 20 6e  umn, given its n
9ee0: 61 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ame..    /// </s
9ef0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
9f00: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61   <param name="na
9f10: 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20  me">The name of 
9f20: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
9f30: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a  trieve</param>..
9f40: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
9f50: 3e 54 68 65 20 69 6e 74 20 69 20 6f 66 20 74 68  >The int i of th
9f60: 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
9f70: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
9f80: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 4f  verride int GetO
9f90: 72 64 69 6e 61 6c 28 73 74 72 69 6e 67 20 6e 61  rdinal(string na
9fa0: 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
9fb0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9fc0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
9fd0: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
9fe0: 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  ) SQLiteCommand.
9ff0: 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b  Check(_command);
a000: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ....      //..  
a010: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 72      // NOTE: Fir
a020: 73 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65  st, check if the
a030: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 63   column name cac
a040: 68 65 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  he has been init
a050: 69 61 6c 69 7a 65 64 20 79 65 74 2e 0d 0a 20 20  ialized yet...  
a060: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20      //       If 
a070: 6e 6f 74 2c 20 64 6f 20 69 74 20 6e 6f 77 2e 0d  not, do it now..
a080: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
a090: 20 69 66 20 28 5f 66 69 65 6c 64 49 6e 64 65 78   if (_fieldIndex
a0a0: 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
a0b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a0c0: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
a0d0: 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73  new Dictionary<s
a0e0: 74 72 69 6e 67 2c 20 69 6e 74 3e 28 0d 0a 20 20  tring, int>(..  
a0f0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
a100: 6e 67 43 6f 6d 70 61 72 65 72 2e 4f 72 64 69 6e  ngComparer.Ordin
a110: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a  alIgnoreCase);..
a120: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a130: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
a140: 54 45 3a 20 4e 65 78 74 2c 20 73 65 65 20 69 66  TE: Next, see if
a150: 20 74 68 65 20 69 6e 64 65 78 20 66 6f 72 20 74   the index for t
a160: 68 65 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c  he requested col
a170: 75 6d 6e 20 6e 61 6d 65 20 68 61 73 20 62 65 65  umn name has bee
a180: 6e 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  n..      //     
a190: 20 20 63 61 63 68 65 64 20 61 6c 72 65 61 64 79    cached already
a1a0: 2e 20 20 49 66 20 73 6f 2c 20 72 65 74 75 72 6e  .  If so, return
a1b0: 20 74 68 65 20 63 61 63 68 65 64 20 76 61 6c 75   the cached valu
a1c0: 65 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 0d 0a  e.  Otherwise,..
a1d0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
a1e0: 6f 6f 6b 75 70 20 74 68 65 20 76 61 6c 75 65 20  ookup the value 
a1f0: 61 6e 64 20 74 68 65 6e 20 63 61 63 68 65 20 74  and then cache t
a200: 68 65 20 72 65 73 75 6c 74 20 66 6f 72 20 66 75  he result for fu
a210: 74 75 72 65 20 75 73 65 2e 0d 0a 20 20 20 20 20  ture use...     
a220: 20 2f 2f 0d 0a 20 20 20 20 20 20 69 6e 74 20 72   //..      int r
a230: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 21  ;....      if (!
a240: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 2e 54 72  _fieldIndexes.Tr
a250: 79 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  yGetValue(name, 
a260: 6f 75 74 20 72 29 29 0d 0a 20 20 20 20 20 20 7b  out r))..      {
a270: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 20 3d 20  ..          r = 
a280: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
a290: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 49 6e 64 65  ._sql.ColumnInde
a2a0: 78 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  x(_activeStateme
a2b0: 6e 74 2c 20 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  nt, name);....  
a2c0: 20 20 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d          if (r ==
a2d0: 20 2d 31 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20   -1 && _keyInfo 
a2e0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
a2f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a300: 20 20 20 20 20 72 20 3d 20 5f 6b 65 79 49 6e 66       r = _keyInf
a310: 6f 2e 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d  o.GetOrdinal(nam
a320: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
a330: 20 20 20 69 66 20 28 72 20 3e 20 2d 31 29 20 72     if (r > -1) r
a340: 20 2b 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   += PrivateVisib
a350: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20  leFieldCount;.. 
a360: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
a370: 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 49 6e          _fieldIn
a380: 64 65 78 65 73 2e 41 64 64 28 6e 61 6d 65 2c 20  dexes.Add(name, 
a390: 72 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  r);..      }....
a3a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 3b 0d        return r;.
a3b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
a3c0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
a3d0: 20 2f 2f 2f 20 53 63 68 65 6d 61 20 69 6e 66 6f   /// Schema info
a3e0: 72 6d 61 74 69 6f 6e 20 69 6e 20 53 51 4c 69 74  rmation in SQLit
a3f0: 65 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 74  e is difficult t
a400: 6f 20 6d 61 70 20 69 6e 74 6f 20 2e 4e 45 54 20  o map into .NET 
a410: 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 73 6f 20  conventions, so 
a420: 61 20 6c 6f 74 20 6f 66 20 77 6f 72 6b 20 6d 75  a lot of work mu
a430: 73 74 20 62 65 20 64 6f 6e 65 0d 0a 20 20 20 20  st be done..    
a440: 2f 2f 2f 20 74 6f 20 67 61 74 68 65 72 20 74 68  /// to gather th
a450: 65 20 6e 65 63 65 73 73 61 72 79 20 69 6e 66 6f  e necessary info
a460: 72 6d 61 74 69 6f 6e 20 73 6f 20 69 74 20 63 61  rmation so it ca
a470: 6e 20 62 65 20 72 65 70 72 65 73 65 6e 74 65 64  n be represented
a480: 20 69 6e 20 61 6e 20 41 44 4f 2e 4e 45 54 20 6d   in an ADO.NET m
a490: 61 6e 6e 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  anner...    /// 
a4a0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
a4b0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
a4c0: 75 72 6e 73 20 61 20 44 61 74 61 54 61 62 6c 65  urns a DataTable
a4d0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
a4e0: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
a4f0: 6f 6e 20 66 6f 72 20 74 68 65 20 61 63 74 69 76  on for the activ
a500: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
a510: 6e 74 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nt being process
a520: 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ed.</returns>.. 
a530: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
a540: 64 65 20 44 61 74 61 54 61 62 6c 65 20 47 65 74  de DataTable Get
a550: 53 63 68 65 6d 61 54 61 62 6c 65 28 29 0d 0a 20  SchemaTable().. 
a560: 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63     {..      Chec
a570: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
a580: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 53 63      return GetSc
a590: 68 65 6d 61 54 61 62 6c 65 28 74 72 75 65 2c 20  hemaTable(true, 
a5a0: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  false);..    }..
a5b0: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
a5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a600: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
a610: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 43 6c   ColumnParent Cl
a620: 61 73 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ass..    private
a630: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43 6f   sealed class Co
a640: 6c 75 6d 6e 50 61 72 65 6e 74 20 3a 20 49 45 71  lumnParent : IEq
a650: 75 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 43  ualityComparer<C
a660: 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 0d 0a 20 20  olumnParent>..  
a670: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
a680: 67 69 6f 6e 20 50 75 62 6c 69 63 20 46 69 65 6c  gion Public Fiel
a690: 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ds..        publ
a6a0: 69 63 20 73 74 72 69 6e 67 20 44 61 74 61 62 61  ic string Databa
a6b0: 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  seName;..       
a6c0: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54   public string T
a6d0: 61 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  ableName;..     
a6e0: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
a6f0: 20 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20   ColumnName;..  
a700: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
a710: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a760: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
a770: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
a780: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
a790: 20 20 20 20 70 75 62 6c 69 63 20 43 6f 6c 75 6d      public Colum
a7a0: 6e 50 61 72 65 6e 74 28 29 0d 0a 20 20 20 20 20  nParent()..     
a7b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a7c0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
a7d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
a7e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a830: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
a840: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 0d 0a   ColumnParent(..
a850: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
a860: 6e 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65 2c  ng databaseName,
a870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
a880: 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 2c 0d  ring tableName,.
a890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
a8a0: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 0d 0a  ing columnName..
a8b0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
a8c0: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
a8d0: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s()..        {..
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
a8f0: 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 20 3d 20  .DatabaseName = 
a900: 64 61 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20  databaseName;.. 
a910: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
a920: 54 61 62 6c 65 4e 61 6d 65 20 3d 20 74 61 62 6c  TableName = tabl
a930: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
a940: 20 20 20 20 74 68 69 73 2e 43 6f 6c 75 6d 6e 4e      this.ColumnN
a950: 61 6d 65 20 3d 20 63 6f 6c 75 6d 6e 4e 61 6d 65  ame = columnName
a960: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
a970: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
a980: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
a9e0: 72 65 67 69 6f 6e 20 49 45 71 75 61 6c 69 74 79  region IEquality
a9f0: 43 6f 6d 70 61 72 65 72 3c 43 6f 6c 75 6d 6e 50  Comparer<ColumnP
aa00: 61 72 65 6e 74 3e 20 4d 65 6d 62 65 72 73 0d 0a  arent> Members..
aa10: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
aa20: 6f 6f 6c 20 45 71 75 61 6c 73 28 43 6f 6c 75 6d  ool Equals(Colum
aa30: 6e 50 61 72 65 6e 74 20 78 2c 20 43 6f 6c 75 6d  nParent x, Colum
aa40: 6e 50 61 72 65 6e 74 20 79 29 0d 0a 20 20 20 20  nParent y)..    
aa50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
aa60: 20 20 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c     if ((x == nul
aa70: 6c 29 20 26 26 20 28 79 20 3d 3d 20 6e 75 6c 6c  l) && (y == null
aa80: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
aa90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
aaa0: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
aab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
aac0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
aad0: 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29   if ((x == null)
aae0: 20 7c 7c 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29   || (y == null))
aaf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
ab00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ab10: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ab30: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
ab40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ab50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab60: 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
ab70: 6c 73 28 78 2e 44 61 74 61 62 61 73 65 4e 61 6d  ls(x.DatabaseNam
ab80: 65 2c 20 79 2e 44 61 74 61 62 61 73 65 4e 61 6d  e, y.DatabaseNam
ab90: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
abb0: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
abc0: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29  inalIgnoreCase))
abd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
abe0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
abf0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ac00: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
ac10: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ac20: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ac30: 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
ac40: 78 2e 54 61 62 6c 65 4e 61 6d 65 2c 20 79 2e 54  x.TableName, y.T
ac50: 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  ableName,..     
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac70: 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
ac80: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
ac90: 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20 20 20  eCase))..       
aca0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acc0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
ace0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
acf0: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
ad00: 45 71 75 61 6c 73 28 78 2e 43 6f 6c 75 6d 6e 4e  Equals(x.ColumnN
ad10: 61 6d 65 2c 20 79 2e 43 6f 6c 75 6d 6e 4e 61 6d  ame, y.ColumnNam
ad20: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
ad40: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
ad50: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29  inalIgnoreCase))
ad60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ad70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ad80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ad90: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
ada0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
adb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
adc0: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
add0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ade0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
adf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae30: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
ae40: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 47 65 74    public int Get
ae50: 48 61 73 68 43 6f 64 65 28 43 6f 6c 75 6d 6e 50  HashCode(ColumnP
ae60: 61 72 65 6e 74 20 6f 62 6a 29 0d 0a 20 20 20 20  arent obj)..    
ae70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ae80: 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20     int result = 
ae90: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
aea0: 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75    if ((obj != nu
aeb0: 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 44 61 74 61  ll) && (obj.Data
aec0: 62 61 73 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  baseName != null
aed0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
aee0: 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62      result ^= ob
aef0: 6a 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 2e 47  j.DatabaseName.G
af00: 65 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d  etHashCode();...
af10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
af20: 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26  ((obj != null) &
af30: 26 20 28 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d 65  & (obj.TableName
af40: 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   != null))..    
af50: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
af60: 6c 74 20 5e 3d 20 6f 62 6a 2e 54 61 62 6c 65 4e  lt ^= obj.TableN
af70: 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28  ame.GetHashCode(
af80: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
af90: 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75    if ((obj != nu
afa0: 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 43 6f 6c 75  ll) && (obj.Colu
afb0: 6d 6e 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29  mnName != null))
afc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
afd0: 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e    result ^= obj.
afe0: 43 6f 6c 75 6d 6e 4e 61 6d 65 2e 47 65 74 48 61  ColumnName.GetHa
aff0: 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20  shCode();....   
b000: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
b010: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
b020: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
b030: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
b040: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
b050: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
b060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0a0: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
b0b0: 73 74 61 74 69 63 20 76 6f 69 64 20 47 65 74 53  static void GetS
b0c0: 74 61 74 65 6d 65 6e 74 43 6f 6c 75 6d 6e 50 61  tatementColumnPa
b0d0: 72 65 6e 74 73 28 0d 0a 20 20 20 20 20 20 20 20  rents(..        
b0e0: 53 51 4c 69 74 65 42 61 73 65 20 73 71 6c 2c 0d  SQLiteBase sql,.
b0f0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
b100: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 0d 0a  tatement stmt,..
b110: 20 20 20 20 20 20 20 20 69 6e 74 20 66 69 65 6c          int fiel
b120: 64 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  dCount,..       
b130: 20 72 65 66 20 44 69 63 74 69 6f 6e 61 72 79 3c   ref Dictionary<
b140: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69  ColumnParent, Li
b150: 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54  st<int>> parentT
b160: 6f 43 6f 6c 75 6d 6e 73 2c 0d 0a 20 20 20 20 20  oColumns,..     
b170: 20 20 20 72 65 66 20 44 69 63 74 69 6f 6e 61 72     ref Dictionar
b180: 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72  y<int, ColumnPar
b190: 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54 6f 50 61 72  ent> columnToPar
b1a0: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ent..        )..
b1b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
b1c0: 66 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  f (parentToColum
b1d0: 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
b1e0: 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 54           parentT
b1f0: 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e 65 77 20 44  oColumns = new D
b200: 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e  ictionary<Column
b210: 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74  Parent, List<int
b220: 3e 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  >>(..           
b230: 20 20 20 20 20 6e 65 77 20 43 6f 6c 75 6d 6e 50       new ColumnP
b240: 61 72 65 6e 74 28 29 29 3b 0d 0a 0d 0a 20 20 20  arent());....   
b250: 20 20 20 20 20 69 66 20 28 63 6f 6c 75 6d 6e 54       if (columnT
b260: 6f 50 61 72 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  oParent == null)
b270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
b280: 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 20 6e  lumnToParent = n
b290: 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e  ew Dictionary<in
b2a0: 74 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e  t, ColumnParent>
b2b0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  ();....        f
b2c0: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
b2d0: 20 3c 20 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e   < fieldCount; n
b2e0: 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ++)..        {..
b2f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
b300: 6e 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65 20  ng databaseName 
b310: 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 44 61 74 61  = sql.ColumnData
b320: 62 61 73 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e  baseName(stmt, n
b330: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b340: 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65  string tableName
b350: 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 54 61 62   = sql.ColumnTab
b360: 6c 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b  leName(stmt, n);
b370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
b380: 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 20  ring columnName 
b390: 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67  = sql.ColumnOrig
b3a0: 69 6e 61 6c 4e 61 6d 65 28 73 74 6d 74 2c 20 6e  inalName(stmt, n
b3b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
b3c0: 20 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6b    ColumnParent k
b3d0: 65 79 20 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e 50  ey = new ColumnP
b3e0: 61 72 65 6e 74 28 64 61 74 61 62 61 73 65 4e 61  arent(databaseNa
b3f0: 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65 2c 20 6e  me, tableName, n
b400: 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ull);..         
b410: 20 20 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20     ColumnParent 
b420: 76 61 6c 75 65 20 3d 20 6e 65 77 20 43 6f 6c 75  value = new Colu
b430: 6d 6e 50 61 72 65 6e 74 28 64 61 74 61 62 61 73  mnParent(databas
b440: 65 4e 61 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65  eName, tableName
b450: 2c 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0d 0a  , columnName);..
b460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 69  ..            Li
b470: 73 74 3c 69 6e 74 3e 20 69 6e 64 65 78 4c 69 73  st<int> indexLis
b480: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
b490: 20 20 69 66 20 28 21 70 61 72 65 6e 74 54 6f 43    if (!parentToC
b4a0: 6f 6c 75 6d 6e 73 2e 54 72 79 47 65 74 56 61 6c  olumns.TryGetVal
b4b0: 75 65 28 6b 65 79 2c 20 6f 75 74 20 69 6e 64 65  ue(key, out inde
b4c0: 78 4c 69 73 74 29 29 0d 0a 20 20 20 20 20 20 20  xList))..       
b4d0: 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 54           parentT
b4e0: 6f 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 6b 65 79  oColumns.Add(key
b4f0: 2c 20 6e 65 77 20 4c 69 73 74 3c 69 6e 74 3e 28  , new List<int>(
b500: 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 6e 20 7d 29  new int[] { n })
b510: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b520: 65 6c 73 65 20 69 66 20 28 69 6e 64 65 78 4c 69  else if (indexLi
b530: 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st != null)..   
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
b550: 65 78 4c 69 73 74 2e 41 64 64 28 6e 29 3b 0d 0a  exList.Add(n);..
b560: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
b570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b580: 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e    parentToColumn
b590: 73 5b 6b 65 79 5d 20 3d 20 6e 65 77 20 4c 69 73  s[key] = new Lis
b5a0: 74 3c 69 6e 74 3e 28 6e 65 77 20 69 6e 74 5b 5d  t<int>(new int[]
b5b0: 20 7b 20 6e 20 7d 29 3b 0d 0a 0d 0a 20 20 20 20   { n });....    
b5c0: 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f          columnTo
b5d0: 50 61 72 65 6e 74 2e 41 64 64 28 6e 2c 20 76 61  Parent.Add(n, va
b5e0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
b5f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
b600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b650: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
b660: 20 69 6e 74 20 43 6f 75 6e 74 50 61 72 65 6e 74   int CountParent
b670: 73 28 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74  s(..        Dict
b680: 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72  ionary<ColumnPar
b690: 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20  ent, List<int>> 
b6a0: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 0d  parentToColumns.
b6b0: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
b6c0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72  {..        int r
b6d0: 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  esult = 0;....  
b6e0: 20 20 20 20 20 20 69 66 20 28 70 61 72 65 6e 74        if (parent
b6f0: 54 6f 43 6f 6c 75 6d 6e 73 20 21 3d 20 6e 75 6c  ToColumns != nul
b700: 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
b710: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
b720: 63 68 20 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ch (ColumnParent
b730: 20 6b 65 79 20 69 6e 20 70 61 72 65 6e 74 54 6f   key in parentTo
b740: 43 6f 6c 75 6d 6e 73 2e 4b 65 79 73 29 0d 0a 20  Columns.Keys).. 
b750: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b770: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b790: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
b7a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b7b0: 20 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d   string tableNam
b7c0: 65 20 3d 20 6b 65 79 2e 54 61 62 6c 65 4e 61 6d  e = key.TableNam
b7d0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
b7e0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
b7f0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
b800: 61 62 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  ableName))..    
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b820: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
b830: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
b840: 75 6c 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ult++;..        
b850: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
b860: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
b870: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
b880: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
b890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ////....    inte
b8e0: 72 6e 61 6c 20 44 61 74 61 54 61 62 6c 65 20 47  rnal DataTable G
b8f0: 65 74 53 63 68 65 6d 61 54 61 62 6c 65 28 62 6f  etSchemaTable(bo
b900: 6f 6c 20 77 61 6e 74 55 6e 69 71 75 65 49 6e 66  ol wantUniqueInf
b910: 6f 2c 20 62 6f 6f 6c 20 77 61 6e 74 44 65 66 61  o, bool wantDefa
b920: 75 6c 74 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ultValue)..    {
b930: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 43  ..        CheckC
b940: 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  losed();..      
b950: 20 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69    if (_throwOnDi
b960: 73 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43 6f  sposed) SQLiteCo
b970: 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d  mmand.Check(_com
b980: 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mand);....      
b990: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
b9a0: 20 42 55 47 46 49 58 3a 20 57 65 20 6e 65 65 64   BUGFIX: We need
b9b0: 20 74 6f 20 71 75 69 63 6b 6c 79 20 73 63 61 6e   to quickly scan
b9c0: 20 61 6c 6c 20 74 68 65 20 66 69 65 6c 64 73 20   all the fields 
b9d0: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a  in the current..
b9e0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
b9f0: 20 20 20 22 72 65 73 75 6c 74 20 73 65 74 22 20     "result set" 
ba00: 74 6f 20 73 65 65 20 68 6f 77 20 6d 61 6e 79 20  to see how many 
ba10: 64 69 73 74 69 6e 63 74 20 74 61 62 6c 65 73 20  distinct tables 
ba20: 61 72 65 20 61 63 74 75 61 6c 6c 79 0d 0a 20 20  are actually..  
ba30: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
ba40: 20 69 6e 76 6f 6c 76 65 64 2e 20 20 54 68 69 73   involved.  This
ba50: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
ba60: 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74 68 61  necessary so tha
ba70: 74 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20  t some..        
ba80: 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 74 65 6c  //         intel
ba90: 6c 69 67 65 6e 74 20 64 65 63 69 73 69 6f 6e 73  ligent decisions
baa0: 20 63 61 6e 20 62 65 20 6d 61 64 65 20 77 68 65   can be made whe
bab0: 6e 20 63 6f 6e 73 74 72 75 63 74 69 6e 67 20 74  n constructing t
bac0: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  he..        //  
bad0: 20 20 20 20 20 20 20 6d 65 74 61 64 61 74 61 20         metadata 
bae0: 62 65 6c 6f 77 2e 20 20 46 6f 72 20 65 78 61 6d  below.  For exam
baf0: 70 6c 65 2c 20 77 65 20 6e 65 65 64 20 74 6f 20  ple, we need to 
bb00: 62 65 20 76 65 72 79 20 63 61 72 65 66 75 6c 0d  be very careful.
bb10: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
bb20: 20 20 20 20 61 62 6f 75 74 20 66 6c 61 67 67 69      about flaggi
bb30: 6e 67 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  ng a particular 
bb40: 63 6f 6c 75 6d 6e 20 61 73 20 22 75 6e 69 71 75  column as "uniqu
bb50: 65 22 20 6a 75 73 74 0d 0a 20 20 20 20 20 20 20  e" just..       
bb60: 20 2f 2f 20 20 20 20 20 20 20 20 20 62 65 63 61   //         beca
bb70: 75 73 65 20 69 74 20 77 61 73 20 69 6e 20 69 74  use it was in it
bb80: 73 20 6f 72 69 67 69 6e 61 6c 20 75 6e 64 65 72  s original under
bb90: 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 74  lying database t
bba0: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
bbb0: 20 20 20 20 20 20 20 20 20 69 66 20 74 68 65 72           if ther
bbc0: 65 20 61 72 65 20 6e 6f 77 20 6d 75 6c 74 69 70  e are now multip
bbd0: 6c 65 20 74 61 62 6c 65 73 20 69 6e 76 6f 6c 76  le tables involv
bbe0: 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ed in the..     
bbf0: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 22 72     //         "r
bc00: 65 73 75 6c 74 20 73 65 74 22 2e 20 20 53 65 65  esult set".  See
bc10: 20 74 69 63 6b 65 74 20 5b 37 65 33 66 61 39 33   ticket [7e3fa93
bc20: 37 34 34 5d 20 66 6f 72 20 6d 6f 72 65 20 64 65  744] for more de
bc30: 74 61 69 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  tailed..        
bc40: 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 66 6f 72  //         infor
bc50: 6d 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  mation...       
bc60: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 44 69 63   //..        Dic
bc70: 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61  tionary<ColumnPa
bc80: 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e  rent, List<int>>
bc90: 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73   parentToColumns
bca0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
bcb0: 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74    Dictionary<int
bcc0: 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20  , ColumnParent> 
bcd0: 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d  columnToParent =
bce0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
bcf0: 53 51 4c 69 74 65 42 61 73 65 20 73 71 6c 20 3d  SQLiteBase sql =
bd00: 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63   _command.Connec
bd10: 74 69 6f 6e 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20  tion._sql;....  
bd20: 20 20 20 20 20 20 47 65 74 53 74 61 74 65 6d 65        GetStateme
bd30: 6e 74 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 73 28  ntColumnParents(
bd40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ..            sq
bd50: 6c 2c 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  l, _activeStatem
bd60: 65 6e 74 2c 20 5f 66 69 65 6c 64 43 6f 75 6e 74  ent, _fieldCount
bd70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
bd80: 65 66 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  ef parentToColum
bd90: 6e 73 2c 20 72 65 66 20 63 6f 6c 75 6d 6e 54 6f  ns, ref columnTo
bda0: 50 61 72 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  Parent);....    
bdb0: 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 74 62      DataTable tb
bdc0: 6c 20 3d 20 6e 65 77 20 44 61 74 61 54 61 62 6c  l = new DataTabl
bdd0: 65 28 22 53 63 68 65 6d 61 54 61 62 6c 65 22 29  e("SchemaTable")
bde0: 3b 0d 0a 20 20 20 20 20 20 20 20 44 61 74 61 54  ;..        DataT
bdf0: 61 62 6c 65 20 74 62 6c 49 6e 64 65 78 65 73 20  able tblIndexes 
be00: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
be10: 20 44 61 74 61 54 61 62 6c 65 20 74 62 6c 49 6e   DataTable tblIn
be20: 64 65 78 43 6f 6c 75 6d 6e 73 3b 0d 0a 20 20 20  dexColumns;..   
be30: 20 20 20 20 20 44 61 74 61 52 6f 77 20 72 6f 77       DataRow row
be40: 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ;..        strin
be50: 67 20 74 65 6d 70 3b 0d 0a 20 20 20 20 20 20 20  g temp;..       
be60: 20 73 74 72 69 6e 67 20 73 74 72 43 61 74 61 6c   string strCatal
be70: 6f 67 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74  og = String.Empt
be80: 79 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  y;..        stri
be90: 6e 67 20 73 74 72 54 61 62 6c 65 20 3d 20 53 74  ng strTable = St
bea0: 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20  ring.Empty;..   
beb0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 43       string strC
bec0: 6f 6c 75 6d 6e 20 3d 20 53 74 72 69 6e 67 2e 45  olumn = String.E
bed0: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
bee0: 20 74 62 6c 2e 4c 6f 63 61 6c 65 20 3d 20 43 75   tbl.Locale = Cu
bef0: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
bf00: 61 6e 74 43 75 6c 74 75 72 65 3b 0d 0a 20 20 20  antCulture;..   
bf10: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
bf20: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
bf30: 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d  Column.ColumnNam
bf40: 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67  e, typeof(String
bf50: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c  ));..        tbl
bf60: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
bf70: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43  emaTableColumn.C
bf80: 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 2c 20 74 79  olumnOrdinal, ty
bf90: 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20  peof(int));..   
bfa0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
bfb0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
bfc0: 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a  Column.ColumnSiz
bfd0: 65 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b  e, typeof(int));
bfe0: 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f  ..        tbl.Co
bff0: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
c000: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65  TableColumn.Nume
c010: 72 69 63 50 72 65 63 69 73 69 6f 6e 2c 20 74 79  ricPrecision, ty
c020: 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20  peof(int));..   
c030: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c040: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c050: 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63  Column.NumericSc
c060: 61 6c 65 2c 20 74 79 70 65 6f 66 28 69 6e 74 29  ale, typeof(int)
c070: 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e  );..        tbl.
c080: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
c090: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
c0a0: 55 6e 69 71 75 65 2c 20 74 79 70 65 6f 66 28 42  Unique, typeof(B
c0b0: 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20  oolean));..     
c0c0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
c0d0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
c0e0: 6c 75 6d 6e 2e 49 73 4b 65 79 2c 20 74 79 70 65  lumn.IsKey, type
c0f0: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20  of(Boolean));.. 
c100: 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d         tbl.Colum
c110: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
c120: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
c130: 2e 42 61 73 65 53 65 72 76 65 72 4e 61 6d 65 2c  .BaseServerName,
c140: 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29   typeof(string))
c150: 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43  ;..        tbl.C
c160: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
c170: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
c180: 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67  lumn.BaseCatalog
c190: 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72  Name, typeof(Str
c1a0: 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ing));..        
c1b0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c1c0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c1d0: 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65  n.BaseColumnName
c1e0: 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29  , typeof(String)
c1f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e  );..        tbl.
c200: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
c210: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
c220: 73 65 53 63 68 65 6d 61 4e 61 6d 65 2c 20 74 79  seSchemaName, ty
c230: 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a  peof(String));..
c240: 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75          tbl.Colu
c250: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
c260: 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61  bleColumn.BaseTa
c270: 62 6c 65 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28  bleName, typeof(
c280: 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20  String));..     
c290: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
c2a0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
c2b0: 6c 75 6d 6e 2e 44 61 74 61 54 79 70 65 2c 20 74  lumn.DataType, t
c2c0: 79 70 65 6f 66 28 54 79 70 65 29 29 3b 0d 0a 20  ypeof(Type));.. 
c2d0: 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d         tbl.Colum
c2e0: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
c2f0: 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42  leColumn.AllowDB
c300: 4e 75 6c 6c 2c 20 74 79 70 65 6f 66 28 42 6f 6f  Null, typeof(Boo
c310: 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20  lean));..       
c320: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c330: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
c340: 6d 6e 2e 50 72 6f 76 69 64 65 72 54 79 70 65 2c  mn.ProviderType,
c350: 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a   typeof(int));..
c360: 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75          tbl.Colu
c370: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
c380: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 41 6c 69 61  bleColumn.IsAlia
c390: 73 65 64 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  sed, typeof(Bool
c3a0: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ean));..        
c3b0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c3c0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c3d0: 6e 2e 49 73 45 78 70 72 65 73 73 69 6f 6e 2c 20  n.IsExpression, 
c3e0: 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29  typeof(Boolean))
c3f0: 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43  ;..        tbl.C
c400: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
c410: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
c420: 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65  lumn.IsAutoIncre
c430: 6d 65 6e 74 2c 20 74 79 70 65 6f 66 28 42 6f 6f  ment, typeof(Boo
c440: 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20  lean));..       
c450: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c460: 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  (SchemaTableOpti
c470: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f 77  onalColumn.IsRow
c480: 56 65 72 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28  Version, typeof(
c490: 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20  Boolean));..    
c4a0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c4b0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
c4c0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
c4d0: 48 69 64 64 65 6e 2c 20 74 79 70 65 6f 66 28 42  Hidden, typeof(B
c4e0: 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20  oolean));..     
c4f0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
c500: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
c510: 6c 75 6d 6e 2e 49 73 4c 6f 6e 67 2c 20 74 79 70  lumn.IsLong, typ
c520: 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a  eof(Boolean));..
c530: 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75          tbl.Colu
c540: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
c550: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
c560: 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 2c 20 74 79  n.IsReadOnly, ty
c570: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d  peof(Boolean));.
c580: 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  .        tbl.Col
c590: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
c5a0: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
c5b0: 6d 6e 2e 50 72 6f 76 69 64 65 72 53 70 65 63 69  mn.ProviderSpeci
c5c0: 66 69 63 44 61 74 61 54 79 70 65 2c 20 74 79 70  ficDataType, typ
c5d0: 65 6f 66 28 54 79 70 65 29 29 3b 0d 0a 20 20 20  eof(Type));..   
c5e0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c5f0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c600: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44  OptionalColumn.D
c610: 65 66 61 75 6c 74 56 61 6c 75 65 2c 20 74 79 70  efaultValue, typ
c620: 65 6f 66 28 6f 62 6a 65 63 74 29 29 3b 0d 0a 20  eof(object));.. 
c630: 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d         tbl.Colum
c640: 6e 73 2e 41 64 64 28 22 44 61 74 61 54 79 70 65  ns.Add("DataType
c650: 4e 61 6d 65 22 2c 20 74 79 70 65 6f 66 28 73 74  Name", typeof(st
c660: 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 20  ring));..       
c670: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c680: 28 22 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 22  ("CollationType"
c690: 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29  , typeof(string)
c6a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e  );..        tbl.
c6b0: 42 65 67 69 6e 4c 6f 61 64 44 61 74 61 28 29 3b  BeginLoadData();
c6c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20  ....        for 
c6d0: 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20  (int n = 0; n < 
c6e0: 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b  _fieldCount; n++
c6f0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
c700: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
c710: 54 79 70 65 20 73 71 6c 54 79 70 65 20 3d 20 47  Type sqlType = G
c720: 65 74 53 51 4c 69 74 65 54 79 70 65 28 5f 66 6c  etSQLiteType(_fl
c730: 61 67 73 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ags, n);....    
c740: 20 20 20 20 20 20 20 20 72 6f 77 20 3d 20 74 62          row = tb
c750: 6c 2e 4e 65 77 52 6f 77 28 29 3b 0d 0a 0d 0a 20  l.NewRow();.... 
c760: 20 20 20 20 20 20 20 20 20 20 20 44 62 54 79 70             DbTyp
c770: 65 20 74 79 70 20 3d 20 73 71 6c 54 79 70 65 2e  e typ = sqlType.
c780: 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Type;....       
c790: 20 20 20 20 20 2f 2f 20 44 65 66 61 75 6c 74 20       // Default 
c7a0: 73 65 74 74 69 6e 67 73 20 66 6f 72 20 74 68 65  settings for the
c7b0: 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20   column..       
c7c0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
c7d0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d  ableColumn.Colum
c7e0: 6e 4e 61 6d 65 5d 20 3d 20 47 65 74 4e 61 6d 65  nName] = GetName
c7f0: 28 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  (n);..          
c800: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
c810: 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72  eColumn.ColumnOr
c820: 64 69 6e 61 6c 5d 20 3d 20 6e 3b 0d 0a 20 20 20  dinal] = n;..   
c830: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
c840: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43  emaTableColumn.C
c850: 6f 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20 53 51 4c  olumnSize] = SQL
c860: 69 74 65 43 6f 6e 76 65 72 74 2e 44 62 54 79 70  iteConvert.DbTyp
c870: 65 54 6f 43 6f 6c 75 6d 6e 53 69 7a 65 28 74 79  eToColumnSize(ty
c880: 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  p);..           
c890: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
c8a0: 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72  Column.NumericPr
c8b0: 65 63 69 73 69 6f 6e 5d 20 3d 20 53 51 4c 69 74  ecision] = SQLit
c8c0: 65 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54  eConvert.DbTypeT
c8d0: 6f 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f  oNumericPrecisio
c8e0: 6e 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20  n(typ);..       
c8f0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
c900: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72  ableColumn.Numer
c910: 69 63 53 63 61 6c 65 5d 20 3d 20 53 51 4c 69 74  icScale] = SQLit
c920: 65 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54  eConvert.DbTypeT
c930: 6f 4e 75 6d 65 72 69 63 53 63 61 6c 65 28 74 79  oNumericScale(ty
c940: 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  p);..           
c950: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
c960: 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72 54  Column.ProviderT
c970: 79 70 65 5d 20 3d 20 73 71 6c 54 79 70 65 2e 54  ype] = sqlType.T
c980: 79 70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ype;..          
c990: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
c9a0: 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e 67 5d 20  eColumn.IsLong] 
c9b0: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
c9c0: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
c9d0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f  TableColumn.Allo
c9e0: 77 44 42 4e 75 6c 6c 5d 20 3d 20 74 72 75 65 3b  wDBNull] = true;
c9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 6f  ..            ro
ca00: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
ca10: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65  ionalColumn.IsRe
ca20: 61 64 4f 6e 6c 79 5d 20 3d 20 66 61 6c 73 65 3b  adOnly] = false;
ca30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 6f  ..            ro
ca40: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
ca50: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f  ionalColumn.IsRo
ca60: 77 56 65 72 73 69 6f 6e 5d 20 3d 20 66 61 6c 73  wVersion] = fals
ca70: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
ca80: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
ca90: 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 20  olumn.IsUnique] 
caa0: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
cab0: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
cac0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65  TableColumn.IsKe
cad0: 79 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  y] = false;..   
cae0: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
caf0: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
cb00: 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63  Column.IsAutoInc
cb10: 72 65 6d 65 6e 74 5d 20 3d 20 66 61 6c 73 65 3b  rement] = false;
cb20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 6f  ..            ro
cb30: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
cb40: 75 6d 6e 2e 44 61 74 61 54 79 70 65 5d 20 3d 20  umn.DataType] = 
cb50: 47 65 74 46 69 65 6c 64 54 79 70 65 28 6e 29 3b  GetFieldType(n);
cb60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 6f  ..            ro
cb70: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
cb80: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 48 69  ionalColumn.IsHi
cb90: 64 64 65 6e 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a  dden] = false;..
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
cbb0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
cbc0: 6e 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  n.BaseSchemaName
cbd0: 5d 20 3d 20 5f 62 61 73 65 53 63 68 65 6d 61 4e  ] = _baseSchemaN
cbe0: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
cbf0: 20 20 20 20 73 74 72 43 6f 6c 75 6d 6e 20 3d 20      strColumn = 
cc00: 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 5b 6e  columnToParent[n
cc10: 5d 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20  ].ColumnName;.. 
cc20: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
cc30: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
cc40: 70 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d  pty(strColumn) =
cc50: 3d 20 66 61 6c 73 65 29 20 72 6f 77 5b 53 63 68  = false) row[Sch
cc60: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
cc70: 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20 3d  aseColumnName] =
cc80: 20 73 74 72 43 6f 6c 75 6d 6e 3b 0d 0a 0d 0a 20   strColumn;.... 
cc90: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
cca0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
ccb0: 2e 49 73 45 78 70 72 65 73 73 69 6f 6e 5d 20 3d  .IsExpression] =
ccc0: 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72   String.IsNullOr
ccd0: 45 6d 70 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29  Empty(strColumn)
cce0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
ccf0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
cd00: 6c 75 6d 6e 2e 49 73 41 6c 69 61 73 65 64 5d 20  lumn.IsAliased] 
cd10: 3d 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  = (String.Compar
cd20: 65 28 47 65 74 4e 61 6d 65 28 6e 29 2c 20 73 74  e(GetName(n), st
cd30: 72 43 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43  rColumn, StringC
cd40: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
cd50: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 21 3d 20  lIgnoreCase) != 
cd60: 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  0);....         
cd70: 20 20 20 74 65 6d 70 20 3d 20 63 6f 6c 75 6d 6e     temp = column
cd80: 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 54 61 62 6c  ToParent[n].Tabl
cd90: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
cda0: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
cdb0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65 6d  sNullOrEmpty(tem
cdc0: 70 29 20 3d 3d 20 66 61 6c 73 65 29 20 72 6f 77  p) == false) row
cdd0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
cde0: 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65  mn.BaseTableName
cdf0: 5d 20 3d 20 74 65 6d 70 3b 0d 0a 0d 0a 20 20 20  ] = temp;....   
ce00: 20 20 20 20 20 20 20 20 20 74 65 6d 70 20 3d 20           temp = 
ce10: 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 5b 6e  columnToParent[n
ce20: 5d 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 3b 0d  ].DatabaseName;.
ce30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
ce40: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
ce50: 45 6d 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66  Empty(temp) == f
ce60: 61 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61  alse) row[Schema
ce70: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
ce80: 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e  umn.BaseCatalogN
ce90: 61 6d 65 5d 20 3d 20 74 65 6d 70 3b 0d 0a 0d 0a  ame] = temp;....
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
ceb0: 6e 67 20 64 61 74 61 54 79 70 65 20 3d 20 6e 75  ng dataType = nu
cec0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
ced0: 20 2f 2f 20 49 66 20 77 65 20 68 61 76 65 20 61   // If we have a
cee0: 20 74 61 62 6c 65 2d 62 6f 75 6e 64 20 63 6f 6c   table-bound col
cef0: 75 6d 6e 2c 20 65 78 74 72 61 63 74 20 74 68 65  umn, extract the
cf00: 20 65 78 74 72 61 20 69 6e 66 6f 72 6d 61 74 69   extra informati
cf10: 6f 6e 20 66 72 6f 6d 20 69 74 0d 0a 20 20 20 20  on from it..    
cf20: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
cf30: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
cf40: 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66  (strColumn) == f
cf50: 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  alse)..         
cf60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cf70: 20 20 20 20 20 20 73 74 72 69 6e 67 20 62 61 73        string bas
cf80: 65 43 61 74 61 6c 6f 67 4e 61 6d 65 20 3d 20 53  eCatalogName = S
cf90: 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a  tring.Empty;....
cfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfb0: 69 66 20 28 72 6f 77 5b 53 63 68 65 6d 61 54 61  if (row[SchemaTa
cfc0: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
cfd0: 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d  n.BaseCatalogNam
cfe0: 65 5d 20 21 3d 20 44 42 4e 75 6c 6c 2e 56 61 6c  e] != DBNull.Val
cff0: 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue)..           
d000: 20 20 20 20 20 20 20 20 20 62 61 73 65 43 61 74           baseCat
d010: 61 6c 6f 67 4e 61 6d 65 20 3d 20 28 73 74 72 69  alogName = (stri
d020: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
d030: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
d040: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
d050: 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
d060: 20 20 20 20 20 20 73 74 72 69 6e 67 20 62 61 73        string bas
d070: 65 54 61 62 6c 65 4e 61 6d 65 20 3d 20 53 74 72  eTableName = Str
d080: 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20  ing.Empty;....  
d090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d0a0: 20 28 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c   (row[SchemaTabl
d0b0: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c  eColumn.BaseTabl
d0c0: 65 4e 61 6d 65 5d 20 21 3d 20 44 42 4e 75 6c 6c  eName] != DBNull
d0d0: 2e 56 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20  .Value)..       
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73               bas
d0f0: 65 54 61 62 6c 65 4e 61 6d 65 20 3d 20 28 73 74  eTableName = (st
d100: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
d110: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
d120: 61 62 6c 65 4e 61 6d 65 5d 3b 0d 0a 0d 0a 20 20  ableName];....  
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d140: 20 28 73 71 6c 2e 44 6f 65 73 54 61 62 6c 65 45   (sql.DoesTableE
d150: 78 69 73 74 28 62 61 73 65 43 61 74 61 6c 6f 67  xist(baseCatalog
d160: 4e 61 6d 65 2c 20 62 61 73 65 54 61 62 6c 65 4e  Name, baseTableN
d170: 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
d180: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
d1a0: 72 69 6e 67 20 62 61 73 65 43 6f 6c 75 6d 6e 4e  ring baseColumnN
d1b0: 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70  ame = String.Emp
d1c0: 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ty;....         
d1d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
d1e0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
d1f0: 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e  lumn.BaseColumnN
d200: 61 6d 65 5d 20 21 3d 20 44 42 4e 75 6c 6c 2e 56  ame] != DBNull.V
d210: 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20  alue)..         
d220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
d230: 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 20 3d 20  aseColumnName = 
d240: 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65  (string)row[Sche
d250: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
d260: 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 3b 0d 0a  seColumnName];..
d270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d280: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6c        string col
d290: 6c 53 65 71 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  lSeq = null;..  
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2b0: 20 20 62 6f 6f 6c 20 62 4e 6f 74 4e 75 6c 6c 20    bool bNotNull 
d2c0: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
d2e0: 6f 6c 20 62 50 72 69 6d 61 72 79 4b 65 79 20 3d  ol bPrimaryKey =
d2f0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
d310: 6c 20 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74  l bAutoIncrement
d320: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
d330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
d340: 74 72 69 6e 67 5b 5d 20 61 72 53 69 7a 65 3b 0d  tring[] arSize;.
d350: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d360: 20 20 20 20 20 20 20 2f 2f 20 47 65 74 20 74 68         // Get th
d370: 65 20 63 6f 6c 75 6d 6e 20 6d 65 74 61 20 64 61  e column meta da
d380: 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ta..            
d390: 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64          _command
d3a0: 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c  .Connection._sql
d3b0: 2e 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28  .ColumnMetaData(
d3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d3d0: 20 20 20 20 20 20 20 20 20 20 62 61 73 65 43 61            baseCa
d3e0: 74 61 6c 6f 67 4e 61 6d 65 2c 0d 0a 20 20 20 20  talogName,..    
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d400: 20 20 20 20 62 61 73 65 54 61 62 6c 65 4e 61 6d      baseTableNam
d410: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
d420: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 43              strC
d430: 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20 20 20 20  olumn,..        
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d450: 74 72 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  true,..         
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d470: 65 66 20 64 61 74 61 54 79 70 65 2c 20 72 65 66  ef dataType, ref
d480: 20 63 6f 6c 6c 53 65 71 2c 20 72 65 66 20 62 4e   collSeq, ref bN
d490: 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 62 50 72 69  otNull, ref bPri
d4a0: 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 62 41 75  maryKey, ref bAu
d4b0: 74 6f 49 6e 63 72 65 6d 65 6e 74 29 3b 0d 0a 0d  toIncrement);...
d4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d4d0: 20 20 20 20 20 69 66 20 28 62 4e 6f 74 4e 75 6c       if (bNotNul
d4e0: 6c 20 7c 7c 20 62 50 72 69 6d 61 72 79 4b 65 79  l || bPrimaryKey
d4f0: 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  ) row[SchemaTabl
d500: 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e  eColumn.AllowDBN
d510: 75 6c 6c 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  ull] = false;.. 
d520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d530: 20 20 20 62 6f 6f 6c 20 61 6c 6c 6f 77 44 62 4e     bool allowDbN
d540: 75 6c 6c 20 3d 20 28 62 6f 6f 6c 29 72 6f 77 5b  ull = (bool)row[
d550: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
d560: 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 3b 0d  n.AllowDBNull];.
d570: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d580: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
d590: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b  aTableColumn.IsK
d5a0: 65 79 5d 20 3d 20 62 50 72 69 6d 61 72 79 4b 65  ey] = bPrimaryKe
d5b0: 79 20 26 26 20 43 6f 75 6e 74 50 61 72 65 6e 74  y && CountParent
d5c0: 73 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e  s(parentToColumn
d5d0: 73 29 20 3c 3d 20 31 3b 0d 0a 20 20 20 20 20 20  s) <= 1;..      
d5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
d5f0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
d600: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75  ionalColumn.IsAu
d610: 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 62  toIncrement] = b
d620: 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 3b 0d 0a  AutoIncrement;..
d630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d640: 20 20 20 20 72 6f 77 5b 22 43 6f 6c 6c 61 74 69      row["Collati
d650: 6f 6e 54 79 70 65 22 5d 20 3d 20 63 6f 6c 6c 53  onType"] = collS
d660: 65 71 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  eq;....         
d670: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 6f             // Fo
d680: 72 20 74 79 70 65 73 20 6c 69 6b 65 20 76 61 72  r types like var
d690: 63 68 61 72 28 35 30 29 20 61 6e 64 20 73 75 63  char(50) and suc
d6a0: 68 2c 20 65 78 74 72 61 63 74 20 74 68 65 20 73  h, extract the s
d6b0: 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ize..           
d6c0: 20 20 20 20 20 20 20 20 20 61 72 53 69 7a 65 20           arSize 
d6d0: 3d 20 64 61 74 61 54 79 70 65 2e 53 70 6c 69 74  = dataType.Split
d6e0: 28 27 28 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  ('(');..        
d6f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d700: 61 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20  arSize.Length > 
d710: 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
d720: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d740: 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 61 72     dataType = ar
d750: 53 69 7a 65 5b 30 5d 3b 0d 0a 20 20 20 20 20 20  Size[0];..      
d760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d770: 20 20 61 72 53 69 7a 65 20 3d 20 61 72 53 69 7a    arSize = arSiz
d780: 65 5b 31 5d 2e 53 70 6c 69 74 28 27 29 27 29 3b  e[1].Split(')');
d790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d7a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
d7b0: 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29  Size.Length > 1)
d7c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d7d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7f0: 20 20 20 20 20 20 20 20 20 61 72 53 69 7a 65 20           arSize 
d800: 3d 20 61 72 53 69 7a 65 5b 30 5d 2e 53 70 6c 69  = arSize[0].Spli
d810: 74 28 27 2c 27 2c 20 27 2e 27 29 3b 0d 0a 20 20  t(',', '.');..  
d820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d830: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 71            if (sq
d840: 6c 54 79 70 65 2e 54 79 70 65 20 3d 3d 20 44 62  lType.Type == Db
d850: 54 79 70 65 2e 42 69 6e 61 72 79 20 7c 7c 20 53  Type.Binary || S
d860: 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 49 73 53  QLiteConvert.IsS
d870: 74 72 69 6e 67 44 62 54 79 70 65 28 73 71 6c 54  tringDbType(sqlT
d880: 79 70 65 2e 54 79 70 65 29 29 0d 0a 20 20 20 20  ype.Type))..    
d890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8c0: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
d8d0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
d8e0: 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20 43  .ColumnSize] = C
d8f0: 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 61  onvert.ToInt32(a
d900: 72 53 69 7a 65 5b 30 5d 2c 20 43 75 6c 74 75 72  rSize[0], Cultur
d910: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
d920: 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20  ulture);..      
d930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d940: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
d950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d960: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
d970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d980: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9a0: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
d9b0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
d9c0: 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e  NumericPrecision
d9d0: 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e  ] = Convert.ToIn
d9e0: 74 33 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20 43  t32(arSize[0], C
d9f0: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
da00: 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20  iantCulture);.. 
da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
da30: 66 20 28 61 72 53 69 7a 65 2e 4c 65 6e 67 74 68  f (arSize.Length
da40: 20 3e 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20   > 1)..         
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da60: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
da70: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
da80: 2e 4e 75 6d 65 72 69 63 53 63 61 6c 65 5d 20 3d  .NumericScale] =
da90: 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32   Convert.ToInt32
daa0: 28 61 72 53 69 7a 65 5b 31 5d 2c 20 43 75 6c 74  (arSize[1], Cult
dab0: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
dac0: 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20  tCulture);..    
dad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dae0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
daf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db00: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
db10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
db20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db30: 20 20 20 69 66 20 28 77 61 6e 74 44 65 66 61 75     if (wantDefau
db40: 6c 74 56 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  ltValue)..      
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
db60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
db70: 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65 74 65           // Dete
db80: 72 6d 69 6e 65 20 74 68 65 20 64 65 66 61 75 6c  rmine the defaul
db90: 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  t value for the 
dba0: 63 6f 6c 75 6d 6e 2c 20 77 68 69 63 68 20 73 75  column, which su
dbb0: 63 6b 73 20 62 65 63 61 75 73 65 20 77 65 20 68  cks because we h
dbc0: 61 76 65 20 74 6f 20 71 75 65 72 79 20 74 68 65  ave to query the
dbd0: 20 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68   schema for each
dbe0: 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20   column..       
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc00: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
dc10: 6d 6d 61 6e 64 20 63 6d 64 54 61 62 6c 65 20 3d  mmand cmdTable =
dc20: 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61   new SQLiteComma
dc30: 6e 64 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  nd(HelperMethods
dc40: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75  .StringFormat(Cu
dc50: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
dc60: 61 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 52 41  antCulture, "PRA
dc70: 47 4d 41 20 5b 7b 30 7d 5d 2e 54 41 42 4c 45 5f  GMA [{0}].TABLE_
dc80: 49 4e 46 4f 28 5b 7b 31 7d 5d 29 22 2c 0d 0a 20  INFO([{1}])",.. 
dc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dca0: 20 20 20 20 20 20 20 20 20 20 20 62 61 73 65 43             baseC
dcb0: 61 74 61 6c 6f 67 4e 61 6d 65 2c 0d 0a 20 20 20  atalogName,..   
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 20 20 20 20 20 20 20 20 20 62 61 73 65 54 61 62           baseTab
dce0: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd00: 29 2c 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e  ), _command.Conn
dd10: 65 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  ection))..      
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd30: 20 20 75 73 69 6e 67 20 28 44 62 44 61 74 61 52    using (DbDataR
dd40: 65 61 64 65 72 20 72 64 54 61 62 6c 65 20 3d 20  eader rdTable = 
dd50: 63 6d 64 54 61 62 6c 65 2e 45 78 65 63 75 74 65  cmdTable.Execute
dd60: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dda0: 20 20 2f 2f 20 46 69 6e 64 20 74 68 65 20 6d 61    // Find the ma
ddb0: 74 63 68 69 6e 67 20 63 6f 6c 75 6d 6e 0d 0a 20  tching column.. 
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddd0: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
dde0: 20 28 72 64 54 61 62 6c 65 2e 52 65 61 64 28 29   (rdTable.Read()
ddf0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
de10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de30: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d    if (String.Com
de40: 70 61 72 65 28 62 61 73 65 43 6f 6c 75 6d 6e 4e  pare(baseColumnN
de50: 61 6d 65 2c 20 72 64 54 61 62 6c 65 2e 47 65 74  ame, rdTable.Get
de60: 53 74 72 69 6e 67 28 31 29 2c 20 53 74 72 69 6e  String(1), Strin
de70: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
de80: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
de90: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ded0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
dee0: 28 72 64 54 61 62 6c 65 2e 49 73 44 42 4e 75 6c  (rdTable.IsDBNul
def0: 6c 28 34 29 20 3d 3d 20 66 61 6c 73 65 29 0d 0a  l(4) == false)..
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df20: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
df30: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
df40: 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56 61 6c  olumn.DefaultVal
df50: 75 65 5d 20 3d 20 72 64 54 61 62 6c 65 5b 34 5d  ue] = rdTable[4]
df60: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
df70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df80: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
df90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfb0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfd0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
dfe0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e000: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
e010: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
e020: 74 65 72 6d 69 6e 65 20 49 73 55 6e 69 71 75 65  termine IsUnique
e030: 20 70 72 6f 70 65 72 6c 79 2c 20 77 68 69 63 68   properly, which
e040: 20 69 73 20 61 20 70 61 69 6e 20 69 6e 20 74 68   is a pain in th
e050: 65 20 62 75 74 74 21 0d 0a 20 20 20 20 20 20 20  e butt!..       
e060: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e070: 28 77 61 6e 74 55 6e 69 71 75 65 49 6e 66 6f 29  (wantUniqueInfo)
e080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e090: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0b0: 20 69 66 20 28 62 61 73 65 43 61 74 61 6c 6f 67   if (baseCatalog
e0c0: 4e 61 6d 65 20 21 3d 20 73 74 72 43 61 74 61 6c  Name != strCatal
e0d0: 6f 67 20 7c 7c 20 62 61 73 65 54 61 62 6c 65 4e  og || baseTableN
e0e0: 61 6d 65 20 21 3d 20 73 74 72 54 61 62 6c 65 29  ame != strTable)
e0f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e100: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e120: 20 20 20 20 20 20 20 20 20 73 74 72 43 61 74 61           strCata
e130: 6c 6f 67 20 3d 20 62 61 73 65 43 61 74 61 6c 6f  log = baseCatalo
e140: 67 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  gName;..        
e150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e160: 20 20 20 20 73 74 72 54 61 62 6c 65 20 3d 20 62      strTable = b
e170: 61 73 65 54 61 62 6c 65 4e 61 6d 65 3b 0d 0a 0d  aseTableName;...
e180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 62 6c               tbl
e1a0: 49 6e 64 65 78 65 73 20 3d 20 5f 63 6f 6d 6d 61  Indexes = _comma
e1b0: 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65  nd.Connection.Ge
e1c0: 74 53 63 68 65 6d 61 28 22 49 6e 64 65 78 65 73  tSchema("Indexes
e1d0: 22 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b 5d 20  ", new string[] 
e1e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e200: 20 20 20 62 61 73 65 43 61 74 61 6c 6f 67 4e 61     baseCatalogNa
e210: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
e220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e230: 20 20 20 20 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20       null,..    
e240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e250: 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73 65              base
e260: 54 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  TableName,..    
e270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e280: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
e290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29                })
e2b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e2c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2e0: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
e2f0: 28 44 61 74 61 52 6f 77 20 72 6f 77 49 6e 64 65  (DataRow rowInde
e300: 78 65 73 20 69 6e 20 74 62 6c 49 6e 64 65 78 65  xes in tblIndexe
e310: 73 2e 52 6f 77 73 29 0d 0a 20 20 20 20 20 20 20  s.Rows)..       
e320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e330: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e350: 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 20  tblIndexColumns 
e360: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
e370: 63 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28  ction.GetSchema(
e380: 22 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 22 2c 20  "IndexColumns", 
e390: 6e 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b 0d 0a  new string[] {..
e3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3c0: 62 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 2c  baseCatalogName,
e3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3f0: 20 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20    null,..       
e400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e410: 20 20 20 20 20 20 20 20 20 62 61 73 65 54 61 62           baseTab
e420: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
e430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e440: 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67           (string
e450: 29 72 6f 77 49 6e 64 65 78 65 73 5b 22 49 4e 44  )rowIndexes["IND
e460: 45 58 5f 4e 41 4d 45 22 5d 2c 0d 0a 20 20 20 20  EX_NAME"],..    
e470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e480: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
e490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29                })
e4b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
e4d0: 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f 77 20  oreach (DataRow 
e4e0: 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64 65 78 20 69  rowColumnIndex i
e4f0: 6e 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e  n tblIndexColumn
e500: 73 2e 52 6f 77 73 29 0d 0a 20 20 20 20 20 20 20  s.Rows)..       
e510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e520: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e540: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
e550: 6e 67 2e 43 6f 6d 70 61 72 65 28 53 51 4c 69 74  ng.Compare(SQLit
e560: 65 43 6f 6e 76 65 72 74 2e 47 65 74 53 74 72 69  eConvert.GetStri
e570: 6e 67 4f 72 4e 75 6c 6c 28 72 6f 77 43 6f 6c 75  ngOrNull(rowColu
e580: 6d 6e 49 6e 64 65 78 5b 22 43 4f 4c 55 4d 4e 5f  mnIndex["COLUMN_
e590: 4e 41 4d 45 22 5d 29 2c 20 73 74 72 43 6f 6c 75  NAME"]), strColu
e5a0: 6d 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  mn, StringCompar
e5b0: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
e5c0: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
e5f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e610: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
e620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
e640: 20 42 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 75   BUGFIX: Make su
e650: 72 65 20 74 68 61 74 20 77 65 20 6f 6e 6c 79 20  re that we only 
e660: 66 6c 61 67 20 74 68 69 73 20 63 6f 6c 75 6d 6e  flag this column
e670: 20 61 73 20 22 75 6e 69 71 75 65 22 0d 0a 20 20   as "unique"..  
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6a0: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69 66 20    //         if 
e6b0: 77 65 20 61 72 65 20 6e 6f 74 20 70 72 6f 63 65  we are not proce
e6c0: 73 73 69 6e 67 20 6f 66 20 73 6f 6d 65 20 6b 69  ssing of some ki
e6d0: 6e 64 20 6f 66 20 6d 75 6c 74 69 2d 74 61 62 6c  nd of multi-tabl
e6e0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e700: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
e710: 20 20 63 6f 6e 73 74 72 75 63 74 20 28 69 2e 65    construct (i.e
e720: 2e 20 61 20 6a 6f 69 6e 29 20 62 65 63 61 75 73  . a join) becaus
e730: 65 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 77  e in that case w
e740: 65 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20  e must..        
e750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e760: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
e770: 20 20 20 20 20 20 20 61 6c 6c 6f 77 20 64 75 70         allow dup
e780: 6c 69 63 61 74 65 20 76 61 6c 75 65 73 20 28 72  licate values (r
e790: 65 66 65 72 20 74 6f 20 74 69 63 6b 65 74 20 5b  efer to ticket [
e7a0: 37 65 33 66 61 39 33 37 34 34 5d 29 2e 0d 0a 20  7e3fa93744])... 
e7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7d0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
e800: 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 43  arentToColumns.C
e810: 6f 75 6e 74 20 3d 3d 20 31 20 26 26 20 74 62 6c  ount == 1 && tbl
e820: 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77  IndexColumns.Row
e830: 73 2e 43 6f 75 6e 74 20 3d 3d 20 31 20 26 26 20  s.Count == 1 && 
e840: 61 6c 6c 6f 77 44 62 4e 75 6c 6c 20 3d 3d 20 66  allowDbNull == f
e850: 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  alse)..         
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
e880: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
e890: 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 20 3d  lumn.IsUnique] =
e8a0: 20 72 6f 77 49 6e 64 65 78 65 73 5b 22 55 4e 49   rowIndexes["UNI
e8b0: 51 55 45 22 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  QUE"];....      
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
e8e0: 20 49 66 20 69 74 73 20 61 6e 20 69 6e 74 65 67   If its an integ
e8f0: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 61  er primary key a
e900: 6e 64 20 74 68 65 20 6f 6e 6c 79 20 70 72 69 6d  nd the only prim
e910: 61 72 79 20 6b 65 79 20 69 6e 20 74 68 65 20 74  ary key in the t
e920: 61 62 6c 65 2c 20 74 68 65 6e 20 69 74 73 20 61  able, then its a
e930: 20 72 6f 77 69 64 20 61 6c 69 61 73 20 61 6e 64   rowid alias and
e940: 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
e950: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
e960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e970: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
e980: 20 43 75 72 72 65 6e 74 6c 79 20 63 6f 6d 6d 65   Currently comme
e990: 6e 74 65 64 20 6f 75 74 20 62 65 63 61 75 73 65  nted out because
e9a0: 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 6c 77   this is not alw
e9b0: 61 79 73 20 74 68 65 20 64 65 73 69 72 65 64 20  ays the desired 
e9c0: 62 65 68 61 76 69 6f 72 2e 20 20 46 6f 72 20 65  behavior.  For e
e9d0: 78 61 6d 70 6c 65 2c 20 61 20 31 3a 31 20 72 65  xample, a 1:1 re
e9e0: 6c 61 74 69 6f 6e 73 68 69 70 20 77 69 74 68 0d  lationship with.
e9f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ea00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea10: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 61       //        a
ea20: 6e 6f 74 68 65 72 20 74 61 62 6c 65 2c 20 77 68  nother table, wh
ea30: 65 72 65 20 74 68 65 20 6f 74 68 65 72 20 74 61  ere the other ta
ea40: 62 6c 65 20 69 73 20 61 75 74 6f 69 6e 63 72 65  ble is autoincre
ea50: 6d 65 6e 74 2c 20 62 75 74 20 74 68 69 73 20 6f  ment, but this o
ea60: 6e 65 20 69 73 20 6e 6f 74 2c 20 61 6e 64 20 75  ne is not, and u
ea70: 73 65 73 20 74 68 65 20 72 6f 77 69 64 20 66 72  ses the rowid fr
ea80: 6f 6d 20 74 68 65 20 6f 74 68 65 72 2e 0d 0a 20  om the other... 
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eab0: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 49 74 20     //        It 
eac0: 69 73 20 73 61 66 65 72 20 74 6f 20 6f 6e 6c 79  is safer to only
ead0: 20 73 65 74 20 41 75 74 6f 69 6e 63 72 65 6d 65   set Autoincreme
eae0: 6e 74 20 6f 6e 20 74 61 62 6c 65 73 20 77 68 65  nt on tables whe
eaf0: 72 65 20 77 65 27 72 65 20 53 55 52 45 20 74 68  re we're SURE th
eb00: 65 20 75 73 65 72 20 73 70 65 63 69 66 69 65 64  e user specified
eb10: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20   AUTOINCREMENT, 
eb20: 65 76 65 6e 20 69 66 20 69 74 73 20 61 20 72 6f  even if its a ro
eb30: 77 69 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 0d 0a 20  wid column..... 
eb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb60: 20 20 20 2f 2f 69 66 20 28 74 62 6c 49 6e 64 65     //if (tblInde
eb70: 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f  xColumns.Rows.Co
eb80: 75 6e 74 20 3d 3d 20 31 20 26 26 20 28 62 6f 6f  unt == 1 && (boo
eb90: 6c 29 72 6f 77 49 6e 64 65 78 65 73 5b 22 50 52  l)rowIndexes["PR
eba0: 49 4d 41 52 59 5f 4b 45 59 22 5d 20 3d 3d 20 74  IMARY_KEY"] == t
ebb0: 72 75 65 20 26 26 20 53 74 72 69 6e 67 2e 49 73  rue && String.Is
ebc0: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74 61  NullOrEmpty(data
ebd0: 54 79 70 65 29 20 3d 3d 20 66 61 6c 73 65 20 26  Type) == false &
ebe0: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec00: 20 20 20 20 20 20 20 2f 2f 20 20 53 74 72 69 6e         //  Strin
ec10: 67 2e 43 6f 6d 70 61 72 65 28 64 61 74 61 54 79  g.Compare(dataTy
ec20: 70 65 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 53  pe, "integer", S
ec30: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
ec40: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
ec50: 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
ec60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ec80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eca0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20         //    // 
ecb0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
ecc0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
ecd0: 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20  sAutoIncrement] 
ece0: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
ecf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d               //}
ed10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed30: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed60: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
ed70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
ed80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ed90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
eda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edb0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
edc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
edd0: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
ede0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
edf0: 79 28 64 61 74 61 54 79 70 65 29 29 0d 0a 20 20  y(dataType))..  
ee00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
ee10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ee20: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
ee30: 79 20 61 66 66 69 6e 20 3d 20 54 79 70 65 41 66  y affin = TypeAf
ee40: 66 69 6e 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c  finity.Uninitial
ee50: 69 7a 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  ized;..         
ee60: 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 54             dataT
ee70: 79 70 65 20 3d 20 5f 61 63 74 69 76 65 53 74 61  ype = _activeSta
ee80: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75  tement._sql.Colu
ee90: 6d 6e 54 79 70 65 28 5f 61 63 74 69 76 65 53 74  mnType(_activeSt
eea0: 61 74 65 6d 65 6e 74 2c 20 6e 2c 20 72 65 66 20  atement, n, ref 
eeb0: 61 66 66 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20  affin);..       
eec0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
eee0: 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
eef0: 72 45 6d 70 74 79 28 64 61 74 61 54 79 70 65 29  rEmpty(dataType)
ef00: 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20   == false)..    
ef10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef20: 72 6f 77 5b 22 44 61 74 61 54 79 70 65 4e 61 6d  row["DataTypeNam
ef30: 65 22 5d 20 3d 20 64 61 74 61 54 79 70 65 3b 0d  e"] = dataType;.
ef40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
ef50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 62  ..            tb
ef60: 6c 2e 52 6f 77 73 2e 41 64 64 28 72 6f 77 29 3b  l.Rows.Add(row);
ef70: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
ef80: 20 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49         if (_keyI
ef90: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
efa0: 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e            _keyIn
efb0: 66 6f 2e 41 70 70 65 6e 64 53 63 68 65 6d 61 54  fo.AppendSchemaT
efc0: 61 62 6c 65 28 74 62 6c 29 3b 0d 0a 0d 0a 20 20  able(tbl);....  
efd0: 20 20 20 20 20 20 74 62 6c 2e 41 63 63 65 70 74        tbl.Accept
efe0: 43 68 61 6e 67 65 73 28 29 3b 0d 0a 20 20 20 20  Changes();..    
eff0: 20 20 20 20 74 62 6c 2e 45 6e 64 4c 6f 61 64 44      tbl.EndLoadD
f000: 61 74 61 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ata();....      
f010: 20 20 72 65 74 75 72 6e 20 74 62 6c 3b 0d 0a 20    return tbl;.. 
f020: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
f030: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
f040: 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65  // Retrieves the
f050: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73 74 72   column as a str
f060: 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ing..    /// </s
f070: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
f080: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
f090: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
f0a0: 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d  e column.</param
f0b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
f0c0: 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75  rns>string</retu
f0d0: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
f0e0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
f0f0: 20 47 65 74 53 74 72 69 6e 67 28 69 6e 74 20 69   GetString(int i
f100: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
f110: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
f120: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
f130: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
f140: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
f150: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
f160: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
f170: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
f180: 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53  eCallbacks) == S
f190: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
f1a0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
f1b0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
f1c0: 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  acks)..        {
f1d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
f1e0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
f1f0: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
f200: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
f210: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
f220: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
f230: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
f240: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
f250: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
f260: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
f270: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
f280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
f290: 65 74 53 74 72 69 6e 67 22 2c 20 6e 75 6c 6c 2c  etString", null,
f2a0: 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d   value), out com
f2b0: 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  plete);....     
f2c0: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c         if (compl
f2d0: 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ete)..          
f2e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
f2f0: 75 65 2e 53 74 72 69 6e 67 56 61 6c 75 65 3b 0d  ue.StringValue;.
f300: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
f310: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
f320: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
f330: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
f340: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
f350: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
f360: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 53 74 72   _keyInfo.GetStr
f370: 69 6e 67 28 69 20 2d 20 50 72 69 76 61 74 65 56  ing(i - PrivateV
f380: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
f390: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
f3a0: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
f3b0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
f3c0: 73 2e 4e 6f 56 65 72 69 66 79 54 65 78 74 41 66  s.NoVerifyTextAf
f3d0: 66 69 6e 69 74 79 29 20 21 3d 20 53 51 4c 69 74  finity) != SQLit
f3e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
f3f0: 2e 4e 6f 56 65 72 69 66 79 54 65 78 74 41 66 66  .NoVerifyTextAff
f400: 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20  inity)..        
f410: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
f420: 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29  , DbType.String)
f430: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
f440: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
f450: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78  ment._sql.GetTex
f460: 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  t(_activeStateme
f470: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
f480: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
f490: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
f4a0: 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d  rieves the colum
f4b0: 6e 20 61 73 20 61 6e 20 6f 62 6a 65 63 74 20 63  n as an object c
f4c0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
f4d0: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
f4e0: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 63  atatype of the c
f4f0: 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  olumn..    /// <
f500: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
f510: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
f520: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
f530: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
f540: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
f550: 74 75 72 6e 73 3e 6f 62 6a 65 63 74 3c 2f 72 65  turns>object</re
f560: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
f570: 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65  ic override obje
f580: 63 74 20 47 65 74 56 61 6c 75 65 28 69 6e 74 20  ct GetValue(int 
f590: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
f5a0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
f5b0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
f5c0: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
f5d0: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
f5e0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
f5f0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
f600: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
f610: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
f620: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f630: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
f640: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
f650: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
f660: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
f670: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
f680: 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77  alue value = new
f690: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
f6a0: 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20  rValue();..     
f6b0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70         bool comp
f6c0: 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lete;....       
f6d0: 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56       InvokeReadV
f6e0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20  alueCallback(i, 
f6f0: 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61  new SQLiteReadVa
f700: 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  lueEventArgs(.. 
f710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
f720: 47 65 74 56 61 6c 75 65 22 2c 20 6e 75 6c 6c 2c  GetValue", null,
f730: 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d   value), out com
f740: 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  plete);....     
f750: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c         if (compl
f760: 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ete)..          
f770: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
f780: 75 65 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ue.Value;..     
f790: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f7a0: 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65  if (i >= Private
f7b0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
f7c0: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
f7d0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
f7e0: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
f7f0: 6e 66 6f 2e 47 65 74 56 61 6c 75 65 28 69 20 2d  nfo.GetValue(i -
f800: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
f810: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
f820: 20 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70         SQLiteTyp
f830: 65 20 74 79 70 20 3d 20 47 65 74 53 51 4c 69 74  e typ = GetSQLit
f840: 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 69 29  eType(_flags, i)
f850: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
f860: 28 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69  (((_flags & SQLi
f870: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
f880: 73 2e 44 65 74 65 63 74 54 65 78 74 41 66 66 69  s.DetectTextAffi
f890: 6e 69 74 79 29 20 3d 3d 20 53 51 4c 69 74 65 43  nity) == SQLiteC
f8a0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44  onnectionFlags.D
f8b0: 65 74 65 63 74 54 65 78 74 41 66 66 69 6e 69 74  etectTextAffinit
f8c0: 79 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  y) &&..         
f8d0: 20 20 20 28 28 74 79 70 20 3d 3d 20 6e 75 6c 6c     ((typ == null
f8e0: 29 20 7c 7c 20 28 74 79 70 2e 41 66 66 69 6e 69  ) || (typ.Affini
f8f0: 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69  ty == TypeAffini
f900: 74 79 2e 54 65 78 74 29 29 29 0d 0a 20 20 20 20  ty.Text)))..    
f910: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f920: 20 20 20 74 79 70 20 3d 20 47 65 74 53 51 4c 69     typ = GetSQLi
f930: 74 65 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20  teType(..       
f940: 20 20 20 20 20 20 20 20 20 74 79 70 2c 20 5f 61           typ, _a
f950: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
f960: 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74  sql.GetText(_act
f970: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
f980: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
f990: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
f9a0: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
f9b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
f9c0: 2e 44 65 74 65 63 74 53 74 72 69 6e 67 54 79 70  .DetectStringTyp
f9d0: 65 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  e) == SQLiteConn
f9e0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65  ectionFlags.Dete
f9f0: 63 74 53 74 72 69 6e 67 54 79 70 65 29 20 26 26  ctStringType) &&
fa00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 28  ..            ((
fa10: 74 79 70 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  typ == null) || 
fa20: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 49 73  SQLiteConvert.Is
fa30: 53 74 72 69 6e 67 44 62 54 79 70 65 28 74 79 70  StringDbType(typ
fa40: 2e 54 79 70 65 29 29 29 0d 0a 20 20 20 20 20 20  .Type)))..      
fa50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
fa60: 20 74 79 70 20 3d 20 47 65 74 53 51 4c 69 74 65   typ = GetSQLite
fa70: 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Type(..         
fa80: 20 20 20 20 20 20 20 74 79 70 2c 20 5f 61 63 74         typ, _act
fa90: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
faa0: 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76  l.GetText(_activ
fab0: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b  eStatement, i));
fac0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
fad0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
fae0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
faf0: 73 71 6c 2e 47 65 74 56 61 6c 75 65 28 5f 61 63  sql.GetValue(_ac
fb00: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 5f  tiveStatement, _
fb10: 66 6c 61 67 73 2c 20 69 2c 20 74 79 70 29 3b 0d  flags, i, typ);.
fb20: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
fb30: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
fb40: 20 2f 2f 2f 20 52 65 74 72 65 69 76 65 73 20 74   /// Retreives t
fb50: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 6d 75 6c  he values of mul
fb60: 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 73 2c 20 75  tiple columns, u
fb70: 70 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66  p to the size of
fb80: 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 61 72   the supplied ar
fb90: 72 61 79 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ray..    /// </s
fba0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
fbb0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
fbc0: 6c 75 65 73 22 3e 54 68 65 20 61 72 72 61 79 20  lues">The array 
fbd0: 74 6f 20 66 69 6c 6c 20 77 69 74 68 20 76 61 6c  to fill with val
fbe0: 75 65 73 20 66 72 6f 6d 20 74 68 65 20 63 6f 6c  ues from the col
fbf0: 75 6d 6e 73 20 69 6e 20 74 68 65 20 63 75 72 72  umns in the curr
fc00: 65 6e 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 70  ent resultset</p
fc10: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
fc20: 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62  returns>The numb
fc30: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65  er of columns re
fc40: 74 72 69 65 76 65 64 3c 2f 72 65 74 75 72 6e 73  trieved</returns
fc50: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
fc60: 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 56 61  erride int GetVa
fc70: 6c 75 65 73 28 6f 62 6a 65 63 74 5b 5d 20 76 61  lues(object[] va
fc80: 6c 75 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  lues)..    {..  
fc90: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
fca0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e  d();....      in
fcb0: 74 20 6e 4d 61 78 20 3d 20 46 69 65 6c 64 43 6f  t nMax = FieldCo
fcc0: 75 6e 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  unt;..      if (
fcd0: 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 20 3c 20  values.Length < 
fce0: 6e 4d 61 78 29 20 6e 4d 61 78 20 3d 20 76 61 6c  nMax) nMax = val
fcf0: 75 65 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20  ues.Length;.... 
fd00: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20       for (int n 
fd10: 3d 20 30 3b 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e  = 0; n < nMax; n
fd20: 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ++)..      {..  
fd30: 20 20 20 20 20 20 76 61 6c 75 65 73 5b 6e 5d 20        values[n] 
fd40: 3d 20 47 65 74 56 61 6c 75 65 28 6e 29 3b 0d 0a  = GetValue(n);..
fd50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
fd60: 20 72 65 74 75 72 6e 20 6e 4d 61 78 3b 0d 0a 20   return nMax;.. 
fd70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
fd80: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
fd90: 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 63 6f 6c  // Returns a col
fda0: 6c 65 63 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 69  lection containi
fdb0: 6e 67 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d  ng all the colum
fdc0: 6e 20 6e 61 6d 65 73 20 61 6e 64 20 76 61 6c 75  n names and valu
fdd0: 65 73 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  es for the..    
fde0: 2f 2f 2f 20 63 75 72 72 65 6e 74 20 72 6f 77 20  /// current row 
fdf0: 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65 20 63  of data in the c
fe00: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
fe10: 2c 20 69 66 20 61 6e 79 2e 20 20 49 66 20 74 68  , if any.  If th
fe20: 65 72 65 20 69 73 20 6e 6f 0d 0a 20 20 20 20 2f  ere is no..    /
fe30: 2f 2f 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f  // current row o
fe40: 72 20 6e 6f 20 63 75 72 72 65 6e 74 20 72 65 73  r no current res
fe50: 75 6c 74 73 65 74 2c 20 61 6e 20 65 78 63 65 70  ultset, an excep
fe60: 74 69 6f 6e 20 6d 61 79 20 62 65 20 74 68 72 6f  tion may be thro
fe70: 77 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  wn...    /// </s
fe80: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
fe90: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
fea0: 2f 2f 2f 20 54 68 65 20 63 6f 6c 6c 65 63 74 69  /// The collecti
feb0: 6f 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  on containing th
fec0: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 61 6e  e column name an
fed0: 64 20 76 61 6c 75 65 20 69 6e 66 6f 72 6d 61 74  d value informat
fee0: 69 6f 6e 20 66 6f 72 20 74 68 65 0d 0a 20 20 20  ion for the..   
fef0: 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 72 6f 77   /// current row
ff00: 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65 20   of data in the 
ff10: 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65  current resultse
ff20: 74 20 6f 72 20 6e 75 6c 6c 20 69 66 20 74 68 69  t or null if thi
ff30: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0d 0a 20  s information.. 
ff40: 20 20 20 2f 2f 2f 20 63 61 6e 6e 6f 74 20 62 65     /// cannot be
ff50: 20 6f 62 74 61 69 6e 65 64 2e 0d 0a 20 20 20 20   obtained...    
ff60: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
ff70: 20 20 20 20 70 75 62 6c 69 63 20 4e 61 6d 65 56      public NameV
ff80: 61 6c 75 65 43 6f 6c 6c 65 63 74 69 6f 6e 20 47  alueCollection G
ff90: 65 74 56 61 6c 75 65 73 28 29 0d 0a 20 20 20 20  etValues()..    
ffa0: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
ffb0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
ffc0: 20 20 20 20 20 20 20 69 66 20 28 28 5f 61 63 74         if ((_act
ffd0: 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d 3d 20  iveStatement == 
ffe0: 6e 75 6c 6c 29 20 7c 7c 20 28 5f 61 63 74 69 76  null) || (_activ
fff0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 20  eStatement._sql 
10000 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
10010 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
10020 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
10030 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
10040 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 4d 61  .        int nMa
10050 78 20 3d 20 50 72 69 76 61 74 65 56 69 73 69 62  x = PrivateVisib
10060 6c 65 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20  leFieldCount;.. 
10070 20 20 20 20 20 20 20 4e 61 6d 65 56 61 6c 75 65         NameValue
10080 43 6f 6c 6c 65 63 74 69 6f 6e 20 72 65 73 75 6c  Collection resul
10090 74 20 3d 20 6e 65 77 20 4e 61 6d 65 56 61 6c 75  t = new NameValu
100a0 65 43 6f 6c 6c 65 63 74 69 6f 6e 28 6e 4d 61 78  eCollection(nMax
100b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f  );....        fo
100c0 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20  r (int n = 0; n 
100d0 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20  < nMax; n++)..  
100e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
100f0 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
10100 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d   = _activeStatem
10110 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e  ent._sql.ColumnN
10120 61 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ame(_activeState
10130 6d 65 6e 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20  ment, n);..     
10140 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61         string va
10150 6c 75 65 20 3d 20 5f 61 63 74 69 76 65 53 74 61  lue = _activeSta
10160 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54  tement._sql.GetT
10170 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ext(_activeState
10180 6d 65 6e 74 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20  ment, n);....   
10190 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
101a0 41 64 64 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29  Add(name, value)
101b0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
101c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
101d0 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  esult;..    }...
101e0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
101f0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
10200 72 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20  rns True if the 
10210 72 65 73 75 6c 74 73 65 74 20 68 61 73 20 72 6f  resultset has ro
10220 77 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 66  ws that can be f
10230 65 74 63 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  etched..    /// 
10240 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
10250 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
10260 62 6f 6f 6c 20 48 61 73 52 6f 77 73 0d 0a 20 20  bool HasRows..  
10270 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
10280 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10290 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
102a0 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  ;..        Check
102b0 43 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  Closed();....   
102c0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
102d0 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65   // NOTE: If the
102e0 20 22 73 74 69 63 6b 79 22 20 66 6c 61 67 20 68   "sticky" flag h
102f0 61 73 20 62 65 65 6e 20 73 65 74 2c 20 75 73 65  as been set, use
10300 20 74 68 65 20 6e 65 77 20 62 65 68 61 76 69 6f   the new behavio
10310 72 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  r,..        //  
10320 20 20 20 20 20 77 68 69 63 68 20 72 65 74 75 72       which retur
10330 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  ns non-zero if t
10340 68 65 72 65 20 77 65 72 65 20 65 76 65 72 20 61  here were ever a
10350 6e 79 20 72 6f 77 73 20 69 6e 0d 0a 20 20 20 20  ny rows in..    
10360 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
10370 20 61 73 73 6f 63 69 61 74 65 64 20 72 65 73 75   associated resu
10380 6c 74 20 73 65 74 73 2e 20 20 47 65 6e 65 72 61  lt sets.  Genera
10390 6c 6c 79 2c 20 74 68 69 73 20 66 6c 61 67 20 69  lly, this flag i
103a0 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  s only..        
103b0 2f 2f 20 20 20 20 20 20 20 75 73 65 66 75 6c 20  //       useful 
103c0 77 68 65 6e 20 69 74 20 69 73 20 6e 65 63 65 73  when it is neces
103d0 73 61 72 79 20 74 6f 20 72 65 74 61 69 6e 20 63  sary to retain c
103e0 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74  ompatibility wit
103f0 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  h..        //   
10400 20 20 20 20 6f 74 68 65 72 20 41 44 4f 2e 4e 45      other ADO.NE
10410 54 20 70 72 6f 76 69 64 65 72 73 20 74 68 61 74  T providers that
10420 20 75 73 65 20 74 68 65 73 65 20 73 61 6d 65 20   use these same 
10430 73 65 6d 61 6e 74 69 63 73 20 66 6f 72 0d 0a 20  semantics for.. 
10440 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
10450 74 68 65 20 48 61 73 52 6f 77 73 20 70 72 6f 70  the HasRows prop
10460 65 72 74 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  erty...        /
10470 2f 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  /..        if ((
10480 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
10490 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 53  onnectionFlags.S
104a0 74 69 63 6b 79 48 61 73 52 6f 77 73 29 20 3d 3d  tickyHasRows) ==
104b0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
104c0 6e 46 6c 61 67 73 2e 53 74 69 63 6b 79 48 61 73  nFlags.StickyHas
104d0 52 6f 77 73 29 0d 0a 20 20 20 20 20 20 20 20 20  Rows)..         
104e0 20 72 65 74 75 72 6e 20 28 28 5f 72 65 61 64 69   return ((_readi
104f0 6e 67 53 74 61 74 65 20 21 3d 20 31 29 20 7c 7c  ngState != 1) ||
10500 20 28 5f 73 74 65 70 43 6f 75 6e 74 20 3e 20 30   (_stepCount > 0
10510 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ));....        /
10520 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f  /..        // NO
10530 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65 20  TE: This is the 
10540 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72  default behavior
10550 2e 20 20 49 74 20 72 65 74 75 72 6e 73 20 6e 6f  .  It returns no
10560 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 0d 0a  n-zero only if..
10570 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
10580 20 6d 6f 72 65 20 72 6f 77 73 20 61 72 65 20 61   more rows are a
10590 76 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e 20 61  vailable (i.e. a
105a0 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 52 65 61   call to the Rea
105b0 64 20 6d 65 74 68 6f 64 20 69 73 0d 0a 20 20 20  d method is..   
105c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78       //       ex
105d0 70 65 63 74 65 64 20 74 6f 20 73 75 63 63 65 65  pected to succee
105e0 64 29 2e 20 20 50 72 69 6f 72 20 74 6f 20 74 68  d).  Prior to th
105f0 65 20 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 6f  e introduction o
10600 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  f the..        /
10610 2f 20 20 20 20 20 20 20 22 73 74 69 63 6b 79 22  /       "sticky"
10620 20 66 6c 61 67 2c 20 74 68 69 73 20 69 73 20 68   flag, this is h
10630 6f 77 20 74 68 69 73 20 70 72 6f 70 65 72 74 79  ow this property
10640 20 68 61 73 20 61 6c 77 61 79 73 20 77 6f 72 6b   has always work
10650 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  ed...        //.
10660 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
10670 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 21  (_readingState !
10680 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  = 1);..      }..
10690 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
106a0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
106b0 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75 65  /// Returns True
106c0 20 69 66 20 74 68 65 20 64 61 74 61 20 72 65 61   if the data rea
106d0 64 65 72 20 69 73 20 63 6c 6f 73 65 64 0d 0a 20  der is closed.. 
106e0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
106f0 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
10700 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 43 6c  erride bool IsCl
10710 6f 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  osed..    {..   
10720 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
10730 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
10740 20 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d 20 6e 75   (_command == nu
10750 6c 6c 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d  ll); }..    }...
10760 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
10770 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
10780 72 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20  rns True if the 
10790 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e  specified column
107a0 20 69 73 20 6e 75 6c 6c 0d 0a 20 20 20 20 2f 2f   is null..    //
107b0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
107c0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
107d0 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
107e0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
107f0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
10800 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20 6f 72  <returns>True or
10810 20 46 61 6c 73 65 3c 2f 72 65 74 75 72 6e 73 3e   False</returns>
10820 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
10830 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 44 42 4e  rride bool IsDBN
10840 75 6c 6c 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ull(int i)..    
10850 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
10860 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
10870 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
10880 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
10890 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65  if (i >= Private
108a0 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
108b0 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
108c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
108d0 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
108e0 6e 66 6f 2e 49 73 44 42 4e 75 6c 6c 28 69 20 2d  nfo.IsDBNull(i -
108f0 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
10900 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
10910 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
10920 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
10930 73 71 6c 2e 49 73 4e 75 6c 6c 28 5f 61 63 74 69  sql.IsNull(_acti
10940 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
10950 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
10960 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
10970 20 20 2f 2f 2f 20 4d 6f 76 65 73 20 74 6f 20 74    /// Moves to t
10980 68 65 20 6e 65 78 74 20 72 65 73 75 6c 74 73 65  he next resultse
10990 74 20 69 6e 20 6d 75 6c 74 69 70 6c 65 20 72 6f  t in multiple ro
109a0 77 2d 72 65 74 75 72 6e 69 6e 67 20 53 51 4c 20  w-returning SQL 
109b0 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 2f 2f  command...    //
109c0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
109d0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
109e0 72 75 65 20 69 66 20 74 68 65 20 63 6f 6d 6d 61  rue if the comma
109f0 6e 64 20 77 61 73 20 73 75 63 63 65 73 73 66 75  nd was successfu
10a00 6c 20 61 6e 64 20 61 20 6e 65 77 20 72 65 73 75  l and a new resu
10a10 6c 74 73 65 74 20 69 73 20 61 76 61 69 6c 61 62  ltset is availab
10a20 6c 65 2c 20 46 61 6c 73 65 20 6f 74 68 65 72 77  le, False otherw
10a30 69 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ise.</returns>..
10a40 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
10a50 69 64 65 20 62 6f 6f 6c 20 4e 65 78 74 52 65 73  ide bool NextRes
10a60 75 6c 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ult()..    {..  
10a70 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
10a80 64 28 29 3b 0d 0a 20 20 20 20 20 20 43 68 65 63  d();..      Chec
10a90 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  kClosed();..    
10aa0 20 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69    if (_throwOnDi
10ab0 73 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43 6f  sposed) SQLiteCo
10ac0 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d  mmand.Check(_com
10ad0 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mand);....      
10ae0 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
10af0 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  stmt = null;..  
10b00 20 20 20 20 69 6e 74 20 66 69 65 6c 64 43 6f 75      int fieldCou
10b10 6e 74 3b 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20  nt;..      bool 
10b20 73 63 68 65 6d 61 4f 6e 6c 79 20 3d 20 28 28 5f  schemaOnly = ((_
10b30 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20  commandBehavior 
10b40 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  & CommandBehavio
10b50 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29 20 21 3d  r.SchemaOnly) !=
10b60 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68   0);....      wh
10b70 69 6c 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20  ile (true)..    
10b80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
10b90 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c 20 26 26  (stmt == null &&
10ba0 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
10bb0 74 20 21 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63  t != null && _ac
10bc0 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
10bd0 71 6c 20 21 3d 20 6e 75 6c 6c 20 26 26 20 5f 61  ql != null && _a
10be0 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
10bf0 73 71 6c 2e 49 73 4f 70 65 6e 28 29 29 0d 0a 20  sql.IsOpen()).. 
10c00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10c10 20 20 20 20 2f 2f 20 52 65 73 65 74 20 74 68 65      // Reset the
10c20 20 70 72 65 76 69 6f 75 73 6c 79 2d 65 78 65 63   previously-exec
10c30 75 74 65 64 20 73 74 61 74 65 6d 65 6e 74 0d 0a  uted statement..
10c40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73            if (!s
10c50 63 68 65 6d 61 4f 6e 6c 79 29 20 5f 61 63 74 69  chemaOnly) _acti
10c60 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
10c70 2e 52 65 73 65 74 28 5f 61 63 74 69 76 65 53 74  .Reset(_activeSt
10c80 61 74 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20  atement);....   
10c90 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27         // If we'
10ca0 72 65 20 6f 6e 6c 79 20 73 75 70 70 6f 73 65 64  re only supposed
10cb0 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e   to return a sin
10cc0 67 6c 65 20 72 6f 77 73 65 74 2c 20 73 74 65 70  gle rowset, step
10cd0 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 72 65 6d   through all rem
10ce0 61 69 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  aining statement
10cf0 73 20 6f 6e 63 65 20 75 6e 74 69 6c 0d 0a 20 20  s once until..  
10d00 20 20 20 20 20 20 20 20 2f 2f 20 74 68 65 79 20          // they 
10d10 61 72 65 20 61 6c 6c 20 64 6f 6e 65 20 61 6e 64  are all done and
10d20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 74 6f   return false to
10d30 20 69 6e 64 69 63 61 74 65 20 6e 6f 20 6d 6f 72   indicate no mor
10d40 65 20 72 65 73 75 6c 74 73 65 74 73 20 65 78 69  e resultsets exi
10d50 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 69  st...          i
10d60 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61  f ((_commandBeha
10d70 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65  vior & CommandBe
10d80 68 61 76 69 6f 72 2e 53 69 6e 67 6c 65 52 65 73  havior.SingleRes
10d90 75 6c 74 29 20 21 3d 20 30 29 0d 0a 20 20 20 20  ult) != 0)..    
10da0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10db0 20 20 20 20 20 66 6f 72 20 28 3b 20 3b 20 29 0d       for (; ; ).
10dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
10dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10de0 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 47 65  mt = _command.Ge
10df0 74 53 74 61 74 65 6d 65 6e 74 28 5f 61 63 74 69  tStatement(_acti
10e00 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78  veStatementIndex
10e10 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20   + 1);..        
10e20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d        if (stmt =
10e30 3d 20 6e 75 6c 6c 29 20 62 72 65 61 6b 3b 0d 0a  = null) break;..
10e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 61                _a
10e50 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
10e60 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20  dex++;....      
10e70 20 20 20 20 20 20 20 20 69 66 20 28 21 73 63 68          if (!sch
10e80 65 6d 61 4f 6e 6c 79 20 26 26 20 73 74 6d 74 2e  emaOnly && stmt.
10e90 5f 73 71 6c 2e 53 74 65 70 28 73 74 6d 74 29 29  _sql.Step(stmt))
10ea0 20 5f 73 74 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a   _stepCount++;..
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
10ec0 20 28 73 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75   (stmt._sql.Colu
10ed0 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 20 3d 3d  mnCount(stmt) ==
10ee0 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
10ef0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10f00 20 20 20 20 20 20 69 6e 74 20 63 68 61 6e 67 65        int change
10f10 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  s = 0;..        
10f20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
10f30 64 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  dOnly = false;..
10f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f50 69 66 20 28 73 74 6d 74 2e 54 72 79 47 65 74 43  if (stmt.TryGetC
10f60 68 61 6e 67 65 73 28 72 65 66 20 63 68 61 6e 67  hanges(ref chang
10f70 65 73 2c 20 72 65 66 20 72 65 61 64 4f 6e 6c 79  es, ref readOnly
10f80 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
10f90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10fa0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65           if (!re
10fb0 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20  adOnly)..       
10fc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fe0 20 20 69 66 20 28 5f 72 6f 77 73 41 66 66 65 63    if (_rowsAffec
10ff0 74 65 64 20 3d 3d 20 2d 31 29 20 5f 72 6f 77 73  ted == -1) _rows
11000 41 66 66 65 63 74 65 64 20 3d 20 30 3b 0d 0a 20  Affected = 0;.. 
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11020 20 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64     _rowsAffected
11030 20 2b 3d 20 63 68 61 6e 67 65 73 3b 0d 0a 20 20   += changes;..  
11040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11050 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
11060 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
11070 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
11080 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
110d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
110e0 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c    if (!schemaOnl
110f0 79 29 20 73 74 6d 74 2e 5f 73 71 6c 2e 52 65 73  y) stmt._sql.Res
11100 65 74 28 73 74 6d 74 29 3b 20 2f 2f 20 47 6f 74  et(stmt); // Got
11110 74 61 20 72 65 73 65 74 20 61 66 74 65 72 20 65  ta reset after e
11120 76 65 72 79 20 73 74 65 70 20 74 6f 20 72 65 6c  very step to rel
11130 65 61 73 65 20 61 6e 79 20 6c 6f 63 6b 73 20 61  ease any locks a
11140 6e 64 20 73 75 63 68 21 0d 0a 20 20 20 20 20 20  nd such!..      
11150 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11160 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
11170 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e;..          }.
11180 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
11190 20 20 20 20 20 20 2f 2f 20 47 65 74 20 74 68 65        // Get the
111a0 20 6e 65 78 74 20 73 74 61 74 65 6d 65 6e 74 20   next statement 
111b0 74 6f 20 65 78 65 63 75 74 65 0d 0a 20 20 20 20  to execute..    
111c0 20 20 20 20 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d      stmt = _comm
111d0 61 6e 64 2e 47 65 74 53 74 61 74 65 6d 65 6e 74  and.GetStatement
111e0 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
111f0 74 49 6e 64 65 78 20 2b 20 31 29 3b 0d 0a 0d 0a  tIndex + 1);....
11200 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
11210 27 76 65 20 72 65 61 63 68 65 64 20 74 68 65 20  've reached the 
11220 65 6e 64 20 6f 66 20 74 68 65 20 73 74 61 74 65  end of the state
11230 6d 65 6e 74 73 2c 20 72 65 74 75 72 6e 20 66 61  ments, return fa
11240 6c 73 65 2c 20 6e 6f 20 6d 6f 72 65 20 72 65 73  lse, no more res
11250 75 6c 74 73 65 74 73 0d 0a 20 20 20 20 20 20 20  ultsets..       
11260 20 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c   if (stmt == nul
11270 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  l)..          re
11280 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
11290 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 20         // If we 
112a0 77 65 72 65 20 6f 6e 20 61 20 63 75 72 72 65 6e  were on a curren
112b0 74 20 72 65 73 75 6c 74 73 65 74 2c 20 73 65 74  t resultset, set
112c0 20 74 68 65 20 73 74 61 74 65 20 74 6f 20 22 64   the state to "d
112d0 6f 6e 65 20 72 65 61 64 69 6e 67 22 20 66 6f 72  one reading" for
112e0 20 69 74 0d 0a 20 20 20 20 20 20 20 20 69 66 20   it..        if 
112f0 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3c  (_readingState <
11300 20 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 5f   1)..          _
11310 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31  readingState = 1
11320 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 61 63  ;....        _ac
11330 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64  tiveStatementInd
11340 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ex++;....       
11350 20 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20 73 74   fieldCount = st
11360 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f  mt._sql.ColumnCo
11370 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20  unt(stmt);....  
11380 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20        // If the 
11390 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74  statement is not
113a0 20 61 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d   a select statem
113b0 65 6e 74 20 6f 72 20 77 65 27 72 65 20 6e 6f 74  ent or we're not
113c0 20 72 65 74 72 69 65 76 69 6e 67 20 73 63 68 65   retrieving sche
113d0 6d 61 20 6f 6e 6c 79 2c 20 74 68 65 6e 20 70 65  ma only, then pe
113e0 72 66 6f 72 6d 20 74 68 65 20 69 6e 69 74 69 61  rform the initia
113f0 6c 20 73 74 65 70 0d 0a 20 20 20 20 20 20 20 20  l step..        
11400 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 20  if (!schemaOnly 
11410 7c 7c 20 28 66 69 65 6c 64 43 6f 75 6e 74 20 3d  || (fieldCount =
11420 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  = 0))..        {
11430 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
11440 21 73 63 68 65 6d 61 4f 6e 6c 79 20 26 26 20 73  !schemaOnly && s
11450 74 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28 73 74  tmt._sql.Step(st
11460 6d 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  mt))..          
11470 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  {..            _
11480 73 74 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 20 20  stepCount++;..  
11490 20 20 20 20 20 20 20 20 20 20 5f 72 65 61 64 69            _readi
114a0 6e 67 53 74 61 74 65 20 3d 20 2d 31 3b 0d 0a 20  ngState = -1;.. 
114b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
114c0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 66        else if (f
114d0 69 65 6c 64 43 6f 75 6e 74 20 3d 3d 20 30 29 20  ieldCount == 0) 
114e0 2f 2f 20 4e 6f 20 72 6f 77 73 20 72 65 74 75 72  // No rows retur
114f0 6e 65 64 2c 20 69 66 20 66 69 65 6c 64 43 6f 75  ned, if fieldCou
11500 6e 74 20 69 73 20 7a 65 72 6f 2c 20 73 6b 69 70  nt is zero, skip
11510 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73 74 61   to the next sta
11520 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  tement..        
11530 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11540 20 69 6e 74 20 63 68 61 6e 67 65 73 20 3d 20 30   int changes = 0
11550 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
11560 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 20 3d 20 66  ool readOnly = f
11570 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
11580 20 20 20 69 66 20 28 73 74 6d 74 2e 54 72 79 47     if (stmt.TryG
11590 65 74 43 68 61 6e 67 65 73 28 72 65 66 20 63 68  etChanges(ref ch
115a0 61 6e 67 65 73 2c 20 72 65 66 20 72 65 61 64 4f  anges, ref readO
115b0 6e 6c 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nly))..         
115c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
115d0 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c      if (!readOnl
115e0 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
115f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11600 20 20 20 20 20 69 66 20 28 5f 72 6f 77 73 41 66       if (_rowsAf
11610 66 65 63 74 65 64 20 3d 3d 20 2d 31 29 20 5f 72  fected == -1) _r
11620 6f 77 73 41 66 66 65 63 74 65 64 20 3d 20 30 3b  owsAffected = 0;
11630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11640 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20    _rowsAffected 
11650 2b 3d 20 63 68 61 6e 67 65 73 3b 0d 0a 20 20 20  += changes;..   
11660 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11670 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11680 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
11690 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
116a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
116b0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
116c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
116d0 20 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d        if (!schem
116e0 61 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f 73 71 6c  aOnly) stmt._sql
116f0 2e 52 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 20  .Reset(stmt);.. 
11700 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
11710 6e 75 65 3b 20 2f 2f 20 53 6b 69 70 20 74 68 69  nue; // Skip thi
11720 73 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 6d 6f  s command and mo
11730 76 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20  ve to the next, 
11740 69 74 20 77 61 73 20 6e 6f 74 20 61 20 72 6f 77  it was not a row
11750 2d 72 65 74 75 72 6e 69 6e 67 20 72 65 73 75 6c  -returning resul
11760 74 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20  tset..          
11770 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  }..          els
11780 65 20 2f 2f 20 4e 6f 20 72 6f 77 73 2c 20 66 69  e // No rows, fi
11790 65 6c 64 43 6f 75 6e 74 20 69 73 20 6e 6f 6e 2d  eldCount is non-
117a0 7a 65 72 6f 20 73 6f 20 73 74 6f 70 20 68 65 72  zero so stop her
117b0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  e..          {..
117c0 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 65 61              _rea
117d0 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 20 2f  dingState = 1; /
117e0 2f 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 72  / This command r
117f0 65 74 75 72 6e 65 64 20 63 6f 6c 75 6d 6e 73 20  eturned columns 
11800 62 75 74 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20  but no rows, so 
11810 72 65 74 75 72 6e 20 74 72 75 65 2c 20 62 75 74  return true, but
11820 20 48 61 73 52 6f 77 73 20 3d 20 66 61 6c 73 65   HasRows = false
11830 20 61 6e 64 20 52 65 61 64 28 29 20 72 65 74 75   and Read() retu
11840 72 6e 73 20 66 61 6c 73 65 0d 0a 20 20 20 20 20  rns false..     
11850 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11860 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  }....        // 
11870 41 68 68 2c 20 77 65 20 66 6f 75 6e 64 20 61 20  Ahh, we found a 
11880 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 72 65  row-returning re
11890 73 75 6c 74 73 65 74 20 65 6c 69 67 69 62 6c 65  sultset eligible
118a0 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 21   to be returned!
118b0 0d 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69 76  ..        _activ
118c0 65 53 74 61 74 65 6d 65 6e 74 20 3d 20 73 74 6d  eStatement = stm
118d0 74 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 69 65  t;..        _fie
118e0 6c 64 43 6f 75 6e 74 20 3d 20 66 69 65 6c 64 43  ldCount = fieldC
118f0 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 5f  ount;..        _
11900 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20 6e  fieldIndexes = n
11910 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74  ew Dictionary<st
11920 72 69 6e 67 2c 20 69 6e 74 3e 28 53 74 72 69 6e  ring, int>(Strin
11930 67 43 6f 6d 70 61 72 65 72 2e 4f 72 64 69 6e 61  gComparer.Ordina
11940 6c 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 20  lIgnoreCase);.. 
11950 20 20 20 20 20 20 20 5f 66 69 65 6c 64 54 79 70         _fieldTyp
11960 65 41 72 72 61 79 20 3d 20 6e 65 77 20 53 51 4c  eArray = new SQL
11970 69 74 65 54 79 70 65 5b 50 72 69 76 61 74 65 56  iteType[PrivateV
11980 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
11990 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  ];....        if
119a0 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
119b0 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
119c0 61 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 29 20 21  avior.KeyInfo) !
119d0 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
119e0 4c 6f 61 64 4b 65 79 49 6e 66 6f 28 29 3b 0d 0a  LoadKeyInfo();..
119f0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
11a00 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 7d 0d   true;..      }.
11a10 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
11a20 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
11a30 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
11a40 20 61 74 74 65 6d 70 74 73 20 74 6f 20 71 75 65   attempts to que
11a50 72 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ry the database 
11a60 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63  connection assoc
11a70 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20  iated with..    
11a80 2f 2f 2f 20 74 68 65 20 64 61 74 61 20 72 65 61  /// the data rea
11a90 64 65 72 20 69 6e 20 75 73 65 2e 20 20 49 66 20  der in use.  If 
11aa0 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63  the underlying c
11ab0 6f 6d 6d 61 6e 64 20 6f 72 20 63 6f 6e 6e 65 63  ommand or connec
11ac0 74 69 6f 6e 20 69 73 0d 0a 20 20 20 20 2f 2f 2f  tion is..    ///
11ad0 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 61 20   unavailable, a 
11ae0 6e 75 6c 6c 20 76 61 6c 75 65 20 77 69 6c 6c 20  null value will 
11af0 62 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20  be returned...  
11b00 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
11b10 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
11b20 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
11b30 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65   connection obje
11b40 63 74 20 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20  ct -OR- null if 
11b50 69 74 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  it is unavailabl
11b60 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
11b70 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
11b80 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69  rnal static SQLi
11b90 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 47 65 74  teConnection Get
11ba0 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
11bb0 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
11bc0 65 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72  eader dataReader
11bd0 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
11be0 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d   {..        try.
11bf0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
11c00 20 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61          if (data
11c10 52 65 61 64 65 72 20 21 3d 20 6e 75 6c 6c 29 0d  Reader != null).
11c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
11c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c40 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
11c50 6d 6d 61 6e 64 20 3d 20 64 61 74 61 52 65 61 64  mmand = dataRead
11c60 65 72 2e 5f 63 6f 6d 6d 61 6e 64 3b 0d 0a 0d 0a  er._command;....
11c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c80 69 66 20 28 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e  if (command != n
11c90 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
11ca0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
11cc0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
11cd0 6e 6e 65 63 74 69 6f 6e 20 3d 20 63 6f 6d 6d 61  nnection = comma
11ce0 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 3b 0d 0a  nd.Connection;..
11cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11d00 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63        if (connec
11d10 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  tion != null).. 
11d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f         return co
11d40 6e 6e 65 63 74 69 6f 6e 3b 0d 0a 20 20 20 20 20  nnection;..     
11d50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11d60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11d70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11d80 63 61 74 63 68 20 28 4f 62 6a 65 63 74 44 69 73  catch (ObjectDis
11d90 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 29 0d  posedException).
11da0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
11db0 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
11dc0 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
11dd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
11de0 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 7d  urn null;..    }
11df0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
11e00 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
11e10 65 74 72 69 65 76 65 73 20 74 68 65 20 53 51 4c  etrieves the SQL
11e20 69 74 65 54 79 70 65 20 66 6f 72 20 61 20 67 69  iteType for a gi
11e30 76 65 6e 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 72  ven column and r
11e40 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f  ow value...    /
11e50 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
11e60 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
11e70 6d 65 3d 22 6f 6c 64 54 79 70 65 22 3e 0d 0a 20  me="oldType">.. 
11e80 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69     /// The origi
11e90 6e 61 6c 20 53 51 4c 69 74 65 54 79 70 65 20 73  nal SQLiteType s
11ea0 74 72 75 63 74 75 72 65 2c 20 62 61 73 65 64 20  tructure, based 
11eb0 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 63 6f 6c 75  only on the colu
11ec0 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  mn...    /// </p
11ed0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
11ee0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 65 78 74  param name="text
11ef0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
11f00 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20 6f 66  textual value of
11f10 20 74 68 65 20 63 6f 6c 75 6d 6e 20 66 6f 72 20   the column for 
11f20 61 20 67 69 76 65 6e 20 72 6f 77 2e 0d 0a 20 20  a given row...  
11f30 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
11f40 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
11f50 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 53  >..    /// The S
11f60 51 4c 69 74 65 54 79 70 65 20 73 74 72 75 63 74  QLiteType struct
11f70 75 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ure...    /// </
11f80 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72  returns>..    pr
11f90 69 76 61 74 65 20 53 51 4c 69 74 65 54 79 70 65  ivate SQLiteType
11fa0 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 0d   GetSQLiteType(.
11fb0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 54  .        SQLiteT
11fc0 79 70 65 20 6f 6c 64 54 79 70 65 2c 20 2f 2a 20  ype oldType, /* 
11fd0 50 41 53 53 2d 54 48 52 4f 55 47 48 20 2a 2f 0d  PASS-THROUGH */.
11fe0 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
11ff0 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20 29 0d  text..        ).
12000 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
12010 69 66 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72  if (SQLiteConver
12020 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 4e 75 6c 6c 28  t.LooksLikeNull(
12030 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20  text))..        
12040 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53      return new S
12050 51 4c 69 74 65 54 79 70 65 28 54 79 70 65 41 66  QLiteType(TypeAf
12060 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c 20 44 62 54  finity.Null, DbT
12070 79 70 65 2e 4f 62 6a 65 63 74 29 3b 0d 0a 0d 0a  ype.Object);....
12080 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69          if (SQLi
12090 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c  teConvert.LooksL
120a0 69 6b 65 49 6e 74 36 34 28 74 65 78 74 29 29 0d  ikeInt64(text)).
120b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
120c0 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 54 79  urn new SQLiteTy
120d0 70 65 28 54 79 70 65 41 66 66 69 6e 69 74 79 2e  pe(TypeAffinity.
120e0 49 6e 74 36 34 2c 20 44 62 54 79 70 65 2e 49 6e  Int64, DbType.In
120f0 74 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  t64);....       
12100 20 69 66 20 28 53 51 4c 69 74 65 43 6f 6e 76 65   if (SQLiteConve
12110 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 44 6f 75 62  rt.LooksLikeDoub
12120 6c 65 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20  le(text))..     
12130 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
12140 77 20 53 51 4c 69 74 65 54 79 70 65 28 54 79 70  w SQLiteType(Typ
12150 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65  eAffinity.Double
12160 2c 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29  , DbType.Double)
12170 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
12180 28 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  ((_activeStateme
12190 6e 74 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a  nt != null) &&..
121a0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
121b0 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c  teConvert.LooksL
121c0 69 6b 65 44 61 74 65 54 69 6d 65 28 5f 61 63 74  ikeDateTime(_act
121d0 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
121e0 6c 2c 20 74 65 78 74 29 29 0d 0a 20 20 20 20 20  l, text))..     
121f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12200 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c    return new SQL
12210 69 74 65 54 79 70 65 28 54 79 70 65 41 66 66 69  iteType(TypeAffi
12220 6e 69 74 79 2e 44 61 74 65 54 69 6d 65 2c 20 44  nity.DateTime, D
12230 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29 3b  bType.DateTime);
12240 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
12250 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6f 6c         return ol
12260 64 54 79 70 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  dType;..    }...
12270 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
12280 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  y>..    /// Retr
12290 69 65 76 65 73 20 74 68 65 20 53 51 4c 69 74 65  ieves the SQLite
122a0 54 79 70 65 20 66 6f 72 20 61 20 67 69 76 65 6e  Type for a given
122b0 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 63 61 63   column, and cac
122c0 68 65 73 20 69 74 20 74 6f 20 61 76 6f 69 64 20  hes it to avoid 
122d0 72 65 70 65 74 65 74 69 76 65 20 69 6e 74 65 72  repetetive inter
122e0 6f 70 20 63 61 6c 6c 73 2e 0d 0a 20 20 20 20 2f  op calls...    /
122f0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
12300 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
12310 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66  me="flags">The f
12320 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
12330 77 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20  with the parent 
12340 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
12350 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  t.</param>..    
12360 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
12370 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
12380 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
12390 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
123a0 65 74 75 72 6e 73 3e 41 20 53 51 4c 69 74 65 54  eturns>A SQLiteT
123b0 79 70 65 20 73 74 72 75 63 74 75 72 65 3c 2f 72  ype structure</r
123c0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69  eturns>..    pri
123d0 76 61 74 65 20 53 51 4c 69 74 65 54 79 70 65 20  vate SQLiteType 
123e0 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 53 51  GetSQLiteType(SQ
123f0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
12400 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
12410 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12420 20 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70    SQLiteType typ
12430 20 3d 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72   = _fieldTypeArr
12440 61 79 5b 69 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ay[i];....      
12450 20 20 69 66 20 28 74 79 70 20 3d 3d 20 6e 75 6c    if (typ == nul
12460 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
12470 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 6e             // In
12480 69 74 69 61 6c 69 7a 65 20 74 68 69 73 20 63 6f  itialize this co
12490 6c 75 6d 6e 27 73 20 66 69 65 6c 64 20 74 79 70  lumn's field typ
124a0 65 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20  e instance..    
124b0 20 20 20 20 20 20 20 20 74 79 70 20 3d 20 5f 66          typ = _f
124c0 69 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d  ieldTypeArray[i]
124d0 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70   = new SQLiteTyp
124e0 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e();..        }.
124f0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66  ...        // If
12500 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64   not initialized
12510 2c 20 74 68 65 6e 20 66 65 74 63 68 20 74 68 65  , then fetch the
12520 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e   declared column
12530 20 64 61 74 61 74 79 70 65 20 61 6e 64 20 61 74   datatype and at
12540 74 65 6d 70 74 20 74 6f 20 63 6f 6e 76 65 72 74  tempt to convert
12550 20 69 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   it..        // 
12560 74 6f 20 61 20 6b 6e 6f 77 6e 20 44 62 54 79 70  to a known DbTyp
12570 65 2e 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  e...        if (
12580 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20  typ.Affinity == 
12590 54 79 70 65 41 66 66 69 6e 69 74 79 2e 55 6e 69  TypeAffinity.Uni
125a0 6e 69 74 69 61 6c 69 7a 65 64 29 0d 0a 20 20 20  nitialized)..   
125b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
125c0 20 20 20 20 74 79 70 2e 54 79 70 65 20 3d 20 53      typ.Type = S
125d0 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54 79 70  QLiteConvert.Typ
125e0 65 4e 61 6d 65 54 6f 44 62 54 79 70 65 28 0d 0a  eNameToDbType(..
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12600 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 74 68  GetConnection(th
12610 69 73 29 2c 20 5f 61 63 74 69 76 65 53 74 61 74  is), _activeStat
12620 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d  ement._sql.Colum
12630 6e 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20  nType(..        
12640 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
12650 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 72 65 66  tatement, i, ref
12660 20 74 79 70 2e 41 66 66 69 6e 69 74 79 29 2c 20   typ.Affinity), 
12670 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20  flags);..       
12680 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
12690 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
126a0 20 20 20 20 20 20 20 20 20 74 79 70 2e 41 66 66           typ.Aff
126b0 69 6e 69 74 79 20 3d 20 5f 61 63 74 69 76 65 53  inity = _activeS
126c0 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f  tatement._sql.Co
126d0 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 0d 0a 20  lumnAffinity(.. 
126e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
126f0 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
12700 20 69 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d   i);..        }.
12710 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
12720 6e 20 74 79 70 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  n typ;..    }...
12730 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
12740 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 61 64  y>..    /// Read
12750 73 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 66  s the next row f
12760 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 73 65  rom the resultse
12770 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  t..    /// </sum
12780 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
12790 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20  returns>True if 
127a0 61 20 6e 65 77 20 72 6f 77 20 77 61 73 20 73 75  a new row was su
127b0 63 63 65 73 73 66 75 6c 6c 79 20 6c 6f 61 64 65  ccessfully loade
127c0 64 20 61 6e 64 20 69 73 20 72 65 61 64 79 20 66  d and is ready f
127d0 6f 72 20 70 72 6f 63 65 73 73 69 6e 67 3c 2f 72  or processing</r
127e0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
127f0 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
12800 6c 20 52 65 61 64 28 29 0d 0a 20 20 20 20 7b 0d  l Read()..    {.
12810 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70  .      CheckDisp
12820 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 43  osed();..      C
12830 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
12840 20 20 20 20 20 69 66 20 28 5f 74 68 72 6f 77 4f       if (_throwO
12850 6e 44 69 73 70 6f 73 65 64 29 20 53 51 4c 69 74  nDisposed) SQLit
12860 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f  eCommand.Check(_
12870 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20  command);....   
12880 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64     if ((_command
12890 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61  Behavior & Comma
128a0 6e 64 42 65 68 61 76 69 6f 72 2e 53 63 68 65 6d  ndBehavior.Schem
128b0 61 4f 6e 6c 79 29 20 21 3d 20 30 29 0d 0a 20 20  aOnly) != 0)..  
128c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
128d0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  se;....      if 
128e0 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d  (_readingState =
128f0 3d 20 2d 31 29 20 2f 2f 20 46 69 72 73 74 20 73  = -1) // First s
12900 74 65 70 20 77 61 73 20 61 6c 72 65 61 64 79 20  tep was already 
12910 64 6f 6e 65 20 61 74 20 74 68 65 20 4e 65 78 74  done at the Next
12920 52 65 73 75 6c 74 28 29 20 6c 65 76 65 6c 2c 20  Result() level, 
12930 73 6f 20 64 6f 6e 27 74 20 73 74 65 70 20 61 67  so don't step ag
12940 61 69 6e 2c 20 6a 75 73 74 20 72 65 74 75 72 6e  ain, just return
12950 20 74 72 75 65 2e 0d 0a 20 20 20 20 20 20 7b 0d   true...      {.
12960 0a 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e  .        _readin
12970 67 53 74 61 74 65 20 3d 20 30 3b 0d 0a 20 20 20  gState = 0;..   
12980 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
12990 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
129a0 20 20 65 6c 73 65 20 69 66 20 28 5f 72 65 61 64    else if (_read
129b0 69 6e 67 53 74 61 74 65 20 3d 3d 20 30 29 20 2f  ingState == 0) /
129c0 2f 20 41 63 74 69 76 65 6c 79 20 72 65 61 64 69  / Actively readi
129d0 6e 67 20 72 6f 77 73 0d 0a 20 20 20 20 20 20 7b  ng rows..      {
129e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 44 6f 6e  ..        // Don
129f0 27 74 20 72 65 61 64 20 61 20 6e 65 77 20 72 6f  't read a new ro
12a00 77 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64  w if the command
12a10 20 62 65 68 61 76 69 6f 72 20 64 69 63 74 61 74   behavior dictat
12a20 65 73 20 53 69 6e 67 6c 65 52 6f 77 2e 20 20 57  es SingleRow.  W
12a30 65 27 76 65 20 61 6c 72 65 61 64 79 20 72 65 61  e've already rea
12a40 64 20 74 68 65 20 66 69 72 73 74 20 72 6f 77 2e  d the first row.
12a50 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
12a60 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20  commandBehavior 
12a70 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  & CommandBehavio
12a80 72 2e 53 69 6e 67 6c 65 52 6f 77 29 20 3d 3d 20  r.SingleRow) == 
12a90 30 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  0)..        {.. 
12aa0 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 61 63           if (_ac
12ab0 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
12ac0 71 6c 2e 53 74 65 70 28 5f 61 63 74 69 76 65 53  ql.Step(_activeS
12ad0 74 61 74 65 6d 65 6e 74 29 20 3d 3d 20 74 72 75  tatement) == tru
12ae0 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  e)..          {.
12af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 74  .            _st
12b00 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 0d 0a 20 20  epCount++;....  
12b10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 6b            if (_k
12b20 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
12b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
12b40 6b 65 79 49 6e 66 6f 2e 52 65 73 65 74 28 29 3b  keyInfo.Reset();
12b50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12b60 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
12b70 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
12b80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12b90 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20  _readingState = 
12ba0 31 3b 20 2f 2f 20 46 69 6e 69 73 68 65 64 20 72  1; // Finished r
12bb0 65 61 64 69 6e 67 20 72 6f 77 73 0d 0a 20 20 20  eading rows..   
12bc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
12bd0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
12be0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
12bf0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
12c00 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   Returns the num
12c10 62 65 72 20 6f 66 20 72 6f 77 73 20 61 66 66 65  ber of rows affe
12c20 63 74 65 64 20 62 79 20 74 68 65 20 73 74 61 74  cted by the stat
12c30 65 6d 65 6e 74 20 62 65 69 6e 67 20 65 78 65 63  ement being exec
12c40 75 74 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54  uted...    /// T
12c50 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
12c60 64 20 6d 61 79 20 6e 6f 74 20 62 65 20 61 63 63  d may not be acc
12c70 75 72 61 74 65 20 66 6f 72 20 44 44 4c 20 73 74  urate for DDL st
12c80 61 74 65 6d 65 6e 74 73 2e 20 20 41 6c 73 6f 2c  atements.  Also,
12c90 20 69 74 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 6c   it..    /// wil
12ca0 6c 20 62 65 20 2d 31 20 66 6f 72 20 61 6e 79 20  l be -1 for any 
12cb0 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 64  statement that d
12cc0 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74  oes not modify t
12cd0 68 65 20 64 61 74 61 62 61 73 65 20 28 65 2e 67  he database (e.g
12ce0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 53 45 4c 45 43  ...    /// SELEC
12cf0 54 29 2e 20 20 49 66 20 61 6e 20 6f 74 68 65 72  T).  If an other
12d00 77 69 73 65 20 72 65 61 64 2d 6f 6e 6c 79 20 73  wise read-only s
12d10 74 61 74 65 6d 65 6e 74 20 6d 6f 64 69 66 69 65  tatement modifie
12d20 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a  s the database..
12d30 20 20 20 20 2f 2f 2f 20 69 6e 64 69 72 65 63 74      /// indirect
12d40 6c 79 20 28 65 2e 67 2e 20 76 69 61 20 61 20 76  ly (e.g. via a v
12d50 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 72 20  irtual table or 
12d60 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
12d70 63 74 69 6f 6e 29 2c 20 74 68 65 0d 0a 20 20 20  ction), the..   
12d80 20 2f 2f 2f 20 76 61 6c 75 65 20 72 65 74 75 72   /// value retur
12d90 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ned is undefined
12da0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
12db0 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
12dc0 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52  c override int R
12dd0 65 63 6f 72 64 73 41 66 66 65 63 74 65 64 0d 0a  ecordsAffected..
12de0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
12df0 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
12e00 28 29 3b 20 72 65 74 75 72 6e 20 5f 72 6f 77 73  (); return _rows
12e10 41 66 66 65 63 74 65 64 3b 20 7d 0d 0a 20 20 20  Affected; }..   
12e20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
12e30 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
12e40 20 49 6e 64 65 78 65 72 20 74 6f 20 72 65 74 72   Indexer to retr
12e50 69 65 76 65 20 64 61 74 61 20 66 72 6f 6d 20 61  ieve data from a
12e60 20 63 6f 6c 75 6d 6e 20 67 69 76 65 6e 20 69 74   column given it
12e70 73 20 6e 61 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20  s name..    /// 
12e80 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
12e90 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
12ea0 22 6e 61 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20  "name">The name 
12eb0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
12ec0 20 72 65 74 72 69 65 76 65 20 64 61 74 61 20 66   retrieve data f
12ed0 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  or</param>..    
12ee0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
12ef0 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64   value contained
12f00 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f   in the column</
12f10 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
12f20 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62  blic override ob
12f30 6a 65 63 74 20 74 68 69 73 5b 73 74 72 69 6e 67  ject this[string
12f40 20 6e 61 6d 65 5d 0d 0a 20 20 20 20 7b 0d 0a 20   name]..    {.. 
12f50 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
12f60 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
12f70 72 6e 20 47 65 74 56 61 6c 75 65 28 47 65 74 4f  rn GetValue(GetO
12f80 72 64 69 6e 61 6c 28 6e 61 6d 65 29 29 3b 20 7d  rdinal(name)); }
12f90 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
12fa0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
12fb0 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72 20 74 6f    /// Indexer to
12fc0 20 72 65 74 72 69 65 76 65 20 64 61 74 61 20 66   retrieve data f
12fd0 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 67 69 76  rom a column giv
12fe0 65 6e 20 69 74 73 20 69 0d 0a 20 20 20 20 2f 2f  en its i..    //
12ff0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
13000 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
13010 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
13020 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
13030 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
13040 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 76 61 6c  <returns>The val
13050 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ue contained in 
13060 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75  the column</retu
13070 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
13080 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
13090 20 74 68 69 73 5b 69 6e 74 20 69 5d 0d 0a 20 20   this[int i]..  
130a0 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b    {..      get {
130b0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
130c0 3b 20 72 65 74 75 72 6e 20 47 65 74 56 61 6c 75  ; return GetValu
130d0 65 28 69 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a  e(i); }..    }..
130e0 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
130f0 69 64 20 4c 6f 61 64 4b 65 79 49 6e 66 6f 28 29  id LoadKeyInfo()
13100 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
13110 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
13120 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
13130 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  {..            _
13140 6b 65 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28  keyInfo.Dispose(
13150 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
13160 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b  _keyInfo = null;
13170 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
13180 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 20         _keyInfo 
13190 3d 20 6e 65 77 20 53 51 4c 69 74 65 4b 65 79 52  = new SQLiteKeyR
131a0 65 61 64 65 72 28 5f 63 6f 6d 6d 61 6e 64 2e 43  eader(_command.C
131b0 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 69 73 2c  onnection, this,
131c0 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
131d0 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  t);..    }..  }.
131e0 0a 7d 0d 0a                                      .}..