System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact b984131fd7a9c04ea6a938e41158815b29d63ebb:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75  ns.Generic;..  u
0180: 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c  sing System.Coll
0190: 65 63 74 69 6f 6e 73 2e 53 70 65 63 69 61 6c 69  ections.Speciali
01a0: 7a 65 64 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  zed;..  using Sy
01b0: 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 75 73  stem.Data;..  us
01c0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
01d0: 43 6f 6d 6d 6f 6e 3b 0d 0a 20 20 75 73 69 6e 67  Common;..  using
01e0: 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a   System.Globaliz
01f0: 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20  ation;....  /// 
0200: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  <summary>..  ///
0210: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
0220: 74 61 74 69 6f 6e 20 6f 66 20 44 62 44 61 74 61  tation of DbData
0230: 52 65 61 64 65 72 2e 0d 0a 20 20 2f 2f 2f 20 3c  Reader...  /// <
0240: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62  /summary>..  pub
0250: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
0260: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
0270: 72 20 3a 20 44 62 44 61 74 61 52 65 61 64 65 72  r : DbDataReader
0280: 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ..  {..    /// <
0290: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
02a0: 2f 20 55 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d  / Underlying com
02b0: 6d 61 6e 64 20 74 68 69 73 20 72 65 61 64 65 72  mand this reader
02c0: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 0d   is attached to.
02d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
02e0: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
02f0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 5f   SQLiteCommand _
0300: 63 6f 6d 6d 61 6e 64 3b 0d 0a 20 20 20 20 2f 2f  command;..    //
0310: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0320: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 70   /// The flags p
0330: 65 72 74 61 69 6e 69 6e 67 20 74 6f 20 74 68 65  ertaining to the
0340: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6e 6e   associated conn
0350: 65 63 74 69 6f 6e 20 28 76 69 61 20 74 68 65 20  ection (via the 
0360: 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 2f  command)...    /
0370: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0380: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0390: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
03a0: 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20 2f 2f   _flags;..    //
03b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
03c0: 20 2f 2f 2f 20 49 6e 64 65 78 20 6f 66 20 74 68   /// Index of th
03d0: 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
03e0: 65 6e 74 20 69 6e 20 74 68 65 20 63 6f 6d 6d 61  ent in the comma
03f0: 6e 64 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nd being process
0400: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
0410: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
0420: 61 74 65 20 69 6e 74 20 5f 61 63 74 69 76 65 53  ate int _activeS
0430: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 3b 0d 0a  tatementIndex;..
0440: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0450: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65  >..    /// Curre
0460: 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  nt statement bei
0470: 6e 67 20 52 65 61 64 28 29 0d 0a 20 20 20 20 2f  ng Read()..    /
0480: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0490: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
04a0: 65 53 74 61 74 65 6d 65 6e 74 20 5f 61 63 74 69  eStatement _acti
04b0: 76 65 53 74 61 74 65 6d 65 6e 74 3b 0d 0a 20 20  veStatement;..  
04c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
04d0: 0a 20 20 20 20 2f 2f 2f 20 53 74 61 74 65 20 6f  .    /// State o
04e0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  f the current st
04f0: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72  atement being pr
0500: 6f 63 65 73 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  ocessed...    //
0510: 2f 20 2d 31 20 3d 20 46 69 72 73 74 20 53 74 65  / -1 = First Ste
0520: 70 28 29 20 65 78 65 63 75 74 65 64 2c 20 73 6f  p() executed, so
0530: 20 74 68 65 20 66 69 72 73 74 20 52 65 61 64 28   the first Read(
0540: 29 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65  ) will be ignore
0550: 64 0d 0a 20 20 20 20 2f 2f 2f 20 20 30 20 3d 20  d..    ///  0 = 
0560: 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67  Actively reading
0570: 0d 0a 20 20 20 20 2f 2f 2f 20 20 31 20 3d 20 46  ..    ///  1 = F
0580: 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 0d  inished reading.
0590: 0a 20 20 20 20 2f 2f 2f 20 20 32 20 3d 20 4e 6f  .    ///  2 = No
05a0: 6e 2d 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  n-row-returning 
05b0: 73 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 20 72 65  statement, no re
05c0: 63 6f 72 64 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cords..    /// <
05d0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
05e0: 72 69 76 61 74 65 20 69 6e 74 20 5f 72 65 61 64  rivate int _read
05f0: 69 6e 67 53 74 61 74 65 3b 0d 0a 20 20 20 20 2f  ingState;..    /
0600: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0610: 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20    /// Number of 
0620: 72 65 63 6f 72 64 73 20 61 66 66 65 63 74 65 64  records affected
0630: 20 62 79 20 74 68 65 20 69 6e 73 65 72 74 2f 75   by the insert/u
0640: 70 64 61 74 65 20 73 74 61 74 65 6d 65 6e 74 73  pdate statements
0650: 20 65 78 65 63 75 74 65 64 20 6f 6e 20 74 68 65   executed on the
0660: 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 2f 2f   command..    //
0670: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0680: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 5f 72    private int _r
0690: 6f 77 73 41 66 66 65 63 74 65 64 3b 0d 0a 20 20  owsAffected;..  
06a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
06b0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 75 6e 74 20 6f  .    /// Count o
06c0: 66 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d 6e  f fields (column
06d0: 73 29 20 69 6e 20 74 68 65 20 72 6f 77 2d 72 65  s) in the row-re
06e0: 74 75 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e  turning statemen
06f0: 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
0700: 67 20 70 72 6f 63 65 73 73 65 64 0d 0a 20 20 20  g processed..   
0710: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0720: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
0730: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20   _fieldCount;.. 
0740: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0750: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
0760: 6d 62 65 72 20 6f 66 20 63 61 6c 6c 73 20 74 6f  mber of calls to
0770: 20 53 74 65 70 28 29 20 74 68 61 74 20 68 61 76   Step() that hav
0780: 65 20 72 65 74 75 72 6e 65 64 20 74 72 75 65 20  e returned true 
0790: 28 69 2e 65 2e 20 74 68 65 20 6e 75 6d 62 65 72  (i.e. the number
07a0: 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0d 0a 20   of rows that.. 
07b0: 20 20 20 2f 2f 2f 20 68 61 76 65 20 62 65 65 6e     /// have been
07c0: 20 72 65 61 64 20 69 6e 20 74 68 65 20 63 75 72   read in the cur
07d0: 72 65 6e 74 20 72 65 73 75 6c 74 20 73 65 74 29  rent result set)
07e0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
07f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0800: 74 65 20 69 6e 74 20 5f 73 74 65 70 43 6f 75 6e  te int _stepCoun
0810: 74 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  t;..    /// <sum
0820: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d  mary>..    /// M
0830: 61 70 73 20 74 68 65 20 66 69 65 6c 64 20 28 63  aps the field (c
0840: 6f 6c 75 6d 6e 29 20 6e 61 6d 65 73 20 74 6f 20  olumn) names to 
0850: 74 68 65 69 72 20 63 6f 72 72 65 73 70 6f 6e 64  their correspond
0860: 69 6e 67 20 69 6e 64 65 78 65 73 20 77 69 74 68  ing indexes with
0870: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0d  in the results..
0880: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0890: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
08a0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
08b0: 6e 67 2c 20 69 6e 74 3e 20 5f 66 69 65 6c 64 49  ng, int> _fieldI
08c0: 6e 64 65 78 65 73 3b 0d 0a 20 20 20 20 2f 2f 2f  ndexes;..    ///
08d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
08e0: 2f 2f 2f 20 44 61 74 61 74 79 70 65 73 20 6f 66  /// Datatypes of
08f0: 20 61 63 74 69 76 65 20 66 69 65 6c 64 73 20 28   active fields (
0900: 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74 68 65 20  columns) in the 
0910: 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
0920: 74 2c 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  t, used for type
0930: 2d 72 65 73 74 72 69 63 74 69 6e 67 20 64 61 74  -restricting dat
0940: 61 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  a..    /// </sum
0950: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0960: 74 65 20 53 51 4c 69 74 65 54 79 70 65 5b 5d 20  te SQLiteType[] 
0970: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 3b  _fieldTypeArray;
0980: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0990: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
09a0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
09b0: 68 65 20 64 61 74 61 72 65 61 64 65 72 0d 0a 20  he datareader.. 
09c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
09d0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 43  >..    private C
09e0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 5f  ommandBehavior _
09f0: 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 3b  commandBehavior;
0a00: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0a10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
0a20: 66 20 73 65 74 2c 20 74 68 65 6e 20 64 69 73 70  f set, then disp
0a30: 6f 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61  ose of the comma
0a40: 6e 64 20 6f 62 6a 65 63 74 20 77 68 65 6e 20 74  nd object when t
0a50: 68 65 20 72 65 61 64 65 72 20 69 73 20 66 69 6e  he reader is fin
0a60: 69 73 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ished..    /// <
0a70: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
0a80: 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 64 69  nternal bool _di
0a90: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 3b 0d 0a 0d  sposeCommand;...
0aa0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0ab0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73  y>..    /// If s
0ac0: 65 74 2c 20 74 68 65 6e 20 72 61 69 73 65 20 61  et, then raise a
0ad0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 68 65 6e  n exception when
0ae0: 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61   the object is a
0af0: 63 63 65 73 73 65 64 20 61 66 74 65 72 20 62 65  ccessed after be
0b00: 69 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  ing disposed... 
0b10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0b20: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0b30: 62 6f 6f 6c 20 5f 74 68 72 6f 77 4f 6e 44 69 73  bool _throwOnDis
0b40: 70 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  posed;....    //
0b50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0b60: 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66   /// An array of
0b70: 20 72 6f 77 69 64 27 73 20 66 6f 72 20 74 68 65   rowid's for the
0b80: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
0b90: 74 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61  t if CommandBeha
0ba0: 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 20 69 73 20  vior.KeyInfo is 
0bb0: 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
0bc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0bd0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0be0: 65 4b 65 79 52 65 61 64 65 72 20 5f 6b 65 79 49  eKeyReader _keyI
0bf0: 6e 66 6f 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  nfo;....    /// 
0c00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0c10: 2f 2f 20 4d 61 74 63 68 65 73 20 74 68 65 20 76  // Matches the v
0c20: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  ersion of the co
0c30: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
0c40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0c50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20     internal int 
0c60: 5f 76 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  _version;....   
0c70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0c80: 20 20 20 20 2f 2f 2f 20 54 68 65 20 22 73 74 75      /// The "stu
0c90: 62 22 20 28 69 2e 65 2e 20 70 6c 61 63 65 68 6f  b" (i.e. placeho
0ca0: 6c 64 65 72 29 20 62 61 73 65 20 73 63 68 65 6d  lder) base schem
0cb0: 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 77 68  a name to use wh
0cc0: 65 6e 20 72 65 74 75 72 6e 69 6e 67 0d 0a 20 20  en returning..  
0cd0: 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 73 63 68    /// column sch
0ce0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ema information.
0cf0: 20 20 4d 61 74 63 68 65 73 20 74 68 65 20 62 61    Matches the ba
0d00: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 75  se schema name u
0d10: 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  sed by the..    
0d20: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 63  /// associated c
0d30: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
0d40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0d50: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
0d60: 6e 67 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61  ng _baseSchemaNa
0d70: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  me;....    /// <
0d80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0d90: 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74  / Internal const
0da0: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
0db0: 7a 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  zes the dataread
0dc0: 65 72 20 61 6e 64 20 73 65 74 73 20 75 70 20 74  er and sets up t
0dd0: 6f 20 62 65 67 69 6e 20 65 78 65 63 75 74 69 6e  o begin executin
0de0: 67 20 73 74 61 74 65 6d 65 6e 74 73 0d 0a 20 20  g statements..  
0df0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0e00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0e10: 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65 20   name="cmd">The 
0e20: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74 68  SQLiteCommand th
0e30: 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20 69  is data reader i
0e40: 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20  s for</param>.. 
0e50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e60: 6d 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20  me="behave">The 
0e70: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
0e80: 72 20 6f 66 20 74 68 65 20 64 61 74 61 20 72 65  r of the data re
0e90: 61 64 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ader</param>..  
0ea0: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
0eb0: 65 44 61 74 61 52 65 61 64 65 72 28 53 51 4c 69  eDataReader(SQLi
0ec0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43  teCommand cmd, C
0ed0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 62  ommandBehavior b
0ee0: 65 68 61 76 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ehave)..    {.. 
0ef0: 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69 73       _throwOnDis
0f00: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
0f10: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20       _command = 
0f20: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 5f 76 65 72  cmd;..      _ver
0f30: 73 69 6f 6e 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  sion = _command.
0f40: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 76 65 72 73  Connection._vers
0f50: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 5f 62 61 73  ion;..      _bas
0f60: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 5f 63  eSchemaName = _c
0f70: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
0f80: 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  n._baseSchemaNam
0f90: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 63 6f 6d  e;....      _com
0fa0: 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 3d 20 62  mandBehavior = b
0fb0: 65 68 61 76 65 3b 0d 0a 20 20 20 20 20 20 5f 61  ehave;..      _a
0fc0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
0fd0: 64 65 78 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  dex = -1;..     
0fe0: 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d   _rowsAffected =
0ff0: 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65   -1;....      Re
1000: 66 72 65 73 68 46 6c 61 67 73 28 29 3b 0d 0a 0d  freshFlags();...
1010: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
1020: 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
1030: 64 28 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  d(GetConnection(
1040: 74 68 69 73 29 2c 0d 0a 20 20 20 20 20 20 20 20  this),..        
1050: 20 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e    new Connection
1060: 45 76 65 6e 74 41 72 67 73 28 53 51 4c 69 74 65  EventArgs(SQLite
1070: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
1080: 79 70 65 2e 4e 65 77 44 61 74 61 52 65 61 64 65  ype.NewDataReade
1090: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 75  r,..          nu
10a0: 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61  ll, null, _comma
10b0: 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c 2c 20  nd, this, null, 
10c0: 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  null, new object
10d0: 5b 5d 20 7b 20 62 65 68 61 76 65 20 7d 29 29 3b  [] { behave }));
10e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 63  ....      if (_c
10f0: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
1100: 0a 20 20 20 20 20 20 20 20 20 20 4e 65 78 74 52  .          NextR
1110: 65 73 75 6c 74 28 29 3b 0d 0a 20 20 20 20 7d 0d  esult();..    }.
1120: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1190: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
11a0: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
11b0: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
11c0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
11d0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
11e0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
11f0: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
1200: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
1210: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
1220: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
1230: 64 20 26 26 20 5f 74 68 72 6f 77 4f 6e 44 69 73  d && _throwOnDis
1240: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
1250: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
1260: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
1270: 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c  ption(typeof(SQL
1280: 69 74 65 44 61 74 61 52 65 61 64 65 72 29 2e 4e  iteDataReader).N
1290: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
12a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1310: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1320: 0d 0a 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73  ..    /// Dispos
1330: 65 20 6f 66 20 61 6c 6c 20 72 65 73 6f 75 72 63  e of all resourc
1340: 65 73 20 75 73 65 64 20 62 79 20 74 68 69 73 20  es used by this 
1350: 64 61 74 61 72 65 61 64 65 72 2e 0d 0a 20 20 20  datareader...   
1360: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1380: 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22  name="disposing"
1390: 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70  ></param>..    p
13a0: 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64  rotected overrid
13b0: 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  e void Dispose(b
13c0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
13d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
13e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
13f0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1400: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1410: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1420: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
1430: 72 67 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  rgs(SQLiteConnec
1440: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 44 69  tionEventType.Di
1450: 73 70 6f 73 69 6e 67 44 61 74 61 52 65 61 64 65  sposingDataReade
1460: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
1470: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d  null, null, _com
1480: 6d 61 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c  mand, this, null
1490: 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65  , null, new obje
14a0: 63 74 5b 5d 20 7b 20 64 69 73 70 6f 73 69 6e 67  ct[] { disposing
14b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ,..            d
14c0: 69 73 70 6f 73 65 64 2c 20 5f 63 6f 6d 6d 61 6e  isposed, _comman
14d0: 64 42 65 68 61 76 69 6f 72 2c 20 5f 72 65 61 64  dBehavior, _read
14e0: 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f 77 73 41  ingState, _rowsA
14f0: 66 66 65 63 74 65 64 2c 20 5f 73 74 65 70 43 6f  ffected, _stepCo
1500: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
1510: 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 20 5f    _fieldCount, _
1520: 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 2c 20  disposeCommand, 
1530: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
1540: 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   }));....       
1550: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1570: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1580: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
15a0: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15d0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1610: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1620: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1630: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1640: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1650: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1680: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
16d0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
16e0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
16f0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1740: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1760: 4f 54 45 3a 20 46 69 78 20 66 6f 72 20 74 69 63  OTE: Fix for tic
1770: 6b 65 74 20 5b 65 31 62 32 65 30 66 37 36 39 5d  ket [e1b2e0f769]
1780: 2c 20 64 6f 20 4e 4f 54 20 74 68 72 6f 77 20 65  , do NOT throw e
1790: 78 63 65 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20  xceptions..     
17a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17b0: 20 20 20 20 77 68 69 6c 65 20 77 65 20 61 72 65      while we are
17c0: 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64 2e   being disposed.
17d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
17f0: 20 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69        _throwOnDi
1800: 73 70 6f 73 65 64 20 3d 20 66 61 6c 73 65 3b 0d  sposed = false;.
1810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1820: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1830: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
1840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1850: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
1860: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20  disposing);.... 
1870: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1880: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1890: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
18a0: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
18b0: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
18c0: 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  point...        
18d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
18e0: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
18f0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1900: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1910: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1980: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f  .    internal vo
1990: 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  id Cancel()..   
19a0: 20 7b 0d 0a 20 20 20 20 20 20 5f 76 65 72 73 69   {..      _versi
19b0: 6f 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  on = 0;..    }..
19c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
19d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c 6f  ry>..    /// Clo
19e0: 73 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  ses the dataread
19f0: 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20  er, potentially 
1a00: 63 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  closing the conn
1a10: 65 63 74 69 6f 6e 20 61 73 20 77 65 6c 6c 20 69  ection as well i
1a20: 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  f CommandBehavio
1a30: 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f  r.CloseConnectio
1a40: 6e 20 77 61 73 20 73 70 65 63 69 66 69 65 64 2e  n was specified.
1a50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1a60: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
1a70: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
1a80: 6c 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  lose()..    {.. 
1a90: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
1aa0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53  ed();....      S
1ab0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
1ac0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1ad0: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1ae0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f            new Co
1af0: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
1b00: 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  s(SQLiteConnecti
1b10: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73  onEventType.Clos
1b20: 69 6e 67 44 61 74 61 52 65 61 64 65 72 2c 0d 0a  ingDataReader,..
1b30: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
1b40: 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61 6e 64 2c 20  null, _command, 
1b50: 74 68 69 73 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  this, null, null
1b60: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
1b70: 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f   _commandBehavio
1b80: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 72  r,..          _r
1b90: 65 61 64 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f  eadingState, _ro
1ba0: 77 73 41 66 66 65 63 74 65 64 2c 20 5f 73 74 65  wsAffected, _ste
1bb0: 70 43 6f 75 6e 74 2c 20 5f 66 69 65 6c 64 43 6f  pCount, _fieldCo
1bc0: 75 6e 74 2c 20 5f 64 69 73 70 6f 73 65 43 6f 6d  unt, _disposeCom
1bd0: 6d 61 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  mand,..         
1be0: 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65   _throwOnDispose
1bf0: 64 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  d }));....      
1c00: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
1c10: 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61        if (_comma
1c20: 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nd != null)..   
1c30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c40: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1c50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c60: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1c70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c80: 20 20 2f 2f 20 4d 61 6b 65 20 73 75 72 65 20 77    // Make sure w
1c90: 65 27 76 65 20 6e 6f 74 20 62 65 65 6e 20 63 61  e've not been ca
1ca0: 6e 63 65 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  nceled..        
1cb0: 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73 69        if (_versi
1cc0: 6f 6e 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  on != 0)..      
1cd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ce0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d10: 20 20 20 20 20 77 68 69 6c 65 20 28 4e 65 78 74       while (Next
1d20: 52 65 73 75 6c 74 28 29 29 0d 0a 20 20 20 20 20  Result())..     
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d70: 20 20 20 20 20 20 20 20 63 61 74 63 68 28 53 51          catch(SQ
1d80: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 29 0d 0a  LiteException)..
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1db0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1dc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1dd0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 52 65       _command.Re
1de0: 73 65 74 44 61 74 61 52 65 61 64 65 72 28 29 3b  setDataReader();
1df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
1e10: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e30: 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64 61 74     // If the dat
1e40: 61 72 65 61 64 65 72 27 73 20 62 65 68 61 76 69  areader's behavi
1e50: 6f 72 20 69 6e 63 6c 75 64 65 73 20 63 6c 6f 73  or includes clos
1e60: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
1e70: 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73 6f 20 68  on, then do so h
1e80: 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ere...          
1e90: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
1ea0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
1eb0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73  andBehavior.Clos
1ec0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 21 3d 20  eConnection) != 
1ed0: 30 20 26 26 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  0 && _command.Co
1ee0: 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  nnection != null
1ef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f00: 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e     _command.Conn
1f10: 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d  ection.Close();.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f40: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
1f50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f60: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 64 69           if (_di
1f70: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 29 0d 0a 20  sposeCommand).. 
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63 6f               _co
1f90: 6d 6d 61 6e 64 2e 44 69 73 70 6f 73 65 28 29 3b  mmand.Dispose();
1fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
1fb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fc0: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 6e      _command = n
1fd0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f 61  ull;..        _a
1fe0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d  ctiveStatement =
1ff0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2000: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
2010: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f  null;..        _
2020: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d  fieldTypeArray =
2030: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d   null;..      }.
2040: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
2050: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2060: 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
2070: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2080: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65  {..          _ke
2090: 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b  yInfo.Dispose();
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79  ..          _key
20b0: 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Info = null;..  
20c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
20d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
20e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20f0: 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20 65    /// Throw an e
2100: 72 72 6f 72 20 69 66 20 74 68 65 20 64 61 74 61  rror if the data
2110: 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
2120: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2130: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
2140: 65 20 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73  e void CheckClos
2150: 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
2160: 20 20 20 69 66 20 28 21 5f 74 68 72 6f 77 4f 6e     if (!_throwOn
2170: 44 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  Disposed)..     
2180: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
2190: 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64      if (_command
21a0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
21b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
21c0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
21d0: 65 70 74 69 6f 6e 28 22 44 61 74 61 52 65 61 64  eption("DataRead
21e0: 65 72 20 68 61 73 20 62 65 65 6e 20 63 6c 6f 73  er has been clos
21f0: 65 64 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ed");....      i
2200: 66 20 28 5f 76 65 72 73 69 6f 6e 20 3d 3d 20 30  f (_version == 0
2210: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
2220: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2230: 74 69 6f 6e 28 22 45 78 65 63 75 74 69 6f 6e 20  tion("Execution 
2240: 77 61 73 20 61 62 6f 72 74 65 64 20 62 79 20 74  was aborted by t
2250: 68 65 20 75 73 65 72 22 29 3b 0d 0a 0d 0a 20 20  he user");....  
2260: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2270: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
2280: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
2290: 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ction;....      
22a0: 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  if (connection._
22b0: 76 65 72 73 69 6f 6e 20 21 3d 20 5f 76 65 72 73  version != _vers
22c0: 69 6f 6e 20 7c 7c 20 63 6f 6e 6e 65 63 74 69 6f  ion || connectio
22d0: 6e 2e 53 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65  n.State != Conne
22e0: 63 74 69 6f 6e 53 74 61 74 65 2e 4f 70 65 6e 29  ctionState.Open)
22f0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
2300: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
2310: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 43  tionException("C
2320: 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 63 6c  onnection was cl
2330: 6f 73 65 64 2c 20 73 74 61 74 65 6d 65 6e 74 20  osed, statement 
2340: 77 61 73 20 74 65 72 6d 69 6e 61 74 65 64 22 29  was terminated")
2350: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
2360: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2370: 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20     /// Throw an 
2380: 65 72 72 6f 72 20 69 66 20 61 20 72 6f 77 20 69  error if a row i
2390: 73 20 6e 6f 74 20 6c 6f 61 64 65 64 0d 0a 20 20  s not loaded..  
23a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
23b0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
23c0: 69 64 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77  id CheckValidRow
23d0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
23e0: 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
23f0: 74 65 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  te != 0)..      
2400: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
2410: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
2420: 70 74 69 6f 6e 28 22 4e 6f 20 63 75 72 72 65 6e  ption("No curren
2430: 74 20 72 6f 77 22 29 3b 0d 0a 20 20 20 20 7d 0d  t row");..    }.
2440: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2450: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
2460: 75 6d 65 72 61 74 6f 72 20 73 75 70 70 6f 72 74  umerator support
2470: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2480: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
2490: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
24a0: 20 44 62 45 6e 75 6d 65 72 61 74 6f 72 20 6f 62   DbEnumerator ob
24b0: 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ject.</returns>.
24c0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
24d0: 72 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 73  ride Collections
24e0: 2e 49 45 6e 75 6d 65 72 61 74 6f 72 20 47 65 74  .IEnumerator Get
24f0: 45 6e 75 6d 65 72 61 74 6f 72 28 29 0d 0a 20 20  Enumerator()..  
2500: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
2510: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
2520: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 62     return new Db
2530: 45 6e 75 6d 65 72 61 74 6f 72 28 74 68 69 73 2c  Enumerator(this,
2540: 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
2550: 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
2560: 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65  avior.CloseConne
2570: 63 74 69 6f 6e 29 20 3d 3d 20 43 6f 6d 6d 61 6e  ction) == Comman
2580: 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43  dBehavior.CloseC
2590: 6f 6e 6e 65 63 74 69 6f 6e 29 29 3b 0d 0a 20 20  onnection));..  
25a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
25b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
25c0: 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65  / Not implemente
25d0: 64 2e 20 20 52 65 74 75 72 6e 73 20 30 0d 0a 20  d.  Returns 0.. 
25e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
25f0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
2600: 65 72 72 69 64 65 20 69 6e 74 20 44 65 70 74 68  erride int Depth
2610: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
2620: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
2630: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2640: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43  ed();..        C
2650: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
2660: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
2670: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2680: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2690: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
26a0: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
26b0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
26c0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75  the current resu
26d0: 6c 74 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ltset..    /// <
26e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
26f0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
2700: 6e 74 20 46 69 65 6c 64 43 6f 75 6e 74 0d 0a 20  nt FieldCount.. 
2710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
2720: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2730: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
2740: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2750: 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  kClosed();....  
2760: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
2770: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
2780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66         return _f
2790: 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  ieldCount;....  
27a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69        return _fi
27b0: 65 6c 64 43 6f 75 6e 74 20 2b 20 5f 6b 65 79 49  eldCount + _keyI
27c0: 6e 66 6f 2e 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  nfo.Count;..    
27d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
27e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
27f0: 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 63 65 73 20  .    /// Forces 
2800: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
2810: 6c 61 67 73 20 63 61 63 68 65 64 20 62 79 20 74  lags cached by t
2820: 68 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20  his data reader 
2830: 74 6f 20 62 65 20 72 65 66 72 65 73 68 65 64 0d  to be refreshed.
2840: 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68  .    /// from th
2850: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6e  e underlying con
2860: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
2870: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2880: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 52 65    public void Re
2890: 66 72 65 73 68 46 6c 61 67 73 28 29 0d 0a 20 20  freshFlags()..  
28a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
28b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
28c0: 0a 20 20 20 20 20 20 20 20 5f 66 6c 61 67 73 20  .        _flags 
28d0: 3d 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  = SQLiteCommand.
28e0: 47 65 74 46 6c 61 67 73 28 5f 63 6f 6d 6d 61 6e  GetFlags(_comman
28f0: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
2900: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2910: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
2920: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2930: 6f 77 73 20 73 65 65 6e 20 73 6f 20 66 61 72 20  ows seen so far 
2940: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  in the current r
2950: 65 73 75 6c 74 20 73 65 74 2e 0d 0a 20 20 20 20  esult set...    
2960: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2970: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 53      public int S
2980: 74 65 70 43 6f 75 6e 74 0d 0a 20 20 20 20 7b 0d  tepCount..    {.
2990: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
29a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29b0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
29c0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
29d0: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
29e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29f0: 20 72 65 74 75 72 6e 20 5f 73 74 65 70 43 6f 75   return _stepCou
2a00: 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  nt;..        }..
2a10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
2a20: 76 61 74 65 20 69 6e 74 20 50 72 69 76 61 74 65  vate int Private
2a30: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
2a40: 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
2a50: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
2a60: 66 69 65 6c 64 43 6f 75 6e 74 3b 20 7d 0d 0a 20  fieldCount; }.. 
2a70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
2a80: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
2a90: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
2aa0: 75 6d 62 65 72 20 6f 66 20 76 69 73 69 62 6c 65  umber of visible
2ab0: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
2ac0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
2ad0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2ae0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
2af0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 69   override int Vi
2b00: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 0d  sibleFieldCount.
2b10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2b20: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2b30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
2b40: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68  d();..        Ch
2b50: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20  eckClosed();..  
2b60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 72 69        return Pri
2b70: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
2b80: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 7d 0d  Count;..      }.
2b90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2ba0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2bb0: 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
2bc0: 20 69 73 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   is used to make
2bd0: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
2be0: 20 73 65 74 20 69 73 20 6f 70 65 6e 20 61 6e 64   set is open and
2bf0: 20 61 20 72 6f 77 20 69 73 20 63 75 72 72 65 6e   a row is curren
2c00: 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a  tly available...
2c10: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2c20: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
2c30: 76 6f 69 64 20 56 65 72 69 66 79 46 6f 72 47 65  void VerifyForGe
2c40: 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t()..    {..    
2c50: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
2c60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2c70: 6b 56 61 6c 69 64 52 6f 77 28 29 3b 0d 0a 20 20  kValidRow();..  
2c80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2c90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2ca0: 2f 20 53 51 4c 69 74 65 20 69 73 20 69 6e 68 65  / SQLite is inhe
2cb0: 72 65 6e 74 6c 79 20 75 6e 2d 74 79 70 65 64 2e  rently un-typed.
2cc0: 20 20 41 6c 6c 20 64 61 74 61 74 79 70 65 73 20    All datatypes 
2cd0: 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20 6e 61  in SQLite are na
2ce0: 74 69 76 65 6c 79 20 73 74 72 69 6e 67 73 2e 20  tively strings. 
2cf0: 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   The definition 
2d00: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  of the columns o
2d10: 66 20 61 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  f a table..    /
2d20: 2f 2f 20 61 6e 64 20 74 68 65 20 61 66 66 69 6e  // and the affin
2d30: 69 74 79 20 6f 66 20 72 65 74 75 72 6e 65 64 20  ity of returned 
2d40: 74 79 70 65 73 20 61 72 65 20 61 6c 6c 20 77 65  types are all we
2d50: 20 68 61 76 65 20 74 6f 20 67 6f 20 6f 6e 20 74   have to go on t
2d60: 6f 20 74 79 70 65 2d 72 65 73 74 72 69 63 74 20  o type-restrict 
2d70: 64 61 74 61 20 69 6e 20 74 68 65 20 72 65 61 64  data in the read
2d80: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 0d 0a 20 20  er...    ///..  
2d90: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
2da0: 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ion attempts to 
2db0: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
2dc0: 74 79 70 65 20 6f 66 20 64 61 74 61 20 62 65 69  type of data bei
2dd0: 6e 67 20 72 65 71 75 65 73 74 65 64 20 6f 66 20  ng requested of 
2de0: 61 20 63 6f 6c 75 6d 6e 20 6d 61 74 63 68 65 73  a column matches
2df0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
2e00: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 6e   the column.  In
2e10: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63 61  ..    /// the ca
2e20: 73 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  se of columns th
2e30: 61 74 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  at are not backe
2e40: 64 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 64  d into a table d
2e50: 65 66 69 6e 69 74 69 6f 6e 2c 20 77 65 20 61 74  efinition, we at
2e60: 74 65 6d 70 74 20 74 6f 20 6d 61 74 63 68 20 75  tempt to match u
2e70: 70 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  p the affinity o
2e80: 66 20 61 20 63 6f 6c 75 6d 6e 20 28 69 6e 74 2c  f a column (int,
2e90: 20 64 6f 75 62 6c 65 2c 20 73 74 72 69 6e 67 20   double, string 
2ea0: 6f 72 20 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f  or blob)..    //
2eb0: 2f 20 74 6f 20 61 20 73 65 74 20 6f 66 20 6b 6e  / to a set of kn
2ec0: 6f 77 6e 20 74 79 70 65 73 20 74 68 61 74 20 63  own types that c
2ed0: 6c 6f 73 65 6c 79 20 6d 61 74 63 68 20 74 68 61  losely match tha
2ee0: 74 20 61 66 66 69 6e 69 74 79 2e 20 20 49 74 27  t affinity.  It'
2ef0: 73 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 73  s not an exact s
2f00: 63 69 65 6e 63 65 2c 20 62 75 74 20 69 74 73 20  cience, but its 
2f10: 74 68 65 20 62 65 73 74 20 77 65 20 63 61 6e 20  the best we can 
2f20: 64 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  do...    /// </s
2f30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2f40: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2f50: 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f  /// This functio
2f60: 6e 20 74 68 72 6f 77 73 20 61 6e 20 49 6e 76 61  n throws an Inva
2f70: 6c 69 64 54 79 70 65 43 61 73 74 28 29 20 65 78  lidTypeCast() ex
2f80: 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 72  ception if the r
2f90: 65 71 75 65 73 74 65 64 20 74 79 70 65 20 64 6f  equested type do
2fa0: 65 73 6e 27 74 20 6d 61 74 63 68 20 74 68 65 20  esn't match the 
2fb0: 63 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e 69 74  column's definit
2fc0: 69 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74 79 2e  ion or affinity.
2fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
2fe0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  rns>..    /// <p
2ff0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
3000: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
3010: 6f 6c 75 6d 6e 20 74 6f 20 74 79 70 65 2d 63 68  olumn to type-ch
3020: 65 63 6b 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eck</param>..   
3030: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3040: 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
3050: 77 65 20 77 61 6e 74 20 74 6f 20 67 65 74 20 6f  we want to get o
3060: 75 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ut of the column
3070: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 72  </param>..    pr
3080: 69 76 61 74 65 20 54 79 70 65 41 66 66 69 6e 69  ivate TypeAffini
3090: 74 79 20 56 65 72 69 66 79 54 79 70 65 28 69 6e  ty VerifyType(in
30a0: 74 20 69 2c 20 44 62 54 79 70 65 20 74 79 70 29  t i, DbType typ)
30b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
30c0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66   TypeAffinity af
30d0: 66 69 6e 69 74 79 20 3d 20 47 65 74 53 51 4c 69  finity = GetSQLi
30e0: 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 69  teType(_flags, i
30f0: 29 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 0d 0a 20  ).Affinity;.... 
3100: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61         switch (a
3110: 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20  ffinity)..      
3120: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3130: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
3140: 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
3150: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
3160: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74  yp == DbType.Int
3170: 36 34 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  64) return affin
3180: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3190: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
31a0: 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29 20 72   DbType.Int32) r
31b0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
31c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31d0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
31e0: 70 65 2e 49 6e 74 31 36 29 20 72 65 74 75 72 6e  pe.Int16) return
31f0: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3200: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3210: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 79  typ == DbType.By
3220: 74 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  te) return affin
3230: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3240: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
3250: 20 44 62 54 79 70 65 2e 53 42 79 74 65 29 20 72   DbType.SByte) r
3260: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3280: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3290: 70 65 2e 42 6f 6f 6c 65 61 6e 29 20 72 65 74 75  pe.Boolean) retu
32a0: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20  rn affinity;..  
32b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
32c0: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
32d0: 44 61 74 65 54 69 6d 65 29 20 72 65 74 75 72 6e  DateTime) return
32e0: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3300: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 6f  typ == DbType.Do
3310: 75 62 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66  uble) return aff
3320: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3330: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3340: 3d 3d 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65  == DbType.Single
3350: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
3360: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
3370: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
3380: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72  bType.Decimal) r
3390: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
33a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33b0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
33c0: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
33d0: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a  finity.Double:..
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f0: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3400: 65 2e 44 6f 75 62 6c 65 29 20 72 65 74 75 72 6e  e.Double) return
3410: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3420: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3430: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 69  typ == DbType.Si
3440: 6e 67 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66  ngle) return aff
3450: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3460: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3470: 3d 3d 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61  == DbType.Decima
3480: 6c 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  l) return affini
3490: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
34a0: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
34b0: 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29  DbType.DateTime)
34c0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
34d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
34e0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
34f0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
3500: 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0d 0a  Affinity.Text:..
3510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3520: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3530: 65 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e  e.String) return
3540: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3550: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3560: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 47 75  typ == DbType.Gu
3570: 69 64 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  id) return affin
3580: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3590: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
35a0: 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65   DbType.DateTime
35b0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
35c0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
35d0: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
35e0: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72  bType.Decimal) r
35f0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3610: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
3620: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
3630: 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
3640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
3650: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
3660: 47 75 69 64 29 20 72 65 74 75 72 6e 20 61 66 66  Guid) return aff
3670: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3680: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3690: 3d 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79  == DbType.Binary
36a0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
36b0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
36c0: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
36d0: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 20 72 65  bType.String) re
36e0: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a  turn affinity;..
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3700: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
3710: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 68 72  }....        thr
3720: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 43 61  ow new InvalidCa
3730: 73 74 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  stException();..
3740: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
3750: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3760: 2f 2f 2f 20 49 6e 76 6f 6b 65 73 20 74 68 65 20  /// Invokes the 
3770: 64 61 74 61 20 72 65 61 64 65 72 20 76 61 6c 75  data reader valu
3780: 65 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 66 69  e callback confi
3790: 67 75 72 65 64 20 66 6f 72 20 74 68 65 20 64 61  gured for the da
37a0: 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20  tabase..    /// 
37b0: 74 79 70 65 20 6e 61 6d 65 20 61 73 73 6f 63 69  type name associ
37c0: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70  ated with the sp
37d0: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 20  ecified column. 
37e0: 20 49 66 20 6e 6f 20 64 61 74 61 20 72 65 61 64   If no data read
37f0: 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75  er..    /// valu
3800: 65 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 61 76  e callback is av
3810: 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
3820: 64 61 74 61 62 61 73 65 20 74 79 70 65 20 6e 61  database type na
3830: 6d 65 2c 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d  me, do nothing..
3840: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3850: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
3860: 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22  ram name="index"
3870: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 69  >..    /// The i
3880: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
3890: 6d 6e 20 62 65 69 6e 67 20 72 65 61 64 2e 0d 0a  mn being read...
38a0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
38b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
38c0: 20 6e 61 6d 65 3d 22 65 76 65 6e 74 41 72 67 73   name="eventArgs
38d0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
38e0: 65 78 74 72 61 20 65 76 65 6e 74 20 64 61 74 61  extra event data
38f0: 20 74 6f 20 70 61 73 73 20 69 6e 74 6f 20 74 68   to pass into th
3900: 65 20 63 61 6c 6c 62 61 63 6b 2e 0d 0a 20 20 20  e callback...   
3910: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
3920: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3930: 6d 65 3d 22 63 6f 6d 70 6c 65 74 65 22 3e 0d 0a  me="complete">..
3940: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
3950: 20 69 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   if the default 
3960: 68 61 6e 64 6c 69 6e 67 20 66 6f 72 20 74 68 65  handling for the
3970: 20 64 61 74 61 20 72 65 61 64 65 72 20 63 61 6c   data reader cal
3980: 6c 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20  l should be..   
3990: 20 2f 2f 2f 20 73 6b 69 70 70 65 64 2e 20 20 49   /// skipped.  I
39a0: 66 20 74 68 69 73 20 69 73 20 73 65 74 20 74 6f  f this is set to
39b0: 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 74 68   non-zero and th
39c0: 65 20 6e 65 63 65 73 73 61 72 79 20 72 65 74 75  e necessary retu
39d0: 72 6e 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f  rn value..    //
39e0: 2f 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  / is unavailable
39f0: 20 6f 72 20 75 6e 73 75 69 74 61 62 6c 65 2c 20   or unsuitable, 
3a00: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 69 6c  an exception wil
3a10: 6c 20 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20  l be thrown...  
3a20: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
3a30: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
3a40: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
3a50: 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20  Callback(..     
3a60: 20 20 20 69 6e 74 20 69 6e 64 65 78 2c 0d 0a 20     int index,.. 
3a70: 20 20 20 20 20 20 20 53 51 4c 69 74 65 52 65 61         SQLiteRea
3a80: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 20  dValueEventArgs 
3a90: 65 76 65 6e 74 41 72 67 73 2c 0d 0a 20 20 20 20  eventArgs,..    
3aa0: 20 20 20 20 6f 75 74 20 62 6f 6f 6c 20 63 6f 6d      out bool com
3ab0: 70 6c 65 74 65 0d 0a 20 20 20 20 20 20 20 20 29  plete..        )
3ac0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
3ad0: 20 63 6f 6d 70 6c 65 74 65 20 3d 20 66 61 6c 73   complete = fals
3ae0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 6c 61  e;..        _fla
3af0: 67 73 20 26 3d 20 7e 53 51 4c 69 74 65 43 6f 6e  gs &= ~SQLiteCon
3b00: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
3b10: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
3b20: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 3b 0d 0a 0d  lueCallbacks;...
3b30: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
3b40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3b50: 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
3b60: 4e 61 6d 65 20 3d 20 47 65 74 44 61 74 61 54 79  Name = GetDataTy
3b70: 70 65 4e 61 6d 65 28 69 6e 64 65 78 29 3b 0d 0a  peName(index);..
3b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
3b90: 20 28 74 79 70 65 4e 61 6d 65 20 3d 3d 20 6e 75   (typeName == nu
3ba0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3bb0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
3bd0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
3be0: 6e 65 63 74 69 6f 6e 20 3d 20 47 65 74 43 6f 6e  nection = GetCon
3bf0: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 3b 0d 0a  nection(this);..
3c00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
3c10: 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 3d 20   (connection == 
3c20: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3c30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
3c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
3c50: 4c 69 74 65 54 79 70 65 43 61 6c 6c 62 61 63 6b  LiteTypeCallback
3c60: 73 20 63 61 6c 6c 62 61 63 6b 73 3b 0d 0a 0d 0a  s callbacks;....
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3c80: 21 63 6f 6e 6e 65 63 74 69 6f 6e 2e 54 72 79 47  !connection.TryG
3c90: 65 74 54 79 70 65 43 61 6c 6c 62 61 63 6b 73 28  etTypeCallbacks(
3ca0: 74 79 70 65 4e 61 6d 65 2c 20 6f 75 74 20 63 61  typeName, out ca
3cb0: 6c 6c 62 61 63 6b 73 29 20 7c 7c 0d 0a 20 20 20  llbacks) ||..   
3cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61               (ca
3cd0: 6c 6c 62 61 63 6b 73 20 3d 3d 20 6e 75 6c 6c 29  llbacks == null)
3ce0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3d00: 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20    return;..     
3d10: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3d20: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 52 65          SQLiteRe
3d30: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 20  adValueCallback 
3d40: 63 61 6c 6c 62 61 63 6b 20 3d 20 63 61 6c 6c 62  callback = callb
3d50: 61 63 6b 73 2e 52 65 61 64 56 61 6c 75 65 43 61  acks.ReadValueCa
3d60: 6c 6c 62 61 63 6b 3b 0d 0a 0d 0a 20 20 20 20 20  llback;....     
3d70: 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62         if (callb
3d80: 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ack == null)..  
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3da0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
3db0: 20 20 20 20 20 6f 62 6a 65 63 74 20 75 73 65 72       object user
3dc0: 44 61 74 61 20 3d 20 63 61 6c 6c 62 61 63 6b 73  Data = callbacks
3dd0: 2e 52 65 61 64 56 61 6c 75 65 55 73 65 72 44 61  .ReadValueUserDa
3de0: 74 61 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ta;....         
3df0: 20 20 20 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20     callback(..  
3e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 61                _a
3e10: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
3e20: 73 71 6c 2c 20 74 68 69 73 2c 20 5f 66 6c 61 67  sql, this, _flag
3e30: 73 2c 20 65 76 65 6e 74 41 72 67 73 2c 20 74 79  s, eventArgs, ty
3e40: 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
3e50: 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2c 20           index, 
3e60: 75 73 65 72 44 61 74 61 2c 20 6f 75 74 20 63 6f  userData, out co
3e70: 6d 70 6c 65 74 65 29 3b 20 2f 2a 20 74 68 72 6f  mplete); /* thro
3e80: 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d  w */..        }.
3e90: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
3ea0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
3eb0: 20 20 20 20 20 20 20 20 20 5f 66 6c 61 67 73 20           _flags 
3ec0: 7c 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  |= SQLiteConnect
3ed0: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
3ee0: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
3ef0: 61 6c 6c 62 61 63 6b 73 3b 0d 0a 20 20 20 20 20  allbacks;..     
3f00: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
3f10: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3f20: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  ..    /// Retrie
3f30: 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  ves the column a
3f40: 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
3f50: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
3f60: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
3f70: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
3f80: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
3f90: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
3fa0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
3fb0: 73 3e 62 6f 6f 6c 3c 2f 72 65 74 75 72 6e 73 3e  s>bool</returns>
3fc0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
3fd0: 72 72 69 64 65 20 62 6f 6f 6c 20 47 65 74 42 6f  rride bool GetBo
3fe0: 6f 6c 65 61 6e 28 69 6e 74 20 69 29 0d 0a 20 20  olean(int i)..  
3ff0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
4000: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
4010: 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72         VerifyFor
4020: 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Get();....      
4030: 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20    if ((_flags & 
4040: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
4050: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
4060: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
4070: 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65  backs) == SQLite
4080: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
4090: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
40a0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
40b0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
40c0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44           SQLiteD
40d0: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76  ataReaderValue v
40e0: 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  alue = new SQLit
40f0: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
4100: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4110: 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d   bool complete;.
4120: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
4130: 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61  nvokeReadValueCa
4140: 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51  llback(i, new SQ
4150: 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65  LiteReadValueEve
4160: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
4170: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 76           null, v
4180: 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c  alue), out compl
4190: 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ete);....       
41a0: 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74       if (complet
41b0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
41c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
41d0: 20 20 20 69 66 20 28 76 61 6c 75 65 2e 42 6f 6f     if (value.Boo
41e0: 6c 65 61 6e 56 61 6c 75 65 20 3d 3d 20 6e 75 6c  leanValue == nul
41f0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
4200: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
4210: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
4220: 6e 28 22 6d 69 73 73 69 6e 67 20 62 6f 6f 6c 65  n("missing boole
4230: 61 6e 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22  an return value"
4240: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4250: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 62 6f        return (bo
4260: 6f 6c 29 76 61 6c 75 65 2e 42 6f 6f 6c 65 61 6e  ol)value.Boolean
4270: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
4280: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
4290: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
42a0: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
42b0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
42c0: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
42d0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
42e0: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
42f0: 47 65 74 42 6f 6f 6c 65 61 6e 28 69 20 2d 20 50  GetBoolean(i - P
4300: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
4310: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
4320: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
4330: 69 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61  i, DbType.Boolea
4340: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n);..        ret
4350: 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42 6f  urn Convert.ToBo
4360: 6f 6c 65 61 6e 28 47 65 74 56 61 6c 75 65 28 69  olean(GetValue(i
4370: 29 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43  ), CultureInfo.C
4380: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 29 3b 0d  urrentCulture);.
4390: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
43a0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
43b0: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
43c0: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73  he column as a s
43d0: 69 6e 67 6c 65 20 62 79 74 65 20 76 61 6c 75 65  ingle byte value
43e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
43f0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
4400: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
4410: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
4420: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
4430: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
4440: 3e 62 79 74 65 3c 2f 72 65 74 75 72 6e 73 3e 0d  >byte</returns>.
4450: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
4460: 72 69 64 65 20 62 79 74 65 20 47 65 74 42 79 74  ride byte GetByt
4470: 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  e(int i)..    {.
4480: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
4490: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
44a0: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
44b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
44c0: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
44d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
44e0: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
44f0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
4500: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
4510: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
4520: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
4530: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
4540: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4550: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
4560: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
4570: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
4580: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
4590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
45a0: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
45b0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
45c0: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
45d0: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
45e0: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
45f0: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
4600: 20 20 20 20 20 6e 75 6c 6c 2c 20 76 61 6c 75 65       null, value
4610: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
4620: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4630: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
4640: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4660: 66 20 28 76 61 6c 75 65 2e 42 79 74 65 56 61 6c  f (value.ByteVal
4670: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4690: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
46a0: 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73  eException("miss
46b0: 69 6e 67 20 62 79 74 65 20 72 65 74 75 72 6e 20  ing byte return 
46c0: 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  value");....    
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
46e0: 72 6e 20 28 62 79 74 65 29 76 61 6c 75 65 2e 42  rn (byte)value.B
46f0: 79 74 65 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  yteValue;..     
4700: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4710: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
4720: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
4730: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
4740: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
4750: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4760: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
4770: 66 6f 2e 47 65 74 42 79 74 65 28 69 20 2d 20 50  fo.GetByte(i - P
4780: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
4790: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
47a0: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
47b0: 69 2c 20 44 62 54 79 70 65 2e 42 79 74 65 29 3b  i, DbType.Byte);
47c0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
47d0: 20 43 6f 6e 76 65 72 74 2e 54 6f 42 79 74 65 28   Convert.ToByte(
47e0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
47f0: 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f  ._sql.GetInt32(_
4800: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
4810: 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a   i));..    }....
4820: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
4830: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
4840: 65 76 65 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73  eves a column as
4850: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 62 79 74   an array of byt
4860: 65 73 20 28 62 6c 6f 62 29 0d 0a 20 20 20 20 2f  es (blob)..    /
4870: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
4880: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
4890: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
48a0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
48b0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
48c0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69   <param name="fi
48d0: 65 6c 64 4f 66 66 73 65 74 22 3e 54 68 65 20 7a  eldOffset">The z
48e0: 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20  ero-based index 
48f0: 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65 67 69  of where to begi
4900: 6e 20 72 65 61 64 69 6e 67 20 74 68 65 20 64 61  n reading the da
4910: 74 61 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  ta</param>..    
4920: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
4930: 22 62 75 66 66 65 72 22 3e 54 68 65 20 62 75 66  "buffer">The buf
4940: 66 65 72 20 74 6f 20 77 72 69 74 65 20 74 68 65  fer to write the
4950: 20 62 79 74 65 73 20 69 6e 74 6f 3c 2f 70 61 72   bytes into</par
4960: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
4970: 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72  ram name="buffer
4980: 6f 66 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f  offset">The zero
4990: 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20  -based index of 
49a0: 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e 20 77  where to begin w
49b0: 72 69 74 69 6e 67 20 69 6e 74 6f 20 74 68 65 20  riting into the 
49c0: 61 72 72 61 79 3c 2f 70 61 72 61 6d 3e 0d 0a 20  array</param>.. 
49d0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
49e0: 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 54 68 65 20  me="length">The 
49f0: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
4a00: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
4a10: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
4a20: 74 75 72 6e 73 3e 54 68 65 20 61 63 74 75 61 6c  turns>The actual
4a30: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
4a40: 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 74 68   written into th
4a50: 65 20 61 72 72 61 79 3c 2f 72 65 74 75 72 6e 73  e array</returns
4a60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61  >..    /// <rema
4a70: 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 6f  rks>..    /// To
4a80: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
4a90: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
4aa0: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 70 61  n the column, pa
4ab0: 73 73 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20  ss a null value 
4ac0: 66 6f 72 20 74 68 65 20 62 75 66 66 65 72 2e 20  for the buffer. 
4ad0: 20 54 68 65 20 74 6f 74 61 6c 20 6c 65 6e 67 74   The total lengt
4ae0: 68 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e  h will be return
4af0: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ed...    /// </r
4b00: 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 70 75 62  emarks>..    pub
4b10: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  lic override lon
4b20: 67 20 47 65 74 42 79 74 65 73 28 69 6e 74 20 69  g GetBytes(int i
4b30: 2c 20 6c 6f 6e 67 20 66 69 65 6c 64 4f 66 66 73  , long fieldOffs
4b40: 65 74 2c 20 62 79 74 65 5b 5d 20 62 75 66 66 65  et, byte[] buffe
4b50: 72 2c 20 69 6e 74 20 62 75 66 66 65 72 6f 66 66  r, int bufferoff
4b60: 73 65 74 2c 20 69 6e 74 20 6c 65 6e 67 74 68 29  set, int length)
4b70: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4b80: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
4b90: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
4ba0: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
4bb0: 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
4bc0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
4bd0: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
4be0: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
4bf0: 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51  Callbacks) == SQ
4c00: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
4c10: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
4c20: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
4c30: 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  cks)..        {.
4c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
4c50: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
4c60: 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53  ue value = new S
4c70: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
4c80: 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  alue();..       
4c90: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65       bool comple
4ca0: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
4cb0: 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c     InvokeReadVal
4cc0: 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65  ueCallback(i, ne
4cd0: 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75  w SQLiteReadValu
4ce0: 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  eEventArgs(..   
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
4d00: 20 53 51 4c 69 74 65 52 65 61 64 41 72 72 61 79   SQLiteReadArray
4d10: 45 76 65 6e 74 41 72 67 73 28 66 69 65 6c 64 4f  EventArgs(fieldO
4d20: 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c 0d 0a  ffset, buffer,..
4d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d40: 20 20 20 20 62 75 66 66 65 72 6f 66 66 73 65 74      bufferoffset
4d50: 2c 20 6c 65 6e 67 74 68 29 2c 20 76 61 6c 75 65  , length), value
4d60: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
4d70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4d80: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
4db0: 79 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 76 61  yte[] bytes = va
4dc0: 6c 75 65 2e 42 79 74 65 73 56 61 6c 75 65 3b 0d  lue.BytesValue;.
4dd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4de0: 20 20 20 69 66 20 28 62 79 74 65 73 20 21 3d 20     if (bytes != 
4df0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4e00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 72                Ar
4e20: 72 61 79 2e 43 6f 70 79 28 62 79 74 65 73 2c 20  ray.Copy(bytes, 
4e30: 30 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65  0, buffer, buffe
4e40: 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29  roffset, length)
4e50: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
4e60: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
4e70: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
4e80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4e90: 62 79 74 65 73 2e 4c 6f 6e 67 4c 65 6e 67 74 68  bytes.LongLength
4ea0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
4eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4ec0: 74 75 72 6e 20 62 79 74 65 73 2e 4c 65 6e 67 74  turn bytes.Lengt
4ed0: 68 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  h;..#endif..    
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
4f00: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
4f10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4f30: 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20 20  rn -1;..        
4f40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4f50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4f60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
4f70: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
4f80: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
4f90: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
4fa0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4fb0: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
4fc0: 66 6f 2e 47 65 74 42 79 74 65 73 28 69 20 2d 20  fo.GetBytes(i - 
4fd0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
4fe0: 65 6c 64 43 6f 75 6e 74 2c 20 66 69 65 6c 64 4f  eldCount, fieldO
4ff0: 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c 20 62  ffset, buffer, b
5000: 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e  ufferoffset, len
5010: 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gth);....       
5020: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
5030: 62 54 79 70 65 2e 42 69 6e 61 72 79 29 3b 0d 0a  bType.Binary);..
5040: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
5050: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
5060: 5f 73 71 6c 2e 47 65 74 42 79 74 65 73 28 5f 61  _sql.GetBytes(_a
5070: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
5080: 69 2c 20 28 69 6e 74 29 66 69 65 6c 64 4f 66 66  i, (int)fieldOff
5090: 73 65 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66  set, buffer, buf
50a0: 66 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74  feroffset, lengt
50b0: 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  h);..    }....  
50c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
50d0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
50e0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61   the column as a
50f0: 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65   single characte
5100: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
5110: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
5120: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
5130: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
5140: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
5150: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
5160: 73 3e 63 68 61 72 3c 2f 72 65 74 75 72 6e 73 3e  s>char</returns>
5170: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
5180: 72 72 69 64 65 20 63 68 61 72 20 47 65 74 43 68  rride char GetCh
5190: 61 72 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  ar(int i)..    {
51a0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
51b0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
51c0: 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74      VerifyForGet
51d0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
51e0: 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  f ((_flags & SQL
51f0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
5200: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
5210: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
5220: 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  ks) == SQLiteCon
5230: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
5240: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
5250: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20  lueCallbacks).. 
5260: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5270: 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61        SQLiteData
5280: 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75  ReaderValue valu
5290: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61  e = new SQLiteDa
52a0: 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b  taReaderValue();
52b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
52c0: 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a  ol complete;....
52d0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f              Invo
52e0: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
52f0: 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74  ack(i, new SQLit
5300: 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41  eReadValueEventA
5310: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
5320: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 76 61 6c 75        null, valu
5330: 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  e), out complete
5340: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5350: 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d    if (complete).
5360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5380: 69 66 20 28 76 61 6c 75 65 2e 43 68 61 72 56 61  if (value.CharVa
5390: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53b0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
53c0: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73  teException("mis
53d0: 73 69 6e 67 20 63 68 61 72 61 63 74 65 72 20 72  sing character r
53e0: 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a  eturn value");..
53f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5400: 20 20 72 65 74 75 72 6e 20 28 63 68 61 72 29 76    return (char)v
5410: 61 6c 75 65 2e 43 68 61 72 56 61 6c 75 65 3b 0d  alue.CharValue;.
5420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5430: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5440: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
5450: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
5460: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
5470: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
5480: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5490: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 43 68 61 72  _keyInfo.GetChar
54a0: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
54b0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d  bleFieldCount);.
54c0: 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ...        Verif
54d0: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
54e0: 53 42 79 74 65 29 3b 0d 0a 20 20 20 20 20 20 20  SByte);..       
54f0: 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
5500: 54 6f 43 68 61 72 28 5f 61 63 74 69 76 65 53 74  ToChar(_activeSt
5510: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
5520: 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74 61  Int32(_activeSta
5530: 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20  tement, i));..  
5540: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
5550: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
5560: 2f 20 52 65 74 72 69 65 76 65 73 20 61 20 63 6f  / Retrieves a co
5570: 6c 75 6d 6e 20 61 73 20 61 6e 20 61 72 72 61 79  lumn as an array
5580: 20 6f 66 20 63 68 61 72 73 20 28 62 6c 6f 62 29   of chars (blob)
5590: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
55a0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
55b0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
55c0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
55d0: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
55e0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
55f0: 61 6d 65 3d 22 66 69 65 6c 64 6f 66 66 73 65 74  ame="fieldoffset
5600: 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  ">The zero-based
5610: 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20   index of where 
5620: 74 6f 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67  to begin reading
5630: 20 74 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d   the data</param
5640: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
5650: 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 22 3e  m name="buffer">
5660: 54 68 65 20 62 75 66 66 65 72 20 74 6f 20 77 72  The buffer to wr
5670: 69 74 65 20 74 68 65 20 63 68 61 72 61 63 74 65  ite the characte
5680: 72 73 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e 0d  rs into</param>.
5690: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
56a0: 6e 61 6d 65 3d 22 62 75 66 66 65 72 6f 66 66 73  name="bufferoffs
56b0: 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73  et">The zero-bas
56c0: 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72  ed index of wher
56d0: 65 20 74 6f 20 62 65 67 69 6e 20 77 72 69 74 69  e to begin writi
56e0: 6e 67 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61  ng into the arra
56f0: 79 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  y</param>..    /
5700: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5710: 6c 65 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d 62  length">The numb
5720: 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72  er of bytes to r
5730: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d  etrieve</param>.
5740: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
5750: 73 3e 54 68 65 20 61 63 74 75 61 6c 20 6e 75 6d  s>The actual num
5760: 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
5770: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 74  s written into t
5780: 68 65 20 61 72 72 61 79 3c 2f 72 65 74 75 72 6e  he array</return
5790: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d  s>..    /// <rem
57a0: 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  arks>..    /// T
57b0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
57c0: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63  number of charac
57d0: 74 65 72 73 20 69 6e 20 74 68 65 20 63 6f 6c 75  ters in the colu
57e0: 6d 6e 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c 20  mn, pass a null 
57f0: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62 75  value for the bu
5800: 66 66 65 72 2e 20 20 54 68 65 20 74 6f 74 61 6c  ffer.  The total
5810: 20 6c 65 6e 67 74 68 20 77 69 6c 6c 20 62 65 20   length will be 
5820: 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f  returned...    /
5830: 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20  // </remarks>.. 
5840: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
5850: 64 65 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73  de long GetChars
5860: 28 69 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65  (int i, long fie
5870: 6c 64 6f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d  ldoffset, char[]
5880: 20 62 75 66 66 65 72 2c 20 69 6e 74 20 62 75 66   buffer, int buf
5890: 66 65 72 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c  feroffset, int l
58a0: 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20  ength)..    {.. 
58b0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
58c0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
58d0: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
58e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
58f0: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
5900: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5910: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
5920: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
5930: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
5940: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
5950: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
5960: 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20  Callbacks)..    
5970: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5980: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
5990: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
59a0: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
59b0: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
59c0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
59d0: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
59e0: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
59f0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
5a00: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
5a10: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
5a20: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5a30: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61     new SQLiteRea
5a40: 64 41 72 72 61 79 45 76 65 6e 74 41 72 67 73 28  dArrayEventArgs(
5a50: 66 69 65 6c 64 6f 66 66 73 65 74 2c 20 62 75 66  fieldoffset, buf
5a60: 66 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fer,..          
5a70: 20 20 20 20 20 20 20 20 20 20 62 75 66 66 65 72            buffer
5a80: 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 2c  offset, length),
5a90: 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d   value), out com
5aa0: 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  plete);....     
5ab0: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c         if (compl
5ac0: 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ete)..          
5ad0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5ae0: 20 20 20 20 20 63 68 61 72 5b 5d 20 63 68 61 72       char[] char
5af0: 73 20 3d 20 76 61 6c 75 65 2e 43 68 61 72 73 56  s = value.CharsV
5b00: 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
5b10: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 68 61           if (cha
5b20: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
5b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b50: 20 20 20 20 41 72 72 61 79 2e 43 6f 70 79 28 63      Array.Copy(c
5b60: 68 61 72 73 2c 20 30 2c 20 62 75 66 66 65 72 2c  hars, 0, buffer,
5b70: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c   bufferoffset, l
5b80: 65 6e 67 74 68 29 3b 0d 0a 0d 0a 23 69 66 20 21  ength);....#if !
5b90: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
5ba0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
5bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5bc0: 65 74 75 72 6e 20 63 68 61 72 73 2e 4c 6f 6e 67  eturn chars.Long
5bd0: 4c 65 6e 67 74 68 3b 0d 0a 23 65 6c 73 65 0d 0a  Length;..#else..
5be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5bf0: 20 20 20 20 72 65 74 75 72 6e 20 63 68 61 72 73      return chars
5c00: 2e 4c 65 6e 67 74 68 3b 0d 0a 23 65 6e 64 69 66  .Length;..#endif
5c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5c20: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
5c30: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
5c40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c60: 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20    return -1;..  
5c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
5c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5c90: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5ca0: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
5cb0: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
5cc0: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
5cd0: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
5ce0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5cf0: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 43 68 61 72  _keyInfo.GetChar
5d00: 73 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  s(i - PrivateVis
5d10: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20  ibleFieldCount, 
5d20: 66 69 65 6c 64 6f 66 66 73 65 74 2c 20 62 75 66  fieldoffset, buf
5d30: 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65  fer, bufferoffse
5d40: 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20  t, length);.... 
5d50: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
5d60: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
5d70: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72  ctionFlags.NoVer
5d80: 69 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29  ifyTextAffinity)
5d90: 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   != SQLiteConnec
5da0: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69  tionFlags.NoVeri
5db0: 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29 0d  fyTextAffinity).
5dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
5dd0: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
5de0: 65 2e 53 74 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20  e.String);....  
5df0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
5e00: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
5e10: 71 6c 2e 47 65 74 43 68 61 72 73 28 5f 61 63 74  ql.GetChars(_act
5e20: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c  iveStatement, i,
5e30: 20 28 69 6e 74 29 66 69 65 6c 64 6f 66 66 73 65   (int)fieldoffse
5e40: 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65  t, buffer, buffe
5e50: 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29  roffset, length)
5e60: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5e70: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
5e80: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
5e90: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
5ea0: 20 62 61 63 6b 2d 65 6e 64 20 64 61 74 61 74 79   back-end dataty
5eb0: 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  pe of the column
5ec0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
5ed0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
5ee0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
5ef0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
5f00: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
5f10: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
5f20: 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73  >string</returns
5f30: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
5f40: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
5f50: 74 44 61 74 61 54 79 70 65 4e 61 6d 65 28 69 6e  tDataTypeName(in
5f60: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
5f70: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
5f80: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
5f90: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
5fa0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
5fb0: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
5fc0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
5fd0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
5fe0: 49 6e 66 6f 2e 47 65 74 44 61 74 61 54 79 70 65  Info.GetDataType
5ff0: 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65  Name(i - Private
6000: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
6010: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54  t);....        T
6020: 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66 69  ypeAffinity affi
6030: 6e 20 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79  n = TypeAffinity
6040: 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3b 0d  .Uninitialized;.
6050: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6060: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
6070: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65  ._sql.ColumnType
6080: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
6090: 74 2c 20 69 2c 20 72 65 66 20 61 66 66 69 6e 29  t, i, ref affin)
60a0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
60b0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
60c0: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 20     /// Retrieve 
60d0: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
60e0: 64 61 74 65 2f 74 69 6d 65 20 76 61 6c 75 65 0d  date/time value.
60f0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
6100: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
6110: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
6120: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
6130: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
6140: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
6150: 44 61 74 65 54 69 6d 65 3c 2f 72 65 74 75 72 6e  DateTime</return
6160: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
6170: 76 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65  verride DateTime
6180: 20 47 65 74 44 61 74 65 54 69 6d 65 28 69 6e 74   GetDateTime(int
6190: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
61a0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
61b0: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
61c0: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
61d0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
61e0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
61f0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
6200: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
6210: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
6220: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6230: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
6240: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
6250: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
6260: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6270: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
6280: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
6290: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
62a0: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
62b0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
62c0: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
62d0: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
62e0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
62f0: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
6300: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
6310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6320: 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75  null, value), ou
6330: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a  t complete);....
6340: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6350: 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20  complete)..     
6360: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6370: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
6380: 6c 75 65 2e 44 61 74 65 54 69 6d 65 56 61 6c 75  lue.DateTimeValu
6390: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
63a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63b0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
63c0: 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69  Exception("missi
63d0: 6e 67 20 64 61 74 65 2f 74 69 6d 65 20 72 65 74  ng date/time ret
63e0: 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a  urn value");....
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6400: 72 65 74 75 72 6e 20 28 44 61 74 65 54 69 6d 65  return (DateTime
6410: 29 76 61 6c 75 65 2e 44 61 74 65 54 69 6d 65 56  )value.DateTimeV
6420: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
6430: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
6440: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
6450: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
6460: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
6470: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
6480: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
6490: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
64a0: 65 74 44 61 74 65 54 69 6d 65 28 69 20 2d 20 50  etDateTime(i - P
64b0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
64c0: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
64d0: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
64e0: 69 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69  i, DbType.DateTi
64f0: 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  me);..        re
6500: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
6510: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 61  ement._sql.GetDa
6520: 74 65 54 69 6d 65 28 5f 61 63 74 69 76 65 53 74  teTime(_activeSt
6530: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20  atement, i);..  
6540: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
6550: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
6560: 2f 20 52 65 74 72 69 65 76 65 20 74 68 65 20 63  / Retrieve the c
6570: 6f 6c 75 6d 6e 20 61 73 20 61 20 64 65 63 69 6d  olumn as a decim
6580: 61 6c 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f  al value..    //
6590: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
65a0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
65b0: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
65c0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
65d0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
65e0: 3c 72 65 74 75 72 6e 73 3e 64 65 63 69 6d 61 6c  <returns>decimal
65f0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
6600: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
6610: 64 65 63 69 6d 61 6c 20 47 65 74 44 65 63 69 6d  decimal GetDecim
6620: 61 6c 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  al(int i)..    {
6630: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
6640: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
6650: 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74      VerifyForGet
6660: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
6670: 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  f ((_flags & SQL
6680: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6690: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
66a0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
66b0: 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  ks) == SQLiteCon
66c0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
66d0: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
66e0: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20  lueCallbacks).. 
66f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6700: 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61        SQLiteData
6710: 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75  ReaderValue valu
6720: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61  e = new SQLiteDa
6730: 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b  taReaderValue();
6740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
6750: 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a  ol complete;....
6760: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f              Invo
6770: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
6780: 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74  ack(i, new SQLit
6790: 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41  eReadValueEventA
67a0: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
67b0: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 76 61 6c 75        null, valu
67c0: 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  e), out complete
67d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
67e0: 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d    if (complete).
67f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6810: 69 66 20 28 76 61 6c 75 65 2e 44 65 63 69 6d 61  if (value.Decima
6820: 6c 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  lValue == null).
6830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6840: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
6850: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
6860: 6d 69 73 73 69 6e 67 20 64 65 63 69 6d 61 6c 20  missing decimal 
6870: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
6880: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6890: 20 20 20 72 65 74 75 72 6e 20 28 64 65 63 69 6d     return (decim
68a0: 61 6c 29 76 61 6c 75 65 2e 44 65 63 69 6d 61 6c  al)value.Decimal
68b0: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
68c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
68d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
68e0: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
68f0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
6900: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
6910: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
6920: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
6930: 47 65 74 44 65 63 69 6d 61 6c 28 69 20 2d 20 50  GetDecimal(i - P
6940: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
6950: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
6960: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
6970: 69 2c 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61  i, DbType.Decima
6980: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  l);..        ret
6990: 75 72 6e 20 44 65 63 69 6d 61 6c 2e 50 61 72 73  urn Decimal.Pars
69a0: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
69b0: 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28  nt._sql.GetText(
69c0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
69d0: 2c 20 69 29 2c 20 4e 75 6d 62 65 72 53 74 79 6c  , i), NumberStyl
69e0: 65 73 2e 41 6c 6c 6f 77 44 65 63 69 6d 61 6c 50  es.AllowDecimalP
69f0: 6f 69 6e 74 20 7c 20 4e 75 6d 62 65 72 53 74 79  oint | NumberSty
6a00: 6c 65 73 2e 41 6c 6c 6f 77 45 78 70 6f 6e 65 6e  les.AllowExponen
6a10: 74 20 7c 20 4e 75 6d 62 65 72 53 74 79 6c 65 73  t | NumberStyles
6a20: 2e 41 6c 6c 6f 77 4c 65 61 64 69 6e 67 53 69 67  .AllowLeadingSig
6a30: 6e 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49  n, CultureInfo.I
6a40: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29  nvariantCulture)
6a50: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6a60: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6a70: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
6a80: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 64  he column as a d
6a90: 6f 75 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ouble..    /// <
6aa0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
6ab0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
6ac0: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
6ad0: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
6ae0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
6af0: 74 75 72 6e 73 3e 64 6f 75 62 6c 65 3c 2f 72 65  turns>double</re
6b00: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
6b10: 69 63 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62  ic override doub
6b20: 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 69 6e 74  le GetDouble(int
6b30: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
6b40: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6b50: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
6b60: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
6b70: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
6b80: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
6b90: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
6ba0: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
6bb0: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
6bc0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6bd0: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
6be0: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
6bf0: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
6c00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6c10: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
6c20: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
6c30: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
6c40: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
6c50: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
6c60: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
6c70: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
6c80: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
6c90: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
6ca0: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
6cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6cc0: 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75  null, value), ou
6cd0: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a  t complete);....
6ce0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6cf0: 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20  complete)..     
6d00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6d10: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
6d20: 6c 75 65 2e 44 6f 75 62 6c 65 56 61 6c 75 65 20  lue.DoubleValue 
6d30: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
6d50: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
6d60: 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67  ception("missing
6d70: 20 64 6f 75 62 6c 65 20 72 65 74 75 72 6e 20 76   double return v
6d80: 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  alue");....     
6d90: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6da0: 6e 20 28 64 6f 75 62 6c 65 29 76 61 6c 75 65 2e  n (double)value.
6db0: 44 6f 75 62 6c 65 56 61 6c 75 65 3b 0d 0a 20 20  DoubleValue;..  
6dc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6dd0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6de0: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
6df0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
6e00: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
6e10: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
6e20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
6e30: 79 49 6e 66 6f 2e 47 65 74 44 6f 75 62 6c 65 28  yInfo.GetDouble(
6e40: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
6e50: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
6e60: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
6e70: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 44  Type(i, DbType.D
6e80: 6f 75 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20  ouble);..       
6e90: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
6ea0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
6eb0: 74 44 6f 75 62 6c 65 28 5f 61 63 74 69 76 65 53  tDouble(_activeS
6ec0: 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20  tatement, i);.. 
6ed0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
6ee0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
6ef0: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 2e  // Returns the .
6f00: 4e 45 54 20 74 79 70 65 20 6f 66 20 61 20 67 69  NET type of a gi
6f10: 76 65 6e 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20  ven column..    
6f20: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
6f30: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
6f40: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
6f50: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
6f60: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
6f70: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 79 70 65 3c  / <returns>Type<
6f80: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
6f90: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 54  ublic override T
6fa0: 79 70 65 20 47 65 74 46 69 65 6c 64 54 79 70 65  ype GetFieldType
6fb0: 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
6fc0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
6fd0: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
6fe0: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
6ff0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
7000: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
7010: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
7020: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
7030: 6b 65 79 49 6e 66 6f 2e 47 65 74 46 69 65 6c 64  keyInfo.GetField
7040: 54 79 70 65 28 69 20 2d 20 50 72 69 76 61 74 65  Type(i - Private
7050: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
7060: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  t);....        r
7070: 65 74 75 72 6e 20 53 51 4c 69 74 65 43 6f 6e 76  eturn SQLiteConv
7080: 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f  ert.SQLiteTypeTo
7090: 54 79 70 65 28 47 65 74 53 51 4c 69 74 65 54 79  Type(GetSQLiteTy
70a0: 70 65 28 5f 66 6c 61 67 73 2c 20 69 29 29 3b 0d  pe(_flags, i));.
70b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
70c0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
70d0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 63   /// Returns a c
70e0: 6f 6c 75 6d 6e 20 61 73 20 61 20 66 6c 6f 61 74  olumn as a float
70f0: 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20   value..    /// 
7100: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
7110: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
7120: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
7130: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
7140: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
7150: 65 74 75 72 6e 73 3e 66 6c 6f 61 74 3c 2f 72 65  eturns>float</re
7160: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
7170: 69 63 20 6f 76 65 72 72 69 64 65 20 66 6c 6f 61  ic override floa
7180: 74 20 47 65 74 46 6c 6f 61 74 28 69 6e 74 20 69  t GetFloat(int i
7190: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
71a0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
71b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
71c0: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
71d0: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
71e0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
71f0: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
7200: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
7210: 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53  eCallbacks) == S
7220: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7230: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
7240: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
7250: 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  acks)..        {
7260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
7270: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
7280: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
7290: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
72a0: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
72b0: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
72c0: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
72d0: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
72e0: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
72f0: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
7300: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
7310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75                nu
7320: 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20  ll, value), out 
7330: 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20  complete);....  
7340: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
7350: 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20  mplete)..       
7360: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7370: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
7380: 65 2e 46 6c 6f 61 74 56 61 6c 75 65 20 3d 3d 20  e.FloatValue == 
7390: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
73a0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
73b0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
73c0: 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 66 6c  tion("missing fl
73d0: 6f 61 74 20 72 65 74 75 72 6e 20 76 61 6c 75 65  oat return value
73e0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
73f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 66         return (f
7400: 6c 6f 61 74 29 76 61 6c 75 65 2e 46 6c 6f 61 74  loat)value.Float
7410: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
7420: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
7430: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
7440: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
7450: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
7460: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
7470: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7480: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
7490: 47 65 74 46 6c 6f 61 74 28 69 20 2d 20 50 72 69  GetFloat(i - Pri
74a0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
74b0: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
74c0: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
74d0: 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29 3b   DbType.Single);
74e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
74f0: 20 43 6f 6e 76 65 72 74 2e 54 6f 53 69 6e 67 6c   Convert.ToSingl
7500: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
7510: 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c  nt._sql.GetDoubl
7520: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
7530: 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d  nt, i));..    }.
7540: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
7550: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
7560: 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e  turns the column
7570: 20 61 73 20 61 20 47 75 69 64 0d 0a 20 20 20 20   as a Guid..    
7580: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
7590: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
75a0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
75b0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
75c0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
75d0: 2f 20 3c 72 65 74 75 72 6e 73 3e 47 75 69 64 3c  / <returns>Guid<
75e0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
75f0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 47  ublic override G
7600: 75 69 64 20 47 65 74 47 75 69 64 28 69 6e 74 20  uid GetGuid(int 
7610: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
7620: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
7630: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
7640: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
7650: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
7660: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
7670: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
7680: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
7690: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
76a0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
76b0: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
76c0: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
76d0: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
76e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
76f0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
7700: 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77  alue value = new
7710: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
7720: 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20  rValue();..     
7730: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70         bool comp
7740: 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lete;....       
7750: 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56       InvokeReadV
7760: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20  alueCallback(i, 
7770: 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61  new SQLiteReadVa
7780: 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  lueEventArgs(.. 
7790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
77a0: 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74  ull, value), out
77b0: 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20   complete);.... 
77c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
77d0: 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20  omplete)..      
77e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
77f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
7800: 75 65 2e 47 75 69 64 56 61 6c 75 65 20 3d 3d 20  ue.GuidValue == 
7810: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7820: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
7830: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
7840: 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 67 75  tion("missing gu
7850: 69 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22  id return value"
7860: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7870: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 47 75        return (Gu
7880: 69 64 29 76 61 6c 75 65 2e 47 75 69 64 56 61 6c  id)value.GuidVal
7890: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
78a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
78b0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
78c0: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
78d0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
78e0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
78f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7900: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
7910: 47 75 69 64 28 69 20 2d 20 50 72 69 76 61 74 65  Guid(i - Private
7920: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
7930: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54  t);....        T
7940: 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66 69  ypeAffinity affi
7950: 6e 69 74 79 20 3d 20 56 65 72 69 66 79 54 79 70  nity = VerifyTyp
7960: 65 28 69 2c 20 44 62 54 79 70 65 2e 47 75 69 64  e(i, DbType.Guid
7970: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
7980: 61 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65  affinity == Type
7990: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 29 0d 0a  Affinity.Blob)..
79a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
79b0: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 75         byte[] bu
79c0: 66 66 65 72 20 3d 20 6e 65 77 20 62 79 74 65 5b  ffer = new byte[
79d0: 31 36 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  16];..          
79e0: 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65    _activeStateme
79f0: 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65 73  nt._sql.GetBytes
7a00: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
7a10: 74 2c 20 69 2c 20 30 2c 20 62 75 66 66 65 72 2c  t, i, 0, buffer,
7a20: 20 30 2c 20 31 36 29 3b 0d 0a 20 20 20 20 20 20   0, 16);..      
7a30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
7a40: 20 47 75 69 64 28 62 75 66 66 65 72 29 3b 0d 0a   Guid(buffer);..
7a50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7a60: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
7a70: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
7a80: 47 75 69 64 28 5f 61 63 74 69 76 65 53 74 61 74  Guid(_activeStat
7a90: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65  ement._sql.GetTe
7aa0: 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  xt(_activeStatem
7ab0: 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d  ent, i));..    }
7ac0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
7ad0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
7ae0: 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d  eturns the colum
7af0: 6e 20 61 73 20 61 20 73 68 6f 72 74 0d 0a 20 20  n as a short..  
7b00: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
7b10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
7b20: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
7b30: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
7b40: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
7b50: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74  /// <returns>Int
7b60: 31 36 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  16</returns>..  
7b70: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
7b80: 65 20 49 6e 74 31 36 20 47 65 74 49 6e 74 31 36  e Int16 GetInt16
7b90: 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
7ba0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
7bb0: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
7bc0: 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
7bd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
7be0: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
7bf0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7c00: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
7c10: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
7c20: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
7c30: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
7c40: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
7c50: 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20  eCallbacks)..   
7c60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7c70: 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65      SQLiteDataRe
7c80: 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20  aderValue value 
7c90: 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61  = new SQLiteData
7ca0: 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a  ReaderValue();..
7cb0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
7cc0: 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20   complete;....  
7cd0: 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65            Invoke
7ce0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
7cf0: 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52  k(i, new SQLiteR
7d00: 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67  eadValueEventArg
7d10: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
7d20: 20 20 20 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29      null, value)
7d30: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
7d40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7d50: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
7d60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7d80: 20 28 76 61 6c 75 65 2e 49 6e 74 31 36 56 61 6c   (value.Int16Val
7d90: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7db0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
7dc0: 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73  eException("miss
7dd0: 69 6e 67 20 69 6e 74 31 36 20 72 65 74 75 72 6e  ing int16 return
7de0: 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20   value");....   
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
7e00: 75 72 6e 20 28 49 6e 74 31 36 29 76 61 6c 75 65  urn (Int16)value
7e10: 2e 49 6e 74 31 36 56 61 6c 75 65 3b 0d 0a 20 20  .Int16Value;..  
7e20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7e30: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7e40: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
7e50: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
7e60: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
7e70: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7e80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
7e90: 79 49 6e 66 6f 2e 47 65 74 49 6e 74 31 36 28 69  yInfo.GetInt16(i
7ea0: 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c   - PrivateVisibl
7eb0: 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d  eFieldCount);...
7ec0: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54  .        VerifyT
7ed0: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 49 6e  ype(i, DbType.In
7ee0: 74 31 36 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  t16);..        r
7ef0: 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f  eturn Convert.To
7f00: 49 6e 74 31 36 28 5f 61 63 74 69 76 65 53 74 61  Int16(_activeSta
7f10: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49  tement._sql.GetI
7f20: 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74 61 74  nt32(_activeStat
7f30: 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20  ement, i));..   
7f40: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
7f50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7f60: 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63   Retrieves the c
7f70: 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 69 6e 74 0d  olumn as an int.
7f80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
7f90: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
7fa0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
7fb0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
7fc0: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
7fd0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
7fe0: 49 6e 74 33 32 3c 2f 72 65 74 75 72 6e 73 3e 0d  Int32</returns>.
7ff0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
8000: 72 69 64 65 20 49 6e 74 33 32 20 47 65 74 49 6e  ride Int32 GetIn
8010: 74 33 32 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  t32(int i)..    
8020: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
8030: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
8040: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
8050: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
8060: 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51  if ((_flags & SQ
8070: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
8080: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
8090: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
80a0: 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  cks) == SQLiteCo
80b0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
80c0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
80d0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a  alueCallbacks)..
80e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
80f0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74         SQLiteDat
8100: 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c  aReaderValue val
8110: 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44  ue = new SQLiteD
8120: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29  ataReaderValue()
8130: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
8140: 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d  ool complete;...
8150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76  .            Inv
8160: 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  okeReadValueCall
8170: 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69  back(i, new SQLi
8180: 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74  teReadValueEvent
8190: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
81a0: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 76 61 6c         null, val
81b0: 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74  ue), out complet
81c0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
81d0: 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29     if (complete)
81e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
81f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8200: 20 69 66 20 28 76 61 6c 75 65 2e 49 6e 74 33 32   if (value.Int32
8210: 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Value == null)..
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8230: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
8240: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d  LiteException("m
8250: 69 73 73 69 6e 67 20 69 6e 74 33 32 20 72 65 74  issing int32 ret
8260: 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a  urn value");....
8270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8280: 72 65 74 75 72 6e 20 28 49 6e 74 33 32 29 76 61  return (Int32)va
8290: 6c 75 65 2e 49 6e 74 33 32 56 61 6c 75 65 3b 0d  lue.Int32Value;.
82a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
82b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
82c0: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
82d0: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
82e0: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
82f0: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
8300: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8310: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49 6e 74 33  _keyInfo.GetInt3
8320: 32 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  2(i - PrivateVis
8330: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
8340: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  ....        Veri
8350: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
8360: 2e 49 6e 74 33 32 29 3b 0d 0a 20 20 20 20 20 20  .Int32);..      
8370: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
8380: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
8390: 65 74 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53  etInt32(_activeS
83a0: 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20  tatement, i);.. 
83b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
83c0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
83d0: 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65  // Retrieves the
83e0: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 6c 6f 6e   column as a lon
83f0: 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  g..    /// </sum
8400: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
8410: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
8420: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
8430: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
8440: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
8450: 73 3e 49 6e 74 36 34 3c 2f 72 65 74 75 72 6e 73  s>Int64</returns
8460: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
8470: 65 72 72 69 64 65 20 49 6e 74 36 34 20 47 65 74  erride Int64 Get
8480: 49 6e 74 36 34 28 69 6e 74 20 69 29 0d 0a 20 20  Int64(int i)..  
8490: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
84a0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
84b0: 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72         VerifyFor
84c0: 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Get();....      
84d0: 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20    if ((_flags & 
84e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
84f0: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
8500: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
8510: 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65  backs) == SQLite
8520: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
8530: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
8540: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
8550: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8560: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44           SQLiteD
8570: 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76  ataReaderValue v
8580: 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  alue = new SQLit
8590: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
85a0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
85b0: 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d   bool complete;.
85c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
85d0: 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61  nvokeReadValueCa
85e0: 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51  llback(i, new SQ
85f0: 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65  LiteReadValueEve
8600: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
8610: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 76           null, v
8620: 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c  alue), out compl
8630: 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ete);....       
8640: 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74       if (complet
8650: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
8660: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8670: 20 20 20 69 66 20 28 76 61 6c 75 65 2e 49 6e 74     if (value.Int
8680: 36 34 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29  64Value == null)
8690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
86a0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
86b0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
86c0: 22 6d 69 73 73 69 6e 67 20 69 6e 74 36 34 20 72  "missing int64 r
86d0: 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a  eturn value");..
86e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
86f0: 20 20 72 65 74 75 72 6e 20 28 49 6e 74 36 34 29    return (Int64)
8700: 76 61 6c 75 65 2e 49 6e 74 36 34 56 61 6c 75 65  value.Int64Value
8710: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8720: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
8730: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
8740: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
8750: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
8760: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
8770: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
8780: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49 6e  n _keyInfo.GetIn
8790: 74 36 34 28 69 20 2d 20 50 72 69 76 61 74 65 56  t64(i - PrivateV
87a0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
87b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65  );....        Ve
87c0: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
87d0: 70 65 2e 49 6e 74 36 34 29 3b 0d 0a 20 20 20 20  pe.Int64);..    
87e0: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
87f0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
8800: 2e 47 65 74 49 6e 74 36 34 28 5f 61 63 74 69 76  .GetInt64(_activ
8810: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d  eStatement, i);.
8820: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
8830: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
8840: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
8850: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
8860: 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  olumn..    /// <
8870: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
8880: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
8890: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
88a0: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
88b0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
88c0: 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65  turns>string</re
88d0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
88e0: 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  ic override stri
88f0: 6e 67 20 47 65 74 4e 61 6d 65 28 69 6e 74 20 69  ng GetName(int i
8900: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8910: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
8920: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
8930: 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69   (i >= PrivateVi
8940: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
8950: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
8960: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
8970: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
8980: 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50 72  o.GetName(i - Pr
8990: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
89a0: 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
89b0: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
89c0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
89d0: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63 74  .ColumnName(_act
89e0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
89f0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
8a00: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
8a10: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
8a20: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
8a30: 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74  atabase associat
8a40: 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ed with the spec
8a50: 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20  ified column... 
8a60: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8a70: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
8a80: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
8a90: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
8aa0: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
8ab0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74   /// <returns>st
8ac0: 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ring</returns>..
8ad0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
8ae0: 67 20 47 65 74 44 61 74 61 62 61 73 65 4e 61 6d  g GetDatabaseNam
8af0: 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  e(int i)..    {.
8b00: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
8b10: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
8b20: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
8b30: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
8b40: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
8b50: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
8b60: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8b70: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d 65  _keyInfo.GetName
8b80: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
8b90: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d  bleFieldCount);.
8ba0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
8bb0: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
8bc0: 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 44 61  nt._sql.ColumnDa
8bd0: 74 61 62 61 73 65 4e 61 6d 65 28 5f 61 63 74 69  tabaseName(_acti
8be0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
8bf0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
8c00: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
8c10: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
8c20: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
8c30: 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  ble associated w
8c40: 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65  ith the specifie
8c50: 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f  d column...    /
8c60: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
8c70: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
8c80: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
8c90: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
8ca0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
8cb0: 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67   <returns>string
8cc0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
8cd0: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65  public string Ge
8ce0: 74 54 61 62 6c 65 4e 61 6d 65 28 69 6e 74 20 69  tTableName(int i
8cf0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8d00: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
8d10: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
8d20: 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69   (i >= PrivateVi
8d30: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
8d40: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
8d50: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
8d60: 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66    return _keyInf
8d70: 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50 72  o.GetName(i - Pr
8d80: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
8d90: 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
8da0: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
8db0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
8dc0: 2e 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65  .ColumnTableName
8dd0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
8de0: 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  t, i);..    }...
8df0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
8e00: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
8e10: 72 6e 73 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  rns the original
8e20: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 70 65   name of the spe
8e30: 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a  cified column...
8e40: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8e50: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
8e60: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
8e70: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
8e80: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
8e90: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73    /// <returns>s
8ea0: 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d  tring</returns>.
8eb0: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69  .    public stri
8ec0: 6e 67 20 47 65 74 4f 72 69 67 69 6e 61 6c 4e 61  ng GetOriginalNa
8ed0: 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  me(int i)..    {
8ee0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
8ef0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
8f00: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
8f10: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
8f20: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
8f30: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
8f40: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8f50: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d   _keyInfo.GetNam
8f60: 65 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  e(i - PrivateVis
8f70: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
8f80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
8f90: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
8fa0: 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4f  ent._sql.ColumnO
8fb0: 72 69 67 69 6e 61 6c 4e 61 6d 65 28 5f 61 63 74  riginalName(_act
8fc0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
8fd0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
8fe0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
8ff0: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
9000: 20 74 68 65 20 69 20 6f 66 20 61 20 63 6f 6c 75   the i of a colu
9010: 6d 6e 2c 20 67 69 76 65 6e 20 69 74 73 20 6e 61  mn, given its na
9020: 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  me..    /// </su
9030: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9040: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d  <param name="nam
9050: 65 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  e">The name of t
9060: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
9070: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rieve</param>.. 
9080: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
9090: 54 68 65 20 69 6e 74 20 69 20 6f 66 20 74 68 65  The int i of the
90a0: 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73   column</returns
90b0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
90c0: 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 4f 72  erride int GetOr
90d0: 64 69 6e 61 6c 28 73 74 72 69 6e 67 20 6e 61 6d  dinal(string nam
90e0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
90f0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9100: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  ;....      if (_
9110: 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29  throwOnDisposed)
9120: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43   SQLiteCommand.C
9130: 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d  heck(_command);.
9140: 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
9150: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 72 73     // NOTE: Firs
9160: 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 20  t, check if the 
9170: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 63 68  column name cach
9180: 65 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69  e has been initi
9190: 61 6c 69 7a 65 64 20 79 65 74 2e 0d 0a 20 20 20  alized yet...   
91a0: 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20 6e     //       If n
91b0: 6f 74 2c 20 64 6f 20 69 74 20 6e 6f 77 2e 0d 0a  ot, do it now...
91c0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
91d0: 69 66 20 28 5f 66 69 65 6c 64 49 6e 64 65 78 65  if (_fieldIndexe
91e0: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
91f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f    {..          _
9200: 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20 6e  fieldIndexes = n
9210: 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74  ew Dictionary<st
9220: 72 69 6e 67 2c 20 69 6e 74 3e 28 0d 0a 20 20 20  ring, int>(..   
9230: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
9240: 67 43 6f 6d 70 61 72 65 72 2e 4f 72 64 69 6e 61  gComparer.Ordina
9250: 6c 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 20  lIgnoreCase);.. 
9260: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9270: 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54  //..      // NOT
9280: 45 3a 20 4e 65 78 74 2c 20 73 65 65 20 69 66 20  E: Next, see if 
9290: 74 68 65 20 69 6e 64 65 78 20 66 6f 72 20 74 68  the index for th
92a0: 65 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c 75  e requested colu
92b0: 6d 6e 20 6e 61 6d 65 20 68 61 73 20 62 65 65 6e  mn name has been
92c0: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
92d0: 20 63 61 63 68 65 64 20 61 6c 72 65 61 64 79 2e   cached already.
92e0: 20 20 49 66 20 73 6f 2c 20 72 65 74 75 72 6e 20    If so, return 
92f0: 74 68 65 20 63 61 63 68 65 64 20 76 61 6c 75 65  the cached value
9300: 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 0d 0a 20  .  Otherwise,.. 
9310: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 6f       //       lo
9320: 6f 6b 75 70 20 74 68 65 20 76 61 6c 75 65 20 61  okup the value a
9330: 6e 64 20 74 68 65 6e 20 63 61 63 68 65 20 74 68  nd then cache th
9340: 65 20 72 65 73 75 6c 74 20 66 6f 72 20 66 75 74  e result for fut
9350: 75 72 65 20 75 73 65 2e 0d 0a 20 20 20 20 20 20  ure use...      
9360: 2f 2f 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 3b  //..      int r;
9370: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 21 5f  ....      if (!_
9380: 66 69 65 6c 64 49 6e 64 65 78 65 73 2e 54 72 79  fieldIndexes.Try
9390: 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 6f  GetValue(name, o
93a0: 75 74 20 72 29 29 0d 0a 20 20 20 20 20 20 7b 0d  ut r))..      {.
93b0: 0a 20 20 20 20 20 20 20 20 20 20 72 20 3d 20 5f  .          r = _
93c0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
93d0: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 49 6e 64 65 78  _sql.ColumnIndex
93e0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
93f0: 74 2c 20 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  t, name);....   
9400: 20 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d 20         if (r == 
9410: 2d 31 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  -1 && _keyInfo !
9420: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9430: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9440: 20 20 20 20 72 20 3d 20 5f 6b 65 79 49 6e 66 6f      r = _keyInfo
9450: 2e 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d 65  .GetOrdinal(name
9460: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9470: 20 20 69 66 20 28 72 20 3e 20 2d 31 29 20 72 20    if (r > -1) r 
9480: 2b 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  += PrivateVisibl
9490: 65 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20  eFieldCount;..  
94a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
94b0: 20 20 20 20 20 20 20 5f 66 69 65 6c 64 49 6e 64         _fieldInd
94c0: 65 78 65 73 2e 41 64 64 28 6e 61 6d 65 2c 20 72  exes.Add(name, r
94d0: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  );..      }.... 
94e0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 3b 0d 0a       return r;..
94f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
9500: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
9510: 2f 2f 2f 20 53 63 68 65 6d 61 20 69 6e 66 6f 72  /// Schema infor
9520: 6d 61 74 69 6f 6e 20 69 6e 20 53 51 4c 69 74 65  mation in SQLite
9530: 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f   is difficult to
9540: 20 6d 61 70 20 69 6e 74 6f 20 2e 4e 45 54 20 63   map into .NET c
9550: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 73 6f 20 61  onventions, so a
9560: 20 6c 6f 74 20 6f 66 20 77 6f 72 6b 20 6d 75 73   lot of work mus
9570: 74 20 62 65 20 64 6f 6e 65 0d 0a 20 20 20 20 2f  t be done..    /
9580: 2f 2f 20 74 6f 20 67 61 74 68 65 72 20 74 68 65  // to gather the
9590: 20 6e 65 63 65 73 73 61 72 79 20 69 6e 66 6f 72   necessary infor
95a0: 6d 61 74 69 6f 6e 20 73 6f 20 69 74 20 63 61 6e  mation so it can
95b0: 20 62 65 20 72 65 70 72 65 73 65 6e 74 65 64 20   be represented 
95c0: 69 6e 20 61 6e 20 41 44 4f 2e 4e 45 54 20 6d 61  in an ADO.NET ma
95d0: 6e 6e 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  nner...    /// <
95e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
95f0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
9600: 72 6e 73 20 61 20 44 61 74 61 54 61 62 6c 65 20  rns a DataTable 
9610: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73  containing the s
9620: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
9630: 6e 20 66 6f 72 20 74 68 65 20 61 63 74 69 76 65  n for the active
9640: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
9650: 74 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73 65  t being processe
9660: 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  d.</returns>..  
9670: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
9680: 65 20 44 61 74 61 54 61 62 6c 65 20 47 65 74 53  e DataTable GetS
9690: 63 68 65 6d 61 54 61 62 6c 65 28 29 0d 0a 20 20  chemaTable()..  
96a0: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
96b0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
96c0: 20 20 20 72 65 74 75 72 6e 20 47 65 74 53 63 68     return GetSch
96d0: 65 6d 61 54 61 62 6c 65 28 74 72 75 65 2c 20 66  emaTable(true, f
96e0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  alse);..    }...
96f0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
9700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9740: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
9750: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 43 6c 61  ColumnParent Cla
9760: 73 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ss..    private 
9770: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43 6f 6c  sealed class Col
9780: 75 6d 6e 50 61 72 65 6e 74 20 3a 20 49 45 71 75  umnParent : IEqu
9790: 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 43 6f  alityComparer<Co
97a0: 6c 75 6d 6e 50 61 72 65 6e 74 3e 0d 0a 20 20 20  lumnParent>..   
97b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
97c0: 69 6f 6e 20 50 75 62 6c 69 63 20 46 69 65 6c 64  ion Public Field
97d0: 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  s..        publi
97e0: 63 20 73 74 72 69 6e 67 20 44 61 74 61 62 61 73  c string Databas
97f0: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
9800: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54 61  public string Ta
9810: 62 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  bleName;..      
9820: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
9830: 43 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20  ColumnName;..   
9840: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
9850: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
9860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98a0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
98b0: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
98c0: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
98d0: 20 20 20 70 75 62 6c 69 63 20 43 6f 6c 75 6d 6e     public Column
98e0: 50 61 72 65 6e 74 28 29 0d 0a 20 20 20 20 20 20  Parent()..      
98f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9900: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
9910: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
9920: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9970: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
9980: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 0d 0a 20  ColumnParent(.. 
9990: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
99a0: 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65 2c 0d  g databaseName,.
99b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
99c0: 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 2c 0d 0a  ing tableName,..
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
99e0: 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 0d 0a 20  ng columnName.. 
99f0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
9a00: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
9a10: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
9a20: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
9a30: 44 61 74 61 62 61 73 65 4e 61 6d 65 20 3d 20 64  DatabaseName = d
9a40: 61 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20 20  atabaseName;..  
9a50: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 54            this.T
9a60: 61 62 6c 65 4e 61 6d 65 20 3d 20 74 61 62 6c 65  ableName = table
9a70: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
9a80: 20 20 20 74 68 69 73 2e 43 6f 6c 75 6d 6e 4e 61     this.ColumnNa
9a90: 6d 65 20 3d 20 63 6f 6c 75 6d 6e 4e 61 6d 65 3b  me = columnName;
9aa0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
9ab0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
9ac0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
9ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b10: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
9b20: 65 67 69 6f 6e 20 49 45 71 75 61 6c 69 74 79 43  egion IEqualityC
9b30: 6f 6d 70 61 72 65 72 3c 43 6f 6c 75 6d 6e 50 61  omparer<ColumnPa
9b40: 72 65 6e 74 3e 20 4d 65 6d 62 65 72 73 0d 0a 20  rent> Members.. 
9b50: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
9b60: 6f 6c 20 45 71 75 61 6c 73 28 43 6f 6c 75 6d 6e  ol Equals(Column
9b70: 50 61 72 65 6e 74 20 78 2c 20 43 6f 6c 75 6d 6e  Parent x, Column
9b80: 50 61 72 65 6e 74 20 79 29 0d 0a 20 20 20 20 20  Parent y)..     
9b90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9ba0: 20 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c 6c    if ((x == null
9bb0: 29 20 26 26 20 28 79 20 3d 3d 20 6e 75 6c 6c 29  ) && (y == null)
9bc0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9be0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9c00: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
9c10: 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29 20  if ((x == null) 
9c20: 7c 7c 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29 0d  || (y == null)).
9c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c50: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
9c60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9c70: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9ca0: 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
9cb0: 73 28 78 2e 44 61 74 61 62 61 73 65 4e 61 6d 65  s(x.DatabaseName
9cc0: 2c 20 79 2e 44 61 74 61 62 61 73 65 4e 61 6d 65  , y.DatabaseName
9cd0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9ce0: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
9cf0: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
9d00: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0d  nalIgnoreCase)).
9d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9d20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9d30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
9d40: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
9d50: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9d70: 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 78  !String.Equals(x
9d80: 2e 54 61 62 6c 65 4e 61 6d 65 2c 20 79 2e 54 61  .TableName, y.Ta
9d90: 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  bleName,..      
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9db0: 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73    StringComparis
9dc0: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
9dd0: 43 61 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Case))..        
9de0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9e00: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
9e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
9e20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9e30: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45     if (!String.E
9e40: 71 75 61 6c 73 28 78 2e 43 6f 6c 75 6d 6e 4e 61  quals(x.ColumnNa
9e50: 6d 65 2c 20 79 2e 43 6f 6c 75 6d 6e 4e 61 6d 65  me, y.ColumnName
9e60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9e70: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
9e80: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
9e90: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0d  nalIgnoreCase)).
9ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9eb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9ec0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
9ed0: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
9ee0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9ef0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9f00: 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
9f10: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9f20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f70: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
9f80: 20 70 75 62 6c 69 63 20 69 6e 74 20 47 65 74 48   public int GetH
9f90: 61 73 68 43 6f 64 65 28 43 6f 6c 75 6d 6e 50 61  ashCode(ColumnPa
9fa0: 72 65 6e 74 20 6f 62 6a 29 0d 0a 20 20 20 20 20  rent obj)..     
9fb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9fc0: 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 30    int result = 0
9fd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9fe0: 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75 6c   if ((obj != nul
9ff0: 6c 29 20 26 26 20 28 6f 62 6a 2e 44 61 74 61 62  l) && (obj.Datab
a000: 61 73 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  aseName != null)
a010: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a020: 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a     result ^= obj
a030: 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 2e 47 65  .DatabaseName.Ge
a040: 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a  tHashCode();....
a050: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a060: 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26  (obj != null) &&
a070: 20 28 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d 65 20   (obj.TableName 
a080: 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  != null))..     
a090: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
a0a0: 74 20 5e 3d 20 6f 62 6a 2e 54 61 62 6c 65 4e 61  t ^= obj.TableNa
a0b0: 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28 29  me.GetHashCode()
a0c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a0d0: 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75 6c   if ((obj != nul
a0e0: 6c 29 20 26 26 20 28 6f 62 6a 2e 43 6f 6c 75 6d  l) && (obj.Colum
a0f0: 6e 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29 0d  nName != null)).
a100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a110: 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e 43   result ^= obj.C
a120: 6f 6c 75 6d 6e 4e 61 6d 65 2e 47 65 74 48 61 73  olumnName.GetHas
a130: 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  hCode();....    
a140: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
a150: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
a160: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
a170: 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
a180: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
a190: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a1e0: 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ...    private s
a1f0: 74 61 74 69 63 20 76 6f 69 64 20 47 65 74 53 74  tatic void GetSt
a200: 61 74 65 6d 65 6e 74 43 6f 6c 75 6d 6e 50 61 72  atementColumnPar
a210: 65 6e 74 73 28 0d 0a 20 20 20 20 20 20 20 20 53  ents(..        S
a220: 51 4c 69 74 65 42 61 73 65 20 73 71 6c 2c 0d 0a  QLiteBase sql,..
a230: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
a240: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 0d 0a 20  atement stmt,.. 
a250: 20 20 20 20 20 20 20 69 6e 74 20 66 69 65 6c 64         int field
a260: 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  Count,..        
a270: 72 65 66 20 44 69 63 74 69 6f 6e 61 72 79 3c 43  ref Dictionary<C
a280: 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73  olumnParent, Lis
a290: 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54 6f  t<int>> parentTo
a2a0: 43 6f 6c 75 6d 6e 73 2c 0d 0a 20 20 20 20 20 20  Columns,..      
a2b0: 20 20 72 65 66 20 44 69 63 74 69 6f 6e 61 72 79    ref Dictionary
a2c0: 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72 65  <int, ColumnPare
a2d0: 6e 74 3e 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65  nt> columnToPare
a2e0: 6e 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  nt..        ).. 
a2f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
a300: 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e   (parentToColumn
a310: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
a320: 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 54 6f          parentTo
a330: 43 6f 6c 75 6d 6e 73 20 3d 20 6e 65 77 20 44 69  Columns = new Di
a340: 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50  ctionary<ColumnP
a350: 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e  arent, List<int>
a360: 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  >(..            
a370: 20 20 20 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61      new ColumnPa
a380: 72 65 6e 74 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  rent());....    
a390: 20 20 20 20 69 66 20 28 63 6f 6c 75 6d 6e 54 6f      if (columnTo
a3a0: 50 61 72 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d  Parent == null).
a3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c  .            col
a3c0: 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 20 6e 65  umnToParent = ne
a3d0: 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74  w Dictionary<int
a3e0: 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 28  , ColumnParent>(
a3f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f  );....        fo
a400: 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20  r (int n = 0; n 
a410: 3c 20 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b  < fieldCount; n+
a420: 2b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  +)..        {.. 
a430: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
a440: 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65 20 3d  g databaseName =
a450: 20 73 71 6c 2e 43 6f 6c 75 6d 6e 44 61 74 61 62   sql.ColumnDatab
a460: 61 73 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29  aseName(stmt, n)
a470: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ;..            s
a480: 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 20  tring tableName 
a490: 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 54 61 62 6c  = sql.ColumnTabl
a4a0: 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b 0d  eName(stmt, n);.
a4b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
a4c0: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 20 3d  ing columnName =
a4d0: 20 73 71 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67 69   sql.ColumnOrigi
a4e0: 6e 61 6c 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29  nalName(stmt, n)
a4f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a500: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6b 65   ColumnParent ke
a510: 79 20 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61  y = new ColumnPa
a520: 72 65 6e 74 28 64 61 74 61 62 61 73 65 4e 61 6d  rent(databaseNam
a530: 65 2c 20 74 61 62 6c 65 4e 61 6d 65 2c 20 6e 75  e, tableName, nu
a540: 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ll);..          
a550: 20 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 76    ColumnParent v
a560: 61 6c 75 65 20 3d 20 6e 65 77 20 43 6f 6c 75 6d  alue = new Colum
a570: 6e 50 61 72 65 6e 74 28 64 61 74 61 62 61 73 65  nParent(database
a580: 4e 61 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65 2c  Name, tableName,
a590: 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0d 0a 0d   columnName);...
a5a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 69 73  .            Lis
a5b0: 74 3c 69 6e 74 3e 20 69 6e 64 65 78 4c 69 73 74  t<int> indexList
a5c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a5d0: 20 69 66 20 28 21 70 61 72 65 6e 74 54 6f 43 6f   if (!parentToCo
a5e0: 6c 75 6d 6e 73 2e 54 72 79 47 65 74 56 61 6c 75  lumns.TryGetValu
a5f0: 65 28 6b 65 79 2c 20 6f 75 74 20 69 6e 64 65 78  e(key, out index
a600: 4c 69 73 74 29 29 0d 0a 20 20 20 20 20 20 20 20  List))..        
a610: 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 54 6f          parentTo
a620: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 6b 65 79 2c  Columns.Add(key,
a630: 20 6e 65 77 20 4c 69 73 74 3c 69 6e 74 3e 28 6e   new List<int>(n
a640: 65 77 20 69 6e 74 5b 5d 20 7b 20 6e 20 7d 29 29  ew int[] { n }))
a650: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  ;..            e
a660: 6c 73 65 20 69 66 20 28 69 6e 64 65 78 4c 69 73  lse if (indexLis
a670: 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
a680: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
a690: 78 4c 69 73 74 2e 41 64 64 28 6e 29 3b 0d 0a 20  xList.Add(n);.. 
a6a0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
a6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a6c0: 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73   parentToColumns
a6d0: 5b 6b 65 79 5d 20 3d 20 6e 65 77 20 4c 69 73 74  [key] = new List
a6e0: 3c 69 6e 74 3e 28 6e 65 77 20 69 6e 74 5b 5d 20  <int>(new int[] 
a6f0: 7b 20 6e 20 7d 29 3b 0d 0a 0d 0a 20 20 20 20 20  { n });....     
a700: 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f 50         columnToP
a710: 61 72 65 6e 74 2e 41 64 64 28 6e 2c 20 76 61 6c  arent.Add(n, val
a720: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
a730: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a790: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
a7a0: 69 6e 74 20 43 6f 75 6e 74 50 61 72 65 6e 74 73  int CountParents
a7b0: 28 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74 69  (..        Dicti
a7c0: 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65  onary<ColumnPare
a7d0: 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20 70  nt, List<int>> p
a7e0: 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 0d 0a  arentToColumns..
a7f0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
a800: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 65  ..        int re
a810: 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20  sult = 0;....   
a820: 20 20 20 20 20 69 66 20 28 70 61 72 65 6e 74 54       if (parentT
a830: 6f 43 6f 6c 75 6d 6e 73 20 21 3d 20 6e 75 6c 6c  oColumns != null
a840: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
a850: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
a860: 68 20 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20  h (ColumnParent 
a870: 6b 65 79 20 69 6e 20 70 61 72 65 6e 74 54 6f 43  key in parentToC
a880: 6f 6c 75 6d 6e 73 2e 4b 65 79 73 29 0d 0a 20 20  olumns.Keys)..  
a890: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a8b0: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
a8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8d0: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8f0: 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65  string tableName
a900: 20 3d 20 6b 65 79 2e 54 61 62 6c 65 4e 61 6d 65   = key.TableName
a910: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a920: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
a930: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 61  IsNullOrEmpty(ta
a940: 62 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  bleName))..     
a950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
a960: 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
a970: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
a980: 6c 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  lt++;..         
a990: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
a9a0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
a9b0: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d  n result;..    }
a9c0: 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f  ////////////////
a9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa10: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  ///....    inter
aa20: 6e 61 6c 20 44 61 74 61 54 61 62 6c 65 20 47 65  nal DataTable Ge
aa30: 74 53 63 68 65 6d 61 54 61 62 6c 65 28 62 6f 6f  tSchemaTable(boo
aa40: 6c 20 77 61 6e 74 55 6e 69 71 75 65 49 6e 66 6f  l wantUniqueInfo
aa50: 2c 20 62 6f 6f 6c 20 77 61 6e 74 44 65 66 61 75  , bool wantDefau
aa60: 6c 74 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  ltValue)..    {.
aa70: 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73  .      CheckClos
aa80: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  ed();..      if 
aa90: 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65  (_throwOnDispose
aaa0: 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  d) SQLiteCommand
aab0: 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29  .Check(_command)
aac0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20  ;....      //.. 
aad0: 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20       // BUGFIX: 
aae0: 57 65 20 6e 65 65 64 20 74 6f 20 71 75 69 63 6b  We need to quick
aaf0: 6c 79 20 73 63 61 6e 20 61 6c 6c 20 74 68 65 20  ly scan all the 
ab00: 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63 75  fields in the cu
ab10: 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 2f 2f 20  rrent..      // 
ab20: 20 20 20 20 20 20 20 20 22 72 65 73 75 6c 74 20          "result 
ab30: 73 65 74 22 20 74 6f 20 73 65 65 20 68 6f 77 20  set" to see how 
ab40: 6d 61 6e 79 20 64 69 73 74 69 6e 63 74 20 74 61  many distinct ta
ab50: 62 6c 65 73 20 61 72 65 20 61 63 74 75 61 6c 6c  bles are actuall
ab60: 79 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  y..      //     
ab70: 20 20 20 20 69 6e 76 6f 6c 76 65 64 2e 20 20 54      involved.  T
ab80: 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
ab90: 69 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f 20  is necessary so 
aba0: 74 68 61 74 20 73 6f 6d 65 0d 0a 20 20 20 20 20  that some..     
abb0: 20 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 74 65   //         inte
abc0: 6c 6c 69 67 65 6e 74 20 64 65 63 69 73 69 6f 6e  lligent decision
abd0: 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 77 68  s can be made wh
abe0: 65 6e 20 63 6f 6e 73 74 72 75 63 74 69 6e 67 20  en constructing 
abf0: 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  the..      //   
ac00: 20 20 20 20 20 20 6d 65 74 61 64 61 74 61 20 62        metadata b
ac10: 65 6c 6f 77 2e 20 20 46 6f 72 20 65 78 61 6d 70  elow.  For examp
ac20: 6c 65 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 62  le, we need to b
ac30: 65 20 76 65 72 79 20 63 61 72 65 66 75 6c 0d 0a  e very careful..
ac40: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
ac50: 20 61 62 6f 75 74 20 66 6c 61 67 67 69 6e 67 20   about flagging 
ac60: 61 20 70 61 72 74 69 63 75 6c 61 72 20 63 6f 6c  a particular col
ac70: 75 6d 6e 20 61 73 20 22 75 6e 69 71 75 65 22 20  umn as "unique" 
ac80: 6a 75 73 74 0d 0a 20 20 20 20 20 20 2f 2f 20 20  just..      //  
ac90: 20 20 20 20 20 20 20 62 65 63 61 75 73 65 20 69         because i
aca0: 74 20 77 61 73 20 69 6e 20 69 74 73 20 6f 72 69  t was in its ori
acb0: 67 69 6e 61 6c 20 75 6e 64 65 72 6c 79 69 6e 67  ginal underlying
acc0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0d   database table.
acd0: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
ace0: 20 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e    if there are n
acf0: 6f 77 20 6d 75 6c 74 69 70 6c 65 20 74 61 62 6c  ow multiple tabl
ad00: 65 73 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20 74  es involved in t
ad10: 68 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  he..      //    
ad20: 20 20 20 20 20 22 72 65 73 75 6c 74 20 73 65 74       "result set
ad30: 22 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b  ".  See ticket [
ad40: 37 65 33 66 61 39 33 37 34 34 5d 20 66 6f 72 20  7e3fa93744] for 
ad50: 6d 6f 72 65 20 64 65 74 61 69 6c 65 64 0d 0a 20  more detailed.. 
ad60: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
ad70: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0d 0a 20 20  information...  
ad80: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 44 69      //..      Di
ad90: 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50  ctionary<ColumnP
ada0: 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e  arent, List<int>
adb0: 3e 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e  > parentToColumn
adc0: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
add0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74 2c   Dictionary<int,
ade0: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20 63   ColumnParent> c
adf0: 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 20  olumnToParent = 
ae00: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 47  null;....      G
ae10: 65 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c 75 6d  etStatementColum
ae20: 6e 50 61 72 65 6e 74 73 28 0d 0a 20 20 20 20 20  nParents(..     
ae30: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f       _command.Co
ae40: 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2c 20 5f  nnection._sql, _
ae50: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
ae60: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a 20   _fieldCount,.. 
ae70: 20 20 20 20 20 20 20 20 20 72 65 66 20 70 61 72           ref par
ae80: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 20 72 65  entToColumns, re
ae90: 66 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74  f columnToParent
aea0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 44 61 74 61  );....      Data
aeb0: 54 61 62 6c 65 20 74 62 6c 20 3d 20 6e 65 77 20  Table tbl = new 
aec0: 44 61 74 61 54 61 62 6c 65 28 22 53 63 68 65 6d  DataTable("Schem
aed0: 61 54 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20 20  aTable");..     
aee0: 20 44 61 74 61 54 61 62 6c 65 20 74 62 6c 49 6e   DataTable tblIn
aef0: 64 65 78 65 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  dexes = null;.. 
af00: 20 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 74       DataTable t
af10: 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 3b 0d  blIndexColumns;.
af20: 0a 20 20 20 20 20 20 44 61 74 61 52 6f 77 20 72  .      DataRow r
af30: 6f 77 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e  ow;..      strin
af40: 67 20 74 65 6d 70 3b 0d 0a 20 20 20 20 20 20 73  g temp;..      s
af50: 74 72 69 6e 67 20 73 74 72 43 61 74 61 6c 6f 67  tring strCatalog
af60: 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b   = String.Empty;
af70: 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73  ..      string s
af80: 74 72 54 61 62 6c 65 20 3d 20 53 74 72 69 6e 67  trTable = String
af90: 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20 73  .Empty;..      s
afa0: 74 72 69 6e 67 20 73 74 72 43 6f 6c 75 6d 6e 20  tring strColumn 
afb0: 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  = String.Empty;.
afc0: 0a 0d 0a 20 20 20 20 20 20 74 62 6c 2e 4c 6f 63  ...      tbl.Loc
afd0: 61 6c 65 20 3d 20 43 75 6c 74 75 72 65 49 6e 66  ale = CultureInf
afe0: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
aff0: 72 65 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  re;..      tbl.C
b000: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
b010: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c  aTableColumn.Col
b020: 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28  umnName, typeof(
b030: 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20  String));..     
b040: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
b050: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
b060: 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c  mn.ColumnOrdinal
b070: 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d  , typeof(int));.
b080: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
b090: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
b0a0: 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53  leColumn.ColumnS
b0b0: 69 7a 65 2c 20 74 79 70 65 6f 66 28 69 6e 74 29  ize, typeof(int)
b0c0: 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
b0d0: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
b0e0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65  TableColumn.Nume
b0f0: 72 69 63 50 72 65 63 69 73 69 6f 6e 2c 20 74 79  ricPrecision, ty
b100: 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20  peof(int));..   
b110: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
b120: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
b130: 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c  lumn.NumericScal
b140: 65 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b  e, typeof(int));
b150: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
b160: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
b170: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71  bleColumn.IsUniq
b180: 75 65 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65  ue, typeof(Boole
b190: 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  an));..      tbl
b1a0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
b1b0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49  emaTableColumn.I
b1c0: 73 4b 65 79 2c 20 74 79 70 65 6f 66 28 42 6f 6f  sKey, typeof(Boo
b1d0: 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74  lean));..      t
b1e0: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
b1f0: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
b200: 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 65 72  alColumn.BaseSer
b210: 76 65 72 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28  verName, typeof(
b220: 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20  string));..     
b230: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
b240: 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  (SchemaTableOpti
b250: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  onalColumn.BaseC
b260: 61 74 61 6c 6f 67 4e 61 6d 65 2c 20 74 79 70 65  atalogName, type
b270: 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20  of(String));..  
b280: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
b290: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
b2a0: 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e  olumn.BaseColumn
b2b0: 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72  Name, typeof(Str
b2c0: 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ing));..      tb
b2d0: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
b2e0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
b2f0: 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 2c 20  BaseSchemaName, 
b300: 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b  typeof(String));
b310: 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
b320: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
b330: 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61  bleColumn.BaseTa
b340: 62 6c 65 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28  bleName, typeof(
b350: 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20  String));..     
b360: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
b370: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
b380: 6d 6e 2e 44 61 74 61 54 79 70 65 2c 20 74 79 70  mn.DataType, typ
b390: 65 6f 66 28 54 79 70 65 29 29 3b 0d 0a 20 20 20  eof(Type));..   
b3a0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
b3b0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
b3c0: 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c  lumn.AllowDBNull
b3d0: 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e  , typeof(Boolean
b3e0: 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
b3f0: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
b400: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f  aTableColumn.Pro
b410: 76 69 64 65 72 54 79 70 65 2c 20 74 79 70 65 6f  viderType, typeo
b420: 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20  f(int));..      
b430: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
b440: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
b450: 6e 2e 49 73 41 6c 69 61 73 65 64 2c 20 74 79 70  n.IsAliased, typ
b460: 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a  eof(Boolean));..
b470: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
b480: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
b490: 65 43 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65 73  eColumn.IsExpres
b4a0: 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f  sion, typeof(Boo
b4b0: 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 74  lean));..      t
b4c0: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
b4d0: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
b4e0: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49  alColumn.IsAutoI
b4f0: 6e 63 72 65 6d 65 6e 74 2c 20 74 79 70 65 6f 66  ncrement, typeof
b500: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20  (Boolean));..   
b510: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
b520: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  dd(SchemaTableOp
b530: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52  tionalColumn.IsR
b540: 6f 77 56 65 72 73 69 6f 6e 2c 20 74 79 70 65 6f  owVersion, typeo
b550: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20  f(Boolean));..  
b560: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
b570: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
b580: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
b590: 48 69 64 64 65 6e 2c 20 74 79 70 65 6f 66 28 42  Hidden, typeof(B
b5a0: 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20  oolean));..     
b5b0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
b5c0: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
b5d0: 6d 6e 2e 49 73 4c 6f 6e 67 2c 20 74 79 70 65 6f  mn.IsLong, typeo
b5e0: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20  f(Boolean));..  
b5f0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
b600: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
b610: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
b620: 52 65 61 64 4f 6e 6c 79 2c 20 74 79 70 65 6f 66  ReadOnly, typeof
b630: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20  (Boolean));..   
b640: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
b650: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  dd(SchemaTableOp
b660: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 50 72 6f  tionalColumn.Pro
b670: 76 69 64 65 72 53 70 65 63 69 66 69 63 44 61 74  viderSpecificDat
b680: 61 54 79 70 65 2c 20 74 79 70 65 6f 66 28 54 79  aType, typeof(Ty
b690: 70 65 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  pe));..      tbl
b6a0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
b6b0: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
b6c0: 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56 61  Column.DefaultVa
b6d0: 6c 75 65 2c 20 74 79 70 65 6f 66 28 6f 62 6a 65  lue, typeof(obje
b6e0: 63 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  ct));..      tbl
b6f0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 44 61  .Columns.Add("Da
b700: 74 61 54 79 70 65 4e 61 6d 65 22 2c 20 74 79 70  taTypeName", typ
b710: 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20  eof(string));.. 
b720: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
b730: 2e 41 64 64 28 22 43 6f 6c 6c 61 74 69 6f 6e 54  .Add("CollationT
b740: 79 70 65 22 2c 20 74 79 70 65 6f 66 28 73 74 72  ype", typeof(str
b750: 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ing));..      tb
b760: 6c 2e 42 65 67 69 6e 4c 6f 61 64 44 61 74 61 28  l.BeginLoadData(
b770: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20  );....      for 
b780: 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20  (int n = 0; n < 
b790: 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b  _fieldCount; n++
b7a0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
b7b0: 20 20 20 20 53 51 4c 69 74 65 54 79 70 65 20 73      SQLiteType s
b7c0: 71 6c 54 79 70 65 20 3d 20 47 65 74 53 51 4c 69  qlType = GetSQLi
b7d0: 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 6e  teType(_flags, n
b7e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 6f  );....        ro
b7f0: 77 20 3d 20 74 62 6c 2e 4e 65 77 52 6f 77 28 29  w = tbl.NewRow()
b800: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 62 54  ;....        DbT
b810: 79 70 65 20 74 79 70 20 3d 20 73 71 6c 54 79 70  ype typ = sqlTyp
b820: 65 2e 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20  e.Type;....     
b830: 20 20 20 2f 2f 20 44 65 66 61 75 6c 74 20 73 65     // Default se
b840: 74 74 69 6e 67 73 20 66 6f 72 20 74 68 65 20 63  ttings for the c
b850: 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20 72  olumn..        r
b860: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
b870: 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 5d  lumn.ColumnName]
b880: 20 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0d 0a   = GetName(n);..
b890: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
b8a0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f  maTableColumn.Co
b8b0: 6c 75 6d 6e 4f 72 64 69 6e 61 6c 5d 20 3d 20 6e  lumnOrdinal] = n
b8c0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53  ;..        row[S
b8d0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
b8e0: 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20 53  .ColumnSize] = S
b8f0: 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44 62 54  QLiteConvert.DbT
b900: 79 70 65 54 6f 43 6f 6c 75 6d 6e 53 69 7a 65 28  ypeToColumnSize(
b910: 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  typ);..        r
b920: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
b930: 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63  lumn.NumericPrec
b940: 69 73 69 6f 6e 5d 20 3d 20 53 51 4c 69 74 65 43  ision] = SQLiteC
b950: 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f 4e  onvert.DbTypeToN
b960: 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e 28  umericPrecision(
b970: 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  typ);..        r
b980: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
b990: 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c  lumn.NumericScal
b9a0: 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65  e] = SQLiteConve
b9b0: 72 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65 72  rt.DbTypeToNumer
b9c0: 69 63 53 63 61 6c 65 28 74 79 70 29 3b 0d 0a 20  icScale(typ);.. 
b9d0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
b9e0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f  aTableColumn.Pro
b9f0: 76 69 64 65 72 54 79 70 65 5d 20 3d 20 73 71 6c  viderType] = sql
ba00: 54 79 70 65 2e 54 79 70 65 3b 0d 0a 20 20 20 20  Type.Type;..    
ba10: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
ba20: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e 67  bleColumn.IsLong
ba30: 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  ] = false;..    
ba40: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
ba50: 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44  bleColumn.AllowD
ba60: 42 4e 75 6c 6c 5d 20 3d 20 74 72 75 65 3b 0d 0a  BNull] = true;..
ba70: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
ba80: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
ba90: 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79  olumn.IsReadOnly
baa0: 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  ] = false;..    
bab0: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
bac0: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
bad0: 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e 5d 20  n.IsRowVersion] 
bae0: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
baf0: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
bb00: 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65  eColumn.IsUnique
bb10: 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  ] = false;..    
bb20: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
bb30: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d  bleColumn.IsKey]
bb40: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
bb50: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
bb60: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
bb70: 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74  .IsAutoIncrement
bb80: 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  ] = false;..    
bb90: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
bba0: 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74 61 54 79  bleColumn.DataTy
bbb0: 70 65 5d 20 3d 20 47 65 74 46 69 65 6c 64 54 79  pe] = GetFieldTy
bbc0: 70 65 28 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  pe(n);..        
bbd0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
bbe0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
bbf0: 48 69 64 64 65 6e 5d 20 3d 20 66 61 6c 73 65 3b  Hidden] = false;
bc00: 0d 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ..        row[Sc
bc10: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
bc20: 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 5d 20  BaseSchemaName] 
bc30: 3d 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  = _baseSchemaNam
bc40: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74  e;....        st
bc50: 72 43 6f 6c 75 6d 6e 20 3d 20 63 6f 6c 75 6d 6e  rColumn = column
bc60: 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 43 6f 6c 75  ToParent[n].Colu
bc70: 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  mnName;..       
bc80: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
bc90: 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f 6c  llOrEmpty(strCol
bca0: 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29 20 72  umn) == false) r
bcb0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
bcc0: 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e  lumn.BaseColumnN
bcd0: 61 6d 65 5d 20 3d 20 73 74 72 43 6f 6c 75 6d 6e  ame] = strColumn
bce0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 6f 77  ;....        row
bcf0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
bd00: 6d 6e 2e 49 73 45 78 70 72 65 73 73 69 6f 6e 5d  mn.IsExpression]
bd10: 20 3d 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   = String.IsNull
bd20: 4f 72 45 6d 70 74 79 28 73 74 72 43 6f 6c 75 6d  OrEmpty(strColum
bd30: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77  n);..        row
bd40: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
bd50: 6d 6e 2e 49 73 41 6c 69 61 73 65 64 5d 20 3d 20  mn.IsAliased] = 
bd60: 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28  (String.Compare(
bd70: 47 65 74 4e 61 6d 65 28 6e 29 2c 20 73 74 72 43  GetName(n), strC
bd80: 6f 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43 6f 6d  olumn, StringCom
bd90: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
bda0: 67 6e 6f 72 65 43 61 73 65 29 20 21 3d 20 30 29  gnoreCase) != 0)
bdb0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 65 6d  ;....        tem
bdc0: 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65  p = columnToPare
bdd0: 6e 74 5b 6e 5d 2e 54 61 62 6c 65 4e 61 6d 65 3b  nt[n].TableName;
bde0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74  ..        if (St
bdf0: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
be00: 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c 73  ty(temp) == fals
be10: 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  e) row[SchemaTab
be20: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62  leColumn.BaseTab
be30: 6c 65 4e 61 6d 65 5d 20 3d 20 74 65 6d 70 3b 0d  leName] = temp;.
be40: 0a 0d 0a 20 20 20 20 20 20 20 20 74 65 6d 70 20  ...        temp 
be50: 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74  = columnToParent
be60: 5b 6e 5d 2e 44 61 74 61 62 61 73 65 4e 61 6d 65  [n].DatabaseName
be70: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ;..        if (S
be80: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
be90: 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c  pty(temp) == fal
bea0: 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61  se) row[SchemaTa
beb0: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
bec0: 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d  n.BaseCatalogNam
bed0: 65 5d 20 3d 20 74 65 6d 70 3b 0d 0a 0d 0a 20 20  e] = temp;....  
bee0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74        string dat
bef0: 61 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  aType = null;.. 
bf00: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 20         // If we 
bf10: 68 61 76 65 20 61 20 74 61 62 6c 65 2d 62 6f 75  have a table-bou
bf20: 6e 64 20 63 6f 6c 75 6d 6e 2c 20 65 78 74 72 61  nd column, extra
bf30: 63 74 20 74 68 65 20 65 78 74 72 61 20 69 6e 66  ct the extra inf
bf40: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 69 74  ormation from it
bf50: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74  ..        if (St
bf60: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
bf70: 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d 3d  ty(strColumn) ==
bf80: 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 20   false)..       
bf90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74   {..          st
bfa0: 72 69 6e 67 20 63 6f 6c 6c 53 65 71 20 3d 20 6e  ring collSeq = n
bfb0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
bfc0: 62 6f 6f 6c 20 62 4e 6f 74 4e 75 6c 6c 20 3d 20  bool bNotNull = 
bfd0: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
bfe0: 20 20 62 6f 6f 6c 20 62 50 72 69 6d 61 72 79 4b    bool bPrimaryK
bff0: 65 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ey = false;..   
c000: 20 20 20 20 20 20 20 62 6f 6f 6c 20 62 41 75 74         bool bAut
c010: 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 66 61 6c  oIncrement = fal
c020: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  se;..          s
c030: 74 72 69 6e 67 5b 5d 20 61 72 53 69 7a 65 3b 0d  tring[] arSize;.
c040: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ...          // 
c050: 47 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  Get the column m
c060: 65 74 61 20 64 61 74 61 0d 0a 20 20 20 20 20 20  eta data..      
c070: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e      _command.Con
c080: 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2e 43 6f 6c  nection._sql.Col
c090: 75 6d 6e 4d 65 74 61 44 61 74 61 28 0d 0a 20 20  umnMetaData(..  
c0a0: 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e            (strin
c0b0: 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  g)row[SchemaTabl
c0c0: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
c0d0: 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d  BaseCatalogName]
c0e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  ,..            (
c0f0: 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d  string)row[Schem
c100: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
c110: 65 54 61 62 6c 65 4e 61 6d 65 5d 2c 0d 0a 20 20  eTableName],..  
c120: 20 20 20 20 20 20 20 20 20 20 73 74 72 43 6f 6c            strCol
c130: 75 6d 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  umn,..          
c140: 20 20 72 65 66 20 64 61 74 61 54 79 70 65 2c 20    ref dataType, 
c150: 72 65 66 20 63 6f 6c 6c 53 65 71 2c 20 72 65 66  ref collSeq, ref
c160: 20 62 4e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 62   bNotNull, ref b
c170: 50 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20  PrimaryKey, ref 
c180: 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 3b  bAutoIncrement);
c190: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
c1a0: 20 28 62 4e 6f 74 4e 75 6c 6c 20 7c 7c 20 62 50   (bNotNull || bP
c1b0: 72 69 6d 61 72 79 4b 65 79 29 20 72 6f 77 5b 53  rimaryKey) row[S
c1c0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
c1d0: 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 20  .AllowDBNull] = 
c1e0: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
c1f0: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
c200: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d  bleColumn.IsKey]
c210: 20 3d 20 62 50 72 69 6d 61 72 79 4b 65 79 20 26   = bPrimaryKey &
c220: 26 20 43 6f 75 6e 74 50 61 72 65 6e 74 73 28 70  & CountParents(p
c230: 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 29 20  arentToColumns) 
c240: 3c 3d 20 31 3b 0d 0a 20 20 20 20 20 20 20 20 20  <= 1;..         
c250: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
c260: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
c270: 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20  sAutoIncrement] 
c280: 3d 20 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74  = bAutoIncrement
c290: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 6f 77  ;..          row
c2a0: 5b 22 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 22  ["CollationType"
c2b0: 5d 20 3d 20 63 6f 6c 6c 53 65 71 3b 0d 0a 0d 0a  ] = collSeq;....
c2c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 6f 72            // For
c2d0: 20 74 79 70 65 73 20 6c 69 6b 65 20 76 61 72 63   types like varc
c2e0: 68 61 72 28 35 30 29 20 61 6e 64 20 73 75 63 68  har(50) and such
c2f0: 2c 20 65 78 74 72 61 63 74 20 74 68 65 20 73 69  , extract the si
c300: 7a 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61 72  ze..          ar
c310: 53 69 7a 65 20 3d 20 64 61 74 61 54 79 70 65 2e  Size = dataType.
c320: 53 70 6c 69 74 28 27 28 27 29 3b 0d 0a 20 20 20  Split('(');..   
c330: 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a         if (arSiz
c340: 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20  e.Length > 1).. 
c350: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c360: 20 20 20 20 20 20 20 20 64 61 74 61 54 79 70 65          dataType
c370: 20 3d 20 61 72 53 69 7a 65 5b 30 5d 3b 0d 0a 20   = arSize[0];.. 
c380: 20 20 20 20 20 20 20 20 20 20 20 61 72 53 69 7a             arSiz
c390: 65 20 3d 20 61 72 53 69 7a 65 5b 31 5d 2e 53 70  e = arSize[1].Sp
c3a0: 6c 69 74 28 27 29 27 29 3b 0d 0a 20 20 20 20 20  lit(')');..     
c3b0: 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a         if (arSiz
c3c0: 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20  e.Length > 1).. 
c3d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 53 69              arSi
c3f0: 7a 65 20 3d 20 61 72 53 69 7a 65 5b 30 5d 2e 53  ze = arSize[0].S
c400: 70 6c 69 74 28 27 2c 27 2c 20 27 2e 27 29 3b 0d  plit(',', '.');.
c410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
c420: 66 20 28 73 71 6c 54 79 70 65 2e 54 79 70 65 20  f (sqlType.Type 
c430: 3d 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79  == DbType.Binary
c440: 20 7c 7c 20 53 51 4c 69 74 65 43 6f 6e 76 65 72   || SQLiteConver
c450: 74 2e 49 73 53 74 72 69 6e 67 44 62 54 79 70 65  t.IsStringDbType
c460: 28 73 71 6c 54 79 70 65 2e 54 79 70 65 29 29 0d  (sqlType.Type)).
c470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
c480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c490: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
c4a0: 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69  eColumn.ColumnSi
c4b0: 7a 65 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f  ze] = Convert.To
c4c0: 49 6e 74 33 32 28 61 72 53 69 7a 65 5b 30 5d 2c  Int32(arSize[0],
c4d0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76   CultureInfo.Inv
c4e0: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0d  ariantCulture);.
c4f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
c500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c510: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
c520: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c530: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
c540: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
c550: 65 72 69 63 50 72 65 63 69 73 69 6f 6e 5d 20 3d  ericPrecision] =
c560: 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32   Convert.ToInt32
c570: 28 61 72 53 69 7a 65 5b 30 5d 2c 20 43 75 6c 74  (arSize[0], Cult
c580: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
c590: 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20  tCulture);..    
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c5b0: 61 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20  arSize.Length > 
c5c0: 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
c5d0: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
c5e0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65  TableColumn.Nume
c5f0: 72 69 63 53 63 61 6c 65 5d 20 3d 20 43 6f 6e 76  ricScale] = Conv
c600: 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53 69  ert.ToInt32(arSi
c610: 7a 65 5b 31 5d 2c 20 43 75 6c 74 75 72 65 49 6e  ze[1], CultureIn
c620: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
c630: 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ure);..         
c640: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c650: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
c660: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
c670: 69 66 20 28 77 61 6e 74 44 65 66 61 75 6c 74 56  if (wantDefaultV
c680: 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20  alue)..         
c690: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c6a0: 2f 2f 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65  // Determine the
c6b0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
c6c0: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 77  or the column, w
c6d0: 68 69 63 68 20 73 75 63 6b 73 20 62 65 63 61 75  hich sucks becau
c6e0: 73 65 20 77 65 20 68 61 76 65 20 74 6f 20 71 75  se we have to qu
c6f0: 65 72 79 20 74 68 65 20 73 63 68 65 6d 61 20 66  ery the schema f
c700: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 0d 0a  or each column..
c710: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
c720: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
c730: 20 63 6d 64 54 61 62 6c 65 20 3d 20 6e 65 77 20   cmdTable = new 
c740: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 48 65  SQLiteCommand(He
c750: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
c760: 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65  ngFormat(Culture
c770: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
c780: 6c 74 75 72 65 2c 20 22 50 52 41 47 4d 41 20 5b  lture, "PRAGMA [
c790: 7b 30 7d 5d 2e 54 41 42 4c 45 5f 49 4e 46 4f 28  {0}].TABLE_INFO(
c7a0: 5b 7b 31 7d 5d 29 22 2c 0d 0a 20 20 20 20 20 20  [{1}])",..      
c7b0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
c7c0: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
c7d0: 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f  olumn.BaseCatalo
c7e0: 67 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20  gName],..       
c7f0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
c800: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
c810: 65 54 61 62 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20  eTableName]..   
c820: 20 20 20 20 20 20 20 20 20 20 20 29 2c 20 5f 63             ), _c
c830: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
c840: 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n))..           
c850: 20 75 73 69 6e 67 20 28 44 62 44 61 74 61 52 65   using (DbDataRe
c860: 61 64 65 72 20 72 64 54 61 62 6c 65 20 3d 20 63  ader rdTable = c
c870: 6d 64 54 61 62 6c 65 2e 45 78 65 63 75 74 65 52  mdTable.ExecuteR
c880: 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20  eader())..      
c890: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c8a0: 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 64 20 74         // Find t
c8b0: 68 65 20 6d 61 74 63 68 69 6e 67 20 63 6f 6c 75  he matching colu
c8c0: 6d 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  mn..            
c8d0: 20 20 77 68 69 6c 65 20 28 72 64 54 61 62 6c 65    while (rdTable
c8e0: 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20  .Read())..      
c8f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c900: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
c910: 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 28 73  tring.Compare((s
c920: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
c930: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
c940: 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 2c 20 72 64 54  ColumnName], rdT
c950: 61 62 6c 65 2e 47 65 74 53 74 72 69 6e 67 28 31  able.GetString(1
c960: 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  ), StringCompari
c970: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
c980: 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20  eCase) == 0)..  
c990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
c9a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c9b0: 20 20 20 69 66 20 28 72 64 54 61 62 6c 65 2e 49     if (rdTable.I
c9c0: 73 44 42 4e 75 6c 6c 28 34 29 20 3d 3d 20 66 61  sDBNull(4) == fa
c9d0: 6c 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  lse)..          
c9e0: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
c9f0: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
ca00: 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56  lColumn.DefaultV
ca10: 61 6c 75 65 5d 20 3d 20 72 64 54 61 62 6c 65 5b  alue] = rdTable[
ca20: 34 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4];....         
ca30: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
ca40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ca50: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ca60: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
ca70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
ca80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ...          // 
ca90: 44 65 74 65 72 6d 69 6e 65 20 49 73 55 6e 69 71  Determine IsUniq
caa0: 75 65 20 70 72 6f 70 65 72 6c 79 2c 20 77 68 69  ue properly, whi
cab0: 63 68 20 69 73 20 61 20 70 61 69 6e 20 69 6e 20  ch is a pain in 
cac0: 74 68 65 20 62 75 74 74 21 0d 0a 20 20 20 20 20  the butt!..     
cad0: 20 20 20 20 20 69 66 20 28 77 61 6e 74 55 6e 69       if (wantUni
cae0: 71 75 65 49 6e 66 6f 29 0d 0a 20 20 20 20 20 20  queInfo)..      
caf0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
cb00: 20 20 20 69 66 20 28 28 73 74 72 69 6e 67 29 72     if ((string)r
cb10: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
cb20: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73  tionalColumn.Bas
cb30: 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20 21 3d  eCatalogName] !=
cb40: 20 73 74 72 43 61 74 61 6c 6f 67 0d 0a 20 20 20   strCatalog..   
cb50: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 73             || (s
cb60: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
cb70: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
cb80: 54 61 62 6c 65 4e 61 6d 65 5d 20 21 3d 20 73 74  TableName] != st
cb90: 72 54 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20  rTable)..       
cba0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cbb0: 20 20 20 20 20 20 73 74 72 43 61 74 61 6c 6f 67        strCatalog
cbc0: 20 3d 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53   = (string)row[S
cbd0: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
cbe0: 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74  alColumn.BaseCat
cbf0: 61 6c 6f 67 4e 61 6d 65 5d 3b 0d 0a 20 20 20 20  alogName];..    
cc00: 20 20 20 20 20 20 20 20 20 20 73 74 72 54 61 62            strTab
cc10: 6c 65 20 3d 20 28 73 74 72 69 6e 67 29 72 6f 77  le = (string)row
cc20: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
cc30: 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65  mn.BaseTableName
cc40: 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
cc50: 20 20 20 20 74 62 6c 49 6e 64 65 78 65 73 20 3d      tblIndexes =
cc60: 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63   _command.Connec
cc70: 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28 22  tion.GetSchema("
cc80: 49 6e 64 65 78 65 73 22 2c 20 6e 65 77 20 73 74  Indexes", new st
cc90: 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ring[] {..      
cca0: 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e            (strin
ccb0: 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  g)row[SchemaTabl
ccc0: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
ccd0: 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d  BaseCatalogName]
cce0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ccf0: 20 20 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20     null,..      
cd00: 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e            (strin
cd10: 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  g)row[SchemaTabl
cd20: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c  eColumn.BaseTabl
cd30: 65 4e 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20  eName],..       
cd40: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 20 7d 29           null })
cd50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
cd60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cd70: 66 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f 77  foreach (DataRow
cd80: 20 72 6f 77 49 6e 64 65 78 65 73 20 69 6e 20 74   rowIndexes in t
cd90: 62 6c 49 6e 64 65 78 65 73 2e 52 6f 77 73 29 0d  blIndexes.Rows).
cda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 62                tb
cdc0: 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 20 3d 20  lIndexColumns = 
cdd0: 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74  _command.Connect
cde0: 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28 22 49  ion.GetSchema("I
cdf0: 6e 64 65 78 43 6f 6c 75 6d 6e 73 22 2c 20 6e 65  ndexColumns", ne
ce00: 77 20 73 74 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20  w string[] {..  
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
ce20: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
ce30: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
ce40: 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e  umn.BaseCatalogN
ce50: 61 6d 65 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame],..         
ce60: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 0d 0a 20 20         null,..  
ce70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
ce80: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
ce90: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
cea0: 54 61 62 6c 65 4e 61 6d 65 5d 2c 0d 0a 20 20 20  TableName],..   
ceb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74               (st
cec0: 72 69 6e 67 29 72 6f 77 49 6e 64 65 78 65 73 5b  ring)rowIndexes[
ced0: 22 49 4e 44 45 58 5f 4e 41 4d 45 22 5d 2c 0d 0a  "INDEX_NAME"],..
cee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cef0: 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  null..          
cf00: 20 20 20 20 20 20 7d 29 3b 0d 0a 20 20 20 20 20        });..     
cf10: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
cf20: 20 28 44 61 74 61 52 6f 77 20 72 6f 77 43 6f 6c   (DataRow rowCol
cf30: 75 6d 6e 49 6e 64 65 78 20 69 6e 20 74 62 6c 49  umnIndex in tblI
cf40: 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73  ndexColumns.Rows
cf50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
cf60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
cf70: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43      if (String.C
cf80: 6f 6d 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e  ompare(SQLiteCon
cf90: 76 65 72 74 2e 47 65 74 53 74 72 69 6e 67 4f 72  vert.GetStringOr
cfa0: 4e 75 6c 6c 28 72 6f 77 43 6f 6c 75 6d 6e 49 6e  Null(rowColumnIn
cfb0: 64 65 78 5b 22 43 4f 4c 55 4d 4e 5f 4e 41 4d 45  dex["COLUMN_NAME
cfc0: 22 5d 29 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c 20  "]), strColumn, 
cfd0: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
cfe0: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
cff0: 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  se) == 0)..     
d000: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d020: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
d030: 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a        // BUGFIX:
d040: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   Make sure that 
d050: 77 65 20 6f 6e 6c 79 20 66 6c 61 67 20 74 68 69  we only flag thi
d060: 73 20 63 6f 6c 75 6d 6e 20 61 73 20 22 75 6e 69  s column as "uni
d070: 71 75 65 22 0d 0a 20 20 20 20 20 20 20 20 20 20  que"..          
d080: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
d090: 20 20 20 69 66 20 77 65 20 61 72 65 20 6e 6f 74     if we are not
d0a0: 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 73   processing of s
d0b0: 6f 6d 65 20 6b 69 6e 64 20 6f 66 20 6d 75 6c 74  ome kind of mult
d0c0: 69 2d 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  i-table..       
d0d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
d0e0: 20 20 20 20 20 20 63 6f 6e 73 74 72 75 63 74 20        construct 
d0f0: 28 69 2e 65 2e 20 61 20 6a 6f 69 6e 29 20 62 65  (i.e. a join) be
d100: 63 61 75 73 65 20 69 6e 20 74 68 61 74 20 63 61  cause in that ca
d110: 73 65 20 77 65 20 6d 75 73 74 0d 0a 20 20 20 20  se we must..    
d120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
d130: 20 20 20 20 20 20 20 20 20 61 6c 6c 6f 77 20 64           allow d
d140: 75 70 6c 69 63 61 74 65 20 76 61 6c 75 65 73 20  uplicate values 
d150: 28 72 65 66 65 72 20 74 6f 20 74 69 63 6b 65 74  (refer to ticket
d160: 20 5b 37 65 33 66 61 39 33 37 34 34 5d 29 2e 0d   [7e3fa93744])..
d170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d180: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
d190: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 72           if (par
d1a0: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 43 6f 75  entToColumns.Cou
d1b0: 6e 74 20 3d 3d 20 31 20 26 26 20 74 62 6c 49 6e  nt == 1 && tblIn
d1c0: 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73 2e  dexColumns.Rows.
d1d0: 43 6f 75 6e 74 20 3d 3d 20 31 20 26 26 20 28 62  Count == 1 && (b
d1e0: 6f 6f 6c 29 72 6f 77 5b 53 63 68 65 6d 61 54 61  ool)row[SchemaTa
d1f0: 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44  bleColumn.AllowD
d200: 42 4e 75 6c 6c 5d 20 3d 3d 20 66 61 6c 73 65 29  BNull] == false)
d210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d220: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
d230: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e  TableColumn.IsUn
d240: 69 71 75 65 5d 20 3d 20 72 6f 77 49 6e 64 65 78  ique] = rowIndex
d250: 65 73 5b 22 55 4e 49 51 55 45 22 5d 3b 0d 0a 0d  es["UNIQUE"];...
d260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d270: 20 20 20 2f 2f 20 49 66 20 69 74 73 20 61 6e 20     // If its an 
d280: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
d290: 6b 65 79 20 61 6e 64 20 74 68 65 20 6f 6e 6c 79  key and the only
d2a0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 6e 20   primary key in 
d2b0: 74 68 65 20 74 61 62 6c 65 2c 20 74 68 65 6e 20  the table, then 
d2c0: 69 74 73 20 61 20 72 6f 77 69 64 20 61 6c 69 61  its a rowid alia
d2d0: 73 20 61 6e 64 20 69 73 20 61 75 74 6f 69 6e 63  s and is autoinc
d2e0: 72 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  rement..        
d2f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
d300: 45 3a 20 20 43 75 72 72 65 6e 74 6c 79 20 63 6f  E:  Currently co
d310: 6d 6d 65 6e 74 65 64 20 6f 75 74 20 62 65 63 61  mmented out beca
d320: 75 73 65 20 74 68 69 73 20 69 73 20 6e 6f 74 20  use this is not 
d330: 61 6c 77 61 79 73 20 74 68 65 20 64 65 73 69 72  always the desir
d340: 65 64 20 62 65 68 61 76 69 6f 72 2e 20 20 46 6f  ed behavior.  Fo
d350: 72 20 65 78 61 6d 70 6c 65 2c 20 61 20 31 3a 31  r example, a 1:1
d360: 20 72 65 6c 61 74 69 6f 6e 73 68 69 70 20 77 69   relationship wi
d370: 74 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  th..            
d380: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
d390: 61 6e 6f 74 68 65 72 20 74 61 62 6c 65 2c 20 77  another table, w
d3a0: 68 65 72 65 20 74 68 65 20 6f 74 68 65 72 20 74  here the other t
d3b0: 61 62 6c 65 20 69 73 20 61 75 74 6f 69 6e 63 72  able is autoincr
d3c0: 65 6d 65 6e 74 2c 20 62 75 74 20 74 68 69 73 20  ement, but this 
d3d0: 6f 6e 65 20 69 73 20 6e 6f 74 2c 20 61 6e 64 20  one is not, and 
d3e0: 75 73 65 73 20 74 68 65 20 72 6f 77 69 64 20 66  uses the rowid f
d3f0: 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 2e 0d 0a  rom the other...
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d410: 20 20 2f 2f 20 20 20 20 20 20 20 20 49 74 20 69    //        It i
d420: 73 20 73 61 66 65 72 20 74 6f 20 6f 6e 6c 79 20  s safer to only 
d430: 73 65 74 20 41 75 74 6f 69 6e 63 72 65 6d 65 6e  set Autoincremen
d440: 74 20 6f 6e 20 74 61 62 6c 65 73 20 77 68 65 72  t on tables wher
d450: 65 20 77 65 27 72 65 20 53 55 52 45 20 74 68 65  e we're SURE the
d460: 20 75 73 65 72 20 73 70 65 63 69 66 69 65 64 20   user specified 
d470: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 65  AUTOINCREMENT, e
d480: 76 65 6e 20 69 66 20 69 74 73 20 61 20 72 6f 77  ven if its a row
d490: 69 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 0d 0a 20 20  id column.....  
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4b0: 69 66 20 28 74 62 6c 49 6e 64 65 78 43 6f 6c 75  if (tblIndexColu
d4c0: 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74 20 3d  mns.Rows.Count =
d4d0: 3d 20 31 20 26 26 20 28 62 6f 6f 6c 29 72 6f 77  = 1 && (bool)row
d4e0: 49 6e 64 65 78 65 73 5b 22 50 52 49 4d 41 52 59  Indexes["PRIMARY
d4f0: 5f 4b 45 59 22 5d 20 3d 3d 20 74 72 75 65 20 26  _KEY"] == true &
d500: 26 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  & String.IsNullO
d510: 72 45 6d 70 74 79 28 64 61 74 61 54 79 70 65 29  rEmpty(dataType)
d520: 20 3d 3d 20 66 61 6c 73 65 20 26 26 0d 0a 20 20   == false &&..  
d530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d540: 20 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65    String.Compare
d550: 28 64 61 74 61 54 79 70 65 2c 20 22 69 6e 74 65  (dataType, "inte
d560: 67 65 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70  ger", StringComp
d570: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
d580: 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d  noreCase) == 0).
d590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d5a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d5b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 72 6f            //  ro
d5c0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
d5d0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75  ionalColumn.IsAu
d5e0: 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 74  toIncrement] = t
d5f0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
d600: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
d620: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
d630: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
d640: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d650: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
d660: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d670: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
d680: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74 61  NullOrEmpty(data
d690: 54 79 70 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Type))..        
d6a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d6b0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66   TypeAffinity af
d6c0: 66 69 6e 20 3d 20 54 79 70 65 41 66 66 69 6e 69  fin = TypeAffini
d6d0: 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64  ty.Uninitialized
d6e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ;..            d
d6f0: 61 74 61 54 79 70 65 20 3d 20 5f 61 63 74 69 76  ataType = _activ
d700: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
d710: 43 6f 6c 75 6d 6e 54 79 70 65 28 5f 61 63 74 69  ColumnType(_acti
d720: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e 2c 20  veStatement, n, 
d730: 72 65 66 20 61 66 66 69 6e 29 3b 0d 0a 20 20 20  ref affin);..   
d740: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
d750: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
d760: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
d770: 61 74 61 54 79 70 65 29 20 3d 3d 20 66 61 6c 73  ataType) == fals
d780: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d790: 72 6f 77 5b 22 44 61 74 61 54 79 70 65 4e 61 6d  row["DataTypeNam
d7a0: 65 22 5d 20 3d 20 64 61 74 61 54 79 70 65 3b 0d  e"] = dataType;.
d7b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
d7c0: 20 20 20 20 74 62 6c 2e 52 6f 77 73 2e 41 64 64      tbl.Rows.Add
d7d0: 28 72 6f 77 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  (row);..      }.
d7e0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 6b 65  ...      if (_ke
d7f0: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
d800: 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f          _keyInfo
d810: 2e 41 70 70 65 6e 64 53 63 68 65 6d 61 54 61 62  .AppendSchemaTab
d820: 6c 65 28 74 62 6c 29 3b 0d 0a 0d 0a 20 20 20 20  le(tbl);....    
d830: 20 20 74 62 6c 2e 41 63 63 65 70 74 43 68 61 6e    tbl.AcceptChan
d840: 67 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 74 62  ges();..      tb
d850: 6c 2e 45 6e 64 4c 6f 61 64 44 61 74 61 28 29 3b  l.EndLoadData();
d860: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
d870: 20 74 62 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a   tbl;..    }....
d880: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
d890: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
d8a0: 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  eves the column 
d8b0: 61 73 20 61 20 73 74 72 69 6e 67 0d 0a 20 20 20  as a string..   
d8c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
d8d0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
d8e0: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
d8f0: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
d900: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
d910: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69  // <returns>stri
d920: 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  ng</returns>..  
d930: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
d940: 65 20 73 74 72 69 6e 67 20 47 65 74 53 74 72 69  e string GetStri
d950: 6e 67 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  ng(int i)..    {
d960: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
d970: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
d980: 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74      VerifyForGet
d990: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
d9a0: 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  f ((_flags & SQL
d9b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
d9c0: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
d9d0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
d9e0: 6b 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  ks) == SQLiteCon
d9f0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
da00: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
da10: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20  lueCallbacks).. 
da20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
da30: 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61        SQLiteData
da40: 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75  ReaderValue valu
da50: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61  e = new SQLiteDa
da60: 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b  taReaderValue();
da70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
da80: 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a  ol complete;....
da90: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f              Invo
daa0: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
dab0: 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74  ack(i, new SQLit
dac0: 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41  eReadValueEventA
dad0: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
dae0: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 76 61 6c 75        null, valu
daf0: 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  e), out complete
db00: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
db10: 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d    if (complete).
db20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
db30: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 53 74   return value.St
db40: 72 69 6e 67 56 61 6c 75 65 3b 0d 0a 20 20 20 20  ringValue;..    
db50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
db60: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
db70: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
db80: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
db90: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
dba0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
dbb0: 49 6e 66 6f 2e 47 65 74 53 74 72 69 6e 67 28 69  Info.GetString(i
dbc0: 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c   - PrivateVisibl
dbd0: 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d  eFieldCount);...
dbe0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
dbf0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
dc00: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56  nectionFlags.NoV
dc10: 65 72 69 66 79 54 65 78 74 41 66 66 69 6e 69 74  erifyTextAffinit
dc20: 79 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  y) != SQLiteConn
dc30: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65  ectionFlags.NoVe
dc40: 72 69 66 79 54 65 78 74 41 66 66 69 6e 69 74 79  rifyTextAffinity
dc50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  )..            V
dc60: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
dc70: 79 70 65 2e 53 74 72 69 6e 67 29 3b 0d 0a 0d 0a  ype.String);....
dc80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
dc90: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
dca0: 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63  _sql.GetText(_ac
dcb0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
dcc0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
dcd0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
dce0: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
dcf0: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
dd00: 61 6e 20 6f 62 6a 65 63 74 20 63 6f 72 72 65 73  an object corres
dd10: 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 75  ponding to the u
dd20: 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 74 79  nderlying dataty
dd30: 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  pe of the column
dd40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
dd50: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
dd60: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
dd70: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
dd80: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
dd90: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
dda0: 3e 6f 62 6a 65 63 74 3c 2f 72 65 74 75 72 6e 73  >object</returns
ddb0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
ddc0: 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65  erride object Ge
ddd0: 74 56 61 6c 75 65 28 69 6e 74 20 69 29 0d 0a 20  tValue(int i).. 
dde0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
ddf0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
de00: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
de10: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
de20: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
de30: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
de40: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
de50: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
de60: 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74  lbacks) == SQLit
de70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
de80: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
de90: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
dea0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
deb0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
dec0: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
ded0: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
dee0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
def0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
df00: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
df10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
df20: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
df30: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
df40: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
df50: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
df60: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
df70: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
df80: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
df90: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
dfa0: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
dfb0: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
dfc0: 65 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  e.Value;..      
dfd0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
dfe0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
dff0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
e000: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
e010: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
e020: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
e030: 66 6f 2e 47 65 74 56 61 6c 75 65 28 69 20 2d 20  fo.GetValue(i - 
e040: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
e050: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
e060: 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65        SQLiteType
e070: 20 74 79 70 20 3d 20 47 65 74 53 51 4c 69 74 65   typ = GetSQLite
e080: 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 69 29 3b  Type(_flags, i);
e090: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
e0a0: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
e0b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
e0c0: 2e 44 65 74 65 63 74 54 65 78 74 41 66 66 69 6e  .DetectTextAffin
e0d0: 69 74 79 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ity) == SQLiteCo
e0e0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65  nnectionFlags.De
e0f0: 74 65 63 74 54 65 78 74 41 66 66 69 6e 69 74 79  tectTextAffinity
e100: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
e110: 20 20 28 28 74 79 70 20 3d 3d 20 6e 75 6c 6c 29    ((typ == null)
e120: 20 7c 7c 20 28 74 79 70 2e 41 66 66 69 6e 69 74   || (typ.Affinit
e130: 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74  y == TypeAffinit
e140: 79 2e 54 65 78 74 29 29 29 0d 0a 20 20 20 20 20  y.Text)))..     
e150: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e160: 20 20 74 79 70 20 3d 20 47 65 74 53 51 4c 69 74    typ = GetSQLit
e170: 65 54 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20  eType(..        
e180: 20 20 20 20 20 20 20 20 74 79 70 2c 20 5f 61 63          typ, _ac
e190: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
e1a0: 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69  ql.GetText(_acti
e1b0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29  veStatement, i))
e1c0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
e1d0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28        else if ((
e1e0: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
e1f0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
e200: 44 65 74 65 63 74 53 74 72 69 6e 67 54 79 70 65  DetectStringType
e210: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
e220: 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63  ctionFlags.Detec
e230: 74 53 74 72 69 6e 67 54 79 70 65 29 20 26 26 0d  tStringType) &&.
e240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 28 74  .            ((t
e250: 79 70 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 53  yp == null) || S
e260: 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 49 73 53  QLiteConvert.IsS
e270: 74 72 69 6e 67 44 62 54 79 70 65 28 74 79 70 2e  tringDbType(typ.
e280: 54 79 70 65 29 29 29 0d 0a 20 20 20 20 20 20 20  Type)))..       
e290: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e2a0: 74 79 70 20 3d 20 47 65 74 53 51 4c 69 74 65 54  typ = GetSQLiteT
e2b0: 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ype(..          
e2c0: 20 20 20 20 20 20 74 79 70 2c 20 5f 61 63 74 69        typ, _acti
e2d0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
e2e0: 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65  .GetText(_active
e2f0: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d  Statement, i));.
e300: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
e310: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
e320: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
e330: 71 6c 2e 47 65 74 56 61 6c 75 65 28 5f 61 63 74  ql.GetValue(_act
e340: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 5f 66  iveStatement, _f
e350: 6c 61 67 73 2c 20 69 2c 20 74 79 70 29 3b 0d 0a  lags, i, typ);..
e360: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
e370: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
e380: 2f 2f 2f 20 52 65 74 72 65 69 76 65 73 20 74 68  /// Retreives th
e390: 65 20 76 61 6c 75 65 73 20 6f 66 20 6d 75 6c 74  e values of mult
e3a0: 69 70 6c 65 20 63 6f 6c 75 6d 6e 73 2c 20 75 70  iple columns, up
e3b0: 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66 20   to the size of 
e3c0: 74 68 65 20 73 75 70 70 6c 69 65 64 20 61 72 72  the supplied arr
e3d0: 61 79 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ay..    /// </su
e3e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
e3f0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
e400: 75 65 73 22 3e 54 68 65 20 61 72 72 61 79 20 74  ues">The array t
e410: 6f 20 66 69 6c 6c 20 77 69 74 68 20 76 61 6c 75  o fill with valu
e420: 65 73 20 66 72 6f 6d 20 74 68 65 20 63 6f 6c 75  es from the colu
e430: 6d 6e 73 20 69 6e 20 74 68 65 20 63 75 72 72 65  mns in the curre
e440: 6e 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 70 61  nt resultset</pa
e450: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
e460: 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65  eturns>The numbe
e470: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74  r of columns ret
e480: 72 69 65 76 65 64 3c 2f 72 65 74 75 72 6e 73 3e  rieved</returns>
e490: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
e4a0: 72 72 69 64 65 20 69 6e 74 20 47 65 74 56 61 6c  rride int GetVal
e4b0: 75 65 73 28 6f 62 6a 65 63 74 5b 5d 20 76 61 6c  ues(object[] val
e4c0: 75 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ues)..    {..   
e4d0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
e4e0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74  ();....      int
e4f0: 20 6e 4d 61 78 20 3d 20 46 69 65 6c 64 43 6f 75   nMax = FieldCou
e500: 6e 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 76  nt;..      if (v
e510: 61 6c 75 65 73 2e 4c 65 6e 67 74 68 20 3c 20 6e  alues.Length < n
e520: 4d 61 78 29 20 6e 4d 61 78 20 3d 20 76 61 6c 75  Max) nMax = valu
e530: 65 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  es.Length;....  
e540: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d      for (int n =
e550: 20 30 3b 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e 2b   0; n < nMax; n+
e560: 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  +)..      {..   
e570: 20 20 20 20 20 76 61 6c 75 65 73 5b 6e 5d 20 3d       values[n] =
e580: 20 47 65 74 56 61 6c 75 65 28 6e 29 3b 0d 0a 20   GetValue(n);.. 
e590: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
e5a0: 72 65 74 75 72 6e 20 6e 4d 61 78 3b 0d 0a 20 20  return nMax;..  
e5b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
e5c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
e5d0: 2f 20 52 65 74 75 72 6e 73 20 61 20 63 6f 6c 6c  / Returns a coll
e5e0: 65 63 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 69 6e  ection containin
e5f0: 67 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e  g all the column
e600: 20 6e 61 6d 65 73 20 61 6e 64 20 76 61 6c 75 65   names and value
e610: 73 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f  s for the..    /
e620: 2f 2f 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f  // current row o
e630: 66 20 64 61 74 61 20 69 6e 20 74 68 65 20 63 75  f data in the cu
e640: 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 2c  rrent resultset,
e650: 20 69 66 20 61 6e 79 2e 20 20 49 66 20 74 68 65   if any.  If the
e660: 72 65 20 69 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f  re is no..    //
e670: 2f 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 72  / current row or
e680: 20 6e 6f 20 63 75 72 72 65 6e 74 20 72 65 73 75   no current resu
e690: 6c 74 73 65 74 2c 20 61 6e 20 65 78 63 65 70 74  ltset, an except
e6a0: 69 6f 6e 20 6d 61 79 20 62 65 20 74 68 72 6f 77  ion may be throw
e6b0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
e6c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
e6d0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
e6e0: 2f 2f 20 54 68 65 20 63 6f 6c 6c 65 63 74 69 6f  // The collectio
e6f0: 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  n containing the
e700: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 61 6e 64   column name and
e710: 20 76 61 6c 75 65 20 69 6e 66 6f 72 6d 61 74 69   value informati
e720: 6f 6e 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  on for the..    
e730: 2f 2f 2f 20 63 75 72 72 65 6e 74 20 72 6f 77 20  /// current row 
e740: 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65 20 63  of data in the c
e750: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
e760: 20 6f 72 20 6e 75 6c 6c 20 69 66 20 74 68 69 73   or null if this
e770: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0d 0a 20 20   information..  
e780: 20 20 2f 2f 2f 20 63 61 6e 6e 6f 74 20 62 65 20    /// cannot be 
e790: 6f 62 74 61 69 6e 65 64 2e 0d 0a 20 20 20 20 2f  obtained...    /
e7a0: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
e7b0: 20 20 20 70 75 62 6c 69 63 20 4e 61 6d 65 56 61     public NameVa
e7c0: 6c 75 65 43 6f 6c 6c 65 63 74 69 6f 6e 20 47 65  lueCollection Ge
e7d0: 74 56 61 6c 75 65 73 28 29 0d 0a 20 20 20 20 7b  tValues()..    {
e7e0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
e7f0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
e800: 20 20 20 20 20 20 69 66 20 28 28 5f 61 63 74 69        if ((_acti
e810: 76 65 53 74 61 74 65 6d 65 6e 74 20 3d 3d 20 6e  veStatement == n
e820: 75 6c 6c 29 20 7c 7c 20 28 5f 61 63 74 69 76 65  ull) || (_active
e830: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 20 3d  Statement._sql =
e840: 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
e850: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
e860: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
e870: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a  Exception();....
e880: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 4d 61 78          int nMax
e890: 20 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c   = PrivateVisibl
e8a0: 65 46 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20  eFieldCount;..  
e8b0: 20 20 20 20 20 20 4e 61 6d 65 56 61 6c 75 65 43        NameValueC
e8c0: 6f 6c 6c 65 63 74 69 6f 6e 20 72 65 73 75 6c 74  ollection result
e8d0: 20 3d 20 6e 65 77 20 4e 61 6d 65 56 61 6c 75 65   = new NameValue
e8e0: 43 6f 6c 6c 65 63 74 69 6f 6e 28 6e 4d 61 78 29  Collection(nMax)
e8f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  ;....        for
e900: 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
e910: 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20   nMax; n++)..   
e920: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e930: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 20      string name 
e940: 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  = _activeStateme
e950: 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e 61  nt._sql.ColumnNa
e960: 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  me(_activeStatem
e970: 65 6e 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20  ent, n);..      
e980: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
e990: 75 65 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74  ue = _activeStat
e9a0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65  ement._sql.GetTe
e9b0: 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  xt(_activeStatem
e9c0: 65 6e 74 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ent, n);....    
e9d0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
e9e0: 64 64 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b  dd(name, value);
e9f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
ea00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
ea10: 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sult;..    }....
ea20: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
ea30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
ea40: 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20 72  ns True if the r
ea50: 65 73 75 6c 74 73 65 74 20 68 61 73 20 72 6f 77  esultset has row
ea60: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 66 65  s that can be fe
ea70: 74 63 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tched..    /// <
ea80: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
ea90: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62  ublic override b
eaa0: 6f 6f 6c 20 48 61 73 52 6f 77 73 0d 0a 20 20 20  ool HasRows..   
eab0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
eac0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ead0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
eae0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 43  ..        CheckC
eaf0: 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  losed();....    
eb00: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
eb10: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
eb20: 22 73 74 69 63 6b 79 22 20 66 6c 61 67 20 68 61  "sticky" flag ha
eb30: 73 20 62 65 65 6e 20 73 65 74 2c 20 75 73 65 20  s been set, use 
eb40: 74 68 65 20 6e 65 77 20 62 65 68 61 76 69 6f 72  the new behavior
eb50: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  ,..        //   
eb60: 20 20 20 20 77 68 69 63 68 20 72 65 74 75 72 6e      which return
eb70: 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  s non-zero if th
eb80: 65 72 65 20 77 65 72 65 20 65 76 65 72 20 61 6e  ere were ever an
eb90: 79 20 72 6f 77 73 20 69 6e 0d 0a 20 20 20 20 20  y rows in..     
eba0: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
ebb0: 61 73 73 6f 63 69 61 74 65 64 20 72 65 73 75 6c  associated resul
ebc0: 74 20 73 65 74 73 2e 20 20 47 65 6e 65 72 61 6c  t sets.  General
ebd0: 6c 79 2c 20 74 68 69 73 20 66 6c 61 67 20 69 73  ly, this flag is
ebe0: 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f   only..        /
ebf0: 2f 20 20 20 20 20 20 20 75 73 65 66 75 6c 20 77  /       useful w
ec00: 68 65 6e 20 69 74 20 69 73 20 6e 65 63 65 73 73  hen it is necess
ec10: 61 72 79 20 74 6f 20 72 65 74 61 69 6e 20 63 6f  ary to retain co
ec20: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
ec30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
ec40: 20 20 20 6f 74 68 65 72 20 41 44 4f 2e 4e 45 54     other ADO.NET
ec50: 20 70 72 6f 76 69 64 65 72 73 20 74 68 61 74 20   providers that 
ec60: 75 73 65 20 74 68 65 73 65 20 73 61 6d 65 20 73  use these same s
ec70: 65 6d 61 6e 74 69 63 73 20 66 6f 72 0d 0a 20 20  emantics for..  
ec80: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
ec90: 68 65 20 48 61 73 52 6f 77 73 20 70 72 6f 70 65  he HasRows prope
eca0: 72 74 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rty...        //
ecb0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
ecc0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
ecd0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 53 74  nnectionFlags.St
ece0: 69 63 6b 79 48 61 73 52 6f 77 73 29 20 3d 3d 20  ickyHasRows) == 
ecf0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
ed00: 46 6c 61 67 73 2e 53 74 69 63 6b 79 48 61 73 52  Flags.StickyHasR
ed10: 6f 77 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ows)..          
ed20: 72 65 74 75 72 6e 20 28 28 5f 72 65 61 64 69 6e  return ((_readin
ed30: 67 53 74 61 74 65 20 21 3d 20 31 29 20 7c 7c 20  gState != 1) || 
ed40: 28 5f 73 74 65 70 43 6f 75 6e 74 20 3e 20 30 29  (_stepCount > 0)
ed50: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
ed60: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
ed70: 45 3a 20 54 68 69 73 20 69 73 20 74 68 65 20 64  E: This is the d
ed80: 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72 2e  efault behavior.
ed90: 20 20 49 74 20 72 65 74 75 72 6e 73 20 6e 6f 6e    It returns non
eda0: 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 0d 0a 20  -zero only if.. 
edb0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
edc0: 6d 6f 72 65 20 72 6f 77 73 20 61 72 65 20 61 76  more rows are av
edd0: 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e 20 61 20  ailable (i.e. a 
ede0: 63 61 6c 6c 20 74 6f 20 74 68 65 20 52 65 61 64  call to the Read
edf0: 20 6d 65 74 68 6f 64 20 69 73 0d 0a 20 20 20 20   method is..    
ee00: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 70      //       exp
ee10: 65 63 74 65 64 20 74 6f 20 73 75 63 63 65 65 64  ected to succeed
ee20: 29 2e 20 20 50 72 69 6f 72 20 74 6f 20 74 68 65  ).  Prior to the
ee30: 20 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 6f 66   introduction of
ee40: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
ee50: 20 20 20 20 20 20 20 22 73 74 69 63 6b 79 22 20         "sticky" 
ee60: 66 6c 61 67 2c 20 74 68 69 73 20 69 73 20 68 6f  flag, this is ho
ee70: 77 20 74 68 69 73 20 70 72 6f 70 65 72 74 79 20  w this property 
ee80: 68 61 73 20 61 6c 77 61 79 73 20 77 6f 72 6b 65  has always worke
ee90: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  d...        //..
eea0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
eeb0: 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 21 3d  _readingState !=
eec0: 20 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20   1);..      }.. 
eed0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
eee0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
eef0: 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75 65 20  // Returns True 
ef00: 69 66 20 74 68 65 20 64 61 74 61 20 72 65 61 64  if the data read
ef10: 65 72 20 69 73 20 63 6c 6f 73 65 64 0d 0a 20 20  er is closed..  
ef20: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
ef30: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
ef40: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 43 6c 6f  rride bool IsClo
ef50: 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  sed..    {..    
ef60: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
ef70: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
ef80: 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d 20 6e 75 6c  (_command == nul
ef90: 6c 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  l); }..    }....
efa0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
efb0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
efc0: 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20 73  ns True if the s
efd0: 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20  pecified column 
efe0: 69 73 20 6e 75 6c 6c 0d 0a 20 20 20 20 2f 2f 2f  is null..    ///
eff0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
f000: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
f010: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
f020: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
f030: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
f040: 72 65 74 75 72 6e 73 3e 54 72 75 65 20 6f 72 20  returns>True or 
f050: 46 61 6c 73 65 3c 2f 72 65 74 75 72 6e 73 3e 0d  False</returns>.
f060: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
f070: 72 69 64 65 20 62 6f 6f 6c 20 49 73 44 42 4e 75  ride bool IsDBNu
f080: 6c 6c 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  ll(int i)..    {
f090: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
f0a0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
f0b0: 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74      VerifyForGet
f0c0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
f0d0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
f0e0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
f0f0: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
f100: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
f110: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
f120: 66 6f 2e 49 73 44 42 4e 75 6c 6c 28 69 20 2d 20  fo.IsDBNull(i - 
f130: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
f140: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
f150: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
f160: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
f170: 71 6c 2e 49 73 4e 75 6c 6c 28 5f 61 63 74 69 76  ql.IsNull(_activ
f180: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d  eStatement, i);.
f190: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
f1a0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
f1b0: 20 2f 2f 2f 20 4d 6f 76 65 73 20 74 6f 20 74 68   /// Moves to th
f1c0: 65 20 6e 65 78 74 20 72 65 73 75 6c 74 73 65 74  e next resultset
f1d0: 20 69 6e 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77   in multiple row
f1e0: 2d 72 65 74 75 72 6e 69 6e 67 20 53 51 4c 20 63  -returning SQL c
f1f0: 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f  ommand...    ///
f200: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
f210: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72   /// <returns>Tr
f220: 75 65 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e  ue if the comman
f230: 64 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  d was successful
f240: 20 61 6e 64 20 61 20 6e 65 77 20 72 65 73 75 6c   and a new resul
f250: 74 73 65 74 20 69 73 20 61 76 61 69 6c 61 62 6c  tset is availabl
f260: 65 2c 20 46 61 6c 73 65 20 6f 74 68 65 72 77 69  e, False otherwi
f270: 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  se.</returns>.. 
f280: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
f290: 64 65 20 62 6f 6f 6c 20 4e 65 78 74 52 65 73 75  de bool NextResu
f2a0: 6c 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lt()..    {..   
f2b0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
f2c0: 28 29 3b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b  ();..      Check
f2d0: 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  Closed();..     
f2e0: 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73   if (_throwOnDis
f2f0: 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d  posed) SQLiteCom
f300: 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d  mand.Check(_comm
f310: 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53  and);....      S
f320: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
f330: 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  tmt = null;..   
f340: 20 20 20 69 6e 74 20 66 69 65 6c 64 43 6f 75 6e     int fieldCoun
f350: 74 3b 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20 73  t;..      bool s
f360: 63 68 65 6d 61 4f 6e 6c 79 20 3d 20 28 28 5f 63  chemaOnly = ((_c
f370: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26  ommandBehavior &
f380: 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72   CommandBehavior
f390: 2e 53 63 68 65 6d 61 4f 6e 6c 79 29 20 21 3d 20  .SchemaOnly) != 
f3a0: 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69  0);....      whi
f3b0: 6c 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20  le (true)..     
f3c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
f3d0: 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c 20 26 26 20  stmt == null && 
f3e0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
f3f0: 20 21 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74   != null && _act
f400: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
f410: 6c 20 21 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63  l != null && _ac
f420: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
f430: 71 6c 2e 49 73 4f 70 65 6e 28 29 29 0d 0a 20 20  ql.IsOpen())..  
f440: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f450: 20 20 20 2f 2f 20 52 65 73 65 74 20 74 68 65 20     // Reset the 
f460: 70 72 65 76 69 6f 75 73 6c 79 2d 65 78 65 63 75  previously-execu
f470: 74 65 64 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20  ted statement.. 
f480: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73 63           if (!sc
f490: 68 65 6d 61 4f 6e 6c 79 29 20 5f 61 63 74 69 76  hemaOnly) _activ
f4a0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
f4b0: 52 65 73 65 74 28 5f 61 63 74 69 76 65 53 74 61  Reset(_activeSta
f4c0: 74 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  tement);....    
f4d0: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 72        // If we'r
f4e0: 65 20 6f 6e 6c 79 20 73 75 70 70 6f 73 65 64 20  e only supposed 
f4f0: 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e 67  to return a sing
f500: 6c 65 20 72 6f 77 73 65 74 2c 20 73 74 65 70 20  le rowset, step 
f510: 74 68 72 6f 75 67 68 20 61 6c 6c 20 72 65 6d 61  through all rema
f520: 69 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73  ining statements
f530: 20 6f 6e 63 65 20 75 6e 74 69 6c 0d 0a 20 20 20   once until..   
f540: 20 20 20 20 20 20 20 2f 2f 20 74 68 65 79 20 61         // they a
f550: 72 65 20 61 6c 6c 20 64 6f 6e 65 20 61 6e 64 20  re all done and 
f560: 72 65 74 75 72 6e 20 66 61 6c 73 65 20 74 6f 20  return false to 
f570: 69 6e 64 69 63 61 74 65 20 6e 6f 20 6d 6f 72 65  indicate no more
f580: 20 72 65 73 75 6c 74 73 65 74 73 20 65 78 69 73   resultsets exis
f590: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  t...          if
f5a0: 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
f5b0: 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
f5c0: 61 76 69 6f 72 2e 53 69 6e 67 6c 65 52 65 73 75  avior.SingleResu
f5d0: 6c 74 29 20 21 3d 20 30 29 0d 0a 20 20 20 20 20  lt) != 0)..     
f5e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f5f0: 20 20 20 20 66 6f 72 20 28 3b 20 3b 20 29 0d 0a      for (; ; )..
f600: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d               stm
f620: 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74  t = _command.Get
f630: 53 74 61 74 65 6d 65 6e 74 28 5f 61 63 74 69 76  Statement(_activ
f640: 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 20  eStatementIndex 
f650: 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  + 1);..         
f660: 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d 3d       if (stmt ==
f670: 20 6e 75 6c 6c 29 20 62 72 65 61 6b 3b 0d 0a 20   null) break;.. 
f680: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 61 63               _ac
f690: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64  tiveStatementInd
f6a0: 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ex++;....       
f6b0: 20 20 20 20 20 20 20 69 66 20 28 21 73 63 68 65         if (!sche
f6c0: 6d 61 4f 6e 6c 79 20 26 26 20 73 74 6d 74 2e 5f  maOnly && stmt._
f6d0: 73 71 6c 2e 53 74 65 70 28 73 74 6d 74 29 29 20  sql.Step(stmt)) 
f6e0: 5f 73 74 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 20  _stepCount++;.. 
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
f700: 28 73 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d  (stmt._sql.Colum
f710: 6e 43 6f 75 6e 74 28 73 74 6d 74 29 20 3d 3d 20  nCount(stmt) == 
f720: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
f730: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f740: 20 20 20 20 20 69 6e 74 20 63 68 61 6e 67 65 73       int changes
f750: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
f760: 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64         bool read
f770: 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  Only = false;.. 
f780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
f790: 66 20 28 73 74 6d 74 2e 54 72 79 47 65 74 43 68  f (stmt.TryGetCh
f7a0: 61 6e 67 65 73 28 72 65 66 20 63 68 61 6e 67 65  anges(ref change
f7b0: 73 2c 20 72 65 66 20 72 65 61 64 4f 6e 6c 79 29  s, ref readOnly)
f7c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
f7d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f7e0: 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61          if (!rea
f7f0: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
f800: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f820: 20 69 66 20 28 5f 72 6f 77 73 41 66 66 65 63 74   if (_rowsAffect
f830: 65 64 20 3d 3d 20 2d 31 29 20 5f 72 6f 77 73 41  ed == -1) _rowsA
f840: 66 66 65 63 74 65 64 20 3d 20 30 3b 0d 0a 20 20  ffected = 0;..  
f850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f860: 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20    _rowsAffected 
f870: 2b 3d 20 63 68 61 6e 67 65 73 3b 0d 0a 20 20 20  += changes;..   
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
f890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f8a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
f8b0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
f8c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8e0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
f8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
f900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f910: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
f920: 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79   if (!schemaOnly
f930: 29 20 73 74 6d 74 2e 5f 73 71 6c 2e 52 65 73 65  ) stmt._sql.Rese
f940: 74 28 73 74 6d 74 29 3b 20 2f 2f 20 47 6f 74 74  t(stmt); // Gott
f950: 61 20 72 65 73 65 74 20 61 66 74 65 72 20 65 76  a reset after ev
f960: 65 72 79 20 73 74 65 70 20 74 6f 20 72 65 6c 65  ery step to rele
f970: 61 73 65 20 61 6e 79 20 6c 6f 63 6b 73 20 61 6e  ase any locks an
f980: 64 20 73 75 63 68 21 0d 0a 20 20 20 20 20 20 20  d such!..       
f990: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
f9a0: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
f9b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
f9c0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
f9d0: 20 20 20 20 20 2f 2f 20 47 65 74 20 74 68 65 20       // Get the 
f9e0: 6e 65 78 74 20 73 74 61 74 65 6d 65 6e 74 20 74  next statement t
f9f0: 6f 20 65 78 65 63 75 74 65 0d 0a 20 20 20 20 20  o execute..     
fa00: 20 20 20 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61     stmt = _comma
fa10: 6e 64 2e 47 65 74 53 74 61 74 65 6d 65 6e 74 28  nd.GetStatement(
fa20: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
fa30: 49 6e 64 65 78 20 2b 20 31 29 3b 0d 0a 0d 0a 20  Index + 1);.... 
fa40: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27         // If we'
fa50: 76 65 20 72 65 61 63 68 65 64 20 74 68 65 20 65  ve reached the e
fa60: 6e 64 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d  nd of the statem
fa70: 65 6e 74 73 2c 20 72 65 74 75 72 6e 20 66 61 6c  ents, return fal
fa80: 73 65 2c 20 6e 6f 20 6d 6f 72 65 20 72 65 73 75  se, no more resu
fa90: 6c 74 73 65 74 73 0d 0a 20 20 20 20 20 20 20 20  ltsets..        
faa0: 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c  if (stmt == null
fab0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  )..          ret
fac0: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
fad0: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 20 77        // If we w
fae0: 65 72 65 20 6f 6e 20 61 20 63 75 72 72 65 6e 74  ere on a current
faf0: 20 72 65 73 75 6c 74 73 65 74 2c 20 73 65 74 20   resultset, set 
fb00: 74 68 65 20 73 74 61 74 65 20 74 6f 20 22 64 6f  the state to "do
fb10: 6e 65 20 72 65 61 64 69 6e 67 22 20 66 6f 72 20  ne reading" for 
fb20: 69 74 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  it..        if (
fb30: 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3c 20  _readingState < 
fb40: 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 72  1)..          _r
fb50: 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b  eadingState = 1;
fb60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 61 63 74  ....        _act
fb70: 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65  iveStatementInde
fb80: 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x++;....        
fb90: 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20 73 74 6d  fieldCount = stm
fba0: 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f 75  t._sql.ColumnCou
fbb0: 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20  nt(stmt);....   
fbc0: 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20 73       // If the s
fbd0: 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 20  tatement is not 
fbe0: 61 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  a select stateme
fbf0: 6e 74 20 6f 72 20 77 65 27 72 65 20 6e 6f 74 20  nt or we're not 
fc00: 72 65 74 72 69 65 76 69 6e 67 20 73 63 68 65 6d  retrieving schem
fc10: 61 20 6f 6e 6c 79 2c 20 74 68 65 6e 20 70 65 72  a only, then per
fc20: 66 6f 72 6d 20 74 68 65 20 69 6e 69 74 69 61 6c  form the initial
fc30: 20 73 74 65 70 0d 0a 20 20 20 20 20 20 20 20 69   step..        i
fc40: 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 20 7c  f (!schemaOnly |
fc50: 7c 20 28 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d  | (fieldCount ==
fc60: 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d   0))..        {.
fc70: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21  .          if (!
fc80: 73 63 68 65 6d 61 4f 6e 6c 79 20 26 26 20 73 74  schemaOnly && st
fc90: 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28 73 74 6d  mt._sql.Step(stm
fca0: 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  t))..          {
fcb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 73  ..            _s
fcc0: 74 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20  tepCount++;..   
fcd0: 20 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e           _readin
fce0: 67 53 74 61 74 65 20 3d 20 2d 31 3b 0d 0a 20 20  gState = -1;..  
fcf0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
fd00: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 66 69       else if (fi
fd10: 65 6c 64 43 6f 75 6e 74 20 3d 3d 20 30 29 20 2f  eldCount == 0) /
fd20: 2f 20 4e 6f 20 72 6f 77 73 20 72 65 74 75 72 6e  / No rows return
fd30: 65 64 2c 20 69 66 20 66 69 65 6c 64 43 6f 75 6e  ed, if fieldCoun
fd40: 74 20 69 73 20 7a 65 72 6f 2c 20 73 6b 69 70 20  t is zero, skip 
fd50: 74 6f 20 74 68 65 20 6e 65 78 74 20 73 74 61 74  to the next stat
fd60: 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  ement..         
fd70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
fd80: 69 6e 74 20 63 68 61 6e 67 65 73 20 3d 20 30 3b  int changes = 0;
fd90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
fda0: 6f 6c 20 72 65 61 64 4f 6e 6c 79 20 3d 20 66 61  ol readOnly = fa
fdb0: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
fdc0: 20 20 69 66 20 28 73 74 6d 74 2e 54 72 79 47 65    if (stmt.TryGe
fdd0: 74 43 68 61 6e 67 65 73 28 72 65 66 20 63 68 61  tChanges(ref cha
fde0: 6e 67 65 73 2c 20 72 65 66 20 72 65 61 64 4f 6e  nges, ref readOn
fdf0: 6c 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ly))..          
fe00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
fe10: 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c 79     if (!readOnly
fe20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
fe30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
fe40: 20 20 20 20 69 66 20 28 5f 72 6f 77 73 41 66 66      if (_rowsAff
fe50: 65 63 74 65 64 20 3d 3d 20 2d 31 29 20 5f 72 6f  ected == -1) _ro
fe60: 77 73 41 66 66 65 63 74 65 64 20 3d 20 30 3b 0d  wsAffected = 0;.
fe70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fe80: 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 2b   _rowsAffected +
fe90: 3d 20 63 68 61 6e 67 65 73 3b 0d 0a 20 20 20 20  = changes;..    
fea0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
feb0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
fec0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
fed0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
fee0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
fef0: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
ff00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ff10: 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61       if (!schema
ff20: 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f 73 71 6c 2e  Only) stmt._sql.
ff30: 52 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 20 20  Reset(stmt);..  
ff40: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
ff50: 75 65 3b 20 2f 2f 20 53 6b 69 70 20 74 68 69 73  ue; // Skip this
ff60: 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 6d 6f 76   command and mov
ff70: 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 69  e to the next, i
ff80: 74 20 77 61 73 20 6e 6f 74 20 61 20 72 6f 77 2d  t was not a row-
ff90: 72 65 74 75 72 6e 69 6e 67 20 72 65 73 75 6c 74  returning result
ffa0: 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  set..          }
ffb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
ffc0: 20 2f 2f 20 4e 6f 20 72 6f 77 73 2c 20 66 69 65   // No rows, fie
ffd0: 6c 64 43 6f 75 6e 74 20 69 73 20 6e 6f 6e 2d 7a  ldCount is non-z
ffe0: 65 72 6f 20 73 6f 20 73 74 6f 70 20 68 65 72 65  ero so stop here
fff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
10000 20 20 20 20 20 20 20 20 20 20 20 5f 72 65 61 64             _read
10010 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f  ingState = 1; //
10020 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65   This command re
10030 74 75 72 6e 65 64 20 63 6f 6c 75 6d 6e 73 20 62  turned columns b
10040 75 74 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 72  ut no rows, so r
10050 65 74 75 72 6e 20 74 72 75 65 2c 20 62 75 74 20  eturn true, but 
10060 48 61 73 52 6f 77 73 20 3d 20 66 61 6c 73 65 20  HasRows = false 
10070 61 6e 64 20 52 65 61 64 28 29 20 72 65 74 75 72  and Read() retur
10080 6e 73 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  ns false..      
10090 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
100a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 41  ....        // A
100b0 68 68 2c 20 77 65 20 66 6f 75 6e 64 20 61 20 72  hh, we found a r
100c0 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 72 65 73  ow-returning res
100d0 75 6c 74 73 65 74 20 65 6c 69 67 69 62 6c 65 20  ultset eligible 
100e0 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 21 0d  to be returned!.
100f0 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65  .        _active
10100 53 74 61 74 65 6d 65 6e 74 20 3d 20 73 74 6d 74  Statement = stmt
10110 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 69 65 6c  ;..        _fiel
10120 64 43 6f 75 6e 74 20 3d 20 66 69 65 6c 64 43 6f  dCount = fieldCo
10130 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66  unt;..        _f
10140 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20 6e 65  ieldIndexes = ne
10150 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72  w Dictionary<str
10160 69 6e 67 2c 20 69 6e 74 3e 28 53 74 72 69 6e 67  ing, int>(String
10170 43 6f 6d 70 61 72 65 72 2e 4f 72 64 69 6e 61 6c  Comparer.Ordinal
10180 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 20 20  IgnoreCase);..  
10190 20 20 20 20 20 20 5f 66 69 65 6c 64 54 79 70 65        _fieldType
101a0 41 72 72 61 79 20 3d 20 6e 65 77 20 53 51 4c 69  Array = new SQLi
101b0 74 65 54 79 70 65 5b 50 72 69 76 61 74 65 56 69  teType[PrivateVi
101c0 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 5d  sibleFieldCount]
101d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
101e0 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69  ((_commandBehavi
101f0 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61  or & CommandBeha
10200 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 29 20 21 3d  vior.KeyInfo) !=
10210 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 4c   0)..          L
10220 6f 61 64 4b 65 79 49 6e 66 6f 28 29 3b 0d 0a 0d  oadKeyInfo();...
10230 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
10240 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  true;..      }..
10250 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
10260 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
10270 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
10280 61 74 74 65 6d 70 74 73 20 74 6f 20 71 75 65 72  attempts to quer
10290 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  y the database c
102a0 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69  onnection associ
102b0 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20 2f  ated with..    /
102c0 2f 2f 20 74 68 65 20 64 61 74 61 20 72 65 61 64  // the data read
102d0 65 72 20 69 6e 20 75 73 65 2e 20 20 49 66 20 74  er in use.  If t
102e0 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f  he underlying co
102f0 6d 6d 61 6e 64 20 6f 72 20 63 6f 6e 6e 65 63 74  mmand or connect
10300 69 6f 6e 20 69 73 0d 0a 20 20 20 20 2f 2f 2f 20  ion is..    /// 
10310 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 61 20 6e  unavailable, a n
10320 75 6c 6c 20 76 61 6c 75 65 20 77 69 6c 6c 20 62  ull value will b
10330 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20  e returned...   
10340 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10350 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
10360 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  s>..    /// The 
10370 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
10380 74 20 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 69  t -OR- null if i
10390 74 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  t is unavailable
103a0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
103b0 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61  urns>..    priva
103c0 74 65 20 73 74 61 74 69 63 20 53 51 4c 69 74 65  te static SQLite
103d0 43 6f 6e 6e 65 63 74 69 6f 6e 20 47 65 74 43 6f  Connection GetCo
103e0 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  nnection(..     
103f0 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
10400 64 65 72 20 64 61 74 61 52 65 61 64 65 72 0d 0a  der dataReader..
10410 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
10420 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
10430 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10440 20 20 20 20 20 20 69 66 20 28 64 61 74 61 52 65        if (dataRe
10450 61 64 65 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ader != null).. 
10460 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
10480 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
10490 61 6e 64 20 3d 20 64 61 74 61 52 65 61 64 65 72  and = dataReader
104a0 2e 5f 63 6f 6d 6d 61 6e 64 3b 0d 0a 0d 0a 20 20  ._command;....  
104b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
104c0 20 28 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c   (command != nul
104d0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
104e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
104f0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
10500 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
10510 65 63 74 69 6f 6e 20 3d 20 63 6f 6d 6d 61 6e 64  ection = command
10520 2e 43 6f 6e 6e 65 63 74 69 6f 6e 3b 0d 0a 0d 0a  .Connection;....
10530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10540 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74 69      if (connecti
10550 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on != null)..   
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10570 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 6e       return conn
10580 65 63 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  ection;..       
10590 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
105a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
105b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63 61     }..        ca
105c0 74 63 68 20 28 4f 62 6a 65 63 74 44 69 73 70 6f  tch (ObjectDispo
105d0 73 65 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20  sedException).. 
105e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
105f0 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
10600 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
10610 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
10620 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 7d 0d 0a  n null;..    }..
10630 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
10640 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
10650 72 69 65 76 65 73 20 74 68 65 20 53 51 4c 69 74  rieves the SQLit
10660 65 54 79 70 65 20 66 6f 72 20 61 20 67 69 76 65  eType for a give
10670 6e 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 72 6f 77  n column and row
10680 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f   value...    ///
10690 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
106a0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
106b0 3d 22 6f 6c 64 54 79 70 65 22 3e 0d 0a 20 20 20  ="oldType">..   
106c0 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61   /// The origina
106d0 6c 20 53 51 4c 69 74 65 54 79 70 65 20 73 74 72  l SQLiteType str
106e0 75 63 74 75 72 65 2c 20 62 61 73 65 64 20 6f 6e  ucture, based on
106f0 6c 79 20 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ly on the column
10700 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
10710 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
10720 72 61 6d 20 6e 61 6d 65 3d 22 74 65 78 74 22 3e  ram name="text">
10730 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 74 65  ..    /// The te
10740 78 74 75 61 6c 20 76 61 6c 75 65 20 6f 66 20 74  xtual value of t
10750 68 65 20 63 6f 6c 75 6d 6e 20 66 6f 72 20 61 20  he column for a 
10760 67 69 76 65 6e 20 72 6f 77 2e 0d 0a 20 20 20 20  given row...    
10770 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
10780 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
10790 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 53 51 4c  .    /// The SQL
107a0 69 74 65 54 79 70 65 20 73 74 72 75 63 74 75 72  iteType structur
107b0 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
107c0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76  turns>..    priv
107d0 61 74 65 20 53 51 4c 69 74 65 54 79 70 65 20 47  ate SQLiteType G
107e0 65 74 53 51 4c 69 74 65 54 79 70 65 28 0d 0a 20  etSQLiteType(.. 
107f0 20 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70         SQLiteTyp
10800 65 20 6f 6c 64 54 79 70 65 2c 20 2f 2a 20 50 41  e oldType, /* PA
10810 53 53 2d 54 48 52 4f 55 47 48 20 2a 2f 0d 0a 20  SS-THROUGH */.. 
10820 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65         string te
10830 78 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  xt..        ).. 
10840 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
10850 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e   (SQLiteConvert.
10860 4c 6f 6f 6b 73 4c 69 6b 65 4e 75 6c 6c 28 74 65  LooksLikeNull(te
10870 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  xt))..          
10880 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c    return new SQL
10890 69 74 65 54 79 70 65 28 54 79 70 65 41 66 66 69  iteType(TypeAffi
108a0 6e 69 74 79 2e 4e 75 6c 6c 2c 20 44 62 54 79 70  nity.Null, DbTyp
108b0 65 2e 4f 62 6a 65 63 74 29 3b 0d 0a 0d 0a 20 20  e.Object);....  
108c0 20 20 20 20 20 20 69 66 20 28 53 51 4c 69 74 65        if (SQLite
108d0 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b  Convert.LooksLik
108e0 65 49 6e 74 36 34 28 74 65 78 74 29 29 0d 0a 20  eInt64(text)).. 
108f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10900 6e 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65  n new SQLiteType
10910 28 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e  (TypeAffinity.In
10920 74 36 34 2c 20 44 62 54 79 70 65 2e 49 6e 74 36  t64, DbType.Int6
10930 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  4);....        i
10940 66 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  f (SQLiteConvert
10950 2e 4c 6f 6f 6b 73 4c 69 6b 65 44 6f 75 62 6c 65  .LooksLikeDouble
10960 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20  (text))..       
10970 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
10980 53 51 4c 69 74 65 54 79 70 65 28 54 79 70 65 41  SQLiteType(TypeA
10990 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 2c 20  ffinity.Double, 
109a0 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b 0d  DbType.Double);.
109b0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
109c0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
109d0 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20   != null) &&..  
109e0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
109f0 43 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b  Convert.LooksLik
10a00 65 44 61 74 65 54 69 6d 65 28 5f 61 63 74 69 76  eDateTime(_activ
10a10 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2c  eStatement._sql,
10a20 20 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20   text))..       
10a30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10a40 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74  return new SQLit
10a50 65 54 79 70 65 28 54 79 70 65 41 66 66 69 6e 69  eType(TypeAffini
10a60 74 79 2e 44 61 74 65 54 69 6d 65 2c 20 44 62 54  ty.DateTime, DbT
10a70 79 70 65 2e 44 61 74 65 54 69 6d 65 29 3b 0d 0a  ype.DateTime);..
10a80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
10a90 20 20 20 20 20 72 65 74 75 72 6e 20 6f 6c 64 54       return oldT
10aa0 79 70 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ype;..    }.... 
10ab0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
10ac0 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  ..    /// Retrie
10ad0 76 65 73 20 74 68 65 20 53 51 4c 69 74 65 54 79  ves the SQLiteTy
10ae0 70 65 20 66 6f 72 20 61 20 67 69 76 65 6e 20 63  pe for a given c
10af0 6f 6c 75 6d 6e 2c 20 61 6e 64 20 63 61 63 68 65  olumn, and cache
10b00 73 20 69 74 20 74 6f 20 61 76 6f 69 64 20 72 65  s it to avoid re
10b10 70 65 74 65 74 69 76 65 20 69 6e 74 65 72 6f 70  petetive interop
10b20 20 63 61 6c 6c 73 2e 0d 0a 20 20 20 20 2f 2f 2f   calls...    ///
10b30 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
10b40 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
10b50 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c 61  ="flags">The fla
10b60 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
10b70 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f  th the parent co
10b80 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e  nnection object.
10b90 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
10ba0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
10bb0 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
10bc0 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61  he column.</para
10bd0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
10be0 75 72 6e 73 3e 41 20 53 51 4c 69 74 65 54 79 70  urns>A SQLiteTyp
10bf0 65 20 73 74 72 75 63 74 75 72 65 3c 2f 72 65 74  e structure</ret
10c00 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61  urns>..    priva
10c10 74 65 20 53 51 4c 69 74 65 54 79 70 65 20 47 65  te SQLiteType Ge
10c20 74 53 51 4c 69 74 65 54 79 70 65 28 53 51 4c 69  tSQLiteType(SQLi
10c30 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
10c40 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 29 0d  s flags, int i).
10c50 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
10c60 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 20 3d  SQLiteType typ =
10c70 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79   _fieldTypeArray
10c80 5b 69 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  [i];....        
10c90 69 66 20 28 74 79 70 20 3d 3d 20 6e 75 6c 6c 29  if (typ == null)
10ca0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
10cb0 20 20 20 20 20 20 20 20 20 2f 2f 20 49 6e 69 74           // Init
10cc0 69 61 6c 69 7a 65 20 74 68 69 73 20 63 6f 6c 75  ialize this colu
10cd0 6d 6e 27 73 20 66 69 65 6c 64 20 74 79 70 65 20  mn's field type 
10ce0 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20  instance..      
10cf0 20 20 20 20 20 20 74 79 70 20 3d 20 5f 66 69 65        typ = _fie
10d00 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d 20 3d  ldTypeArray[i] =
10d10 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 28   new SQLiteType(
10d20 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
10d30 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 6e  .        // If n
10d40 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20  ot initialized, 
10d50 74 68 65 6e 20 66 65 74 63 68 20 74 68 65 20 64  then fetch the d
10d60 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 20 64  eclared column d
10d70 61 74 61 74 79 70 65 20 61 6e 64 20 61 74 74 65  atatype and atte
10d80 6d 70 74 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  mpt to convert i
10d90 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 74 6f  t..        // to
10da0 20 61 20 6b 6e 6f 77 6e 20 44 62 54 79 70 65 2e   a known DbType.
10db0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 79  ..        if (ty
10dc0 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79  p.Affinity == Ty
10dd0 70 65 41 66 66 69 6e 69 74 79 2e 55 6e 69 6e 69  peAffinity.Unini
10de0 74 69 61 6c 69 7a 65 64 29 0d 0a 20 20 20 20 20  tialized)..     
10df0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10e00 20 20 74 79 70 2e 54 79 70 65 20 3d 20 53 51 4c    typ.Type = SQL
10e10 69 74 65 43 6f 6e 76 65 72 74 2e 54 79 70 65 4e  iteConvert.TypeN
10e20 61 6d 65 54 6f 44 62 54 79 70 65 28 0d 0a 20 20  ameToDbType(..  
10e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
10e40 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 74 68 69 73  tConnection(this
10e50 29 2c 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  ), _activeStatem
10e60 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54  ent._sql.ColumnT
10e70 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ype(..          
10e80 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
10e90 74 65 6d 65 6e 74 2c 20 69 2c 20 72 65 66 20 74  tement, i, ref t
10ea0 79 70 2e 41 66 66 69 6e 69 74 79 29 2c 20 66 6c  yp.Affinity), fl
10eb0 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ags);..        }
10ec0 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
10ed0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10ee0 20 20 20 20 20 20 20 74 79 70 2e 41 66 66 69 6e         typ.Affin
10ef0 69 74 79 20 3d 20 5f 61 63 74 69 76 65 53 74 61  ity = _activeSta
10f00 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75  tement._sql.Colu
10f10 6d 6e 41 66 66 69 6e 69 74 79 28 0d 0a 20 20 20  mnAffinity(..   
10f20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 61 63               _ac
10f30 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
10f40 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
10f50 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
10f60 74 79 70 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  typ;..    }.... 
10f70 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
10f80 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 61 64 73 20  ..    /// Reads 
10f90 74 68 65 20 6e 65 78 74 20 72 6f 77 20 66 72 6f  the next row fro
10fa0 6d 20 74 68 65 20 72 65 73 75 6c 74 73 65 74 0d  m the resultset.
10fb0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
10fc0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
10fd0 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20 61 20  turns>True if a 
10fe0 6e 65 77 20 72 6f 77 20 77 61 73 20 73 75 63 63  new row was succ
10ff0 65 73 73 66 75 6c 6c 79 20 6c 6f 61 64 65 64 20  essfully loaded 
11000 61 6e 64 20 69 73 20 72 65 61 64 79 20 66 6f 72  and is ready for
11010 20 70 72 6f 63 65 73 73 69 6e 67 3c 2f 72 65 74   processing</ret
11020 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
11030 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  c override bool 
11040 52 65 61 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Read()..    {.. 
11050 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
11060 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 43 68 65  ed();..      Che
11070 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20  ckClosed();..   
11080 20 20 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44     if (_throwOnD
11090 69 73 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43  isposed) SQLiteC
110a0 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f  ommand.Check(_co
110b0 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20  mmand);....     
110c0 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65   if ((_commandBe
110d0 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64  havior & Command
110e0 42 65 68 61 76 69 6f 72 2e 53 63 68 65 6d 61 4f  Behavior.SchemaO
110f0 6e 6c 79 29 20 21 3d 20 30 29 0d 0a 20 20 20 20  nly) != 0)..    
11100 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
11110 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  ;....      if (_
11120 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 3d 20  readingState == 
11130 2d 31 29 20 2f 2f 20 46 69 72 73 74 20 73 74 65  -1) // First ste
11140 70 20 77 61 73 20 61 6c 72 65 61 64 79 20 64 6f  p was already do
11150 6e 65 20 61 74 20 74 68 65 20 4e 65 78 74 52 65  ne at the NextRe
11160 73 75 6c 74 28 29 20 6c 65 76 65 6c 2c 20 73 6f  sult() level, so
11170 20 64 6f 6e 27 74 20 73 74 65 70 20 61 67 61 69   don't step agai
11180 6e 2c 20 6a 75 73 74 20 72 65 74 75 72 6e 20 74  n, just return t
11190 72 75 65 2e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  rue...      {.. 
111a0 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53         _readingS
111b0 74 61 74 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20  tate = 0;..     
111c0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
111d0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
111e0 65 6c 73 65 20 69 66 20 28 5f 72 65 61 64 69 6e  else if (_readin
111f0 67 53 74 61 74 65 20 3d 3d 20 30 29 20 2f 2f 20  gState == 0) // 
11200 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67  Actively reading
11210 20 72 6f 77 73 0d 0a 20 20 20 20 20 20 7b 0d 0a   rows..      {..
11220 20 20 20 20 20 20 20 20 2f 2f 20 44 6f 6e 27 74          // Don't
11230 20 72 65 61 64 20 61 20 6e 65 77 20 72 6f 77 20   read a new row 
11240 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 62  if the command b
11250 65 68 61 76 69 6f 72 20 64 69 63 74 61 74 65 73  ehavior dictates
11260 20 53 69 6e 67 6c 65 52 6f 77 2e 20 20 57 65 27   SingleRow.  We'
11270 76 65 20 61 6c 72 65 61 64 79 20 72 65 61 64 20  ve already read 
11280 74 68 65 20 66 69 72 73 74 20 72 6f 77 2e 0d 0a  the first row...
11290 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f          if ((_co
112a0 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20  mmandBehavior & 
112b0 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e  CommandBehavior.
112c0 53 69 6e 67 6c 65 52 6f 77 29 20 3d 3d 20 30 29  SingleRow) == 0)
112d0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
112e0 20 20 20 20 20 20 20 69 66 20 28 5f 61 63 74 69         if (_acti
112f0 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
11300 2e 53 74 65 70 28 5f 61 63 74 69 76 65 53 74 61  .Step(_activeSta
11310 74 65 6d 65 6e 74 29 20 3d 3d 20 74 72 75 65 29  tement) == true)
11320 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
11330 20 20 20 20 20 20 20 20 20 20 20 5f 73 74 65 70             _step
11340 43 6f 75 6e 74 2b 2b 3b 0d 0a 0d 0a 20 20 20 20  Count++;....    
11350 20 20 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79          if (_key
11360 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
11370 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 6b 65               _ke
11380 79 49 6e 66 6f 2e 52 65 73 65 74 28 29 3b 0d 0a  yInfo.Reset();..
11390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
113a0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
113b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
113c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 72   }....        _r
113d0 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b  eadingState = 1;
113e0 20 2f 2f 20 46 69 6e 69 73 68 65 64 20 72 65 61   // Finished rea
113f0 64 69 6e 67 20 72 6f 77 73 0d 0a 20 20 20 20 20  ding rows..     
11400 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
11410 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d  rn false;..    }
11420 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
11430 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
11440 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
11450 72 20 6f 66 20 72 6f 77 73 20 61 66 66 65 63 74  r of rows affect
11460 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d  ed by the statem
11470 65 6e 74 20 62 65 69 6e 67 20 65 78 65 63 75 74  ent being execut
11480 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ed...    /// The
11490 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
114a0 6d 61 79 20 6e 6f 74 20 62 65 20 61 63 63 75 72  may not be accur
114b0 61 74 65 20 66 6f 72 20 44 44 4c 20 73 74 61 74  ate for DDL stat
114c0 65 6d 65 6e 74 73 2e 20 20 41 6c 73 6f 2c 20 69  ements.  Also, i
114d0 74 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20  t..    /// will 
114e0 62 65 20 2d 31 20 66 6f 72 20 61 6e 79 20 73 74  be -1 for any st
114f0 61 74 65 6d 65 6e 74 20 74 68 61 74 20 64 6f 65  atement that doe
11500 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68 65  s not modify the
11510 20 64 61 74 61 62 61 73 65 20 28 65 2e 67 2e 0d   database (e.g..
11520 0a 20 20 20 20 2f 2f 2f 20 53 45 4c 45 43 54 29  .    /// SELECT)
11530 2e 20 20 49 66 20 61 6e 20 6f 74 68 65 72 77 69  .  If an otherwi
11540 73 65 20 72 65 61 64 2d 6f 6e 6c 79 20 73 74 61  se read-only sta
11550 74 65 6d 65 6e 74 20 6d 6f 64 69 66 69 65 73 20  tement modifies 
11560 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20  the database..  
11570 20 20 2f 2f 2f 20 69 6e 64 69 72 65 63 74 6c 79    /// indirectly
11580 20 28 65 2e 67 2e 20 76 69 61 20 61 20 76 69 72   (e.g. via a vir
11590 74 75 61 6c 20 74 61 62 6c 65 20 6f 72 20 75 73  tual table or us
115a0 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
115b0 69 6f 6e 29 2c 20 74 68 65 0d 0a 20 20 20 20 2f  ion), the..    /
115c0 2f 2f 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  // value returne
115d0 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0d  d is undefined..
115e0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
115f0 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
11600 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52 65 63  override int Rec
11610 6f 72 64 73 41 66 66 65 63 74 65 64 0d 0a 20 20  ordsAffected..  
11620 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b    {..      get {
11630 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
11640 3b 20 72 65 74 75 72 6e 20 5f 72 6f 77 73 41 66  ; return _rowsAf
11650 66 65 63 74 65 64 3b 20 7d 0d 0a 20 20 20 20 7d  fected; }..    }
11660 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
11670 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
11680 6e 64 65 78 65 72 20 74 6f 20 72 65 74 72 69 65  ndexer to retrie
11690 76 65 20 64 61 74 61 20 66 72 6f 6d 20 61 20 63  ve data from a c
116a0 6f 6c 75 6d 6e 20 67 69 76 65 6e 20 69 74 73 20  olumn given its 
116b0 6e 61 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  name..    /// </
116c0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
116d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
116e0 61 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66  ame">The name of
116f0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72   the column to r
11700 65 74 72 69 65 76 65 20 64 61 74 61 20 66 6f 72  etrieve data for
11710 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
11720 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 76  / <returns>The v
11730 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
11740 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65  n the column</re
11750 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
11760 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65  ic override obje
11770 63 74 20 74 68 69 73 5b 73 74 72 69 6e 67 20 6e  ct this[string n
11780 61 6d 65 5d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame]..    {..   
11790 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
117a0 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
117b0 20 47 65 74 56 61 6c 75 65 28 47 65 74 4f 72 64   GetValue(GetOrd
117c0 69 6e 61 6c 28 6e 61 6d 65 29 29 3b 20 7d 0d 0a  inal(name)); }..
117d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
117e0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
117f0 2f 2f 2f 20 49 6e 64 65 78 65 72 20 74 6f 20 72  /// Indexer to r
11800 65 74 72 69 65 76 65 20 64 61 74 61 20 66 72 6f  etrieve data fro
11810 6d 20 61 20 63 6f 6c 75 6d 6e 20 67 69 76 65 6e  m a column given
11820 20 69 74 73 20 69 0d 0a 20 20 20 20 2f 2f 2f 20   its i..    /// 
11830 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
11840 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
11850 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
11860 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
11870 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
11880 65 74 75 72 6e 73 3e 54 68 65 20 76 61 6c 75 65  eturns>The value
11890 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
118a0 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
118b0 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
118c0 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 74  verride object t
118d0 68 69 73 5b 69 6e 74 20 69 5d 0d 0a 20 20 20 20  his[int i]..    
118e0 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43  {..      get { C
118f0 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
11900 72 65 74 75 72 6e 20 47 65 74 56 61 6c 75 65 28  return GetValue(
11910 69 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  i); }..    }....
11920 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
11930 20 4c 6f 61 64 4b 65 79 49 6e 66 6f 28 29 0d 0a   LoadKeyInfo()..
11940 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
11950 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  f (_keyInfo != n
11960 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
11970 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6b 65  .            _ke
11980 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b  yInfo.Dispose();
11990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6b  ..            _k
119a0 65 79 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a  eyInfo = null;..
119b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
119c0 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 20 3d 20       _keyInfo = 
119d0 6e 65 77 20 53 51 4c 69 74 65 4b 65 79 52 65 61  new SQLiteKeyRea
119e0 64 65 72 28 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e  der(_command.Con
119f0 6e 65 63 74 69 6f 6e 2c 20 74 68 69 73 2c 20 5f  nection, this, _
11a00 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 29  activeStatement)
11a10 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d  ;..    }..  }..}
11a20 0d 0a                                            ..