System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 7f91f4781ccb44992f61da0fb18f626f38b11262:


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 44 65 74 65 72 6d  ..    /// Determ
7d90: 69 6e 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73  ines and returns
7da0: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
7db0: 54 79 70 65 41 66 66 69 6e 69 74 79 22 20 2f 3e  TypeAffinity" />
7dc0: 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f   of the..    ///
7dd0: 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d   specified colum
7de0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
7df0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
7e00: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
7e10: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e  ..    /// The in
7e20: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
7e30: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  n...    /// </pa
7e40: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
7e50: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
7e60: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
7e70: 54 79 70 65 41 66 66 69 6e 69 74 79 22 20 2f 3e  TypeAffinity" />
7e80: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
7e90: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a   the specified..
7ea0: 20 20 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 2c 20      /// column, 
7eb0: 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 2f 2f 2f  if any...    ///
7ec0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
7ed0: 20 70 75 62 6c 69 63 20 54 79 70 65 41 66 66 69   public TypeAffi
7ee0: 6e 69 74 79 20 47 65 74 46 69 65 6c 64 41 66 66  nity GetFieldAff
7ef0: 69 6e 69 74 79 28 69 6e 74 20 69 29 0d 0a 20 20  inity(int i)..  
7f00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
7f10: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
7f20: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
7f30: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
7f40: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
7f50: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
7f60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7f70: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
7f80: 46 69 65 6c 64 41 66 66 69 6e 69 74 79 28 69 20  FieldAffinity(i 
7f90: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
7fa0: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
7fb0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
7fc0: 65 74 53 51 4c 69 74 65 54 79 70 65 28 5f 66 6c  etSQLiteType(_fl
7fd0: 61 67 73 2c 20 69 29 2e 41 66 66 69 6e 69 74 79  ags, i).Affinity
7fe0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7ff0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
8000: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
8010: 68 65 20 2e 4e 45 54 20 74 79 70 65 20 6f 66 20  he .NET type of 
8020: 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 0d 0a  a given column..
8030: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8040: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
8050: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
8060: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
8070: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
8080: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
8090: 79 70 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ype</returns>.. 
80a0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
80b0: 64 65 20 54 79 70 65 20 47 65 74 46 69 65 6c 64  de Type GetField
80c0: 54 79 70 65 28 69 6e 74 20 69 29 0d 0a 20 20 20  Type(int i)..   
80d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
80e0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
80f0: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
8100: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
8110: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
8120: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
8130: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8140: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 46  rn _keyInfo.GetF
8150: 69 65 6c 64 54 79 70 65 28 69 20 2d 20 50 72 69  ieldType(i - Pri
8160: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
8170: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
8180: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
8190: 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79  Convert.SQLiteTy
81a0: 70 65 54 6f 54 79 70 65 28 47 65 74 53 51 4c 69  peToType(GetSQLi
81b0: 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 69  teType(_flags, i
81c0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
81d0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
81e0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
81f0: 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 66   a column as a f
8200: 6c 6f 61 74 20 76 61 6c 75 65 0d 0a 20 20 20 20  loat value..    
8210: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
8220: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
8230: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
8240: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
8250: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
8260: 2f 20 3c 72 65 74 75 72 6e 73 3e 66 6c 6f 61 74  / <returns>float
8270: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
8280: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
8290: 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61 74 28 69  float GetFloat(i
82a0: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
82b0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
82c0: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
82d0: 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d  VerifyForGet();.
82e0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
82f0: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
8300: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
8310: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
8320: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20  ValueCallbacks) 
8330: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8340: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
8350: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
8360: 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20  allbacks)..     
8370: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8380: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
8390: 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20  erValue value = 
83a0: 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65  new SQLiteDataRe
83b0: 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20  aderValue();..  
83c0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
83d0: 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20  omplete;....    
83e0: 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65          InvokeRe
83f0: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28  adValueCallback(
8400: 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61  i, new SQLiteRea
8410: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28  dValueEventArgs(
8420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8430: 20 20 22 47 65 74 46 6c 6f 61 74 22 2c 20 6e 75    "GetFloat", nu
8440: 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20  ll, value), out 
8450: 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20  complete);....  
8460: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
8470: 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20  mplete)..       
8480: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8490: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
84a0: 65 2e 46 6c 6f 61 74 56 61 6c 75 65 20 3d 3d 20  e.FloatValue == 
84b0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
84c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
84d0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
84e0: 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 66 6c  tion("missing fl
84f0: 6f 61 74 20 72 65 74 75 72 6e 20 76 61 6c 75 65  oat return value
8500: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
8510: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 66         return (f
8520: 6c 6f 61 74 29 76 61 6c 75 65 2e 46 6c 6f 61 74  loat)value.Float
8530: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
8540: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
8550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
8560: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
8570: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
8580: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
8590: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
85a0: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
85b0: 47 65 74 46 6c 6f 61 74 28 69 20 2d 20 50 72 69  GetFloat(i - Pri
85c0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
85d0: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
85e0: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
85f0: 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29 3b   DbType.Single);
8600: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
8610: 20 43 6f 6e 76 65 72 74 2e 54 6f 53 69 6e 67 6c   Convert.ToSingl
8620: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
8630: 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c  nt._sql.GetDoubl
8640: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
8650: 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d  nt, i));..    }.
8660: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
8670: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
8680: 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e  turns the column
8690: 20 61 73 20 61 20 47 75 69 64 0d 0a 20 20 20 20   as a Guid..    
86a0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
86b0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
86c0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
86d0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
86e0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
86f0: 2f 20 3c 72 65 74 75 72 6e 73 3e 47 75 69 64 3c  / <returns>Guid<
8700: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
8710: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 47  ublic override G
8720: 75 69 64 20 47 65 74 47 75 69 64 28 69 6e 74 20  uid GetGuid(int 
8730: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
8740: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
8750: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
8760: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
8770: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
8780: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
8790: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
87a0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
87b0: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
87c0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
87d0: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
87e0: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
87f0: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
8800: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
8810: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
8820: 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77  alue value = new
8830: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
8840: 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20  rValue();..     
8850: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70         bool comp
8860: 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lete;....       
8870: 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56       InvokeReadV
8880: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20  alueCallback(i, 
8890: 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61  new SQLiteReadVa
88a0: 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  lueEventArgs(.. 
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
88c0: 47 65 74 47 75 69 64 22 2c 20 6e 75 6c 6c 2c 20  GetGuid", null, 
88d0: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
88e0: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
88f0: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
8900: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
8910: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8920: 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 47 75      if (value.Gu
8930: 69 64 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29  idValue == null)
8940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8950: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
8960: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
8970: 22 6d 69 73 73 69 6e 67 20 67 75 69 64 20 72 65  "missing guid re
8980: 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d  turn value");...
8990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
89a0: 20 72 65 74 75 72 6e 20 28 47 75 69 64 29 76 61   return (Guid)va
89b0: 6c 75 65 2e 47 75 69 64 56 61 6c 75 65 3b 0d 0a  lue.GuidValue;..
89c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
89d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
89e0: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
89f0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
8a00: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
8a10: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
8a20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
8a30: 6b 65 79 49 6e 66 6f 2e 47 65 74 47 75 69 64 28  keyInfo.GetGuid(
8a40: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
8a50: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
8a60: 0d 0a 20 20 20 20 20 20 20 20 54 79 70 65 41 66  ..        TypeAf
8a70: 66 69 6e 69 74 79 20 61 66 66 69 6e 69 74 79 20  finity affinity 
8a80: 3d 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20  = VerifyType(i, 
8a90: 44 62 54 79 70 65 2e 47 75 69 64 29 3b 0d 0a 20  DbType.Guid);.. 
8aa0: 20 20 20 20 20 20 20 69 66 20 28 61 66 66 69 6e         if (affin
8ab0: 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ity == TypeAffin
8ac0: 69 74 79 2e 42 6c 6f 62 29 0d 0a 20 20 20 20 20  ity.Blob)..     
8ad0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8ae0: 20 20 62 79 74 65 5b 5d 20 62 75 66 66 65 72 20    byte[] buffer 
8af0: 3d 20 6e 65 77 20 62 79 74 65 5b 31 36 5d 3b 0d  = new byte[16];.
8b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 61 63  .            _ac
8b10: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
8b20: 71 6c 2e 47 65 74 42 79 74 65 73 28 5f 61 63 74  ql.GetBytes(_act
8b30: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c  iveStatement, i,
8b40: 20 30 2c 20 62 75 66 66 65 72 2c 20 30 2c 20 31   0, buffer, 0, 1
8b50: 36 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  6);..           
8b60: 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64   return new Guid
8b70: 28 62 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20  (buffer);..     
8b80: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
8b90: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
8ba0: 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28  return new Guid(
8bb0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
8bc0: 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61  ._sql.GetText(_a
8bd0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
8be0: 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  i));..    }.... 
8bf0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
8c00: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
8c10: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
8c20: 61 20 73 68 6f 72 74 0d 0a 20 20 20 20 2f 2f 2f  a short..    ///
8c30: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8c40: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
8c50: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
8c60: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
8c70: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
8c80: 72 65 74 75 72 6e 73 3e 49 6e 74 31 36 3c 2f 72  returns>Int16</r
8c90: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
8ca0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74  lic override Int
8cb0: 31 36 20 47 65 74 49 6e 74 31 36 28 69 6e 74 20  16 GetInt16(int 
8cc0: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
8cd0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
8ce0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
8cf0: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
8d00: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
8d10: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
8d20: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
8d30: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
8d40: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
8d50: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8d60: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
8d70: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
8d80: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
8d90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
8da0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
8db0: 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77  alue value = new
8dc0: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
8dd0: 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20  rValue();..     
8de0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70         bool comp
8df0: 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lete;....       
8e00: 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56       InvokeReadV
8e10: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20  alueCallback(i, 
8e20: 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61  new SQLiteReadVa
8e30: 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  lueEventArgs(.. 
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
8e50: 47 65 74 49 6e 74 31 36 22 2c 20 6e 75 6c 6c 2c  GetInt16", null,
8e60: 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d   value), out com
8e70: 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  plete);....     
8e80: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c         if (compl
8e90: 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ete)..          
8ea0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8eb0: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 49       if (value.I
8ec0: 6e 74 31 36 56 61 6c 75 65 20 3d 3d 20 6e 75 6c  nt16Value == nul
8ed0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8ee0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
8ef0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
8f00: 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 31 36  n("missing int16
8f10: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b   return value");
8f20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8f30: 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74 31      return (Int1
8f40: 36 29 76 61 6c 75 65 2e 49 6e 74 31 36 56 61 6c  6)value.Int16Val
8f50: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
8f60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
8f70: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
8f80: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
8f90: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
8fa0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
8fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
8fc0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
8fd0: 49 6e 74 31 36 28 69 20 2d 20 50 72 69 76 61 74  Int16(i - Privat
8fe0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
8ff0: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
9000: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
9010: 54 79 70 65 2e 49 6e 74 31 36 29 3b 0d 0a 20 20  Type.Int16);..  
9020: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
9030: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
9040: 71 6c 2e 47 65 74 49 6e 74 31 36 28 5f 61 63 74  ql.GetInt16(_act
9050: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
9060: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9070: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
9080: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
9090: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61   the column as a
90a0: 6e 20 69 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  n int..    /// <
90b0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
90c0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
90d0: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
90e0: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
90f0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
9100: 74 75 72 6e 73 3e 49 6e 74 33 32 3c 2f 72 65 74  turns>Int32</ret
9110: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
9120: 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 33 32  c override Int32
9130: 20 47 65 74 49 6e 74 33 32 28 69 6e 74 20 69 29   GetInt32(int i)
9140: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
9150: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9160: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
9170: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
9180: 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
9190: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
91a0: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
91b0: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
91c0: 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51  Callbacks) == SQ
91d0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
91e0: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
91f0: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
9200: 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  cks)..        {.
9210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
9220: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
9230: 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53  ue value = new S
9240: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
9250: 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  alue();..       
9260: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65       bool comple
9270: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
9280: 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c     InvokeReadVal
9290: 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65  ueCallback(i, ne
92a0: 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75  w SQLiteReadValu
92b0: 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  eEventArgs(..   
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
92d0: 74 49 6e 74 33 32 22 2c 20 6e 75 6c 6c 2c 20 76  tInt32", null, v
92e0: 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c  alue), out compl
92f0: 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ete);....       
9300: 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74       if (complet
9310: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
9320: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9330: 20 20 20 69 66 20 28 76 61 6c 75 65 2e 49 6e 74     if (value.Int
9340: 33 32 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29  32Value == null)
9350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9360: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
9370: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
9380: 22 6d 69 73 73 69 6e 67 20 69 6e 74 33 32 20 72  "missing int32 r
9390: 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a  eturn value");..
93a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
93b0: 20 20 72 65 74 75 72 6e 20 28 49 6e 74 33 32 29    return (Int32)
93c0: 76 61 6c 75 65 2e 49 6e 74 33 32 56 61 6c 75 65  value.Int32Value
93d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
93e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
93f0: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
9400: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
9410: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
9420: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
9430: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9440: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49 6e  n _keyInfo.GetIn
9450: 74 33 32 28 69 20 2d 20 50 72 69 76 61 74 65 56  t32(i - PrivateV
9460: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
9470: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65  );....        Ve
9480: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
9490: 70 65 2e 49 6e 74 33 32 29 3b 0d 0a 20 20 20 20  pe.Int32);..    
94a0: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
94b0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
94c0: 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74 69 76  .GetInt32(_activ
94d0: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d  eStatement, i);.
94e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
94f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
9500: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
9510: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 6c  he column as a l
9520: 6f 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ong..    /// </s
9530: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
9540: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
9550: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
9560: 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d  e column.</param
9570: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
9580: 72 6e 73 3e 49 6e 74 36 34 3c 2f 72 65 74 75 72  rns>Int64</retur
9590: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
95a0: 6f 76 65 72 72 69 64 65 20 49 6e 74 36 34 20 47  override Int64 G
95b0: 65 74 49 6e 74 36 34 28 69 6e 74 20 69 29 0d 0a  etInt64(int i)..
95c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
95d0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
95e0: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46  .        VerifyF
95f0: 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  orGet();....    
9600: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
9610: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
9620: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
9630: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
9640: 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69  llbacks) == SQLi
9650: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
9660: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
9670: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
9680: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
9690: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
96a0: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
96b0: 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c   value = new SQL
96c0: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
96d0: 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ue();..         
96e0: 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65     bool complete
96f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9700: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
9710: 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20  Callback(i, new 
9720: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45  SQLiteReadValueE
9730: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
9740: 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 49             "GetI
9750: 6e 74 36 34 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c  nt64", null, val
9760: 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74  ue), out complet
9770: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
9780: 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29     if (complete)
9790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
97a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
97b0: 20 69 66 20 28 76 61 6c 75 65 2e 49 6e 74 36 34   if (value.Int64
97c0: 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Value == null)..
97d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97e0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
97f0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d  LiteException("m
9800: 69 73 73 69 6e 67 20 69 6e 74 36 34 20 72 65 74  issing int64 ret
9810: 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a  urn value");....
9820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9830: 72 65 74 75 72 6e 20 28 49 6e 74 36 34 29 76 61  return (Int64)va
9840: 6c 75 65 2e 49 6e 74 36 34 56 61 6c 75 65 3b 0d  lue.Int64Value;.
9850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9860: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9870: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
9880: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
9890: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
98a0: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
98b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
98c0: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49 6e 74 36  _keyInfo.GetInt6
98d0: 34 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  4(i - PrivateVis
98e0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
98f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  ....        Veri
9900: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
9910: 2e 49 6e 74 36 34 29 3b 0d 0a 20 20 20 20 20 20  .Int64);..      
9920: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
9930: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
9940: 65 74 49 6e 74 36 34 28 5f 61 63 74 69 76 65 53  etInt64(_activeS
9950: 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20  tatement, i);.. 
9960: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
9970: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
9980: 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65  // Retrieves the
9990: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   name of the col
99a0: 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  umn..    /// </s
99b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
99c0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
99d0: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
99e0: 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d  e column.</param
99f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
9a00: 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75  rns>string</retu
9a10: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
9a20: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
9a30: 20 47 65 74 4e 61 6d 65 28 69 6e 74 20 69 29 0d   GetName(int i).
9a40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
9a50: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9a60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
9a70: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
9a80: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
9a90: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
9aa0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
9ab0: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
9ac0: 47 65 74 4e 61 6d 65 28 69 20 2d 20 50 72 69 76  GetName(i - Priv
9ad0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
9ae0: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
9af0: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
9b00: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43  Statement._sql.C
9b10: 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63 74 69 76  olumnName(_activ
9b20: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d  eStatement, i);.
9b30: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
9b40: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
9b50: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
9b60: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74   name of the dat
9b70: 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
9b80: 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
9b90: 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20  ied column...   
9ba0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
9bb0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
9bc0: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
9bd0: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
9be0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
9bf0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69  // <returns>stri
9c00: 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  ng</returns>..  
9c10: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
9c20: 47 65 74 44 61 74 61 62 61 73 65 4e 61 6d 65 28  GetDatabaseName(
9c30: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
9c40: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
9c50: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
9c60: 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76     if (i >= Priv
9c70: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
9c80: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
9c90: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
9ca0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
9cb0: 65 79 49 6e 66 6f 2e 47 65 74 44 61 74 61 62 61  eyInfo.GetDataba
9cc0: 73 65 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61  seName(i - Priva
9cd0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
9ce0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
9cf0: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
9d00: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f  tatement._sql.Co
9d10: 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65  lumnDatabaseName
9d20: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
9d30: 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  t, i);..    }...
9d40: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
9d50: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
9d60: 72 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  rns the name of 
9d70: 74 68 65 20 74 61 62 6c 65 20 61 73 73 6f 63 69  the table associ
9d80: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70  ated with the sp
9d90: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d  ecified column..
9da0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
9db0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
9dc0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
9dd0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
9de0: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
9df0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
9e00: 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e  string</returns>
9e10: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72  ..    public str
9e20: 69 6e 67 20 47 65 74 54 61 62 6c 65 4e 61 6d 65  ing GetTableName
9e30: 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
9e40: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
9e50: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
9e60: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
9e70: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
9e80: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
9e90: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
9ea0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
9eb0: 6b 65 79 49 6e 66 6f 2e 47 65 74 54 61 62 6c 65  keyInfo.GetTable
9ec0: 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65  Name(i - Private
9ed0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
9ee0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  t);....        r
9ef0: 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61  eturn _activeSta
9f00: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75  tement._sql.Colu
9f10: 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 5f 61 63 74  mnTableName(_act
9f20: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
9f30: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9f40: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
9f50: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
9f60: 68 65 20 6f 72 69 67 69 6e 61 6c 20 6e 61 6d 65  he original name
9f70: 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65   of the specifie
9f80: 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f  d column...    /
9f90: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
9fa0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
9fb0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
9fc0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
9fd0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
9fe0: 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67   <returns>string
9ff0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
a000: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65  public string Ge
a010: 74 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 69 6e  tOriginalName(in
a020: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
a030: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
a040: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
a050: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
a060: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
a070: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
a080: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a090: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
a0a0: 49 6e 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d  Info.GetName(i -
a0b0: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
a0c0: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
a0d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
a0e0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
a0f0: 73 71 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e  sql.ColumnOrigin
a100: 61 6c 4e 61 6d 65 28 5f 61 63 74 69 76 65 53 74  alName(_activeSt
a110: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20  atement, i);..  
a120: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
a130: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
a140: 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20  / Retrieves the 
a150: 69 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 2c 20 67  i of a column, g
a160: 69 76 65 6e 20 69 74 73 20 6e 61 6d 65 0d 0a 20  iven its name.. 
a170: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
a180: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
a190: 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 54 68  m name="name">Th
a1a0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  e name of the co
a1b0: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
a1c0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
a1d0: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 69  / <returns>The i
a1e0: 6e 74 20 69 20 6f 66 20 74 68 65 20 63 6f 6c 75  nt i of the colu
a1f0: 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  mn</returns>..  
a200: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
a210: 65 20 69 6e 74 20 47 65 74 4f 72 64 69 6e 61 6c  e int GetOrdinal
a220: 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d 0a 20  (string name).. 
a230: 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63     {..      Chec
a240: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
a250: 20 20 20 20 20 20 69 66 20 28 5f 74 68 72 6f 77        if (_throw
a260: 4f 6e 44 69 73 70 6f 73 65 64 29 20 53 51 4c 69  OnDisposed) SQLi
a270: 74 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b 28  teCommand.Check(
a280: 5f 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20  _command);....  
a290: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f      //..      //
a2a0: 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 63 68   NOTE: First, ch
a2b0: 65 63 6b 20 69 66 20 74 68 65 20 63 6f 6c 75 6d  eck if the colum
a2c0: 6e 20 6e 61 6d 65 20 63 61 63 68 65 20 68 61 73  n name cache has
a2d0: 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
a2e0: 64 20 79 65 74 2e 0d 0a 20 20 20 20 20 20 2f 2f  d yet...      //
a2f0: 20 20 20 20 20 20 20 49 66 20 6e 6f 74 2c 20 64         If not, d
a300: 6f 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  o it now...     
a310: 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f   //..      if (_
a320: 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 3d 20  fieldIndexes == 
a330: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  null)..      {..
a340: 20 20 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64            _field
a350: 49 6e 64 65 78 65 73 20 3d 20 6e 65 77 20 44 69  Indexes = new Di
a360: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
a370: 20 69 6e 74 3e 28 0d 0a 20 20 20 20 20 20 20 20   int>(..        
a380: 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
a390: 61 72 65 72 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  arer.OrdinalIgno
a3a0: 72 65 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20  reCase);..      
a3b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20  }....      //.. 
a3c0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 65       // NOTE: Ne
a3d0: 78 74 2c 20 73 65 65 20 69 66 20 74 68 65 20 69  xt, see if the i
a3e0: 6e 64 65 78 20 66 6f 72 20 74 68 65 20 72 65 71  ndex for the req
a3f0: 75 65 73 74 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  uested column na
a400: 6d 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20  me has been..   
a410: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 63 68     //       cach
a420: 65 64 20 61 6c 72 65 61 64 79 2e 20 20 49 66 20  ed already.  If 
a430: 73 6f 2c 20 72 65 74 75 72 6e 20 74 68 65 20 63  so, return the c
a440: 61 63 68 65 64 20 76 61 6c 75 65 2e 20 20 4f 74  ached value.  Ot
a450: 68 65 72 77 69 73 65 2c 0d 0a 20 20 20 20 20 20  herwise,..      
a460: 2f 2f 20 20 20 20 20 20 20 6c 6f 6f 6b 75 70 20  //       lookup 
a470: 74 68 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68  the value and th
a480: 65 6e 20 63 61 63 68 65 20 74 68 65 20 72 65 73  en cache the res
a490: 75 6c 74 20 66 6f 72 20 66 75 74 75 72 65 20 75  ult for future u
a4a0: 73 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20  se...      //.. 
a4b0: 20 20 20 20 20 69 6e 74 20 72 3b 0d 0a 0d 0a 20       int r;.... 
a4c0: 20 20 20 20 20 69 66 20 28 21 5f 66 69 65 6c 64       if (!_field
a4d0: 49 6e 64 65 78 65 73 2e 54 72 79 47 65 74 56 61  Indexes.TryGetVa
a4e0: 6c 75 65 28 6e 61 6d 65 2c 20 6f 75 74 20 72 29  lue(name, out r)
a4f0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
a500: 20 20 20 20 20 20 72 20 3d 20 5f 61 63 74 69 76        r = _activ
a510: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
a520: 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 5f 61 63 74  ColumnIndex(_act
a530: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e 61  iveStatement, na
a540: 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
a550: 20 20 69 66 20 28 72 20 3d 3d 20 2d 31 20 26 26    if (r == -1 &&
a560: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
a570: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
a580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
a590: 20 3d 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4f   = _keyInfo.GetO
a5a0: 72 64 69 6e 61 6c 28 6e 61 6d 65 29 3b 0d 0a 20  rdinal(name);.. 
a5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a5c0: 28 72 20 3e 20 2d 31 29 20 72 20 2b 3d 20 50 72  (r > -1) r += Pr
a5d0: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
a5e0: 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20  dCount;..       
a5f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a600: 20 20 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 2e    _fieldIndexes.
a610: 41 64 64 28 6e 61 6d 65 2c 20 72 29 3b 0d 0a 20  Add(name, r);.. 
a620: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
a630: 72 65 74 75 72 6e 20 72 3b 0d 0a 20 20 20 20 7d  return r;..    }
a640: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
a650: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  mary>..    /// S
a660: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
a670: 6e 20 69 6e 20 53 51 4c 69 74 65 20 69 73 20 64  n in SQLite is d
a680: 69 66 66 69 63 75 6c 74 20 74 6f 20 6d 61 70 20  ifficult to map 
a690: 69 6e 74 6f 20 2e 4e 45 54 20 63 6f 6e 76 65 6e  into .NET conven
a6a0: 74 69 6f 6e 73 2c 20 73 6f 20 61 20 6c 6f 74 20  tions, so a lot 
a6b0: 6f 66 20 77 6f 72 6b 20 6d 75 73 74 20 62 65 20  of work must be 
a6c0: 64 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f  done..    /// to
a6d0: 20 67 61 74 68 65 72 20 74 68 65 20 6e 65 63 65   gather the nece
a6e0: 73 73 61 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f  ssary informatio
a6f0: 6e 20 73 6f 20 69 74 20 63 61 6e 20 62 65 20 72  n so it can be r
a700: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 61 6e  epresented in an
a710: 20 41 44 4f 2e 4e 45 54 20 6d 61 6e 6e 65 72 2e   ADO.NET manner.
a720: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
a730: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
a740: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
a750: 20 44 61 74 61 54 61 62 6c 65 20 63 6f 6e 74 61   DataTable conta
a760: 69 6e 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61  ining the schema
a770: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72   information for
a780: 20 74 68 65 20 61 63 74 69 76 65 20 53 45 4c 45   the active SELE
a790: 43 54 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  CT statement bei
a7a0: 6e 67 20 70 72 6f 63 65 73 73 65 64 2e 3c 2f 72  ng processed.</r
a7b0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
a7c0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 44 61 74  lic override Dat
a7d0: 61 54 61 62 6c 65 20 47 65 74 53 63 68 65 6d 61  aTable GetSchema
a7e0: 54 61 62 6c 65 28 29 0d 0a 20 20 20 20 7b 0d 0a  Table()..    {..
a7f0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
a800: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 72 65  sed();..      re
a810: 74 75 72 6e 20 47 65 74 53 63 68 65 6d 61 54 61  turn GetSchemaTa
a820: 62 6c 65 28 74 72 75 65 2c 20 66 61 6c 73 65 29  ble(true, false)
a830: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
a840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a890: 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6c 75 6d     #region Colum
a8a0: 6e 50 61 72 65 6e 74 20 43 6c 61 73 73 0d 0a 20  nParent Class.. 
a8b0: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
a8c0: 64 20 63 6c 61 73 73 20 43 6f 6c 75 6d 6e 50 61  d class ColumnPa
a8d0: 72 65 6e 74 20 3a 20 49 45 71 75 61 6c 69 74 79  rent : IEquality
a8e0: 43 6f 6d 70 61 72 65 72 3c 43 6f 6c 75 6d 6e 50  Comparer<ColumnP
a8f0: 61 72 65 6e 74 3e 0d 0a 20 20 20 20 7b 0d 0a 20  arent>..    {.. 
a900: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
a910: 75 62 6c 69 63 20 46 69 65 6c 64 73 0d 0a 20 20  ublic Fields..  
a920: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
a930: 69 6e 67 20 44 61 74 61 62 61 73 65 4e 61 6d 65  ing DatabaseName
a940: 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ;..        publi
a950: 63 20 73 74 72 69 6e 67 20 54 61 62 6c 65 4e 61  c string TableNa
a960: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62  me;..        pub
a970: 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  lic string Colum
a980: 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  nName;..        
a990: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
a9a0: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a9f0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
aa00: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
aa10: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 70 75  tors..        pu
aa20: 62 6c 69 63 20 43 6f 6c 75 6d 6e 50 61 72 65 6e  blic ColumnParen
aa30: 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  t()..        {..
aa40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
aa50: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
aa60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
aa70: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
aa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aab0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
aac0: 20 20 20 20 70 75 62 6c 69 63 20 43 6f 6c 75 6d      public Colum
aad0: 6e 50 61 72 65 6e 74 28 0d 0a 20 20 20 20 20 20  nParent(..      
aae0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74        string dat
aaf0: 61 62 61 73 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  abaseName,..    
ab00: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
ab10: 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  ableName,..     
ab20: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
ab30: 6c 75 6d 6e 4e 61 6d 65 0d 0a 20 20 20 20 20 20  lumnName..      
ab40: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
ab50: 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20       : this().. 
ab60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ab70: 20 20 20 20 20 20 74 68 69 73 2e 44 61 74 61 62        this.Datab
ab80: 61 73 65 4e 61 6d 65 20 3d 20 64 61 74 61 62 61  aseName = databa
ab90: 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  seName;..       
aba0: 20 20 20 20 20 74 68 69 73 2e 54 61 62 6c 65 4e       this.TableN
abb0: 61 6d 65 20 3d 20 74 61 62 6c 65 4e 61 6d 65 3b  ame = tableName;
abc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
abd0: 69 73 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 20 3d 20  is.ColumnName = 
abe0: 63 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20  columnName;..   
abf0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
ac00: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
ac10: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ac20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ac60: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
ac70: 20 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61 72   IEqualityCompar
ac80: 65 72 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e  er<ColumnParent>
ac90: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
aca0: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 45 71    public bool Eq
acb0: 75 61 6c 73 28 43 6f 6c 75 6d 6e 50 61 72 65 6e  uals(ColumnParen
acc0: 74 20 78 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e  t x, ColumnParen
acd0: 74 20 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  t y)..        {.
ace0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
acf0: 28 28 78 20 3d 3d 20 6e 75 6c 6c 29 20 26 26 20  ((x == null) && 
ad00: 28 79 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  (y == null))..  
ad10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ad20: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ad30: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
ad40: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ad50: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28        else if ((
ad60: 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 79  x == null) || (y
ad70: 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
ad80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ad90: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
ada0: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
adb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
adc0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
add0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ade0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
adf0: 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 78 2e 44  tring.Equals(x.D
ae00: 61 74 61 62 61 73 65 4e 61 6d 65 2c 20 79 2e 44  atabaseName, y.D
ae10: 61 74 61 62 61 73 65 4e 61 6d 65 2c 0d 0a 20 20  atabaseName,..  
ae20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae30: 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
ae40: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
ae50: 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20  noreCase))..    
ae60: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ae70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae80: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
ae90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aea0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
aeb0: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
aec0: 6e 67 2e 45 71 75 61 6c 73 28 78 2e 54 61 62 6c  ng.Equals(x.Tabl
aed0: 65 4e 61 6d 65 2c 20 79 2e 54 61 62 6c 65 4e 61  eName, y.TableNa
aee0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
af00: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
af10: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
af20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
af30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
af40: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
af50: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
af60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
af70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
af80: 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
af90: 28 78 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 79  (x.ColumnName, y
afa0: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 0d 0a 20 20  .ColumnName,..  
afb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afc0: 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
afd0: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
afe0: 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20  noreCase))..    
aff0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b010: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
b020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b030: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
b040: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
b050: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
b060: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
b070: 0a 20 20 20 20 20 20 20 20 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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
b0d0: 69 63 20 69 6e 74 20 47 65 74 48 61 73 68 43 6f  ic int GetHashCo
b0e0: 64 65 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20  de(ColumnParent 
b0f0: 6f 62 6a 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  obj)..        {.
b100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
b110: 20 72 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a   result = 0;....
b120: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b130: 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26  (obj != null) &&
b140: 20 28 6f 62 6a 2e 44 61 74 61 62 61 73 65 4e 61   (obj.DatabaseNa
b150: 6d 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  me != null))..  
b160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b170: 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e 44 61 74 61  sult ^= obj.Data
b180: 62 61 73 65 4e 61 6d 65 2e 47 65 74 48 61 73 68  baseName.GetHash
b190: 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Code();....     
b1a0: 20 20 20 20 20 20 20 69 66 20 28 28 6f 62 6a 20         if ((obj 
b1b0: 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28 6f 62 6a  != null) && (obj
b1c0: 2e 54 61 62 6c 65 4e 61 6d 65 20 21 3d 20 6e 75  .TableName != nu
b1d0: 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
b1e0: 20 20 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20        result ^= 
b1f0: 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d 65 2e 47 65  obj.TableName.Ge
b200: 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a  tHashCode();....
b210: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b220: 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26  (obj != null) &&
b230: 20 28 6f 62 6a 2e 43 6f 6c 75 6d 6e 4e 61 6d 65   (obj.ColumnName
b240: 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   != null))..    
b250: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
b260: 6c 74 20 5e 3d 20 6f 62 6a 2e 43 6f 6c 75 6d 6e  lt ^= obj.Column
b270: 4e 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65  Name.GetHashCode
b280: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
b290: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
b2a0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
b2b0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
b2c0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
b2d0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
b2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b330: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
b340: 20 76 6f 69 64 20 47 65 74 53 74 61 74 65 6d 65   void GetStateme
b350: 6e 74 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 73 28  ntColumnParents(
b360: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
b370: 42 61 73 65 20 73 71 6c 2c 0d 0a 20 20 20 20 20  Base sql,..     
b380: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
b390: 6e 74 20 73 74 6d 74 2c 0d 0a 20 20 20 20 20 20  nt stmt,..      
b3a0: 20 20 69 6e 74 20 66 69 65 6c 64 43 6f 75 6e 74    int fieldCount
b3b0: 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 44  ,..        ref D
b3c0: 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e  ictionary<Column
b3d0: 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74  Parent, List<int
b3e0: 3e 3e 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  >> parentToColum
b3f0: 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66  ns,..        ref
b400: 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74 2c   Dictionary<int,
b410: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20 63   ColumnParent> c
b420: 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 0d 0a 20  olumnToParent.. 
b430: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
b440: 0a 20 20 20 20 20 20 20 20 69 66 20 28 70 61 72  .        if (par
b450: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 3d 20  entToColumns == 
b460: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
b470: 20 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d     parentToColum
b480: 6e 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e  ns = new Diction
b490: 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ary<ColumnParent
b4a0: 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 28 0d 0a 20  , List<int>>(.. 
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
b4c0: 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28  ew ColumnParent(
b4d0: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ));....        i
b4e0: 66 20 28 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e  f (columnToParen
b4f0: 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
b500: 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f          columnTo
b510: 50 61 72 65 6e 74 20 3d 20 6e 65 77 20 44 69 63  Parent = new Dic
b520: 74 69 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c  tionary<int, Col
b530: 75 6d 6e 50 61 72 65 6e 74 3e 28 29 3b 0d 0a 0d  umnParent>();...
b540: 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e  .        for (in
b550: 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 66 69 65  t n = 0; n < fie
b560: 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0d 0a 20  ldCount; n++).. 
b570: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b580: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74        string dat
b590: 61 62 61 73 65 4e 61 6d 65 20 3d 20 73 71 6c 2e  abaseName = sql.
b5a0: 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61  ColumnDatabaseNa
b5b0: 6d 65 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a 20 20  me(stmt, n);..  
b5c0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
b5d0: 20 74 61 62 6c 65 4e 61 6d 65 20 3d 20 73 71 6c   tableName = sql
b5e0: 2e 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65  .ColumnTableName
b5f0: 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a 20 20 20 20  (stmt, n);..    
b600: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
b610: 6f 6c 75 6d 6e 4e 61 6d 65 20 3d 20 73 71 6c 2e  olumnName = sql.
b620: 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61  ColumnOriginalNa
b630: 6d 65 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a 0d 0a  me(stmt, n);....
b640: 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6c 75              Colu
b650: 6d 6e 50 61 72 65 6e 74 20 6b 65 79 20 3d 20 6e  mnParent key = n
b660: 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28  ew ColumnParent(
b670: 64 61 74 61 62 61 73 65 4e 61 6d 65 2c 20 74 61  databaseName, ta
b680: 62 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c 29 3b 0d  bleName, null);.
b690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6c  .            Col
b6a0: 75 6d 6e 50 61 72 65 6e 74 20 76 61 6c 75 65 20  umnParent value 
b6b0: 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65  = new ColumnPare
b6c0: 6e 74 28 64 61 74 61 62 61 73 65 4e 61 6d 65 2c  nt(databaseName,
b6d0: 20 74 61 62 6c 65 4e 61 6d 65 2c 20 63 6f 6c 75   tableName, colu
b6e0: 6d 6e 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  mnName);....    
b6f0: 20 20 20 20 20 20 20 20 4c 69 73 74 3c 69 6e 74          List<int
b700: 3e 20 69 6e 64 65 78 4c 69 73 74 3b 0d 0a 0d 0a  > indexList;....
b710: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b720: 21 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73  !parentToColumns
b730: 2e 54 72 79 47 65 74 56 61 6c 75 65 28 6b 65 79  .TryGetValue(key
b740: 2c 20 6f 75 74 20 69 6e 64 65 78 4c 69 73 74 29  , out indexList)
b750: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b760: 20 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d     parentToColum
b770: 6e 73 2e 41 64 64 28 6b 65 79 2c 20 6e 65 77 20  ns.Add(key, new 
b780: 4c 69 73 74 3c 69 6e 74 3e 28 6e 65 77 20 69 6e  List<int>(new in
b790: 74 5b 5d 20 7b 20 6e 20 7d 29 29 3b 0d 0a 20 20  t[] { n }));..  
b7a0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
b7b0: 66 20 28 69 6e 64 65 78 4c 69 73 74 20 21 3d 20  f (indexList != 
b7c0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
b7d0: 20 20 20 20 20 20 20 69 6e 64 65 78 4c 69 73 74         indexList
b7e0: 2e 41 64 64 28 6e 29 3b 0d 0a 20 20 20 20 20 20  .Add(n);..      
b7f0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
b800: 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65              pare
b810: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 5b 6b 65 79 5d  ntToColumns[key]
b820: 20 3d 20 6e 65 77 20 4c 69 73 74 3c 69 6e 74 3e   = new List<int>
b830: 28 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 6e 20 7d  (new int[] { n }
b840: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
b850: 20 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74    columnToParent
b860: 2e 41 64 64 28 6e 2c 20 76 61 6c 75 65 29 3b 0d  .Add(n, value);.
b870: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
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 70 72 69 76  ////....    priv
b8e0: 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 43  ate static int C
b8f0: 6f 75 6e 74 50 61 72 65 6e 74 73 28 0d 0a 20 20  ountParents(..  
b900: 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79        Dictionary
b910: 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c  <ColumnParent, L
b920: 69 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74  ist<int>> parent
b930: 54 6f 43 6f 6c 75 6d 6e 73 0d 0a 20 20 20 20 20  ToColumns..     
b940: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
b950: 20 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20       int result 
b960: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 0;....        
b970: 69 66 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75  if (parentToColu
b980: 6d 6e 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mns != null)..  
b990: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b9a0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 43 6f       foreach (Co
b9b0: 6c 75 6d 6e 50 61 72 65 6e 74 20 6b 65 79 20 69  lumnParent key i
b9c0: 6e 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e  n parentToColumn
b9d0: 73 2e 4b 65 79 73 29 0d 0a 20 20 20 20 20 20 20  s.Keys)..       
b9e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b9f0: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
ba00: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
ba10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
ba20: 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
ba30: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
ba40: 67 20 74 61 62 6c 65 4e 61 6d 65 20 3d 20 6b 65  g tableName = ke
ba50: 79 2e 54 61 62 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  y.TableName;....
ba60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba70: 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
ba80: 6c 4f 72 45 6d 70 74 79 28 74 61 62 6c 65 4e 61  lOrEmpty(tableNa
ba90: 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
baa0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
bab0: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
bac0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2b 2b 3b         result++;
bad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bae0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
baf0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
bb00: 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ult;..    }.... 
bb10: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
bb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
bb60: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 44  ..    internal D
bb70: 61 74 61 54 61 62 6c 65 20 47 65 74 53 63 68 65  ataTable GetSche
bb80: 6d 61 54 61 62 6c 65 28 62 6f 6f 6c 20 77 61 6e  maTable(bool wan
bb90: 74 55 6e 69 71 75 65 49 6e 66 6f 2c 20 62 6f 6f  tUniqueInfo, boo
bba0: 6c 20 77 61 6e 74 44 65 66 61 75 6c 74 56 61 6c  l wantDefaultVal
bbb0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
bbc0: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
bbd0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
bbe0: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
bbf0: 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  ) SQLiteCommand.
bc00: 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b  Check(_command);
bc10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  ....        //..
bc20: 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49          // BUGFI
bc30: 58 3a 20 57 65 20 6e 65 65 64 20 74 6f 20 71 75  X: We need to qu
bc40: 69 63 6b 6c 79 20 73 63 61 6e 20 61 6c 6c 20 74  ickly scan all t
bc50: 68 65 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  he fields in the
bc60: 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20   current..      
bc70: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 22 72 65    //         "re
bc80: 73 75 6c 74 20 73 65 74 22 20 74 6f 20 73 65 65  sult set" to see
bc90: 20 68 6f 77 20 6d 61 6e 79 20 64 69 73 74 69 6e   how many distin
bca0: 63 74 20 74 61 62 6c 65 73 20 61 72 65 20 61 63  ct tables are ac
bcb0: 74 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  tually..        
bcc0: 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 76 6f 6c  //         invol
bcd0: 76 65 64 2e 20 20 54 68 69 73 20 69 6e 66 6f 72  ved.  This infor
bce0: 6d 61 74 69 6f 6e 20 69 73 20 6e 65 63 65 73 73  mation is necess
bcf0: 61 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65  ary so that some
bd00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
bd10: 20 20 20 20 20 69 6e 74 65 6c 6c 69 67 65 6e 74       intelligent
bd20: 20 64 65 63 69 73 69 6f 6e 73 20 63 61 6e 20 62   decisions can b
bd30: 65 20 6d 61 64 65 20 77 68 65 6e 20 63 6f 6e 73  e made when cons
bd40: 74 72 75 63 74 69 6e 67 20 74 68 65 0d 0a 20 20  tructing the..  
bd50: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
bd60: 20 6d 65 74 61 64 61 74 61 20 62 65 6c 6f 77 2e   metadata below.
bd70: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 77    For example, w
bd80: 65 20 6e 65 65 64 20 74 6f 20 62 65 20 76 65 72  e need to be ver
bd90: 79 20 63 61 72 65 66 75 6c 0d 0a 20 20 20 20 20  y careful..     
bda0: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 61 62     //         ab
bdb0: 6f 75 74 20 66 6c 61 67 67 69 6e 67 20 61 20 70  out flagging a p
bdc0: 61 72 74 69 63 75 6c 61 72 20 63 6f 6c 75 6d 6e  articular column
bdd0: 20 61 73 20 22 75 6e 69 71 75 65 22 20 6a 75 73   as "unique" jus
bde0: 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  t..        //   
bdf0: 20 20 20 20 20 20 62 65 63 61 75 73 65 20 69 74        because it
be00: 20 77 61 73 20 69 6e 20 69 74 73 20 6f 72 69 67   was in its orig
be10: 69 6e 61 6c 20 75 6e 64 65 72 6c 79 69 6e 67 20  inal underlying 
be20: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0d 0a  database table..
be30: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
be40: 20 20 20 69 66 20 74 68 65 72 65 20 61 72 65 20     if there are 
be50: 6e 6f 77 20 6d 75 6c 74 69 70 6c 65 20 74 61 62  now multiple tab
be60: 6c 65 73 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20  les involved in 
be70: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  the..        // 
be80: 20 20 20 20 20 20 20 20 22 72 65 73 75 6c 74 20          "result 
be90: 73 65 74 22 2e 20 20 53 65 65 20 74 69 63 6b 65  set".  See ticke
bea0: 74 20 5b 37 65 33 66 61 39 33 37 34 34 5d 20 66  t [7e3fa93744] f
beb0: 6f 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 65 64  or more detailed
bec0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
bed0: 20 20 20 20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e       information
bee0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
bef0: 20 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72         Dictionar
bf00: 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20  y<ColumnParent, 
bf10: 4c 69 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e  List<int>> paren
bf20: 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e 75 6c  tToColumns = nul
bf30: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74  l;..        Dict
bf40: 69 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75  ionary<int, Colu
bf50: 6d 6e 50 61 72 65 6e 74 3e 20 63 6f 6c 75 6d 6e  mnParent> column
bf60: 54 6f 50 61 72 65 6e 74 20 3d 20 6e 75 6c 6c 3b  ToParent = null;
bf70: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
bf80: 42 61 73 65 20 73 71 6c 20 3d 20 5f 63 6f 6d 6d  Base sql = _comm
bf90: 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  and.Connection._
bfa0: 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  sql;....        
bfb0: 47 65 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c 75  GetStatementColu
bfc0: 6d 6e 50 61 72 65 6e 74 73 28 0d 0a 20 20 20 20  mnParents(..    
bfd0: 20 20 20 20 20 20 20 20 73 71 6c 2c 20 5f 61 63          sql, _ac
bfe0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 5f  tiveStatement, _
bff0: 66 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a 20 20 20  fieldCount,..   
c000: 20 20 20 20 20 20 20 20 20 72 65 66 20 70 61 72           ref par
c010: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 20 72 65  entToColumns, re
c020: 66 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74  f columnToParent
c030: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 61  );....        Da
c040: 74 61 54 61 62 6c 65 20 74 62 6c 20 3d 20 6e 65  taTable tbl = ne
c050: 77 20 44 61 74 61 54 61 62 6c 65 28 22 53 63 68  w DataTable("Sch
c060: 65 6d 61 54 61 62 6c 65 22 29 3b 0d 0a 20 20 20  emaTable");..   
c070: 20 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 74       DataTable t
c080: 62 6c 49 6e 64 65 78 65 73 20 3d 20 6e 75 6c 6c  blIndexes = null
c090: 3b 0d 0a 20 20 20 20 20 20 20 20 44 61 74 61 54  ;..        DataT
c0a0: 61 62 6c 65 20 74 62 6c 49 6e 64 65 78 43 6f 6c  able tblIndexCol
c0b0: 75 6d 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 44  umns;..        D
c0c0: 61 74 61 52 6f 77 20 72 6f 77 3b 0d 0a 20 20 20  ataRow row;..   
c0d0: 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 6d 70       string temp
c0e0: 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ;..        strin
c0f0: 67 20 73 74 72 43 61 74 61 6c 6f 67 20 3d 20 53  g strCatalog = S
c100: 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20  tring.Empty;..  
c110: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72        string str
c120: 54 61 62 6c 65 20 3d 20 53 74 72 69 6e 67 2e 45  Table = String.E
c130: 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 73  mpty;..        s
c140: 74 72 69 6e 67 20 73 74 72 43 6f 6c 75 6d 6e 20  tring strColumn 
c150: 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  = String.Empty;.
c160: 0a 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 4c  ...        tbl.L
c170: 6f 63 61 6c 65 20 3d 20 43 75 6c 74 75 72 65 49  ocale = CultureI
c180: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
c190: 74 75 72 65 3b 0d 0a 20 20 20 20 20 20 20 20 74  ture;..        t
c1a0: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
c1b0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
c1c0: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70  .ColumnName, typ
c1d0: 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20  eof(String));.. 
c1e0: 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d         tbl.Colum
c1f0: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
c200: 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f  leColumn.ColumnO
c210: 72 64 69 6e 61 6c 2c 20 74 79 70 65 6f 66 28 69  rdinal, typeof(i
c220: 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74  nt));..        t
c230: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
c240: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
c250: 2e 43 6f 6c 75 6d 6e 53 69 7a 65 2c 20 74 79 70  .ColumnSize, typ
c260: 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20  eof(int));..    
c270: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c280: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
c290: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65  olumn.NumericPre
c2a0: 63 69 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 69  cision, typeof(i
c2b0: 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74  nt));..        t
c2c0: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
c2d0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
c2e0: 2e 4e 75 6d 65 72 69 63 53 63 61 6c 65 2c 20 74  .NumericScale, t
c2f0: 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20  ypeof(int));..  
c300: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
c310: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
c320: 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65  eColumn.IsUnique
c330: 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e  , typeof(Boolean
c340: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c  ));..        tbl
c350: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
c360: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49  emaTableColumn.I
c370: 73 4b 65 79 2c 20 74 79 70 65 6f 66 28 42 6f 6f  sKey, typeof(Boo
c380: 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20  lean));..       
c390: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c3a0: 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  (SchemaTableOpti
c3b0: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 53  onalColumn.BaseS
c3c0: 65 72 76 65 72 4e 61 6d 65 2c 20 74 79 70 65 6f  erverName, typeo
c3d0: 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20  f(string));..   
c3e0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c3f0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c400: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42  OptionalColumn.B
c410: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 20  aseCatalogName, 
c420: 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b  typeof(String));
c430: 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f  ..        tbl.Co
c440: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
c450: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
c460: 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65  ColumnName, type
c470: 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20  of(String));..  
c480: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
c490: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
c4a0: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 63 68 65  eColumn.BaseSche
c4b0: 6d 61 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53  maName, typeof(S
c4c0: 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20  tring));..      
c4d0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c4e0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
c4f0: 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d  umn.BaseTableNam
c500: 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67  e, typeof(String
c510: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c  ));..        tbl
c520: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
c530: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44  emaTableColumn.D
c540: 61 74 61 54 79 70 65 2c 20 74 79 70 65 6f 66 28  ataType, typeof(
c550: 54 79 70 65 29 29 3b 0d 0a 20 20 20 20 20 20 20  Type));..       
c560: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c570: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
c580: 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 2c 20  mn.AllowDBNull, 
c590: 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29  typeof(Boolean))
c5a0: 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43  ;..        tbl.C
c5b0: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
c5c0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f  aTableColumn.Pro
c5d0: 76 69 64 65 72 54 79 70 65 2c 20 74 79 70 65 6f  viderType, typeo
c5e0: 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20  f(int));..      
c5f0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c600: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
c610: 75 6d 6e 2e 49 73 41 6c 69 61 73 65 64 2c 20 74  umn.IsAliased, t
c620: 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b  ypeof(Boolean));
c630: 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f  ..        tbl.Co
c640: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
c650: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45 78  TableColumn.IsEx
c660: 70 72 65 73 73 69 6f 6e 2c 20 74 79 70 65 6f 66  pression, typeof
c670: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20  (Boolean));..   
c680: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c690: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c6a0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
c6b0: 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 2c 20  sAutoIncrement, 
c6c0: 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29  typeof(Boolean))
c6d0: 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43  ;..        tbl.C
c6e0: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
c6f0: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
c700: 6c 75 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f  lumn.IsRowVersio
c710: 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  n, typeof(Boolea
c720: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62  n));..        tb
c730: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c740: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
c750: 6c 43 6f 6c 75 6d 6e 2e 49 73 48 69 64 64 65 6e  lColumn.IsHidden
c760: 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e  , typeof(Boolean
c770: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c  ));..        tbl
c780: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
c790: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49  emaTableColumn.I
c7a0: 73 4c 6f 6e 67 2c 20 74 79 70 65 6f 66 28 42 6f  sLong, typeof(Bo
c7b0: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
c7c0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c7d0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
c7e0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65  ionalColumn.IsRe
c7f0: 61 64 4f 6e 6c 79 2c 20 74 79 70 65 6f 66 28 42  adOnly, typeof(B
c800: 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20  oolean));..     
c810: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
c820: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  dd(SchemaTableOp
c830: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 50 72 6f  tionalColumn.Pro
c840: 76 69 64 65 72 53 70 65 63 69 66 69 63 44 61 74  viderSpecificDat
c850: 61 54 79 70 65 2c 20 74 79 70 65 6f 66 28 54 79  aType, typeof(Ty
c860: 70 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74  pe));..        t
c870: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
c880: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
c890: 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74  alColumn.Default
c8a0: 56 61 6c 75 65 2c 20 74 79 70 65 6f 66 28 6f 62  Value, typeof(ob
c8b0: 6a 65 63 74 29 29 3b 0d 0a 20 20 20 20 20 20 20  ject));..       
c8c0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c8d0: 28 22 44 61 74 61 54 79 70 65 4e 61 6d 65 22 2c  ("DataTypeName",
c8e0: 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29   typeof(string))
c8f0: 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43  ;..        tbl.C
c900: 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 43 6f 6c 6c  olumns.Add("Coll
c910: 61 74 69 6f 6e 54 79 70 65 22 2c 20 74 79 70 65  ationType", type
c920: 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20  of(string));..  
c930: 20 20 20 20 20 20 74 62 6c 2e 42 65 67 69 6e 4c        tbl.BeginL
c940: 6f 61 64 44 61 74 61 28 29 3b 0d 0a 0d 0a 20 20  oadData();....  
c950: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e        for (int n
c960: 20 3d 20 30 3b 20 6e 20 3c 20 5f 66 69 65 6c 64   = 0; n < _field
c970: 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0d 0a 20 20 20  Count; n++)..   
c980: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c990: 20 20 20 20 53 51 4c 69 74 65 54 79 70 65 20 73      SQLiteType s
c9a0: 71 6c 54 79 70 65 20 3d 20 47 65 74 53 51 4c 69  qlType = GetSQLi
c9b0: 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 6e  teType(_flags, n
c9c0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c9d0: 20 20 72 6f 77 20 3d 20 74 62 6c 2e 4e 65 77 52    row = tbl.NewR
c9e0: 6f 77 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ow();....       
c9f0: 20 20 20 20 20 44 62 54 79 70 65 20 74 79 70 20       DbType typ 
ca00: 3d 20 73 71 6c 54 79 70 65 2e 54 79 70 65 3b 0d  = sqlType.Type;.
ca10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
ca20: 2f 20 44 65 66 61 75 6c 74 20 73 65 74 74 69 6e  / Default settin
ca30: 67 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  gs for the colum
ca40: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  n..            r
ca50: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
ca60: 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 5d  lumn.ColumnName]
ca70: 20 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0d 0a   = GetName(n);..
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
ca90: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
caa0: 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 5d  n.ColumnOrdinal]
cab0: 20 3d 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20   = n;..         
cac0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
cad0: 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53  leColumn.ColumnS
cae0: 69 7a 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e  ize] = SQLiteCon
caf0: 76 65 72 74 2e 44 62 54 79 70 65 54 6f 43 6f 6c  vert.DbTypeToCol
cb00: 75 6d 6e 53 69 7a 65 28 74 79 70 29 3b 0d 0a 20  umnSize(typ);.. 
cb10: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
cb20: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
cb30: 2e 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f  .NumericPrecisio
cb40: 6e 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65  n] = SQLiteConve
cb50: 72 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65 72  rt.DbTypeToNumer
cb60: 69 63 50 72 65 63 69 73 69 6f 6e 28 74 79 70 29  icPrecision(typ)
cb70: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
cb80: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
cb90: 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c  lumn.NumericScal
cba0: 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65  e] = SQLiteConve
cbb0: 72 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65 72  rt.DbTypeToNumer
cbc0: 69 63 53 63 61 6c 65 28 74 79 70 29 3b 0d 0a 20  icScale(typ);.. 
cbd0: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
cbe0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
cbf0: 2e 50 72 6f 76 69 64 65 72 54 79 70 65 5d 20 3d  .ProviderType] =
cc00: 20 73 71 6c 54 79 70 65 2e 54 79 70 65 3b 0d 0a   sqlType.Type;..
cc10: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
cc20: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
cc30: 6e 2e 49 73 4c 6f 6e 67 5d 20 3d 20 66 61 6c 73  n.IsLong] = fals
cc40: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
cc50: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
cc60: 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c  olumn.AllowDBNul
cc70: 6c 5d 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  l] = true;..    
cc80: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
cc90: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
cca0: 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79  olumn.IsReadOnly
ccb0: 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  ] = false;..    
ccc0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
ccd0: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
cce0: 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69  olumn.IsRowVersi
ccf0: 6f 6e 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  on] = false;..  
cd00: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
cd10: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
cd20: 49 73 55 6e 69 71 75 65 5d 20 3d 20 66 61 6c 73  IsUnique] = fals
cd30: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
cd40: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
cd50: 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20 66  olumn.IsKey] = f
cd60: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
cd70: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
cd80: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
cd90: 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74  .IsAutoIncrement
cda0: 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  ] = false;..    
cdb0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
cdc0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61  maTableColumn.Da
cdd0: 74 61 54 79 70 65 5d 20 3d 20 47 65 74 46 69 65  taType] = GetFie
cde0: 6c 64 54 79 70 65 28 6e 29 3b 0d 0a 20 20 20 20  ldType(n);..    
cdf0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
ce00: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
ce10: 6f 6c 75 6d 6e 2e 49 73 48 69 64 64 65 6e 5d 20  olumn.IsHidden] 
ce20: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
ce30: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
ce40: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
ce50: 53 63 68 65 6d 61 4e 61 6d 65 5d 20 3d 20 5f 62  SchemaName] = _b
ce60: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 3b 0d 0a  aseSchemaName;..
ce70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
ce80: 72 43 6f 6c 75 6d 6e 20 3d 20 63 6f 6c 75 6d 6e  rColumn = column
ce90: 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 43 6f 6c 75  ToParent[n].Colu
cea0: 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  mnName;..       
ceb0: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
cec0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74  IsNullOrEmpty(st
ced0: 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73  rColumn) == fals
cee0: 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  e) row[SchemaTab
cef0: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c  leColumn.BaseCol
cf00: 75 6d 6e 4e 61 6d 65 5d 20 3d 20 73 74 72 43 6f  umnName] = strCo
cf10: 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lumn;....       
cf20: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
cf30: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45 78 70  ableColumn.IsExp
cf40: 72 65 73 73 69 6f 6e 5d 20 3d 20 53 74 72 69 6e  ression] = Strin
cf50: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
cf60: 73 74 72 43 6f 6c 75 6d 6e 29 3b 0d 0a 20 20 20  strColumn);..   
cf70: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
cf80: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49  emaTableColumn.I
cf90: 73 41 6c 69 61 73 65 64 5d 20 3d 20 28 53 74 72  sAliased] = (Str
cfa0: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4e  ing.Compare(GetN
cfb0: 61 6d 65 28 6e 29 2c 20 73 74 72 43 6f 6c 75 6d  ame(n), strColum
cfc0: 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  n, StringCompari
cfd0: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
cfe0: 65 43 61 73 65 29 20 21 3d 20 30 29 3b 0d 0a 0d  eCase) != 0);...
cff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 6d  .            tem
d000: 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65  p = columnToPare
d010: 6e 74 5b 6e 5d 2e 54 61 62 6c 65 4e 61 6d 65 3b  nt[n].TableName;
d020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
d030: 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
d040: 72 45 6d 70 74 79 28 74 65 6d 70 29 20 3d 3d 20  rEmpty(temp) == 
d050: 66 61 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d  false) row[Schem
d060: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
d070: 65 54 61 62 6c 65 4e 61 6d 65 5d 20 3d 20 74 65  eTableName] = te
d080: 6d 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  mp;....         
d090: 20 20 20 74 65 6d 70 20 3d 20 63 6f 6c 75 6d 6e     temp = column
d0a0: 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 44 61 74 61  ToParent[n].Data
d0b0: 62 61 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  baseName;..     
d0c0: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
d0d0: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
d0e0: 74 65 6d 70 29 20 3d 3d 20 66 61 6c 73 65 29 20  temp) == false) 
d0f0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
d100: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61  ptionalColumn.Ba
d110: 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20 3d  seCatalogName] =
d120: 20 74 65 6d 70 3b 0d 0a 0d 0a 20 20 20 20 20 20   temp;....      
d130: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74        string dat
d140: 61 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  aType = null;.. 
d150: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66             // If
d160: 20 77 65 20 68 61 76 65 20 61 20 74 61 62 6c 65   we have a table
d170: 2d 62 6f 75 6e 64 20 63 6f 6c 75 6d 6e 2c 20 65  -bound column, e
d180: 78 74 72 61 63 74 20 74 68 65 20 65 78 74 72 61  xtract the extra
d190: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
d1a0: 6d 20 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  m it..          
d1b0: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
d1c0: 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f  ullOrEmpty(strCo
d1d0: 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29 0d  lumn) == false).
d1e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d200: 73 74 72 69 6e 67 20 62 61 73 65 43 61 74 61 6c  string baseCatal
d210: 6f 67 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e  ogName = String.
d220: 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  Empty;....      
d230: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
d240: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
d250: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65  ionalColumn.Base
d260: 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20 21 3d 20  CatalogName] != 
d270: 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 29 0d 0a 20  DBNull.Value).. 
d280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d290: 20 20 20 62 61 73 65 43 61 74 61 6c 6f 67 4e 61     baseCatalogNa
d2a0: 6d 65 20 3d 20 28 73 74 72 69 6e 67 29 72 6f 77  me = (string)row
d2b0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  [SchemaTableOpti
d2c0: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  onalColumn.BaseC
d2d0: 61 74 61 6c 6f 67 4e 61 6d 65 5d 3b 0d 0a 0d 0a  atalogName];....
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2f0: 73 74 72 69 6e 67 20 62 61 73 65 54 61 62 6c 65  string baseTable
d300: 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 45 6d  Name = String.Em
d310: 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  pty;....        
d320: 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 77 5b          if (row[
d330: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
d340: 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d  n.BaseTableName]
d350: 20 21 3d 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65   != DBNull.Value
d360: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
d370: 20 20 20 20 20 20 20 62 61 73 65 54 61 62 6c 65         baseTable
d380: 4e 61 6d 65 20 3d 20 28 73 74 72 69 6e 67 29 72  Name = (string)r
d390: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
d3a0: 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61  lumn.BaseTableNa
d3b0: 6d 65 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me];....        
d3c0: 20 20 20 20 20 20 20 20 69 66 20 28 73 71 6c 2e          if (sql.
d3d0: 44 6f 65 73 54 61 62 6c 65 45 78 69 73 74 28 62  DoesTableExist(b
d3e0: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 20  aseCatalogName, 
d3f0: 62 61 73 65 54 61 62 6c 65 4e 61 6d 65 29 29 0d  baseTableName)).
d400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d410: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d420: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 62          string b
d430: 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 20 3d 20  aseColumnName = 
d440: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d  String.Empty;...
d450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d460: 20 20 20 20 20 69 66 20 28 72 6f 77 5b 53 63 68       if (row[Sch
d470: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
d480: 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20 21  aseColumnName] !
d490: 3d 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 29 0d  = DBNull.Value).
d4a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d4b0: 20 20 20 20 20 20 20 20 20 62 61 73 65 43 6f 6c           baseCol
d4c0: 75 6d 6e 4e 61 6d 65 20 3d 20 28 73 74 72 69 6e  umnName = (strin
d4d0: 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  g)row[SchemaTabl
d4e0: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75  eColumn.BaseColu
d4f0: 6d 6e 4e 61 6d 65 5d 3b 0d 0a 0d 0a 20 20 20 20  mnName];....    
d500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d510: 73 74 72 69 6e 67 20 63 6f 6c 6c 53 65 71 20 3d  string collSeq =
d520: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
d530: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
d540: 20 62 4e 6f 74 4e 75 6c 6c 20 3d 20 66 61 6c 73   bNotNull = fals
d550: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
d560: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 62 50 72          bool bPr
d570: 69 6d 61 72 79 4b 65 79 20 3d 20 66 61 6c 73 65  imaryKey = false
d580: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
d590: 20 20 20 20 20 20 20 62 6f 6f 6c 20 62 41 75 74         bool bAut
d5a0: 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 66 61 6c  oIncrement = fal
d5b0: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
d5c0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
d5d0: 5d 20 61 72 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20  ] arSize;....   
d5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5f0: 20 2f 2f 20 47 65 74 20 74 68 65 20 63 6f 6c 75   // Get the colu
d600: 6d 6e 20 6d 65 74 61 20 64 61 74 61 0d 0a 20 20  mn meta data..  
d610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d620: 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65    _command.Conne
d630: 63 74 69 6f 6e 2e 5f 73 71 6c 2e 43 6f 6c 75 6d  ction._sql.Colum
d640: 6e 4d 65 74 61 44 61 74 61 28 0d 0a 20 20 20 20  nMetaData(..    
d650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d660: 20 20 20 20 62 61 73 65 43 61 74 61 6c 6f 67 4e      baseCatalogN
d670: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
d680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61                ba
d690: 73 65 54 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20  seTableName,..  
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6b0: 20 20 20 20 20 20 73 74 72 43 6f 6c 75 6d 6e 2c        strColumn,
d6c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d6d0: 20 20 20 20 20 20 20 20 20 20 74 72 75 65 2c 0d            true,.
d6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d6f0: 20 20 20 20 20 20 20 20 20 72 65 66 20 64 61 74           ref dat
d700: 61 54 79 70 65 2c 20 72 65 66 20 63 6f 6c 6c 53  aType, ref collS
d710: 65 71 2c 20 72 65 66 20 62 4e 6f 74 4e 75 6c 6c  eq, ref bNotNull
d720: 2c 20 72 65 66 20 62 50 72 69 6d 61 72 79 4b 65  , ref bPrimaryKe
d730: 79 2c 20 72 65 66 20 62 41 75 74 6f 49 6e 63 72  y, ref bAutoIncr
d740: 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ement);....     
d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d760: 66 20 28 62 4e 6f 74 4e 75 6c 6c 20 7c 7c 20 62  f (bNotNull || b
d770: 50 72 69 6d 61 72 79 4b 65 79 29 20 72 6f 77 5b  PrimaryKey) row[
d780: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
d790: 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d  n.AllowDBNull] =
d7a0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
d7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
d7c0: 6c 20 61 6c 6c 6f 77 44 62 4e 75 6c 6c 20 3d 20  l allowDbNull = 
d7d0: 28 62 6f 6f 6c 29 72 6f 77 5b 53 63 68 65 6d 61  (bool)row[Schema
d7e0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f  TableColumn.Allo
d7f0: 77 44 42 4e 75 6c 6c 5d 3b 0d 0a 0d 0a 20 20 20  wDBNull];....   
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d810: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
d820: 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20  Column.IsKey] = 
d830: 62 50 72 69 6d 61 72 79 4b 65 79 20 26 26 20 43  bPrimaryKey && C
d840: 6f 75 6e 74 50 61 72 65 6e 74 73 28 70 61 72 65  ountParents(pare
d850: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 29 20 3c 3d 20  ntToColumns) <= 
d860: 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
d870: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
d880: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
d890: 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72  olumn.IsAutoIncr
d8a0: 65 6d 65 6e 74 5d 20 3d 20 62 41 75 74 6f 49 6e  ement] = bAutoIn
d8b0: 63 72 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20  crement;..      
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
d8d0: 77 5b 22 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65  w["CollationType
d8e0: 22 5d 20 3d 20 63 6f 6c 6c 53 65 71 3b 0d 0a 0d  "] = collSeq;...
d8f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d900: 20 20 20 20 20 2f 2f 20 46 6f 72 20 74 79 70 65       // For type
d910: 73 20 6c 69 6b 65 20 76 61 72 63 68 61 72 28 35  s like varchar(5
d920: 30 29 20 61 6e 64 20 73 75 63 68 2c 20 65 78 74  0) and such, ext
d930: 72 61 63 74 20 74 68 65 20 73 69 7a 65 0d 0a 20  ract the size.. 
d940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d950: 20 20 20 61 72 53 69 7a 65 20 3d 20 64 61 74 61     arSize = data
d960: 54 79 70 65 2e 53 70 6c 69 74 28 27 28 27 29 3b  Type.Split('(');
d970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d980: 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a 65        if (arSize
d990: 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20  .Length > 1)..  
d9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
d9d0: 61 54 79 70 65 20 3d 20 61 72 53 69 7a 65 5b 30  aType = arSize[0
d9e0: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
d9f0: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 53 69              arSi
da00: 7a 65 20 3d 20 61 72 53 69 7a 65 5b 31 5d 2e 53  ze = arSize[1].S
da10: 70 6c 69 74 28 27 29 27 29 3b 0d 0a 20 20 20 20  plit(')');..    
da20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da30: 20 20 20 20 69 66 20 28 61 72 53 69 7a 65 2e 4c      if (arSize.L
da40: 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20 20 20  ength > 1)..    
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
da70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da80: 20 20 20 61 72 53 69 7a 65 20 3d 20 61 72 53 69     arSize = arSi
da90: 7a 65 5b 30 5d 2e 53 70 6c 69 74 28 27 2c 27 2c  ze[0].Split(',',
daa0: 20 27 2e 27 29 3b 0d 0a 20 20 20 20 20 20 20 20   '.');..        
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dac0: 20 20 20 20 69 66 20 28 73 71 6c 54 79 70 65 2e      if (sqlType.
dad0: 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 42  Type == DbType.B
dae0: 69 6e 61 72 79 20 7c 7c 20 53 51 4c 69 74 65 43  inary || SQLiteC
daf0: 6f 6e 76 65 72 74 2e 49 73 53 74 72 69 6e 67 44  onvert.IsStringD
db00: 62 54 79 70 65 28 73 71 6c 54 79 70 65 2e 54 79  bType(sqlType.Ty
db10: 70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  pe))..          
db20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db50: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
db60: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d  ableColumn.Colum
db70: 6e 53 69 7a 65 5d 20 3d 20 43 6f 6e 76 65 72 74  nSize] = Convert
db80: 2e 54 6f 49 6e 74 33 32 28 61 72 53 69 7a 65 5b  .ToInt32(arSize[
db90: 30 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  0], CultureInfo.
dba0: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
dbb0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
dbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbd0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
dbf0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
dc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc30: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
dc40: 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69  bleColumn.Numeri
dc50: 63 50 72 65 63 69 73 69 6f 6e 5d 20 3d 20 43 6f  cPrecision] = Co
dc60: 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72  nvert.ToInt32(ar
dc70: 53 69 7a 65 5b 30 5d 2c 20 43 75 6c 74 75 72 65  Size[0], Culture
dc80: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
dc90: 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20  lture);..       
dca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcb0: 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 53           if (arS
dcc0: 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d  ize.Length > 1).
dcd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcf0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
dd00: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72  ableColumn.Numer
dd10: 69 63 53 63 61 6c 65 5d 20 3d 20 43 6f 6e 76 65  icScale] = Conve
dd20: 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53 69 7a  rt.ToInt32(arSiz
dd30: 65 5b 31 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66  e[1], CultureInf
dd40: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
dd50: 72 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  re);..          
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd70: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dda0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ddc0: 28 77 61 6e 74 44 65 66 61 75 6c 74 56 61 6c 75  (wantDefaultValu
ddd0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
dde0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ddf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de00: 20 20 20 2f 2f 20 44 65 74 65 72 6d 69 6e 65 20     // Determine 
de10: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
de20: 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  e for the column
de30: 2c 20 77 68 69 63 68 20 73 75 63 6b 73 20 62 65  , which sucks be
de40: 63 61 75 73 65 20 77 65 20 68 61 76 65 20 74 6f  cause we have to
de50: 20 71 75 65 72 79 20 74 68 65 20 73 63 68 65 6d   query the schem
de60: 61 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  a for each colum
de70: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
de80: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
de90: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
dea0: 63 6d 64 54 61 62 6c 65 20 3d 20 6e 65 77 20 53  cmdTable = new S
deb0: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 48 65 6c  QLiteCommand(Hel
dec0: 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
ded0: 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  gFormat(CultureI
dee0: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
def0: 74 75 72 65 2c 20 22 50 52 41 47 4d 41 20 5b 7b  ture, "PRAGMA [{
df00: 30 7d 5d 2e 54 41 42 4c 45 5f 49 4e 46 4f 28 5b  0}].TABLE_INFO([
df10: 7b 31 7d 5d 29 22 2c 0d 0a 20 20 20 20 20 20 20  {1}])",..       
df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df30: 20 20 20 20 20 62 61 73 65 43 61 74 61 6c 6f 67       baseCatalog
df40: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
df50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df60: 20 20 20 62 61 73 65 54 61 62 6c 65 4e 61 6d 65     baseTableName
df70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
df80: 20 20 20 20 20 20 20 20 20 20 29 2c 20 5f 63 6f            ), _co
df90: 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
dfa0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
dfb0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
dfc0: 67 20 28 44 62 44 61 74 61 52 65 61 64 65 72 20  g (DbDataReader 
dfd0: 72 64 54 61 62 6c 65 20 3d 20 63 6d 64 54 61 62  rdTable = cmdTab
dfe0: 6c 65 2e 45 78 65 63 75 74 65 52 65 61 64 65 72  le.ExecuteReader
dff0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
e000: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
e010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e020: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46              // F
e030: 69 6e 64 20 74 68 65 20 6d 61 74 63 68 69 6e 67  ind the matching
e040: 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20   column..       
e050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e060: 20 20 20 20 20 77 68 69 6c 65 20 28 72 64 54 61       while (rdTa
e070: 62 6c 65 2e 52 65 61 64 28 29 29 0d 0a 20 20 20  ble.Read())..   
e080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e090: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e0c0: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 62  String.Compare(b
e0d0: 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 72  aseColumnName, r
e0e0: 64 54 61 62 6c 65 2e 47 65 74 53 74 72 69 6e 67  dTable.GetString
e0f0: 28 31 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  (1), StringCompa
e100: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
e110: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a  oreCase) == 0)..
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e140: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e160: 20 20 20 20 20 20 20 69 66 20 28 72 64 54 61 62         if (rdTab
e170: 6c 65 2e 49 73 44 42 4e 75 6c 6c 28 34 29 20 3d  le.IsDBNull(4) =
e180: 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20  = false)..      
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1b0: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
e1c0: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
e1d0: 44 65 66 61 75 6c 74 56 61 6c 75 65 5d 20 3d 20  DefaultValue] = 
e1e0: 72 64 54 61 62 6c 65 5b 34 5d 3b 0d 0a 0d 0a 20  rdTable[4];.... 
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e210: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
e220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e230: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
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 7d 0d 0a 20 20 20            }..   
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e270: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e280: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
e290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e2a0: 20 20 20 20 20 2f 2f 20 44 65 74 65 72 6d 69 6e       // Determin
e2b0: 65 20 49 73 55 6e 69 71 75 65 20 70 72 6f 70 65  e IsUnique prope
e2c0: 72 6c 79 2c 20 77 68 69 63 68 20 69 73 20 61 20  rly, which is a 
e2d0: 70 61 69 6e 20 69 6e 20 74 68 65 20 62 75 74 74  pain in the butt
e2e0: 21 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  !..             
e2f0: 20 20 20 20 20 20 20 69 66 20 28 77 61 6e 74 55         if (wantU
e300: 6e 69 71 75 65 49 6e 66 6f 29 0d 0a 20 20 20 20  niqueInfo)..    
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e320: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e330: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62             if (b
e340: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 20 21  aseCatalogName !
e350: 3d 20 73 74 72 43 61 74 61 6c 6f 67 20 7c 7c 20  = strCatalog || 
e360: 62 61 73 65 54 61 62 6c 65 4e 61 6d 65 20 21 3d  baseTableName !=
e370: 20 73 74 72 54 61 62 6c 65 29 0d 0a 20 20 20 20   strTable)..    
e380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e390: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3b0: 20 20 20 73 74 72 43 61 74 61 6c 6f 67 20 3d 20     strCatalog = 
e3c0: 62 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 3b  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 73 74                st
e3f0: 72 54 61 62 6c 65 20 3d 20 62 61 73 65 54 61 62  rTable = baseTab
e400: 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
e410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e420: 20 20 20 20 20 20 20 74 62 6c 49 6e 64 65 78 65         tblIndexe
e430: 73 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e  s = _command.Con
e440: 6e 65 63 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d  nection.GetSchem
e450: 61 28 22 49 6e 64 65 78 65 73 22 2c 20 6e 65 77  a("Indexes", new
e460: 20 73 74 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20   string[] {..   
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 20 62 61 73               bas
e490: 65 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 0d 0a 20  eCatalogName,.. 
e4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
e4c0: 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4e0: 20 20 20 20 20 20 62 61 73 65 54 61 62 6c 65 4e        baseTableN
e4f0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e510: 20 20 20 20 20 20 6e 75 6c 6c 0d 0a 20 20 20 20        null..    
e520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e530: 20 20 20 20 20 20 20 20 7d 29 3b 0d 0a 20 20 20          });..   
e540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e550: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
e560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e570: 20 20 66 6f 72 65 61 63 68 20 28 44 61 74 61 52    foreach (DataR
e580: 6f 77 20 72 6f 77 49 6e 64 65 78 65 73 20 69 6e  ow rowIndexes in
e590: 20 74 62 6c 49 6e 64 65 78 65 73 2e 52 6f 77 73   tblIndexes.Rows
e5a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e5b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5d0: 20 20 20 20 20 20 20 20 20 20 74 62 6c 49 6e 64            tblInd
e5e0: 65 78 43 6f 6c 75 6d 6e 73 20 3d 20 5f 63 6f 6d  exColumns = _com
e5f0: 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e  mand.Connection.
e600: 47 65 74 53 63 68 65 6d 61 28 22 49 6e 64 65 78  GetSchema("Index
e610: 43 6f 6c 75 6d 6e 73 22 2c 20 6e 65 77 20 73 74  Columns", new st
e620: 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ring[] {..      
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e640: 20 20 20 20 20 20 20 20 20 20 62 61 73 65 43 61            baseCa
e650: 74 61 6c 6f 67 4e 61 6d 65 2c 0d 0a 20 20 20 20  talogName,..    
e660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e670: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
e680: 2c 0d 0a 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 20 62 61 73 65 54 61 62 6c 65 4e 61 6d 65     baseTableName
e6b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6d0: 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77 49 6e     (string)rowIn
e6e0: 64 65 78 65 73 5b 22 49 4e 44 45 58 5f 4e 41 4d  dexes["INDEX_NAM
e6f0: 45 22 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  E"],..          
e700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e710: 20 20 20 20 20 20 6e 75 6c 6c 0d 0a 20 20 20 20        null..    
e720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e730: 20 20 20 20 20 20 20 20 7d 29 3b 0d 0a 20 20 20          });..   
e740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e750: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
e760: 20 28 44 61 74 61 52 6f 77 20 72 6f 77 43 6f 6c   (DataRow rowCol
e770: 75 6d 6e 49 6e 64 65 78 20 69 6e 20 74 62 6c 49  umnIndex in tblI
e780: 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73  ndexColumns.Rows
e790: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
e7b0: 0d 0a 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 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d    if (String.Com
e7e0: 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 76 65  pare(SQLiteConve
e7f0: 72 74 2e 47 65 74 53 74 72 69 6e 67 4f 72 4e 75  rt.GetStringOrNu
e800: 6c 6c 28 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64 65  ll(rowColumnInde
e810: 78 5b 22 43 4f 4c 55 4d 4e 5f 4e 41 4d 45 22 5d  x["COLUMN_NAME"]
e820: 29 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c 20 53 74  ), strColumn, St
e830: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
e840: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
e850: 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) == 0)..       
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 7b 0d 0a 20 20 20 20           {..    
e880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8a0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
e8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8c0: 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49          // BUGFI
e8d0: 58 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61  X: Make sure tha
e8e0: 74 20 77 65 20 6f 6e 6c 79 20 66 6c 61 67 20 74  t we only flag t
e8f0: 68 69 73 20 63 6f 6c 75 6d 6e 20 61 73 20 22 75  his column as "u
e900: 6e 69 71 75 65 22 0d 0a 20 20 20 20 20 20 20 20  nique"..        
e910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e920: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
e930: 20 20 20 20 20 20 20 69 66 20 77 65 20 61 72 65         if we are
e940: 20 6e 6f 74 20 70 72 6f 63 65 73 73 69 6e 67 20   not processing 
e950: 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20  of some kind of 
e960: 6d 75 6c 74 69 2d 74 61 62 6c 65 0d 0a 20 20 20  multi-table..   
e970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e990: 20 2f 2f 20 20 20 20 20 20 20 20 20 63 6f 6e 73   //         cons
e9a0: 74 72 75 63 74 20 28 69 2e 65 2e 20 61 20 6a 6f  truct (i.e. a jo
e9b0: 69 6e 29 20 62 65 63 61 75 73 65 20 69 6e 20 74  in) because in t
e9c0: 68 61 74 20 63 61 73 65 20 77 65 20 6d 75 73 74  hat case we must
e9d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9f0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
ea00: 20 61 6c 6c 6f 77 20 64 75 70 6c 69 63 61 74 65   allow duplicate
ea10: 20 76 61 6c 75 65 73 20 28 72 65 66 65 72 20 74   values (refer t
ea20: 6f 20 74 69 63 6b 65 74 20 5b 37 65 33 66 61 39  o ticket [7e3fa9
ea30: 33 37 34 34 5d 29 2e 0d 0a 20 20 20 20 20 20 20  3744])...       
ea40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
ea60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea80: 20 20 20 20 20 69 66 20 28 70 61 72 65 6e 74 54       if (parentT
ea90: 6f 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 20 3d  oColumns.Count =
eaa0: 3d 20 31 20 26 26 20 74 62 6c 49 6e 64 65 78 43  = 1 && tblIndexC
eab0: 6f 6c 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e  olumns.Rows.Coun
eac0: 74 20 3d 3d 20 31 20 26 26 20 61 6c 6c 6f 77 44  t == 1 && allowD
ead0: 62 4e 75 6c 6c 20 3d 3d 20 66 61 6c 73 65 29 0d  bNull == false).
eae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb00: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
eb10: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49  emaTableColumn.I
eb20: 73 55 6e 69 71 75 65 5d 20 3d 20 72 6f 77 49 6e  sUnique] = rowIn
eb30: 64 65 78 65 73 5b 22 55 4e 49 51 55 45 22 5d 3b  dexes["UNIQUE"];
eb40: 0d 0a 0d 0a 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 20 20 20 20 20 2f 2f 20 49 66 20 69 74          // If it
eb70: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  s an integer pri
eb80: 6d 61 72 79 20 6b 65 79 20 61 6e 64 20 74 68 65  mary key and the
eb90: 20 6f 6e 6c 79 20 70 72 69 6d 61 72 79 20 6b 65   only primary ke
eba0: 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20  y in the table, 
ebb0: 74 68 65 6e 20 69 74 73 20 61 20 72 6f 77 69 64  then its a rowid
ebc0: 20 61 6c 69 61 73 20 61 6e 64 20 69 73 20 61 75   alias and is au
ebd0: 74 6f 69 6e 63 72 65 6d 65 6e 74 0d 0a 20 20 20  toincrement..   
ebe0: 20 20 20 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 2f 2f 20 4e 4f 54 45 3a 20 20 43 75 72 72 65   // NOTE:  Curre
ec10: 6e 74 6c 79 20 63 6f 6d 6d 65 6e 74 65 64 20 6f  ntly commented o
ec20: 75 74 20 62 65 63 61 75 73 65 20 74 68 69 73 20  ut because this 
ec30: 69 73 20 6e 6f 74 20 61 6c 77 61 79 73 20 74 68  is not always th
ec40: 65 20 64 65 73 69 72 65 64 20 62 65 68 61 76 69  e desired behavi
ec50: 6f 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  or.  For example
ec60: 2c 20 61 20 31 3a 31 20 72 65 6c 61 74 69 6f 6e  , a 1:1 relation
ec70: 73 68 69 70 20 77 69 74 68 0d 0a 20 20 20 20 20  ship with..     
ec80: 20 20 20 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 2f                 /
eca0: 2f 20 20 20 20 20 20 20 20 61 6e 6f 74 68 65 72  /        another
ecb0: 20 74 61 62 6c 65 2c 20 77 68 65 72 65 20 74 68   table, where th
ecc0: 65 20 6f 74 68 65 72 20 74 61 62 6c 65 20 69 73  e other table is
ecd0: 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 2c 20   autoincrement, 
ece0: 62 75 74 20 74 68 69 73 20 6f 6e 65 20 69 73 20  but this one is 
ecf0: 6e 6f 74 2c 20 61 6e 64 20 75 73 65 73 20 74 68  not, and uses th
ed00: 65 20 72 6f 77 69 64 20 66 72 6f 6d 20 74 68 65  e rowid from the
ed10: 20 6f 74 68 65 72 2e 0d 0a 20 20 20 20 20 20 20   other...       
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 20 20 20 20 20 2f 2f 20               // 
ed40: 20 20 20 20 20 20 20 49 74 20 69 73 20 73 61 66         It is saf
ed50: 65 72 20 74 6f 20 6f 6e 6c 79 20 73 65 74 20 41  er to only set A
ed60: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 6f 6e 20  utoincrement on 
ed70: 74 61 62 6c 65 73 20 77 68 65 72 65 20 77 65 27  tables where we'
ed80: 72 65 20 53 55 52 45 20 74 68 65 20 75 73 65 72  re SURE the user
ed90: 20 73 70 65 63 69 66 69 65 64 20 41 55 54 4f 49   specified AUTOI
eda0: 4e 43 52 45 4d 45 4e 54 2c 20 65 76 65 6e 20 69  NCREMENT, even i
edb0: 66 20 69 74 73 20 61 20 72 6f 77 69 64 20 63 6f  f its a rowid co
edc0: 6c 75 6d 6e 2e 0d 0a 0d 0a 20 20 20 20 20 20 20  lumn.....       
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ede0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69               //i
edf0: 66 20 28 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d  f (tblIndexColum
ee00: 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74 20 3d 3d  ns.Rows.Count ==
ee10: 20 31 20 26 26 20 28 62 6f 6f 6c 29 72 6f 77 49   1 && (bool)rowI
ee20: 6e 64 65 78 65 73 5b 22 50 52 49 4d 41 52 59 5f  ndexes["PRIMARY_
ee30: 4b 45 59 22 5d 20 3d 3d 20 74 72 75 65 20 26 26  KEY"] == true &&
ee40: 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72   String.IsNullOr
ee50: 45 6d 70 74 79 28 64 61 74 61 54 79 70 65 29 20  Empty(dataType) 
ee60: 3d 3d 20 66 61 6c 73 65 20 26 26 0d 0a 20 20 20  == false &&..   
ee70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee90: 20 2f 2f 20 20 53 74 72 69 6e 67 2e 43 6f 6d 70   //  String.Comp
eea0: 61 72 65 28 64 61 74 61 54 79 70 65 2c 20 22 69  are(dataType, "i
eeb0: 6e 74 65 67 65 72 22 2c 20 53 74 72 69 6e 67 43  nteger", StringC
eec0: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
eed0: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
eee0: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
eef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef00: 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20          //{..   
ef10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef30: 20 2f 2f 20 20 20 20 2f 2f 20 20 72 6f 77 5b 53   //    //  row[S
ef40: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
ef50: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49  alColumn.IsAutoI
ef60: 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 74 72 75 65  ncrement] = true
ef70: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
ef80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef90: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
efa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efc0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
efd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efe0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
eff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f000: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
f010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f020: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
f030: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
f050: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
f060: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
f070: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74 61  NullOrEmpty(data
f080: 54 79 70 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Type))..        
f090: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
f0b0: 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66 69  ypeAffinity affi
f0c0: 6e 20 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79  n = TypeAffinity
f0d0: 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3b 0d  .Uninitialized;.
f0e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f0f0: 20 20 20 20 20 64 61 74 61 54 79 70 65 20 3d 20       dataType = 
f100: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
f110: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65  ._sql.ColumnType
f120: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
f130: 74 2c 20 6e 2c 20 72 65 66 20 61 66 66 69 6e 29  t, n, ref affin)
f140: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f150: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f160: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
f170: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
f180: 28 64 61 74 61 54 79 70 65 29 20 3d 3d 20 66 61  (dataType) == fa
f190: 6c 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  lse)..          
f1a0: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 22 44            row["D
f1b0: 61 74 61 54 79 70 65 4e 61 6d 65 22 5d 20 3d 20  ataTypeName"] = 
f1c0: 64 61 74 61 54 79 70 65 3b 0d 0a 20 20 20 20 20  dataType;..     
f1d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
f1e0: 20 20 20 20 20 20 20 20 74 62 6c 2e 52 6f 77 73          tbl.Rows
f1f0: 2e 41 64 64 28 72 6f 77 29 3b 0d 0a 20 20 20 20  .Add(row);..    
f200: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
f210: 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
f220: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
f230: 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 41 70 70      _keyInfo.App
f240: 65 6e 64 53 63 68 65 6d 61 54 61 62 6c 65 28 74  endSchemaTable(t
f250: 62 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  bl);....        
f260: 74 62 6c 2e 41 63 63 65 70 74 43 68 61 6e 67 65  tbl.AcceptChange
f270: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62  s();..        tb
f280: 6c 2e 45 6e 64 4c 6f 61 64 44 61 74 61 28 29 3b  l.EndLoadData();
f290: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
f2a0: 72 6e 20 74 62 6c 3b 0d 0a 20 20 20 20 7d 0d 0a  rn tbl;..    }..
f2b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
f2c0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
f2d0: 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d  rieves the colum
f2e0: 6e 20 61 73 20 61 20 73 74 72 69 6e 67 0d 0a 20  n as a string.. 
f2f0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
f300: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
f310: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
f320: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
f330: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
f340: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74   /// <returns>st
f350: 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ring</returns>..
f360: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
f370: 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 53 74  ide string GetSt
f380: 72 69 6e 67 28 69 6e 74 20 69 29 0d 0a 20 20 20  ring(int i)..   
f390: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
f3a0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
f3b0: 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47        VerifyForG
f3c0: 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  et();....       
f3d0: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
f3e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
f3f0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
f400: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
f410: 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43  acks) == SQLiteC
f420: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
f430: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
f440: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d  ValueCallbacks).
f450: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
f460: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
f470: 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61  taReaderValue va
f480: 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  lue = new SQLite
f490: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28  DataReaderValue(
f4a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
f4b0: 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a  bool complete;..
f4c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
f4d0: 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c  vokeReadValueCal
f4e0: 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c  lback(i, new SQL
f4f0: 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e  iteReadValueEven
f500: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
f510: 20 20 20 20 20 20 20 20 22 47 65 74 53 74 72 69          "GetStri
f520: 6e 67 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65  ng", null, value
f530: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
f540: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f550: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
f560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f570: 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 53 74 72  return value.Str
f580: 69 6e 67 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ingValue;..     
f590: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f5a0: 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65  if (i >= Private
f5b0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
f5c0: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
f5d0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
f5e0: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
f5f0: 6e 66 6f 2e 47 65 74 53 74 72 69 6e 67 28 69 20  nfo.GetString(i 
f600: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
f610: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
f620: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
f630: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
f640: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65  ectionFlags.NoVe
f650: 72 69 66 79 54 65 78 74 41 66 66 69 6e 69 74 79  rifyTextAffinity
f660: 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) != SQLiteConne
f670: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72  ctionFlags.NoVer
f680: 69 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29  ifyTextAffinity)
f690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
f6a0: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
f6b0: 70 65 2e 53 74 72 69 6e 67 29 3b 0d 0a 0d 0a 20  pe.String);.... 
f6c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
f6d0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
f6e0: 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74  sql.GetText(_act
f6f0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
f700: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
f710: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
f720: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
f730: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61   the column as a
f740: 6e 20 6f 62 6a 65 63 74 20 63 6f 72 72 65 73 70  n object corresp
f750: 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 75 6e  onding to the un
f760: 64 65 72 6c 79 69 6e 67 20 64 61 74 61 74 79 70  derlying datatyp
f770: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0d  e of the column.
f780: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
f790: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
f7a0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
f7b0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
f7c0: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
f7d0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
f7e0: 6f 62 6a 65 63 74 3c 2f 72 65 74 75 72 6e 73 3e  object</returns>
f7f0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
f800: 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74  rride object Get
f810: 56 61 6c 75 65 28 69 6e 74 20 69 29 0d 0a 20 20  Value(int i)..  
f820: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
f830: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
f840: 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72         VerifyFor
f850: 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Get();....      
f860: 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20    if ((_flags & 
f870: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f880: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
f890: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
f8a0: 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65  backs) == SQLite
f8b0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
f8c0: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
f8d0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
f8e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
f8f0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44           SQLiteD
f900: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76  ataReaderValue v
f910: 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  alue = new SQLit
f920: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
f930: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
f940: 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d   bool complete;.
f950: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
f960: 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61  nvokeReadValueCa
f970: 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51  llback(i, new SQ
f980: 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65  LiteReadValueEve
f990: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
f9a0: 20 20 20 20 20 20 20 20 20 22 47 65 74 56 61 6c           "GetVal
f9b0: 75 65 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65  ue", null, value
f9c0: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
f9d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f9e0: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
f9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa00: 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 56 61 6c  return value.Val
fa10: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
fa20: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
fa30: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
fa40: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
fa50: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
fa60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
fa70: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
fa80: 74 56 61 6c 75 65 28 69 20 2d 20 50 72 69 76 61  tValue(i - Priva
fa90: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
faa0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
fab0: 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 20   SQLiteType typ 
fac0: 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  = GetSQLiteType(
fad0: 5f 66 6c 61 67 73 2c 20 69 29 3b 0d 0a 0d 0a 20  _flags, i);.... 
fae0: 20 20 20 20 20 20 20 69 66 20 28 28 28 5f 66 6c         if (((_fl
faf0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
fb00: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65  ectionFlags.Dete
fb10: 63 74 54 65 78 74 41 66 66 69 6e 69 74 79 29 20  ctTextAffinity) 
fb20: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
fb30: 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63 74 54  ionFlags.DetectT
fb40: 65 78 74 41 66 66 69 6e 69 74 79 29 20 26 26 0d  extAffinity) &&.
fb50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 28 74  .            ((t
fb60: 79 70 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28  yp == null) || (
fb70: 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20  typ.Affinity == 
fb80: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78  TypeAffinity.Tex
fb90: 74 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  t)))..        {.
fba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70  .            typ
fbb0: 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65   = GetSQLiteType
fbc0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
fbd0: 20 20 20 74 79 70 2c 20 5f 61 63 74 69 76 65 53     typ, _activeS
fbe0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
fbf0: 74 54 65 78 74 28 5f 61 63 74 69 76 65 53 74 61  tText(_activeSta
fc00: 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20  tement, i));..  
fc10: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
fc20: 20 65 6c 73 65 20 69 66 20 28 28 28 5f 66 6c 61   else if (((_fla
fc30: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
fc40: 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63  ctionFlags.Detec
fc50: 74 53 74 72 69 6e 67 54 79 70 65 29 20 3d 3d 20  tStringType) == 
fc60: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
fc70: 46 6c 61 67 73 2e 44 65 74 65 63 74 53 74 72 69  Flags.DetectStri
fc80: 6e 67 54 79 70 65 29 20 26 26 0d 0a 20 20 20 20  ngType) &&..    
fc90: 20 20 20 20 20 20 20 20 28 28 74 79 70 20 3d 3d          ((typ ==
fca0: 20 6e 75 6c 6c 29 20 7c 7c 20 53 51 4c 69 74 65   null) || SQLite
fcb0: 43 6f 6e 76 65 72 74 2e 49 73 53 74 72 69 6e 67  Convert.IsString
fcc0: 44 62 54 79 70 65 28 74 79 70 2e 54 79 70 65 29  DbType(typ.Type)
fcd0: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
fce0: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 20 3d             typ =
fcf0: 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 0d   GetSQLiteType(.
fd00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fd10: 20 74 79 70 2c 20 5f 61 63 74 69 76 65 53 74 61   typ, _activeSta
fd20: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54  tement._sql.GetT
fd30: 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ext(_activeState
fd40: 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20  ment, i));..    
fd50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
fd60: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
fd70: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
fd80: 74 56 61 6c 75 65 28 5f 61 63 74 69 76 65 53 74  tValue(_activeSt
fd90: 61 74 65 6d 65 6e 74 2c 20 5f 66 6c 61 67 73 2c  atement, _flags,
fda0: 20 69 2c 20 74 79 70 29 3b 0d 0a 20 20 20 20 7d   i, typ);..    }
fdb0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
fdc0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
fdd0: 65 74 72 65 69 76 65 73 20 74 68 65 20 76 61 6c  etreives the val
fde0: 75 65 73 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ues of multiple 
fdf0: 63 6f 6c 75 6d 6e 73 2c 20 75 70 20 74 6f 20 74  columns, up to t
fe00: 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 73  he size of the s
fe10: 75 70 70 6c 69 65 64 20 61 72 72 61 79 0d 0a 20  upplied array.. 
fe20: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
fe30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
fe40: 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e  m name="values">
fe50: 54 68 65 20 61 72 72 61 79 20 74 6f 20 66 69 6c  The array to fil
fe60: 6c 20 77 69 74 68 20 76 61 6c 75 65 73 20 66 72  l with values fr
fe70: 6f 6d 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69  om the columns i
fe80: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65  n the current re
fe90: 73 75 6c 74 73 65 74 3c 2f 70 61 72 61 6d 3e 0d  sultset</param>.
fea0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
feb0: 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s>The number of 
fec0: 63 6f 6c 75 6d 6e 73 20 72 65 74 72 69 65 76 65  columns retrieve
fed0: 64 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  d</returns>..   
fee0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
fef0: 20 69 6e 74 20 47 65 74 56 61 6c 75 65 73 28 6f   int GetValues(o
ff00: 62 6a 65 63 74 5b 5d 20 76 61 6c 75 65 73 29 0d  bject[] values).
ff10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68  .    {..      Ch
ff20: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
ff30: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 4d 61 78  ..      int nMax
ff40: 20 3d 20 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a   = FieldCount;..
ff50: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 73        if (values
ff60: 2e 4c 65 6e 67 74 68 20 3c 20 6e 4d 61 78 29 20  .Length < nMax) 
ff70: 6e 4d 61 78 20 3d 20 76 61 6c 75 65 73 2e 4c 65  nMax = values.Le
ff80: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 66  ngth;....      f
ff90: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
ffa0: 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0d 0a 20   < nMax; n++).. 
ffb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ffc0: 76 61 6c 75 65 73 5b 6e 5d 20 3d 20 47 65 74 56  values[n] = GetV
ffd0: 61 6c 75 65 28 6e 29 3b 0d 0a 20 20 20 20 20 20  alue(n);..      
ffe0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
fff0: 6e 20 6e 4d 61 78 3b 0d 0a 20 20 20 20 7d 0d 0a  n nMax;..    }..
10000 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
10010 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
10020 75 72 6e 73 20 61 20 63 6f 6c 6c 65 63 74 69 6f  urns a collectio
10030 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c  n containing all
10040 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
10050 73 20 61 6e 64 20 76 61 6c 75 65 73 20 66 6f 72  s and values for
10060 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75   the..    /// cu
10070 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 64 61 74  rrent row of dat
10080 61 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  a in the current
10090 20 72 65 73 75 6c 74 73 65 74 2c 20 69 66 20 61   resultset, if a
100a0 6e 79 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ny.  If there is
100b0 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72   no..    /// cur
100c0 72 65 6e 74 20 72 6f 77 20 6f 72 20 6e 6f 20 63  rent row or no c
100d0 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
100e0 2c 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 6d  , an exception m
100f0 61 79 20 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20  ay be thrown... 
10100 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
10110 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
10120 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  rns>..    /// Th
10130 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 63 6f 6e  e collection con
10140 74 61 69 6e 69 6e 67 20 74 68 65 20 63 6f 6c 75  taining the colu
10150 6d 6e 20 6e 61 6d 65 20 61 6e 64 20 76 61 6c 75  mn name and valu
10160 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  e information fo
10170 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63  r the..    /// c
10180 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 64 61  urrent row of da
10190 74 61 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  ta in the curren
101a0 74 20 72 65 73 75 6c 74 73 65 74 20 6f 72 20 6e  t resultset or n
101b0 75 6c 6c 20 69 66 20 74 68 69 73 20 69 6e 66 6f  ull if this info
101c0 72 6d 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f  rmation..    ///
101d0 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69   cannot be obtai
101e0 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ned...    /// </
101f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
10200 62 6c 69 63 20 4e 61 6d 65 56 61 6c 75 65 43 6f  blic NameValueCo
10210 6c 6c 65 63 74 69 6f 6e 20 47 65 74 56 61 6c 75  llection GetValu
10220 65 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  es()..    {..   
10230 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
10240 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
10250 20 69 66 20 28 28 5f 61 63 74 69 76 65 53 74 61   if ((_activeSta
10260 74 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 20  tement == null) 
10270 7c 7c 20 28 5f 61 63 74 69 76 65 53 74 61 74 65  || (_activeState
10280 6d 65 6e 74 2e 5f 73 71 6c 20 3d 3d 20 6e 75 6c  ment._sql == nul
10290 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
102a0 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
102b0 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
102c0 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  tion();....     
102d0 20 20 20 69 6e 74 20 6e 4d 61 78 20 3d 20 50 72     int nMax = Pr
102e0 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
102f0 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20  dCount;..       
10300 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63   NameValueCollec
10310 74 69 6f 6e 20 72 65 73 75 6c 74 20 3d 20 6e 65  tion result = ne
10320 77 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65  w NameValueColle
10330 63 74 69 6f 6e 28 6e 4d 61 78 29 3b 0d 0a 0d 0a  ction(nMax);....
10340 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
10350 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 6e 4d 61 78   n = 0; n < nMax
10360 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  ; n++)..        
10370 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
10380 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 5f 61 63  tring name = _ac
10390 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
103a0 71 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61  ql.ColumnName(_a
103b0 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
103c0 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
103d0 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 3d 20   string value = 
103e0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
103f0 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61  ._sql.GetText(_a
10400 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
10410 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
10420 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 6e 61     result.Add(na
10430 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  me, value);..   
10440 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
10450 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
10460 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
10470 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
10480 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72    /// Returns Tr
10490 75 65 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  ue if the result
104a0 73 65 74 20 68 61 73 20 72 6f 77 73 20 74 68 61  set has rows tha
104b0 74 20 63 61 6e 20 62 65 20 66 65 74 63 68 65 64  t can be fetched
104c0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
104d0 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
104e0 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 48   override bool H
104f0 61 73 52 6f 77 73 0d 0a 20 20 20 20 7b 0d 0a 20  asRows..    {.. 
10500 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
10510 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
10520 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
10530 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64       CheckClosed
10540 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ();....        /
10550 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f  /..        // NO
10560 54 45 3a 20 49 66 20 74 68 65 20 22 73 74 69 63  TE: If the "stic
10570 6b 79 22 20 66 6c 61 67 20 68 61 73 20 62 65 65  ky" flag has bee
10580 6e 20 73 65 74 2c 20 75 73 65 20 74 68 65 20 6e  n set, use the n
10590 65 77 20 62 65 68 61 76 69 6f 72 2c 0d 0a 20 20  ew behavior,..  
105a0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77        //       w
105b0 68 69 63 68 20 72 65 74 75 72 6e 73 20 6e 6f 6e  hich returns non
105c0 2d 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20 77  -zero if there w
105d0 65 72 65 20 65 76 65 72 20 61 6e 79 20 72 6f 77  ere ever any row
105e0 73 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s in..        //
105f0 20 20 20 20 20 20 20 74 68 65 20 61 73 73 6f 63         the assoc
10600 69 61 74 65 64 20 72 65 73 75 6c 74 20 73 65 74  iated result set
10610 73 2e 20 20 47 65 6e 65 72 61 6c 6c 79 2c 20 74  s.  Generally, t
10620 68 69 73 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79  his flag is only
10630 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
10640 20 20 20 75 73 65 66 75 6c 20 77 68 65 6e 20 69     useful when i
10650 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74  t is necessary t
10660 6f 20 72 65 74 61 69 6e 20 63 6f 6d 70 61 74 69  o retain compati
10670 62 69 6c 69 74 79 20 77 69 74 68 0d 0a 20 20 20  bility with..   
10680 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74       //       ot
10690 68 65 72 20 41 44 4f 2e 4e 45 54 20 70 72 6f 76  her ADO.NET prov
106a0 69 64 65 72 73 20 74 68 61 74 20 75 73 65 20 74  iders that use t
106b0 68 65 73 65 20 73 61 6d 65 20 73 65 6d 61 6e 74  hese same semant
106c0 69 63 73 20 66 6f 72 0d 0a 20 20 20 20 20 20 20  ics for..       
106d0 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 48 61   //       the Ha
106e0 73 52 6f 77 73 20 70 72 6f 70 65 72 74 79 2e 0d  sRows property..
106f0 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
10700 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73       if ((_flags
10710 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
10720 69 6f 6e 46 6c 61 67 73 2e 53 74 69 63 6b 79 48  ionFlags.StickyH
10730 61 73 52 6f 77 73 29 20 3d 3d 20 53 51 4c 69 74  asRows) == SQLit
10740 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
10750 2e 53 74 69 63 6b 79 48 61 73 52 6f 77 73 29 0d  .StickyHasRows).
10760 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
10770 6e 20 28 28 5f 72 65 61 64 69 6e 67 53 74 61 74  n ((_readingStat
10780 65 20 21 3d 20 31 29 20 7c 7c 20 28 5f 73 74 65  e != 1) || (_ste
10790 70 43 6f 75 6e 74 20 3e 20 30 29 29 3b 0d 0a 0d  pCount > 0));...
107a0 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
107b0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
107c0 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  is is the defaul
107d0 74 20 62 65 68 61 76 69 6f 72 2e 20 20 49 74 20  t behavior.  It 
107e0 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
107f0 20 6f 6e 6c 79 20 69 66 0d 0a 20 20 20 20 20 20   only if..      
10800 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 72 65 20    //       more 
10810 72 6f 77 73 20 61 72 65 20 61 76 61 69 6c 61 62  rows are availab
10820 6c 65 20 28 69 2e 65 2e 20 61 20 63 61 6c 6c 20  le (i.e. a call 
10830 74 6f 20 74 68 65 20 52 65 61 64 20 6d 65 74 68  to the Read meth
10840 6f 64 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f  od is..        /
10850 2f 20 20 20 20 20 20 20 65 78 70 65 63 74 65 64  /       expected
10860 20 74 6f 20 73 75 63 63 65 65 64 29 2e 20 20 50   to succeed).  P
10870 72 69 6f 72 20 74 6f 20 74 68 65 20 69 6e 74 72  rior to the intr
10880 6f 64 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 0d  oduction of the.
10890 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
108a0 20 20 22 73 74 69 63 6b 79 22 20 66 6c 61 67 2c    "sticky" flag,
108b0 20 74 68 69 73 20 69 73 20 68 6f 77 20 74 68 69   this is how thi
108c0 73 20 70 72 6f 70 65 72 74 79 20 68 61 73 20 61  s property has a
108d0 6c 77 61 79 73 20 77 6f 72 6b 65 64 2e 0d 0a 20  lways worked... 
108e0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
108f0 20 20 20 72 65 74 75 72 6e 20 28 5f 72 65 61 64     return (_read
10900 69 6e 67 53 74 61 74 65 20 21 3d 20 31 29 3b 0d  ingState != 1);.
10910 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
10920 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
10930 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
10940 74 75 72 6e 73 20 54 72 75 65 20 69 66 20 74 68  turns True if th
10950 65 20 64 61 74 61 20 72 65 61 64 65 72 20 69 73  e data reader is
10960 20 63 6c 6f 73 65 64 0d 0a 20 20 20 20 2f 2f 2f   closed..    ///
10970 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
10980 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
10990 20 62 6f 6f 6c 20 49 73 43 6c 6f 73 65 64 0d 0a   bool IsClosed..
109a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
109b0 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
109c0 28 29 3b 20 72 65 74 75 72 6e 20 28 5f 63 6f 6d  (); return (_com
109d0 6d 61 6e 64 20 3d 3d 20 6e 75 6c 6c 29 3b 20 7d  mand == null); }
109e0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
109f0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
10a00 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72    /// Returns Tr
10a10 75 65 20 69 66 20 74 68 65 20 73 70 65 63 69 66  ue if the specif
10a20 69 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 75  ied column is nu
10a30 6c 6c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ll..    /// </su
10a40 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
10a50 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
10a60 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
10a70 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
10a80 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
10a90 6e 73 3e 54 72 75 65 20 6f 72 20 46 61 6c 73 65  ns>True or False
10aa0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
10ab0 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
10ac0 62 6f 6f 6c 20 49 73 44 42 4e 75 6c 6c 28 69 6e  bool IsDBNull(in
10ad0 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
10ae0 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
10af0 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
10b00 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
10b10 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
10b20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
10b30 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
10b40 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
10b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
10b60 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 49 73  turn _keyInfo.Is
10b70 44 42 4e 75 6c 6c 28 69 20 2d 20 50 72 69 76 61  DBNull(i - Priva
10b80 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
10b90 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
10ba0 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
10bb0 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73  tatement._sql.Is
10bc0 4e 75 6c 6c 28 5f 61 63 74 69 76 65 53 74 61 74  Null(_activeStat
10bd0 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20  ement, i);..    
10be0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
10bf0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
10c00 4d 6f 76 65 73 20 74 6f 20 74 68 65 20 6e 65 78  Moves to the nex
10c10 74 20 72 65 73 75 6c 74 73 65 74 20 69 6e 20 6d  t resultset in m
10c20 75 6c 74 69 70 6c 65 20 72 6f 77 2d 72 65 74 75  ultiple row-retu
10c30 72 6e 69 6e 67 20 53 51 4c 20 63 6f 6d 6d 61 6e  rning SQL comman
10c40 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
10c50 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
10c60 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66  <returns>True if
10c70 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73   the command was
10c80 20 73 75 63 63 65 73 73 66 75 6c 20 61 6e 64 20   successful and 
10c90 61 20 6e 65 77 20 72 65 73 75 6c 74 73 65 74 20  a new resultset 
10ca0 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 46 61  is available, Fa
10cb0 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e 3c 2f  lse otherwise.</
10cc0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
10cd0 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f  blic override bo
10ce0 6f 6c 20 4e 65 78 74 52 65 73 75 6c 74 28 29 0d  ol NextResult().
10cf0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68  .    {..      Ch
10d00 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
10d10 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65        CheckClose
10d20 64 28 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  d();..      if (
10d30 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
10d40 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  ) SQLiteCommand.
10d50 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b  Check(_command);
10d60 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  ....      SQLite
10d70 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 20 3d  Statement stmt =
10d80 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e   null;..      in
10d90 74 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20  t fieldCount;.. 
10da0 20 20 20 20 20 62 6f 6f 6c 20 73 63 68 65 6d 61       bool schema
10db0 4f 6e 6c 79 20 3d 20 28 28 5f 63 6f 6d 6d 61 6e  Only = ((_comman
10dc0 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
10dd0 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 63 68 65  andBehavior.Sche
10de0 6d 61 4f 6e 6c 79 29 20 21 3d 20 30 29 3b 0d 0a  maOnly) != 0);..
10df0 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 74  ..      while (t
10e00 72 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  rue)..      {.. 
10e10 20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 20         if (stmt 
10e20 3d 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69  == null && _acti
10e30 76 65 53 74 61 74 65 6d 65 6e 74 20 21 3d 20 6e  veStatement != n
10e40 75 6c 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74  ull && _activeSt
10e50 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 20 21 3d 20  atement._sql != 
10e60 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76 65 53  null && _activeS
10e70 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73  tatement._sql.Is
10e80 4f 70 65 6e 28 29 29 0d 0a 20 20 20 20 20 20 20  Open())..       
10e90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
10ea0 20 52 65 73 65 74 20 74 68 65 20 70 72 65 76 69   Reset the previ
10eb0 6f 75 73 6c 79 2d 65 78 65 63 75 74 65 64 20 73  ously-executed s
10ec0 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20  tatement..      
10ed0 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f      if (!schemaO
10ee0 6e 6c 79 29 20 5f 61 63 74 69 76 65 53 74 61 74  nly) _activeStat
10ef0 65 6d 65 6e 74 2e 5f 73 71 6c 2e 52 65 73 65 74  ement._sql.Reset
10f00 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
10f10 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
10f20 20 2f 2f 20 49 66 20 77 65 27 72 65 20 6f 6e 6c   // If we're onl
10f30 79 20 73 75 70 70 6f 73 65 64 20 74 6f 20 72 65  y supposed to re
10f40 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  turn a single ro
10f50 77 73 65 74 2c 20 73 74 65 70 20 74 68 72 6f 75  wset, step throu
10f60 67 68 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67  gh all remaining
10f70 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 63 65   statements once
10f80 20 75 6e 74 69 6c 0d 0a 20 20 20 20 20 20 20 20   until..        
10f90 20 20 2f 2f 20 74 68 65 79 20 61 72 65 20 61 6c    // they are al
10fa0 6c 20 64 6f 6e 65 20 61 6e 64 20 72 65 74 75 72  l done and retur
10fb0 6e 20 66 61 6c 73 65 20 74 6f 20 69 6e 64 69 63  n false to indic
10fc0 61 74 65 20 6e 6f 20 6d 6f 72 65 20 72 65 73 75  ate no more resu
10fd0 6c 74 73 65 74 73 20 65 78 69 73 74 2e 0d 0a 20  ltsets exist... 
10fe0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 63           if ((_c
10ff0 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26  ommandBehavior &
11000 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72   CommandBehavior
11010 2e 53 69 6e 67 6c 65 52 65 73 75 6c 74 29 20 21  .SingleResult) !
11020 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
11030 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
11040 6f 72 20 28 3b 20 3b 20 29 0d 0a 20 20 20 20 20  or (; ; )..     
11050 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11060 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20 5f          stmt = _
11070 63 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61 74 65  command.GetState
11080 6d 65 6e 74 28 5f 61 63 74 69 76 65 53 74 61 74  ment(_activeStat
11090 65 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31 29 3b  ementIndex + 1);
110a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
110b0 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c  if (stmt == null
110c0 29 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20  ) break;..      
110d0 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
110e0 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b  tatementIndex++;
110f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11100 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c    if (!schemaOnl
11110 79 20 26 26 20 73 74 6d 74 2e 5f 73 71 6c 2e 53  y && stmt._sql.S
11120 74 65 70 28 73 74 6d 74 29 29 20 5f 73 74 65 70  tep(stmt)) _step
11130 43 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20 20 20 20  Count++;..      
11140 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74          if (stmt
11150 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f 75 6e  ._sql.ColumnCoun
11160 74 28 73 74 6d 74 29 20 3d 3d 20 30 29 0d 0a 20  t(stmt) == 0).. 
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11190 69 6e 74 20 63 68 61 6e 67 65 73 20 3d 20 30 3b  int changes = 0;
111a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
111b0 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 20    bool readOnly 
111c0 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
111d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
111e0 6d 74 2e 54 72 79 47 65 74 43 68 61 6e 67 65 73  mt.TryGetChanges
111f0 28 72 65 66 20 63 68 61 6e 67 65 73 2c 20 72 65  (ref changes, re
11200 66 20 72 65 61 64 4f 6e 6c 79 29 29 0d 0a 20 20  f readOnly))..  
11210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11230 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c 79     if (!readOnly
11240 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11250 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11260 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11270 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d 3d  _rowsAffected ==
11280 20 2d 31 29 20 5f 72 6f 77 73 41 66 66 65 63 74   -1) _rowsAffect
11290 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  ed = 0;..       
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 6f               _ro
112b0 77 73 41 66 66 65 63 74 65 64 20 2b 3d 20 63 68  wsAffected += ch
112c0 61 6e 67 65 73 3b 0d 0a 20 20 20 20 20 20 20 20  anges;..        
112d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
112e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11300 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
11310 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11320 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11330 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
11340 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11350 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11360 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11370 21 73 63 68 65 6d 61 4f 6e 6c 79 29 20 73 74 6d  !schemaOnly) stm
11380 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28 73 74 6d  t._sql.Reset(stm
11390 74 29 3b 20 2f 2f 20 47 6f 74 74 61 20 72 65 73  t); // Gotta res
113a0 65 74 20 61 66 74 65 72 20 65 76 65 72 79 20 73  et after every s
113b0 74 65 70 20 74 6f 20 72 65 6c 65 61 73 65 20 61  tep to release a
113c0 6e 79 20 6c 6f 63 6b 73 20 61 6e 64 20 73 75 63  ny locks and suc
113d0 68 21 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h!..            
113e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  }..            r
113f0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
11400 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11410 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
11420 2f 2f 20 47 65 74 20 74 68 65 20 6e 65 78 74 20  // Get the next 
11430 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78 65  statement to exe
11440 63 75 74 65 0d 0a 20 20 20 20 20 20 20 20 73 74  cute..        st
11450 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 47 65  mt = _command.Ge
11460 74 53 74 61 74 65 6d 65 6e 74 28 5f 61 63 74 69  tStatement(_acti
11470 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78  veStatementIndex
11480 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   + 1);....      
11490 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 72 65    // If we've re
114a0 61 63 68 65 64 20 74 68 65 20 65 6e 64 20 6f 66  ached the end of
114b0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 73 2c   the statements,
114c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2c 20 6e   return false, n
114d0 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74 73 65 74  o more resultset
114e0 73 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73  s..        if (s
114f0 74 6d 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  tmt == null)..  
11500 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
11510 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
11520 20 2f 2f 20 49 66 20 77 65 20 77 65 72 65 20 6f   // If we were o
11530 6e 20 61 20 63 75 72 72 65 6e 74 20 72 65 73 75  n a current resu
11540 6c 74 73 65 74 2c 20 73 65 74 20 74 68 65 20 73  ltset, set the s
11550 74 61 74 65 20 74 6f 20 22 64 6f 6e 65 20 72 65  tate to "done re
11560 61 64 69 6e 67 22 20 66 6f 72 20 69 74 0d 0a 20  ading" for it.. 
11570 20 20 20 20 20 20 20 69 66 20 28 5f 72 65 61 64         if (_read
11580 69 6e 67 53 74 61 74 65 20 3c 20 31 29 0d 0a 20  ingState < 1).. 
11590 20 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e           _readin
115a0 67 53 74 61 74 65 20 3d 20 31 3b 0d 0a 0d 0a 20  gState = 1;.... 
115b0 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74         _activeSt
115c0 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b 0d  atementIndex++;.
115d0 0a 0d 0a 20 20 20 20 20 20 20 20 66 69 65 6c 64  ...        field
115e0 43 6f 75 6e 74 20 3d 20 73 74 6d 74 2e 5f 73 71  Count = stmt._sq
115f0 6c 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74  l.ColumnCount(st
11600 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  mt);....        
11610 2f 2f 20 49 66 20 74 68 65 20 73 74 61 74 65 6d  // If the statem
11620 65 6e 74 20 69 73 20 6e 6f 74 20 61 20 73 65 6c  ent is not a sel
11630 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 6f 72  ect statement or
11640 20 77 65 27 72 65 20 6e 6f 74 20 72 65 74 72 69   we're not retri
11650 65 76 69 6e 67 20 73 63 68 65 6d 61 20 6f 6e 6c  eving schema onl
11660 79 2c 20 74 68 65 6e 20 70 65 72 66 6f 72 6d 20  y, then perform 
11670 74 68 65 20 69 6e 69 74 69 61 6c 20 73 74 65 70  the initial step
11680 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 73  ..        if (!s
11690 63 68 65 6d 61 4f 6e 6c 79 20 7c 7c 20 28 66 69  chemaOnly || (fi
116a0 65 6c 64 43 6f 75 6e 74 20 3d 3d 20 30 29 29 0d  eldCount == 0)).
116b0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
116c0 20 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d        if (!schem
116d0 61 4f 6e 6c 79 20 26 26 20 73 74 6d 74 2e 5f 73  aOnly && stmt._s
116e0 71 6c 2e 53 74 65 70 28 73 74 6d 74 29 29 0d 0a  ql.Step(stmt))..
116f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11700 20 20 20 20 20 20 20 20 20 5f 73 74 65 70 43 6f           _stepCo
11710 75 6e 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  unt++;..        
11720 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74      _readingStat
11730 65 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20  e = -1;..       
11740 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
11750 65 6c 73 65 20 69 66 20 28 66 69 65 6c 64 43 6f  else if (fieldCo
11760 75 6e 74 20 3d 3d 20 30 29 20 2f 2f 20 4e 6f 20  unt == 0) // No 
11770 72 6f 77 73 20 72 65 74 75 72 6e 65 64 2c 20 69  rows returned, i
11780 66 20 66 69 65 6c 64 43 6f 75 6e 74 20 69 73 20  f fieldCount is 
11790 7a 65 72 6f 2c 20 73 6b 69 70 20 74 6f 20 74 68  zero, skip to th
117a0 65 20 6e 65 78 74 20 73 74 61 74 65 6d 65 6e 74  e next statement
117b0 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
117c0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63             int c
117d0 68 61 6e 67 65 73 20 3d 20 30 3b 0d 0a 20 20 20  hanges = 0;..   
117e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65           bool re
117f0 61 64 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b 0d  adOnly = false;.
11800 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
11810 28 73 74 6d 74 2e 54 72 79 47 65 74 43 68 61 6e  (stmt.TryGetChan
11820 67 65 73 28 72 65 66 20 63 68 61 6e 67 65 73 2c  ges(ref changes,
11830 20 72 65 66 20 72 65 61 64 4f 6e 6c 79 29 29 0d   ref readOnly)).
11840 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
11850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11860 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20   (!readOnly)..  
11870 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11890 66 20 28 5f 72 6f 77 73 41 66 66 65 63 74 65 64  f (_rowsAffected
118a0 20 3d 3d 20 2d 31 29 20 5f 72 6f 77 73 41 66 66   == -1) _rowsAff
118b0 65 63 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  ected = 0;..    
118c0 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 6f 77              _row
118d0 73 41 66 66 65 63 74 65 64 20 2b 3d 20 63 68 61  sAffected += cha
118e0 6e 67 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  nges;..         
118f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11900 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11910 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
11920 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11930 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
11940 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
11950 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
11960 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 29  if (!schemaOnly)
11970 20 73 74 6d 74 2e 5f 73 71 6c 2e 52 65 73 65 74   stmt._sql.Reset
11980 28 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20  (stmt);..       
11990 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 20 2f       continue; /
119a0 2f 20 53 6b 69 70 20 74 68 69 73 20 63 6f 6d 6d  / Skip this comm
119b0 61 6e 64 20 61 6e 64 20 6d 6f 76 65 20 74 6f 20  and and move to 
119c0 74 68 65 20 6e 65 78 74 2c 20 69 74 20 77 61 73  the next, it was
119d0 20 6e 6f 74 20 61 20 72 6f 77 2d 72 65 74 75 72   not a row-retur
119e0 6e 69 6e 67 20 72 65 73 75 6c 74 73 65 74 0d 0a  ning resultset..
119f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11a00 20 20 20 20 20 20 20 65 6c 73 65 20 2f 2f 20 4e         else // N
11a10 6f 20 72 6f 77 73 2c 20 66 69 65 6c 64 43 6f 75  o rows, fieldCou
11a20 6e 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 73  nt is non-zero s
11a30 6f 20 73 74 6f 70 20 68 65 72 65 0d 0a 20 20 20  o stop here..   
11a40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11a50 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74        _readingSt
11a60 61 74 65 20 3d 20 31 3b 20 2f 2f 20 54 68 69 73  ate = 1; // This
11a70 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 65   command returne
11a80 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20 6e 6f  d columns but no
11a90 20 72 6f 77 73 2c 20 73 6f 20 72 65 74 75 72 6e   rows, so return
11aa0 20 74 72 75 65 2c 20 62 75 74 20 48 61 73 52 6f   true, but HasRo
11ab0 77 73 20 3d 20 66 61 6c 73 65 20 61 6e 64 20 52  ws = false and R
11ac0 65 61 64 28 29 20 72 65 74 75 72 6e 73 20 66 61  ead() returns fa
11ad0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  lse..          }
11ae0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
11af0 20 20 20 20 20 20 20 2f 2f 20 41 68 68 2c 20 77         // Ahh, w
11b00 65 20 66 6f 75 6e 64 20 61 20 72 6f 77 2d 72 65  e found a row-re
11b10 74 75 72 6e 69 6e 67 20 72 65 73 75 6c 74 73 65  turning resultse
11b20 74 20 65 6c 69 67 69 62 6c 65 20 74 6f 20 62 65  t eligible to be
11b30 20 72 65 74 75 72 6e 65 64 21 0d 0a 20 20 20 20   returned!..    
11b40 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65      _activeState
11b50 6d 65 6e 74 20 3d 20 73 74 6d 74 3b 0d 0a 20 20  ment = stmt;..  
11b60 20 20 20 20 20 20 5f 66 69 65 6c 64 43 6f 75 6e        _fieldCoun
11b70 74 20 3d 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0d  t = fieldCount;.
11b80 0a 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 49  .        _fieldI
11b90 6e 64 65 78 65 73 20 3d 20 6e 65 77 20 44 69 63  ndexes = new Dic
11ba0 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20  tionary<string, 
11bb0 69 6e 74 3e 28 53 74 72 69 6e 67 43 6f 6d 70 61  int>(StringCompa
11bc0 72 65 72 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  rer.OrdinalIgnor
11bd0 65 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  eCase);..       
11be0 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79   _fieldTypeArray
11bf0 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70   = new SQLiteTyp
11c00 65 5b 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  e[PrivateVisible
11c10 46 69 65 6c 64 43 6f 75 6e 74 5d 3b 0d 0a 0d 0a  FieldCount];....
11c20 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f          if ((_co
11c30 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20  mmandBehavior & 
11c40 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e  CommandBehavior.
11c50 4b 65 79 49 6e 66 6f 29 20 21 3d 20 30 29 0d 0a  KeyInfo) != 0)..
11c60 20 20 20 20 20 20 20 20 20 20 4c 6f 61 64 4b 65            LoadKe
11c70 79 49 6e 66 6f 28 29 3b 0d 0a 0d 0a 20 20 20 20  yInfo();....    
11c80 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
11c90 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
11ca0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
11cb0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
11cc0 68 69 73 20 6d 65 74 68 6f 64 20 61 74 74 65 6d  his method attem
11cd0 70 74 73 20 74 6f 20 71 75 65 72 79 20 74 68 65  pts to query the
11ce0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
11cf0 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
11d00 77 69 74 68 0d 0a 20 20 20 20 2f 2f 2f 20 74 68  with..    /// th
11d10 65 20 64 61 74 61 20 72 65 61 64 65 72 20 69 6e  e data reader in
11d20 20 75 73 65 2e 20 20 49 66 20 74 68 65 20 75 6e   use.  If the un
11d30 64 65 72 6c 79 69 6e 67 20 63 6f 6d 6d 61 6e 64  derlying command
11d40 20 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69   or connection i
11d50 73 0d 0a 20 20 20 20 2f 2f 2f 20 75 6e 61 76 61  s..    /// unava
11d60 69 6c 61 62 6c 65 2c 20 61 20 6e 75 6c 6c 20 76  ilable, a null v
11d70 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 74  alue will be ret
11d80 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  urned...    /// 
11d90 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
11da0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
11db0 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65     /// The conne
11dc0 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 2d 4f 52  ction object -OR
11dd0 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20 69 73 20  - null if it is 
11de0 75 6e 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20  unavailable...  
11df0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
11e00 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
11e10 74 61 74 69 63 20 53 51 4c 69 74 65 43 6f 6e 6e  tatic SQLiteConn
11e20 65 63 74 69 6f 6e 20 47 65 74 43 6f 6e 6e 65 63  ection GetConnec
11e30 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53  tion(..        S
11e40 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 20  QLiteDataReader 
11e50 64 61 74 61 52 65 61 64 65 72 0d 0a 20 20 20 20  dataReader..    
11e60 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
11e70 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
11e80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11e90 20 20 69 66 20 28 64 61 74 61 52 65 61 64 65 72    if (dataReader
11ea0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
11eb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11ec0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
11ed0 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
11ee0 3d 20 64 61 74 61 52 65 61 64 65 72 2e 5f 63 6f  = dataReader._co
11ef0 6d 6d 61 6e 64 3b 0d 0a 0d 0a 20 20 20 20 20 20  mmand;....      
11f00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
11f10 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a  mmand != null)..
11f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11f40 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
11f50 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
11f60 6f 6e 20 3d 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6e  on = command.Con
11f70 6e 65 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20  nection;....    
11f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f90 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 21  if (connection !
11fa0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 20 72 65 74 75 72 6e 20 63 6f 6e 6e 65 63 74 69   return connecti
11fd0 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
11fe0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11ff0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
12000 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
12010 28 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45  (ObjectDisposedE
12020 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20  xception)..     
12030 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12040 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
12050 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
12060 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
12070 6c 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ll;..    }....  
12080 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
12090 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
120a0 65 73 20 74 68 65 20 53 51 4c 69 74 65 54 79 70  es the SQLiteTyp
120b0 65 20 66 6f 72 20 61 20 67 69 76 65 6e 20 63 6f  e for a given co
120c0 6c 75 6d 6e 20 61 6e 64 20 72 6f 77 20 76 61 6c  lumn and row val
120d0 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ue...    /// </s
120e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
120f0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 6c   <param name="ol
12100 64 54 79 70 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  dType">..    ///
12110 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51   The original SQ
12120 4c 69 74 65 54 79 70 65 20 73 74 72 75 63 74 75  LiteType structu
12130 72 65 2c 20 62 61 73 65 64 20 6f 6e 6c 79 20 6f  re, based only o
12140 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0d 0a 20  n the column... 
12150 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
12160 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
12170 6e 61 6d 65 3d 22 74 65 78 74 22 3e 0d 0a 20 20  name="text">..  
12180 20 20 2f 2f 2f 20 54 68 65 20 74 65 78 74 75 61    /// The textua
12190 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  l value of the c
121a0 6f 6c 75 6d 6e 20 66 6f 72 20 61 20 67 69 76 65  olumn for a give
121b0 6e 20 72 6f 77 2e 0d 0a 20 20 20 20 2f 2f 2f 20  n row...    /// 
121c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
121d0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
121e0 20 2f 2f 2f 20 54 68 65 20 53 51 4c 69 74 65 54   /// The SQLiteT
121f0 79 70 65 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ype structure...
12200 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
12210 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  s>..    private 
12220 53 51 4c 69 74 65 54 79 70 65 20 47 65 74 53 51  SQLiteType GetSQ
12230 4c 69 74 65 54 79 70 65 28 0d 0a 20 20 20 20 20  LiteType(..     
12240 20 20 20 53 51 4c 69 74 65 54 79 70 65 20 6f 6c     SQLiteType ol
12250 64 54 79 70 65 2c 20 2f 2a 20 50 41 53 53 2d 54  dType, /* PASS-T
12260 48 52 4f 55 47 48 20 2a 2f 0d 0a 20 20 20 20 20  HROUGH */..     
12270 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 0d 0a     string text..
12280 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
12290 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 51  ..        if (SQ
122a0 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b  LiteConvert.Look
122b0 73 4c 69 6b 65 4e 75 6c 6c 28 74 65 78 74 29 29  sLikeNull(text))
122c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
122d0 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 54  turn new SQLiteT
122e0 79 70 65 28 54 79 70 65 41 66 66 69 6e 69 74 79  ype(TypeAffinity
122f0 2e 4e 75 6c 6c 2c 20 44 62 54 79 70 65 2e 4f 62  .Null, DbType.Ob
12300 6a 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ject);....      
12310 20 20 69 66 20 28 53 51 4c 69 74 65 43 6f 6e 76    if (SQLiteConv
12320 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 49 6e 74  ert.LooksLikeInt
12330 36 34 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20  64(text))..     
12340 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
12350 77 20 53 51 4c 69 74 65 54 79 70 65 28 54 79 70  w SQLiteType(Typ
12360 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c  eAffinity.Int64,
12370 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29 3b 0d   DbType.Int64);.
12380 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ...        if (S
12390 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f  QLiteConvert.Loo
123a0 6b 73 4c 69 6b 65 44 6f 75 62 6c 65 28 74 65 78  ksLikeDouble(tex
123b0 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
123c0 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69   return new SQLi
123d0 74 65 54 79 70 65 28 54 79 70 65 41 66 66 69 6e  teType(TypeAffin
123e0 69 74 79 2e 44 6f 75 62 6c 65 2c 20 44 62 54 79  ity.Double, DbTy
123f0 70 65 2e 44 6f 75 62 6c 65 29 3b 0d 0a 0d 0a 20  pe.Double);.... 
12400 20 20 20 20 20 20 20 69 66 20 28 28 5f 61 63 74         if ((_act
12410 69 76 65 53 74 61 74 65 6d 65 6e 74 20 21 3d 20  iveStatement != 
12420 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20  null) &&..      
12430 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 76        SQLiteConv
12440 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 44 61 74  ert.LooksLikeDat
12450 65 54 69 6d 65 28 5f 61 63 74 69 76 65 53 74 61  eTime(_activeSta
12460 74 65 6d 65 6e 74 2e 5f 73 71 6c 2c 20 74 65 78  tement._sql, tex
12470 74 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  t))..        {..
12480 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
12490 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70  rn new SQLiteTyp
124a0 65 28 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44  e(TypeAffinity.D
124b0 61 74 65 54 69 6d 65 2c 20 44 62 54 79 70 65 2e  ateTime, DbType.
124c0 44 61 74 65 54 69 6d 65 29 3b 0d 0a 20 20 20 20  DateTime);..    
124d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
124e0 20 72 65 74 75 72 6e 20 6f 6c 64 54 79 70 65 3b   return oldType;
124f0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
12500 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
12510 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
12520 74 68 65 20 53 51 4c 69 74 65 54 79 70 65 20 66  the SQLiteType f
12530 6f 72 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d  or a given colum
12540 6e 2c 20 61 6e 64 20 63 61 63 68 65 73 20 69 74  n, and caches it
12550 20 74 6f 20 61 76 6f 69 64 20 72 65 70 65 74 65   to avoid repete
12560 74 69 76 65 20 69 6e 74 65 72 6f 70 20 63 61 6c  tive interop cal
12570 6c 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ls...    /// </s
12580 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
12590 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c   <param name="fl
125a0 61 67 73 22 3e 54 68 65 20 66 6c 61 67 73 20 61  ags">The flags a
125b0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
125c0 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63  he parent connec
125d0 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 3c 2f 70 61  tion object.</pa
125e0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
125f0 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
12600 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
12610 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
12620 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
12630 3e 41 20 53 51 4c 69 74 65 54 79 70 65 20 73 74  >A SQLiteType st
12640 72 75 63 74 75 72 65 3c 2f 72 65 74 75 72 6e 73  ructure</returns
12650 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 53  >..    private S
12660 51 4c 69 74 65 54 79 70 65 20 47 65 74 53 51 4c  QLiteType GetSQL
12670 69 74 65 54 79 70 65 28 53 51 4c 69 74 65 43 6f  iteType(SQLiteCo
12680 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
12690 61 67 73 2c 20 69 6e 74 20 69 29 0d 0a 20 20 20  ags, int i)..   
126a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
126b0 74 65 54 79 70 65 20 74 79 70 20 3d 20 5f 66 69  teType typ = _fi
126c0 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d 3b  eldTypeArray[i];
126d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
126e0 74 79 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  typ == null)..  
126f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12700 20 20 20 20 20 2f 2f 20 49 6e 69 74 69 61 6c 69       // Initiali
12710 7a 65 20 74 68 69 73 20 63 6f 6c 75 6d 6e 27 73  ze this column's
12720 20 66 69 65 6c 64 20 74 79 70 65 20 69 6e 73 74   field type inst
12730 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ance..          
12740 20 20 74 79 70 20 3d 20 5f 66 69 65 6c 64 54 79    typ = _fieldTy
12750 70 65 41 72 72 61 79 5b 69 5d 20 3d 20 6e 65 77  peArray[i] = new
12760 20 53 51 4c 69 74 65 54 79 70 65 28 29 3b 0d 0a   SQLiteType();..
12770 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
12780 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 74 20 69       // If not i
12790 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 65 6e  nitialized, then
127a0 20 66 65 74 63 68 20 74 68 65 20 64 65 63 6c 61   fetch the decla
127b0 72 65 64 20 63 6f 6c 75 6d 6e 20 64 61 74 61 74  red column datat
127c0 79 70 65 20 61 6e 64 20 61 74 74 65 6d 70 74 20  ype and attempt 
127d0 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 0d 0a 20  to convert it.. 
127e0 20 20 20 20 20 20 20 2f 2f 20 74 6f 20 61 20 6b         // to a k
127f0 6e 6f 77 6e 20 44 62 54 79 70 65 2e 0d 0a 20 20  nown DbType...  
12800 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 41 66        if (typ.Af
12810 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66  finity == TypeAf
12820 66 69 6e 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c  finity.Uninitial
12830 69 7a 65 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  ized)..        {
12840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79  ..            ty
12850 70 2e 54 79 70 65 20 3d 20 53 51 4c 69 74 65 43  p.Type = SQLiteC
12860 6f 6e 76 65 72 74 2e 54 79 70 65 4e 61 6d 65 54  onvert.TypeNameT
12870 6f 44 62 54 79 70 65 28 0d 0a 20 20 20 20 20 20  oDbType(..      
12880 20 20 20 20 20 20 20 20 20 20 47 65 74 43 6f 6e            GetCon
12890 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 20 5f  nection(this), _
128a0 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
128b0 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28  _sql.ColumnType(
128c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
128d0 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65    _activeStateme
128e0 6e 74 2c 20 69 2c 20 72 65 66 20 74 79 70 2e 41  nt, i, ref typ.A
128f0 66 66 69 6e 69 74 79 29 2c 20 66 6c 61 67 73 29  ffinity), flags)
12900 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
12910 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
12920 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12930 20 20 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20     typ.Affinity 
12940 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  = _activeStateme
12950 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 41 66  nt._sql.ColumnAf
12960 66 69 6e 69 74 79 28 0d 0a 20 20 20 20 20 20 20  finity(..       
12970 20 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65           _active
12980 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a  Statement, i);..
12990 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
129a0 20 20 20 20 20 72 65 74 75 72 6e 20 74 79 70 3b       return typ;
129b0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
129c0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
129d0 20 20 2f 2f 2f 20 52 65 61 64 73 20 74 68 65 20    /// Reads the 
129e0 6e 65 78 74 20 72 6f 77 20 66 72 6f 6d 20 74 68  next row from th
129f0 65 20 72 65 73 75 6c 74 73 65 74 0d 0a 20 20 20  e resultset..   
12a00 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
12a10 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
12a20 73 3e 54 72 75 65 20 69 66 20 61 20 6e 65 77 20  s>True if a new 
12a30 72 6f 77 20 77 61 73 20 73 75 63 63 65 73 73 66  row was successf
12a40 75 6c 6c 79 20 6c 6f 61 64 65 64 20 61 6e 64 20  ully loaded and 
12a50 69 73 20 72 65 61 64 79 20 66 6f 72 20 70 72 6f  is ready for pro
12a60 63 65 73 73 69 6e 67 3c 2f 72 65 74 75 72 6e 73  cessing</returns
12a70 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
12a80 65 72 72 69 64 65 20 62 6f 6f 6c 20 52 65 61 64  erride bool Read
12a90 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
12aa0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
12ab0 3b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c  ;..      CheckCl
12ac0 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 69  osed();..      i
12ad0 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f  f (_throwOnDispo
12ae0 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61  sed) SQLiteComma
12af0 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e  nd.Check(_comman
12b00 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  d);....      if 
12b10 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69  ((_commandBehavi
12b20 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61  or & CommandBeha
12b30 76 69 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29  vior.SchemaOnly)
12b40 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   != 0)..        
12b50 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
12b60 0a 20 20 20 20 20 20 69 66 20 28 5f 72 65 61 64  .      if (_read
12b70 69 6e 67 53 74 61 74 65 20 3d 3d 20 2d 31 29 20  ingState == -1) 
12b80 2f 2f 20 46 69 72 73 74 20 73 74 65 70 20 77 61  // First step wa
12b90 73 20 61 6c 72 65 61 64 79 20 64 6f 6e 65 20 61  s already done a
12ba0 74 20 74 68 65 20 4e 65 78 74 52 65 73 75 6c 74  t the NextResult
12bb0 28 29 20 6c 65 76 65 6c 2c 20 73 6f 20 64 6f 6e  () level, so don
12bc0 27 74 20 73 74 65 70 20 61 67 61 69 6e 2c 20 6a  't step again, j
12bd0 75 73 74 20 72 65 74 75 72 6e 20 74 72 75 65 2e  ust return true.
12be0 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
12bf0 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65     _readingState
12c00 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 72   = 0;..        r
12c10 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
12c20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65     }..      else
12c30 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
12c40 74 65 20 3d 3d 20 30 29 20 2f 2f 20 41 63 74 69  te == 0) // Acti
12c50 76 65 6c 79 20 72 65 61 64 69 6e 67 20 72 6f 77  vely reading row
12c60 73 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  s..      {..    
12c70 20 20 20 20 2f 2f 20 44 6f 6e 27 74 20 72 65 61      // Don't rea
12c80 64 20 61 20 6e 65 77 20 72 6f 77 20 69 66 20 74  d a new row if t
12c90 68 65 20 63 6f 6d 6d 61 6e 64 20 62 65 68 61 76  he command behav
12ca0 69 6f 72 20 64 69 63 74 61 74 65 73 20 53 69 6e  ior dictates Sin
12cb0 67 6c 65 52 6f 77 2e 20 20 57 65 27 76 65 20 61  gleRow.  We've a
12cc0 6c 72 65 61 64 79 20 72 65 61 64 20 74 68 65 20  lready read the 
12cd0 66 69 72 73 74 20 72 6f 77 2e 0d 0a 20 20 20 20  first row...    
12ce0 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
12cf0 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
12d00 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 69 6e 67  andBehavior.Sing
12d10 6c 65 52 6f 77 29 20 3d 3d 20 30 29 0d 0a 20 20  leRow) == 0)..  
12d20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12d30 20 20 20 69 66 20 28 5f 61 63 74 69 76 65 53 74     if (_activeSt
12d40 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 53 74 65  atement._sql.Ste
12d50 70 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  p(_activeStateme
12d60 6e 74 29 20 3d 3d 20 74 72 75 65 29 0d 0a 20 20  nt) == true)..  
12d70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12d80 20 20 20 20 20 20 20 5f 73 74 65 70 43 6f 75 6e         _stepCoun
12d90 74 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t++;....        
12da0 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f      if (_keyInfo
12db0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
12dc0 20 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66           _keyInf
12dd0 6f 2e 52 65 73 65 74 28 29 3b 0d 0a 0d 0a 20 20  o.Reset();....  
12de0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
12df0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
12e00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
12e10 0d 0a 20 20 20 20 20 20 20 20 5f 72 65 61 64 69  ..        _readi
12e20 6e 67 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f 20  ngState = 1; // 
12e30 46 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67  Finished reading
12e40 20 72 6f 77 73 0d 0a 20 20 20 20 20 20 7d 0d 0a   rows..      }..
12e50 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66  ..      return f
12e60 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alse;..    }....
12e70 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
12e80 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
12e90 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
12ea0 20 72 6f 77 73 20 61 66 66 65 63 74 65 64 20 62   rows affected b
12eb0 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  y the statement 
12ec0 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 2e 0d  being executed..
12ed0 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c  .    /// The val
12ee0 75 65 20 72 65 74 75 72 6e 65 64 20 6d 61 79 20  ue returned may 
12ef0 6e 6f 74 20 62 65 20 61 63 63 75 72 61 74 65 20  not be accurate 
12f00 66 6f 72 20 44 44 4c 20 73 74 61 74 65 6d 65 6e  for DDL statemen
12f10 74 73 2e 20 20 41 6c 73 6f 2c 20 69 74 0d 0a 20  ts.  Also, it.. 
12f20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 62 65 20 2d     /// will be -
12f30 31 20 66 6f 72 20 61 6e 79 20 73 74 61 74 65 6d  1 for any statem
12f40 65 6e 74 20 74 68 61 74 20 64 6f 65 73 20 6e 6f  ent that does no
12f50 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74  t modify the dat
12f60 61 62 61 73 65 20 28 65 2e 67 2e 0d 0a 20 20 20  abase (e.g...   
12f70 20 2f 2f 2f 20 53 45 4c 45 43 54 29 2e 20 20 49   /// SELECT).  I
12f80 66 20 61 6e 20 6f 74 68 65 72 77 69 73 65 20 72  f an otherwise r
12f90 65 61 64 2d 6f 6e 6c 79 20 73 74 61 74 65 6d 65  ead-only stateme
12fa0 6e 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20  nt modifies the 
12fb0 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f  database..    //
12fc0 2f 20 69 6e 64 69 72 65 63 74 6c 79 20 28 65 2e  / indirectly (e.
12fd0 67 2e 20 76 69 61 20 61 20 76 69 72 74 75 61 6c  g. via a virtual
12fe0 20 74 61 62 6c 65 20 6f 72 20 75 73 65 72 2d 64   table or user-d
12ff0 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 29  efined function)
13000 2c 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  , the..    /// v
13010 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69 73  alue returned is
13020 20 75 6e 64 65 66 69 6e 65 64 2e 0d 0a 20 20 20   undefined...   
13030 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
13040 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
13050 72 69 64 65 20 69 6e 74 20 52 65 63 6f 72 64 73  ride int Records
13060 41 66 66 65 63 74 65 64 0d 0a 20 20 20 20 7b 0d  Affected..    {.
13070 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65  .      get { Che
13080 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
13090 74 75 72 6e 20 5f 72 6f 77 73 41 66 66 65 63 74  turn _rowsAffect
130a0 65 64 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ed; }..    }....
130b0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
130c0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78  >..    /// Index
130d0 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 64  er to retrieve d
130e0 61 74 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ata from a colum
130f0 6e 20 67 69 76 65 6e 20 69 74 73 20 6e 61 6d 65  n given its name
13100 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
13110 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
13120 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
13130 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  >The name of the
13140 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
13150 65 76 65 20 64 61 74 61 20 66 6f 72 3c 2f 70 61  eve data for</pa
13160 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
13170 65 74 75 72 6e 73 3e 54 68 65 20 76 61 6c 75 65  eturns>The value
13180 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
13190 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
131a0 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
131b0 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 74  verride object t
131c0 68 69 73 5b 73 74 72 69 6e 67 20 6e 61 6d 65 5d  his[string name]
131d0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
131e0 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
131f0 65 64 28 29 3b 20 72 65 74 75 72 6e 20 47 65 74  ed(); return Get
13200 56 61 6c 75 65 28 47 65 74 4f 72 64 69 6e 61 6c  Value(GetOrdinal
13210 28 6e 61 6d 65 29 29 3b 20 7d 0d 0a 20 20 20 20  (name)); }..    
13220 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
13230 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
13240 49 6e 64 65 78 65 72 20 74 6f 20 72 65 74 72 69  Indexer to retri
13250 65 76 65 20 64 61 74 61 20 66 72 6f 6d 20 61 20  eve data from a 
13260 63 6f 6c 75 6d 6e 20 67 69 76 65 6e 20 69 74 73  column given its
13270 20 69 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75   i..    /// </su
13280 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
13290 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
132a0 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
132b0 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
132c0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
132d0 6e 73 3e 54 68 65 20 76 61 6c 75 65 20 63 6f 6e  ns>The value con
132e0 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f  tained in the co
132f0 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  lumn</returns>..
13300 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
13310 69 64 65 20 6f 62 6a 65 63 74 20 74 68 69 73 5b  ide object this[
13320 69 6e 74 20 69 5d 0d 0a 20 20 20 20 7b 0d 0a 20  int i]..    {.. 
13330 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
13340 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
13350 72 6e 20 47 65 74 56 61 6c 75 65 28 69 29 3b 20  rn GetValue(i); 
13360 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
13370 70 72 69 76 61 74 65 20 76 6f 69 64 20 4c 6f 61  private void Loa
13380 64 4b 65 79 49 6e 66 6f 28 29 0d 0a 20 20 20 20  dKeyInfo()..    
13390 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  {..        if (_
133a0 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
133b0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
133c0 20 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66           _keyInf
133d0 6f 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20  o.Dispose();..  
133e0 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e            _keyIn
133f0 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  fo = null;..    
13400 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
13410 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 65 77 20   _keyInfo = new 
13420 53 51 4c 69 74 65 4b 65 79 52 65 61 64 65 72 28  SQLiteKeyReader(
13430 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74  _command.Connect
13440 69 6f 6e 2c 20 74 68 69 73 2c 20 5f 61 63 74 69  ion, this, _acti
13450 76 65 53 74 61 74 65 6d 65 6e 74 29 3b 0d 0a 20  veStatement);.. 
13460 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a           }..  }..}..