System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 400bce215e000cea8aa2a56566e9a8211b1c2ff1:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75  ns.Generic;..  u
0180: 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c  sing System.Coll
0190: 65 63 74 69 6f 6e 73 2e 53 70 65 63 69 61 6c 69  ections.Speciali
01a0: 7a 65 64 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  zed;..  using Sy
01b0: 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 75 73  stem.Data;..  us
01c0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
01d0: 43 6f 6d 6d 6f 6e 3b 0d 0a 20 20 75 73 69 6e 67  Common;..  using
01e0: 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a   System.Globaliz
01f0: 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20  ation;....  /// 
0200: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  <summary>..  ///
0210: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
0220: 74 61 74 69 6f 6e 20 6f 66 20 44 62 44 61 74 61  tation of DbData
0230: 52 65 61 64 65 72 2e 0d 0a 20 20 2f 2f 2f 20 3c  Reader...  /// <
0240: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62  /summary>..  pub
0250: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
0260: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
0270: 72 20 3a 20 44 62 44 61 74 61 52 65 61 64 65 72  r : DbDataReader
0280: 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ..  {..    /// <
0290: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
02a0: 2f 20 55 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d  / Underlying com
02b0: 6d 61 6e 64 20 74 68 69 73 20 72 65 61 64 65 72  mand this reader
02c0: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 0d   is attached to.
02d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
02e0: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
02f0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 5f   SQLiteCommand _
0300: 63 6f 6d 6d 61 6e 64 3b 0d 0a 20 20 20 20 2f 2f  command;..    //
0310: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0320: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 70   /// The flags p
0330: 65 72 74 61 69 6e 69 6e 67 20 74 6f 20 74 68 65  ertaining to the
0340: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6e 6e   associated conn
0350: 65 63 74 69 6f 6e 20 28 76 69 61 20 74 68 65 20  ection (via the 
0360: 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 2f  command)...    /
0370: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0380: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0390: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
03a0: 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20 2f 2f   _flags;..    //
03b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
03c0: 20 2f 2f 2f 20 49 6e 64 65 78 20 6f 66 20 74 68   /// Index of th
03d0: 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
03e0: 65 6e 74 20 69 6e 20 74 68 65 20 63 6f 6d 6d 61  ent in the comma
03f0: 6e 64 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nd being process
0400: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
0410: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
0420: 61 74 65 20 69 6e 74 20 5f 61 63 74 69 76 65 53  ate int _activeS
0430: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 3b 0d 0a  tatementIndex;..
0440: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0450: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65  >..    /// Curre
0460: 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  nt statement bei
0470: 6e 67 20 52 65 61 64 28 29 0d 0a 20 20 20 20 2f  ng Read()..    /
0480: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0490: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
04a0: 65 53 74 61 74 65 6d 65 6e 74 20 5f 61 63 74 69  eStatement _acti
04b0: 76 65 53 74 61 74 65 6d 65 6e 74 3b 0d 0a 20 20  veStatement;..  
04c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
04d0: 0a 20 20 20 20 2f 2f 2f 20 53 74 61 74 65 20 6f  .    /// State o
04e0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  f the current st
04f0: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72  atement being pr
0500: 6f 63 65 73 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  ocessed...    //
0510: 2f 20 2d 31 20 3d 20 46 69 72 73 74 20 53 74 65  / -1 = First Ste
0520: 70 28 29 20 65 78 65 63 75 74 65 64 2c 20 73 6f  p() executed, so
0530: 20 74 68 65 20 66 69 72 73 74 20 52 65 61 64 28   the first Read(
0540: 29 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65  ) will be ignore
0550: 64 0d 0a 20 20 20 20 2f 2f 2f 20 20 30 20 3d 20  d..    ///  0 = 
0560: 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67  Actively reading
0570: 0d 0a 20 20 20 20 2f 2f 2f 20 20 31 20 3d 20 46  ..    ///  1 = F
0580: 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 0d  inished reading.
0590: 0a 20 20 20 20 2f 2f 2f 20 20 32 20 3d 20 4e 6f  .    ///  2 = No
05a0: 6e 2d 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  n-row-returning 
05b0: 73 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 20 72 65  statement, no re
05c0: 63 6f 72 64 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cords..    /// <
05d0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
05e0: 72 69 76 61 74 65 20 69 6e 74 20 5f 72 65 61 64  rivate int _read
05f0: 69 6e 67 53 74 61 74 65 3b 0d 0a 20 20 20 20 2f  ingState;..    /
0600: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0610: 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20    /// Number of 
0620: 72 65 63 6f 72 64 73 20 61 66 66 65 63 74 65 64  records affected
0630: 20 62 79 20 74 68 65 20 69 6e 73 65 72 74 2f 75   by the insert/u
0640: 70 64 61 74 65 20 73 74 61 74 65 6d 65 6e 74 73  pdate statements
0650: 20 65 78 65 63 75 74 65 64 20 6f 6e 20 74 68 65   executed on the
0660: 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 2f 2f   command..    //
0670: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0680: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 5f 72    private int _r
0690: 6f 77 73 41 66 66 65 63 74 65 64 3b 0d 0a 20 20  owsAffected;..  
06a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
06b0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 75 6e 74 20 6f  .    /// Count o
06c0: 66 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d 6e  f fields (column
06d0: 73 29 20 69 6e 20 74 68 65 20 72 6f 77 2d 72 65  s) in the row-re
06e0: 74 75 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e  turning statemen
06f0: 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
0700: 67 20 70 72 6f 63 65 73 73 65 64 0d 0a 20 20 20  g processed..   
0710: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0720: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
0730: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20   _fieldCount;.. 
0740: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0750: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
0760: 6d 62 65 72 20 6f 66 20 63 61 6c 6c 73 20 74 6f  mber of calls to
0770: 20 53 74 65 70 28 29 20 74 68 61 74 20 68 61 76   Step() that hav
0780: 65 20 72 65 74 75 72 6e 65 64 20 74 72 75 65 20  e returned true 
0790: 28 69 2e 65 2e 20 74 68 65 20 6e 75 6d 62 65 72  (i.e. the number
07a0: 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0d 0a 20   of rows that.. 
07b0: 20 20 20 2f 2f 2f 20 68 61 76 65 20 62 65 65 6e     /// have been
07c0: 20 72 65 61 64 20 69 6e 20 74 68 65 20 63 75 72   read in the cur
07d0: 72 65 6e 74 20 72 65 73 75 6c 74 20 73 65 74 29  rent result set)
07e0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
07f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0800: 74 65 20 69 6e 74 20 5f 73 74 65 70 43 6f 75 6e  te int _stepCoun
0810: 74 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  t;..    /// <sum
0820: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d  mary>..    /// M
0830: 61 70 73 20 74 68 65 20 66 69 65 6c 64 20 28 63  aps the field (c
0840: 6f 6c 75 6d 6e 29 20 6e 61 6d 65 73 20 74 6f 20  olumn) names to 
0850: 74 68 65 69 72 20 63 6f 72 72 65 73 70 6f 6e 64  their correspond
0860: 69 6e 67 20 69 6e 64 65 78 65 73 20 77 69 74 68  ing indexes with
0870: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0d  in the results..
0880: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0890: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
08a0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
08b0: 6e 67 2c 20 69 6e 74 3e 20 5f 66 69 65 6c 64 49  ng, int> _fieldI
08c0: 6e 64 65 78 65 73 3b 0d 0a 20 20 20 20 2f 2f 2f  ndexes;..    ///
08d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
08e0: 2f 2f 2f 20 44 61 74 61 74 79 70 65 73 20 6f 66  /// Datatypes of
08f0: 20 61 63 74 69 76 65 20 66 69 65 6c 64 73 20 28   active fields (
0900: 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74 68 65 20  columns) in the 
0910: 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
0920: 74 2c 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  t, used for type
0930: 2d 72 65 73 74 72 69 63 74 69 6e 67 20 64 61 74  -restricting dat
0940: 61 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  a..    /// </sum
0950: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0960: 74 65 20 53 51 4c 69 74 65 54 79 70 65 5b 5d 20  te SQLiteType[] 
0970: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 3b  _fieldTypeArray;
0980: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0990: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
09a0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
09b0: 68 65 20 64 61 74 61 72 65 61 64 65 72 0d 0a 20  he datareader.. 
09c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
09d0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 43  >..    private C
09e0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 5f  ommandBehavior _
09f0: 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 3b  commandBehavior;
0a00: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0a10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
0a20: 66 20 73 65 74 2c 20 74 68 65 6e 20 64 69 73 70  f set, then disp
0a30: 6f 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61  ose of the comma
0a40: 6e 64 20 6f 62 6a 65 63 74 20 77 68 65 6e 20 74  nd object when t
0a50: 68 65 20 72 65 61 64 65 72 20 69 73 20 66 69 6e  he reader is fin
0a60: 69 73 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ished..    /// <
0a70: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
0a80: 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 64 69  nternal bool _di
0a90: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 3b 0d 0a 0d  sposeCommand;...
0aa0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0ab0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73  y>..    /// If s
0ac0: 65 74 2c 20 74 68 65 6e 20 72 61 69 73 65 20 61  et, then raise a
0ad0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 68 65 6e  n exception when
0ae0: 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61   the object is a
0af0: 63 63 65 73 73 65 64 20 61 66 74 65 72 20 62 65  ccessed after be
0b00: 69 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  ing disposed... 
0b10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0b20: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0b30: 62 6f 6f 6c 20 5f 74 68 72 6f 77 4f 6e 44 69 73  bool _throwOnDis
0b40: 70 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  posed;....    //
0b50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0b60: 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66   /// An array of
0b70: 20 72 6f 77 69 64 27 73 20 66 6f 72 20 74 68 65   rowid's for the
0b80: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
0b90: 74 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61  t if CommandBeha
0ba0: 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 20 69 73 20  vior.KeyInfo is 
0bb0: 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
0bc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0bd0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0be0: 65 4b 65 79 52 65 61 64 65 72 20 5f 6b 65 79 49  eKeyReader _keyI
0bf0: 6e 66 6f 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  nfo;....    /// 
0c00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0c10: 2f 2f 20 4d 61 74 63 68 65 73 20 74 68 65 20 76  // Matches the v
0c20: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  ersion of the co
0c30: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
0c40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0c50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20     internal int 
0c60: 5f 76 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  _version;....   
0c70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0c80: 20 20 20 20 2f 2f 2f 20 54 68 65 20 22 73 74 75      /// The "stu
0c90: 62 22 20 28 69 2e 65 2e 20 70 6c 61 63 65 68 6f  b" (i.e. placeho
0ca0: 6c 64 65 72 29 20 62 61 73 65 20 73 63 68 65 6d  lder) base schem
0cb0: 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 77 68  a name to use wh
0cc0: 65 6e 20 72 65 74 75 72 6e 69 6e 67 0d 0a 20 20  en returning..  
0cd0: 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 73 63 68    /// column sch
0ce0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ema information.
0cf0: 20 20 4d 61 74 63 68 65 73 20 74 68 65 20 62 61    Matches the ba
0d00: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 75  se schema name u
0d10: 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  sed by the..    
0d20: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 63  /// associated c
0d30: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
0d40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0d50: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
0d60: 6e 67 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61  ng _baseSchemaNa
0d70: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  me;....    /// <
0d80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0d90: 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74  / Internal const
0da0: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
0db0: 7a 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  zes the dataread
0dc0: 65 72 20 61 6e 64 20 73 65 74 73 20 75 70 20 74  er and sets up t
0dd0: 6f 20 62 65 67 69 6e 20 65 78 65 63 75 74 69 6e  o begin executin
0de0: 67 20 73 74 61 74 65 6d 65 6e 74 73 0d 0a 20 20  g statements..  
0df0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0e00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0e10: 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65 20   name="cmd">The 
0e20: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74 68  SQLiteCommand th
0e30: 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20 69  is data reader i
0e40: 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20  s for</param>.. 
0e50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e60: 6d 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20  me="behave">The 
0e70: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
0e80: 72 20 6f 66 20 74 68 65 20 64 61 74 61 20 72 65  r of the data re
0e90: 61 64 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ader</param>..  
0ea0: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
0eb0: 65 44 61 74 61 52 65 61 64 65 72 28 53 51 4c 69  eDataReader(SQLi
0ec0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43  teCommand cmd, C
0ed0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 62  ommandBehavior b
0ee0: 65 68 61 76 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ehave)..    {.. 
0ef0: 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69 73       _throwOnDis
0f00: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
0f10: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20       _command = 
0f20: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 5f 76 65 72  cmd;..      _ver
0f30: 73 69 6f 6e 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  sion = _command.
0f40: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 76 65 72 73  Connection._vers
0f50: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 5f 62 61 73  ion;..      _bas
0f60: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 5f 63  eSchemaName = _c
0f70: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
0f80: 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  n._baseSchemaNam
0f90: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 63 6f 6d  e;....      _com
0fa0: 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 3d 20 62  mandBehavior = b
0fb0: 65 68 61 76 65 3b 0d 0a 20 20 20 20 20 20 5f 61  ehave;..      _a
0fc0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
0fd0: 64 65 78 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  dex = -1;..     
0fe0: 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d   _rowsAffected =
0ff0: 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65   -1;....      Re
1000: 66 72 65 73 68 46 6c 61 67 73 28 29 3b 0d 0a 0d  freshFlags();...
1010: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
1020: 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
1030: 64 28 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  d(GetConnection(
1040: 74 68 69 73 29 2c 0d 0a 20 20 20 20 20 20 20 20  this),..        
1050: 20 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e    new Connection
1060: 45 76 65 6e 74 41 72 67 73 28 53 51 4c 69 74 65  EventArgs(SQLite
1070: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
1080: 79 70 65 2e 4e 65 77 44 61 74 61 52 65 61 64 65  ype.NewDataReade
1090: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 75  r,..          nu
10a0: 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61  ll, null, _comma
10b0: 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c 2c 20  nd, this, null, 
10c0: 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  null, new object
10d0: 5b 5d 20 7b 20 62 65 68 61 76 65 20 7d 29 29 3b  [] { behave }));
10e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 63  ....      if (_c
10f0: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
1100: 0a 20 20 20 20 20 20 20 20 20 20 4e 65 78 74 52  .          NextR
1110: 65 73 75 6c 74 28 29 3b 0d 0a 20 20 20 20 7d 0d  esult();..    }.
1120: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1190: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
11a0: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
11b0: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
11c0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
11d0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
11e0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
11f0: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
1200: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
1210: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
1220: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
1230: 64 20 26 26 20 5f 74 68 72 6f 77 4f 6e 44 69 73  d && _throwOnDis
1240: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
1250: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
1260: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
1270: 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c  ption(typeof(SQL
1280: 69 74 65 44 61 74 61 52 65 61 64 65 72 29 2e 4e  iteDataReader).N
1290: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
12a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1310: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1320: 0d 0a 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73  ..    /// Dispos
1330: 65 20 6f 66 20 61 6c 6c 20 72 65 73 6f 75 72 63  e of all resourc
1340: 65 73 20 75 73 65 64 20 62 79 20 74 68 69 73 20  es used by this 
1350: 64 61 74 61 72 65 61 64 65 72 2e 0d 0a 20 20 20  datareader...   
1360: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1380: 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22  name="disposing"
1390: 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70  ></param>..    p
13a0: 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64  rotected overrid
13b0: 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  e void Dispose(b
13c0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
13d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
13e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
13f0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1400: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1410: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1420: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
1430: 72 67 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  rgs(SQLiteConnec
1440: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 44 69  tionEventType.Di
1450: 73 70 6f 73 69 6e 67 44 61 74 61 52 65 61 64 65  sposingDataReade
1460: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
1470: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d  null, null, _com
1480: 6d 61 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c  mand, this, null
1490: 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65  , null, new obje
14a0: 63 74 5b 5d 20 7b 20 64 69 73 70 6f 73 69 6e 67  ct[] { disposing
14b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ,..            d
14c0: 69 73 70 6f 73 65 64 2c 20 5f 63 6f 6d 6d 61 6e  isposed, _comman
14d0: 64 42 65 68 61 76 69 6f 72 2c 20 5f 72 65 61 64  dBehavior, _read
14e0: 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f 77 73 41  ingState, _rowsA
14f0: 66 66 65 63 74 65 64 2c 20 5f 73 74 65 70 43 6f  ffected, _stepCo
1500: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
1510: 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 20 5f    _fieldCount, _
1520: 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 2c 20  disposeCommand, 
1530: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
1540: 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   }));....       
1550: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1570: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1580: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
15a0: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15d0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1610: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1620: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1630: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1640: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1650: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1680: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
16d0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
16e0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
16f0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1740: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1760: 4f 54 45 3a 20 46 69 78 20 66 6f 72 20 74 69 63  OTE: Fix for tic
1770: 6b 65 74 20 5b 65 31 62 32 65 30 66 37 36 39 5d  ket [e1b2e0f769]
1780: 2c 20 64 6f 20 4e 4f 54 20 74 68 72 6f 77 20 65  , do NOT throw e
1790: 78 63 65 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20  xceptions..     
17a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17b0: 20 20 20 20 77 68 69 6c 65 20 77 65 20 61 72 65      while we are
17c0: 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64 2e   being disposed.
17d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
17f0: 20 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69        _throwOnDi
1800: 73 70 6f 73 65 64 20 3d 20 66 61 6c 73 65 3b 0d  sposed = false;.
1810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1820: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1830: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
1840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1850: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
1860: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20  disposing);.... 
1870: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1880: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1890: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
18a0: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
18b0: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
18c0: 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  point...        
18d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
18e0: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
18f0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1900: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1910: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1980: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f  .    internal vo
1990: 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  id Cancel()..   
19a0: 20 7b 0d 0a 20 20 20 20 20 20 5f 76 65 72 73 69   {..      _versi
19b0: 6f 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  on = 0;..    }..
19c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
19d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c 6f  ry>..    /// Clo
19e0: 73 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  ses the dataread
19f0: 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20  er, potentially 
1a00: 63 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  closing the conn
1a10: 65 63 74 69 6f 6e 20 61 73 20 77 65 6c 6c 20 69  ection as well i
1a20: 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  f CommandBehavio
1a30: 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f  r.CloseConnectio
1a40: 6e 20 77 61 73 20 73 70 65 63 69 66 69 65 64 2e  n was specified.
1a50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1a60: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
1a70: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
1a80: 6c 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  lose()..    {.. 
1a90: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
1aa0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53  ed();....      S
1ab0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
1ac0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1ad0: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1ae0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f            new Co
1af0: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
1b00: 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  s(SQLiteConnecti
1b10: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73  onEventType.Clos
1b20: 69 6e 67 44 61 74 61 52 65 61 64 65 72 2c 0d 0a  ingDataReader,..
1b30: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
1b40: 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61 6e 64 2c 20  null, _command, 
1b50: 74 68 69 73 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  this, null, null
1b60: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
1b70: 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f   _commandBehavio
1b80: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 72  r,..          _r
1b90: 65 61 64 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f  eadingState, _ro
1ba0: 77 73 41 66 66 65 63 74 65 64 2c 20 5f 73 74 65  wsAffected, _ste
1bb0: 70 43 6f 75 6e 74 2c 20 5f 66 69 65 6c 64 43 6f  pCount, _fieldCo
1bc0: 75 6e 74 2c 20 5f 64 69 73 70 6f 73 65 43 6f 6d  unt, _disposeCom
1bd0: 6d 61 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  mand,..         
1be0: 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65   _throwOnDispose
1bf0: 64 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  d }));....      
1c00: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
1c10: 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61        if (_comma
1c20: 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nd != null)..   
1c30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c40: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1c50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c60: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1c70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c80: 20 20 2f 2f 20 4d 61 6b 65 20 73 75 72 65 20 77    // Make sure w
1c90: 65 27 76 65 20 6e 6f 74 20 62 65 65 6e 20 63 61  e've not been ca
1ca0: 6e 63 65 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  nceled..        
1cb0: 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73 69        if (_versi
1cc0: 6f 6e 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  on != 0)..      
1cd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ce0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d10: 20 20 20 20 20 77 68 69 6c 65 20 28 4e 65 78 74       while (Next
1d20: 52 65 73 75 6c 74 28 29 29 0d 0a 20 20 20 20 20  Result())..     
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d70: 20 20 20 20 20 20 20 20 63 61 74 63 68 28 53 51          catch(SQ
1d80: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 29 0d 0a  LiteException)..
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1db0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1dc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1dd0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 52 65       _command.Re
1de0: 73 65 74 44 61 74 61 52 65 61 64 65 72 28 29 3b  setDataReader();
1df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
1e10: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e30: 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64 61 74     // If the dat
1e40: 61 72 65 61 64 65 72 27 73 20 62 65 68 61 76 69  areader's behavi
1e50: 6f 72 20 69 6e 63 6c 75 64 65 73 20 63 6c 6f 73  or includes clos
1e60: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
1e70: 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73 6f 20 68  on, then do so h
1e80: 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ere...          
1e90: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
1ea0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
1eb0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73  andBehavior.Clos
1ec0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 21 3d 20  eConnection) != 
1ed0: 30 20 26 26 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  0 && _command.Co
1ee0: 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  nnection != null
1ef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f00: 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e     _command.Conn
1f10: 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d  ection.Close();.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f40: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
1f50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f60: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 64 69           if (_di
1f70: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 29 0d 0a 20  sposeCommand).. 
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63 6f               _co
1f90: 6d 6d 61 6e 64 2e 44 69 73 70 6f 73 65 28 29 3b  mmand.Dispose();
1fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
1fb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fc0: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 6e      _command = n
1fd0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f 61  ull;..        _a
1fe0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d  ctiveStatement =
1ff0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2000: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
2010: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f  null;..        _
2020: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d  fieldTypeArray =
2030: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d   null;..      }.
2040: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
2050: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2060: 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
2070: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2080: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65  {..          _ke
2090: 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b  yInfo.Dispose();
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79  ..          _key
20b0: 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Info = null;..  
20c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
20d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
20e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20f0: 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20 65    /// Throw an e
2100: 72 72 6f 72 20 69 66 20 74 68 65 20 64 61 74 61  rror if the data
2110: 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
2120: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2130: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
2140: 65 20 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73  e void CheckClos
2150: 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
2160: 20 20 20 69 66 20 28 21 5f 74 68 72 6f 77 4f 6e     if (!_throwOn
2170: 44 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  Disposed)..     
2180: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
2190: 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64      if (_command
21a0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
21b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
21c0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
21d0: 65 70 74 69 6f 6e 28 22 44 61 74 61 52 65 61 64  eption("DataRead
21e0: 65 72 20 68 61 73 20 62 65 65 6e 20 63 6c 6f 73  er has been clos
21f0: 65 64 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ed");....      i
2200: 66 20 28 5f 76 65 72 73 69 6f 6e 20 3d 3d 20 30  f (_version == 0
2210: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
2220: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2230: 74 69 6f 6e 28 22 45 78 65 63 75 74 69 6f 6e 20  tion("Execution 
2240: 77 61 73 20 61 62 6f 72 74 65 64 20 62 79 20 74  was aborted by t
2250: 68 65 20 75 73 65 72 22 29 3b 0d 0a 0d 0a 20 20  he user");....  
2260: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2270: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
2280: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
2290: 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ction;....      
22a0: 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  if (connection._
22b0: 76 65 72 73 69 6f 6e 20 21 3d 20 5f 76 65 72 73  version != _vers
22c0: 69 6f 6e 20 7c 7c 20 63 6f 6e 6e 65 63 74 69 6f  ion || connectio
22d0: 6e 2e 53 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65  n.State != Conne
22e0: 63 74 69 6f 6e 53 74 61 74 65 2e 4f 70 65 6e 29  ctionState.Open)
22f0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
2300: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
2310: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 43  tionException("C
2320: 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 63 6c  onnection was cl
2330: 6f 73 65 64 2c 20 73 74 61 74 65 6d 65 6e 74 20  osed, statement 
2340: 77 61 73 20 74 65 72 6d 69 6e 61 74 65 64 22 29  was terminated")
2350: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
2360: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2370: 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20     /// Throw an 
2380: 65 72 72 6f 72 20 69 66 20 61 20 72 6f 77 20 69  error if a row i
2390: 73 20 6e 6f 74 20 6c 6f 61 64 65 64 0d 0a 20 20  s not loaded..  
23a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
23b0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
23c0: 69 64 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77  id CheckValidRow
23d0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
23e0: 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
23f0: 74 65 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  te != 0)..      
2400: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
2410: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
2420: 70 74 69 6f 6e 28 22 4e 6f 20 63 75 72 72 65 6e  ption("No curren
2430: 74 20 72 6f 77 22 29 3b 0d 0a 20 20 20 20 7d 0d  t row");..    }.
2440: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2450: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
2460: 75 6d 65 72 61 74 6f 72 20 73 75 70 70 6f 72 74  umerator support
2470: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2480: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
2490: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
24a0: 20 44 62 45 6e 75 6d 65 72 61 74 6f 72 20 6f 62   DbEnumerator ob
24b0: 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ject.</returns>.
24c0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
24d0: 72 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 73  ride Collections
24e0: 2e 49 45 6e 75 6d 65 72 61 74 6f 72 20 47 65 74  .IEnumerator Get
24f0: 45 6e 75 6d 65 72 61 74 6f 72 28 29 0d 0a 20 20  Enumerator()..  
2500: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
2510: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
2520: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 62     return new Db
2530: 45 6e 75 6d 65 72 61 74 6f 72 28 74 68 69 73 2c  Enumerator(this,
2540: 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
2550: 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
2560: 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65  avior.CloseConne
2570: 63 74 69 6f 6e 29 20 3d 3d 20 43 6f 6d 6d 61 6e  ction) == Comman
2580: 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43  dBehavior.CloseC
2590: 6f 6e 6e 65 63 74 69 6f 6e 29 29 3b 0d 0a 20 20  onnection));..  
25a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
25b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
25c0: 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65  / Not implemente
25d0: 64 2e 20 20 52 65 74 75 72 6e 73 20 30 0d 0a 20  d.  Returns 0.. 
25e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
25f0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
2600: 65 72 72 69 64 65 20 69 6e 74 20 44 65 70 74 68  erride int Depth
2610: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
2620: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
2630: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2640: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43  ed();..        C
2650: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
2660: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
2670: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2680: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2690: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
26a0: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
26b0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
26c0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75  the current resu
26d0: 6c 74 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ltset..    /// <
26e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
26f0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
2700: 6e 74 20 46 69 65 6c 64 43 6f 75 6e 74 0d 0a 20  nt FieldCount.. 
2710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
2720: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2730: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
2740: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2750: 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  kClosed();....  
2760: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
2770: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
2780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66         return _f
2790: 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  ieldCount;....  
27a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69        return _fi
27b0: 65 6c 64 43 6f 75 6e 74 20 2b 20 5f 6b 65 79 49  eldCount + _keyI
27c0: 6e 66 6f 2e 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  nfo.Count;..    
27d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
27e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
27f0: 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 63 65 73 20  .    /// Forces 
2800: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
2810: 6c 61 67 73 20 63 61 63 68 65 64 20 62 79 20 74  lags cached by t
2820: 68 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20  his data reader 
2830: 74 6f 20 62 65 20 72 65 66 72 65 73 68 65 64 0d  to be refreshed.
2840: 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68  .    /// from th
2850: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6e  e underlying con
2860: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
2870: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2880: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 52 65    public void Re
2890: 66 72 65 73 68 46 6c 61 67 73 28 29 0d 0a 20 20  freshFlags()..  
28a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
28b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
28c0: 0a 20 20 20 20 20 20 20 20 5f 66 6c 61 67 73 20  .        _flags 
28d0: 3d 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  = SQLiteCommand.
28e0: 47 65 74 46 6c 61 67 73 28 5f 63 6f 6d 6d 61 6e  GetFlags(_comman
28f0: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
2900: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2910: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
2920: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2930: 6f 77 73 20 73 65 65 6e 20 73 6f 20 66 61 72 20  ows seen so far 
2940: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  in the current r
2950: 65 73 75 6c 74 20 73 65 74 2e 0d 0a 20 20 20 20  esult set...    
2960: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2970: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 53      public int S
2980: 74 65 70 43 6f 75 6e 74 0d 0a 20 20 20 20 7b 0d  tepCount..    {.
2990: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
29a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29b0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
29c0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
29d0: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
29e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29f0: 20 72 65 74 75 72 6e 20 5f 73 74 65 70 43 6f 75   return _stepCou
2a00: 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  nt;..        }..
2a10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
2a20: 76 61 74 65 20 69 6e 74 20 50 72 69 76 61 74 65  vate int Private
2a30: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
2a40: 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
2a50: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
2a60: 66 69 65 6c 64 43 6f 75 6e 74 3b 20 7d 0d 0a 20  fieldCount; }.. 
2a70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
2a80: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
2a90: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
2aa0: 75 6d 62 65 72 20 6f 66 20 76 69 73 69 62 6c 65  umber of visible
2ab0: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
2ac0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
2ad0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2ae0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
2af0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 69   override int Vi
2b00: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 0d  sibleFieldCount.
2b10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2b20: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2b30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
2b40: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68  d();..        Ch
2b50: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20  eckClosed();..  
2b60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 72 69        return Pri
2b70: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
2b80: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 7d 0d  Count;..      }.
2b90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2ba0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2bb0: 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
2bc0: 20 69 73 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   is used to make
2bd0: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
2be0: 20 73 65 74 20 69 73 20 6f 70 65 6e 20 61 6e 64   set is open and
2bf0: 20 61 20 72 6f 77 20 69 73 20 63 75 72 72 65 6e   a row is curren
2c00: 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a  tly available...
2c10: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2c20: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
2c30: 76 6f 69 64 20 56 65 72 69 66 79 46 6f 72 47 65  void VerifyForGe
2c40: 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t()..    {..    
2c50: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
2c60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2c70: 6b 56 61 6c 69 64 52 6f 77 28 29 3b 0d 0a 20 20  kValidRow();..  
2c80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2c90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2ca0: 2f 20 53 51 4c 69 74 65 20 69 73 20 69 6e 68 65  / SQLite is inhe
2cb0: 72 65 6e 74 6c 79 20 75 6e 2d 74 79 70 65 64 2e  rently un-typed.
2cc0: 20 20 41 6c 6c 20 64 61 74 61 74 79 70 65 73 20    All datatypes 
2cd0: 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20 6e 61  in SQLite are na
2ce0: 74 69 76 65 6c 79 20 73 74 72 69 6e 67 73 2e 20  tively strings. 
2cf0: 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   The definition 
2d00: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  of the columns o
2d10: 66 20 61 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  f a table..    /
2d20: 2f 2f 20 61 6e 64 20 74 68 65 20 61 66 66 69 6e  // and the affin
2d30: 69 74 79 20 6f 66 20 72 65 74 75 72 6e 65 64 20  ity of returned 
2d40: 74 79 70 65 73 20 61 72 65 20 61 6c 6c 20 77 65  types are all we
2d50: 20 68 61 76 65 20 74 6f 20 67 6f 20 6f 6e 20 74   have to go on t
2d60: 6f 20 74 79 70 65 2d 72 65 73 74 72 69 63 74 20  o type-restrict 
2d70: 64 61 74 61 20 69 6e 20 74 68 65 20 72 65 61 64  data in the read
2d80: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 0d 0a 20 20  er...    ///..  
2d90: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
2da0: 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ion attempts to 
2db0: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
2dc0: 74 79 70 65 20 6f 66 20 64 61 74 61 20 62 65 69  type of data bei
2dd0: 6e 67 20 72 65 71 75 65 73 74 65 64 20 6f 66 20  ng requested of 
2de0: 61 20 63 6f 6c 75 6d 6e 20 6d 61 74 63 68 65 73  a column matches
2df0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
2e00: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 6e   the column.  In
2e10: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63 61  ..    /// the ca
2e20: 73 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  se of columns th
2e30: 61 74 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  at are not backe
2e40: 64 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 64  d into a table d
2e50: 65 66 69 6e 69 74 69 6f 6e 2c 20 77 65 20 61 74  efinition, we at
2e60: 74 65 6d 70 74 20 74 6f 20 6d 61 74 63 68 20 75  tempt to match u
2e70: 70 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  p the affinity o
2e80: 66 20 61 20 63 6f 6c 75 6d 6e 20 28 69 6e 74 2c  f a column (int,
2e90: 20 64 6f 75 62 6c 65 2c 20 73 74 72 69 6e 67 20   double, string 
2ea0: 6f 72 20 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f  or blob)..    //
2eb0: 2f 20 74 6f 20 61 20 73 65 74 20 6f 66 20 6b 6e  / to a set of kn
2ec0: 6f 77 6e 20 74 79 70 65 73 20 74 68 61 74 20 63  own types that c
2ed0: 6c 6f 73 65 6c 79 20 6d 61 74 63 68 20 74 68 61  losely match tha
2ee0: 74 20 61 66 66 69 6e 69 74 79 2e 20 20 49 74 27  t affinity.  It'
2ef0: 73 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 73  s not an exact s
2f00: 63 69 65 6e 63 65 2c 20 62 75 74 20 69 74 73 20  cience, but its 
2f10: 74 68 65 20 62 65 73 74 20 77 65 20 63 61 6e 20  the best we can 
2f20: 64 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  do...    /// </s
2f30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2f40: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2f50: 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f  /// This functio
2f60: 6e 20 74 68 72 6f 77 73 20 61 6e 20 49 6e 76 61  n throws an Inva
2f70: 6c 69 64 54 79 70 65 43 61 73 74 28 29 20 65 78  lidTypeCast() ex
2f80: 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 72  ception if the r
2f90: 65 71 75 65 73 74 65 64 20 74 79 70 65 20 64 6f  equested type do
2fa0: 65 73 6e 27 74 20 6d 61 74 63 68 20 74 68 65 20  esn't match the 
2fb0: 63 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e 69 74  column's definit
2fc0: 69 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74 79 2e  ion or affinity.
2fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
2fe0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  rns>..    /// <p
2ff0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
3000: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
3010: 6f 6c 75 6d 6e 20 74 6f 20 74 79 70 65 2d 63 68  olumn to type-ch
3020: 65 63 6b 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eck</param>..   
3030: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3040: 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
3050: 77 65 20 77 61 6e 74 20 74 6f 20 67 65 74 20 6f  we want to get o
3060: 75 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ut of the column
3070: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 72  </param>..    pr
3080: 69 76 61 74 65 20 54 79 70 65 41 66 66 69 6e 69  ivate TypeAffini
3090: 74 79 20 56 65 72 69 66 79 54 79 70 65 28 69 6e  ty VerifyType(in
30a0: 74 20 69 2c 20 44 62 54 79 70 65 20 74 79 70 29  t i, DbType typ)
30b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
30c0: 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f   if (HelperMetho
30d0: 64 73 2e 48 61 73 46 6c 61 67 73 28 5f 66 6c 61  ds.HasFlags(_fla
30e0: 67 73 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  gs, SQLiteConnec
30f0: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69  tionFlags.NoVeri
3100: 66 79 54 79 70 65 41 66 66 69 6e 69 74 79 29 29  fyTypeAffinity))
3110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
3120: 74 75 72 6e 20 54 79 70 65 41 66 66 69 6e 69 74  turn TypeAffinit
3130: 79 2e 4e 6f 6e 65 3b 0d 0a 0d 0a 20 20 20 20 20  y.None;....     
3140: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20     TypeAffinity 
3150: 61 66 66 69 6e 69 74 79 20 3d 20 47 65 74 53 51  affinity = GetSQ
3160: 4c 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73 2c  LiteType(_flags,
3170: 20 69 29 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 0d   i).Affinity;...
3180: 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
3190: 28 61 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20  (affinity)..    
31a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31b0: 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
31c0: 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20  nity.Int64:..   
31d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
31e0: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49  (typ == DbType.I
31f0: 6e 74 36 34 29 20 72 65 74 75 72 6e 20 61 66 66  nt64) return aff
3200: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3210: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3220: 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29  == DbType.Int32)
3230: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
3240: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3250: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
3260: 54 79 70 65 2e 49 6e 74 31 36 29 20 72 65 74 75  Type.Int16) retu
3270: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20  rn affinity;..  
3280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
3290: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
32a0: 42 79 74 65 29 20 72 65 74 75 72 6e 20 61 66 66  Byte) return aff
32b0: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
32c0: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
32d0: 3d 3d 20 44 62 54 79 70 65 2e 53 42 79 74 65 29  == DbType.SByte)
32e0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
32f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3300: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
3310: 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 20 72 65  Type.Boolean) re
3320: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a  turn affinity;..
3330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3340: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3350: 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74 75  e.DateTime) retu
3360: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20  rn affinity;..  
3370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
3380: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
3390: 44 6f 75 62 6c 65 29 20 72 65 74 75 72 6e 20 61  Double) return a
33a0: 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20  ffinity;..      
33b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
33c0: 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 69 6e 67  p == DbType.Sing
33d0: 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  le) return affin
33e0: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
33f0: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
3400: 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29   DbType.Decimal)
3410: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
3420: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3430: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
3440: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
3450: 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a  Affinity.Double:
3460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3470: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
3480: 79 70 65 2e 44 6f 75 62 6c 65 29 20 72 65 74 75  ype.Double) retu
3490: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20  rn affinity;..  
34a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
34b0: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
34c0: 53 69 6e 67 6c 65 29 20 72 65 74 75 72 6e 20 61  Single) return a
34d0: 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20  ffinity;..      
34e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
34f0: 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 65 63 69  p == DbType.Deci
3500: 6d 61 6c 29 20 72 65 74 75 72 6e 20 61 66 66 69  mal) return affi
3510: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
3520: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
3530: 3d 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d  = DbType.DateTim
3540: 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  e) return affini
3550: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
3560: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
3570: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79           case Ty
3580: 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3a  peAffinity.Text:
3590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35a0: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
35b0: 79 70 65 2e 53 74 72 69 6e 67 29 20 72 65 74 75  ype.String) retu
35c0: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20  rn affinity;..  
35d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
35e0: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
35f0: 47 75 69 64 29 20 72 65 74 75 72 6e 20 61 66 66  Guid) return aff
3600: 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  inity;..        
3610: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3620: 3d 3d 20 44 62 54 79 70 65 2e 44 61 74 65 54 69  == DbType.DateTi
3630: 6d 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  me) return affin
3640: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3650: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
3660: 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29   DbType.Decimal)
3670: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
3680: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3690: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
36a0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
36b0: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a  Affinity.Blob:..
36c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d0: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
36e0: 65 2e 47 75 69 64 29 20 72 65 74 75 72 6e 20 61  e.Guid) return a
36f0: 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20  ffinity;..      
3700: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
3710: 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 69 6e 61  p == DbType.Bina
3720: 72 79 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  ry) return affin
3730: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
3740: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
3750: 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 20   DbType.String) 
3760: 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b  return affinity;
3770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3780: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
3790: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74    }....        t
37a0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
37b0: 43 61 73 74 45 78 63 65 70 74 69 6f 6e 28 29 3b  CastException();
37c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
37d0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
37e0: 20 20 2f 2f 2f 20 49 6e 76 6f 6b 65 73 20 74 68    /// Invokes th
37f0: 65 20 64 61 74 61 20 72 65 61 64 65 72 20 76 61  e data reader va
3800: 6c 75 65 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e  lue callback con
3810: 66 69 67 75 72 65 64 20 66 6f 72 20 74 68 65 20  figured for the 
3820: 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f  database..    //
3830: 2f 20 74 79 70 65 20 6e 61 6d 65 20 61 73 73 6f  / type name asso
3840: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
3850: 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e  specified column
3860: 2e 20 20 49 66 20 6e 6f 20 64 61 74 61 20 72 65  .  If no data re
3870: 61 64 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 76 61  ader..    /// va
3880: 6c 75 65 20 63 61 6c 6c 62 61 63 6b 20 69 73 20  lue callback is 
3890: 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
38a0: 65 20 64 61 74 61 62 61 73 65 20 74 79 70 65 20  e database type 
38b0: 6e 61 6d 65 2c 20 64 6f 20 6e 6f 74 68 69 6e 67  name, do nothing
38c0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
38d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
38e0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65  param name="inde
38f0: 78 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  x">..    /// The
3900: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
3910: 6c 75 6d 6e 20 62 65 69 6e 67 20 72 65 61 64 2e  lumn being read.
3920: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
3930: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
3940: 61 6d 20 6e 61 6d 65 3d 22 65 76 65 6e 74 41 72  am name="eventAr
3950: 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  gs">..    /// Th
3960: 65 20 65 78 74 72 61 20 65 76 65 6e 74 20 64 61  e extra event da
3970: 74 61 20 74 6f 20 70 61 73 73 20 69 6e 74 6f 20  ta to pass into 
3980: 74 68 65 20 63 61 6c 6c 62 61 63 6b 2e 0d 0a 20  the callback... 
3990: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
39a0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
39b0: 6e 61 6d 65 3d 22 63 6f 6d 70 6c 65 74 65 22 3e  name="complete">
39c0: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
39d0: 72 6f 20 69 66 20 74 68 65 20 64 65 66 61 75 6c  ro if the defaul
39e0: 74 20 68 61 6e 64 6c 69 6e 67 20 66 6f 72 20 74  t handling for t
39f0: 68 65 20 64 61 74 61 20 72 65 61 64 65 72 20 63  he data reader c
3a00: 61 6c 6c 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20  all should be.. 
3a10: 20 20 20 2f 2f 2f 20 73 6b 69 70 70 65 64 2e 20     /// skipped. 
3a20: 20 49 66 20 74 68 69 73 20 69 73 20 73 65 74 20   If this is set 
3a30: 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20  to non-zero and 
3a40: 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 72 65  the necessary re
3a50: 74 75 72 6e 20 76 61 6c 75 65 0d 0a 20 20 20 20  turn value..    
3a60: 2f 2f 2f 20 69 73 20 75 6e 61 76 61 69 6c 61 62  /// is unavailab
3a70: 6c 65 20 6f 72 20 75 6e 73 75 69 74 61 62 6c 65  le or unsuitable
3a80: 2c 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 77  , an exception w
3a90: 69 6c 6c 20 62 65 20 74 68 72 6f 77 6e 2e 0d 0a  ill be thrown...
3aa0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
3ab0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
3ac0: 69 64 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c  id InvokeReadVal
3ad0: 75 65 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20  ueCallback(..   
3ae0: 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 2c 0d       int index,.
3af0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 52  .        SQLiteR
3b00: 65 61 64 45 76 65 6e 74 41 72 67 73 20 65 76 65  eadEventArgs eve
3b10: 6e 74 41 72 67 73 2c 0d 0a 20 20 20 20 20 20 20  ntArgs,..       
3b20: 20 6f 75 74 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65   out bool comple
3b30: 74 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  te..        ).. 
3b40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f     {..        co
3b50: 6d 70 6c 65 74 65 20 3d 20 66 61 6c 73 65 3b 0d  mplete = false;.
3b60: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
3b70: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 6f  onnectionFlags o
3b80: 6c 64 46 6c 61 67 73 20 3d 20 5f 66 6c 61 67 73  ldFlags = _flags
3b90: 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 6c 61 67  ;..        _flag
3ba0: 73 20 26 3d 20 7e 53 51 4c 69 74 65 43 6f 6e 6e  s &= ~SQLiteConn
3bb0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
3bc0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
3bd0: 75 65 43 61 6c 6c 62 61 63 6b 73 3b 0d 0a 0d 0a  ueCallbacks;....
3be0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
3bf0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3c00: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
3c10: 61 6d 65 20 3d 20 47 65 74 44 61 74 61 54 79 70  ame = GetDataTyp
3c20: 65 4e 61 6d 65 28 69 6e 64 65 78 29 3b 0d 0a 0d  eName(index);...
3c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
3c40: 28 74 79 70 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c  (typeName == nul
3c50: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
3c60: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
3c70: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
3c80: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
3c90: 65 63 74 69 6f 6e 20 3d 20 47 65 74 43 6f 6e 6e  ection = GetConn
3ca0: 65 63 74 69 6f 6e 28 74 68 69 73 29 3b 0d 0a 0d  ection(this);...
3cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
3cc0: 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 3d 20 6e  (connection == n
3cd0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3ce0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
3cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
3d00: 69 74 65 54 79 70 65 43 61 6c 6c 62 61 63 6b 73  iteTypeCallbacks
3d10: 20 63 61 6c 6c 62 61 63 6b 73 3b 0d 0a 0d 0a 20   callbacks;.... 
3d20: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
3d30: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 54 72 79 47 65  connection.TryGe
3d40: 74 54 79 70 65 43 61 6c 6c 62 61 63 6b 73 28 74  tTypeCallbacks(t
3d50: 79 70 65 4e 61 6d 65 2c 20 6f 75 74 20 63 61 6c  ypeName, out cal
3d60: 6c 62 61 63 6b 73 29 20 7c 7c 0d 0a 20 20 20 20  lbacks) ||..    
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61 6c              (cal
3d80: 6c 62 61 63 6b 73 20 3d 3d 20 6e 75 6c 6c 29 29  lbacks == null))
3d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
3da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3db0: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20   return;..      
3dc0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3dd0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 52 65 61         SQLiteRea
3de0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 20 63  dValueCallback c
3df0: 61 6c 6c 62 61 63 6b 20 3d 20 63 61 6c 6c 62 61  allback = callba
3e00: 63 6b 73 2e 52 65 61 64 56 61 6c 75 65 43 61 6c  cks.ReadValueCal
3e10: 6c 62 61 63 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20  lback;....      
3e20: 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
3e30: 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck == null)..   
3e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
3e50: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
3e60: 20 20 20 20 6f 62 6a 65 63 74 20 75 73 65 72 44      object userD
3e70: 61 74 61 20 3d 20 63 61 6c 6c 62 61 63 6b 73 2e  ata = callbacks.
3e80: 52 65 61 64 56 61 6c 75 65 55 73 65 72 44 61 74  ReadValueUserDat
3e90: 61 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  a;....          
3ea0: 20 20 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20    callback(..   
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 61 63               _ac
3ec0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
3ed0: 71 6c 2c 20 74 68 69 73 2c 20 6f 6c 64 46 6c 61  ql, this, oldFla
3ee0: 67 73 2c 20 65 76 65 6e 74 41 72 67 73 2c 20 74  gs, eventArgs, t
3ef0: 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
3f00: 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2c            index,
3f10: 20 75 73 65 72 44 61 74 61 2c 20 6f 75 74 20 63   userData, out c
3f20: 6f 6d 70 6c 65 74 65 29 3b 20 2f 2a 20 74 68 72  omplete); /* thr
3f30: 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d  ow */..        }
3f40: 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
3f50: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
3f60: 20 20 20 20 20 20 20 20 20 20 5f 66 6c 61 67 73            _flags
3f70: 20 7c 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   |= SQLiteConnec
3f80: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
3f90: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
3fa0: 43 61 6c 6c 62 61 63 6b 73 3b 0d 0a 20 20 20 20  Callbacks;..    
3fb0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
3fc0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
3fd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d  >..    /// Attem
3fe0: 70 74 73 20 74 6f 20 71 75 65 72 79 20 74 68 65  pts to query the
3ff0: 20 69 6e 74 65 67 65 72 20 69 64 65 6e 74 69 66   integer identif
4000: 69 65 72 20 66 6f 72 20 74 68 65 20 63 75 72 72  ier for the curr
4010: 65 6e 74 20 72 6f 77 2e 20 20 54 68 69 73 0d 0a  ent row.  This..
4020: 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 6e 6f 74      /// will not
4030: 20 77 6f 72 6b 20 66 6f 72 20 74 61 62 6c 65 73   work for tables
4040: 20 74 68 61 74 20 77 65 72 65 20 63 72 65 61 74   that were creat
4050: 65 64 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  ed WITHOUT ROWID
4060: 20 2d 4f 52 2d 20 69 66 20 74 68 65 0d 0a 20 20   -OR- if the..  
4070: 20 20 2f 2f 2f 20 71 75 65 72 79 20 64 6f 65 73    /// query does
4080: 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 74 68 65   not include the
4090: 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20   "rowid" column 
40a0: 6f 72 20 6f 6e 65 20 6f 66 20 69 74 73 20 61 6c  or one of its al
40b0: 69 61 73 65 73 20 2d 4f 52 2d 0d 0a 20 20 20 20  iases -OR-..    
40c0: 2f 2f 2f 20 69 66 20 74 68 65 20 3c 73 65 65 20  /// if the <see 
40d0: 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61  cref="SQLiteData
40e0: 52 65 61 64 65 72 22 20 2f 3e 20 77 61 73 20 6e  Reader" /> was n
40f0: 6f 74 20 63 72 65 61 74 65 64 20 77 69 74 68 20  ot created with 
4100: 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65  the..    /// <se
4110: 65 20 63 72 65 66 3d 22 43 6f 6d 6d 61 6e 64 42  e cref="CommandB
4120: 65 68 61 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 22  ehavior.KeyInfo"
4130: 2f 3e 20 66 6c 61 67 2e 0d 0a 20 20 20 20 2f 2f  /> flag...    //
4140: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
4150: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4160: 65 3d 22 69 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  e="i">..    /// 
4170: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
4180: 20 42 4c 4f 42 20 63 6f 6c 75 6d 6e 2e 0d 0a 20   BLOB column... 
4190: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
41a0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
41b0: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  s>..    /// The 
41c0: 69 6e 74 65 67 65 72 20 69 64 65 6e 74 69 66 69  integer identifi
41d0: 65 72 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  er for the curre
41e0: 6e 74 20 72 6f 77 20 2d 4f 52 2d 20 6e 75 6c 6c  nt row -OR- null
41f0: 20 69 66 20 69 74 20 63 6f 75 6c 64 20 6e 6f 74   if it could not
4200: 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 64 65 74  ..    /// be det
4210: 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f  ermined...    //
4220: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
4230: 20 20 69 6e 74 65 72 6e 61 6c 20 6c 6f 6e 67 3f    internal long?
4240: 20 47 65 74 52 6f 77 49 64 28 0d 0a 20 20 20 20   GetRowId(..    
4250: 20 20 20 20 69 6e 74 20 69 0d 0a 20 20 20 20 20      int i..     
4260: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
4270: 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
4280: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
4290: 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
42a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
42b0: 28 5f 6b 65 79 49 6e 66 6f 20 3d 3d 20 6e 75 6c  (_keyInfo == nul
42c0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
42d0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
42e0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
42f0: 61 74 61 62 61 73 65 4e 61 6d 65 20 3d 20 47 65  atabaseName = Ge
4300: 74 44 61 74 61 62 61 73 65 4e 61 6d 65 28 69 29  tDatabaseName(i)
4310: 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ;..        strin
4320: 67 20 74 61 62 6c 65 4e 61 6d 65 20 3d 20 47 65  g tableName = Ge
4330: 74 54 61 62 6c 65 4e 61 6d 65 28 69 29 3b 0d 0a  tTableName(i);..
4340: 20 20 20 20 20 20 20 20 69 6e 74 20 69 52 6f 77          int iRow
4350: 49 64 20 3d 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  Id = _keyInfo.Ge
4360: 74 52 6f 77 49 64 49 6e 64 65 78 28 64 61 74 61  tRowIdIndex(data
4370: 62 61 73 65 4e 61 6d 65 2c 20 74 61 62 6c 65 4e  baseName, tableN
4380: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
4390: 20 69 66 20 28 69 52 6f 77 49 64 20 21 3d 20 2d   if (iRowId != -
43a0: 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
43b0: 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28  return GetInt64(
43c0: 69 52 6f 77 49 64 29 3b 0d 0a 0d 0a 20 20 20 20  iRowId);....    
43d0: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
43e0: 6e 66 6f 2e 47 65 74 52 6f 77 49 64 28 64 61 74  nfo.GetRowId(dat
43f0: 61 62 61 73 65 4e 61 6d 65 2c 20 74 61 62 6c 65  abaseName, table
4400: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Name);..    }...
4410: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
4420: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  y>..    /// Retr
4430: 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  ieves the column
4440: 20 61 73 20 61 20 3c 73 65 65 20 63 72 65 66 3d   as a <see cref=
4450: 22 53 51 4c 69 74 65 42 6c 6f 62 22 20 2f 3e 20  "SQLiteBlob" /> 
4460: 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
4470: 20 54 68 69 73 20 77 69 6c 6c 20 6e 6f 74 20 77   This will not w
4480: 6f 72 6b 20 66 6f 72 20 74 61 62 6c 65 73 20 74  ork for tables t
4490: 68 61 74 20 77 65 72 65 20 63 72 65 61 74 65 64  hat were created
44a0: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0d 0a   WITHOUT ROWID..
44b0: 20 20 20 20 2f 2f 2f 20 2d 4f 52 2d 20 69 66 20      /// -OR- if 
44c0: 74 68 65 20 71 75 65 72 79 20 64 6f 65 73 20 6e  the query does n
44d0: 6f 74 20 69 6e 63 6c 75 64 65 20 74 68 65 20 22  ot include the "
44e0: 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 6f 72  rowid" column or
44f0: 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66   one..    /// of
4500: 20 69 74 73 20 61 6c 69 61 73 65 73 20 2d 4f 52   its aliases -OR
4510: 2d 20 69 66 20 74 68 65 20 3c 73 65 65 20 63 72  - if the <see cr
4520: 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65  ef="SQLiteDataRe
4530: 61 64 65 72 22 20 2f 3e 20 77 61 73 0d 0a 20 20  ader" /> was..  
4540: 20 20 2f 2f 2f 20 6e 6f 74 20 63 72 65 61 74 65    /// not create
4550: 64 20 77 69 74 68 20 74 68 65 20 3c 73 65 65 20  d with the <see 
4560: 63 72 65 66 3d 22 43 6f 6d 6d 61 6e 64 42 65 68  cref="CommandBeh
4570: 61 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 22 20 2f  avior.KeyInfo" /
4580: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 66 6c 61 67 2e  >..    /// flag.
4590: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
45a0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
45b0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
45c0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
45d0: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
45e0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
45f0: 61 6d 65 3d 22 72 65 61 64 4f 6e 6c 79 22 3e 0d  ame="readOnly">.
4600: 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
4610: 6f 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 62 6c  o to open the bl
4620: 6f 62 20 6f 62 6a 65 63 74 20 66 6f 72 20 72 65  ob object for re
4630: 61 64 2d 6f 6e 6c 79 20 61 63 63 65 73 73 2e 0d  ad-only access..
4640: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
4650: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
4660: 72 6e 73 3e 41 20 6e 65 77 20 3c 73 65 65 20 63  rns>A new <see c
4670: 72 65 66 3d 22 53 51 4c 69 74 65 42 6c 6f 62 22  ref="SQLiteBlob"
4680: 20 2f 3e 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74   /> object.</ret
4690: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
46a0: 63 20 53 51 4c 69 74 65 42 6c 6f 62 20 47 65 74  c SQLiteBlob Get
46b0: 42 6c 6f 62 28 69 6e 74 20 69 2c 20 62 6f 6f 6c  Blob(int i, bool
46c0: 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20   readOnly)..    
46d0: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
46e0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
46f0: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
4700: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
4710: 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  if (HelperMethod
4720: 73 2e 48 61 73 46 6c 61 67 73 28 5f 66 6c 61 67  s.HasFlags(_flag
4730: 73 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  s, SQLiteConnect
4740: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
4750: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
4760: 61 6c 6c 62 61 63 6b 73 29 29 0d 0a 20 20 20 20  allbacks))..    
4770: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4780: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
4790: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
47a0: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
47b0: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
47c0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
47d0: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
47e0: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
47f0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
4800: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
4810: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
4820: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4830: 20 20 20 22 47 65 74 42 6c 6f 62 22 2c 20 6e 65     "GetBlob", ne
4840: 77 20 53 51 4c 69 74 65 52 65 61 64 42 6c 6f 62  w SQLiteReadBlob
4850: 45 76 65 6e 74 41 72 67 73 28 72 65 61 64 4f 6e  EventArgs(readOn
4860: 6c 79 29 2c 20 76 61 6c 75 65 29 2c 0d 0a 20 20  ly), value),..  
4870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 75                ou
4880: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a  t complete);....
4890: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
48a0: 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20  complete)..     
48b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
48c0: 6e 20 28 53 51 4c 69 74 65 42 6c 6f 62 29 76 61  n (SQLiteBlob)va
48d0: 6c 75 65 2e 42 6c 6f 62 56 61 6c 75 65 3b 0d 0a  lue.BlobValue;..
48e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
48f0: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
4900: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
4910: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
4920: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
4930: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4940: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 42 6c 6f 62  _keyInfo.GetBlob
4950: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
4960: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20 72  bleFieldCount, r
4970: 65 61 64 4f 6e 6c 79 29 3b 0d 0a 0d 0a 20 20 20  eadOnly);....   
4980: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
4990: 74 65 42 6c 6f 62 2e 43 72 65 61 74 65 28 74 68  teBlob.Create(th
49a0: 69 73 2c 20 69 2c 20 72 65 61 64 4f 6e 6c 79 29  is, i, readOnly)
49b0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
49c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
49d0: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
49e0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61   the column as a
49f0: 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0d 0a   boolean value..
4a00: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4a10: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
4a20: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
4a30: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
4a40: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
4a50: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62    /// <returns>b
4a60: 6f 6f 6c 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ool</returns>.. 
4a70: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
4a80: 64 65 20 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65  de bool GetBoole
4a90: 61 6e 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  an(int i)..    {
4aa0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
4ab0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
4ac0: 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74      VerifyForGet
4ad0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
4ae0: 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  f (HelperMethods
4af0: 2e 48 61 73 46 6c 61 67 73 28 5f 66 6c 61 67 73  .HasFlags(_flags
4b00: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
4b10: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
4b20: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
4b30: 6c 6c 62 61 63 6b 73 29 29 0d 0a 20 20 20 20 20  llbacks))..     
4b40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4b50: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
4b60: 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20  erValue value = 
4b70: 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65  new SQLiteDataRe
4b80: 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20  aderValue();..  
4b90: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
4ba0: 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20  omplete;....    
4bb0: 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65          InvokeRe
4bc0: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28  adValueCallback(
4bd0: 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61  i, new SQLiteRea
4be0: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28  dValueEventArgs(
4bf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c00: 20 20 22 47 65 74 42 6f 6f 6c 65 61 6e 22 2c 20    "GetBoolean", 
4c10: 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75  null, value), ou
4c20: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a  t complete);....
4c30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4c40: 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20  complete)..     
4c50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4c60: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
4c70: 6c 75 65 2e 42 6f 6f 6c 65 61 6e 56 61 6c 75 65  lue.BooleanValue
4c80: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
4ca0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
4cb0: 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e  xception("missin
4cc0: 67 20 62 6f 6f 6c 65 61 6e 20 72 65 74 75 72 6e  g boolean return
4cd0: 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20   value");....   
4ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
4cf0: 75 72 6e 20 28 62 6f 6f 6c 29 76 61 6c 75 65 2e  urn (bool)value.
4d00: 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 3b 0d 0a 20  BooleanValue;.. 
4d10: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
4d20: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4d30: 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76     if (i >= Priv
4d40: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
4d50: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
4d60: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
4d70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
4d80: 65 79 49 6e 66 6f 2e 47 65 74 42 6f 6f 6c 65 61  eyInfo.GetBoolea
4d90: 6e 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  n(i - PrivateVis
4da0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b  ibleFieldCount);
4db0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  ....        Veri
4dc0: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
4dd0: 2e 42 6f 6f 6c 65 61 6e 29 3b 0d 0a 20 20 20 20  .Boolean);..    
4de0: 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65      return Conve
4df0: 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28 47 65 74  rt.ToBoolean(Get
4e00: 56 61 6c 75 65 28 69 29 2c 20 43 75 6c 74 75 72  Value(i), Cultur
4e10: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
4e20: 74 75 72 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ture);..    }...
4e30: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
4e40: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  y>..    /// Retr
4e50: 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  ieves the column
4e60: 20 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74   as a single byt
4e70: 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f  e value..    ///
4e80: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
4e90: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4ea0: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
4eb0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
4ec0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
4ed0: 72 65 74 75 72 6e 73 3e 62 79 74 65 3c 2f 72 65  returns>byte</re
4ee0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
4ef0: 69 63 20 6f 76 65 72 72 69 64 65 20 62 79 74 65  ic override byte
4f00: 20 47 65 74 42 79 74 65 28 69 6e 74 20 69 29 0d   GetByte(int i).
4f10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4f20: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
4f30: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
4f40: 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  ForGet();....   
4f50: 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d       if (HelperM
4f60: 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67 73 28  ethods.HasFlags(
4f70: 5f 66 6c 61 67 73 2c 20 53 51 4c 69 74 65 43 6f  _flags, SQLiteCo
4f80: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
4f90: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
4fa0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 29 0d  alueCallbacks)).
4fb0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4fc0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
4fd0: 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61  taReaderValue va
4fe0: 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  lue = new SQLite
4ff0: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28  DataReaderValue(
5000: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5010: 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a  bool complete;..
5020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
5030: 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c  vokeReadValueCal
5040: 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c  lback(i, new SQL
5050: 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e  iteReadValueEven
5060: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
5070: 20 20 20 20 20 20 20 20 22 47 65 74 42 79 74 65          "GetByte
5080: 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c  ", null, value),
5090: 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d   out complete);.
50a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
50b0: 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20  f (complete)..  
50c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
50d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
50e0: 28 76 61 6c 75 65 2e 42 79 74 65 56 61 6c 75 65  (value.ByteValue
50f0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
5100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
5110: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
5120: 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e  xception("missin
5130: 67 20 62 79 74 65 20 72 65 74 75 72 6e 20 76 61  g byte return va
5140: 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lue");....      
5150: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5160: 20 28 62 79 74 65 29 76 61 6c 75 65 2e 42 79 74   (byte)value.Byt
5170: 65 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  eValue;..       
5180: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5190: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
51a0: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
51b0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
51c0: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
51d0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
51e0: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
51f0: 2e 47 65 74 42 79 74 65 28 69 20 2d 20 50 72 69  .GetByte(i - Pri
5200: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
5210: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
5220: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
5230: 20 44 62 54 79 70 65 2e 42 79 74 65 29 3b 0d 0a   DbType.Byte);..
5240: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
5250: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
5260: 5f 73 71 6c 2e 47 65 74 42 79 74 65 28 5f 61 63  _sql.GetByte(_ac
5270: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
5280: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
5290: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
52a0: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
52b0: 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e  s a column as an
52c0: 20 61 72 72 61 79 20 6f 66 20 62 79 74 65 73 20   array of bytes 
52d0: 28 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f 2f 20  (blob)..    /// 
52e0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
52f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5300: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
5310: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
5320: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
5330: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 65 6c 64  aram name="field
5340: 4f 66 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f  Offset">The zero
5350: 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20  -based index of 
5360: 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e 20 72  where to begin r
5370: 65 61 64 69 6e 67 20 74 68 65 20 64 61 74 61 3c  eading the data<
5380: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
5390: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75   <param name="bu
53a0: 66 66 65 72 22 3e 54 68 65 20 62 75 66 66 65 72  ffer">The buffer
53b0: 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 62 79   to write the by
53c0: 74 65 73 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e  tes into</param>
53d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
53e0: 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 6f 66 66   name="bufferoff
53f0: 73 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61  set">The zero-ba
5400: 73 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68 65  sed index of whe
5410: 72 65 20 74 6f 20 62 65 67 69 6e 20 77 72 69 74  re to begin writ
5420: 69 6e 67 20 69 6e 74 6f 20 74 68 65 20 61 72 72  ing into the arr
5430: 61 79 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  ay</param>..    
5440: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5450: 22 6c 65 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d  "length">The num
5460: 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20  ber of bytes to 
5470: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
5480: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
5490: 6e 73 3e 54 68 65 20 61 63 74 75 61 6c 20 6e 75  ns>The actual nu
54a0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 77 72  mber of bytes wr
54b0: 69 74 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 61  itten into the a
54c0: 72 72 61 79 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  rray</returns>..
54d0: 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73      /// <remarks
54e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 6f 20 64 65  >..    /// To de
54f0: 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62  termine the numb
5500: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
5510: 68 65 20 63 6f 6c 75 6d 6e 2c 20 70 61 73 73 20  he column, pass 
5520: 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20 66 6f 72  a null value for
5530: 20 74 68 65 20 62 75 66 66 65 72 2e 20 20 54 68   the buffer.  Th
5540: 65 20 74 6f 74 61 6c 20 6c 65 6e 67 74 68 20 77  e total length w
5550: 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e  ill be returned.
5560: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61  ..    /// </rema
5570: 72 6b 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rks>..    public
5580: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
5590: 65 74 42 79 74 65 73 28 69 6e 74 20 69 2c 20 6c  etBytes(int i, l
55a0: 6f 6e 67 20 66 69 65 6c 64 4f 66 66 73 65 74 2c  ong fieldOffset,
55b0: 20 62 79 74 65 5b 5d 20 62 75 66 66 65 72 2c 20   byte[] buffer, 
55c0: 69 6e 74 20 62 75 66 66 65 72 6f 66 66 73 65 74  int bufferoffset
55d0: 2c 20 69 6e 74 20 6c 65 6e 67 74 68 29 0d 0a 20  , int length).. 
55e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
55f0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
5600: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
5610: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
5620: 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74     if (HelperMet
5630: 68 6f 64 73 2e 48 61 73 46 6c 61 67 73 28 5f 66  hods.HasFlags(_f
5640: 6c 61 67 73 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  lags, SQLiteConn
5650: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
5660: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
5670: 75 65 43 61 6c 6c 62 61 63 6b 73 29 29 0d 0a 20  ueCallbacks)).. 
5680: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5690: 20 20 20 20 20 20 53 51 4c 69 74 65 52 65 61 64        SQLiteRead
56a0: 41 72 72 61 79 45 76 65 6e 74 41 72 67 73 20 65  ArrayEventArgs e
56b0: 76 65 6e 74 41 72 67 73 20 3d 20 6e 65 77 20 53  ventArgs = new S
56c0: 51 4c 69 74 65 52 65 61 64 41 72 72 61 79 45 76  QLiteReadArrayEv
56d0: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
56e0: 20 20 20 20 20 20 20 20 20 20 66 69 65 6c 64 4f            fieldO
56f0: 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c 20 62  ffset, buffer, b
5700: 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e  ufferoffset, len
5710: 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gth);....       
5720: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
5730: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
5740: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
5750: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
5760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
5770: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
5780: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
5790: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
57a0: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
57b0: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
57c0: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
57d0: 20 20 20 20 20 22 47 65 74 42 79 74 65 73 22 2c       "GetBytes",
57e0: 20 65 76 65 6e 74 41 72 67 73 2c 20 76 61 6c 75   eventArgs, valu
57f0: 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  e), out complete
5800: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5810: 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d    if (complete).
5820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5840: 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 76  byte[] bytes = v
5850: 61 6c 75 65 2e 42 79 74 65 73 56 61 6c 75 65 3b  alue.BytesValue;
5860: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5870: 20 20 20 20 69 66 20 28 62 79 74 65 73 20 21 3d      if (bytes !=
5880: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5890: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
58a0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
58b0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
58c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
58d0: 72 72 61 79 2e 43 6f 70 79 28 62 79 74 65 73 2c  rray.Copy(bytes,
58e0: 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
58f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5900: 20 20 20 20 20 20 65 76 65 6e 74 41 72 67 73 2e        eventArgs.
5910: 44 61 74 61 4f 66 66 73 65 74 2c 20 65 76 65 6e  DataOffset, even
5920: 74 41 72 67 73 2e 42 79 74 65 42 75 66 66 65 72  tArgs.ByteBuffer
5930: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5940: 20 20 20 20 20 20 20 20 20 20 20 65 76 65 6e 74             event
5950: 41 72 67 73 2e 42 75 66 66 65 72 4f 66 66 73 65  Args.BufferOffse
5960: 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 4c 65 6e  t, eventArgs.Len
5970: 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  gth);..#else..  
5980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5990: 20 20 41 72 72 61 79 2e 43 6f 70 79 28 62 79 74    Array.Copy(byt
59a0: 65 73 2c 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  es, /* throw */.
59b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
59c0: 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 65 76           (int)ev
59d0: 65 6e 74 41 72 67 73 2e 44 61 74 61 4f 66 66 73  entArgs.DataOffs
59e0: 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 42 79  et, eventArgs.By
59f0: 74 65 42 75 66 66 65 72 2c 0d 0a 20 20 20 20 20  teBuffer,..     
5a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a10: 20 20 20 65 76 65 6e 74 41 72 67 73 2e 42 75 66     eventArgs.Buf
5a20: 66 65 72 4f 66 66 73 65 74 2c 20 65 76 65 6e 74  ferOffset, event
5a30: 41 72 67 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23  Args.Length);..#
5a40: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
5a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
5a60: 75 72 6e 20 65 76 65 6e 74 41 72 67 73 2e 4c 65  urn eventArgs.Le
5a70: 6e 67 74 68 3b 0d 0a 20 20 20 20 20 20 20 20 20  ngth;..         
5a80: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5a90: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
5aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ab0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5ac0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31         return -1
5ad0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5ae0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5af0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
5b00: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
5b10: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
5b20: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
5b30: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
5b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
5b50: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
5b60: 74 42 79 74 65 73 28 69 20 2d 20 50 72 69 76 61  tBytes(i - Priva
5b70: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
5b80: 75 6e 74 2c 20 66 69 65 6c 64 4f 66 66 73 65 74  unt, fieldOffset
5b90: 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72  , buffer, buffer
5ba0: 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b  offset, length);
5bb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  ....        Veri
5bc0: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
5bd0: 2e 42 69 6e 61 72 79 29 3b 0d 0a 20 20 20 20 20  .Binary);..     
5be0: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
5bf0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
5c00: 47 65 74 42 79 74 65 73 28 5f 61 63 74 69 76 65  GetBytes(_active
5c10: 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 28 69  Statement, i, (i
5c20: 6e 74 29 66 69 65 6c 64 4f 66 66 73 65 74 2c 20  nt)fieldOffset, 
5c30: 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66  buffer, bufferof
5c40: 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  fset, length);..
5c50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
5c60: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
5c70: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
5c80: 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73 69 6e 67  column as a sing
5c90: 6c 65 20 63 68 61 72 61 63 74 65 72 0d 0a 20 20  le character..  
5ca0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5cb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
5cc0: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
5cd0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
5ce0: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
5cf0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 63 68 61  /// <returns>cha
5d00: 72 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  r</returns>..   
5d10: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
5d20: 20 63 68 61 72 20 47 65 74 43 68 61 72 28 69 6e   char GetChar(in
5d30: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
5d40: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
5d50: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
5d60: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
5d70: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 48 65  ..        if (He
5d80: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 48 61 73 46  lperMethods.HasF
5d90: 6c 61 67 73 28 5f 66 6c 61 67 73 2c 20 53 51 4c  lags(_flags, SQL
5da0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
5db0: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
5dc0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
5dd0: 6b 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ks))..        {.
5de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
5df0: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
5e00: 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53  ue value = new S
5e10: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
5e20: 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  alue();..       
5e30: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65       bool comple
5e40: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
5e50: 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c     InvokeReadVal
5e60: 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65  ueCallback(i, ne
5e70: 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75  w SQLiteReadValu
5e80: 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  eEventArgs(..   
5e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
5ea0: 74 43 68 61 72 22 2c 20 6e 75 6c 6c 2c 20 76 61  tChar", null, va
5eb0: 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65  lue), out comple
5ec0: 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
5ed0: 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65      if (complete
5ee0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5f00: 20 20 69 66 20 28 76 61 6c 75 65 2e 43 68 61 72    if (value.Char
5f10: 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Value == null)..
5f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f30: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
5f40: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d  LiteException("m
5f50: 69 73 73 69 6e 67 20 63 68 61 72 61 63 74 65 72  issing character
5f60: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b   return value");
5f70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5f80: 20 20 20 20 72 65 74 75 72 6e 20 28 63 68 61 72      return (char
5f90: 29 76 61 6c 75 65 2e 43 68 61 72 56 61 6c 75 65  )value.CharValue
5fa0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
5fb0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
5fc0: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
5fd0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
5fe0: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
5ff0: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
6000: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6010: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 43 68  n _keyInfo.GetCh
6020: 61 72 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  ar(i - PrivateVi
6030: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
6040: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ;....        Ver
6050: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
6060: 65 2e 53 42 79 74 65 29 3b 0d 0a 20 20 20 20 20  e.SByte);..     
6070: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
6080: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
6090: 47 65 74 43 68 61 72 28 5f 61 63 74 69 76 65 53  GetChar(_activeS
60a0: 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20  tatement, i);.. 
60b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
60c0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
60d0: 2f 2f 20 52 65 74 72 69 65 76 65 73 20 61 20 63  // Retrieves a c
60e0: 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 61 72 72 61  olumn as an arra
60f0: 79 20 6f 66 20 63 68 61 72 73 20 28 62 6c 6f 62  y of chars (blob
6100: 29 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  )..    /// </sum
6110: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
6120: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
6130: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
6140: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
6150: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
6160: 6e 61 6d 65 3d 22 66 69 65 6c 64 6f 66 66 73 65  name="fieldoffse
6170: 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65  t">The zero-base
6180: 64 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65  d index of where
6190: 20 74 6f 20 62 65 67 69 6e 20 72 65 61 64 69 6e   to begin readin
61a0: 67 20 74 68 65 20 64 61 74 61 3c 2f 70 61 72 61  g the data</para
61b0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
61c0: 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 22  am name="buffer"
61d0: 3e 54 68 65 20 62 75 66 66 65 72 20 74 6f 20 77  >The buffer to w
61e0: 72 69 74 65 20 74 68 65 20 63 68 61 72 61 63 74  rite the charact
61f0: 65 72 73 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e  ers into</param>
6200: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
6210: 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 6f 66 66   name="bufferoff
6220: 73 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61  set">The zero-ba
6230: 73 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68 65  sed index of whe
6240: 72 65 20 74 6f 20 62 65 67 69 6e 20 77 72 69 74  re to begin writ
6250: 69 6e 67 20 69 6e 74 6f 20 74 68 65 20 61 72 72  ing into the arr
6260: 61 79 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  ay</param>..    
6270: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6280: 22 6c 65 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d  "length">The num
6290: 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20  ber of bytes to 
62a0: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
62b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
62c0: 6e 73 3e 54 68 65 20 61 63 74 75 61 6c 20 6e 75  ns>The actual nu
62d0: 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
62e0: 72 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  rs written into 
62f0: 74 68 65 20 61 72 72 61 79 3c 2f 72 65 74 75 72  the array</retur
6300: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ns>..    /// <re
6310: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
6320: 54 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  To determine the
6330: 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   number of chara
6340: 63 74 65 72 73 20 69 6e 20 74 68 65 20 63 6f 6c  cters in the col
6350: 75 6d 6e 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c  umn, pass a null
6360: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62   value for the b
6370: 75 66 66 65 72 2e 20 20 54 68 65 20 74 6f 74 61  uffer.  The tota
6380: 6c 20 6c 65 6e 67 74 68 20 77 69 6c 6c 20 62 65  l length will be
6390: 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20   returned...    
63a0: 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a  /// </remarks>..
63b0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
63c0: 69 64 65 20 6c 6f 6e 67 20 47 65 74 43 68 61 72  ide long GetChar
63d0: 73 28 69 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69  s(int i, long fi
63e0: 65 6c 64 6f 66 66 73 65 74 2c 20 63 68 61 72 5b  eldoffset, char[
63f0: 5d 20 62 75 66 66 65 72 2c 20 69 6e 74 20 62 75  ] buffer, int bu
6400: 66 66 65 72 6f 66 66 73 65 74 2c 20 69 6e 74 20  fferoffset, int 
6410: 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  length)..    {..
6420: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
6430: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
6440: 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
6450: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
6460: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 48  (HelperMethods.H
6470: 61 73 46 6c 61 67 73 28 5f 66 6c 61 67 73 2c 20  asFlags(_flags, 
6480: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6490: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
64a0: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
64b0: 62 61 63 6b 73 29 29 0d 0a 20 20 20 20 20 20 20  backs))..       
64c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
64d0: 53 51 4c 69 74 65 52 65 61 64 41 72 72 61 79 45  SQLiteReadArrayE
64e0: 76 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41 72  ventArgs eventAr
64f0: 67 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 52  gs = new SQLiteR
6500: 65 61 64 41 72 72 61 79 45 76 65 6e 74 41 72 67  eadArrayEventArg
6510: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
6520: 20 20 20 20 66 69 65 6c 64 6f 66 66 73 65 74 2c      fieldoffset,
6530: 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f   buffer, buffero
6540: 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d  ffset, length);.
6550: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
6560: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
6570: 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77  alue value = new
6580: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
6590: 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20  rValue();..     
65a0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70         bool comp
65b0: 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lete;....       
65c0: 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56       InvokeReadV
65d0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20  alueCallback(i, 
65e0: 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61  new SQLiteReadVa
65f0: 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  lueEventArgs(.. 
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
6610: 47 65 74 43 68 61 72 73 22 2c 20 65 76 65 6e 74  GetChars", event
6620: 41 72 67 73 2c 20 76 61 6c 75 65 29 2c 20 6f 75  Args, value), ou
6630: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a  t complete);....
6640: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6650: 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20  complete)..     
6660: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6670: 20 20 20 20 20 20 20 20 20 20 63 68 61 72 5b 5d            char[]
6680: 20 63 68 61 72 73 20 3d 20 76 61 6c 75 65 2e 43   chars = value.C
6690: 68 61 72 73 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20  harsValue;....  
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
66b0: 20 28 63 68 61 72 73 20 21 3d 20 6e 75 6c 6c 29   (chars != null)
66c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
66d0: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
66e0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
66f0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
6700: 20 20 20 20 20 20 20 20 20 41 72 72 61 79 2e 43           Array.C
6710: 6f 70 79 28 63 68 61 72 73 2c 20 2f 2a 20 74 68  opy(chars, /* th
6720: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
6730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6740: 65 76 65 6e 74 41 72 67 73 2e 44 61 74 61 4f 66  eventArgs.DataOf
6750: 66 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e  fset, eventArgs.
6760: 43 68 61 72 42 75 66 66 65 72 2c 0d 0a 20 20 20  CharBuffer,..   
6770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6780: 20 20 20 20 20 65 76 65 6e 74 41 72 67 73 2e 42       eventArgs.B
6790: 75 66 66 65 72 4f 66 66 73 65 74 2c 20 65 76 65  ufferOffset, eve
67a0: 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 29 3b 0d  ntArgs.Length);.
67b0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
67c0: 20 20 20 20 20 20 20 20 20 20 20 20 41 72 72 61              Arra
67d0: 79 2e 43 6f 70 79 28 63 68 61 72 73 2c 20 2f 2a  y.Copy(chars, /*
67e0: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
67f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6800: 20 20 20 28 69 6e 74 29 65 76 65 6e 74 41 72 67     (int)eventArg
6810: 73 2e 44 61 74 61 4f 66 66 73 65 74 2c 20 65 76  s.DataOffset, ev
6820: 65 6e 74 41 72 67 73 2e 43 68 61 72 42 75 66 66  entArgs.CharBuff
6830: 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
6840: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76 65               eve
6850: 6e 74 41 72 67 73 2e 42 75 66 66 65 72 4f 66 66  ntArgs.BufferOff
6860: 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 4c  set, eventArgs.L
6870: 65 6e 67 74 68 29 3b 0d 0a 23 65 6e 64 69 66 0d  ength);..#endif.
6880: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6890: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 65 76         return ev
68a0: 65 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 3b 0d  entArgs.Length;.
68b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
68c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
68d0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
68e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
68f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6900: 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20   return -1;..   
6910: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6920: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6930: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6940: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
6950: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
6960: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
6970: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
6980: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
6990: 6b 65 79 49 6e 66 6f 2e 47 65 74 43 68 61 72 73  keyInfo.GetChars
69a0: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
69b0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20 66  bleFieldCount, f
69c0: 69 65 6c 64 6f 66 66 73 65 74 2c 20 62 75 66 66  ieldoffset, buff
69d0: 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74  er, bufferoffset
69e0: 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20  , length);....  
69f0: 20 20 20 20 20 20 69 66 20 28 21 48 65 6c 70 65        if (!Helpe
6a00: 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67  rMethods.HasFlag
6a10: 73 28 5f 66 6c 61 67 73 2c 20 53 51 4c 69 74 65  s(_flags, SQLite
6a20: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6a30: 4e 6f 56 65 72 69 66 79 54 65 78 74 41 66 66 69  NoVerifyTextAffi
6a40: 6e 69 74 79 29 29 0d 0a 20 20 20 20 20 20 20 20  nity))..        
6a50: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
6a60: 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29  , DbType.String)
6a70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
6a80: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
6a90: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 43 68 61  ment._sql.GetCha
6aa0: 72 73 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rs(_activeStatem
6ab0: 65 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69 65  ent, i, (int)fie
6ac0: 6c 64 6f 66 66 73 65 74 2c 20 62 75 66 66 65 72  ldoffset, buffer
6ad0: 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20  , bufferoffset, 
6ae0: 6c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d  length);..    }.
6af0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
6b00: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
6b10: 74 72 69 65 76 65 73 20 74 68 65 20 6e 61 6d 65  trieves the name
6b20: 20 6f 66 20 74 68 65 20 62 61 63 6b 2d 65 6e 64   of the back-end
6b30: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
6b40: 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f   column..    ///
6b50: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
6b60: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
6b70: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
6b80: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
6b90: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
6ba0: 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f  returns>string</
6bb0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
6bc0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74  blic override st
6bd0: 72 69 6e 67 20 47 65 74 44 61 74 61 54 79 70 65  ring GetDataType
6be0: 4e 61 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20  Name(int i)..   
6bf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
6c00: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
6c10: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
6c20: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
6c30: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
6c40: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
6c50: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6c60: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44  rn _keyInfo.GetD
6c70: 61 74 61 54 79 70 65 4e 61 6d 65 28 69 20 2d 20  ataTypeName(i - 
6c80: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
6c90: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
6ca0: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
6cb0: 74 79 20 61 66 66 69 6e 20 3d 20 54 79 70 65 41  ty affin = TypeA
6cc0: 66 66 69 6e 69 74 79 2e 55 6e 69 6e 69 74 69 61  ffinity.Uninitia
6cd0: 6c 69 7a 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  lized;..        
6ce0: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
6cf0: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c  atement._sql.Col
6d00: 75 6d 6e 54 79 70 65 28 5f 61 63 74 69 76 65 53  umnType(_activeS
6d10: 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 72 65 66  tatement, i, ref
6d20: 20 61 66 66 69 6e 29 3b 0d 0a 20 20 20 20 7d 0d   affin);..    }.
6d30: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
6d40: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
6d50: 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 75 6d  trieve the colum
6d60: 6e 20 61 73 20 61 20 64 61 74 65 2f 74 69 6d 65  n as a date/time
6d70: 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20   value..    /// 
6d80: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
6d90: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6da0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
6db0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
6dc0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
6dd0: 65 74 75 72 6e 73 3e 44 61 74 65 54 69 6d 65 3c  eturns>DateTime<
6de0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
6df0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 44  ublic override D
6e00: 61 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54  ateTime GetDateT
6e10: 69 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ime(int i)..    
6e20: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
6e30: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
6e40: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
6e50: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
6e60: 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  if (HelperMethod
6e70: 73 2e 48 61 73 46 6c 61 67 73 28 5f 66 6c 61 67  s.HasFlags(_flag
6e80: 73 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  s, SQLiteConnect
6e90: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
6ea0: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
6eb0: 61 6c 6c 62 61 63 6b 73 29 29 0d 0a 20 20 20 20  allbacks))..    
6ec0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6ed0: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
6ee0: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
6ef0: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
6f00: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
6f10: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
6f20: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
6f30: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
6f40: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
6f50: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
6f60: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
6f70: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
6f80: 20 20 20 22 47 65 74 44 61 74 65 54 69 6d 65 22     "GetDateTime"
6f90: 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20  , null, value), 
6fa0: 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a  out complete);..
6fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
6fc0: 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20   (complete)..   
6fd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6fe0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6ff0: 76 61 6c 75 65 2e 44 61 74 65 54 69 6d 65 56 61  value.DateTimeVa
7000: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
7010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7020: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
7030: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73  teException("mis
7040: 73 69 6e 67 20 64 61 74 65 2f 74 69 6d 65 20 72  sing date/time r
7050: 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a  eturn value");..
7060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7070: 20 20 72 65 74 75 72 6e 20 28 44 61 74 65 54 69    return (DateTi
7080: 6d 65 29 76 61 6c 75 65 2e 44 61 74 65 54 69 6d  me)value.DateTim
7090: 65 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  eValue;..       
70a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
70b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
70c0: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
70d0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
70e0: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
70f0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
7100: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
7110: 2e 47 65 74 44 61 74 65 54 69 6d 65 28 69 20 2d  .GetDateTime(i -
7120: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
7130: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
7140: 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70         VerifyTyp
7150: 65 28 69 2c 20 44 62 54 79 70 65 2e 44 61 74 65  e(i, DbType.Date
7160: 54 69 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Time);..        
7170: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
7180: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
7190: 44 61 74 65 54 69 6d 65 28 5f 61 63 74 69 76 65  DateTime(_active
71a0: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a  Statement, i);..
71b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
71c0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
71d0: 2f 2f 2f 20 52 65 74 72 69 65 76 65 20 74 68 65  /// Retrieve the
71e0: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 64 65 63   column as a dec
71f0: 69 6d 61 6c 20 76 61 6c 75 65 0d 0a 20 20 20 20  imal value..    
7200: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
7210: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
7220: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
7230: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
7240: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
7250: 2f 20 3c 72 65 74 75 72 6e 73 3e 64 65 63 69 6d  / <returns>decim
7260: 61 6c 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  al</returns>..  
7270: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
7280: 65 20 64 65 63 69 6d 61 6c 20 47 65 74 44 65 63  e decimal GetDec
7290: 69 6d 61 6c 28 69 6e 74 20 69 29 0d 0a 20 20 20  imal(int i)..   
72a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
72b0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
72c0: 20 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47        VerifyForG
72d0: 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  et();....       
72e0: 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f   if (HelperMetho
72f0: 64 73 2e 48 61 73 46 6c 61 67 73 28 5f 66 6c 61  ds.HasFlags(_fla
7300: 67 73 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  gs, SQLiteConnec
7310: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
7320: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
7330: 43 61 6c 6c 62 61 63 6b 73 29 29 0d 0a 20 20 20  Callbacks))..   
7340: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7350: 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65      SQLiteDataRe
7360: 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20  aderValue value 
7370: 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61  = new SQLiteData
7380: 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a  ReaderValue();..
7390: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
73a0: 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20   complete;....  
73b0: 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65            Invoke
73c0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
73d0: 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52  k(i, new SQLiteR
73e0: 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67  eadValueEventArg
73f0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
7400: 20 20 20 20 22 47 65 74 44 65 63 69 6d 61 6c 22      "GetDecimal"
7410: 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20  , null, value), 
7420: 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a  out complete);..
7430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
7440: 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20   (complete)..   
7450: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7460: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7470: 76 61 6c 75 65 2e 44 65 63 69 6d 61 6c 56 61 6c  value.DecimalVal
7480: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
7490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74a0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
74b0: 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73  eException("miss
74c0: 69 6e 67 20 64 65 63 69 6d 61 6c 20 72 65 74 75  ing decimal retu
74d0: 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  rn value");.... 
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
74f0: 65 74 75 72 6e 20 28 64 65 63 69 6d 61 6c 29 76  eturn (decimal)v
7500: 61 6c 75 65 2e 44 65 63 69 6d 61 6c 56 61 6c 75  alue.DecimalValu
7510: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
7520: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
7530: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
7540: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
7550: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
7560: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
7570: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
7580: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44  rn _keyInfo.GetD
7590: 65 63 69 6d 61 6c 28 69 20 2d 20 50 72 69 76 61  ecimal(i - Priva
75a0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
75b0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
75c0: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
75d0: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 3b 0d  bType.Decimal);.
75e0: 0a 0d 0a 20 20 20 20 20 20 20 20 43 75 6c 74 75  ...        Cultu
75f0: 72 65 49 6e 66 6f 20 63 75 6c 74 75 72 65 49 6e  reInfo cultureIn
7600: 66 6f 20 3d 20 43 75 6c 74 75 72 65 49 6e 66 6f  fo = CultureInfo
7610: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 3b  .CurrentCulture;
7620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
7630: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 48 61  HelperMethods.Ha
7640: 73 46 6c 61 67 73 28 5f 66 6c 61 67 73 2c 20 53  sFlags(_flags, S
7650: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7660: 6c 61 67 73 2e 47 65 74 49 6e 76 61 72 69 61 6e  lags.GetInvarian
7670: 74 44 65 63 69 6d 61 6c 29 29 0d 0a 20 20 20 20  tDecimal))..    
7680: 20 20 20 20 20 20 20 20 63 75 6c 74 75 72 65 49          cultureI
7690: 6e 66 6f 20 3d 20 43 75 6c 74 75 72 65 49 6e 66  nfo = CultureInf
76a0: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
76b0: 72 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  re;....        r
76c0: 65 74 75 72 6e 20 44 65 63 69 6d 61 6c 2e 50 61  eturn Decimal.Pa
76d0: 72 73 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  rse(_activeState
76e0: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78  ment._sql.GetTex
76f0: 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  t(_activeStateme
7700: 6e 74 2c 20 69 29 2c 20 4e 75 6d 62 65 72 53 74  nt, i), NumberSt
7710: 79 6c 65 73 2e 41 6c 6c 6f 77 44 65 63 69 6d 61  yles.AllowDecima
7720: 6c 50 6f 69 6e 74 20 7c 20 4e 75 6d 62 65 72 53  lPoint | NumberS
7730: 74 79 6c 65 73 2e 41 6c 6c 6f 77 45 78 70 6f 6e  tyles.AllowExpon
7740: 65 6e 74 20 7c 20 4e 75 6d 62 65 72 53 74 79 6c  ent | NumberStyl
7750: 65 73 2e 41 6c 6c 6f 77 4c 65 61 64 69 6e 67 53  es.AllowLeadingS
7760: 69 67 6e 2c 20 63 75 6c 74 75 72 65 49 6e 66 6f  ign, cultureInfo
7770: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
7780: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
7790: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
77a0: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
77b0: 64 6f 75 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20  double..    /// 
77c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
77d0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
77e0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
77f0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
7800: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
7810: 65 74 75 72 6e 73 3e 64 6f 75 62 6c 65 3c 2f 72  eturns>double</r
7820: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
7830: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64 6f 75  lic override dou
7840: 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 69 6e  ble GetDouble(in
7850: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
7860: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
7870: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
7880: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
7890: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 48 65  ..        if (He
78a0: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 48 61 73 46  lperMethods.HasF
78b0: 6c 61 67 73 28 5f 66 6c 61 67 73 2c 20 53 51 4c  lags(_flags, SQL
78c0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
78d0: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
78e0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
78f0: 6b 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ks))..        {.
7900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
7910: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
7920: 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53  ue value = new S
7930: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
7940: 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  alue();..       
7950: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65       bool comple
7960: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
7970: 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c     InvokeReadVal
7980: 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65  ueCallback(i, ne
7990: 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75  w SQLiteReadValu
79a0: 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  eEventArgs(..   
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
79c0: 74 44 6f 75 62 6c 65 22 2c 20 6e 75 6c 6c 2c 20  tDouble", null, 
79d0: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
79e0: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
79f0: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
7a00: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
7a10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7a20: 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 44 6f      if (value.Do
7a30: 75 62 6c 65 56 61 6c 75 65 20 3d 3d 20 6e 75 6c  ubleValue == nul
7a40: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7a50: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
7a60: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
7a70: 6e 28 22 6d 69 73 73 69 6e 67 20 64 6f 75 62 6c  n("missing doubl
7a80: 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29  e return value")
7a90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
7aa0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 64 6f 75       return (dou
7ab0: 62 6c 65 29 76 61 6c 75 65 2e 44 6f 75 62 6c 65  ble)value.Double
7ac0: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
7ad0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
7ae0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
7af0: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
7b00: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
7b10: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
7b20: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7b30: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
7b40: 47 65 74 44 6f 75 62 6c 65 28 69 20 2d 20 50 72  GetDouble(i - Pr
7b50: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
7b60: 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
7b70: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
7b80: 2c 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29  , DbType.Double)
7b90: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
7ba0: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
7bb0: 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c  nt._sql.GetDoubl
7bc0: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
7bd0: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
7be0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
7bf0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74  ry>..    /// Det
7c00: 65 72 6d 69 6e 65 73 20 61 6e 64 20 72 65 74 75  ermines and retu
7c10: 72 6e 73 20 74 68 65 20 3c 73 65 65 20 63 72 65  rns the <see cre
7c20: 66 3d 22 54 79 70 65 41 66 66 69 6e 69 74 79 22  f="TypeAffinity"
7c30: 20 2f 3e 20 6f 66 20 74 68 65 0d 0a 20 20 20 20   /> of the..    
7c40: 2f 2f 2f 20 73 70 65 63 69 66 69 65 64 20 63 6f  /// specified co
7c50: 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  lumn...    /// <
7c60: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
7c70: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
7c80: 69 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  i">..    /// The
7c90: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
7ca0: 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  lumn...    /// <
7cb0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
7cc0: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
7cd0: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
7ce0: 66 3d 22 54 79 70 65 41 66 66 69 6e 69 74 79 22  f="TypeAffinity"
7cf0: 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77   /> associated w
7d00: 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65  ith the specifie
7d10: 64 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6c 75 6d  d..    /// colum
7d20: 6e 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20  n, if any...    
7d30: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
7d40: 20 20 20 20 70 75 62 6c 69 63 20 54 79 70 65 41      public TypeA
7d50: 66 66 69 6e 69 74 79 20 47 65 74 46 69 65 6c 64  ffinity GetField
7d60: 41 66 66 69 6e 69 74 79 28 69 6e 74 20 69 29 0d  Affinity(int i).
7d70: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7d80: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
7d90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
7da0: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
7db0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
7dc0: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
7dd0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7de0: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
7df0: 47 65 74 46 69 65 6c 64 41 66 66 69 6e 69 74 79  GetFieldAffinity
7e00: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
7e10: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d  bleFieldCount);.
7e20: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
7e30: 6e 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  n GetSQLiteType(
7e40: 5f 66 6c 61 67 73 2c 20 69 29 2e 41 66 66 69 6e  _flags, i).Affin
7e50: 69 74 79 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ity;..    }.... 
7e60: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
7e70: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
7e80: 73 20 74 68 65 20 2e 4e 45 54 20 74 79 70 65 20  s the .NET type 
7e90: 6f 66 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d  of a given colum
7ea0: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  n..    /// </sum
7eb0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
7ec0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
7ed0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
7ee0: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
7ef0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
7f00: 73 3e 54 79 70 65 3c 2f 72 65 74 75 72 6e 73 3e  s>Type</returns>
7f10: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
7f20: 72 72 69 64 65 20 54 79 70 65 20 47 65 74 46 69  rride Type GetFi
7f30: 65 6c 64 54 79 70 65 28 69 6e 74 20 69 29 0d 0a  eldType(int i)..
7f40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
7f50: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
7f60: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
7f70: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
7f80: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
7f90: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
7fa0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
7fb0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
7fc0: 65 74 46 69 65 6c 64 54 79 70 65 28 69 20 2d 20  etFieldType(i - 
7fd0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
7fe0: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
7ff0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
8000: 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74  iteConvert.SQLit
8010: 65 54 79 70 65 54 6f 54 79 70 65 28 47 65 74 53  eTypeToType(GetS
8020: 51 4c 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73  QLiteType(_flags
8030: 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  , i));..    }...
8040: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
8050: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
8060: 72 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20  rns a column as 
8070: 61 20 66 6c 6f 61 74 20 76 61 6c 75 65 0d 0a 20  a float value.. 
8080: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8090: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
80a0: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
80b0: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
80c0: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
80d0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 66 6c   /// <returns>fl
80e0: 6f 61 74 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  oat</returns>.. 
80f0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
8100: 64 65 20 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61  de float GetFloa
8110: 74 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  t(int i)..    {.
8120: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
8130: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
8140: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
8150: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
8160: 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e   (HelperMethods.
8170: 48 61 73 46 6c 61 67 73 28 5f 66 6c 61 67 73 2c  HasFlags(_flags,
8180: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8190: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
81a0: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
81b0: 6c 62 61 63 6b 73 29 29 0d 0a 20 20 20 20 20 20  lbacks))..      
81c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
81d0: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
81e0: 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e  rValue value = n
81f0: 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  ew SQLiteDataRea
8200: 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20  derValue();..   
8210: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f           bool co
8220: 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20  mplete;....     
8230: 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61         InvokeRea
8240: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69  dValueCallback(i
8250: 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64  , new SQLiteRead
8260: 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d  ValueEventArgs(.
8270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8280: 20 22 47 65 74 46 6c 6f 61 74 22 2c 20 6e 75 6c   "GetFloat", nul
8290: 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63  l, value), out c
82a0: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
82b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
82c0: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
82d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
82e0: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
82f0: 2e 46 6c 6f 61 74 56 61 6c 75 65 20 3d 3d 20 6e  .FloatValue == n
8300: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
8310: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
8320: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
8330: 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 66 6c 6f  ion("missing flo
8340: 61 74 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22  at return value"
8350: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8360: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 66 6c        return (fl
8370: 6f 61 74 29 76 61 6c 75 65 2e 46 6c 6f 61 74 56  oat)value.FloatV
8380: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
8390: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
83a0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
83b0: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
83c0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
83d0: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
83e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
83f0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
8400: 65 74 46 6c 6f 61 74 28 69 20 2d 20 50 72 69 76  etFloat(i - Priv
8410: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
8420: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
8430: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
8440: 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29 3b 0d  DbType.Single);.
8450: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8460: 43 6f 6e 76 65 72 74 2e 54 6f 53 69 6e 67 6c 65  Convert.ToSingle
8470: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
8480: 74 2e 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65  t._sql.GetDouble
8490: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
84a0: 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  t, i));..    }..
84b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
84c0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
84d0: 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  urns the column 
84e0: 61 73 20 61 20 47 75 69 64 0d 0a 20 20 20 20 2f  as a Guid..    /
84f0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
8500: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
8510: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
8520: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
8530: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
8540: 20 3c 72 65 74 75 72 6e 73 3e 47 75 69 64 3c 2f   <returns>Guid</
8550: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
8560: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 47 75  blic override Gu
8570: 69 64 20 47 65 74 47 75 69 64 28 69 6e 74 20 69  id GetGuid(int i
8580: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8590: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
85a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
85b0: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
85c0: 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65         if (Helpe
85d0: 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67  rMethods.HasFlag
85e0: 73 28 5f 66 6c 61 67 73 2c 20 53 51 4c 69 74 65  s(_flags, SQLite
85f0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
8600: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
8610: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
8620: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8630: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
8640: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
8650: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
8660: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
8670: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
8680: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
8690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
86a0: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
86b0: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
86c0: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
86d0: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
86e0: 20 20 20 20 20 20 20 20 20 20 22 47 65 74 47 75            "GetGu
86f0: 69 64 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65  id", null, value
8700: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
8710: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8720: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
8730: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
8750: 66 20 28 76 61 6c 75 65 2e 47 75 69 64 56 61 6c  f (value.GuidVal
8760: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
8770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8780: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
8790: 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73  eException("miss
87a0: 69 6e 67 20 67 75 69 64 20 72 65 74 75 72 6e 20  ing guid return 
87b0: 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  value");....    
87c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
87d0: 72 6e 20 28 47 75 69 64 29 76 61 6c 75 65 2e 47  rn (Guid)value.G
87e0: 75 69 64 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  uidValue;..     
87f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8800: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
8810: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
8820: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
8830: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
8840: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8850: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
8860: 66 6f 2e 47 65 74 47 75 69 64 28 69 20 2d 20 50  fo.GetGuid(i - P
8870: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
8880: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
8890: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
88a0: 79 20 61 66 66 69 6e 69 74 79 20 3d 20 56 65 72  y affinity = Ver
88b0: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
88c0: 65 2e 47 75 69 64 29 3b 0d 0a 20 20 20 20 20 20  e.Guid);..      
88d0: 20 20 69 66 20 28 61 66 66 69 6e 69 74 79 20 3d    if (affinity =
88e0: 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42  = TypeAffinity.B
88f0: 6c 6f 62 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  lob)..        {.
8900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74  .            byt
8910: 65 5b 5d 20 62 75 66 66 65 72 20 3d 20 6e 65 77  e[] buffer = new
8920: 20 62 79 74 65 5b 31 36 5d 3b 0d 0a 20 20 20 20   byte[16];..    
8930: 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
8940: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
8950: 74 42 79 74 65 73 28 5f 61 63 74 69 76 65 53 74  tBytes(_activeSt
8960: 61 74 65 6d 65 6e 74 2c 20 69 2c 20 30 2c 20 62  atement, i, 0, b
8970: 75 66 66 65 72 2c 20 30 2c 20 31 36 29 3b 0d 0a  uffer, 0, 16);..
8980: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8990: 72 6e 20 6e 65 77 20 47 75 69 64 28 62 75 66 66  rn new Guid(buff
89a0: 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  er);..        }.
89b0: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  .        else.. 
89c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
89d0: 6e 20 6e 65 77 20 47 75 69 64 28 5f 61 63 74 69  n new Guid(_acti
89e0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
89f0: 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65  .GetText(_active
8a00: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d  Statement, i));.
8a10: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
8a20: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
8a30: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
8a40: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73 68 6f   column as a sho
8a50: 72 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  rt..    /// </su
8a60: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
8a70: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
8a80: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
8a90: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
8aa0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
8ab0: 6e 73 3e 49 6e 74 31 36 3c 2f 72 65 74 75 72 6e  ns>Int16</return
8ac0: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
8ad0: 76 65 72 72 69 64 65 20 49 6e 74 31 36 20 47 65  verride Int16 Ge
8ae0: 74 49 6e 74 31 36 28 69 6e 74 20 69 29 0d 0a 20  tInt16(int i).. 
8af0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
8b00: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
8b10: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
8b20: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
8b30: 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74     if (HelperMet
8b40: 68 6f 64 73 2e 48 61 73 46 6c 61 67 73 28 5f 66  hods.HasFlags(_f
8b50: 6c 61 67 73 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  lags, SQLiteConn
8b60: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
8b70: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
8b80: 75 65 43 61 6c 6c 62 61 63 6b 73 29 29 0d 0a 20  ueCallbacks)).. 
8b90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8ba0: 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61        SQLiteData
8bb0: 52 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75  ReaderValue valu
8bc0: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61  e = new SQLiteDa
8bd0: 74 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b  taReaderValue();
8be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
8bf0: 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a  ol complete;....
8c00: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f              Invo
8c10: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
8c20: 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74  ack(i, new SQLit
8c30: 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41  eReadValueEventA
8c40: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
8c50: 20 20 20 20 20 20 22 47 65 74 49 6e 74 31 36 22        "GetInt16"
8c60: 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20  , null, value), 
8c70: 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a  out complete);..
8c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
8c90: 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20   (complete)..   
8ca0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8cc0: 76 61 6c 75 65 2e 49 6e 74 31 36 56 61 6c 75 65  value.Int16Value
8cd0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
8ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
8cf0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
8d00: 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e  xception("missin
8d10: 67 20 69 6e 74 31 36 20 72 65 74 75 72 6e 20 76  g int16 return v
8d20: 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  alue");....     
8d30: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
8d40: 6e 20 28 49 6e 74 31 36 29 76 61 6c 75 65 2e 49  n (Int16)value.I
8d50: 6e 74 31 36 56 61 6c 75 65 3b 0d 0a 20 20 20 20  nt16Value;..    
8d60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8d70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8d80: 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65  if (i >= Private
8d90: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
8da0: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
8db0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
8dc0: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
8dd0: 6e 66 6f 2e 47 65 74 49 6e 74 31 36 28 69 20 2d  nfo.GetInt16(i -
8de0: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
8df0: 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ieldCount);.... 
8e00: 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70         VerifyTyp
8e10: 65 28 69 2c 20 44 62 54 79 70 65 2e 49 6e 74 31  e(i, DbType.Int1
8e20: 36 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  6);..        ret
8e30: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
8e40: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74  ment._sql.GetInt
8e50: 31 36 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  16(_activeStatem
8e60: 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d  ent, i);..    }.
8e70: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
8e80: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
8e90: 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75  trieves the colu
8ea0: 6d 6e 20 61 73 20 61 6e 20 69 6e 74 0d 0a 20 20  mn as an int..  
8eb0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
8ec0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
8ed0: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
8ee0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
8ef0: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
8f00: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74  /// <returns>Int
8f10: 33 32 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  32</returns>..  
8f20: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
8f30: 65 20 49 6e 74 33 32 20 47 65 74 49 6e 74 33 32  e Int32 GetInt32
8f40: 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
8f50: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
8f60: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
8f70: 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
8f80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
8f90: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 48  (HelperMethods.H
8fa0: 61 73 46 6c 61 67 73 28 5f 66 6c 61 67 73 2c 20  asFlags(_flags, 
8fb0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8fc0: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
8fd0: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
8fe0: 62 61 63 6b 73 29 29 0d 0a 20 20 20 20 20 20 20  backs))..       
8ff0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9000: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
9010: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
9020: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
9030: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
9040: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
9050: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
9060: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
9070: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
9080: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
9090: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90b0: 22 47 65 74 49 6e 74 33 32 22 2c 20 6e 75 6c 6c  "GetInt32", null
90c0: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
90d0: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
90e0: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
90f0: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
9100: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9110: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
9120: 49 6e 74 33 32 56 61 6c 75 65 20 3d 3d 20 6e 75  Int32Value == nu
9130: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9140: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
9150: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
9160: 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 33  on("missing int3
9170: 32 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29  2 return value")
9180: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9190: 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74       return (Int
91a0: 33 32 29 76 61 6c 75 65 2e 49 6e 74 33 32 56 61  32)value.Int32Va
91b0: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
91c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
91d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
91e0: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
91f0: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
9200: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
9210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
9220: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
9230: 74 49 6e 74 33 32 28 69 20 2d 20 50 72 69 76 61  tInt32(i - Priva
9240: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
9250: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
9260: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
9270: 62 54 79 70 65 2e 49 6e 74 33 32 29 3b 0d 0a 20  bType.Int32);.. 
9280: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
9290: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
92a0: 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63  sql.GetInt32(_ac
92b0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
92c0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
92d0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
92e0: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
92f0: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
9300: 61 20 6c 6f 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20  a long..    /// 
9310: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9320: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
9330: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
9340: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
9350: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
9360: 65 74 75 72 6e 73 3e 49 6e 74 36 34 3c 2f 72 65  eturns>Int64</re
9370: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
9380: 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 36  ic override Int6
9390: 34 20 47 65 74 49 6e 74 36 34 28 69 6e 74 20 69  4 GetInt64(int i
93a0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
93b0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
93c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
93d0: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
93e0: 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65         if (Helpe
93f0: 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67  rMethods.HasFlag
9400: 73 28 5f 66 6c 61 67 73 2c 20 53 51 4c 69 74 65  s(_flags, SQLite
9410: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
9420: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
9430: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
9440: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
9450: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
9460: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
9470: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
9480: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
9490: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
94a0: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
94b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
94c0: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
94d0: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
94e0: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
94f0: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
9500: 20 20 20 20 20 20 20 20 20 20 22 47 65 74 49 6e            "GetIn
9510: 74 36 34 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75  t64", null, valu
9520: 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  e), out complete
9530: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9540: 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d    if (complete).
9550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9570: 69 66 20 28 76 61 6c 75 65 2e 49 6e 74 36 34 56  if (value.Int64V
9580: 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95a0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
95b0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69  iteException("mi
95c0: 73 73 69 6e 67 20 69 6e 74 36 34 20 72 65 74 75  ssing int64 retu
95d0: 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  rn value");.... 
95e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
95f0: 65 74 75 72 6e 20 28 49 6e 74 36 34 29 76 61 6c  eturn (Int64)val
9600: 75 65 2e 49 6e 74 36 34 56 61 6c 75 65 3b 0d 0a  ue.Int64Value;..
9610: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9620: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9630: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
9640: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
9650: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
9660: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
9670: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
9680: 6b 65 79 49 6e 66 6f 2e 47 65 74 49 6e 74 36 34  keyInfo.GetInt64
9690: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
96a0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d  bleFieldCount);.
96b0: 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ...        Verif
96c0: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
96d0: 49 6e 74 36 34 29 3b 0d 0a 20 20 20 20 20 20 20  Int64);..       
96e0: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
96f0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
9700: 74 49 6e 74 36 34 28 5f 61 63 74 69 76 65 53 74  tInt64(_activeSt
9710: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20  atement, i);..  
9720: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
9730: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
9740: 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20  / Retrieves the 
9750: 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  name of the colu
9760: 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  mn..    /// </su
9770: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9780: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
9790: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
97a0: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
97b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
97c0: 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72  ns>string</retur
97d0: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
97e0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
97f0: 47 65 74 4e 61 6d 65 28 69 6e 74 20 69 29 0d 0a  GetName(int i)..
9800: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
9810: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
9820: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
9830: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
9840: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
9850: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
9860: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
9870: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
9880: 65 74 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61  etName(i - Priva
9890: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
98a0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
98b0: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
98c0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f  tatement._sql.Co
98d0: 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63 74 69 76 65  lumnName(_active
98e0: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a  Statement, i);..
98f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
9900: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
9910: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
9920: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
9930: 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20  base associated 
9940: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
9950: 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20  ed column...    
9960: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9970: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
9980: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
9990: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
99a0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
99b0: 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e  / <returns>strin
99c0: 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  g</returns>..   
99d0: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47   public string G
99e0: 65 74 44 61 74 61 62 61 73 65 4e 61 6d 65 28 69  etDatabaseName(i
99f0: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
9a00: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
9a10: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
9a20: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
9a30: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
9a40: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
9a50: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
9a60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
9a70: 79 49 6e 66 6f 2e 47 65 74 44 61 74 61 62 61 73  yInfo.GetDatabas
9a80: 65 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61 74  eName(i - Privat
9a90: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
9aa0: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
9ab0: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
9ac0: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c  atement._sql.Col
9ad0: 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28  umnDatabaseName(
9ae0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
9af0: 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  , i);..    }....
9b00: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9b10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
9b20: 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
9b30: 68 65 20 74 61 62 6c 65 20 61 73 73 6f 63 69 61  he table associa
9b40: 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
9b50: 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a  cified column...
9b60: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
9b70: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
9b80: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
9b90: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
9ba0: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
9bb0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73    /// <returns>s
9bc0: 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d  tring</returns>.
9bd0: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69  .    public stri
9be0: 6e 67 20 47 65 74 54 61 62 6c 65 4e 61 6d 65 28  ng GetTableName(
9bf0: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
9c00: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
9c10: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
9c20: 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76     if (i >= Priv
9c30: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
9c40: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
9c50: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
9c60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
9c70: 65 79 49 6e 66 6f 2e 47 65 74 54 61 62 6c 65 4e  eyInfo.GetTableN
9c80: 61 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65 56  ame(i - PrivateV
9c90: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
9ca0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
9cb0: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
9cc0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d  ement._sql.Colum
9cd0: 6e 54 61 62 6c 65 4e 61 6d 65 28 5f 61 63 74 69  nTableName(_acti
9ce0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
9cf0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
9d00: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
9d10: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
9d20: 65 20 6f 72 69 67 69 6e 61 6c 20 6e 61 6d 65 20  e original name 
9d30: 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  of the specified
9d40: 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f   column...    //
9d50: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
9d60: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
9d70: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
9d80: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
9d90: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
9da0: 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c  <returns>string<
9db0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
9dc0: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74  ublic string Get
9dd0: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 69 6e 74  OriginalName(int
9de0: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
9df0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
9e00: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
9e10: 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65  if (i >= Private
9e20: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
9e30: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
9e40: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9e50: 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49      return _keyI
9e60: 6e 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20  nfo.GetName(i - 
9e70: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
9e80: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
9e90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
9ea0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
9eb0: 71 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61  ql.ColumnOrigina
9ec0: 6c 4e 61 6d 65 28 5f 61 63 74 69 76 65 53 74 61  lName(_activeSta
9ed0: 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20  tement, i);..   
9ee0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
9ef0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
9f00: 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20 69   Retrieves the i
9f10: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 2c 20 67 69   of a column, gi
9f20: 76 65 6e 20 69 74 73 20 6e 61 6d 65 0d 0a 20 20  ven its name..  
9f30: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9f40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
9f50: 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 54 68 65   name="name">The
9f60: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   name of the col
9f70: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
9f80: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
9f90: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 69 6e   <returns>The in
9fa0: 74 20 69 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  t i of the colum
9fb0: 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  n</returns>..   
9fc0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
9fd0: 20 69 6e 74 20 47 65 74 4f 72 64 69 6e 61 6c 28   int GetOrdinal(
9fe0: 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d 0a 20 20  string name)..  
9ff0: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
a000: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
a010: 20 20 20 20 20 69 66 20 28 5f 74 68 72 6f 77 4f       if (_throwO
a020: 6e 44 69 73 70 6f 73 65 64 29 20 53 51 4c 69 74  nDisposed) SQLit
a030: 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f  eCommand.Check(_
a040: 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20  command);....   
a050: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20     //..      // 
a060: 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 63 68 65  NOTE: First, che
a070: 63 6b 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ck if the column
a080: 20 6e 61 6d 65 20 63 61 63 68 65 20 68 61 73 20   name cache has 
a090: 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
a0a0: 20 79 65 74 2e 0d 0a 20 20 20 20 20 20 2f 2f 20   yet...      // 
a0b0: 20 20 20 20 20 20 49 66 20 6e 6f 74 2c 20 64 6f        If not, do
a0c0: 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20   it now...      
a0d0: 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 66  //..      if (_f
a0e0: 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 3d 20 6e  ieldIndexes == n
a0f0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ull)..      {.. 
a100: 20 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 49           _fieldI
a110: 6e 64 65 78 65 73 20 3d 20 6e 65 77 20 44 69 63  ndexes = new Dic
a120: 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20  tionary<string, 
a130: 69 6e 74 3e 28 0d 0a 20 20 20 20 20 20 20 20 20  int>(..         
a140: 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61       StringCompa
a150: 72 65 72 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  rer.OrdinalIgnor
a160: 65 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 7d  eCase);..      }
a170: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ....      //..  
a180: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 65 78      // NOTE: Nex
a190: 74 2c 20 73 65 65 20 69 66 20 74 68 65 20 69 6e  t, see if the in
a1a0: 64 65 78 20 66 6f 72 20 74 68 65 20 72 65 71 75  dex for the requ
a1b0: 65 73 74 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ested column nam
a1c0: 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20  e has been..    
a1d0: 20 20 2f 2f 20 20 20 20 20 20 20 63 61 63 68 65    //       cache
a1e0: 64 20 61 6c 72 65 61 64 79 2e 20 20 49 66 20 73  d already.  If s
a1f0: 6f 2c 20 72 65 74 75 72 6e 20 74 68 65 20 63 61  o, return the ca
a200: 63 68 65 64 20 76 61 6c 75 65 2e 20 20 4f 74 68  ched value.  Oth
a210: 65 72 77 69 73 65 2c 0d 0a 20 20 20 20 20 20 2f  erwise,..      /
a220: 2f 20 20 20 20 20 20 20 6c 6f 6f 6b 75 70 20 74  /       lookup t
a230: 68 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  he value and the
a240: 6e 20 63 61 63 68 65 20 74 68 65 20 72 65 73 75  n cache the resu
a250: 6c 74 20 66 6f 72 20 66 75 74 75 72 65 20 75 73  lt for future us
a260: 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  e...      //..  
a270: 20 20 20 20 69 6e 74 20 72 3b 0d 0a 0d 0a 20 20      int r;....  
a280: 20 20 20 20 69 66 20 28 21 5f 66 69 65 6c 64 49      if (!_fieldI
a290: 6e 64 65 78 65 73 2e 54 72 79 47 65 74 56 61 6c  ndexes.TryGetVal
a2a0: 75 65 28 6e 61 6d 65 2c 20 6f 75 74 20 72 29 29  ue(name, out r))
a2b0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
a2c0: 20 20 20 20 20 72 20 3d 20 5f 61 63 74 69 76 65       r = _active
a2d0: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43  Statement._sql.C
a2e0: 6f 6c 75 6d 6e 49 6e 64 65 78 28 5f 61 63 74 69  olumnIndex(_acti
a2f0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e 61 6d  veStatement, nam
a300: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
a310: 20 69 66 20 28 72 20 3d 3d 20 2d 31 20 26 26 20   if (r == -1 && 
a320: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
a330: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
a340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 20                r 
a350: 3d 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4f 72  = _keyInfo.GetOr
a360: 64 69 6e 61 6c 28 6e 61 6d 65 29 3b 0d 0a 20 20  dinal(name);..  
a370: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a380: 72 20 3e 20 2d 31 29 20 72 20 2b 3d 20 50 72 69  r > -1) r += Pri
a390: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
a3a0: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20  Count;..        
a3b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a3c0: 20 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 2e 41   _fieldIndexes.A
a3d0: 64 64 28 6e 61 6d 65 2c 20 72 29 3b 0d 0a 20 20  dd(name, r);..  
a3e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
a3f0: 65 74 75 72 6e 20 72 3b 0d 0a 20 20 20 20 7d 0d  eturn r;..    }.
a400: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
a410: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 63  ary>..    /// Sc
a420: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
a430: 20 69 6e 20 53 51 4c 69 74 65 20 69 73 20 64 69   in SQLite is di
a440: 66 66 69 63 75 6c 74 20 74 6f 20 6d 61 70 20 69  fficult to map i
a450: 6e 74 6f 20 2e 4e 45 54 20 63 6f 6e 76 65 6e 74  nto .NET convent
a460: 69 6f 6e 73 2c 20 73 6f 20 61 20 6c 6f 74 20 6f  ions, so a lot o
a470: 66 20 77 6f 72 6b 20 6d 75 73 74 20 62 65 20 64  f work must be d
a480: 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20  one..    /// to 
a490: 67 61 74 68 65 72 20 74 68 65 20 6e 65 63 65 73  gather the neces
a4a0: 73 61 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  sary information
a4b0: 20 73 6f 20 69 74 20 63 61 6e 20 62 65 20 72 65   so it can be re
a4c0: 70 72 65 73 65 6e 74 65 64 20 69 6e 20 61 6e 20  presented in an 
a4d0: 41 44 4f 2e 4e 45 54 20 6d 61 6e 6e 65 72 2e 0d  ADO.NET manner..
a4e0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
a4f0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
a500: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20  turns>Returns a 
a510: 44 61 74 61 54 61 62 6c 65 20 63 6f 6e 74 61 69  DataTable contai
a520: 6e 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61 20  ning the schema 
a530: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20  information for 
a540: 74 68 65 20 61 63 74 69 76 65 20 53 45 4c 45 43  the active SELEC
a550: 54 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  T statement bein
a560: 67 20 70 72 6f 63 65 73 73 65 64 2e 3c 2f 72 65  g processed.</re
a570: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
a580: 69 63 20 6f 76 65 72 72 69 64 65 20 44 61 74 61  ic override Data
a590: 54 61 62 6c 65 20 47 65 74 53 63 68 65 6d 61 54  Table GetSchemaT
a5a0: 61 62 6c 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  able()..    {.. 
a5b0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
a5c0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 72 65 74  ed();..      ret
a5d0: 75 72 6e 20 47 65 74 53 63 68 65 6d 61 54 61 62  urn GetSchemaTab
a5e0: 6c 65 28 74 72 75 65 2c 20 66 61 6c 73 65 29 3b  le(true, false);
a5f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
a600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a650: 20 20 23 72 65 67 69 6f 6e 20 43 6f 6c 75 6d 6e    #region Column
a660: 50 61 72 65 6e 74 20 43 6c 61 73 73 0d 0a 20 20  Parent Class..  
a670: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
a680: 20 63 6c 61 73 73 20 43 6f 6c 75 6d 6e 50 61 72   class ColumnPar
a690: 65 6e 74 20 3a 20 49 45 71 75 61 6c 69 74 79 43  ent : IEqualityC
a6a0: 6f 6d 70 61 72 65 72 3c 43 6f 6c 75 6d 6e 50 61  omparer<ColumnPa
a6b0: 72 65 6e 74 3e 0d 0a 20 20 20 20 7b 0d 0a 20 20  rent>..    {..  
a6c0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
a6d0: 62 6c 69 63 20 46 69 65 6c 64 73 0d 0a 20 20 20  blic Fields..   
a6e0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
a6f0: 6e 67 20 44 61 74 61 62 61 73 65 4e 61 6d 65 3b  ng DatabaseName;
a700: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
a710: 20 73 74 72 69 6e 67 20 54 61 62 6c 65 4e 61 6d   string TableNam
a720: 65 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  e;..        publ
a730: 69 63 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  ic string Column
a740: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 23  Name;..        #
a750: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
a760: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
a790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a7b0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
a7c0: 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74  Public Construct
a7d0: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ors..        pub
a7e0: 6c 69 63 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  lic ColumnParent
a7f0: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
a800: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
a810: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
a820: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a870: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a880: 20 20 20 70 75 62 6c 69 63 20 43 6f 6c 75 6d 6e     public Column
a890: 50 61 72 65 6e 74 28 0d 0a 20 20 20 20 20 20 20  Parent(..       
a8a0: 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74 61       string data
a8b0: 62 61 73 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  baseName,..     
a8c0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 61         string ta
a8d0: 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  bleName,..      
a8e0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6c        string col
a8f0: 75 6d 6e 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  umnName..       
a900: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
a910: 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20      : this()..  
a920: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a930: 20 20 20 20 20 74 68 69 73 2e 44 61 74 61 62 61       this.Databa
a940: 73 65 4e 61 6d 65 20 3d 20 64 61 74 61 62 61 73  seName = databas
a950: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
a960: 20 20 20 20 74 68 69 73 2e 54 61 62 6c 65 4e 61      this.TableNa
a970: 6d 65 20 3d 20 74 61 62 6c 65 4e 61 6d 65 3b 0d  me = tableName;.
a980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
a990: 73 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 20 3d 20 63  s.ColumnName = c
a9a0: 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20  olumnName;..    
a9b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
a9c0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
a9d0: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
aa20: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
aa30: 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61 72 65  IEqualityCompare
aa40: 72 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20  r<ColumnParent> 
aa50: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
aa60: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 45 71 75   public bool Equ
aa70: 61 6c 73 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  als(ColumnParent
aa80: 20 78 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74   x, ColumnParent
aa90: 20 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   y)..        {..
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
aab0: 28 78 20 3d 3d 20 6e 75 6c 6c 29 20 26 26 20 28  (x == null) && (
aac0: 79 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  y == null))..   
aad0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
aae0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
aaf0: 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
ab00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ab10: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28 78       else if ((x
ab20: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 79 20   == null) || (y 
ab30: 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
ab40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ab50: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
ab60: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
ab70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
ab80: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
ab90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
aba0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
abb0: 72 69 6e 67 2e 45 71 75 61 6c 73 28 78 2e 44 61  ring.Equals(x.Da
abc0: 74 61 62 61 73 65 4e 61 6d 65 2c 20 79 2e 44 61  tabaseName, y.Da
abd0: 74 61 62 61 73 65 4e 61 6d 65 2c 0d 0a 20 20 20  tabaseName,..   
abe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abf0: 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61       StringCompa
ac00: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
ac10: 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20  oreCase))..     
ac20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ac30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac40: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
ac50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ac60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ac70: 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
ac80: 67 2e 45 71 75 61 6c 73 28 78 2e 54 61 62 6c 65  g.Equals(x.Table
ac90: 4e 61 6d 65 2c 20 79 2e 54 61 62 6c 65 4e 61 6d  Name, y.TableNam
aca0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
acc0: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
acd0: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29  inalIgnoreCase))
ace0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
acf0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ad00: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ad10: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
ad20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ad40: 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
ad50: 78 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 79 2e  x.ColumnName, y.
ad60: 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 0d 0a 20 20 20  ColumnName,..   
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad80: 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61       StringCompa
ad90: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
ada0: 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20  oreCase))..     
adb0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
add0: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
ade0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
adf0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ae00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
ae10: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
ae20: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
ae30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ae40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ae80: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
ae90: 63 20 69 6e 74 20 47 65 74 48 61 73 68 43 6f 64  c int GetHashCod
aea0: 65 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6f  e(ColumnParent o
aeb0: 62 6a 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  bj)..        {..
aec0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
aed0: 72 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20  result = 0;.... 
aee0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
aef0: 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20  obj != null) && 
af00: 28 6f 62 6a 2e 44 61 74 61 62 61 73 65 4e 61 6d  (obj.DatabaseNam
af10: 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  e != null))..   
af20: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
af30: 75 6c 74 20 5e 3d 20 6f 62 6a 2e 44 61 74 61 62  ult ^= obj.Datab
af40: 61 73 65 4e 61 6d 65 2e 47 65 74 48 61 73 68 43  aseName.GetHashC
af50: 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ode();....      
af60: 20 20 20 20 20 20 69 66 20 28 28 6f 62 6a 20 21        if ((obj !
af70: 3d 20 6e 75 6c 6c 29 20 26 26 20 28 6f 62 6a 2e  = null) && (obj.
af80: 54 61 62 6c 65 4e 61 6d 65 20 21 3d 20 6e 75 6c  TableName != nul
af90: 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
afa0: 20 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f       result ^= o
afb0: 62 6a 2e 54 61 62 6c 65 4e 61 6d 65 2e 47 65 74  bj.TableName.Get
afc0: 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20  HashCode();.... 
afd0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
afe0: 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20  obj != null) && 
aff0: 28 6f 62 6a 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 20  (obj.ColumnName 
b000: 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  != null))..     
b010: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
b020: 74 20 5e 3d 20 6f 62 6a 2e 43 6f 6c 75 6d 6e 4e  t ^= obj.ColumnN
b030: 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28  ame.GetHashCode(
b040: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
b050: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
b060: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
b070: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
b080: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
b090: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
b0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b0f0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
b100: 76 6f 69 64 20 47 65 74 53 74 61 74 65 6d 65 6e  void GetStatemen
b110: 74 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 73 28 0d  tColumnParents(.
b120: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
b130: 61 73 65 20 73 71 6c 2c 0d 0a 20 20 20 20 20 20  ase sql,..      
b140: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
b150: 74 20 73 74 6d 74 2c 0d 0a 20 20 20 20 20 20 20  t stmt,..       
b160: 20 69 6e 74 20 66 69 65 6c 64 43 6f 75 6e 74 2c   int fieldCount,
b170: 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 44 69  ..        ref Di
b180: 63 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50  ctionary<ColumnP
b190: 61 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e  arent, List<int>
b1a0: 3e 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e  > parentToColumn
b1b0: 73 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  s,..        ref 
b1c0: 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74 2c 20  Dictionary<int, 
b1d0: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20 63 6f  ColumnParent> co
b1e0: 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 0d 0a 20 20  lumnToParent..  
b1f0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
b200: 20 20 20 20 20 20 20 20 69 66 20 28 70 61 72 65          if (pare
b210: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 3d 20 6e  ntToColumns == n
b220: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
b230: 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e    parentToColumn
b240: 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
b250: 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c  ry<ColumnParent,
b260: 20 4c 69 73 74 3c 69 6e 74 3e 3e 28 0d 0a 20 20   List<int>>(..  
b270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
b280: 77 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 29  w ColumnParent()
b290: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
b2a0: 20 28 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74   (columnToParent
b2b0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
b2c0: 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f 50         columnToP
b2d0: 61 72 65 6e 74 20 3d 20 6e 65 77 20 44 69 63 74  arent = new Dict
b2e0: 69 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75  ionary<int, Colu
b2f0: 6d 6e 50 61 72 65 6e 74 3e 28 29 3b 0d 0a 0d 0a  mnParent>();....
b300: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
b310: 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 66 69 65 6c   n = 0; n < fiel
b320: 64 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0d 0a 20 20  dCount; n++)..  
b330: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b340: 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74 61       string data
b350: 62 61 73 65 4e 61 6d 65 20 3d 20 73 71 6c 2e 43  baseName = sql.C
b360: 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d  olumnDatabaseNam
b370: 65 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a 20 20 20  e(stmt, n);..   
b380: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
b390: 74 61 62 6c 65 4e 61 6d 65 20 3d 20 73 71 6c 2e  tableName = sql.
b3a0: 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28  ColumnTableName(
b3b0: 73 74 6d 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20  stmt, n);..     
b3c0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
b3d0: 6c 75 6d 6e 4e 61 6d 65 20 3d 20 73 71 6c 2e 43  lumnName = sql.C
b3e0: 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d  olumnOriginalNam
b3f0: 65 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a 0d 0a 20  e(stmt, n);.... 
b400: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6c 75 6d             Colum
b410: 6e 50 61 72 65 6e 74 20 6b 65 79 20 3d 20 6e 65  nParent key = ne
b420: 77 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 64  w ColumnParent(d
b430: 61 74 61 62 61 73 65 4e 61 6d 65 2c 20 74 61 62  atabaseName, tab
b440: 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c 29 3b 0d 0a  leName, null);..
b450: 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6c 75              Colu
b460: 6d 6e 50 61 72 65 6e 74 20 76 61 6c 75 65 20 3d  mnParent value =
b470: 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65 6e   new ColumnParen
b480: 74 28 64 61 74 61 62 61 73 65 4e 61 6d 65 2c 20  t(databaseName, 
b490: 74 61 62 6c 65 4e 61 6d 65 2c 20 63 6f 6c 75 6d  tableName, colum
b4a0: 6e 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  nName);....     
b4b0: 20 20 20 20 20 20 20 4c 69 73 74 3c 69 6e 74 3e         List<int>
b4c0: 20 69 6e 64 65 78 4c 69 73 74 3b 0d 0a 0d 0a 20   indexList;.... 
b4d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
b4e0: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e  parentToColumns.
b4f0: 54 72 79 47 65 74 56 61 6c 75 65 28 6b 65 79 2c  TryGetValue(key,
b500: 20 6f 75 74 20 69 6e 64 65 78 4c 69 73 74 29 29   out indexList))
b510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b520: 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e    parentToColumn
b530: 73 2e 41 64 64 28 6b 65 79 2c 20 6e 65 77 20 4c  s.Add(key, new L
b540: 69 73 74 3c 69 6e 74 3e 28 6e 65 77 20 69 6e 74  ist<int>(new int
b550: 5b 5d 20 7b 20 6e 20 7d 29 29 3b 0d 0a 20 20 20  [] { n }));..   
b560: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
b570: 20 28 69 6e 64 65 78 4c 69 73 74 20 21 3d 20 6e   (indexList != n
b580: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
b590: 20 20 20 20 20 20 69 6e 64 65 78 4c 69 73 74 2e        indexList.
b5a0: 41 64 64 28 6e 29 3b 0d 0a 20 20 20 20 20 20 20  Add(n);..       
b5b0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
b5c0: 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65 6e             paren
b5d0: 74 54 6f 43 6f 6c 75 6d 6e 73 5b 6b 65 79 5d 20  tToColumns[key] 
b5e0: 3d 20 6e 65 77 20 4c 69 73 74 3c 69 6e 74 3e 28  = new List<int>(
b5f0: 6e 65 77 20 69 6e 74 5b 5d 20 7b 20 6e 20 7d 29  new int[] { n })
b600: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b610: 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 2e   columnToParent.
b620: 41 64 64 28 6e 2c 20 76 61 6c 75 65 29 3b 0d 0a  Add(n, value);..
b630: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
b640: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
b650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b690: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61  ///....    priva
b6a0: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 43 6f  te static int Co
b6b0: 75 6e 74 50 61 72 65 6e 74 73 28 0d 0a 20 20 20  untParents(..   
b6c0: 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79 3c       Dictionary<
b6d0: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69  ColumnParent, Li
b6e0: 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54  st<int>> parentT
b6f0: 6f 43 6f 6c 75 6d 6e 73 0d 0a 20 20 20 20 20 20  oColumns..      
b700: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
b710: 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d      int result =
b720: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69   0;....        i
b730: 66 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  f (parentToColum
b740: 6e 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns != null)..   
b750: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b760: 20 20 20 20 66 6f 72 65 61 63 68 20 28 43 6f 6c      foreach (Col
b770: 75 6d 6e 50 61 72 65 6e 74 20 6b 65 79 20 69 6e  umnParent key in
b780: 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73   parentToColumns
b790: 2e 4b 65 79 73 29 0d 0a 20 20 20 20 20 20 20 20  .Keys)..        
b7a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b7b0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
b7c0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
b7e0: 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
b7f0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
b800: 20 74 61 62 6c 65 4e 61 6d 65 20 3d 20 6b 65 79   tableName = key
b810: 2e 54 61 62 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  .TableName;.... 
b820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
b830: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
b840: 4f 72 45 6d 70 74 79 28 74 61 62 6c 65 4e 61 6d  OrEmpty(tableNam
b850: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
b860: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
b870: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
b880: 20 20 20 20 20 20 72 65 73 75 6c 74 2b 2b 3b 0d        result++;.
b890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b8a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b8b0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
b8c0: 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  lt;..    }....  
b8d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
b8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b920: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 44 61  .    internal Da
b930: 74 61 54 61 62 6c 65 20 47 65 74 53 63 68 65 6d  taTable GetSchem
b940: 61 54 61 62 6c 65 28 62 6f 6f 6c 20 77 61 6e 74  aTable(bool want
b950: 55 6e 69 71 75 65 49 6e 66 6f 2c 20 62 6f 6f 6c  UniqueInfo, bool
b960: 20 77 61 6e 74 44 65 66 61 75 6c 74 56 61 6c 75   wantDefaultValu
b970: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
b980: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
b990: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  ;..        if (_
b9a0: 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29  throwOnDisposed)
b9b0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43   SQLiteCommand.C
b9c0: 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d  heck(_command);.
b9d0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
b9e0: 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58         // BUGFIX
b9f0: 3a 20 57 65 20 6e 65 65 64 20 74 6f 20 71 75 69  : We need to qui
ba00: 63 6b 6c 79 20 73 63 61 6e 20 61 6c 6c 20 74 68  ckly scan all th
ba10: 65 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  e fields in the 
ba20: 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20  current..       
ba30: 20 2f 2f 20 20 20 20 20 20 20 20 20 22 72 65 73   //         "res
ba40: 75 6c 74 20 73 65 74 22 20 74 6f 20 73 65 65 20  ult set" to see 
ba50: 68 6f 77 20 6d 61 6e 79 20 64 69 73 74 69 6e 63  how many distinc
ba60: 74 20 74 61 62 6c 65 73 20 61 72 65 20 61 63 74  t tables are act
ba70: 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f  ually..        /
ba80: 2f 20 20 20 20 20 20 20 20 20 69 6e 76 6f 6c 76  /         involv
ba90: 65 64 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d  ed.  This inform
baa0: 61 74 69 6f 6e 20 69 73 20 6e 65 63 65 73 73 61  ation is necessa
bab0: 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 0d  ry so that some.
bac0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
bad0: 20 20 20 20 69 6e 74 65 6c 6c 69 67 65 6e 74 20      intelligent 
bae0: 64 65 63 69 73 69 6f 6e 73 20 63 61 6e 20 62 65  decisions can be
baf0: 20 6d 61 64 65 20 77 68 65 6e 20 63 6f 6e 73 74   made when const
bb00: 72 75 63 74 69 6e 67 20 74 68 65 0d 0a 20 20 20  ructing the..   
bb10: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
bb20: 6d 65 74 61 64 61 74 61 20 62 65 6c 6f 77 2e 20  metadata below. 
bb30: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 77 65   For example, we
bb40: 20 6e 65 65 64 20 74 6f 20 62 65 20 76 65 72 79   need to be very
bb50: 20 63 61 72 65 66 75 6c 0d 0a 20 20 20 20 20 20   careful..      
bb60: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 61 62 6f    //         abo
bb70: 75 74 20 66 6c 61 67 67 69 6e 67 20 61 20 70 61  ut flagging a pa
bb80: 72 74 69 63 75 6c 61 72 20 63 6f 6c 75 6d 6e 20  rticular column 
bb90: 61 73 20 22 75 6e 69 71 75 65 22 20 6a 75 73 74  as "unique" just
bba0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
bbb0: 20 20 20 20 20 62 65 63 61 75 73 65 20 69 74 20       because it 
bbc0: 77 61 73 20 69 6e 20 69 74 73 20 6f 72 69 67 69  was in its origi
bbd0: 6e 61 6c 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  nal underlying d
bbe0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 0d 0a 20  atabase table.. 
bbf0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
bc00: 20 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e    if there are n
bc10: 6f 77 20 6d 75 6c 74 69 70 6c 65 20 74 61 62 6c  ow multiple tabl
bc20: 65 73 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20 74  es involved in t
bc30: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  he..        //  
bc40: 20 20 20 20 20 20 20 22 72 65 73 75 6c 74 20 73         "result s
bc50: 65 74 22 2e 20 20 53 65 65 20 74 69 63 6b 65 74  et".  See ticket
bc60: 20 5b 37 65 33 66 61 39 33 37 34 34 5d 20 66 6f   [7e3fa93744] fo
bc70: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 65 64 0d  r more detailed.
bc80: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
bc90: 20 20 20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e      information.
bca0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
bcb0: 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79        Dictionary
bcc0: 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c  <ColumnParent, L
bcd0: 69 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74  ist<int>> parent
bce0: 54 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e 75 6c 6c  ToColumns = null
bcf0: 3b 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74 69  ;..        Dicti
bd00: 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d  onary<int, Colum
bd10: 6e 50 61 72 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54  nParent> columnT
bd20: 6f 50 61 72 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0d  oParent = null;.
bd30: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
bd40: 61 73 65 20 73 71 6c 20 3d 20 5f 63 6f 6d 6d 61  ase sql = _comma
bd50: 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73  nd.Connection._s
bd60: 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 47  ql;....        G
bd70: 65 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c 75 6d  etStatementColum
bd80: 6e 50 61 72 65 6e 74 73 28 0d 0a 20 20 20 20 20  nParents(..     
bd90: 20 20 20 20 20 20 20 73 71 6c 2c 20 5f 61 63 74         sql, _act
bda0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 5f 66  iveStatement, _f
bdb0: 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  ieldCount,..    
bdc0: 20 20 20 20 20 20 20 20 72 65 66 20 70 61 72 65          ref pare
bdd0: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 20 72 65 66  ntToColumns, ref
bde0: 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 29   columnToParent)
bdf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 61 74  ;....        Dat
be00: 61 54 61 62 6c 65 20 74 62 6c 20 3d 20 6e 65 77  aTable tbl = new
be10: 20 44 61 74 61 54 61 62 6c 65 28 22 53 63 68 65   DataTable("Sche
be20: 6d 61 54 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20  maTable");..    
be30: 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 74 62      DataTable tb
be40: 6c 49 6e 64 65 78 65 73 20 3d 20 6e 75 6c 6c 3b  lIndexes = null;
be50: 0d 0a 20 20 20 20 20 20 20 20 44 61 74 61 54 61  ..        DataTa
be60: 62 6c 65 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75  ble tblIndexColu
be70: 6d 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 44 61  mns;..        Da
be80: 74 61 52 6f 77 20 72 6f 77 3b 0d 0a 20 20 20 20  taRow row;..    
be90: 20 20 20 20 73 74 72 69 6e 67 20 74 65 6d 70 3b      string temp;
bea0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
beb0: 20 73 74 72 43 61 74 61 6c 6f 67 20 3d 20 53 74   strCatalog = St
bec0: 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20  ring.Empty;..   
bed0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 54       string strT
bee0: 61 62 6c 65 20 3d 20 53 74 72 69 6e 67 2e 45 6d  able = String.Em
bef0: 70 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 73 74  pty;..        st
bf00: 72 69 6e 67 20 73 74 72 43 6f 6c 75 6d 6e 20 3d  ring strColumn =
bf10: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a   String.Empty;..
bf20: 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 4c 6f  ..        tbl.Lo
bf30: 63 61 6c 65 20 3d 20 43 75 6c 74 75 72 65 49 6e  cale = CultureIn
bf40: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
bf50: 75 72 65 3b 0d 0a 20 20 20 20 20 20 20 20 74 62  ure;..        tb
bf60: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
bf70: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
bf80: 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65  ColumnName, type
bf90: 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20  of(String));..  
bfa0: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
bfb0: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
bfc0: 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72  eColumn.ColumnOr
bfd0: 64 69 6e 61 6c 2c 20 74 79 70 65 6f 66 28 69 6e  dinal, typeof(in
bfe0: 74 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62  t));..        tb
bff0: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c000: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c010: 43 6f 6c 75 6d 6e 53 69 7a 65 2c 20 74 79 70 65  ColumnSize, type
c020: 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20  of(int));..     
c030: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
c040: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
c050: 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63  lumn.NumericPrec
c060: 69 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 69 6e  ision, typeof(in
c070: 74 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62  t));..        tb
c080: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c090: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c0a0: 4e 75 6d 65 72 69 63 53 63 61 6c 65 2c 20 74 79  NumericScale, ty
c0b0: 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20  peof(int));..   
c0c0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c0d0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c0e0: 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 2c  Column.IsUnique,
c0f0: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
c100: 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e  );..        tbl.
c110: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
c120: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
c130: 4b 65 79 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  Key, typeof(Bool
c140: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ean));..        
c150: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c160: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
c170: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 65  nalColumn.BaseSe
c180: 72 76 65 72 4e 61 6d 65 2c 20 74 79 70 65 6f 66  rverName, typeof
c190: 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (string));..    
c1a0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c1b0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
c1c0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61  ptionalColumn.Ba
c1d0: 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 20 74  seCatalogName, t
c1e0: 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d  ypeof(String));.
c1f0: 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  .        tbl.Col
c200: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
c210: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  ableColumn.BaseC
c220: 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65 6f  olumnName, typeo
c230: 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20  f(String));..   
c240: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c250: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c260: 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 63 68 65 6d  Column.BaseSchem
c270: 61 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74  aName, typeof(St
c280: 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 20  ring));..       
c290: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c2a0: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
c2b0: 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65  mn.BaseTableName
c2c0: 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29  , typeof(String)
c2d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e  );..        tbl.
c2e0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
c2f0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61  maTableColumn.Da
c300: 74 61 54 79 70 65 2c 20 74 79 70 65 6f 66 28 54  taType, typeof(T
c310: 79 70 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ype));..        
c320: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c330: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c340: 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 2c 20 74  n.AllowDBNull, t
c350: 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b  ypeof(Boolean));
c360: 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f  ..        tbl.Co
c370: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
c380: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f 76  TableColumn.Prov
c390: 69 64 65 72 54 79 70 65 2c 20 74 79 70 65 6f 66  iderType, typeof
c3a0: 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20 20  (int));..       
c3b0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c3c0: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
c3d0: 6d 6e 2e 49 73 41 6c 69 61 73 65 64 2c 20 74 79  mn.IsAliased, ty
c3e0: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d  peof(Boolean));.
c3f0: 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  .        tbl.Col
c400: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
c410: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45 78 70  ableColumn.IsExp
c420: 72 65 73 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28  ression, typeof(
c430: 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20  Boolean));..    
c440: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c450: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
c460: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
c470: 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 2c 20 74  AutoIncrement, t
c480: 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b  ypeof(Boolean));
c490: 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f  ..        tbl.Co
c4a0: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
c4b0: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
c4c0: 75 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e  umn.IsRowVersion
c4d0: 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e  , typeof(Boolean
c4e0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c  ));..        tbl
c4f0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
c500: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
c510: 43 6f 6c 75 6d 6e 2e 49 73 48 69 64 64 65 6e 2c  Column.IsHidden,
c520: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
c530: 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e  );..        tbl.
c540: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
c550: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
c560: 4c 6f 6e 67 2c 20 74 79 70 65 6f 66 28 42 6f 6f  Long, typeof(Boo
c570: 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20  lean));..       
c580: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c590: 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  (SchemaTableOpti
c5a0: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65 61  onalColumn.IsRea
c5b0: 64 4f 6e 6c 79 2c 20 74 79 70 65 6f 66 28 42 6f  dOnly, typeof(Bo
c5c0: 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20  olean));..      
c5d0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c5e0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
c5f0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 50 72 6f 76  ionalColumn.Prov
c600: 69 64 65 72 53 70 65 63 69 66 69 63 44 61 74 61  iderSpecificData
c610: 54 79 70 65 2c 20 74 79 70 65 6f 66 28 54 79 70  Type, typeof(Typ
c620: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62  e));..        tb
c630: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c640: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
c650: 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74 56  lColumn.DefaultV
c660: 61 6c 75 65 2c 20 74 79 70 65 6f 66 28 6f 62 6a  alue, typeof(obj
c670: 65 63 74 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ect));..        
c680: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c690: 22 44 61 74 61 54 79 70 65 4e 61 6d 65 22 2c 20  "DataTypeName", 
c6a0: 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b  typeof(string));
c6b0: 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f  ..        tbl.Co
c6c0: 6c 75 6d 6e 73 2e 41 64 64 28 22 43 6f 6c 6c 61  lumns.Add("Colla
c6d0: 74 69 6f 6e 54 79 70 65 22 2c 20 74 79 70 65 6f  tionType", typeo
c6e0: 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20  f(string));..   
c6f0: 20 20 20 20 20 74 62 6c 2e 42 65 67 69 6e 4c 6f       tbl.BeginLo
c700: 61 64 44 61 74 61 28 29 3b 0d 0a 0d 0a 20 20 20  adData();....   
c710: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20       for (int n 
c720: 3d 20 30 3b 20 6e 20 3c 20 5f 66 69 65 6c 64 43  = 0; n < _fieldC
c730: 6f 75 6e 74 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20  ount; n++)..    
c740: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c750: 20 20 20 53 51 4c 69 74 65 54 79 70 65 20 73 71     SQLiteType sq
c760: 6c 54 79 70 65 20 3d 20 47 65 74 53 51 4c 69 74  lType = GetSQLit
c770: 65 54 79 70 65 28 5f 66 6c 61 67 73 2c 20 6e 29  eType(_flags, n)
c780: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c790: 20 72 6f 77 20 3d 20 74 62 6c 2e 4e 65 77 52 6f   row = tbl.NewRo
c7a0: 77 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  w();....        
c7b0: 20 20 20 20 44 62 54 79 70 65 20 74 79 70 20 3d      DbType typ =
c7c0: 20 73 71 6c 54 79 70 65 2e 54 79 70 65 3b 0d 0a   sqlType.Type;..
c7d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
c7e0: 20 44 65 66 61 75 6c 74 20 73 65 74 74 69 6e 67   Default setting
c7f0: 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
c800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 6f  ..            ro
c810: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
c820: 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20  umn.ColumnName] 
c830: 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0d 0a 20  = GetName(n);.. 
c840: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
c850: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
c860: 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 5d 20  .ColumnOrdinal] 
c870: 3d 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = n;..          
c880: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
c890: 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69  eColumn.ColumnSi
c8a0: 7a 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76  ze] = SQLiteConv
c8b0: 65 72 74 2e 44 62 54 79 70 65 54 6f 43 6f 6c 75  ert.DbTypeToColu
c8c0: 6d 6e 53 69 7a 65 28 74 79 70 29 3b 0d 0a 20 20  mnSize(typ);..  
c8d0: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
c8e0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c8f0: 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e  NumericPrecision
c900: 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72  ] = SQLiteConver
c910: 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65 72 69  t.DbTypeToNumeri
c920: 63 50 72 65 63 69 73 69 6f 6e 28 74 79 70 29 3b  cPrecision(typ);
c930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 6f  ..            ro
c940: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
c950: 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c 65  umn.NumericScale
c960: 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72  ] = SQLiteConver
c970: 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65 72 69  t.DbTypeToNumeri
c980: 63 53 63 61 6c 65 28 74 79 70 29 3b 0d 0a 20 20  cScale(typ);..  
c990: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
c9a0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c9b0: 50 72 6f 76 69 64 65 72 54 79 70 65 5d 20 3d 20  ProviderType] = 
c9c0: 73 71 6c 54 79 70 65 2e 54 79 70 65 3b 0d 0a 20  sqlType.Type;.. 
c9d0: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
c9e0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
c9f0: 2e 49 73 4c 6f 6e 67 5d 20 3d 20 66 61 6c 73 65  .IsLong] = false
ca00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
ca10: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
ca20: 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c  lumn.AllowDBNull
ca30: 5d 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  ] = true;..     
ca40: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
ca50: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
ca60: 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 5d  lumn.IsReadOnly]
ca70: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
ca80: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
ca90: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
caa0: 6c 75 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f  lumn.IsRowVersio
cab0: 6e 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  n] = false;..   
cac0: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
cad0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49  emaTableColumn.I
cae0: 73 55 6e 69 71 75 65 5d 20 3d 20 66 61 6c 73 65  sUnique] = false
caf0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
cb00: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
cb10: 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20 66 61  lumn.IsKey] = fa
cb20: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
cb30: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
cb40: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
cb50: 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 5d  IsAutoIncrement]
cb60: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
cb70: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
cb80: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74  aTableColumn.Dat
cb90: 61 54 79 70 65 5d 20 3d 20 47 65 74 46 69 65 6c  aType] = GetFiel
cba0: 64 54 79 70 65 28 6e 29 3b 0d 0a 20 20 20 20 20  dType(n);..     
cbb0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
cbc0: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
cbd0: 6c 75 6d 6e 2e 49 73 48 69 64 64 65 6e 5d 20 3d  lumn.IsHidden] =
cbe0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
cbf0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
cc00: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 53  ableColumn.BaseS
cc10: 63 68 65 6d 61 4e 61 6d 65 5d 20 3d 20 5f 62 61  chemaName] = _ba
cc20: 73 65 53 63 68 65 6d 61 4e 61 6d 65 3b 0d 0a 0d  seSchemaName;...
cc30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
cc40: 43 6f 6c 75 6d 6e 20 3d 20 63 6f 6c 75 6d 6e 54  Column = columnT
cc50: 6f 50 61 72 65 6e 74 5b 6e 5d 2e 43 6f 6c 75 6d  oParent[n].Colum
cc60: 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  nName;..        
cc70: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
cc80: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72  sNullOrEmpty(str
cc90: 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65  Column) == false
cca0: 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  ) row[SchemaTabl
ccb0: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75  eColumn.BaseColu
ccc0: 6d 6e 4e 61 6d 65 5d 20 3d 20 73 74 72 43 6f 6c  mnName] = strCol
ccd0: 75 6d 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  umn;....        
cce0: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
ccf0: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45 78 70 72  bleColumn.IsExpr
cd00: 65 73 73 69 6f 6e 5d 20 3d 20 53 74 72 69 6e 67  ession] = String
cd10: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73  .IsNullOrEmpty(s
cd20: 74 72 43 6f 6c 75 6d 6e 29 3b 0d 0a 20 20 20 20  trColumn);..    
cd30: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
cd40: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
cd50: 41 6c 69 61 73 65 64 5d 20 3d 20 28 53 74 72 69  Aliased] = (Stri
cd60: 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4e 61  ng.Compare(GetNa
cd70: 6d 65 28 6e 29 2c 20 73 74 72 43 6f 6c 75 6d 6e  me(n), strColumn
cd80: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
cd90: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
cda0: 43 61 73 65 29 20 21 3d 20 30 29 3b 0d 0a 0d 0a  Case) != 0);....
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 6d 70              temp
cdc0: 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e   = columnToParen
cdd0: 74 5b 6e 5d 2e 54 61 62 6c 65 4e 61 6d 65 3b 0d  t[n].TableName;.
cde0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
cdf0: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
ce00: 45 6d 70 74 79 28 74 65 6d 70 29 20 3d 3d 20 66  Empty(temp) == f
ce10: 61 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61  alse) row[Schema
ce20: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
ce30: 54 61 62 6c 65 4e 61 6d 65 5d 20 3d 20 74 65 6d  TableName] = tem
ce40: 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  p;....          
ce50: 20 20 74 65 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54    temp = columnT
ce60: 6f 50 61 72 65 6e 74 5b 6e 5d 2e 44 61 74 61 62  oParent[n].Datab
ce70: 61 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  aseName;..      
ce80: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
ce90: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
cea0: 65 6d 70 29 20 3d 3d 20 66 61 6c 73 65 29 20 72  emp) == false) r
ceb0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
cec0: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73  tionalColumn.Bas
ced0: 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20 3d 20  eCatalogName] = 
cee0: 74 65 6d 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  temp;....       
cef0: 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74 61       string data
cf00: 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Type = null;..  
cf10: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20            // If 
cf20: 77 65 20 68 61 76 65 20 61 20 74 61 62 6c 65 2d  we have a table-
cf30: 62 6f 75 6e 64 20 63 6f 6c 75 6d 6e 2c 20 65 78  bound column, ex
cf40: 74 72 61 63 74 20 74 68 65 20 65 78 74 72 61 20  tract the extra 
cf50: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
cf60: 20 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20   it..           
cf70: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
cf80: 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43 6f 6c  llOrEmpty(strCol
cf90: 75 6d 6e 29 20 3d 3d 20 66 61 6c 73 65 29 0d 0a  umn) == false)..
cfa0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
cfc0: 74 72 69 6e 67 20 62 61 73 65 43 61 74 61 6c 6f  tring baseCatalo
cfd0: 67 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 45  gName = String.E
cfe0: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
cff0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 77           if (row
d000: 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  [SchemaTableOpti
d010: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  onalColumn.BaseC
d020: 61 74 61 6c 6f 67 4e 61 6d 65 5d 20 21 3d 20 44  atalogName] != D
d030: 42 4e 75 6c 6c 2e 56 61 6c 75 65 29 0d 0a 20 20  BNull.Value)..  
d040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d050: 20 20 62 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d    baseCatalogNam
d060: 65 20 3d 20 28 73 74 72 69 6e 67 29 72 6f 77 5b  e = (string)row[
d070: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
d080: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61  nalColumn.BaseCa
d090: 74 61 6c 6f 67 4e 61 6d 65 5d 3b 0d 0a 0d 0a 20  talogName];.... 
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
d0b0: 74 72 69 6e 67 20 62 61 73 65 54 61 62 6c 65 4e  tring baseTableN
d0c0: 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70  ame = String.Emp
d0d0: 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ty;....         
d0e0: 20 20 20 20 20 20 20 69 66 20 28 72 6f 77 5b 53         if (row[S
d0f0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
d100: 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 20  .BaseTableName] 
d110: 21 3d 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 29  != DBNull.Value)
d120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d130: 20 20 20 20 20 20 62 61 73 65 54 61 62 6c 65 4e        baseTableN
d140: 61 6d 65 20 3d 20 28 73 74 72 69 6e 67 29 72 6f  ame = (string)ro
d150: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
d160: 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d  umn.BaseTableNam
d170: 65 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e];....         
d180: 20 20 20 20 20 20 20 69 66 20 28 73 71 6c 2e 44         if (sql.D
d190: 6f 65 73 54 61 62 6c 65 45 78 69 73 74 28 62 61  oesTableExist(ba
d1a0: 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 20 62  seCatalogName, b
d1b0: 61 73 65 54 61 62 6c 65 4e 61 6d 65 29 29 0d 0a  aseTableName))..
d1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d1e0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 62 61         string ba
d1f0: 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 20 3d 20 53  seColumnName = S
d200: 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a  tring.Empty;....
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d220: 20 20 20 20 69 66 20 28 72 6f 77 5b 53 63 68 65      if (row[Sche
d230: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
d240: 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20 21 3d  seColumnName] !=
d250: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 29 0d 0a   DBNull.Value)..
d260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d270: 20 20 20 20 20 20 20 20 62 61 73 65 43 6f 6c 75          baseColu
d280: 6d 6e 4e 61 6d 65 20 3d 20 28 73 74 72 69 6e 67  mnName = (string
d290: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
d2a0: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d  Column.BaseColum
d2b0: 6e 4e 61 6d 65 5d 3b 0d 0a 0d 0a 20 20 20 20 20  nName];....     
d2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
d2d0: 74 72 69 6e 67 20 63 6f 6c 6c 53 65 71 20 3d 20  tring collSeq = 
d2e0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
d2f0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
d300: 62 4e 6f 74 4e 75 6c 6c 20 3d 20 66 61 6c 73 65  bNotNull = false
d310: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
d320: 20 20 20 20 20 20 20 62 6f 6f 6c 20 62 50 72 69         bool bPri
d330: 6d 61 72 79 4b 65 79 20 3d 20 66 61 6c 73 65 3b  maryKey = false;
d340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d350: 20 20 20 20 20 20 62 6f 6f 6c 20 62 41 75 74 6f        bool bAuto
d360: 49 6e 63 72 65 6d 65 6e 74 20 3d 20 66 61 6c 73  Increment = fals
d370: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
d380: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
d390: 20 61 72 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20   arSize;....    
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3b0: 2f 2f 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d  // Get the colum
d3c0: 6e 20 6d 65 74 61 20 64 61 74 61 0d 0a 20 20 20  n meta data..   
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3e0: 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63   _command.Connec
d3f0: 74 69 6f 6e 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  tion._sql.Column
d400: 4d 65 74 61 44 61 74 61 28 0d 0a 20 20 20 20 20  MetaData(..     
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d420: 20 20 20 62 61 73 65 43 61 74 61 6c 6f 67 4e 61     baseCatalogNa
d430: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73               bas
d450: 65 54 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  eTableName,..   
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d470: 20 20 20 20 20 73 74 72 43 6f 6c 75 6d 6e 2c 0d       strColumn,.
d480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d490: 20 20 20 20 20 20 20 20 20 74 72 75 65 2c 0d 0a           true,..
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4b0: 20 20 20 20 20 20 20 20 72 65 66 20 64 61 74 61          ref data
d4c0: 54 79 70 65 2c 20 72 65 66 20 63 6f 6c 6c 53 65  Type, ref collSe
d4d0: 71 2c 20 72 65 66 20 62 4e 6f 74 4e 75 6c 6c 2c  q, ref bNotNull,
d4e0: 20 72 65 66 20 62 50 72 69 6d 61 72 79 4b 65 79   ref bPrimaryKey
d4f0: 2c 20 72 65 66 20 62 41 75 74 6f 49 6e 63 72 65  , ref bAutoIncre
d500: 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ment);....      
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d520: 20 28 62 4e 6f 74 4e 75 6c 6c 20 7c 7c 20 62 50   (bNotNull || bP
d530: 72 69 6d 61 72 79 4b 65 79 29 20 72 6f 77 5b 53  rimaryKey) row[S
d540: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
d550: 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 20  .AllowDBNull] = 
d560: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
d570: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
d580: 20 61 6c 6c 6f 77 44 62 4e 75 6c 6c 20 3d 20 28   allowDbNull = (
d590: 62 6f 6f 6c 29 72 6f 77 5b 53 63 68 65 6d 61 54  bool)row[SchemaT
d5a0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77  ableColumn.Allow
d5b0: 44 42 4e 75 6c 6c 5d 3b 0d 0a 0d 0a 20 20 20 20  DBNull];....    
d5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5d0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
d5e0: 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20 62  olumn.IsKey] = b
d5f0: 50 72 69 6d 61 72 79 4b 65 79 20 26 26 20 43 6f  PrimaryKey && Co
d600: 75 6e 74 50 61 72 65 6e 74 73 28 70 61 72 65 6e  untParents(paren
d610: 74 54 6f 43 6f 6c 75 6d 6e 73 29 20 3c 3d 20 31  tToColumns) <= 1
d620: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
d630: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
d640: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
d650: 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65  lumn.IsAutoIncre
d660: 6d 65 6e 74 5d 20 3d 20 62 41 75 74 6f 49 6e 63  ment] = bAutoInc
d670: 72 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20  rement;..       
d680: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
d690: 5b 22 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 22  ["CollationType"
d6a0: 5d 20 3d 20 63 6f 6c 6c 53 65 71 3b 0d 0a 0d 0a  ] = collSeq;....
d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6c0: 20 20 20 20 2f 2f 20 46 6f 72 20 74 79 70 65 73      // For types
d6d0: 20 6c 69 6b 65 20 76 61 72 63 68 61 72 28 35 30   like varchar(50
d6e0: 29 20 61 6e 64 20 73 75 63 68 2c 20 65 78 74 72  ) and such, extr
d6f0: 61 63 74 20 74 68 65 20 73 69 7a 65 0d 0a 20 20  act the size..  
d700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d710: 20 20 61 72 53 69 7a 65 20 3d 20 64 61 74 61 54    arSize = dataT
d720: 79 70 65 2e 53 70 6c 69 74 28 27 28 27 29 3b 0d  ype.Split('(');.
d730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d740: 20 20 20 20 20 69 66 20 28 61 72 53 69 7a 65 2e       if (arSize.
d750: 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20 20  Length > 1)..   
d760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d770: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d780: 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
d790: 54 79 70 65 20 3d 20 61 72 53 69 7a 65 5b 30 5d  Type = arSize[0]
d7a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
d7b0: 20 20 20 20 20 20 20 20 20 20 20 61 72 53 69 7a             arSiz
d7c0: 65 20 3d 20 61 72 53 69 7a 65 5b 31 5d 2e 53 70  e = arSize[1].Sp
d7d0: 6c 69 74 28 27 29 27 29 3b 0d 0a 20 20 20 20 20  lit(')');..     
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7f0: 20 20 20 69 66 20 28 61 72 53 69 7a 65 2e 4c 65     if (arSize.Le
d800: 6e 67 74 68 20 3e 20 31 29 0d 0a 20 20 20 20 20  ngth > 1)..     
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d820: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d840: 20 20 61 72 53 69 7a 65 20 3d 20 61 72 53 69 7a    arSize = arSiz
d850: 65 5b 30 5d 2e 53 70 6c 69 74 28 27 2c 27 2c 20  e[0].Split(',', 
d860: 27 2e 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  '.');..         
d870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d880: 20 20 20 69 66 20 28 73 71 6c 54 79 70 65 2e 54     if (sqlType.T
d890: 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 42 69  ype == DbType.Bi
d8a0: 6e 61 72 79 20 7c 7c 20 53 51 4c 69 74 65 43 6f  nary || SQLiteCo
d8b0: 6e 76 65 72 74 2e 49 73 53 74 72 69 6e 67 44 62  nvert.IsStringDb
d8c0: 54 79 70 65 28 73 71 6c 54 79 70 65 2e 54 79 70  Type(sqlType.Typ
d8d0: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
d8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d910: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
d920: 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
d930: 53 69 7a 65 5d 20 3d 20 43 6f 6e 76 65 72 74 2e  Size] = Convert.
d940: 54 6f 49 6e 74 33 32 28 61 72 53 69 7a 65 5b 30  ToInt32(arSize[0
d950: 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49  ], CultureInfo.I
d960: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29  nvariantCulture)
d970: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
d980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
d990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
d9b0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
d9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9f0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
da00: 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63  leColumn.Numeric
da10: 50 72 65 63 69 73 69 6f 6e 5d 20 3d 20 43 6f 6e  Precision] = Con
da20: 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53  vert.ToInt32(arS
da30: 69 7a 65 5b 30 5d 2c 20 43 75 6c 74 75 72 65 49  ize[0], CultureI
da40: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
da50: 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  ture);..        
da60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da70: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69          if (arSi
da80: 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a  ze.Length > 1)..
da90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
daa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dab0: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
dac0: 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69  bleColumn.Numeri
dad0: 63 53 63 61 6c 65 5d 20 3d 20 43 6f 6e 76 65 72  cScale] = Conver
dae0: 74 2e 54 6f 49 6e 74 33 32 28 61 72 53 69 7a 65  t.ToInt32(arSize
daf0: 5b 31 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f  [1], CultureInfo
db00: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
db10: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
db20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db30: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
db40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
db70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
db80: 77 61 6e 74 44 65 66 61 75 6c 74 56 61 6c 75 65  wantDefaultValue
db90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
dba0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
dbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbc0: 20 20 2f 2f 20 44 65 74 65 72 6d 69 6e 65 20 74    // Determine t
dbd0: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
dbe0: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c   for the column,
dbf0: 20 77 68 69 63 68 20 73 75 63 6b 73 20 62 65 63   which sucks bec
dc00: 61 75 73 65 20 77 65 20 68 61 76 65 20 74 6f 20  ause we have to 
dc10: 71 75 65 72 79 20 74 68 65 20 73 63 68 65 6d 61  query the schema
dc20: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
dc30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dc40: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
dc50: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
dc60: 6d 64 54 61 62 6c 65 20 3d 20 6e 65 77 20 53 51  mdTable = new SQ
dc70: 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 48 65 6c 70  LiteCommand(Help
dc80: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
dc90: 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e  Format(CultureIn
dca0: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
dcb0: 75 72 65 2c 20 22 50 52 41 47 4d 41 20 5b 7b 30  ure, "PRAGMA [{0
dcc0: 7d 5d 2e 54 41 42 4c 45 5f 49 4e 46 4f 28 5b 7b  }].TABLE_INFO([{
dcd0: 31 7d 5d 29 22 2c 0d 0a 20 20 20 20 20 20 20 20  1}])",..        
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcf0: 20 20 20 20 62 61 73 65 43 61 74 61 6c 6f 67 4e      baseCatalogN
dd00: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd20: 20 20 62 61 73 65 54 61 62 6c 65 4e 61 6d 65 0d    baseTableName.
dd30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dd40: 20 20 20 20 20 20 20 20 20 29 2c 20 5f 63 6f 6d           ), _com
dd50: 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 29  mand.Connection)
dd60: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
dd70: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
dd80: 20 28 44 62 44 61 74 61 52 65 61 64 65 72 20 72   (DbDataReader r
dd90: 64 54 61 62 6c 65 20 3d 20 63 6d 64 54 61 62 6c  dTable = cmdTabl
dda0: 65 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28  e.ExecuteReader(
ddb0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dde0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69             // Fi
ddf0: 6e 64 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  nd the matching 
de00: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20  column..        
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de20: 20 20 20 20 77 68 69 6c 65 20 28 72 64 54 61 62      while (rdTab
de30: 6c 65 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20  le.Read())..    
de40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
de60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de70: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
de80: 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 62 61  tring.Compare(ba
de90: 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 72 64  seColumnName, rd
dea0: 54 61 62 6c 65 2e 47 65 74 53 74 72 69 6e 67 28  Table.GetString(
deb0: 31 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  1), StringCompar
dec0: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
ded0: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
df00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
df10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df20: 20 20 20 20 20 20 69 66 20 28 72 64 54 61 62 6c        if (rdTabl
df30: 65 2e 49 73 44 42 4e 75 6c 6c 28 34 29 20 3d 3d  e.IsDBNull(4) ==
df40: 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 20   false)..       
df50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df70: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
df80: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44  OptionalColumn.D
df90: 65 66 61 75 6c 74 56 61 6c 75 65 5d 20 3d 20 72  efaultValue] = r
dfa0: 64 54 61 62 6c 65 5b 34 5d 3b 0d 0a 0d 0a 20 20  dTable[4];....  
dfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfd0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dff0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e010: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e030: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
e040: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e060: 20 20 20 20 2f 2f 20 44 65 74 65 72 6d 69 6e 65      // Determine
e070: 20 49 73 55 6e 69 71 75 65 20 70 72 6f 70 65 72   IsUnique proper
e080: 6c 79 2c 20 77 68 69 63 68 20 69 73 20 61 20 70  ly, which is a p
e090: 61 69 6e 20 69 6e 20 74 68 65 20 62 75 74 74 21  ain in the butt!
e0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e0b0: 20 20 20 20 20 20 69 66 20 28 77 61 6e 74 55 6e        if (wantUn
e0c0: 69 71 75 65 49 6e 66 6f 29 0d 0a 20 20 20 20 20  iqueInfo)..     
e0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
e0e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e0f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 61            if (ba
e100: 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 20 21 3d  seCatalogName !=
e110: 20 73 74 72 43 61 74 61 6c 6f 67 20 7c 7c 20 62   strCatalog || b
e120: 61 73 65 54 61 62 6c 65 4e 61 6d 65 20 21 3d 20  aseTableName != 
e130: 73 74 72 54 61 62 6c 65 29 0d 0a 20 20 20 20 20  strTable)..     
e140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e150: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e170: 20 20 73 74 72 43 61 74 61 6c 6f 67 20 3d 20 62    strCatalog = b
e180: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 3b 0d  aseCatalogName;.
e190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
e1b0: 54 61 62 6c 65 20 3d 20 62 61 73 65 54 61 62 6c  Table = baseTabl
e1c0: 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1e0: 20 20 20 20 20 20 74 62 6c 49 6e 64 65 78 65 73        tblIndexes
e1f0: 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e   = _command.Conn
e200: 65 63 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61  ection.GetSchema
e210: 28 22 49 6e 64 65 78 65 73 22 2c 20 6e 65 77 20  ("Indexes", new 
e220: 73 74 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20  string[] {..    
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e240: 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73 65              base
e250: 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 0d 0a 20 20  CatalogName,..  
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75                nu
e280: 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
e290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2a0: 20 20 20 20 20 62 61 73 65 54 61 62 6c 65 4e 61       baseTableNa
e2b0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2d0: 20 20 20 20 20 6e 75 6c 6c 0d 0a 20 20 20 20 20       null..     
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2f0: 20 20 20 20 20 20 20 7d 29 3b 0d 0a 20 20 20 20         });..    
e300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e310: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
e320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e330: 20 66 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f   foreach (DataRo
e340: 77 20 72 6f 77 49 6e 64 65 78 65 73 20 69 6e 20  w rowIndexes in 
e350: 74 62 6c 49 6e 64 65 78 65 73 2e 52 6f 77 73 29  tblIndexes.Rows)
e360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e370: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e390: 20 20 20 20 20 20 20 20 20 74 62 6c 49 6e 64 65           tblInde
e3a0: 78 43 6f 6c 75 6d 6e 73 20 3d 20 5f 63 6f 6d 6d  xColumns = _comm
e3b0: 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47  and.Connection.G
e3c0: 65 74 53 63 68 65 6d 61 28 22 49 6e 64 65 78 43  etSchema("IndexC
e3d0: 6f 6c 75 6d 6e 73 22 2c 20 6e 65 77 20 73 74 72  olumns", new str
e3e0: 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ing[] {..       
e3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e400: 20 20 20 20 20 20 20 20 20 62 61 73 65 43 61 74           baseCat
e410: 61 6c 6f 67 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  alogName,..     
e420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e430: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
e440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e460: 20 20 62 61 73 65 54 61 62 6c 65 4e 61 6d 65 2c    baseTableName,
e470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e490: 20 20 28 73 74 72 69 6e 67 29 72 6f 77 49 6e 64    (string)rowInd
e4a0: 65 78 65 73 5b 22 49 4e 44 45 58 5f 4e 41 4d 45  exes["INDEX_NAME
e4b0: 22 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "],..           
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4d0: 20 20 20 20 20 6e 75 6c 6c 0d 0a 20 20 20 20 20       null..     
e4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4f0: 20 20 20 20 20 20 20 7d 29 3b 0d 0a 20 20 20 20         });..    
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e510: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
e520: 28 44 61 74 61 52 6f 77 20 72 6f 77 43 6f 6c 75  (DataRow rowColu
e530: 6d 6e 49 6e 64 65 78 20 69 6e 20 74 62 6c 49 6e  mnIndex in tblIn
e540: 64 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73 29  dexColumns.Rows)
e550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
e570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e590: 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70   if (String.Comp
e5a0: 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 76 65 72  are(SQLiteConver
e5b0: 74 2e 47 65 74 53 74 72 69 6e 67 4f 72 4e 75 6c  t.GetStringOrNul
e5c0: 6c 28 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64 65 78  l(rowColumnIndex
e5d0: 5b 22 43 4f 4c 55 4d 4e 5f 4e 41 4d 45 22 5d 29  ["COLUMN_NAME"])
e5e0: 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c 20 53 74 72  , strColumn, Str
e5f0: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
e600: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
e610: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
e620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e630: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e660: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
e670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e680: 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58         // BUGFIX
e690: 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  : Make sure that
e6a0: 20 77 65 20 6f 6e 6c 79 20 66 6c 61 67 20 74 68   we only flag th
e6b0: 69 73 20 63 6f 6c 75 6d 6e 20 61 73 20 22 75 6e  is column as "un
e6c0: 69 71 75 65 22 0d 0a 20 20 20 20 20 20 20 20 20  ique"..         
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
e6f0: 20 20 20 20 20 20 69 66 20 77 65 20 61 72 65 20        if we are 
e700: 6e 6f 74 20 70 72 6f 63 65 73 73 69 6e 67 20 6f  not processing o
e710: 66 20 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20 6d  f some kind of m
e720: 75 6c 74 69 2d 74 61 62 6c 65 0d 0a 20 20 20 20  ulti-table..    
e730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e750: 2f 2f 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74  //         const
e760: 72 75 63 74 20 28 69 2e 65 2e 20 61 20 6a 6f 69  ruct (i.e. a joi
e770: 6e 29 20 62 65 63 61 75 73 65 20 69 6e 20 74 68  n) because in th
e780: 61 74 20 63 61 73 65 20 77 65 20 6d 75 73 74 0d  at case we must.
e790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7b0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
e7c0: 61 6c 6c 6f 77 20 64 75 70 6c 69 63 61 74 65 20  allow duplicate 
e7d0: 76 61 6c 75 65 73 20 28 72 65 66 65 72 20 74 6f  values (refer to
e7e0: 20 74 69 63 6b 65 74 20 5b 37 65 33 66 61 39 33   ticket [7e3fa93
e7f0: 37 34 34 5d 29 2e 0d 0a 20 20 20 20 20 20 20 20  744])...        
e800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e810: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e840: 20 20 20 20 69 66 20 28 70 61 72 65 6e 74 54 6f      if (parentTo
e850: 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 20 3d 3d  Columns.Count ==
e860: 20 31 20 26 26 20 74 62 6c 49 6e 64 65 78 43 6f   1 && tblIndexCo
e870: 6c 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74  lumns.Rows.Count
e880: 20 3d 3d 20 31 20 26 26 20 61 6c 6c 6f 77 44 62   == 1 && allowDb
e890: 4e 75 6c 6c 20 3d 3d 20 66 61 6c 73 65 29 0d 0a  Null == false)..
e8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8c0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
e8d0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
e8e0: 55 6e 69 71 75 65 5d 20 3d 20 72 6f 77 49 6e 64  Unique] = rowInd
e8f0: 65 78 65 73 5b 22 55 4e 49 51 55 45 22 5d 3b 0d  exes["UNIQUE"];.
e900: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e920: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 69 74 73         // If its
e930: 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d   an integer prim
e940: 61 72 79 20 6b 65 79 20 61 6e 64 20 74 68 65 20  ary key and the 
e950: 6f 6e 6c 79 20 70 72 69 6d 61 72 79 20 6b 65 79  only primary key
e960: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 74   in the table, t
e970: 68 65 6e 20 69 74 73 20 61 20 72 6f 77 69 64 20  hen its a rowid 
e980: 61 6c 69 61 73 20 61 6e 64 20 69 73 20 61 75 74  alias and is aut
e990: 6f 69 6e 63 72 65 6d 65 6e 74 0d 0a 20 20 20 20  oincrement..    
e9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9c0: 2f 2f 20 4e 4f 54 45 3a 20 20 43 75 72 72 65 6e  // NOTE:  Curren
e9d0: 74 6c 79 20 63 6f 6d 6d 65 6e 74 65 64 20 6f 75  tly commented ou
e9e0: 74 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69  t because this i
e9f0: 73 20 6e 6f 74 20 61 6c 77 61 79 73 20 74 68 65  s not always the
ea00: 20 64 65 73 69 72 65 64 20 62 65 68 61 76 69 6f   desired behavio
ea10: 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  r.  For example,
ea20: 20 61 20 31 3a 31 20 72 65 6c 61 74 69 6f 6e 73   a 1:1 relations
ea30: 68 69 70 20 77 69 74 68 0d 0a 20 20 20 20 20 20  hip with..      
ea40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ea60: 20 20 20 20 20 20 20 20 61 6e 6f 74 68 65 72 20          another 
ea70: 74 61 62 6c 65 2c 20 77 68 65 72 65 20 74 68 65  table, where the
ea80: 20 6f 74 68 65 72 20 74 61 62 6c 65 20 69 73 20   other table is 
ea90: 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 2c 20 62  autoincrement, b
eaa0: 75 74 20 74 68 69 73 20 6f 6e 65 20 69 73 20 6e  ut this one is n
eab0: 6f 74 2c 20 61 6e 64 20 75 73 65 73 20 74 68 65  ot, and uses the
eac0: 20 72 6f 77 69 64 20 66 72 6f 6d 20 74 68 65 20   rowid from the 
ead0: 6f 74 68 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  other...        
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
eb00: 20 20 20 20 20 20 49 74 20 69 73 20 73 61 66 65        It is safe
eb10: 72 20 74 6f 20 6f 6e 6c 79 20 73 65 74 20 41 75  r to only set Au
eb20: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 6f 6e 20 74  toincrement on t
eb30: 61 62 6c 65 73 20 77 68 65 72 65 20 77 65 27 72  ables where we'r
eb40: 65 20 53 55 52 45 20 74 68 65 20 75 73 65 72 20  e SURE the user 
eb50: 73 70 65 63 69 66 69 65 64 20 41 55 54 4f 49 4e  specified AUTOIN
eb60: 43 52 45 4d 45 4e 54 2c 20 65 76 65 6e 20 69 66  CREMENT, even if
eb70: 20 69 74 73 20 61 20 72 6f 77 69 64 20 63 6f 6c   its a rowid col
eb80: 75 6d 6e 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  umn.....        
eb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eba0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
ebb0: 20 28 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e   (tblIndexColumn
ebc0: 73 2e 52 6f 77 73 2e 43 6f 75 6e 74 20 3d 3d 20  s.Rows.Count == 
ebd0: 31 20 26 26 20 28 62 6f 6f 6c 29 72 6f 77 49 6e  1 && (bool)rowIn
ebe0: 64 65 78 65 73 5b 22 50 52 49 4d 41 52 59 5f 4b  dexes["PRIMARY_K
ebf0: 45 59 22 5d 20 3d 3d 20 74 72 75 65 20 26 26 20  EY"] == true && 
ec00: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
ec10: 6d 70 74 79 28 64 61 74 61 54 79 70 65 29 20 3d  mpty(dataType) =
ec20: 3d 20 66 61 6c 73 65 20 26 26 0d 0a 20 20 20 20  = false &&..    
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec50: 2f 2f 20 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61  //  String.Compa
ec60: 72 65 28 64 61 74 61 54 79 70 65 2c 20 22 69 6e  re(dataType, "in
ec70: 74 65 67 65 72 22 2c 20 53 74 72 69 6e 67 43 6f  teger", StringCo
ec80: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
ec90: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
eca0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ecb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecc0: 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20         //{..    
ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecf0: 2f 2f 20 20 20 20 2f 2f 20 20 72 6f 77 5b 53 63  //    //  row[Sc
ed00: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
ed10: 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e  lColumn.IsAutoIn
ed20: 63 72 65 6d 65 6e 74 5d 20 3d 20 74 72 75 65 3b  crement] = true;
ed30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed50: 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20        //}....   
ed60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed80: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
ed90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eda0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
edb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edc0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ede0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
edf0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
ee00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
ee10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ee20: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
ee30: 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61 74 61 54  ullOrEmpty(dataT
ee40: 79 70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ype))..         
ee50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 79                Ty
ee70: 70 65 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e  peAffinity affin
ee80: 20 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e   = TypeAffinity.
ee90: 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3b 0d 0a  Uninitialized;..
eea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eeb0: 20 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 5f      dataType = _
eec0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
eed0: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28  _sql.ColumnType(
eee0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
eef0: 2c 20 6e 2c 20 72 65 66 20 61 66 66 69 6e 29 3b  , n, ref affin);
ef00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ef10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
ef20: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
ef30: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
ef40: 64 61 74 61 54 79 70 65 29 20 3d 3d 20 66 61 6c  dataType) == fal
ef50: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
ef60: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 22 44 61           row["Da
ef70: 74 61 54 79 70 65 4e 61 6d 65 22 5d 20 3d 20 64  taTypeName"] = d
ef80: 61 74 61 54 79 70 65 3b 0d 0a 20 20 20 20 20 20  ataType;..      
ef90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
efa0: 20 20 20 20 20 20 20 74 62 6c 2e 52 6f 77 73 2e         tbl.Rows.
efb0: 41 64 64 28 72 6f 77 29 3b 0d 0a 20 20 20 20 20  Add(row);..     
efc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
efd0: 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20  if (_keyInfo != 
efe0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
eff0: 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 41 70 70 65     _keyInfo.Appe
f000: 6e 64 53 63 68 65 6d 61 54 61 62 6c 65 28 74 62  ndSchemaTable(tb
f010: 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  l);....        t
f020: 62 6c 2e 41 63 63 65 70 74 43 68 61 6e 67 65 73  bl.AcceptChanges
f030: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c  ();..        tbl
f040: 2e 45 6e 64 4c 6f 61 64 44 61 74 61 28 29 3b 0d  .EndLoadData();.
f050: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
f060: 6e 20 74 62 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  n tbl;..    }...
f070: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
f080: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  y>..    /// Retr
f090: 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  ieves the column
f0a0: 20 61 73 20 61 20 73 74 72 69 6e 67 0d 0a 20 20   as a string..  
f0b0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
f0c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
f0d0: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
f0e0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
f0f0: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
f100: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72  /// <returns>str
f110: 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ing</returns>.. 
f120: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
f130: 64 65 20 73 74 72 69 6e 67 20 47 65 74 53 74 72  de string GetStr
f140: 69 6e 67 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ing(int i)..    
f150: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
f160: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
f170: 20 20 20 20 20 56 65 72 69 66 79 46 6f 72 47 65       VerifyForGe
f180: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
f190: 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  if (HelperMethod
f1a0: 73 2e 48 61 73 46 6c 61 67 73 28 5f 66 6c 61 67  s.HasFlags(_flag
f1b0: 73 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  s, SQLiteConnect
f1c0: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
f1d0: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
f1e0: 61 6c 6c 62 61 63 6b 73 29 29 0d 0a 20 20 20 20  allbacks))..    
f1f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f200: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
f210: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
f220: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
f230: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
f240: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
f250: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
f260: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
f270: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
f280: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
f290: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
f2a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f2b0: 20 20 20 22 47 65 74 53 74 72 69 6e 67 22 2c 20     "GetString", 
f2c0: 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75  null, value), ou
f2d0: 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a  t complete);....
f2e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
f2f0: 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20  complete)..     
f300: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
f310: 6e 20 76 61 6c 75 65 2e 53 74 72 69 6e 67 56 61  n value.StringVa
f320: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  lue;..        }.
f330: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
f340: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
f350: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
f360: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
f370: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
f380: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
f390: 65 74 53 74 72 69 6e 67 28 69 20 2d 20 50 72 69  etString(i - Pri
f3a0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
f3b0: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
f3c0: 20 20 20 69 66 20 28 21 48 65 6c 70 65 72 4d 65     if (!HelperMe
f3d0: 74 68 6f 64 73 2e 48 61 73 46 6c 61 67 73 28 5f  thods.HasFlags(_
f3e0: 66 6c 61 67 73 2c 20 53 51 4c 69 74 65 43 6f 6e  flags, SQLiteCon
f3f0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56  nectionFlags.NoV
f400: 65 72 69 66 79 54 65 78 74 41 66 66 69 6e 69 74  erifyTextAffinit
f410: 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
f420: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
f430: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 3b 0d 0a  bType.String);..
f440: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
f450: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
f460: 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f  t._sql.GetText(_
f470: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
f480: 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   i);..    }.... 
f490: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
f4a0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  ..    /// Retrie
f4b0: 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  ves the column a
f4c0: 73 20 61 6e 20 6f 62 6a 65 63 74 20 63 6f 72 72  s an object corr
f4d0: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65  esponding to the
f4e0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61   underlying data
f4f0: 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  type of the colu
f500: 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  mn..    /// </su
f510: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
f520: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
f530: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
f540: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
f550: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
f560: 6e 73 3e 6f 62 6a 65 63 74 3c 2f 72 65 74 75 72  ns>object</retur
f570: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
f580: 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20  override object 
f590: 47 65 74 56 61 6c 75 65 28 69 6e 74 20 69 29 0d  GetValue(int i).
f5a0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
f5b0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
f5c0: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
f5d0: 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20  ForGet();....   
f5e0: 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d       if (HelperM
f5f0: 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67 73 28  ethods.HasFlags(
f600: 5f 66 6c 61 67 73 2c 20 53 51 4c 69 74 65 43 6f  _flags, SQLiteCo
f610: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
f620: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
f630: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 29 0d  alueCallbacks)).
f640: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
f650: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
f660: 74 61 52 65 61 64 65 72 56 61 6c 75 65 20 76 61  taReaderValue va
f670: 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  lue = new SQLite
f680: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 28  DataReaderValue(
f690: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
f6a0: 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a  bool complete;..
f6b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
f6c0: 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c  vokeReadValueCal
f6d0: 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c  lback(i, new SQL
f6e0: 69 74 65 52 65 61 64 56 61 6c 75 65 45 76 65 6e  iteReadValueEven
f6f0: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
f700: 20 20 20 20 20 20 20 20 22 47 65 74 56 61 6c 75          "GetValu
f710: 65 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29  e", null, value)
f720: 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b  , out complete);
f730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f740: 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20  if (complete).. 
f750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
f760: 65 74 75 72 6e 20 76 61 6c 75 65 2e 56 61 6c 75  eturn value.Valu
f770: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
f780: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
f790: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
f7a0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
f7b0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
f7c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
f7d0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
f7e0: 56 61 6c 75 65 28 69 20 2d 20 50 72 69 76 61 74  Value(i - Privat
f7f0: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
f800: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
f810: 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 20 3d  SQLiteType typ =
f820: 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 5f   GetSQLiteType(_
f830: 66 6c 61 67 73 2c 20 69 29 3b 0d 0a 0d 0a 20 20  flags, i);....  
f840: 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72        if (Helper
f850: 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67 73  Methods.HasFlags
f860: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f870: 20 20 20 5f 66 6c 61 67 73 2c 20 53 51 4c 69 74     _flags, SQLit
f880: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
f890: 2e 44 65 74 65 63 74 54 65 78 74 41 66 66 69 6e  .DetectTextAffin
f8a0: 69 74 79 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ity) &&..       
f8b0: 20 20 20 20 20 28 28 74 79 70 20 3d 3d 20 6e 75       ((typ == nu
f8c0: 6c 6c 29 20 7c 7c 20 28 74 79 70 2e 41 66 66 69  ll) || (typ.Affi
f8d0: 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69  nity == TypeAffi
f8e0: 6e 69 74 79 2e 54 65 78 74 29 29 29 0d 0a 20 20  nity.Text)))..  
f8f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f900: 20 20 20 20 20 74 79 70 20 3d 20 47 65 74 53 51       typ = GetSQ
f910: 4c 69 74 65 54 79 70 65 28 0d 0a 20 20 20 20 20  LiteType(..     
f920: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 2c 20             typ, 
f930: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
f940: 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61  ._sql.GetText(_a
f950: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
f960: 69 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  i));..        }.
f970: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66  .        else if
f980: 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e   (HelperMethods.
f990: 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20  HasFlags(..     
f9a0: 20 20 20 20 20 20 20 20 20 20 20 5f 66 6c 61 67             _flag
f9b0: 73 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  s, SQLiteConnect
f9c0: 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63 74 53  ionFlags.DetectS
f9d0: 74 72 69 6e 67 54 79 70 65 29 20 26 26 0d 0a 20  tringType) &&.. 
f9e0: 20 20 20 20 20 20 20 20 20 20 20 28 28 74 79 70             ((typ
f9f0: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 53 51 4c   == null) || SQL
fa00: 69 74 65 43 6f 6e 76 65 72 74 2e 49 73 53 74 72  iteConvert.IsStr
fa10: 69 6e 67 44 62 54 79 70 65 28 74 79 70 2e 54 79  ingDbType(typ.Ty
fa20: 70 65 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  pe)))..        {
fa30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79  ..            ty
fa40: 70 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70  p = GetSQLiteTyp
fa50: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
fa60: 20 20 20 20 74 79 70 2c 20 5f 61 63 74 69 76 65      typ, _active
fa70: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
fa80: 65 74 54 65 78 74 28 5f 61 63 74 69 76 65 53 74  etText(_activeSt
fa90: 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20  atement, i));.. 
faa0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
fab0: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
fac0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
fad0: 2e 47 65 74 56 61 6c 75 65 28 5f 61 63 74 69 76  .GetValue(_activ
fae0: 65 53 74 61 74 65 6d 65 6e 74 2c 20 5f 66 6c 61  eStatement, _fla
faf0: 67 73 2c 20 69 2c 20 74 79 70 29 3b 0d 0a 20 20  gs, i, typ);..  
fb00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
fb10: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
fb20: 2f 20 52 65 74 72 65 69 76 65 73 20 74 68 65 20  / Retreives the 
fb30: 76 61 6c 75 65 73 20 6f 66 20 6d 75 6c 74 69 70  values of multip
fb40: 6c 65 20 63 6f 6c 75 6d 6e 73 2c 20 75 70 20 74  le columns, up t
fb50: 6f 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  o the size of th
fb60: 65 20 73 75 70 70 6c 69 65 64 20 61 72 72 61 79  e supplied array
fb70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
fb80: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
fb90: 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65  aram name="value
fba0: 73 22 3e 54 68 65 20 61 72 72 61 79 20 74 6f 20  s">The array to 
fbb0: 66 69 6c 6c 20 77 69 74 68 20 76 61 6c 75 65 73  fill with values
fbc0: 20 66 72 6f 6d 20 74 68 65 20 63 6f 6c 75 6d 6e   from the column
fbd0: 73 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  s in the current
fbe0: 20 72 65 73 75 6c 74 73 65 74 3c 2f 70 61 72 61   resultset</para
fbf0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
fc00: 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20  urns>The number 
fc10: 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74 72 69  of columns retri
fc20: 65 76 65 64 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  eved</returns>..
fc30: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
fc40: 69 64 65 20 69 6e 74 20 47 65 74 56 61 6c 75 65  ide int GetValue
fc50: 73 28 6f 62 6a 65 63 74 5b 5d 20 76 61 6c 75 65  s(object[] value
fc60: 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
fc70: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
fc80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  ;....      int n
fc90: 4d 61 78 20 3d 20 46 69 65 6c 64 43 6f 75 6e 74  Max = FieldCount
fca0: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 76 61 6c  ;..      if (val
fcb0: 75 65 73 2e 4c 65 6e 67 74 68 20 3c 20 6e 4d 61  ues.Length < nMa
fcc0: 78 29 20 6e 4d 61 78 20 3d 20 76 61 6c 75 65 73  x) nMax = values
fcd0: 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
fce0: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
fcf0: 3b 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29  ; n < nMax; n++)
fd00: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
fd10: 20 20 20 76 61 6c 75 65 73 5b 6e 5d 20 3d 20 47     values[n] = G
fd20: 65 74 56 61 6c 75 65 28 6e 29 3b 0d 0a 20 20 20  etValue(n);..   
fd30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
fd40: 74 75 72 6e 20 6e 4d 61 78 3b 0d 0a 20 20 20 20  turn nMax;..    
fd50: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
fd60: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
fd70: 52 65 74 75 72 6e 73 20 61 20 63 6f 6c 6c 65 63  Returns a collec
fd80: 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20  tion containing 
fd90: 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e  all the column n
fda0: 61 6d 65 73 20 61 6e 64 20 76 61 6c 75 65 73 20  ames and values 
fdb0: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
fdc0: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20   current row of 
fdd0: 64 61 74 61 20 69 6e 20 74 68 65 20 63 75 72 72  data in the curr
fde0: 65 6e 74 20 72 65 73 75 6c 74 73 65 74 2c 20 69  ent resultset, i
fdf0: 66 20 61 6e 79 2e 20 20 49 66 20 74 68 65 72 65  f any.  If there
fe00: 20 69 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20   is no..    /// 
fe10: 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 72 20 6e  current row or n
fe20: 6f 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74  o current result
fe30: 73 65 74 2c 20 61 6e 20 65 78 63 65 70 74 69 6f  set, an exceptio
fe40: 6e 20 6d 61 79 20 62 65 20 74 68 72 6f 77 6e 2e  n may be thrown.
fe50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
fe60: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
fe70: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
fe80: 20 54 68 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20   The collection 
fe90: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 63  containing the c
fea0: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 61 6e 64 20 76  olumn name and v
feb0: 61 6c 75 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  alue information
fec0: 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f   for the..    //
fed0: 2f 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66  / current row of
fee0: 20 64 61 74 61 20 69 6e 20 74 68 65 20 63 75 72   data in the cur
fef0: 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 20 6f  rent resultset o
ff00: 72 20 6e 75 6c 6c 20 69 66 20 74 68 69 73 20 69  r null if this i
ff10: 6e 66 6f 72 6d 61 74 69 6f 6e 0d 0a 20 20 20 20  nformation..    
ff20: 2f 2f 2f 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62  /// cannot be ob
ff30: 74 61 69 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  tained...    ///
ff40: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
ff50: 20 70 75 62 6c 69 63 20 4e 61 6d 65 56 61 6c 75   public NameValu
ff60: 65 43 6f 6c 6c 65 63 74 69 6f 6e 20 47 65 74 56  eCollection GetV
ff70: 61 6c 75 65 73 28 29 0d 0a 20 20 20 20 7b 0d 0a  alues()..    {..
ff80: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
ff90: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
ffa0: 20 20 20 20 69 66 20 28 28 5f 61 63 74 69 76 65      if ((_active
ffb0: 53 74 61 74 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c  Statement == nul
ffc0: 6c 29 20 7c 7c 20 28 5f 61 63 74 69 76 65 53 74  l) || (_activeSt
ffd0: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 20 3d 3d 20  atement._sql == 
ffe0: 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
fff0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
10000 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
10010 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20  ception();....  
10020 20 20 20 20 20 20 69 6e 74 20 6e 4d 61 78 20 3d        int nMax =
10030 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
10040 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  ieldCount;..    
10050 20 20 20 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c      NameValueCol
10060 6c 65 63 74 69 6f 6e 20 72 65 73 75 6c 74 20 3d  lection result =
10070 20 6e 65 77 20 4e 61 6d 65 56 61 6c 75 65 43 6f   new NameValueCo
10080 6c 6c 65 63 74 69 6f 6e 28 6e 4d 61 78 29 3b 0d  llection(nMax);.
10090 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28  ...        for (
100a0 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 6e  int n = 0; n < n
100b0 4d 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20  Max; n++)..     
100c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
100d0 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20    string name = 
100e0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
100f0 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65  ._sql.ColumnName
10100 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
10110 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  t, n);..        
10120 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65      string value
10130 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d   = _activeStatem
10140 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74  ent._sql.GetText
10150 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
10160 74 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  t, n);....      
10170 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
10180 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a  (name, value);..
10190 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
101a0 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
101b0 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  lt;..    }....  
101c0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
101d0 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
101e0 20 54 72 75 65 20 69 66 20 74 68 65 20 72 65 73   True if the res
101f0 75 6c 74 73 65 74 20 68 61 73 20 72 6f 77 73 20  ultset has rows 
10200 74 68 61 74 20 63 61 6e 20 62 65 20 66 65 74 63  that can be fetc
10210 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  hed..    /// </s
10220 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62  ummary>..    pub
10230 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
10240 6c 20 48 61 73 52 6f 77 73 0d 0a 20 20 20 20 7b  l HasRows..    {
10250 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
10260 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
10270 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
10280 20 20 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f          CheckClo
10290 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
102a0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
102b0 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 73   NOTE: If the "s
102c0 74 69 63 6b 79 22 20 66 6c 61 67 20 68 61 73 20  ticky" flag has 
102d0 62 65 65 6e 20 73 65 74 2c 20 75 73 65 20 74 68  been set, use th
102e0 65 20 6e 65 77 20 62 65 68 61 76 69 6f 72 2c 0d  e new behavior,.
102f0 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
10300 20 20 77 68 69 63 68 20 72 65 74 75 72 6e 73 20    which returns 
10310 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 72  non-zero if ther
10320 65 20 77 65 72 65 20 65 76 65 72 20 61 6e 79 20  e were ever any 
10330 72 6f 77 73 20 69 6e 0d 0a 20 20 20 20 20 20 20  rows in..       
10340 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 61 73   //       the as
10350 73 6f 63 69 61 74 65 64 20 72 65 73 75 6c 74 20  sociated result 
10360 73 65 74 73 2e 20 20 47 65 6e 65 72 61 6c 6c 79  sets.  Generally
10370 2c 20 74 68 69 73 20 66 6c 61 67 20 69 73 20 6f  , this flag is o
10380 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  nly..        // 
10390 20 20 20 20 20 20 75 73 65 66 75 6c 20 77 68 65        useful whe
103a0 6e 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72  n it is necessar
103b0 79 20 74 6f 20 72 65 74 61 69 6e 20 63 6f 6d 70  y to retain comp
103c0 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 0d 0a  atibility with..
103d0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
103e0 20 6f 74 68 65 72 20 41 44 4f 2e 4e 45 54 20 70   other ADO.NET p
103f0 72 6f 76 69 64 65 72 73 20 74 68 61 74 20 75 73  roviders that us
10400 65 20 74 68 65 73 65 20 73 61 6d 65 20 73 65 6d  e these same sem
10410 61 6e 74 69 63 73 20 66 6f 72 0d 0a 20 20 20 20  antics for..    
10420 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
10430 20 48 61 73 52 6f 77 73 20 70 72 6f 70 65 72 74   HasRows propert
10440 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  y...        //..
10450 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70          if (Help
10460 65 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61  erMethods.HasFla
10470 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
10480 20 20 20 20 20 5f 66 6c 61 67 73 2c 20 53 51 4c       _flags, SQL
10490 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
104a0 67 73 2e 53 74 69 63 6b 79 48 61 73 52 6f 77 73  gs.StickyHasRows
104b0 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
104c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
104d0 28 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20  ((_readingState 
104e0 21 3d 20 31 29 20 7c 7c 20 28 5f 73 74 65 70 43  != 1) || (_stepC
104f0 6f 75 6e 74 20 3e 20 30 29 29 3b 0d 0a 20 20 20  ount > 0));..   
10500 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
10510 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
10520 20 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 74   NOTE: This is t
10530 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76  he default behav
10540 69 6f 72 2e 20 20 49 74 20 72 65 74 75 72 6e 73  ior.  It returns
10550 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69   non-zero only i
10560 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  f..        //   
10570 20 20 20 20 6d 6f 72 65 20 72 6f 77 73 20 61 72      more rows ar
10580 65 20 61 76 61 69 6c 61 62 6c 65 20 28 69 2e 65  e available (i.e
10590 2e 20 61 20 63 61 6c 6c 20 74 6f 20 74 68 65 20  . a call to the 
105a0 52 65 61 64 20 6d 65 74 68 6f 64 20 69 73 0d 0a  Read method is..
105b0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
105c0 20 65 78 70 65 63 74 65 64 20 74 6f 20 73 75 63   expected to suc
105d0 63 65 65 64 29 2e 20 20 50 72 69 6f 72 20 74 6f  ceed).  Prior to
105e0 20 74 68 65 20 69 6e 74 72 6f 64 75 63 74 69 6f   the introductio
105f0 6e 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  n of the..      
10600 20 20 2f 2f 20 20 20 20 20 20 20 22 73 74 69 63    //       "stic
10610 6b 79 22 20 66 6c 61 67 2c 20 74 68 69 73 20 69  ky" flag, this i
10620 73 20 68 6f 77 20 74 68 69 73 20 70 72 6f 70 65  s how this prope
10630 72 74 79 20 68 61 73 20 61 6c 77 61 79 73 20 77  rty has always w
10640 6f 72 6b 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  orked...        
10650 2f 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  //..        retu
10660 72 6e 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74  rn (_readingStat
10670 65 20 21 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20  e != 1);..      
10680 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
10690 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
106a0 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54     /// Returns T
106b0 72 75 65 20 69 66 20 74 68 65 20 64 61 74 61 20  rue if the data 
106c0 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
106d0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
106e0 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
106f0 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49   override bool I
10700 73 43 6c 6f 73 65 64 0d 0a 20 20 20 20 7b 0d 0a  sClosed..    {..
10710 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
10720 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
10730 75 72 6e 20 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d  urn (_command ==
10740 20 6e 75 6c 6c 29 3b 20 7d 0d 0a 20 20 20 20 7d   null); }..    }
10750 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
10760 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
10770 65 74 75 72 6e 73 20 54 72 75 65 20 69 66 20 74  eturns True if t
10780 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c  he specified col
10790 75 6d 6e 20 69 73 20 6e 75 6c 6c 0d 0a 20 20 20  umn is null..   
107a0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
107b0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
107c0 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
107d0 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
107e0 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
107f0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65  // <returns>True
10800 20 6f 72 20 46 61 6c 73 65 3c 2f 72 65 74 75 72   or False</retur
10810 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
10820 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
10830 44 42 4e 75 6c 6c 28 69 6e 74 20 69 29 0d 0a 20  DBNull(int i).. 
10840 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
10850 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
10860 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
10870 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
10880 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76     if (i >= Priv
10890 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
108a0 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
108b0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
108c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
108d0 65 79 49 6e 66 6f 2e 49 73 44 42 4e 75 6c 6c 28  eyInfo.IsDBNull(
108e0 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
108f0 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
10900 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
10910 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
10920 74 2e 5f 73 71 6c 2e 49 73 4e 75 6c 6c 28 5f 61  t._sql.IsNull(_a
10930 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
10940 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  i);..    }....  
10950 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
10960 0a 20 20 20 20 2f 2f 2f 20 4d 6f 76 65 73 20 74  .    /// Moves t
10970 6f 20 74 68 65 20 6e 65 78 74 20 72 65 73 75 6c  o the next resul
10980 74 73 65 74 20 69 6e 20 6d 75 6c 74 69 70 6c 65  tset in multiple
10990 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 53   row-returning S
109a0 51 4c 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20  QL command...   
109b0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
109c0 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
109d0 73 3e 54 72 75 65 20 69 66 20 74 68 65 20 63 6f  s>True if the co
109e0 6d 6d 61 6e 64 20 77 61 73 20 73 75 63 63 65 73  mmand was succes
109f0 73 66 75 6c 20 61 6e 64 20 61 20 6e 65 77 20 72  sful and a new r
10a00 65 73 75 6c 74 73 65 74 20 69 73 20 61 76 61 69  esultset is avai
10a10 6c 61 62 6c 65 2c 20 46 61 6c 73 65 20 6f 74 68  lable, False oth
10a20 65 72 77 69 73 65 2e 3c 2f 72 65 74 75 72 6e 73  erwise.</returns
10a30 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
10a40 65 72 72 69 64 65 20 62 6f 6f 6c 20 4e 65 78 74  erride bool Next
10a50 52 65 73 75 6c 74 28 29 0d 0a 20 20 20 20 7b 0d  Result()..    {.
10a60 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70  .      CheckDisp
10a70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 43  osed();..      C
10a80 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
10a90 20 20 20 20 20 69 66 20 28 5f 74 68 72 6f 77 4f       if (_throwO
10aa0 6e 44 69 73 70 6f 73 65 64 29 20 53 51 4c 69 74  nDisposed) SQLit
10ab0 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f  eCommand.Check(_
10ac0 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20  command);....   
10ad0 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
10ae0 6e 74 20 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d  nt stmt = null;.
10af0 0a 20 20 20 20 20 20 69 6e 74 20 66 69 65 6c 64  .      int field
10b00 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 62 6f  Count;..      bo
10b10 6f 6c 20 73 63 68 65 6d 61 4f 6e 6c 79 20 3d 20  ol schemaOnly = 
10b20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69  ((_commandBehavi
10b30 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61  or & CommandBeha
10b40 76 69 6f 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29  vior.SchemaOnly)
10b50 20 21 3d 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20   != 0);....     
10b60 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d 0a 20   while (true).. 
10b70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10b80 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c  if (stmt == null
10b90 20 26 26 20 5f 61 63 74 69 76 65 53 74 61 74 65   && _activeState
10ba0 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 20 26 26 20  ment != null && 
10bb0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
10bc0 2e 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 20 26 26  ._sql != null &&
10bd0 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
10be0 74 2e 5f 73 71 6c 2e 49 73 4f 70 65 6e 28 29 29  t._sql.IsOpen())
10bf0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
10c00 20 20 20 20 20 20 20 2f 2f 20 52 65 73 65 74 20         // Reset 
10c10 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 2d 65  the previously-e
10c20 78 65 63 75 74 65 64 20 73 74 61 74 65 6d 65 6e  xecuted statemen
10c30 74 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  t..          if 
10c40 28 21 73 63 68 65 6d 61 4f 6e 6c 79 29 20 5f 61  (!schemaOnly) _a
10c50 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
10c60 73 71 6c 2e 52 65 73 65 74 28 5f 61 63 74 69 76  sql.Reset(_activ
10c70 65 53 74 61 74 65 6d 65 6e 74 29 3b 0d 0a 0d 0a  eStatement);....
10c80 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20            // If 
10c90 77 65 27 72 65 20 6f 6e 6c 79 20 73 75 70 70 6f  we're only suppo
10ca0 73 65 64 20 74 6f 20 72 65 74 75 72 6e 20 61 20  sed to return a 
10cb0 73 69 6e 67 6c 65 20 72 6f 77 73 65 74 2c 20 73  single rowset, s
10cc0 74 65 70 20 74 68 72 6f 75 67 68 20 61 6c 6c 20  tep through all 
10cd0 72 65 6d 61 69 6e 69 6e 67 20 73 74 61 74 65 6d  remaining statem
10ce0 65 6e 74 73 20 6f 6e 63 65 20 75 6e 74 69 6c 0d  ents once until.
10cf0 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68  .          // th
10d00 65 79 20 61 72 65 20 61 6c 6c 20 64 6f 6e 65 20  ey are all done 
10d10 61 6e 64 20 72 65 74 75 72 6e 20 66 61 6c 73 65  and return false
10d20 20 74 6f 20 69 6e 64 69 63 61 74 65 20 6e 6f 20   to indicate no 
10d30 6d 6f 72 65 20 72 65 73 75 6c 74 73 65 74 73 20  more resultsets 
10d40 65 78 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20  exist...        
10d50 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42    if ((_commandB
10d60 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e  ehavior & Comman
10d70 64 42 65 68 61 76 69 6f 72 2e 53 69 6e 67 6c 65  dBehavior.Single
10d80 52 65 73 75 6c 74 29 20 21 3d 20 30 29 0d 0a 20  Result) != 0).. 
10d90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10da0 20 20 20 20 20 20 20 20 66 6f 72 20 28 3b 20 3b          for (; ;
10db0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
10dc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10dd0 20 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64   stmt = _command
10de0 2e 47 65 74 53 74 61 74 65 6d 65 6e 74 28 5f 61  .GetStatement(_a
10df0 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
10e00 64 65 78 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20  dex + 1);..     
10e10 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d           if (stm
10e20 74 20 3d 3d 20 6e 75 6c 6c 29 20 62 72 65 61 6b  t == null) break
10e30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10e40 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
10e50 74 49 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20  tIndex++;....   
10e60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
10e70 73 63 68 65 6d 61 4f 6e 6c 79 20 26 26 20 73 74  schemaOnly && st
10e80 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28 73 74 6d  mt._sql.Step(stm
10e90 74 29 29 20 5f 73 74 65 70 43 6f 75 6e 74 2b 2b  t)) _stepCount++
10ea0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10eb0 20 69 66 20 28 73 74 6d 74 2e 5f 73 71 6c 2e 43   if (stmt._sql.C
10ec0 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29  olumnCount(stmt)
10ed0 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
10ee0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10ef0 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 68 61           int cha
10f00 6e 67 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20  nges = 0;..     
10f10 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
10f20 72 65 61 64 4f 6e 6c 79 20 3d 20 66 61 6c 73 65  readOnly = false
10f30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10f40 20 20 20 69 66 20 28 73 74 6d 74 2e 54 72 79 47     if (stmt.TryG
10f50 65 74 43 68 61 6e 67 65 73 28 72 65 66 20 63 68  etChanges(ref ch
10f60 61 6e 67 65 73 2c 20 72 65 66 20 72 65 61 64 4f  anges, ref readO
10f70 6e 6c 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nly))..         
10f80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10f90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10fa0 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20  !readOnly)..    
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
10fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10fd0 20 20 20 20 20 69 66 20 28 5f 72 6f 77 73 41 66       if (_rowsAf
10fe0 66 65 63 74 65 64 20 3d 3d 20 2d 31 29 20 5f 72  fected == -1) _r
10ff0 6f 77 73 41 66 66 65 63 74 65 64 20 3d 20 30 3b  owsAffected = 0;
11000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11010 20 20 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63        _rowsAffec
11020 74 65 64 20 2b 3d 20 63 68 61 6e 67 65 73 3b 0d  ted += changes;.
11030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11040 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
11050 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11060 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
11070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11090 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
110a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
110b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
110c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
110d0 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61       if (!schema
110e0 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f 73 71 6c 2e  Only) stmt._sql.
110f0 52 65 73 65 74 28 73 74 6d 74 29 3b 20 2f 2f 20  Reset(stmt); // 
11100 47 6f 74 74 61 20 72 65 73 65 74 20 61 66 74 65  Gotta reset afte
11110 72 20 65 76 65 72 79 20 73 74 65 70 20 74 6f 20  r every step to 
11120 72 65 6c 65 61 73 65 20 61 6e 79 20 6c 6f 63 6b  release any lock
11130 73 20 61 6e 64 20 73 75 63 68 21 0d 0a 20 20 20  s and such!..   
11140 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11150 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
11160 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
11170 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
11180 0a 20 20 20 20 20 20 20 20 2f 2f 20 47 65 74 20  .        // Get 
11190 74 68 65 20 6e 65 78 74 20 73 74 61 74 65 6d 65  the next stateme
111a0 6e 74 20 74 6f 20 65 78 65 63 75 74 65 0d 0a 20  nt to execute.. 
111b0 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20 5f 63         stmt = _c
111c0 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61 74 65 6d  ommand.GetStatem
111d0 65 6e 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ent(_activeState
111e0 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31 29 3b 0d  mentIndex + 1);.
111f0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66  ...        // If
11200 20 77 65 27 76 65 20 72 65 61 63 68 65 64 20 74   we've reached t
11210 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74  he end of the st
11220 61 74 65 6d 65 6e 74 73 2c 20 72 65 74 75 72 6e  atements, return
11230 20 66 61 6c 73 65 2c 20 6e 6f 20 6d 6f 72 65 20   false, no more 
11240 72 65 73 75 6c 74 73 65 74 73 0d 0a 20 20 20 20  resultsets..    
11250 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d 3d 20      if (stmt == 
11260 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
11270 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
11280 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20  ..        // If 
11290 77 65 20 77 65 72 65 20 6f 6e 20 61 20 63 75 72  we were on a cur
112a0 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 2c 20  rent resultset, 
112b0 73 65 74 20 74 68 65 20 73 74 61 74 65 20 74 6f  set the state to
112c0 20 22 64 6f 6e 65 20 72 65 61 64 69 6e 67 22 20   "done reading" 
112d0 66 6f 72 20 69 74 0d 0a 20 20 20 20 20 20 20 20  for it..        
112e0 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74  if (_readingStat
112f0 65 20 3c 20 31 29 0d 0a 20 20 20 20 20 20 20 20  e < 1)..        
11300 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20    _readingState 
11310 3d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 1;....        
11320 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
11330 49 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20  Index++;....    
11340 20 20 20 20 66 69 65 6c 64 43 6f 75 6e 74 20 3d      fieldCount =
11350 20 73 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d   stmt._sql.Colum
11360 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d  nCount(stmt);...
11370 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 74  .        // If t
11380 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  he statement is 
11390 6e 6f 74 20 61 20 73 65 6c 65 63 74 20 73 74 61  not a select sta
113a0 74 65 6d 65 6e 74 20 6f 72 20 77 65 27 72 65 20  tement or we're 
113b0 6e 6f 74 20 72 65 74 72 69 65 76 69 6e 67 20 73  not retrieving s
113c0 63 68 65 6d 61 20 6f 6e 6c 79 2c 20 74 68 65 6e  chema only, then
113d0 20 70 65 72 66 6f 72 6d 20 74 68 65 20 69 6e 69   perform the ini
113e0 74 69 61 6c 20 73 74 65 70 0d 0a 20 20 20 20 20  tial step..     
113f0 20 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e     if (!schemaOn
11400 6c 79 20 7c 7c 20 28 66 69 65 6c 64 43 6f 75 6e  ly || (fieldCoun
11410 74 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20  t == 0))..      
11420 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69    {..          i
11430 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 20 26  f (!schemaOnly &
11440 26 20 73 74 6d 74 2e 5f 73 71 6c 2e 53 74 65 70  & stmt._sql.Step
11450 28 73 74 6d 74 29 29 0d 0a 20 20 20 20 20 20 20  (stmt))..       
11460 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11470 20 20 5f 73 74 65 70 43 6f 75 6e 74 2b 2b 3b 0d    _stepCount++;.
11480 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 65  .            _re
11490 61 64 69 6e 67 53 74 61 74 65 20 3d 20 2d 31 3b  adingState = -1;
114a0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
114b0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
114c0 20 28 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d 20   (fieldCount == 
114d0 30 29 20 2f 2f 20 4e 6f 20 72 6f 77 73 20 72 65  0) // No rows re
114e0 74 75 72 6e 65 64 2c 20 69 66 20 66 69 65 6c 64  turned, if field
114f0 43 6f 75 6e 74 20 69 73 20 7a 65 72 6f 2c 20 73  Count is zero, s
11500 6b 69 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  kip to the next 
11510 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20  statement..     
11520 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11530 20 20 20 20 69 6e 74 20 63 68 61 6e 67 65 73 20      int changes 
11540 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
11550 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 20    bool readOnly 
11560 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
11570 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 2e 54        if (stmt.T
11580 72 79 47 65 74 43 68 61 6e 67 65 73 28 72 65 66  ryGetChanges(ref
11590 20 63 68 61 6e 67 65 73 2c 20 72 65 66 20 72 65   changes, ref re
115a0 61 64 4f 6e 6c 79 29 29 0d 0a 20 20 20 20 20 20  adOnly))..      
115b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
115c0 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61 64         if (!read
115d0 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20  Only)..         
115e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
115f0 20 20 20 20 20 20 20 20 69 66 20 28 5f 72 6f 77          if (_row
11600 73 41 66 66 65 63 74 65 64 20 3d 3d 20 2d 31 29  sAffected == -1)
11610 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d   _rowsAffected =
11620 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
11630 20 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63 74       _rowsAffect
11640 65 64 20 2b 3d 20 63 68 61 6e 67 65 73 3b 0d 0a  ed += changes;..
11650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11660 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11670 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
11680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
11690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
116a0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
116b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
116c0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73 63           if (!sc
116d0 68 65 6d 61 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f  hemaOnly) stmt._
116e0 73 71 6c 2e 52 65 73 65 74 28 73 74 6d 74 29 3b  sql.Reset(stmt);
116f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
11700 6e 74 69 6e 75 65 3b 20 2f 2f 20 53 6b 69 70 20  ntinue; // Skip 
11710 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 61 6e 64  this command and
11720 20 6d 6f 76 65 20 74 6f 20 74 68 65 20 6e 65 78   move to the nex
11730 74 2c 20 69 74 20 77 61 73 20 6e 6f 74 20 61 20  t, it was not a 
11740 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 72 65  row-returning re
11750 73 75 6c 74 73 65 74 0d 0a 20 20 20 20 20 20 20  sultset..       
11760 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
11770 65 6c 73 65 20 2f 2f 20 4e 6f 20 72 6f 77 73 2c  else // No rows,
11780 20 66 69 65 6c 64 43 6f 75 6e 74 20 69 73 20 6e   fieldCount is n
11790 6f 6e 2d 7a 65 72 6f 20 73 6f 20 73 74 6f 70 20  on-zero so stop 
117a0 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  here..          
117b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  {..            _
117c0 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31  readingState = 1
117d0 3b 20 2f 2f 20 54 68 69 73 20 63 6f 6d 6d 61 6e  ; // This comman
117e0 64 20 72 65 74 75 72 6e 65 64 20 63 6f 6c 75 6d  d returned colum
117f0 6e 73 20 62 75 74 20 6e 6f 20 72 6f 77 73 2c 20  ns but no rows, 
11800 73 6f 20 72 65 74 75 72 6e 20 74 72 75 65 2c 20  so return true, 
11810 62 75 74 20 48 61 73 52 6f 77 73 20 3d 20 66 61  but HasRows = fa
11820 6c 73 65 20 61 6e 64 20 52 65 61 64 28 29 20 72  lse and Read() r
11830 65 74 75 72 6e 73 20 66 61 6c 73 65 0d 0a 20 20  eturns false..  
11840 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11850 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
11860 2f 2f 20 41 68 68 2c 20 77 65 20 66 6f 75 6e 64  // Ahh, we found
11870 20 61 20 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67   a row-returning
11880 20 72 65 73 75 6c 74 73 65 74 20 65 6c 69 67 69   resultset eligi
11890 62 6c 65 20 74 6f 20 62 65 20 72 65 74 75 72 6e  ble to be return
118a0 65 64 21 0d 0a 20 20 20 20 20 20 20 20 5f 61 63  ed!..        _ac
118b0 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d 20  tiveStatement = 
118c0 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 5f  stmt;..        _
118d0 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20 66 69 65  fieldCount = fie
118e0 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20  ldCount;..      
118f0 20 20 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20    _fieldIndexes 
11900 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
11910 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 28 53 74  <string, int>(St
11920 72 69 6e 67 43 6f 6d 70 61 72 65 72 2e 4f 72 64  ringComparer.Ord
11930 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 3b  inalIgnoreCase);
11940 0d 0a 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64  ..        _field
11950 54 79 70 65 41 72 72 61 79 20 3d 20 6e 65 77 20  TypeArray = new 
11960 53 51 4c 69 74 65 54 79 70 65 5b 50 72 69 76 61  SQLiteType[Priva
11970 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
11980 75 6e 74 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt];....       
11990 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65   if ((_commandBe
119a0 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64  havior & Command
119b0 42 65 68 61 76 69 6f 72 2e 4b 65 79 49 6e 66 6f  Behavior.KeyInfo
119c0 29 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) != 0)..       
119d0 20 20 20 4c 6f 61 64 4b 65 79 49 6e 66 6f 28 29     LoadKeyInfo()
119e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
119f0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
11a00 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
11a10 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
11a20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
11a30 68 6f 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20  hod attempts to 
11a40 71 75 65 72 79 20 74 68 65 20 64 61 74 61 62 61  query the databa
11a50 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
11a60 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20  sociated with.. 
11a70 20 20 20 2f 2f 2f 20 74 68 65 20 64 61 74 61 20     /// the data 
11a80 72 65 61 64 65 72 20 69 6e 20 75 73 65 2e 20 20  reader in use.  
11a90 49 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  If the underlyin
11aa0 67 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 63 6f 6e  g command or con
11ab0 6e 65 63 74 69 6f 6e 20 69 73 0d 0a 20 20 20 20  nection is..    
11ac0 2f 2f 2f 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c  /// unavailable,
11ad0 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20 77 69   a null value wi
11ae0 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0d  ll be returned..
11af0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
11b00 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
11b10 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
11b20 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f  The connection o
11b30 62 6a 65 63 74 20 2d 4f 52 2d 20 6e 75 6c 6c 20  bject -OR- null 
11b40 69 66 20 69 74 20 69 73 20 75 6e 61 76 61 69 6c  if it is unavail
11b50 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  able...    /// <
11b60 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
11b70 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53  nternal static S
11b80 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
11b90 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a  GetConnection(..
11ba0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
11bb0 74 61 52 65 61 64 65 72 20 64 61 74 61 52 65 61  taReader dataRea
11bc0 64 65 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  der..        )..
11bd0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
11be0 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
11bf0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
11c00 61 74 61 52 65 61 64 65 72 20 21 3d 20 6e 75 6c  ataReader != nul
11c10 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
11c20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11c30 20 20 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64     SQLiteCommand
11c40 20 63 6f 6d 6d 61 6e 64 20 3d 20 64 61 74 61 52   command = dataR
11c50 65 61 64 65 72 2e 5f 63 6f 6d 6d 61 6e 64 3b 0d  eader._command;.
11c60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11c70 20 20 20 69 66 20 28 63 6f 6d 6d 61 6e 64 20 21     if (command !
11c80 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
11c90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cb0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
11cc0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 63 6f   connection = co
11cd0 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
11ce0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11cf0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
11d00 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29  nection != null)
11d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11d20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11d30 20 63 6f 6e 6e 65 63 74 69 6f 6e 3b 0d 0a 20 20   connection;..  
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11d60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11d70 20 20 20 63 61 74 63 68 20 28 4f 62 6a 65 63 74     catch (Object
11d80 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
11d90 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  n)..        {.. 
11da0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
11db0 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
11dc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
11dd0 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
11de0 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
11df0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
11e00 2f 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20  / Retrieves the 
11e10 53 51 4c 69 74 65 54 79 70 65 20 66 6f 72 20 61  SQLiteType for a
11e20 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 20 61 6e   given column an
11e30 64 20 72 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20  d row value...  
11e40 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
11e50 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
11e60 20 6e 61 6d 65 3d 22 6f 6c 64 54 79 70 65 22 3e   name="oldType">
11e70 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72  ..    /// The or
11e80 69 67 69 6e 61 6c 20 53 51 4c 69 74 65 54 79 70  iginal SQLiteTyp
11e90 65 20 73 74 72 75 63 74 75 72 65 2c 20 62 61 73  e structure, bas
11ea0 65 64 20 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 63  ed only on the c
11eb0 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  olumn...    /// 
11ec0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
11ed0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
11ee0 65 78 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ext">..    /// T
11ef0 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65  he textual value
11f00 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 66   of the column f
11f10 6f 72 20 61 20 67 69 76 65 6e 20 72 6f 77 2e 0d  or a given row..
11f20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
11f30 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
11f40 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  rns>..    /// Th
11f50 65 20 53 51 4c 69 74 65 54 79 70 65 20 73 74 72  e SQLiteType str
11f60 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f  ucture...    ///
11f70 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
11f80 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 54   private SQLiteT
11f90 79 70 65 20 47 65 74 53 51 4c 69 74 65 54 79 70  ype GetSQLiteTyp
11fa0 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e(..        SQLi
11fb0 74 65 54 79 70 65 20 6f 6c 64 54 79 70 65 2c 20  teType oldType, 
11fc0 2f 2a 20 50 41 53 53 2d 54 48 52 4f 55 47 48 20  /* PASS-THROUGH 
11fd0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
11fe0 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20 20 20  ng text..       
11ff0 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
12000 20 20 20 69 66 20 28 53 51 4c 69 74 65 43 6f 6e     if (SQLiteCon
12010 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 4e 75  vert.LooksLikeNu
12020 6c 6c 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20  ll(text))..     
12030 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
12040 77 20 53 51 4c 69 74 65 54 79 70 65 28 54 79 70  w SQLiteType(Typ
12050 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c 20  eAffinity.Null, 
12060 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 3b 0d  DbType.Object);.
12070 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ...        if (S
12080 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f  QLiteConvert.Loo
12090 6b 73 4c 69 6b 65 49 6e 74 36 34 28 74 65 78 74  ksLikeInt64(text
120a0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
120b0 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74  return new SQLit
120c0 65 54 79 70 65 28 54 79 70 65 41 66 66 69 6e 69  eType(TypeAffini
120d0 74 79 2e 49 6e 74 36 34 2c 20 44 62 54 79 70 65  ty.Int64, DbType
120e0 2e 49 6e 74 36 34 29 3b 0d 0a 0d 0a 20 20 20 20  .Int64);....    
120f0 20 20 20 20 69 66 20 28 53 51 4c 69 74 65 43 6f      if (SQLiteCo
12100 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65 44  nvert.LooksLikeD
12110 6f 75 62 6c 65 28 74 65 78 74 29 29 0d 0a 20 20  ouble(text))..  
12120 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
12130 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 28   new SQLiteType(
12140 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
12150 62 6c 65 2c 20 44 62 54 79 70 65 2e 44 6f 75 62  ble, DbType.Doub
12160 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le);....        
12170 69 66 20 28 28 5f 61 63 74 69 76 65 53 74 61 74  if ((_activeStat
12180 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 20 26  ement != null) &
12190 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  &..            S
121a0 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c 6f 6f  QLiteConvert.Loo
121b0 6b 73 4c 69 6b 65 44 61 74 65 54 69 6d 65 28 5f  ksLikeDateTime(_
121c0 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
121d0 5f 73 71 6c 2c 20 74 65 78 74 29 29 0d 0a 20 20  _sql, text))..  
121e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
121f0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
12200 53 51 4c 69 74 65 54 79 70 65 28 54 79 70 65 41  SQLiteType(TypeA
12210 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65  ffinity.DateTime
12220 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d  , DbType.DateTim
12230 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
12240 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
12250 20 6f 6c 64 54 79 70 65 3b 0d 0a 20 20 20 20 7d   oldType;..    }
12260 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
12270 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
12280 65 74 72 69 65 76 65 73 20 74 68 65 20 53 51 4c  etrieves the SQL
12290 69 74 65 54 79 70 65 20 66 6f 72 20 61 20 67 69  iteType for a gi
122a0 76 65 6e 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20  ven column, and 
122b0 63 61 63 68 65 73 20 69 74 20 74 6f 20 61 76 6f  caches it to avo
122c0 69 64 20 72 65 70 65 74 65 74 69 76 65 20 69 6e  id repetetive in
122d0 74 65 72 6f 70 20 63 61 6c 6c 73 2e 0d 0a 20 20  terop calls...  
122e0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
122f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
12300 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68   name="flags">Th
12310 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
12320 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65  ed with the pare
12330 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  nt connection ob
12340 6a 65 63 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  ject.</param>.. 
12350 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
12360 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
12370 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
12380 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
12390 20 3c 72 65 74 75 72 6e 73 3e 41 20 53 51 4c 69   <returns>A SQLi
123a0 74 65 54 79 70 65 20 73 74 72 75 63 74 75 72 65  teType structure
123b0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
123c0 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 54 79  private SQLiteTy
123d0 70 65 20 47 65 74 53 51 4c 69 74 65 54 79 70 65  pe GetSQLiteType
123e0 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
123f0 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
12400 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
12410 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65 20       SQLiteType 
12420 74 79 70 20 3d 20 5f 66 69 65 6c 64 54 79 70 65  typ = _fieldType
12430 41 72 72 61 79 5b 69 5d 3b 0d 0a 0d 0a 20 20 20  Array[i];....   
12440 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
12450 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
12460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
12470 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 69 73   Initialize this
12480 20 63 6f 6c 75 6d 6e 27 73 20 66 69 65 6c 64 20   column's field 
12490 74 79 70 65 20 69 6e 73 74 61 6e 63 65 0d 0a 20  type instance.. 
124a0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 20 3d             typ =
124b0 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79   _fieldTypeArray
124c0 5b 69 5d 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  [i] = new SQLite
124d0 54 79 70 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  Type();..       
124e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
124f0 20 49 66 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69   If not initiali
12500 7a 65 64 2c 20 74 68 65 6e 20 66 65 74 63 68 20  zed, then fetch 
12510 74 68 65 20 64 65 63 6c 61 72 65 64 20 63 6f 6c  the declared col
12520 75 6d 6e 20 64 61 74 61 74 79 70 65 20 61 6e 64  umn datatype and
12530 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6e 76   attempt to conv
12540 65 72 74 20 69 74 0d 0a 20 20 20 20 20 20 20 20  ert it..        
12550 2f 2f 20 74 6f 20 61 20 6b 6e 6f 77 6e 20 44 62  // to a known Db
12560 54 79 70 65 2e 0d 0a 20 20 20 20 20 20 20 20 69  Type...        i
12570 66 20 28 74 79 70 2e 41 66 66 69 6e 69 74 79 20  f (typ.Affinity 
12580 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  == TypeAffinity.
12590 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 29 0d 0a  Uninitialized)..
125a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
125b0 20 20 20 20 20 20 20 74 79 70 2e 54 79 70 65 20         typ.Type 
125c0 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  = SQLiteConvert.
125d0 54 79 70 65 4e 61 6d 65 54 6f 44 62 54 79 70 65  TypeNameToDbType
125e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
125f0 20 20 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e     GetConnection
12600 28 74 68 69 73 29 2c 20 5f 61 63 74 69 76 65 53  (this), _activeS
12610 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f  tatement._sql.Co
12620 6c 75 6d 6e 54 79 70 65 28 0d 0a 20 20 20 20 20  lumnType(..     
12630 20 20 20 20 20 20 20 20 20 20 20 5f 61 63 74 69             _acti
12640 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20  veStatement, i, 
12650 72 65 66 20 74 79 70 2e 41 66 66 69 6e 69 74 79  ref typ.Affinity
12660 29 2c 20 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20  ), flags);..    
12670 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
12680 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lse..        {..
12690 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 2e              typ.
126a0 41 66 66 69 6e 69 74 79 20 3d 20 5f 61 63 74 69  Affinity = _acti
126b0 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
126c0 2e 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  .ColumnAffinity(
126d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
126e0 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65    _activeStateme
126f0 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 20 20 20  nt, i);..       
12700 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
12710 74 75 72 6e 20 74 79 70 3b 0d 0a 20 20 20 20 7d  turn typ;..    }
12720 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
12730 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
12740 65 61 64 73 20 74 68 65 20 6e 65 78 74 20 72 6f  eads the next ro
12750 77 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c  w from the resul
12760 74 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  tset..    /// </
12770 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
12780 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20  / <returns>True 
12790 69 66 20 61 20 6e 65 77 20 72 6f 77 20 77 61 73  if a new row was
127a0 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 6c 6f   successfully lo
127b0 61 64 65 64 20 61 6e 64 20 69 73 20 72 65 61 64  aded and is read
127c0 79 20 66 6f 72 20 70 72 6f 63 65 73 73 69 6e 67  y for processing
127d0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
127e0 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
127f0 62 6f 6f 6c 20 52 65 61 64 28 29 0d 0a 20 20 20  bool Read()..   
12800 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44   {..      CheckD
12810 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
12820 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b    CheckClosed();
12830 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 74 68 72  ..      if (_thr
12840 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29 20 53 51  owOnDisposed) SQ
12850 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63  LiteCommand.Chec
12860 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d 0a  k(_command);....
12870 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d        if ((_comm
12880 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f  andBehavior & Co
12890 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 63  mmandBehavior.Sc
128a0 68 65 6d 61 4f 6e 6c 79 29 20 21 3d 20 30 29 0d  hemaOnly) != 0).
128b0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
128c0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
128d0 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74  if (_readingStat
128e0 65 20 3d 3d 20 2d 31 29 20 2f 2f 20 46 69 72 73  e == -1) // Firs
128f0 74 20 73 74 65 70 20 77 61 73 20 61 6c 72 65 61  t step was alrea
12900 64 79 20 64 6f 6e 65 20 61 74 20 74 68 65 20 4e  dy done at the N
12910 65 78 74 52 65 73 75 6c 74 28 29 20 6c 65 76 65  extResult() leve
12920 6c 2c 20 73 6f 20 64 6f 6e 27 74 20 73 74 65 70  l, so don't step
12930 20 61 67 61 69 6e 2c 20 6a 75 73 74 20 72 65 74   again, just ret
12940 75 72 6e 20 74 72 75 65 2e 0d 0a 20 20 20 20 20  urn true...     
12950 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 72 65 61   {..        _rea
12960 64 69 6e 67 53 74 61 74 65 20 3d 20 30 3b 0d 0a  dingState = 0;..
12970 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
12980 72 75 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  rue;..      }.. 
12990 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 72       else if (_r
129a0 65 61 64 69 6e 67 53 74 61 74 65 20 3d 3d 20 30  eadingState == 0
129b0 29 20 2f 2f 20 41 63 74 69 76 65 6c 79 20 72 65  ) // Actively re
129c0 61 64 69 6e 67 20 72 6f 77 73 0d 0a 20 20 20 20  ading rows..    
129d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20    {..        // 
129e0 44 6f 6e 27 74 20 72 65 61 64 20 61 20 6e 65 77  Don't read a new
129f0 20 72 6f 77 20 69 66 20 74 68 65 20 63 6f 6d 6d   row if the comm
12a00 61 6e 64 20 62 65 68 61 76 69 6f 72 20 64 69 63  and behavior dic
12a10 74 61 74 65 73 20 53 69 6e 67 6c 65 52 6f 77 2e  tates SingleRow.
12a20 20 20 57 65 27 76 65 20 61 6c 72 65 61 64 79 20    We've already 
12a30 72 65 61 64 20 74 68 65 20 66 69 72 73 74 20 72  read the first r
12a40 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ow...        if 
12a50 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69  ((_commandBehavi
12a60 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61  or & CommandBeha
12a70 76 69 6f 72 2e 53 69 6e 67 6c 65 52 6f 77 29 20  vior.SingleRow) 
12a80 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 7b  == 0)..        {
12a90 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
12aa0 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
12ab0 2e 5f 73 71 6c 2e 53 74 65 70 28 5f 61 63 74 69  ._sql.Step(_acti
12ac0 76 65 53 74 61 74 65 6d 65 6e 74 29 20 3d 3d 20  veStatement) == 
12ad0 74 72 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20  true)..         
12ae0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12af0 5f 73 74 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 0d  _stepCount++;...
12b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
12b10 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c  (_keyInfo != nul
12b20 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12b30 20 20 5f 6b 65 79 49 6e 66 6f 2e 52 65 73 65 74    _keyInfo.Reset
12b40 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
12b50 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
12b60 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
12b70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12b80 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65     _readingState
12b90 20 3d 20 31 3b 20 2f 2f 20 46 69 6e 69 73 68 65   = 1; // Finishe
12ba0 64 20 72 65 61 64 69 6e 67 20 72 6f 77 73 0d 0a  d reading rows..
12bb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12bc0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
12bd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
12be0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
12bf0 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
12c00 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 61  number of rows a
12c10 66 66 65 63 74 65 64 20 62 79 20 74 68 65 20 73  ffected by the s
12c20 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 65  tatement being e
12c30 78 65 63 75 74 65 64 2e 0d 0a 20 20 20 20 2f 2f  xecuted...    //
12c40 2f 20 54 68 65 20 76 61 6c 75 65 20 72 65 74 75  / The value retu
12c50 72 6e 65 64 20 6d 61 79 20 6e 6f 74 20 62 65 20  rned may not be 
12c60 61 63 63 75 72 61 74 65 20 66 6f 72 20 44 44 4c  accurate for DDL
12c70 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6c   statements.  Al
12c80 73 6f 2c 20 69 74 0d 0a 20 20 20 20 2f 2f 2f 20  so, it..    /// 
12c90 77 69 6c 6c 20 62 65 20 2d 31 20 66 6f 72 20 61  will be -1 for a
12ca0 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  ny statement tha
12cb0 74 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  t does not modif
12cc0 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  y the database (
12cd0 65 2e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 53 45  e.g...    /// SE
12ce0 4c 45 43 54 29 2e 20 20 49 66 20 61 6e 20 6f 74  LECT).  If an ot
12cf0 68 65 72 77 69 73 65 20 72 65 61 64 2d 6f 6e 6c  herwise read-onl
12d00 79 20 73 74 61 74 65 6d 65 6e 74 20 6d 6f 64 69  y statement modi
12d10 66 69 65 73 20 74 68 65 20 64 61 74 61 62 61 73  fies the databas
12d20 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 64 69 72  e..    /// indir
12d30 65 63 74 6c 79 20 28 65 2e 67 2e 20 76 69 61 20  ectly (e.g. via 
12d40 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
12d50 6f 72 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20  or user-defined 
12d60 66 75 6e 63 74 69 6f 6e 29 2c 20 74 68 65 0d 0a  function), the..
12d70 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 72 65      /// value re
12d80 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65 66 69  turned is undefi
12d90 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ned...    /// </
12da0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
12db0 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e  blic override in
12dc0 74 20 52 65 63 6f 72 64 73 41 66 66 65 63 74 65  t RecordsAffecte
12dd0 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  d..    {..      
12de0 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
12df0 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 5f 72  sed(); return _r
12e00 6f 77 73 41 66 66 65 63 74 65 64 3b 20 7d 0d 0a  owsAffected; }..
12e10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
12e20 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
12e30 2f 2f 2f 20 49 6e 64 65 78 65 72 20 74 6f 20 72  /// Indexer to r
12e40 65 74 72 69 65 76 65 20 64 61 74 61 20 66 72 6f  etrieve data fro
12e50 6d 20 61 20 63 6f 6c 75 6d 6e 20 67 69 76 65 6e  m a column given
12e60 20 69 74 73 20 6e 61 6d 65 0d 0a 20 20 20 20 2f   its name..    /
12e70 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
12e80 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
12e90 6d 65 3d 22 6e 61 6d 65 22 3e 54 68 65 20 6e 61  me="name">The na
12ea0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  me of the column
12eb0 20 74 6f 20 72 65 74 72 69 65 76 65 20 64 61 74   to retrieve dat
12ec0 61 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20  a for</param>.. 
12ed0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
12ee0 54 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  The value contai
12ef0 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ned in the colum
12f00 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  n</returns>..   
12f10 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
12f20 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 73 74 72   object this[str
12f30 69 6e 67 20 6e 61 6d 65 5d 0d 0a 20 20 20 20 7b  ing name]..    {
12f40 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43 68  ..      get { Ch
12f50 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
12f60 65 74 75 72 6e 20 47 65 74 56 61 6c 75 65 28 47  eturn GetValue(G
12f70 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d 65 29 29  etOrdinal(name))
12f80 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ; }..    }....  
12f90 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
12fa0 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72  .    /// Indexer
12fb0 20 74 6f 20 72 65 74 72 69 65 76 65 20 64 61 74   to retrieve dat
12fc0 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20  a from a column 
12fd0 67 69 76 65 6e 20 69 74 73 20 69 0d 0a 20 20 20  given its i..   
12fe0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
12ff0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
13000 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
13010 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
13020 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
13030 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
13040 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
13050 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72  in the column</r
13060 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
13070 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a  lic override obj
13080 65 63 74 20 74 68 69 73 5b 69 6e 74 20 69 5d 0d  ect this[int i].
13090 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
130a0 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
130b0 64 28 29 3b 20 72 65 74 75 72 6e 20 47 65 74 56  d(); return GetV
130c0 61 6c 75 65 28 69 29 3b 20 7d 0d 0a 20 20 20 20  alue(i); }..    
130d0 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65  }....    private
130e0 20 76 6f 69 64 20 4c 6f 61 64 4b 65 79 49 6e 66   void LoadKeyInf
130f0 6f 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  o()..    {..    
13100 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f      if (_keyInfo
13110 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
13120 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13130 20 20 5f 6b 65 79 49 6e 66 6f 2e 44 69 73 70 6f    _keyInfo.Dispo
13140 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
13150 20 20 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 75     _keyInfo = nu
13160 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ll;..        }..
13170 0d 0a 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e  ..        _keyIn
13180 66 6f 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 4b  fo = new SQLiteK
13190 65 79 52 65 61 64 65 72 28 5f 63 6f 6d 6d 61 6e  eyReader(_comman
131a0 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68  d.Connection, th
131b0 69 73 2c 20 5f 61 63 74 69 76 65 53 74 61 74 65  is, _activeState
131c0 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  ment);..    }.. 
131d0 20 7d 0d 0a 7d 0d 0a                              }..}..