System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 341f4bf16f0add8069ecfe51d6b25ead9b799c2a:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75  ns.Generic;..  u
0180: 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c  sing System.Coll
0190: 65 63 74 69 6f 6e 73 2e 53 70 65 63 69 61 6c 69  ections.Speciali
01a0: 7a 65 64 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  zed;..  using Sy
01b0: 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 75 73  stem.Data;..  us
01c0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
01d0: 43 6f 6d 6d 6f 6e 3b 0d 0a 20 20 75 73 69 6e 67  Common;..  using
01e0: 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a   System.Globaliz
01f0: 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20  ation;....  /// 
0200: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  <summary>..  ///
0210: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
0220: 74 61 74 69 6f 6e 20 6f 66 20 44 62 44 61 74 61  tation of DbData
0230: 52 65 61 64 65 72 2e 0d 0a 20 20 2f 2f 2f 20 3c  Reader...  /// <
0240: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62  /summary>..  pub
0250: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
0260: 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65   SQLiteDataReade
0270: 72 20 3a 20 44 62 44 61 74 61 52 65 61 64 65 72  r : DbDataReader
0280: 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ..  {..    /// <
0290: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
02a0: 2f 20 55 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d  / Underlying com
02b0: 6d 61 6e 64 20 74 68 69 73 20 72 65 61 64 65 72  mand this reader
02c0: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 0d   is attached to.
02d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
02e0: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
02f0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 5f   SQLiteCommand _
0300: 63 6f 6d 6d 61 6e 64 3b 0d 0a 20 20 20 20 2f 2f  command;..    //
0310: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0320: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 70   /// The flags p
0330: 65 72 74 61 69 6e 69 6e 67 20 74 6f 20 74 68 65  ertaining to the
0340: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6e 6e   associated conn
0350: 65 63 74 69 6f 6e 20 28 76 69 61 20 74 68 65 20  ection (via the 
0360: 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 2f  command)...    /
0370: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0380: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0390: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
03a0: 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20 2f 2f   _flags;..    //
03b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
03c0: 20 2f 2f 2f 20 49 6e 64 65 78 20 6f 66 20 74 68   /// Index of th
03d0: 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
03e0: 65 6e 74 20 69 6e 20 74 68 65 20 63 6f 6d 6d 61  ent in the comma
03f0: 6e 64 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73  nd being process
0400: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
0410: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
0420: 61 74 65 20 69 6e 74 20 5f 61 63 74 69 76 65 53  ate int _activeS
0430: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 3b 0d 0a  tatementIndex;..
0440: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0450: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65  >..    /// Curre
0460: 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  nt statement bei
0470: 6e 67 20 52 65 61 64 28 29 0d 0a 20 20 20 20 2f  ng Read()..    /
0480: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0490: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
04a0: 65 53 74 61 74 65 6d 65 6e 74 20 5f 61 63 74 69  eStatement _acti
04b0: 76 65 53 74 61 74 65 6d 65 6e 74 3b 0d 0a 20 20  veStatement;..  
04c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
04d0: 0a 20 20 20 20 2f 2f 2f 20 53 74 61 74 65 20 6f  .    /// State o
04e0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  f the current st
04f0: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72  atement being pr
0500: 6f 63 65 73 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  ocessed...    //
0510: 2f 20 2d 31 20 3d 20 46 69 72 73 74 20 53 74 65  / -1 = First Ste
0520: 70 28 29 20 65 78 65 63 75 74 65 64 2c 20 73 6f  p() executed, so
0530: 20 74 68 65 20 66 69 72 73 74 20 52 65 61 64 28   the first Read(
0540: 29 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65  ) will be ignore
0550: 64 0d 0a 20 20 20 20 2f 2f 2f 20 20 30 20 3d 20  d..    ///  0 = 
0560: 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67  Actively reading
0570: 0d 0a 20 20 20 20 2f 2f 2f 20 20 31 20 3d 20 46  ..    ///  1 = F
0580: 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 0d  inished reading.
0590: 0a 20 20 20 20 2f 2f 2f 20 20 32 20 3d 20 4e 6f  .    ///  2 = No
05a0: 6e 2d 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20  n-row-returning 
05b0: 73 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 20 72 65  statement, no re
05c0: 63 6f 72 64 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cords..    /// <
05d0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
05e0: 72 69 76 61 74 65 20 69 6e 74 20 5f 72 65 61 64  rivate int _read
05f0: 69 6e 67 53 74 61 74 65 3b 0d 0a 20 20 20 20 2f  ingState;..    /
0600: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0610: 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 6f 66 20    /// Number of 
0620: 72 65 63 6f 72 64 73 20 61 66 66 65 63 74 65 64  records affected
0630: 20 62 79 20 74 68 65 20 69 6e 73 65 72 74 2f 75   by the insert/u
0640: 70 64 61 74 65 20 73 74 61 74 65 6d 65 6e 74 73  pdate statements
0650: 20 65 78 65 63 75 74 65 64 20 6f 6e 20 74 68 65   executed on the
0660: 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 2f 2f   command..    //
0670: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0680: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 5f 72    private int _r
0690: 6f 77 73 41 66 66 65 63 74 65 64 3b 0d 0a 20 20  owsAffected;..  
06a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
06b0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 75 6e 74 20 6f  .    /// Count o
06c0: 66 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d 6e  f fields (column
06d0: 73 29 20 69 6e 20 74 68 65 20 72 6f 77 2d 72 65  s) in the row-re
06e0: 74 75 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e  turning statemen
06f0: 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
0700: 67 20 70 72 6f 63 65 73 73 65 64 0d 0a 20 20 20  g processed..   
0710: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0720: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
0730: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20   _fieldCount;.. 
0740: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0750: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
0760: 6d 62 65 72 20 6f 66 20 63 61 6c 6c 73 20 74 6f  mber of calls to
0770: 20 53 74 65 70 28 29 20 74 68 61 74 20 68 61 76   Step() that hav
0780: 65 20 72 65 74 75 72 6e 65 64 20 74 72 75 65 20  e returned true 
0790: 28 69 2e 65 2e 20 74 68 65 20 6e 75 6d 62 65 72  (i.e. the number
07a0: 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0d 0a 20   of rows that.. 
07b0: 20 20 20 2f 2f 2f 20 68 61 76 65 20 62 65 65 6e     /// have been
07c0: 20 72 65 61 64 20 69 6e 20 74 68 65 20 63 75 72   read in the cur
07d0: 72 65 6e 74 20 72 65 73 75 6c 74 20 73 65 74 29  rent result set)
07e0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
07f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0800: 74 65 20 69 6e 74 20 5f 73 74 65 70 43 6f 75 6e  te int _stepCoun
0810: 74 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  t;..    /// <sum
0820: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d  mary>..    /// M
0830: 61 70 73 20 74 68 65 20 66 69 65 6c 64 20 28 63  aps the field (c
0840: 6f 6c 75 6d 6e 29 20 6e 61 6d 65 73 20 74 6f 20  olumn) names to 
0850: 74 68 65 69 72 20 63 6f 72 72 65 73 70 6f 6e 64  their correspond
0860: 69 6e 67 20 69 6e 64 65 78 65 73 20 77 69 74 68  ing indexes with
0870: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0d  in the results..
0880: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0890: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
08a0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
08b0: 6e 67 2c 20 69 6e 74 3e 20 5f 66 69 65 6c 64 49  ng, int> _fieldI
08c0: 6e 64 65 78 65 73 3b 0d 0a 20 20 20 20 2f 2f 2f  ndexes;..    ///
08d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
08e0: 2f 2f 2f 20 44 61 74 61 74 79 70 65 73 20 6f 66  /// Datatypes of
08f0: 20 61 63 74 69 76 65 20 66 69 65 6c 64 73 20 28   active fields (
0900: 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74 68 65 20  columns) in the 
0910: 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
0920: 74 2c 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  t, used for type
0930: 2d 72 65 73 74 72 69 63 74 69 6e 67 20 64 61 74  -restricting dat
0940: 61 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  a..    /// </sum
0950: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
0960: 74 65 20 53 51 4c 69 74 65 54 79 70 65 5b 5d 20  te SQLiteType[] 
0970: 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 3b  _fieldTypeArray;
0980: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0990: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
09a0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
09b0: 68 65 20 64 61 74 61 72 65 61 64 65 72 0d 0a 20  he datareader.. 
09c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
09d0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 43  >..    private C
09e0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 5f  ommandBehavior _
09f0: 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 3b  commandBehavior;
0a00: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0a10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
0a20: 66 20 73 65 74 2c 20 74 68 65 6e 20 64 69 73 70  f set, then disp
0a30: 6f 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61  ose of the comma
0a40: 6e 64 20 6f 62 6a 65 63 74 20 77 68 65 6e 20 74  nd object when t
0a50: 68 65 20 72 65 61 64 65 72 20 69 73 20 66 69 6e  he reader is fin
0a60: 69 73 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ished..    /// <
0a70: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
0a80: 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 64 69  nternal bool _di
0a90: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 3b 0d 0a 0d  sposeCommand;...
0aa0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0ab0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73  y>..    /// If s
0ac0: 65 74 2c 20 74 68 65 6e 20 72 61 69 73 65 20 61  et, then raise a
0ad0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 68 65 6e  n exception when
0ae0: 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61   the object is a
0af0: 63 63 65 73 73 65 64 20 61 66 74 65 72 20 62 65  ccessed after be
0b00: 69 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  ing disposed... 
0b10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0b20: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
0b30: 62 6f 6f 6c 20 5f 74 68 72 6f 77 4f 6e 44 69 73  bool _throwOnDis
0b40: 70 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  posed;....    //
0b50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0b60: 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66   /// An array of
0b70: 20 72 6f 77 69 64 27 73 20 66 6f 72 20 74 68 65   rowid's for the
0b80: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
0b90: 74 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61  t if CommandBeha
0ba0: 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 20 69 73 20  vior.KeyInfo is 
0bb0: 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
0bc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0bd0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0be0: 65 4b 65 79 52 65 61 64 65 72 20 5f 6b 65 79 49  eKeyReader _keyI
0bf0: 6e 66 6f 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  nfo;....    /// 
0c00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0c10: 2f 2f 20 4d 61 74 63 68 65 73 20 74 68 65 20 76  // Matches the v
0c20: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  ersion of the co
0c30: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
0c40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0c50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20     internal int 
0c60: 5f 76 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  _version;....   
0c70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0c80: 20 20 20 20 2f 2f 2f 20 54 68 65 20 22 73 74 75      /// The "stu
0c90: 62 22 20 28 69 2e 65 2e 20 70 6c 61 63 65 68 6f  b" (i.e. placeho
0ca0: 6c 64 65 72 29 20 62 61 73 65 20 73 63 68 65 6d  lder) base schem
0cb0: 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 77 68  a name to use wh
0cc0: 65 6e 20 72 65 74 75 72 6e 69 6e 67 0d 0a 20 20  en returning..  
0cd0: 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 73 63 68    /// column sch
0ce0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ema information.
0cf0: 20 20 4d 61 74 63 68 65 73 20 74 68 65 20 62 61    Matches the ba
0d00: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 75  se schema name u
0d10: 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  sed by the..    
0d20: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 63  /// associated c
0d30: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
0d40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0d50: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
0d60: 6e 67 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61  ng _baseSchemaNa
0d70: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  me;....    /// <
0d80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0d90: 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74  / Internal const
0da0: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
0db0: 7a 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  zes the dataread
0dc0: 65 72 20 61 6e 64 20 73 65 74 73 20 75 70 20 74  er and sets up t
0dd0: 6f 20 62 65 67 69 6e 20 65 78 65 63 75 74 69 6e  o begin executin
0de0: 67 20 73 74 61 74 65 6d 65 6e 74 73 0d 0a 20 20  g statements..  
0df0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0e00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0e10: 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65 20   name="cmd">The 
0e20: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74 68  SQLiteCommand th
0e30: 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20 69  is data reader i
0e40: 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20  s for</param>.. 
0e50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e60: 6d 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20  me="behave">The 
0e70: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
0e80: 72 20 6f 66 20 74 68 65 20 64 61 74 61 20 72 65  r of the data re
0e90: 61 64 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ader</param>..  
0ea0: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
0eb0: 65 44 61 74 61 52 65 61 64 65 72 28 53 51 4c 69  eDataReader(SQLi
0ec0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43  teCommand cmd, C
0ed0: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 62  ommandBehavior b
0ee0: 65 68 61 76 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ehave)..    {.. 
0ef0: 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69 73       _throwOnDis
0f00: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
0f10: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20       _command = 
0f20: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 5f 76 65 72  cmd;..      _ver
0f30: 73 69 6f 6e 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  sion = _command.
0f40: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 76 65 72 73  Connection._vers
0f50: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 5f 62 61 73  ion;..      _bas
0f60: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 5f 63  eSchemaName = _c
0f70: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
0f80: 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  n._baseSchemaNam
0f90: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 63 6f 6d  e;....      _com
0fa0: 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 3d 20 62  mandBehavior = b
0fb0: 65 68 61 76 65 3b 0d 0a 20 20 20 20 20 20 5f 61  ehave;..      _a
0fc0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
0fd0: 64 65 78 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  dex = -1;..     
0fe0: 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d   _rowsAffected =
0ff0: 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65   -1;....      Re
1000: 66 72 65 73 68 46 6c 61 67 73 28 29 3b 0d 0a 0d  freshFlags();...
1010: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
1020: 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
1030: 64 28 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  d(GetConnection(
1040: 74 68 69 73 29 2c 0d 0a 20 20 20 20 20 20 20 20  this),..        
1050: 20 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e    new Connection
1060: 45 76 65 6e 74 41 72 67 73 28 53 51 4c 69 74 65  EventArgs(SQLite
1070: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
1080: 79 70 65 2e 4e 65 77 44 61 74 61 52 65 61 64 65  ype.NewDataReade
1090: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 75  r,..          nu
10a0: 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61  ll, null, _comma
10b0: 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c 2c 20  nd, this, null, 
10c0: 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  null, new object
10d0: 5b 5d 20 7b 20 62 65 68 61 76 65 20 7d 29 29 3b  [] { behave }));
10e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 63  ....      if (_c
10f0: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
1100: 0a 20 20 20 20 20 20 20 20 20 20 4e 65 78 74 52  .          NextR
1110: 65 73 75 6c 74 28 29 3b 0d 0a 20 20 20 20 7d 0d  esult();..    }.
1120: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1190: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
11a0: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
11b0: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
11c0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
11d0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
11e0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
11f0: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
1200: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
1210: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
1220: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
1230: 64 20 26 26 20 5f 74 68 72 6f 77 4f 6e 44 69 73  d && _throwOnDis
1240: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
1250: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
1260: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
1270: 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c  ption(typeof(SQL
1280: 69 74 65 44 61 74 61 52 65 61 64 65 72 29 2e 4e  iteDataReader).N
1290: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
12a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1310: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1320: 0d 0a 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73  ..    /// Dispos
1330: 65 20 6f 66 20 61 6c 6c 20 72 65 73 6f 75 72 63  e of all resourc
1340: 65 73 20 75 73 65 64 20 62 79 20 74 68 69 73 20  es used by this 
1350: 64 61 74 61 72 65 61 64 65 72 2e 0d 0a 20 20 20  datareader...   
1360: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1380: 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22  name="disposing"
1390: 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70  ></param>..    p
13a0: 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64  rotected overrid
13b0: 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  e void Dispose(b
13c0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
13d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
13e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
13f0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1400: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1410: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1420: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
1430: 72 67 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  rgs(SQLiteConnec
1440: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 44 69  tionEventType.Di
1450: 73 70 6f 73 69 6e 67 44 61 74 61 52 65 61 64 65  sposingDataReade
1460: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
1470: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 63 6f 6d  null, null, _com
1480: 6d 61 6e 64 2c 20 74 68 69 73 2c 20 6e 75 6c 6c  mand, this, null
1490: 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65  , null, new obje
14a0: 63 74 5b 5d 20 7b 20 64 69 73 70 6f 73 69 6e 67  ct[] { disposing
14b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ,..            d
14c0: 69 73 70 6f 73 65 64 2c 20 5f 63 6f 6d 6d 61 6e  isposed, _comman
14d0: 64 42 65 68 61 76 69 6f 72 2c 20 5f 72 65 61 64  dBehavior, _read
14e0: 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f 77 73 41  ingState, _rowsA
14f0: 66 66 65 63 74 65 64 2c 20 5f 73 74 65 70 43 6f  ffected, _stepCo
1500: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
1510: 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 20 5f    _fieldCount, _
1520: 64 69 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 2c 20  disposeCommand, 
1530: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
1540: 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   }));....       
1550: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1570: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1580: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
15a0: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15d0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1610: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1620: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1630: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1640: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1650: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1680: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
16d0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
16e0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
16f0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1740: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1760: 4f 54 45 3a 20 46 69 78 20 66 6f 72 20 74 69 63  OTE: Fix for tic
1770: 6b 65 74 20 5b 65 31 62 32 65 30 66 37 36 39 5d  ket [e1b2e0f769]
1780: 2c 20 64 6f 20 4e 4f 54 20 74 68 72 6f 77 20 65  , do NOT throw e
1790: 78 63 65 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20  xceptions..     
17a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17b0: 20 20 20 20 77 68 69 6c 65 20 77 65 20 61 72 65      while we are
17c0: 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64 2e   being disposed.
17d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
17f0: 20 20 20 20 20 20 5f 74 68 72 6f 77 4f 6e 44 69        _throwOnDi
1800: 73 70 6f 73 65 64 20 3d 20 66 61 6c 73 65 3b 0d  sposed = false;.
1810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1820: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1830: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
1840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1850: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
1860: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20  disposing);.... 
1870: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1880: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1890: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
18a0: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
18b0: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
18c0: 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  point...        
18d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
18e0: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
18f0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1900: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1910: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1980: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f  .    internal vo
1990: 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  id Cancel()..   
19a0: 20 7b 0d 0a 20 20 20 20 20 20 5f 76 65 72 73 69   {..      _versi
19b0: 6f 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  on = 0;..    }..
19c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
19d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c 6f  ry>..    /// Clo
19e0: 73 65 73 20 74 68 65 20 64 61 74 61 72 65 61 64  ses the dataread
19f0: 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20  er, potentially 
1a00: 63 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  closing the conn
1a10: 65 63 74 69 6f 6e 20 61 73 20 77 65 6c 6c 20 69  ection as well i
1a20: 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  f CommandBehavio
1a30: 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f  r.CloseConnectio
1a40: 6e 20 77 61 73 20 73 70 65 63 69 66 69 65 64 2e  n was specified.
1a50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1a60: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
1a70: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
1a80: 6c 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  lose()..    {.. 
1a90: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
1aa0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53  ed();....      S
1ab0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
1ac0: 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f 6e  OnChanged(GetCon
1ad0: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0d 0a  nection(this),..
1ae0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f            new Co
1af0: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
1b00: 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  s(SQLiteConnecti
1b10: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73  onEventType.Clos
1b20: 69 6e 67 44 61 74 61 52 65 61 64 65 72 2c 0d 0a  ingDataReader,..
1b30: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
1b40: 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61 6e 64 2c 20  null, _command, 
1b50: 74 68 69 73 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  this, null, null
1b60: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
1b70: 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f   _commandBehavio
1b80: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 72  r,..          _r
1b90: 65 61 64 69 6e 67 53 74 61 74 65 2c 20 5f 72 6f  eadingState, _ro
1ba0: 77 73 41 66 66 65 63 74 65 64 2c 20 5f 73 74 65  wsAffected, _ste
1bb0: 70 43 6f 75 6e 74 2c 20 5f 66 69 65 6c 64 43 6f  pCount, _fieldCo
1bc0: 75 6e 74 2c 20 5f 64 69 73 70 6f 73 65 43 6f 6d  unt, _disposeCom
1bd0: 6d 61 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  mand,..         
1be0: 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65   _throwOnDispose
1bf0: 64 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  d }));....      
1c00: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
1c10: 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61        if (_comma
1c20: 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nd != null)..   
1c30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c40: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1c50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c60: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1c70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c80: 20 20 2f 2f 20 4d 61 6b 65 20 73 75 72 65 20 77    // Make sure w
1c90: 65 27 76 65 20 6e 6f 74 20 62 65 65 6e 20 63 61  e've not been ca
1ca0: 6e 63 65 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  nceled..        
1cb0: 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73 69        if (_versi
1cc0: 6f 6e 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  on != 0)..      
1cd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ce0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d10: 20 20 20 20 20 77 68 69 6c 65 20 28 4e 65 78 74       while (Next
1d20: 52 65 73 75 6c 74 28 29 29 0d 0a 20 20 20 20 20  Result())..     
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d70: 20 20 20 20 20 20 20 20 63 61 74 63 68 28 53 51          catch(SQ
1d80: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 29 0d 0a  LiteException)..
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1db0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1dc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1dd0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 52 65       _command.Re
1de0: 73 65 74 44 61 74 61 52 65 61 64 65 72 28 29 3b  setDataReader();
1df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
1e10: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e30: 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64 61 74     // If the dat
1e40: 61 72 65 61 64 65 72 27 73 20 62 65 68 61 76 69  areader's behavi
1e50: 6f 72 20 69 6e 63 6c 75 64 65 73 20 63 6c 6f 73  or includes clos
1e60: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
1e70: 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73 6f 20 68  on, then do so h
1e80: 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ere...          
1e90: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
1ea0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
1eb0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73  andBehavior.Clos
1ec0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 21 3d 20  eConnection) != 
1ed0: 30 20 26 26 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  0 && _command.Co
1ee0: 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  nnection != null
1ef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f00: 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e     _command.Conn
1f10: 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d  ection.Close();.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f40: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
1f50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f60: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 64 69           if (_di
1f70: 73 70 6f 73 65 43 6f 6d 6d 61 6e 64 29 0d 0a 20  sposeCommand).. 
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63 6f               _co
1f90: 6d 6d 61 6e 64 2e 44 69 73 70 6f 73 65 28 29 3b  mmand.Dispose();
1fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
1fb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fc0: 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 6e      _command = n
1fd0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f 61  ull;..        _a
1fe0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d  ctiveStatement =
1ff0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2000: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
2010: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 5f  null;..        _
2020: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d  fieldTypeArray =
2030: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d   null;..      }.
2040: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
2050: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2060: 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
2070: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2080: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65  {..          _ke
2090: 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b  yInfo.Dispose();
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79  ..          _key
20b0: 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Info = null;..  
20c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
20d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
20e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
20f0: 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20 65    /// Throw an e
2100: 72 72 6f 72 20 69 66 20 74 68 65 20 64 61 74 61  rror if the data
2110: 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
2120: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2130: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
2140: 65 20 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73  e void CheckClos
2150: 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
2160: 20 20 20 69 66 20 28 21 5f 74 68 72 6f 77 4f 6e     if (!_throwOn
2170: 44 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  Disposed)..     
2180: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
2190: 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64      if (_command
21a0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
21b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
21c0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
21d0: 65 70 74 69 6f 6e 28 22 44 61 74 61 52 65 61 64  eption("DataRead
21e0: 65 72 20 68 61 73 20 62 65 65 6e 20 63 6c 6f 73  er has been clos
21f0: 65 64 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ed");....      i
2200: 66 20 28 5f 76 65 72 73 69 6f 6e 20 3d 3d 20 30  f (_version == 0
2210: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
2220: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2230: 74 69 6f 6e 28 22 45 78 65 63 75 74 69 6f 6e 20  tion("Execution 
2240: 77 61 73 20 61 62 6f 72 74 65 64 20 62 79 20 74  was aborted by t
2250: 68 65 20 75 73 65 72 22 29 3b 0d 0a 0d 0a 20 20  he user");....  
2260: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2270: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
2280: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
2290: 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ction;....      
22a0: 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  if (connection._
22b0: 76 65 72 73 69 6f 6e 20 21 3d 20 5f 76 65 72 73  version != _vers
22c0: 69 6f 6e 20 7c 7c 20 63 6f 6e 6e 65 63 74 69 6f  ion || connectio
22d0: 6e 2e 53 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65  n.State != Conne
22e0: 63 74 69 6f 6e 53 74 61 74 65 2e 4f 70 65 6e 29  ctionState.Open)
22f0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
2300: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
2310: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 43  tionException("C
2320: 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 63 6c  onnection was cl
2330: 6f 73 65 64 2c 20 73 74 61 74 65 6d 65 6e 74 20  osed, statement 
2340: 77 61 73 20 74 65 72 6d 69 6e 61 74 65 64 22 29  was terminated")
2350: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
2360: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2370: 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20     /// Throw an 
2380: 65 72 72 6f 72 20 69 66 20 61 20 72 6f 77 20 69  error if a row i
2390: 73 20 6e 6f 74 20 6c 6f 61 64 65 64 0d 0a 20 20  s not loaded..  
23a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
23b0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
23c0: 69 64 20 43 68 65 63 6b 56 61 6c 69 64 52 6f 77  id CheckValidRow
23d0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
23e0: 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61   if (_readingSta
23f0: 74 65 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  te != 0)..      
2400: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
2410: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
2420: 70 74 69 6f 6e 28 22 4e 6f 20 63 75 72 72 65 6e  ption("No curren
2430: 74 20 72 6f 77 22 29 3b 0d 0a 20 20 20 20 7d 0d  t row");..    }.
2440: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2450: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
2460: 75 6d 65 72 61 74 6f 72 20 73 75 70 70 6f 72 74  umerator support
2470: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2480: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
2490: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
24a0: 20 44 62 45 6e 75 6d 65 72 61 74 6f 72 20 6f 62   DbEnumerator ob
24b0: 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ject.</returns>.
24c0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
24d0: 72 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 73  ride Collections
24e0: 2e 49 45 6e 75 6d 65 72 61 74 6f 72 20 47 65 74  .IEnumerator Get
24f0: 45 6e 75 6d 65 72 61 74 6f 72 28 29 0d 0a 20 20  Enumerator()..  
2500: 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
2510: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
2520: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 62     return new Db
2530: 45 6e 75 6d 65 72 61 74 6f 72 28 74 68 69 73 2c  Enumerator(this,
2540: 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
2550: 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
2560: 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65  avior.CloseConne
2570: 63 74 69 6f 6e 29 20 3d 3d 20 43 6f 6d 6d 61 6e  ction) == Comman
2580: 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43  dBehavior.CloseC
2590: 6f 6e 6e 65 63 74 69 6f 6e 29 29 3b 0d 0a 20 20  onnection));..  
25a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
25b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
25c0: 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65  / Not implemente
25d0: 64 2e 20 20 52 65 74 75 72 6e 73 20 30 0d 0a 20  d.  Returns 0.. 
25e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
25f0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
2600: 65 72 72 69 64 65 20 69 6e 74 20 44 65 70 74 68  erride int Depth
2610: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
2620: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
2630: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2640: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43  ed();..        C
2650: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20  heckClosed();.. 
2660: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
2670: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2680: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2690: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
26a0: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
26b0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
26c0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73 75  the current resu
26d0: 6c 74 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ltset..    /// <
26e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
26f0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
2700: 6e 74 20 46 69 65 6c 64 43 6f 75 6e 74 0d 0a 20  nt FieldCount.. 
2710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
2720: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2730: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
2740: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2750: 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  kClosed();....  
2760: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
2770: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
2780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66         return _f
2790: 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  ieldCount;....  
27a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69        return _fi
27b0: 65 6c 64 43 6f 75 6e 74 20 2b 20 5f 6b 65 79 49  eldCount + _keyI
27c0: 6e 66 6f 2e 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  nfo.Count;..    
27d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
27e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
27f0: 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 63 65 73 20  .    /// Forces 
2800: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
2810: 6c 61 67 73 20 63 61 63 68 65 64 20 62 79 20 74  lags cached by t
2820: 68 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20  his data reader 
2830: 74 6f 20 62 65 20 72 65 66 72 65 73 68 65 64 0d  to be refreshed.
2840: 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68  .    /// from th
2850: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6e  e underlying con
2860: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
2870: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2880: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 52 65    public void Re
2890: 66 72 65 73 68 46 6c 61 67 73 28 29 0d 0a 20 20  freshFlags()..  
28a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65    {..        Che
28b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
28c0: 0a 20 20 20 20 20 20 20 20 5f 66 6c 61 67 73 20  .        _flags 
28d0: 3d 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  = SQLiteCommand.
28e0: 47 65 74 46 6c 61 67 73 28 5f 63 6f 6d 6d 61 6e  GetFlags(_comman
28f0: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
2900: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2910: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
2920: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2930: 6f 77 73 20 73 65 65 6e 20 73 6f 20 66 61 72 20  ows seen so far 
2940: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  in the current r
2950: 65 73 75 6c 74 20 73 65 74 2e 0d 0a 20 20 20 20  esult set...    
2960: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2970: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 53      public int S
2980: 74 65 70 43 6f 75 6e 74 0d 0a 20 20 20 20 7b 0d  tepCount..    {.
2990: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
29a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29b0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
29c0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
29d0: 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29     CheckClosed()
29e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29f0: 20 72 65 74 75 72 6e 20 5f 73 74 65 70 43 6f 75   return _stepCou
2a00: 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  nt;..        }..
2a10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
2a20: 76 61 74 65 20 69 6e 74 20 50 72 69 76 61 74 65  vate int Private
2a30: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
2a40: 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
2a50: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
2a60: 66 69 65 6c 64 43 6f 75 6e 74 3b 20 7d 0d 0a 20  fieldCount; }.. 
2a70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
2a80: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
2a90: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
2aa0: 75 6d 62 65 72 20 6f 66 20 76 69 73 69 62 6c 65  umber of visible
2ab0: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63   fields in the c
2ac0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
2ad0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2ae0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
2af0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 69   override int Vi
2b00: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 0d  sibleFieldCount.
2b10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2b20: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2b30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
2b40: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68  d();..        Ch
2b50: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20  eckClosed();..  
2b60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 72 69        return Pri
2b70: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
2b80: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 7d 0d  Count;..      }.
2b90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2ba0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2bb0: 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
2bc0: 20 69 73 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   is used to make
2bd0: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
2be0: 20 73 65 74 20 69 73 20 6f 70 65 6e 20 61 6e 64   set is open and
2bf0: 20 61 20 72 6f 77 20 69 73 20 63 75 72 72 65 6e   a row is curren
2c00: 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a  tly available...
2c10: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2c20: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
2c30: 76 6f 69 64 20 56 65 72 69 66 79 46 6f 72 47 65  void VerifyForGe
2c40: 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  t()..    {..    
2c50: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
2c60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63  );..        Chec
2c70: 6b 56 61 6c 69 64 52 6f 77 28 29 3b 0d 0a 20 20  kValidRow();..  
2c80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2c90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2ca0: 2f 20 53 51 4c 69 74 65 20 69 73 20 69 6e 68 65  / SQLite is inhe
2cb0: 72 65 6e 74 6c 79 20 75 6e 2d 74 79 70 65 64 2e  rently un-typed.
2cc0: 20 20 41 6c 6c 20 64 61 74 61 74 79 70 65 73 20    All datatypes 
2cd0: 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20 6e 61  in SQLite are na
2ce0: 74 69 76 65 6c 79 20 73 74 72 69 6e 67 73 2e 20  tively strings. 
2cf0: 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   The definition 
2d00: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  of the columns o
2d10: 66 20 61 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  f a table..    /
2d20: 2f 2f 20 61 6e 64 20 74 68 65 20 61 66 66 69 6e  // and the affin
2d30: 69 74 79 20 6f 66 20 72 65 74 75 72 6e 65 64 20  ity of returned 
2d40: 74 79 70 65 73 20 61 72 65 20 61 6c 6c 20 77 65  types are all we
2d50: 20 68 61 76 65 20 74 6f 20 67 6f 20 6f 6e 20 74   have to go on t
2d60: 6f 20 74 79 70 65 2d 72 65 73 74 72 69 63 74 20  o type-restrict 
2d70: 64 61 74 61 20 69 6e 20 74 68 65 20 72 65 61 64  data in the read
2d80: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 0d 0a 20 20  er...    ///..  
2d90: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
2da0: 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ion attempts to 
2db0: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
2dc0: 74 79 70 65 20 6f 66 20 64 61 74 61 20 62 65 69  type of data bei
2dd0: 6e 67 20 72 65 71 75 65 73 74 65 64 20 6f 66 20  ng requested of 
2de0: 61 20 63 6f 6c 75 6d 6e 20 6d 61 74 63 68 65 73  a column matches
2df0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
2e00: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 6e   the column.  In
2e10: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63 61  ..    /// the ca
2e20: 73 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  se of columns th
2e30: 61 74 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  at are not backe
2e40: 64 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 64  d into a table d
2e50: 65 66 69 6e 69 74 69 6f 6e 2c 20 77 65 20 61 74  efinition, we at
2e60: 74 65 6d 70 74 20 74 6f 20 6d 61 74 63 68 20 75  tempt to match u
2e70: 70 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  p the affinity o
2e80: 66 20 61 20 63 6f 6c 75 6d 6e 20 28 69 6e 74 2c  f a column (int,
2e90: 20 64 6f 75 62 6c 65 2c 20 73 74 72 69 6e 67 20   double, string 
2ea0: 6f 72 20 62 6c 6f 62 29 0d 0a 20 20 20 20 2f 2f  or blob)..    //
2eb0: 2f 20 74 6f 20 61 20 73 65 74 20 6f 66 20 6b 6e  / to a set of kn
2ec0: 6f 77 6e 20 74 79 70 65 73 20 74 68 61 74 20 63  own types that c
2ed0: 6c 6f 73 65 6c 79 20 6d 61 74 63 68 20 74 68 61  losely match tha
2ee0: 74 20 61 66 66 69 6e 69 74 79 2e 20 20 49 74 27  t affinity.  It'
2ef0: 73 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 73  s not an exact s
2f00: 63 69 65 6e 63 65 2c 20 62 75 74 20 69 74 73 20  cience, but its 
2f10: 74 68 65 20 62 65 73 74 20 77 65 20 63 61 6e 20  the best we can 
2f20: 64 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  do...    /// </s
2f30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2f40: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2f50: 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f  /// This functio
2f60: 6e 20 74 68 72 6f 77 73 20 61 6e 20 49 6e 76 61  n throws an Inva
2f70: 6c 69 64 54 79 70 65 43 61 73 74 28 29 20 65 78  lidTypeCast() ex
2f80: 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 72  ception if the r
2f90: 65 71 75 65 73 74 65 64 20 74 79 70 65 20 64 6f  equested type do
2fa0: 65 73 6e 27 74 20 6d 61 74 63 68 20 74 68 65 20  esn't match the 
2fb0: 63 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e 69 74  column's definit
2fc0: 69 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74 79 2e  ion or affinity.
2fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
2fe0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  rns>..    /// <p
2ff0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
3000: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
3010: 6f 6c 75 6d 6e 20 74 6f 20 74 79 70 65 2d 63 68  olumn to type-ch
3020: 65 63 6b 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eck</param>..   
3030: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3040: 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
3050: 77 65 20 77 61 6e 74 20 74 6f 20 67 65 74 20 6f  we want to get o
3060: 75 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ut of the column
3070: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 72  </param>..    pr
3080: 69 76 61 74 65 20 54 79 70 65 41 66 66 69 6e 69  ivate TypeAffini
3090: 74 79 20 56 65 72 69 66 79 54 79 70 65 28 69 6e  ty VerifyType(in
30a0: 74 20 69 2c 20 44 62 54 79 70 65 20 74 79 70 29  t i, DbType typ)
30b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
30c0: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
30d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
30e0: 6c 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 79 70  lags.NoVerifyTyp
30f0: 65 41 66 66 69 6e 69 74 79 29 20 3d 3d 20 53 51  eAffinity) == SQ
3100: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3110: 61 67 73 2e 4e 6f 56 65 72 69 66 79 54 79 70 65  ags.NoVerifyType
3120: 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20  Affinity)..     
3130: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79         return Ty
3140: 70 65 41 66 66 69 6e 69 74 79 2e 4e 6f 6e 65 3b  peAffinity.None;
3150: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70 65  ....        Type
3160: 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e 69 74  Affinity affinit
3170: 79 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70  y = GetSQLiteTyp
3180: 65 28 5f 66 6c 61 67 73 2c 20 69 29 2e 41 66 66  e(_flags, i).Aff
3190: 69 6e 69 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  inity;....      
31a0: 20 20 73 77 69 74 63 68 20 28 61 66 66 69 6e 69    switch (affini
31b0: 74 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ty)..        {..
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
31d0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
31e0: 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  t64:..          
31f0: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
3200: 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29 20 72   DbType.Int64) r
3210: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3230: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3240: 70 65 2e 49 6e 74 33 32 29 20 72 65 74 75 72 6e  pe.Int32) return
3250: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3260: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3270: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e  typ == DbType.In
3280: 74 31 36 29 20 72 65 74 75 72 6e 20 61 66 66 69  t16) return affi
3290: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
32a0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
32b0: 3d 20 44 62 54 79 70 65 2e 42 79 74 65 29 20 72  = DbType.Byte) r
32c0: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
32d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32e0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
32f0: 70 65 2e 53 42 79 74 65 29 20 72 65 74 75 72 6e  pe.SByte) return
3300: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3310: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3320: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42 6f  typ == DbType.Bo
3330: 6f 6c 65 61 6e 29 20 72 65 74 75 72 6e 20 61 66  olean) return af
3340: 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20  finity;..       
3350: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
3360: 20 3d 3d 20 44 62 54 79 70 65 2e 44 61 74 65 54   == DbType.DateT
3370: 69 6d 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  ime) return affi
3380: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
3390: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
33a0: 3d 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29  = DbType.Double)
33b0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
33c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33d0: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
33e0: 54 79 70 65 2e 53 69 6e 67 6c 65 29 20 72 65 74  Type.Single) ret
33f0: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3410: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3420: 2e 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e  .Decimal) return
3430: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
3440: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3450: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
3460: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
3470: 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
3480: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
3490: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 6f 75  yp == DbType.Dou
34a0: 62 6c 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  ble) return affi
34b0: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
34c0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
34d0: 3d 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29  = DbType.Single)
34e0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
34f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3500: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
3510: 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72 65  Type.Decimal) re
3520: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a  turn affinity;..
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3540: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
3550: 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74 75  e.DateTime) retu
3560: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20  rn affinity;..  
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
3580: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
3590: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
35a0: 69 74 79 2e 54 65 78 74 3a 0d 0a 20 20 20 20 20  ity.Text:..     
35b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
35c0: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 74 72  yp == DbType.Str
35d0: 69 6e 67 29 20 72 65 74 75 72 6e 20 61 66 66 69  ing) return affi
35e0: 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  nity;..         
35f0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
3600: 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29 20 72  = DbType.Guid) r
3610: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d  eturn affinity;.
3620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3630: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
3640: 70 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74  pe.DateTime) ret
3650: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3670: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3680: 2e 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e  .Decimal) return
3690: 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20   affinity;..    
36a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
36b0: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
36c0: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
36d0: 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20  y.Blob:..       
36e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
36f0: 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29   == DbType.Guid)
3700: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
3710: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3720: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
3730: 54 79 70 65 2e 42 69 6e 61 72 79 29 20 72 65 74  Type.Binary) ret
3740: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0d 0a 20  urn affinity;.. 
3750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3760: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
3770: 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e 20  .String) return 
3780: 61 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  affinity;..     
3790: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
37a0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
37b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
37c0: 77 20 49 6e 76 61 6c 69 64 43 61 73 74 45 78 63  w InvalidCastExc
37d0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 7d  eption();..    }
37e0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
37f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
3800: 6e 76 6f 6b 65 73 20 74 68 65 20 64 61 74 61 20  nvokes the data 
3810: 72 65 61 64 65 72 20 76 61 6c 75 65 20 63 61 6c  reader value cal
3820: 6c 62 61 63 6b 20 63 6f 6e 66 69 67 75 72 65 64  lback configured
3830: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
3840: 65 0d 0a 20 20 20 20 2f 2f 2f 20 74 79 70 65 20  e..    /// type 
3850: 6e 61 6d 65 20 61 73 73 6f 63 69 61 74 65 64 20  name associated 
3860: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
3870: 65 64 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 6e  ed column.  If n
3880: 6f 20 64 61 74 61 20 72 65 61 64 65 72 0d 0a 20  o data reader.. 
3890: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 63 61 6c     /// value cal
38a0: 6c 62 61 63 6b 20 69 73 20 61 76 61 69 6c 61 62  lback is availab
38b0: 6c 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  le for the datab
38c0: 61 73 65 20 74 79 70 65 20 6e 61 6d 65 2c 20 64  ase type name, d
38d0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
38e0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
38f0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
3900: 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20  ame="index">..  
3910: 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78 20    /// The index 
3920: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65  of the column be
3930: 69 6e 67 20 72 65 61 64 2e 0d 0a 20 20 20 20 2f  ing read...    /
3940: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
3950: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3960: 3d 22 65 76 65 6e 74 41 72 67 73 22 3e 0d 0a 20  ="eventArgs">.. 
3970: 20 20 20 2f 2f 2f 20 54 68 65 20 65 78 74 72 61     /// The extra
3980: 20 65 76 65 6e 74 20 64 61 74 61 20 74 6f 20 70   event data to p
3990: 61 73 73 20 69 6e 74 6f 20 74 68 65 20 63 61 6c  ass into the cal
39a0: 6c 62 61 63 6b 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lback...    /// 
39b0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
39c0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
39d0: 6f 6d 70 6c 65 74 65 22 3e 0d 0a 20 20 20 20 2f  omplete">..    /
39e0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
39f0: 68 65 20 64 65 66 61 75 6c 74 20 68 61 6e 64 6c  he default handl
3a00: 69 6e 67 20 66 6f 72 20 74 68 65 20 64 61 74 61  ing for the data
3a10: 20 72 65 61 64 65 72 20 63 61 6c 6c 20 73 68 6f   reader call sho
3a20: 75 6c 64 20 62 65 0d 0a 20 20 20 20 2f 2f 2f 20  uld be..    /// 
3a30: 73 6b 69 70 70 65 64 2e 20 20 49 66 20 74 68 69  skipped.  If thi
3a40: 73 20 69 73 20 73 65 74 20 74 6f 20 6e 6f 6e 2d  s is set to non-
3a50: 7a 65 72 6f 20 61 6e 64 20 74 68 65 20 6e 65 63  zero and the nec
3a60: 65 73 73 61 72 79 20 72 65 74 75 72 6e 20 76 61  essary return va
3a70: 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 73 20  lue..    /// is 
3a80: 75 6e 61 76 61 69 6c 61 62 6c 65 20 6f 72 20 75  unavailable or u
3a90: 6e 73 75 69 74 61 62 6c 65 2c 20 61 6e 20 65 78  nsuitable, an ex
3aa0: 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ception will be 
3ab0: 74 68 72 6f 77 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  thrown...    ///
3ac0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70   </param>..    p
3ad0: 72 69 76 61 74 65 20 76 6f 69 64 20 49 6e 76 6f  rivate void Invo
3ae0: 6b 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  keReadValueCallb
3af0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 69 6e  ack(..        in
3b00: 74 20 69 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20  t index,..      
3b10: 20 20 53 51 4c 69 74 65 52 65 61 64 45 76 65 6e    SQLiteReadEven
3b20: 74 41 72 67 73 20 65 76 65 6e 74 41 72 67 73 2c  tArgs eventArgs,
3b30: 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20 62 6f  ..        out bo
3b40: 6f 6c 20 63 6f 6d 70 6c 65 74 65 0d 0a 20 20 20  ol complete..   
3b50: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
3b60: 20 20 20 20 20 20 20 63 6f 6d 70 6c 65 74 65 20         complete 
3b70: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
3b80: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
3b90: 6f 6e 46 6c 61 67 73 20 6f 6c 64 46 6c 61 67 73  onFlags oldFlags
3ba0: 20 3d 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20   = _flags;..    
3bb0: 20 20 20 20 5f 66 6c 61 67 73 20 26 3d 20 7e 53      _flags &= ~S
3bc0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
3bd0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
3be0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
3bf0: 61 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  acks;....       
3c00: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
3c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
3c20: 69 6e 67 20 74 79 70 65 4e 61 6d 65 20 3d 20 47  ing typeName = G
3c30: 65 74 44 61 74 61 54 79 70 65 4e 61 6d 65 28 69  etDataTypeName(i
3c40: 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
3c50: 20 20 20 20 20 20 69 66 20 28 74 79 70 65 4e 61        if (typeNa
3c60: 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
3c80: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
3c90: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
3ca0: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
3cb0: 3d 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  = GetConnection(
3cc0: 74 68 69 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  this);....      
3cd0: 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63        if (connec
3ce0: 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3d00: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
3d10: 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65        SQLiteType
3d20: 43 61 6c 6c 62 61 63 6b 73 20 63 61 6c 6c 62 61  Callbacks callba
3d30: 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  cks;....        
3d40: 20 20 20 20 69 66 20 28 21 63 6f 6e 6e 65 63 74      if (!connect
3d50: 69 6f 6e 2e 54 72 79 47 65 74 54 79 70 65 43 61  ion.TryGetTypeCa
3d60: 6c 6c 62 61 63 6b 73 28 74 79 70 65 4e 61 6d 65  llbacks(typeName
3d70: 2c 20 6f 75 74 20 63 61 6c 6c 62 61 63 6b 73 29  , out callbacks)
3d80: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
3d90: 20 20 20 20 20 28 63 61 6c 6c 62 61 63 6b 73 20       (callbacks 
3da0: 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
3db0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3dc0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3dd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3de0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3df0: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 43  SQLiteReadValueC
3e00: 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
3e10: 20 3d 20 63 61 6c 6c 62 61 63 6b 73 2e 52 65 61   = callbacks.Rea
3e20: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 3b 0d  dValueCallback;.
3e30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
3e40: 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
3e50: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3e60: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
3e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
3e80: 65 63 74 20 75 73 65 72 44 61 74 61 20 3d 20 63  ect userData = c
3e90: 61 6c 6c 62 61 63 6b 73 2e 52 65 61 64 56 61 6c  allbacks.ReadVal
3ea0: 75 65 55 73 65 72 44 61 74 61 3b 0d 0a 0d 0a 20  ueUserData;.... 
3eb0: 20 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62             callb
3ec0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
3ed0: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
3ee0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2c 20 74 68 69  tement._sql, thi
3ef0: 73 2c 20 6f 6c 64 46 6c 61 67 73 2c 20 65 76 65  s, oldFlags, eve
3f00: 6e 74 41 72 67 73 2c 20 74 79 70 65 4e 61 6d 65  ntArgs, typeName
3f10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3f20: 20 20 20 69 6e 64 65 78 2c 20 75 73 65 72 44 61     index, userDa
3f30: 74 61 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65  ta, out complete
3f40: 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
3f50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3f60: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
3f70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3f80: 20 20 20 5f 66 6c 61 67 73 20 7c 3d 20 53 51 4c     _flags |= SQL
3f90: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
3fa0: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
3fb0: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
3fc0: 6b 73 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ks;..        }..
3fd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
3fe0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3ff0: 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20  /// Attempts to 
4000: 71 75 65 72 79 20 74 68 65 20 69 6e 74 65 67 65  query the intege
4010: 72 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72  r identifier for
4020: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
4030: 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 2f 2f 2f  .  This..    ///
4040: 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 66   will not work f
4050: 6f 72 20 74 61 62 6c 65 73 20 74 68 61 74 20 77  or tables that w
4060: 65 72 65 20 63 72 65 61 74 65 64 20 57 49 54 48  ere created WITH
4070: 4f 55 54 20 52 4f 57 49 44 20 2d 4f 52 2d 20 69  OUT ROWID -OR- i
4080: 66 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 71  f the..    /// q
4090: 75 65 72 79 20 64 6f 65 73 20 6e 6f 74 20 69 6e  uery does not in
40a0: 63 6c 75 64 65 20 74 68 65 20 22 72 6f 77 69 64  clude the "rowid
40b0: 22 20 63 6f 6c 75 6d 6e 20 6f 72 20 6f 6e 65 20  " column or one 
40c0: 6f 66 20 69 74 73 20 61 6c 69 61 73 65 73 20 2d  of its aliases -
40d0: 4f 52 2d 0d 0a 20 20 20 20 2f 2f 2f 20 69 66 20  OR-..    /// if 
40e0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
40f0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 22  QLiteDataReader"
4100: 20 2f 3e 20 77 61 73 20 6e 6f 74 20 63 72 65 61   /> was not crea
4110: 74 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20  ted with the..  
4120: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
4130: 22 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72  "CommandBehavior
4140: 2e 4b 65 79 49 6e 66 6f 22 2f 3e 20 66 6c 61 67  .KeyInfo"/> flag
4150: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
4160: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
4170: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 0d  param name="i">.
4180: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64  .    /// The ind
4190: 65 78 20 6f 66 20 74 68 65 20 42 4c 4f 42 20 63  ex of the BLOB c
41a0: 6f 6c 75 6d 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  olumn...    /// 
41b0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
41c0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
41d0: 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72   /// The integer
41e0: 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20   identifier for 
41f0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
4200: 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20  -OR- null if it 
4210: 63 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 2f  could not..    /
4220: 2f 2f 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64  // be determined
4230: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
4240: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
4250: 6e 61 6c 20 6c 6f 6e 67 3f 20 47 65 74 52 6f 77  nal long? GetRow
4260: 49 64 28 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  Id(..        int
4270: 20 69 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20   i..        ).. 
4280: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
4290: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
42a0: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
42b0: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
42c0: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
42d0: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo == null)..   
42e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
42f0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
4300: 20 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65   string database
4310: 4e 61 6d 65 20 3d 20 47 65 74 44 61 74 61 62 61  Name = GetDataba
4320: 73 65 4e 61 6d 65 28 69 29 3b 0d 0a 20 20 20 20  seName(i);..    
4330: 20 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c 65      string table
4340: 4e 61 6d 65 20 3d 20 47 65 74 54 61 62 6c 65 4e  Name = GetTableN
4350: 61 6d 65 28 69 29 3b 0d 0a 20 20 20 20 20 20 20  ame(i);..       
4360: 20 69 6e 74 20 69 52 6f 77 49 64 20 3d 20 5f 6b   int iRowId = _k
4370: 65 79 49 6e 66 6f 2e 47 65 74 52 6f 77 49 64 49  eyInfo.GetRowIdI
4380: 6e 64 65 78 28 64 61 74 61 62 61 73 65 4e 61 6d  ndex(databaseNam
4390: 65 2c 20 74 61 62 6c 65 4e 61 6d 65 29 3b 0d 0a  e, tableName);..
43a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 52  ..        if (iR
43b0: 6f 77 49 64 20 21 3d 20 2d 31 29 0d 0a 20 20 20  owId != -1)..   
43c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
43d0: 47 65 74 49 6e 74 36 34 28 69 52 6f 77 49 64 29  GetInt64(iRowId)
43e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
43f0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
4400: 52 6f 77 49 64 28 64 61 74 61 62 61 73 65 4e 61  RowId(databaseNa
4410: 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65 29 3b 0d  me, tableName);.
4420: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
4430: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
4440: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
4450: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 3c  he column as a <
4460: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
4470: 42 6c 6f 62 22 20 2f 3e 20 6f 62 6a 65 63 74 2e  Blob" /> object.
4480: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 77  ..    /// This w
4490: 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 72  ill not work for
44a0: 20 74 61 62 6c 65 73 20 74 68 61 74 20 77 65 72   tables that wer
44b0: 65 20 63 72 65 61 74 65 64 20 57 49 54 48 4f 55  e created WITHOU
44c0: 54 20 52 4f 57 49 44 0d 0a 20 20 20 20 2f 2f 2f  T ROWID..    ///
44d0: 20 2d 4f 52 2d 20 69 66 20 74 68 65 20 71 75 65   -OR- if the que
44e0: 72 79 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63 6c  ry does not incl
44f0: 75 64 65 20 74 68 65 20 22 72 6f 77 69 64 22 20  ude the "rowid" 
4500: 63 6f 6c 75 6d 6e 20 6f 72 20 6f 6e 65 0d 0a 20  column or one.. 
4510: 20 20 20 2f 2f 2f 20 6f 66 20 69 74 73 20 61 6c     /// of its al
4520: 69 61 73 65 73 20 2d 4f 52 2d 20 69 66 20 74 68  iases -OR- if th
4530: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
4540: 69 74 65 44 61 74 61 52 65 61 64 65 72 22 20 2f  iteDataReader" /
4550: 3e 20 77 61 73 0d 0a 20 20 20 20 2f 2f 2f 20 6e  > was..    /// n
4560: 6f 74 20 63 72 65 61 74 65 64 20 77 69 74 68 20  ot created with 
4570: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43  the <see cref="C
4580: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 4b  ommandBehavior.K
4590: 65 79 49 6e 66 6f 22 20 2f 3e 0d 0a 20 20 20 20  eyInfo" />..    
45a0: 2f 2f 2f 20 66 6c 61 67 2e 0d 0a 20 20 20 20 2f  /// flag...    /
45b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
45c0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
45d0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
45e0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c   of the column.<
45f0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
4600: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65   <param name="re
4610: 61 64 4f 6e 6c 79 22 3e 0d 0a 20 20 20 20 2f 2f  adOnly">..    //
4620: 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6f 70  / Non-zero to op
4630: 65 6e 20 74 68 65 20 62 6c 6f 62 20 6f 62 6a 65  en the blob obje
4640: 63 74 20 66 6f 72 20 72 65 61 64 2d 6f 6e 6c 79  ct for read-only
4650: 20 61 63 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f   access...    //
4660: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
4670: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 6e  /// <returns>A n
4680: 65 77 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ew <see cref="SQ
4690: 4c 69 74 65 42 6c 6f 62 22 20 2f 3e 20 6f 62 6a  LiteBlob" /> obj
46a0: 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ect.</returns>..
46b0: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
46c0: 65 42 6c 6f 62 20 47 65 74 42 6c 6f 62 28 69 6e  eBlob GetBlob(in
46d0: 74 20 69 2c 20 62 6f 6f 6c 20 72 65 61 64 4f 6e  t i, bool readOn
46e0: 6c 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ly)..    {..    
46f0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
4700: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
4710: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
4720: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
4730: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
4740: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
4750: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
4760: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
4770: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
4780: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
4790: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
47a0: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
47b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
47c0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
47d0: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
47e0: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
47f0: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
4800: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
4810: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
4820: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
4830: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
4840: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
4850: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
4860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4870: 22 47 65 74 42 6c 6f 62 22 2c 20 6e 65 77 20 53  "GetBlob", new S
4880: 51 4c 69 74 65 52 65 61 64 42 6c 6f 62 45 76 65  QLiteReadBlobEve
4890: 6e 74 41 72 67 73 28 72 65 61 64 4f 6e 6c 79 29  ntArgs(readOnly)
48a0: 2c 20 76 61 6c 75 65 29 2c 0d 0a 20 20 20 20 20  , value),..     
48b0: 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 20 63             out c
48c0: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
48d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
48e0: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
48f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
4900: 53 51 4c 69 74 65 42 6c 6f 62 29 76 61 6c 75 65  SQLiteBlob)value
4910: 2e 42 6c 6f 62 56 61 6c 75 65 3b 0d 0a 20 20 20  .BlobValue;..   
4920: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4930: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
4940: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
4950: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
4960: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
4970: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
4980: 79 49 6e 66 6f 2e 47 65 74 42 6c 6f 62 28 69 20  yInfo.GetBlob(i 
4990: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
49a0: 46 69 65 6c 64 43 6f 75 6e 74 2c 20 72 65 61 64  FieldCount, read
49b0: 4f 6e 6c 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Only);....      
49c0: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42    return SQLiteB
49d0: 6c 6f 62 2e 43 72 65 61 74 65 28 74 68 69 73 2c  lob.Create(this,
49e0: 20 69 2c 20 72 65 61 64 4f 6e 6c 79 29 3b 0d 0a   i, readOnly);..
49f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
4a00: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
4a10: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
4a20: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 62 6f  e column as a bo
4a30: 6f 6c 65 61 6e 20 76 61 6c 75 65 0d 0a 20 20 20  olean value..   
4a40: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
4a50: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
4a60: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
4a70: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
4a80: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
4a90: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62 6f 6f 6c  // <returns>bool
4aa0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4ab0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
4ac0: 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65 61 6e 28  bool GetBoolean(
4ad0: 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20  int i)..    {.. 
4ae0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
4af0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
4b00: 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b   VerifyForGet();
4b10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
4b20: 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
4b30: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
4b40: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61  UseConnectionRea
4b50: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29  dValueCallbacks)
4b60: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
4b70: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
4b80: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
4b90: 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20  Callbacks)..    
4ba0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4bb0: 20 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61     SQLiteDataRea
4bc0: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d  derValue value =
4bd0: 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52   new SQLiteDataR
4be0: 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20  eaderValue();.. 
4bf0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
4c00: 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20  complete;....   
4c10: 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52           InvokeR
4c20: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
4c30: 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65  (i, new SQLiteRe
4c40: 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73  adValueEventArgs
4c50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4c60: 20 20 20 22 47 65 74 42 6f 6f 6c 65 61 6e 22 2c     "GetBoolean",
4c70: 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f   null, value), o
4c80: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
4c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4ca0: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
4cb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4cc0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
4cd0: 61 6c 75 65 2e 42 6f 6f 6c 65 61 6e 56 61 6c 75  alue.BooleanValu
4ce0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d00: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
4d10: 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69  Exception("missi
4d20: 6e 67 20 62 6f 6f 6c 65 61 6e 20 72 65 74 75 72  ng boolean retur
4d30: 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20  n value");....  
4d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4d50: 74 75 72 6e 20 28 62 6f 6f 6c 29 76 61 6c 75 65  turn (bool)value
4d60: 2e 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 3b 0d 0a  .BooleanValue;..
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4d80: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4d90: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
4da0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
4db0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
4dc0: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
4dd0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
4de0: 6b 65 79 49 6e 66 6f 2e 47 65 74 42 6f 6f 6c 65  keyInfo.GetBoole
4df0: 61 6e 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  an(i - PrivateVi
4e00: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
4e10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ;....        Ver
4e20: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
4e30: 65 2e 42 6f 6f 6c 65 61 6e 29 3b 0d 0a 20 20 20  e.Boolean);..   
4e40: 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
4e50: 65 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28 47 65  ert.ToBoolean(Ge
4e60: 74 56 61 6c 75 65 28 69 29 2c 20 43 75 6c 74 75  tValue(i), Cultu
4e70: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
4e80: 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lture);..    }..
4e90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
4ea0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
4eb0: 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d  rieves the colum
4ec0: 6e 20 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79  n as a single by
4ed0: 74 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f  te value..    //
4ee0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
4ef0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4f00: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
4f10: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
4f20: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
4f30: 3c 72 65 74 75 72 6e 73 3e 62 79 74 65 3c 2f 72  <returns>byte</r
4f40: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
4f50: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 79 74  lic override byt
4f60: 65 20 47 65 74 42 79 74 65 28 69 6e 74 20 69 29  e GetByte(int i)
4f70: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4f80: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
4f90: 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66  ;..        Verif
4fa0: 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20  yForGet();....  
4fb0: 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
4fc0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
4fd0: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
4fe0: 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65  nectionReadValue
4ff0: 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51  Callbacks) == SQ
5000: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
5010: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
5020: 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  nReadValueCallba
5030: 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  cks)..        {.
5040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
5050: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
5060: 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53  ue value = new S
5070: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56  QLiteDataReaderV
5080: 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  alue();..       
5090: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65       bool comple
50a0: 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  te;....         
50b0: 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c     InvokeReadVal
50c0: 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65  ueCallback(i, ne
50d0: 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75  w SQLiteReadValu
50e0: 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  eEventArgs(..   
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
5100: 74 42 79 74 65 22 2c 20 6e 75 6c 6c 2c 20 76 61  tByte", null, va
5110: 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65  lue), out comple
5120: 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
5130: 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65      if (complete
5140: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5160: 20 20 69 66 20 28 76 61 6c 75 65 2e 42 79 74 65    if (value.Byte
5170: 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Value == null)..
5180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5190: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
51a0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d  LiteException("m
51b0: 69 73 73 69 6e 67 20 62 79 74 65 20 72 65 74 75  issing byte retu
51c0: 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  rn value");.... 
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
51e0: 65 74 75 72 6e 20 28 62 79 74 65 29 76 61 6c 75  eturn (byte)valu
51f0: 65 2e 42 79 74 65 56 61 6c 75 65 3b 0d 0a 20 20  e.ByteValue;..  
5200: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5210: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5220: 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61    if (i >= Priva
5230: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
5240: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
5250: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
5260: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
5270: 79 49 6e 66 6f 2e 47 65 74 42 79 74 65 28 69 20  yInfo.GetByte(i 
5280: 2d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  - PrivateVisible
5290: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  FieldCount);....
52a0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 54 79          VerifyTy
52b0: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42 79 74  pe(i, DbType.Byt
52c0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
52d0: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
52e0: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74  ment._sql.GetByt
52f0: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
5300: 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nt, i);..    }..
5310: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5320: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
5330: 72 69 65 76 65 73 20 61 20 63 6f 6c 75 6d 6e 20  rieves a column 
5340: 61 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20 62  as an array of b
5350: 79 74 65 73 20 28 62 6c 6f 62 29 0d 0a 20 20 20  ytes (blob)..   
5360: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
5380: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
5390: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
53a0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
53b0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
53c0: 66 69 65 6c 64 4f 66 66 73 65 74 22 3e 54 68 65  fieldOffset">The
53d0: 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65   zero-based inde
53e0: 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65  x of where to be
53f0: 67 69 6e 20 72 65 61 64 69 6e 67 20 74 68 65 20  gin reading the 
5400: 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  data</param>..  
5410: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5420: 65 3d 22 62 75 66 66 65 72 22 3e 54 68 65 20 62  e="buffer">The b
5430: 75 66 66 65 72 20 74 6f 20 77 72 69 74 65 20 74  uffer to write t
5440: 68 65 20 62 79 74 65 73 20 69 6e 74 6f 3c 2f 70  he bytes into</p
5450: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5460: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66  param name="buff
5470: 65 72 6f 66 66 73 65 74 22 3e 54 68 65 20 7a 65  eroffset">The ze
5480: 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f  ro-based index o
5490: 66 20 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e  f where to begin
54a0: 20 77 72 69 74 69 6e 67 20 69 6e 74 6f 20 74 68   writing into th
54b0: 65 20 61 72 72 61 79 3c 2f 70 61 72 61 6d 3e 0d  e array</param>.
54c0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
54d0: 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 54 68  name="length">Th
54e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
54f0: 73 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  s to retrieve</p
5500: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5510: 72 65 74 75 72 6e 73 3e 54 68 65 20 61 63 74 75  returns>The actu
5520: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
5530: 65 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  es written into 
5540: 74 68 65 20 61 72 72 61 79 3c 2f 72 65 74 75 72  the array</retur
5550: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ns>..    /// <re
5560: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
5570: 54 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  To determine the
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
5590: 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20   in the column, 
55a0: 70 61 73 73 20 61 20 6e 75 6c 6c 20 76 61 6c 75  pass a null valu
55b0: 65 20 66 6f 72 20 74 68 65 20 62 75 66 66 65 72  e for the buffer
55c0: 2e 20 20 54 68 65 20 74 6f 74 61 6c 20 6c 65 6e  .  The total len
55d0: 67 74 68 20 77 69 6c 6c 20 62 65 20 72 65 74 75  gth will be retu
55e0: 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  rned...    /// <
55f0: 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 70  /remarks>..    p
5600: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6c  ublic override l
5610: 6f 6e 67 20 47 65 74 42 79 74 65 73 28 69 6e 74  ong GetBytes(int
5620: 20 69 2c 20 6c 6f 6e 67 20 66 69 65 6c 64 4f 66   i, long fieldOf
5630: 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 75 66  fset, byte[] buf
5640: 66 65 72 2c 20 69 6e 74 20 62 75 66 66 65 72 6f  fer, int buffero
5650: 66 66 73 65 74 2c 20 69 6e 74 20 6c 65 6e 67 74  ffset, int lengt
5660: 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  h)..    {..     
5670: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
5680: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ();..        Ver
5690: 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a  ifyForGet();....
56a0: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
56b0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
56c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
56d0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
56e0: 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20  ueCallbacks) == 
56f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5700: 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74  Flags.UseConnect
5710: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
5720: 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  backs)..        
5730: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
5740: 51 4c 69 74 65 52 65 61 64 41 72 72 61 79 45 76  QLiteReadArrayEv
5750: 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41 72 67  entArgs eventArg
5760: 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 52 65  s = new SQLiteRe
5770: 61 64 41 72 72 61 79 45 76 65 6e 74 41 72 67 73  adArrayEventArgs
5780: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5790: 20 20 20 66 69 65 6c 64 4f 66 66 73 65 74 2c 20     fieldOffset, 
57a0: 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f 66  buffer, bufferof
57b0: 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  fset, length);..
57c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
57d0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
57e0: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
57f0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
5800: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
5810: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
5820: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
5830: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
5840: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
5850: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
5860: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
5870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
5880: 65 74 42 79 74 65 73 22 2c 20 65 76 65 6e 74 41  etBytes", eventA
5890: 72 67 73 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74  rgs, value), out
58a0: 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20   complete);.... 
58b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
58c0: 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20  omplete)..      
58d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
58e0: 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
58f0: 62 79 74 65 73 20 3d 20 76 61 6c 75 65 2e 42 79  bytes = value.By
5900: 74 65 73 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  tesValue;....   
5910: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
5920: 28 62 79 74 65 73 20 21 3d 20 6e 75 6c 6c 29 0d  (bytes != null).
5930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5940: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
5950: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
5960: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
5970: 20 20 20 20 20 20 20 20 41 72 72 61 79 2e 43 6f          Array.Co
5980: 70 79 28 62 79 74 65 73 2c 20 2f 2a 20 74 68 72  py(bytes, /* thr
5990: 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
59b0: 76 65 6e 74 41 72 67 73 2e 44 61 74 61 4f 66 66  ventArgs.DataOff
59c0: 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 42  set, eventArgs.B
59d0: 79 74 65 42 75 66 66 65 72 2c 0d 0a 20 20 20 20  yteBuffer,..    
59e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59f0: 20 20 20 20 65 76 65 6e 74 41 72 67 73 2e 42 75      eventArgs.Bu
5a00: 66 66 65 72 4f 66 66 73 65 74 2c 20 65 76 65 6e  fferOffset, even
5a10: 74 41 72 67 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  tArgs.Length);..
5a20: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
5a30: 20 20 20 20 20 20 20 20 20 20 20 41 72 72 61 79             Array
5a40: 2e 43 6f 70 79 28 62 79 74 65 73 2c 20 2f 2a 20  .Copy(bytes, /* 
5a50: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a70: 20 20 28 69 6e 74 29 65 76 65 6e 74 41 72 67 73    (int)eventArgs
5a80: 2e 44 61 74 61 4f 66 66 73 65 74 2c 20 65 76 65  .DataOffset, eve
5a90: 6e 74 41 72 67 73 2e 42 79 74 65 42 75 66 66 65  ntArgs.ByteBuffe
5aa0: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 65 76 65 6e              even
5ac0: 74 41 72 67 73 2e 42 75 66 66 65 72 4f 66 66 73  tArgs.BufferOffs
5ad0: 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e 4c 65  et, eventArgs.Le
5ae0: 6e 67 74 68 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ngth);..#endif..
5af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 65 76 65        return eve
5b10: 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a  ntArgs.Length;..
5b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b30: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
5b40: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
5b50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b70: 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20  return -1;..    
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5b90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5ba0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5bb0: 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76     if (i >= Priv
5bc0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
5bd0: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
5be0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
5bf0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
5c00: 65 79 49 6e 66 6f 2e 47 65 74 42 79 74 65 73 28  eyInfo.GetBytes(
5c10: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
5c20: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20 66 69  leFieldCount, fi
5c30: 65 6c 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65  eldOffset, buffe
5c40: 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c  r, bufferoffset,
5c50: 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20   length);....   
5c60: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
5c70: 69 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79  i, DbType.Binary
5c80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
5c90: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
5ca0: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65  ent._sql.GetByte
5cb0: 73 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  s(_activeStateme
5cc0: 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69 65 6c  nt, i, (int)fiel
5cd0: 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c  dOffset, buffer,
5ce0: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c   bufferoffset, l
5cf0: 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ength);..    }..
5d00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5d10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
5d20: 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  urns the column 
5d30: 61 73 20 61 20 73 69 6e 67 6c 65 20 63 68 61 72  as a single char
5d40: 61 63 74 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c  acter..    /// <
5d50: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
5d60: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5d70: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
5d80: 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
5d90: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
5da0: 74 75 72 6e 73 3e 63 68 61 72 3c 2f 72 65 74 75  turns>char</retu
5db0: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
5dc0: 20 6f 76 65 72 72 69 64 65 20 63 68 61 72 20 47   override char G
5dd0: 65 74 43 68 61 72 28 69 6e 74 20 69 29 0d 0a 20  etChar(int i).. 
5de0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
5df0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
5e00: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
5e10: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
5e20: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
5e30: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5e40: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
5e50: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
5e60: 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74  lbacks) == SQLit
5e70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5e80: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
5e90: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
5ea0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
5eb0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
5ec0: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
5ed0: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
5ee0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
5ef0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
5f00: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
5f10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5f20: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
5f30: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
5f40: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
5f50: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
5f60: 20 20 20 20 20 20 20 20 20 20 22 47 65 74 43 68            "GetCh
5f70: 61 72 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65  ar", null, value
5f80: 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29  ), out complete)
5f90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5fa0: 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a   if (complete)..
5fb0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5fd0: 66 20 28 76 61 6c 75 65 2e 43 68 61 72 56 61 6c  f (value.CharVal
5fe0: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6000: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
6010: 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73  eException("miss
6020: 69 6e 67 20 63 68 61 72 61 63 74 65 72 20 72 65  ing character re
6030: 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d  turn value");...
6040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6050: 20 72 65 74 75 72 6e 20 28 63 68 61 72 29 76 61   return (char)va
6060: 6c 75 65 2e 43 68 61 72 56 61 6c 75 65 3b 0d 0a  lue.CharValue;..
6070: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6080: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6090: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
60a0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
60b0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
60c0: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
60d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
60e0: 6b 65 79 49 6e 66 6f 2e 47 65 74 43 68 61 72 28  keyInfo.GetChar(
60f0: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
6100: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
6110: 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79  ..        Verify
6120: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53  Type(i, DbType.S
6130: 42 79 74 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Byte);..        
6140: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
6150: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
6160: 43 68 61 72 28 5f 61 63 74 69 76 65 53 74 61 74  Char(_activeStat
6170: 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20  ement, i);..    
6180: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
6190: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
61a0: 52 65 74 72 69 65 76 65 73 20 61 20 63 6f 6c 75  Retrieves a colu
61b0: 6d 6e 20 61 73 20 61 6e 20 61 72 72 61 79 20 6f  mn as an array o
61c0: 66 20 63 68 61 72 73 20 28 62 6c 6f 62 29 0d 0a  f chars (blob)..
61d0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
61e0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
61f0: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
6200: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
6210: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
6220: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
6230: 65 3d 22 66 69 65 6c 64 6f 66 66 73 65 74 22 3e  e="fieldoffset">
6240: 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69  The zero-based i
6250: 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f  ndex of where to
6260: 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67 20 74   begin reading t
6270: 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0d  he data</param>.
6280: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
6290: 6e 61 6d 65 3d 22 62 75 66 66 65 72 22 3e 54 68  name="buffer">Th
62a0: 65 20 62 75 66 66 65 72 20 74 6f 20 77 72 69 74  e buffer to writ
62b0: 65 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73  e the characters
62c0: 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e 0d 0a 20   into</param>.. 
62d0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
62e0: 6d 65 3d 22 62 75 66 66 65 72 6f 66 66 73 65 74  me="bufferoffset
62f0: 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  ">The zero-based
6300: 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20   index of where 
6310: 74 6f 20 62 65 67 69 6e 20 77 72 69 74 69 6e 67  to begin writing
6320: 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c   into the array<
6330: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
6340: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65   <param name="le
6350: 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d 62 65 72  ngth">The number
6360: 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72 65 74   of bytes to ret
6370: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rieve</param>.. 
6380: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
6390: 54 68 65 20 61 63 74 75 61 6c 20 6e 75 6d 62 65  The actual numbe
63a0: 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
63b0: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 74 68 65  written into the
63c0: 20 61 72 72 61 79 3c 2f 72 65 74 75 72 6e 73 3e   array</returns>
63d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72  ..    /// <remar
63e0: 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 6f 20  ks>..    /// To 
63f0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
6400: 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
6410: 72 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  rs in the column
6420: 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c 20 76 61  , pass a null va
6430: 6c 75 65 20 66 6f 72 20 74 68 65 20 62 75 66 66  lue for the buff
6440: 65 72 2e 20 20 54 68 65 20 74 6f 74 61 6c 20 6c  er.  The total l
6450: 65 6e 67 74 68 20 77 69 6c 6c 20 62 65 20 72 65  ength will be re
6460: 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  turned...    ///
6470: 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20   </remarks>..   
6480: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
6490: 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 69   long GetChars(i
64a0: 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65 6c 64  nt i, long field
64b0: 6f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62  offset, char[] b
64c0: 75 66 66 65 72 2c 20 69 6e 74 20 62 75 66 66 65  uffer, int buffe
64d0: 72 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c 65 6e  roffset, int len
64e0: 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
64f0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6500: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56  ed();..        V
6510: 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a  erifyForGet();..
6520: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
6530: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
6540: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73  nnectionFlags.Us
6550: 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56  eConnectionReadV
6560: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d  alueCallbacks) =
6570: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
6580: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
6590: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
65a0: 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20  llbacks)..      
65b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
65c0: 20 53 51 4c 69 74 65 52 65 61 64 41 72 72 61 79   SQLiteReadArray
65d0: 45 76 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41  EventArgs eventA
65e0: 72 67 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  rgs = new SQLite
65f0: 52 65 61 64 41 72 72 61 79 45 76 65 6e 74 41 72  ReadArrayEventAr
6600: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
6610: 20 20 20 20 20 66 69 65 6c 64 6f 66 66 73 65 74       fieldoffset
6620: 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72  , buffer, buffer
6630: 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b  offset, length);
6640: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6650: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
6660: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
6670: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
6680: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
6690: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
66a0: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
66b0: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
66c0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
66d0: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
66e0: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6700: 22 47 65 74 43 68 61 72 73 22 2c 20 65 76 65 6e  "GetChars", even
6710: 74 41 72 67 73 2c 20 76 61 6c 75 65 29 2c 20 6f  tArgs, value), o
6720: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
6730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
6740: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
6750: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6760: 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 5b             char[
6770: 5d 20 63 68 61 72 73 20 3d 20 76 61 6c 75 65 2e  ] chars = value.
6780: 43 68 61 72 73 56 61 6c 75 65 3b 0d 0a 0d 0a 20  CharsValue;.... 
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
67a0: 66 20 28 63 68 61 72 73 20 21 3d 20 6e 75 6c 6c  f (chars != null
67b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
67c0: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
67d0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
67e0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
67f0: 20 20 20 20 20 20 20 20 20 20 41 72 72 61 79 2e            Array.
6800: 43 6f 70 79 28 63 68 61 72 73 2c 20 2f 2a 20 74  Copy(chars, /* t
6810: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6830: 20 65 76 65 6e 74 41 72 67 73 2e 44 61 74 61 4f   eventArgs.DataO
6840: 66 66 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73  ffset, eventArgs
6850: 2e 43 68 61 72 42 75 66 66 65 72 2c 0d 0a 20 20  .CharBuffer,..  
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6870: 20 20 20 20 20 20 65 76 65 6e 74 41 72 67 73 2e        eventArgs.
6880: 42 75 66 66 65 72 4f 66 66 73 65 74 2c 20 65 76  BufferOffset, ev
6890: 65 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 29 3b  entArgs.Length);
68a0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 72 72               Arr
68c0: 61 79 2e 43 6f 70 79 28 63 68 61 72 73 2c 20 2f  ay.Copy(chars, /
68d0: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
68e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68f0: 20 20 20 20 28 69 6e 74 29 65 76 65 6e 74 41 72      (int)eventAr
6900: 67 73 2e 44 61 74 61 4f 66 66 73 65 74 2c 20 65  gs.DataOffset, e
6910: 76 65 6e 74 41 72 67 73 2e 43 68 61 72 42 75 66  ventArgs.CharBuf
6920: 66 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fer,..          
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76                ev
6940: 65 6e 74 41 72 67 73 2e 42 75 66 66 65 72 4f 66  entArgs.BufferOf
6950: 66 73 65 74 2c 20 65 76 65 6e 74 41 72 67 73 2e  fset, eventArgs.
6960: 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6e 64 69 66  Length);..#endif
6970: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6980: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 65          return e
6990: 76 65 6e 74 41 72 67 73 2e 4c 65 6e 67 74 68 3b  ventArgs.Length;
69a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
69b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
69c0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
69d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
69e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69f0: 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20    return -1;..  
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6a20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6a30: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72       if (i >= Pr
6a40: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
6a50: 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e  dCount && _keyIn
6a60: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  fo != null)..   
6a70: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6a80: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 43 68 61 72  _keyInfo.GetChar
6a90: 73 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73  s(i - PrivateVis
6aa0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 2c 20  ibleFieldCount, 
6ab0: 66 69 65 6c 64 6f 66 66 73 65 74 2c 20 62 75 66  fieldoffset, buf
6ac0: 66 65 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65  fer, bufferoffse
6ad0: 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20  t, length);.... 
6ae0: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
6af0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
6b00: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72  ctionFlags.NoVer
6b10: 69 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29  ifyTextAffinity)
6b20: 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   != SQLiteConnec
6b30: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 56 65 72 69  tionFlags.NoVeri
6b40: 66 79 54 65 78 74 41 66 66 69 6e 69 74 79 29 0d  fyTextAffinity).
6b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
6b60: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
6b70: 65 2e 53 74 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20  e.String);....  
6b80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
6b90: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
6ba0: 71 6c 2e 47 65 74 43 68 61 72 73 28 5f 61 63 74  ql.GetChars(_act
6bb0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c  iveStatement, i,
6bc0: 20 28 69 6e 74 29 66 69 65 6c 64 6f 66 66 73 65   (int)fieldoffse
6bd0: 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65  t, buffer, buffe
6be0: 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29  roffset, length)
6bf0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6c00: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6c10: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
6c20: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
6c30: 20 62 61 63 6b 2d 65 6e 64 20 64 61 74 61 74 79   back-end dataty
6c40: 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  pe of the column
6c50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6c60: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
6c70: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
6c80: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
6c90: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
6ca0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
6cb0: 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73  >string</returns
6cc0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
6cd0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
6ce0: 74 44 61 74 61 54 79 70 65 4e 61 6d 65 28 69 6e  tDataTypeName(in
6cf0: 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  t i)..    {..   
6d00: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6d10: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6d20: 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74   if (i >= Privat
6d30: 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75  eVisibleFieldCou
6d40: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
6d50: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6d60: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
6d70: 49 6e 66 6f 2e 47 65 74 44 61 74 61 54 79 70 65  Info.GetDataType
6d80: 4e 61 6d 65 28 69 20 2d 20 50 72 69 76 61 74 65  Name(i - Private
6d90: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
6da0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54  t);....        T
6db0: 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66 69  ypeAffinity affi
6dc0: 6e 20 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79  n = TypeAffinity
6dd0: 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3b 0d  .Uninitialized;.
6de0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6df0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
6e00: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65  ._sql.ColumnType
6e10: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
6e20: 74 2c 20 69 2c 20 72 65 66 20 61 66 66 69 6e 29  t, i, ref affin)
6e30: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6e40: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6e50: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 20     /// Retrieve 
6e60: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
6e70: 64 61 74 65 2f 74 69 6d 65 20 76 61 6c 75 65 0d  date/time value.
6e80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
6e90: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
6ea0: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
6eb0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
6ec0: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
6ed0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
6ee0: 44 61 74 65 54 69 6d 65 3c 2f 72 65 74 75 72 6e  DateTime</return
6ef0: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
6f00: 76 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65  verride DateTime
6f10: 20 47 65 74 44 61 74 65 54 69 6d 65 28 69 6e 74   GetDateTime(int
6f20: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
6f30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6f40: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
6f50: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
6f60: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
6f70: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
6f80: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
6f90: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
6fa0: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
6fb0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6fc0: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
6fd0: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
6fe0: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
6ff0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7000: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
7010: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
7020: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
7030: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
7040: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
7050: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
7060: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
7070: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
7080: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
7090: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70b0: 22 47 65 74 44 61 74 65 54 69 6d 65 22 2c 20 6e  "GetDateTime", n
70c0: 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74  ull, value), out
70d0: 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20   complete);.... 
70e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
70f0: 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20  omplete)..      
7100: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7110: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
7120: 75 65 2e 44 61 74 65 54 69 6d 65 56 61 6c 75 65  ue.DateTimeValue
7130: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
7140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
7150: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7160: 78 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e  xception("missin
7170: 67 20 64 61 74 65 2f 74 69 6d 65 20 72 65 74 75  g date/time retu
7180: 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  rn value");.... 
7190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
71a0: 65 74 75 72 6e 20 28 44 61 74 65 54 69 6d 65 29  eturn (DateTime)
71b0: 76 61 6c 75 65 2e 44 61 74 65 54 69 6d 65 56 61  value.DateTimeVa
71c0: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
71d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
71e0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
71f0: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
7200: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
7210: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
7220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
7230: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
7240: 74 44 61 74 65 54 69 6d 65 28 69 20 2d 20 50 72  tDateTime(i - Pr
7250: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
7260: 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
7270: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
7280: 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d  , DbType.DateTim
7290: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
72a0: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
72b0: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 61 74  ment._sql.GetDat
72c0: 65 54 69 6d 65 28 5f 61 63 74 69 76 65 53 74 61  eTime(_activeSta
72d0: 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20  tement, i);..   
72e0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
72f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7300: 20 52 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   Retrieve the co
7310: 6c 75 6d 6e 20 61 73 20 61 20 64 65 63 69 6d 61  lumn as a decima
7320: 6c 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f  l value..    ///
7330: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
7340: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
7350: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
7360: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  f the column.</p
7370: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
7380: 72 65 74 75 72 6e 73 3e 64 65 63 69 6d 61 6c 3c  returns>decimal<
7390: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
73a0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64  ublic override d
73b0: 65 63 69 6d 61 6c 20 47 65 74 44 65 63 69 6d 61  ecimal GetDecima
73c0: 6c 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  l(int i)..    {.
73d0: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
73e0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
73f0: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
7400: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
7410: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
7420: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7430: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
7440: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
7450: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
7460: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
7470: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
7480: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
7490: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
74a0: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
74b0: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
74c0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
74d0: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
74e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
74f0: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
7500: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
7510: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
7520: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
7530: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
7540: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
7550: 20 20 20 20 20 22 47 65 74 44 65 63 69 6d 61 6c       "GetDecimal
7560: 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c  ", null, value),
7570: 20 6f 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d   out complete);.
7580: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
7590: 66 20 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20  f (complete)..  
75a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
75b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
75c0: 28 76 61 6c 75 65 2e 44 65 63 69 6d 61 6c 56 61  (value.DecimalVa
75d0: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75f0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
7600: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6d 69 73  teException("mis
7610: 73 69 6e 67 20 64 65 63 69 6d 61 6c 20 72 65 74  sing decimal ret
7620: 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a  urn value");....
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7640: 72 65 74 75 72 6e 20 28 64 65 63 69 6d 61 6c 29  return (decimal)
7650: 76 61 6c 75 65 2e 44 65 63 69 6d 61 6c 56 61 6c  value.DecimalVal
7660: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
7670: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
7680: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
7690: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
76a0: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
76b0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
76c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
76d0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
76e0: 44 65 63 69 6d 61 6c 28 69 20 2d 20 50 72 69 76  Decimal(i - Priv
76f0: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
7700: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
7710: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
7720: 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 3b  DbType.Decimal);
7730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 43 75 6c 74  ....        Cult
7740: 75 72 65 49 6e 66 6f 20 63 75 6c 74 75 72 65 49  ureInfo cultureI
7750: 6e 66 6f 20 3d 20 43 75 6c 74 75 72 65 49 6e 66  nfo = CultureInf
7760: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
7770: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
7780: 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
7790: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
77a0: 2e 47 65 74 49 6e 76 61 72 69 61 6e 74 44 65 63  .GetInvariantDec
77b0: 69 6d 61 6c 29 20 3d 3d 20 53 51 4c 69 74 65 43  imal) == SQLiteC
77c0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47  onnectionFlags.G
77d0: 65 74 49 6e 76 61 72 69 61 6e 74 44 65 63 69 6d  etInvariantDecim
77e0: 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  al)..           
77f0: 20 63 75 6c 74 75 72 65 49 6e 66 6f 20 3d 20 43   cultureInfo = C
7800: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
7810: 69 61 6e 74 43 75 6c 74 75 72 65 3b 0d 0a 0d 0a  iantCulture;....
7820: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
7830: 65 63 69 6d 61 6c 2e 50 61 72 73 65 28 5f 61 63  ecimal.Parse(_ac
7840: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
7850: 71 6c 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69  ql.GetText(_acti
7860: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 2c  veStatement, i),
7870: 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c   NumberStyles.Al
7880: 6c 6f 77 44 65 63 69 6d 61 6c 50 6f 69 6e 74 20  lowDecimalPoint 
7890: 7c 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41  | NumberStyles.A
78a0: 6c 6c 6f 77 45 78 70 6f 6e 65 6e 74 20 7c 20 4e  llowExponent | N
78b0: 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f  umberStyles.Allo
78c0: 77 4c 65 61 64 69 6e 67 53 69 67 6e 2c 20 63 75  wLeadingSign, cu
78d0: 6c 74 75 72 65 49 6e 66 6f 29 3b 0d 0a 20 20 20  ltureInfo);..   
78e0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
78f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7900: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
7910: 75 6d 6e 20 61 73 20 61 20 64 6f 75 62 6c 65 0d  umn as a double.
7920: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
7930: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
7940: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
7950: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
7960: 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lumn.</param>.. 
7970: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
7980: 64 6f 75 62 6c 65 3c 2f 72 65 74 75 72 6e 73 3e  double</returns>
7990: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
79a0: 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74  rride double Get
79b0: 44 6f 75 62 6c 65 28 69 6e 74 20 69 29 0d 0a 20  Double(int i).. 
79c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
79d0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
79e0: 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46 6f          VerifyFo
79f0: 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rGet();....     
7a00: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26     if ((_flags &
7a10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7a20: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
7a30: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
7a40: 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69 74  lbacks) == SQLit
7a50: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7a60: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65  .UseConnectionRe
7a70: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  adValueCallbacks
7a80: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7a90: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
7aa0: 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65 20  DataReaderValue 
7ab0: 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c 69  value = new SQLi
7ac0: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
7ad0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
7ae0: 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 3b    bool complete;
7af0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7b00: 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65 43  InvokeReadValueC
7b10: 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20 53  allback(i, new S
7b20: 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45 76  QLiteReadValueEv
7b30: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
7b40: 20 20 20 20 20 20 20 20 20 20 22 47 65 74 44 6f            "GetDo
7b50: 75 62 6c 65 22 2c 20 6e 75 6c 6c 2c 20 76 61 6c  uble", null, val
7b60: 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65 74  ue), out complet
7b70: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
7b80: 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65 29     if (complete)
7b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
7ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7bb0: 20 69 66 20 28 76 61 6c 75 65 2e 44 6f 75 62 6c   if (value.Doubl
7bc0: 65 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  eValue == null).
7bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7be0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
7bf0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
7c00: 6d 69 73 73 69 6e 67 20 64 6f 75 62 6c 65 20 72  missing double r
7c10: 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d 0a  eturn value");..
7c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7c30: 20 20 72 65 74 75 72 6e 20 28 64 6f 75 62 6c 65    return (double
7c40: 29 76 61 6c 75 65 2e 44 6f 75 62 6c 65 56 61 6c  )value.DoubleVal
7c50: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
7c60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
7c70: 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e  .        if (i >
7c80: 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65  = PrivateVisible
7c90: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
7ca0: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d  eyInfo != null).
7cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7cc0: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
7cd0: 44 6f 75 62 6c 65 28 69 20 2d 20 50 72 69 76 61  Double(i - Priva
7ce0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
7cf0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
7d00: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
7d10: 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b 0d 0a  bType.Double);..
7d20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
7d30: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
7d40: 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f  _sql.GetDouble(_
7d50: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
7d60: 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   i);..    }.... 
7d70: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
7d80: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
7d90: 73 20 74 68 65 20 2e 4e 45 54 20 74 79 70 65 20  s the .NET type 
7da0: 6f 66 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d  of a given colum
7db0: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  n..    /// </sum
7dc0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
7dd0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
7de0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
7df0: 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  column.</param>.
7e00: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
7e10: 73 3e 54 79 70 65 3c 2f 72 65 74 75 72 6e 73 3e  s>Type</returns>
7e20: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
7e30: 72 72 69 64 65 20 54 79 70 65 20 47 65 74 46 69  rride Type GetFi
7e40: 65 6c 64 54 79 70 65 28 69 6e 74 20 69 29 0d 0a  eldType(int i)..
7e50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
7e60: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
7e70: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  ...        if (i
7e80: 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62   >= PrivateVisib
7e90: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
7ea0: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
7eb0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
7ec0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
7ed0: 65 74 46 69 65 6c 64 54 79 70 65 28 69 20 2d 20  etFieldType(i - 
7ee0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
7ef0: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
7f00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7f10: 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74  iteConvert.SQLit
7f20: 65 54 79 70 65 54 6f 54 79 70 65 28 47 65 74 53  eTypeToType(GetS
7f30: 51 4c 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73  QLiteType(_flags
7f40: 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  , i));..    }...
7f50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
7f60: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
7f70: 72 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20  rns a column as 
7f80: 61 20 66 6c 6f 61 74 20 76 61 6c 75 65 0d 0a 20  a float value.. 
7f90: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7fa0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
7fb0: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
7fc0: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
7fd0: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
7fe0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 66 6c   /// <returns>fl
7ff0: 6f 61 74 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  oat</returns>.. 
8000: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
8010: 64 65 20 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61  de float GetFloa
8020: 74 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d  t(int i)..    {.
8030: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
8040: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
8050: 20 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28     VerifyForGet(
8060: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
8070: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69   ((_flags & SQLi
8080: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8090: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
80a0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
80b0: 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) == SQLiteConn
80c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43  ectionFlags.UseC
80d0: 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c  onnectionReadVal
80e0: 75 65 43 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20  ueCallbacks)..  
80f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8100: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 61 52       SQLiteDataR
8110: 65 61 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65  eaderValue value
8120: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74   = new SQLiteDat
8130: 61 52 65 61 64 65 72 56 61 6c 75 65 28 29 3b 0d  aReaderValue();.
8140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
8150: 6c 20 63 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20  l complete;.... 
8160: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
8170: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
8180: 63 6b 28 69 2c 20 6e 65 77 20 53 51 4c 69 74 65  ck(i, new SQLite
8190: 52 65 61 64 56 61 6c 75 65 45 76 65 6e 74 41 72  ReadValueEventAr
81a0: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
81b0: 20 20 20 20 20 22 47 65 74 46 6c 6f 61 74 22 2c       "GetFloat",
81c0: 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f   null, value), o
81d0: 75 74 20 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d  ut complete);...
81e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
81f0: 28 63 6f 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20  (complete)..    
8200: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8210: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
8220: 61 6c 75 65 2e 46 6c 6f 61 74 56 61 6c 75 65 20  alue.FloatValue 
8230: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
8250: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8260: 63 65 70 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67  ception("missing
8270: 20 66 6c 6f 61 74 20 72 65 74 75 72 6e 20 76 61   float return va
8280: 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lue");....      
8290: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
82a0: 20 28 66 6c 6f 61 74 29 76 61 6c 75 65 2e 46 6c   (float)value.Fl
82b0: 6f 61 74 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  oatValue;..     
82c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
82d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
82e0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
82f0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
8300: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
8310: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8320: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
8330: 66 6f 2e 47 65 74 46 6c 6f 61 74 28 69 20 2d 20  fo.GetFloat(i - 
8340: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
8350: 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  eldCount);....  
8360: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
8370: 28 69 2c 20 44 62 54 79 70 65 2e 53 69 6e 67 6c  (i, DbType.Singl
8380: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
8390: 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 53 69  urn Convert.ToSi
83a0: 6e 67 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74  ngle(_activeStat
83b0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f  ement._sql.GetDo
83c0: 75 62 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74  uble(_activeStat
83d0: 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20 20 20  ement, i));..   
83e0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
83f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
8400: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
8410: 75 6d 6e 20 61 73 20 61 20 47 75 69 64 0d 0a 20  umn as a Guid.. 
8420: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8430: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
8440: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
8450: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
8460: 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  mn.</param>..   
8470: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 47 75   /// <returns>Gu
8480: 69 64 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  id</returns>..  
8490: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
84a0: 65 20 47 75 69 64 20 47 65 74 47 75 69 64 28 69  e Guid GetGuid(i
84b0: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
84c0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
84d0: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
84e0: 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d  VerifyForGet();.
84f0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
8500: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
8510: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
8520: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
8530: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20  ValueCallbacks) 
8540: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8550: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
8560: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
8570: 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20  allbacks)..     
8580: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8590: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
85a0: 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20  erValue value = 
85b0: 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65  new SQLiteDataRe
85c0: 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20  aderValue();..  
85d0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
85e0: 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20  omplete;....    
85f0: 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65          InvokeRe
8600: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28  adValueCallback(
8610: 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61  i, new SQLiteRea
8620: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28  dValueEventArgs(
8630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8640: 20 20 22 47 65 74 47 75 69 64 22 2c 20 6e 75 6c    "GetGuid", nul
8650: 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63  l, value), out c
8660: 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20  omplete);....   
8670: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d           if (com
8680: 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20  plete)..        
8690: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
86a0: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
86b0: 2e 47 75 69 64 56 61 6c 75 65 20 3d 3d 20 6e 75  .GuidValue == nu
86c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
86d0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
86e0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
86f0: 6f 6e 28 22 6d 69 73 73 69 6e 67 20 67 75 69 64  on("missing guid
8700: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b   return value");
8710: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8720: 20 20 20 20 72 65 74 75 72 6e 20 28 47 75 69 64      return (Guid
8730: 29 76 61 6c 75 65 2e 47 75 69 64 56 61 6c 75 65  )value.GuidValue
8740: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8750: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
8760: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
8770: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
8780: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
8790: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
87a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
87b0: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 47 75  n _keyInfo.GetGu
87c0: 69 64 28 69 20 2d 20 50 72 69 76 61 74 65 56 69  id(i - PrivateVi
87d0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
87e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54 79 70  ;....        Typ
87f0: 65 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e 69  eAffinity affini
8800: 74 79 20 3d 20 56 65 72 69 66 79 54 79 70 65 28  ty = VerifyType(
8810: 69 2c 20 44 62 54 79 70 65 2e 47 75 69 64 29 3b  i, DbType.Guid);
8820: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 66  ..        if (af
8830: 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66  finity == TypeAf
8840: 66 69 6e 69 74 79 2e 42 6c 6f 62 29 0d 0a 20 20  finity.Blob)..  
8850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8860: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 75 66 66       byte[] buff
8870: 65 72 20 3d 20 6e 65 77 20 62 79 74 65 5b 31 36  er = new byte[16
8880: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
8890: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
88a0: 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65 73 28 5f  ._sql.GetBytes(_
88b0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
88c0: 20 69 2c 20 30 2c 20 62 75 66 66 65 72 2c 20 30   i, 0, buffer, 0
88d0: 2c 20 31 36 29 3b 0d 0a 20 20 20 20 20 20 20 20  , 16);..        
88e0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47      return new G
88f0: 75 69 64 28 62 75 66 66 65 72 29 3b 0d 0a 20 20  uid(buffer);..  
8900: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8910: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
8920: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
8930: 69 64 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  id(_activeStatem
8940: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74  ent._sql.GetText
8950: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
8960: 74 2c 20 69 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  t, i));..    }..
8970: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
8980: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
8990: 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  urns the column 
89a0: 61 73 20 61 20 73 68 6f 72 74 0d 0a 20 20 20 20  as a short..    
89b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
89c0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
89d0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
89e0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  x of the column.
89f0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
8a00: 2f 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74 31 36  / <returns>Int16
8a10: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
8a20: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
8a30: 49 6e 74 31 36 20 47 65 74 49 6e 74 31 36 28 69  Int16 GetInt16(i
8a40: 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nt i)..    {..  
8a50: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
8a60: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
8a70: 56 65 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d  VerifyForGet();.
8a80: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
8a90: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
8aa0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
8ab0: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
8ac0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20  ValueCallbacks) 
8ad0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8ae0: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
8af0: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
8b00: 61 6c 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20  allbacks)..     
8b10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8b20: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
8b30: 65 72 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20  erValue value = 
8b40: 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61 52 65  new SQLiteDataRe
8b50: 61 64 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20  aderValue();..  
8b60: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
8b70: 6f 6d 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20  omplete;....    
8b80: 20 20 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65          InvokeRe
8b90: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28  adValueCallback(
8ba0: 69 2c 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61  i, new SQLiteRea
8bb0: 64 56 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28  dValueEventArgs(
8bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8bd0: 20 20 22 47 65 74 49 6e 74 31 36 22 2c 20 6e 75    "GetInt16", nu
8be0: 6c 6c 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20  ll, value), out 
8bf0: 63 6f 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20  complete);....  
8c00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
8c10: 6d 70 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20  mplete)..       
8c20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8c30: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
8c40: 65 2e 49 6e 74 31 36 56 61 6c 75 65 20 3d 3d 20  e.Int16Value == 
8c50: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8c60: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
8c70: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8c80: 74 69 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e  tion("missing in
8c90: 74 31 36 20 72 65 74 75 72 6e 20 76 61 6c 75 65  t16 return value
8ca0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
8cb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49         return (I
8cc0: 6e 74 31 36 29 76 61 6c 75 65 2e 49 6e 74 31 36  nt16)value.Int16
8cd0: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
8ce0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
8cf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
8d00: 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69  i >= PrivateVisi
8d10: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
8d20: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
8d30: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8d40: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
8d50: 47 65 74 49 6e 74 31 36 28 69 20 2d 20 50 72 69  GetInt16(i - Pri
8d60: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
8d70: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
8d80: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
8d90: 20 44 62 54 79 70 65 2e 49 6e 74 31 36 29 3b 0d   DbType.Int16);.
8da0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8db0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
8dc0: 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 31 36 28 5f  ._sql.GetInt16(_
8dd0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
8de0: 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   i);..    }.... 
8df0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
8e00: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  ..    /// Retrie
8e10: 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  ves the column a
8e20: 73 20 61 6e 20 69 6e 74 0d 0a 20 20 20 20 2f 2f  s an int..    //
8e30: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
8e40: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
8e50: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
8e60: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f  of the column.</
8e70: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
8e80: 3c 72 65 74 75 72 6e 73 3e 49 6e 74 33 32 3c 2f  <returns>Int32</
8e90: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
8ea0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e  blic override In
8eb0: 74 33 32 20 47 65 74 49 6e 74 33 32 28 69 6e 74  t32 GetInt32(int
8ec0: 20 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20   i)..    {..    
8ed0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
8ee0: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65  d();..        Ve
8ef0: 72 69 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d  rifyForGet();...
8f00: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66  .        if ((_f
8f10: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
8f20: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
8f30: 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61  ConnectionReadVa
8f40: 6c 75 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d  lueCallbacks) ==
8f50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8f60: 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63  nFlags.UseConnec
8f70: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
8f80: 6c 62 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  lbacks)..       
8f90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8fa0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
8fb0: 56 61 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65  Value value = ne
8fc0: 77 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  w SQLiteDataRead
8fd0: 65 72 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20  erValue();..    
8fe0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
8ff0: 70 6c 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  plete;....      
9000: 20 20 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64        InvokeRead
9010: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c  ValueCallback(i,
9020: 20 6e 65 77 20 53 51 4c 69 74 65 52 65 61 64 56   new SQLiteReadV
9030: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a  alueEventArgs(..
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9050: 22 47 65 74 49 6e 74 33 32 22 2c 20 6e 75 6c 6c  "GetInt32", null
9060: 2c 20 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f  , value), out co
9070: 6d 70 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  mplete);....    
9080: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70          if (comp
9090: 6c 65 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lete)..         
90a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
90b0: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
90c0: 49 6e 74 33 32 56 61 6c 75 65 20 3d 3d 20 6e 75  Int32Value == nu
90d0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
90e0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
90f0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
9100: 6f 6e 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 33  on("missing int3
9110: 32 20 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29  2 return value")
9120: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9130: 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74       return (Int
9140: 33 32 29 76 61 6c 75 65 2e 49 6e 74 33 32 56 61  32)value.Int32Va
9150: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
9160: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
9170: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 20  ..        if (i 
9180: 3e 3d 20 50 72 69 76 61 74 65 56 69 73 69 62 6c  >= PrivateVisibl
9190: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
91a0: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
91b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
91c0: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
91d0: 74 49 6e 74 33 32 28 69 20 2d 20 50 72 69 76 61  tInt32(i - Priva
91e0: 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  teVisibleFieldCo
91f0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
9200: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
9210: 62 54 79 70 65 2e 49 6e 74 33 32 29 3b 0d 0a 20  bType.Int32);.. 
9220: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61         return _a
9230: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
9240: 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63  sql.GetInt32(_ac
9250: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
9260: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9270: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
9280: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
9290: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
92a0: 61 20 6c 6f 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20  a long..    /// 
92b0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
92c0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
92d0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
92e0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
92f0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
9300: 65 74 75 72 6e 73 3e 49 6e 74 36 34 3c 2f 72 65  eturns>Int64</re
9310: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
9320: 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 36  ic override Int6
9330: 34 20 47 65 74 49 6e 74 36 34 28 69 6e 74 20 69  4 GetInt64(int i
9340: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9350: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9360: 29 3b 0d 0a 20 20 20 20 20 20 20 20 56 65 72 69  );..        Veri
9370: 66 79 46 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20  fyForGet();.... 
9380: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
9390: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
93a0: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f  ctionFlags.UseCo
93b0: 6e 6e 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75  nnectionReadValu
93c0: 65 43 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53  eCallbacks) == S
93d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
93e0: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
93f0: 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  onReadValueCallb
9400: 61 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  acks)..        {
9410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
9420: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
9430: 6c 75 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20  lue value = new 
9440: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
9450: 56 61 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20  Value();..      
9460: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c        bool compl
9470: 65 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ete;....        
9480: 20 20 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61      InvokeReadVa
9490: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e  lueCallback(i, n
94a0: 65 77 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c  ew SQLiteReadVal
94b0: 75 65 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  ueEventArgs(..  
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
94d0: 65 74 49 6e 74 36 34 22 2c 20 6e 75 6c 6c 2c 20  etInt64", null, 
94e0: 76 61 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70  value), out comp
94f0: 6c 65 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lete);....      
9500: 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65        if (comple
9510: 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
9520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9530: 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e 49 6e      if (value.In
9540: 74 36 34 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  t64Value == null
9550: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9560: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
9570: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
9580: 28 22 6d 69 73 73 69 6e 67 20 69 6e 74 36 34 20  ("missing int64 
9590: 72 65 74 75 72 6e 20 76 61 6c 75 65 22 29 3b 0d  return value");.
95a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
95b0: 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74 36 34     return (Int64
95c0: 29 76 61 6c 75 65 2e 49 6e 74 36 34 56 61 6c 75  )value.Int64Valu
95d0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
95e0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
95f0: 20 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d          if (i >=
9600: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
9610: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
9620: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yInfo != null)..
9630: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9640: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49  rn _keyInfo.GetI
9650: 6e 74 36 34 28 69 20 2d 20 50 72 69 76 61 74 65  nt64(i - Private
9660: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
9670: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 56  t);....        V
9680: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
9690: 79 70 65 2e 49 6e 74 36 34 29 3b 0d 0a 20 20 20  ype.Int64);..   
96a0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
96b0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
96c0: 6c 2e 47 65 74 49 6e 74 36 34 28 5f 61 63 74 69  l.GetInt64(_acti
96d0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
96e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
96f0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
9700: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
9710: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
9720: 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 2f 2f 2f 20  column..    /// 
9730: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9740: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
9750: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
9760: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61   the column.</pa
9770: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
9780: 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72  eturns>string</r
9790: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
97a0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
97b0: 69 6e 67 20 47 65 74 4e 61 6d 65 28 69 6e 74 20  ing GetName(int 
97c0: 69 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  i)..    {..     
97d0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
97e0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
97f0: 66 20 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56  f (i >= PrivateV
9800: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
9810: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
9820: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
9830: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
9840: 66 6f 2e 47 65 74 4e 61 6d 65 28 69 20 2d 20 50  fo.GetName(i - P
9850: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
9860: 6c 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ldCount);....   
9870: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
9880: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
9890: 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63  l.ColumnName(_ac
98a0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
98b0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
98c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
98d0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
98e0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
98f0: 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
9900: 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
9910: 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a  cified column...
9920: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
9930: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
9940: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
9950: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
9960: 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  umn.</param>..  
9970: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73    /// <returns>s
9980: 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d  tring</returns>.
9990: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69  .    public stri
99a0: 6e 67 20 47 65 74 44 61 74 61 62 61 73 65 4e 61  ng GetDatabaseNa
99b0: 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b  me(int i)..    {
99c0: 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
99d0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
99e0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50        if (i >= P
99f0: 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65  rivateVisibleFie
9a00: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
9a10: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
9a20: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9a30: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 61 74   _keyInfo.GetDat
9a40: 61 62 61 73 65 4e 61 6d 65 28 69 20 2d 20 50 72  abaseName(i - Pr
9a50: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
9a60: 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
9a70: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
9a80: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
9a90: 2e 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e  .ColumnDatabaseN
9aa0: 61 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ame(_activeState
9ab0: 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20 20 20 20 7d  ment, i);..    }
9ac0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
9ad0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
9ae0: 65 74 75 72 6e 73 20 74 68 65 20 6e 61 6d 65 20  eturns the name 
9af0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 61 73 73  of the table ass
9b00: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
9b10: 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d   specified colum
9b20: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
9b30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9b40: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
9b50: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
9b60: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e   column.</param>
9b70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
9b80: 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72  ns>string</retur
9b90: 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
9ba0: 73 74 72 69 6e 67 20 47 65 74 54 61 62 6c 65 4e  string GetTableN
9bb0: 61 6d 65 28 69 6e 74 20 69 29 0d 0a 20 20 20 20  ame(int i)..    
9bc0: 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
9bd0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
9be0: 20 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20         if (i >= 
9bf0: 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46 69  PrivateVisibleFi
9c00: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
9c10: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Info != null).. 
9c20: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9c30: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 54 61  n _keyInfo.GetTa
9c40: 62 6c 65 4e 61 6d 65 28 69 20 2d 20 50 72 69 76  bleName(i - Priv
9c50: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
9c60: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
9c70: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
9c80: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43  Statement._sql.C
9c90: 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 5f  olumnTableName(_
9ca0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
9cb0: 20 69 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   i);..    }.... 
9cc0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
9cd0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
9ce0: 73 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6e  s the original n
9cf0: 61 6d 65 20 6f 66 20 74 68 65 20 73 70 65 63 69  ame of the speci
9d00: 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 0d 0a 20 20  fied column...  
9d10: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9d20: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
9d30: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
9d40: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
9d50: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
9d60: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72  /// <returns>str
9d70: 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ing</returns>.. 
9d80: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
9d90: 20 47 65 74 4f 72 69 67 69 6e 61 6c 4e 61 6d 65   GetOriginalName
9da0: 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
9db0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
9dc0: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
9dd0: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69      if (i >= Pri
9de0: 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64  vateVisibleField
9df0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
9e00: 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  o != null)..    
9e10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
9e20: 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d 65 28  keyInfo.GetName(
9e30: 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69 62  i - PrivateVisib
9e40: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d 0a  leFieldCount);..
9e50: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
9e60: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
9e70: 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4f 72 69  t._sql.ColumnOri
9e80: 67 69 6e 61 6c 4e 61 6d 65 28 5f 61 63 74 69 76  ginalName(_activ
9e90: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d  eStatement, i);.
9ea0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
9eb0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
9ec0: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
9ed0: 68 65 20 69 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  he i of a column
9ee0: 2c 20 67 69 76 65 6e 20 69 74 73 20 6e 61 6d 65  , given its name
9ef0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
9f00: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
9f10: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
9f20: 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  >The name of the
9f30: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
9f40: 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eve</param>..   
9f50: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
9f60: 65 20 69 6e 74 20 69 20 6f 66 20 74 68 65 20 63  e int i of the c
9f70: 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d  olumn</returns>.
9f80: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
9f90: 72 69 64 65 20 69 6e 74 20 47 65 74 4f 72 64 69  ride int GetOrdi
9fa0: 6e 61 6c 28 73 74 72 69 6e 67 20 6e 61 6d 65 29  nal(string name)
9fb0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43  ..    {..      C
9fc0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
9fd0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 74 68  ...      if (_th
9fe0: 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29 20 53  rowOnDisposed) S
9ff0: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43 68 65  QLiteCommand.Che
a000: 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0d 0a 0d  ck(_command);...
a010: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
a020: 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c   // NOTE: First,
a030: 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f   check if the co
a040: 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 63 68 65 20  lumn name cache 
a050: 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  has been initial
a060: 69 7a 65 64 20 79 65 74 2e 0d 0a 20 20 20 20 20  ized yet...     
a070: 20 2f 2f 20 20 20 20 20 20 20 49 66 20 6e 6f 74   //       If not
a080: 2c 20 64 6f 20 69 74 20 6e 6f 77 2e 0d 0a 20 20  , do it now...  
a090: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66      //..      if
a0a0: 20 28 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20   (_fieldIndexes 
a0b0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
a0c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 66 69  {..          _fi
a0d0: 65 6c 64 49 6e 64 65 78 65 73 20 3d 20 6e 65 77  eldIndexes = new
a0e0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
a0f0: 6e 67 2c 20 69 6e 74 3e 28 0d 0a 20 20 20 20 20  ng, int>(..     
a100: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43           StringC
a110: 6f 6d 70 61 72 65 72 2e 4f 72 64 69 6e 61 6c 49  omparer.OrdinalI
a120: 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 20 20 20  gnoreCase);..   
a130: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f     }....      //
a140: 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a  ..      // NOTE:
a150: 20 4e 65 78 74 2c 20 73 65 65 20 69 66 20 74 68   Next, see if th
a160: 65 20 69 6e 64 65 78 20 66 6f 72 20 74 68 65 20  e index for the 
a170: 72 65 71 75 65 73 74 65 64 20 63 6f 6c 75 6d 6e  requested column
a180: 20 6e 61 6d 65 20 68 61 73 20 62 65 65 6e 0d 0a   name has been..
a190: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63        //       c
a1a0: 61 63 68 65 64 20 61 6c 72 65 61 64 79 2e 20 20  ached already.  
a1b0: 49 66 20 73 6f 2c 20 72 65 74 75 72 6e 20 74 68  If so, return th
a1c0: 65 20 63 61 63 68 65 64 20 76 61 6c 75 65 2e 20  e cached value. 
a1d0: 20 4f 74 68 65 72 77 69 73 65 2c 0d 0a 20 20 20   Otherwise,..   
a1e0: 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 6f 6f 6b     //       look
a1f0: 75 70 20 74 68 65 20 76 61 6c 75 65 20 61 6e 64  up the value and
a200: 20 74 68 65 6e 20 63 61 63 68 65 20 74 68 65 20   then cache the 
a210: 72 65 73 75 6c 74 20 66 6f 72 20 66 75 74 75 72  result for futur
a220: 65 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 2f 2f  e use...      //
a230: 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 3b 0d 0a  ..      int r;..
a240: 0d 0a 20 20 20 20 20 20 69 66 20 28 21 5f 66 69  ..      if (!_fi
a250: 65 6c 64 49 6e 64 65 78 65 73 2e 54 72 79 47 65  eldIndexes.TryGe
a260: 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 6f 75 74  tValue(name, out
a270: 20 72 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   r))..      {.. 
a280: 20 20 20 20 20 20 20 20 20 72 20 3d 20 5f 61 63           r = _ac
a290: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
a2a0: 71 6c 2e 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 5f  ql.ColumnIndex(_
a2b0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
a2c0: 20 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   name);....     
a2d0: 20 20 20 20 20 69 66 20 28 72 20 3d 3d 20 2d 31       if (r == -1
a2e0: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
a2f0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
a300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a310: 20 20 72 20 3d 20 5f 6b 65 79 49 6e 66 6f 2e 47    r = _keyInfo.G
a320: 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d 65 29 3b  etOrdinal(name);
a330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a340: 69 66 20 28 72 20 3e 20 2d 31 29 20 72 20 2b 3d  if (r > -1) r +=
a350: 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
a360: 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  ieldCount;..    
a370: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a380: 20 20 20 20 20 5f 66 69 65 6c 64 49 6e 64 65 78       _fieldIndex
a390: 65 73 2e 41 64 64 28 6e 61 6d 65 2c 20 72 29 3b  es.Add(name, r);
a3a0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
a3b0: 20 20 20 72 65 74 75 72 6e 20 72 3b 0d 0a 20 20     return r;..  
a3c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
a3d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
a3e0: 2f 20 53 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  / Schema informa
a3f0: 74 69 6f 6e 20 69 6e 20 53 51 4c 69 74 65 20 69  tion in SQLite i
a400: 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20 6d  s difficult to m
a410: 61 70 20 69 6e 74 6f 20 2e 4e 45 54 20 63 6f 6e  ap into .NET con
a420: 76 65 6e 74 69 6f 6e 73 2c 20 73 6f 20 61 20 6c  ventions, so a l
a430: 6f 74 20 6f 66 20 77 6f 72 6b 20 6d 75 73 74 20  ot of work must 
a440: 62 65 20 64 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f  be done..    ///
a450: 20 74 6f 20 67 61 74 68 65 72 20 74 68 65 20 6e   to gather the n
a460: 65 63 65 73 73 61 72 79 20 69 6e 66 6f 72 6d 61  ecessary informa
a470: 74 69 6f 6e 20 73 6f 20 69 74 20 63 61 6e 20 62  tion so it can b
a480: 65 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  e represented in
a490: 20 61 6e 20 41 44 4f 2e 4e 45 54 20 6d 61 6e 6e   an ADO.NET mann
a4a0: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  er...    /// </s
a4b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
a4c0: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
a4d0: 73 20 61 20 44 61 74 61 54 61 62 6c 65 20 63 6f  s a DataTable co
a4e0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73 63 68  ntaining the sch
a4f0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
a500: 66 6f 72 20 74 68 65 20 61 63 74 69 76 65 20 53  for the active S
a510: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
a520: 62 65 69 6e 67 20 70 72 6f 63 65 73 73 65 64 2e  being processed.
a530: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
a540: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
a550: 44 61 74 61 54 61 62 6c 65 20 47 65 74 53 63 68  DataTable GetSch
a560: 65 6d 61 54 61 62 6c 65 28 29 0d 0a 20 20 20 20  emaTable()..    
a570: 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69  {..      CheckDi
a580: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
a590: 20 72 65 74 75 72 6e 20 47 65 74 53 63 68 65 6d   return GetSchem
a5a0: 61 54 61 62 6c 65 28 74 72 75 65 2c 20 66 61 6c  aTable(true, fal
a5b0: 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  se);..    }.... 
a5c0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a610: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f  ..    #region Co
a620: 6c 75 6d 6e 50 61 72 65 6e 74 20 43 6c 61 73 73  lumnParent Class
a630: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 65  ..    private se
a640: 61 6c 65 64 20 63 6c 61 73 73 20 43 6f 6c 75 6d  aled class Colum
a650: 6e 50 61 72 65 6e 74 20 3a 20 49 45 71 75 61 6c  nParent : IEqual
a660: 69 74 79 43 6f 6d 70 61 72 65 72 3c 43 6f 6c 75  ityComparer<Colu
a670: 6d 6e 50 61 72 65 6e 74 3e 0d 0a 20 20 20 20 7b  mnParent>..    {
a680: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
a690: 6e 20 50 75 62 6c 69 63 20 46 69 65 6c 64 73 0d  n Public Fields.
a6a0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
a6b0: 73 74 72 69 6e 67 20 44 61 74 61 62 61 73 65 4e  string DatabaseN
a6c0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 70 75  ame;..        pu
a6d0: 62 6c 69 63 20 73 74 72 69 6e 67 20 54 61 62 6c  blic string Tabl
a6e0: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
a6f0: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f  public string Co
a700: 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  lumnName;..     
a710: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
a720: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a770: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
a780: 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74  ion Public Const
a790: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
a7a0: 20 70 75 62 6c 69 63 20 43 6f 6c 75 6d 6e 50 61   public ColumnPa
a7b0: 72 65 6e 74 28 29 0d 0a 20 20 20 20 20 20 20 20  rent()..        
a7c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
a7d0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
a7e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a7f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a840: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 43 6f         public Co
a850: 6c 75 6d 6e 50 61 72 65 6e 74 28 0d 0a 20 20 20  lumnParent(..   
a860: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
a870: 64 61 74 61 62 61 73 65 4e 61 6d 65 2c 0d 0a 20  databaseName,.. 
a880: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
a890: 67 20 74 61 62 6c 65 4e 61 6d 65 2c 0d 0a 20 20  g tableName,..  
a8a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
a8b0: 20 63 6f 6c 75 6d 6e 4e 61 6d 65 0d 0a 20 20 20   columnName..   
a8c0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
a8d0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 29          : this()
a8e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
a8f0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 44 61           this.Da
a900: 74 61 62 61 73 65 4e 61 6d 65 20 3d 20 64 61 74  tabaseName = dat
a910: 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  abaseName;..    
a920: 20 20 20 20 20 20 20 20 74 68 69 73 2e 54 61 62          this.Tab
a930: 6c 65 4e 61 6d 65 20 3d 20 74 61 62 6c 65 4e 61  leName = tableNa
a940: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
a950: 20 74 68 69 73 2e 43 6f 6c 75 6d 6e 4e 61 6d 65   this.ColumnName
a960: 20 3d 20 63 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a   = columnName;..
a970: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a980: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
a990: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
a9f0: 69 6f 6e 20 49 45 71 75 61 6c 69 74 79 43 6f 6d  ion IEqualityCom
aa00: 70 61 72 65 72 3c 43 6f 6c 75 6d 6e 50 61 72 65  parer<ColumnPare
aa10: 6e 74 3e 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  nt> Members..   
aa20: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
aa30: 20 45 71 75 61 6c 73 28 43 6f 6c 75 6d 6e 50 61   Equals(ColumnPa
aa40: 72 65 6e 74 20 78 2c 20 43 6f 6c 75 6d 6e 50 61  rent x, ColumnPa
aa50: 72 65 6e 74 20 79 29 0d 0a 20 20 20 20 20 20 20  rent y)..       
aa60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
aa70: 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29 20  if ((x == null) 
aa80: 26 26 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29 0d  && (y == null)).
aa90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aab0: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
aac0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
aad0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
aae0: 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c   ((x == null) ||
aaf0: 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20   (y == null)).. 
ab00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
ab20: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
ab30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
ab40: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
ab50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ab60: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ab70: 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
ab80: 78 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 2c 20  x.DatabaseName, 
ab90: 79 2e 44 61 74 61 62 61 73 65 4e 61 6d 65 2c 0d  y.DatabaseName,.
aba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
abb0: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43           StringC
abc0: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
abd0: 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20  lIgnoreCase)).. 
abe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
abf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ac00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
ac10: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
ac20: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ac30: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
ac40: 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 78 2e 54  tring.Equals(x.T
ac50: 61 62 6c 65 4e 61 6d 65 2c 20 79 2e 54 61 62 6c  ableName, y.Tabl
ac60: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
ac70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac80: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
ac90: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
aca0: 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
acb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
acc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
acd0: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
acf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ad00: 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75   if (!String.Equ
ad10: 61 6c 73 28 78 2e 43 6f 6c 75 6d 6e 4e 61 6d 65  als(x.ColumnName
ad20: 2c 20 79 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 0d  , y.ColumnName,.
ad30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ad40: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43           StringC
ad50: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
ad60: 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20  lIgnoreCase)).. 
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
ad80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ad90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
ada0: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
adb0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
adc0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
add0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
ade0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
adf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
ae00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae40: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
ae50: 75 62 6c 69 63 20 69 6e 74 20 47 65 74 48 61 73  ublic int GetHas
ae60: 68 43 6f 64 65 28 43 6f 6c 75 6d 6e 50 61 72 65  hCode(ColumnPare
ae70: 6e 74 20 6f 62 6a 29 0d 0a 20 20 20 20 20 20 20  nt obj)..       
ae80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ae90: 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 30 3b 0d  int result = 0;.
aea0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
aeb0: 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29  f ((obj != null)
aec0: 20 26 26 20 28 6f 62 6a 2e 44 61 74 61 62 61 73   && (obj.Databas
aed0: 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29 0d  eName != null)).
aee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aef0: 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e 44   result ^= obj.D
af00: 61 74 61 62 61 73 65 4e 61 6d 65 2e 47 65 74 48  atabaseName.GetH
af10: 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20  ashCode();....  
af20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6f            if ((o
af30: 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28  bj != null) && (
af40: 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d 65 20 21 3d  obj.TableName !=
af50: 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
af60: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
af70: 5e 3d 20 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d 65  ^= obj.TableName
af80: 2e 47 65 74 48 61 73 68 43 6f 64 65 28 29 3b 0d  .GetHashCode();.
af90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
afa0: 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29  f ((obj != null)
afb0: 20 26 26 20 28 6f 62 6a 2e 43 6f 6c 75 6d 6e 4e   && (obj.ColumnN
afc0: 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ame != null)).. 
afd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
afe0: 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e 43 6f 6c  esult ^= obj.Col
aff0: 75 6d 6e 4e 61 6d 65 2e 47 65 74 48 61 73 68 43  umnName.GetHashC
b000: 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ode();....      
b010: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
b020: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
b030: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
b040: 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
b050: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
b060: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
b070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b0b0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
b0c0: 74 69 63 20 76 6f 69 64 20 47 65 74 53 74 61 74  tic void GetStat
b0d0: 65 6d 65 6e 74 43 6f 6c 75 6d 6e 50 61 72 65 6e  ementColumnParen
b0e0: 74 73 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ts(..        SQL
b0f0: 69 74 65 42 61 73 65 20 73 71 6c 2c 0d 0a 20 20  iteBase sql,..  
b100: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
b110: 65 6d 65 6e 74 20 73 74 6d 74 2c 0d 0a 20 20 20  ement stmt,..   
b120: 20 20 20 20 20 69 6e 74 20 66 69 65 6c 64 43 6f       int fieldCo
b130: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  unt,..        re
b140: 66 20 44 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c  f Dictionary<Col
b150: 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c  umnParent, List<
b160: 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54 6f 43 6f  int>> parentToCo
b170: 6c 75 6d 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20  lumns,..        
b180: 72 65 66 20 44 69 63 74 69 6f 6e 61 72 79 3c 69  ref Dictionary<i
b190: 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  nt, ColumnParent
b1a0: 3e 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74  > columnToParent
b1b0: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
b1c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
b1d0: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20  parentToColumns 
b1e0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
b1f0: 20 20 20 20 20 20 70 61 72 65 6e 74 54 6f 43 6f        parentToCo
b200: 6c 75 6d 6e 73 20 3d 20 6e 65 77 20 44 69 63 74  lumns = new Dict
b210: 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72  ionary<ColumnPar
b220: 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 28  ent, List<int>>(
b230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b240: 20 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65    new ColumnPare
b250: 6e 74 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nt());....      
b260: 20 20 69 66 20 28 63 6f 6c 75 6d 6e 54 6f 50 61    if (columnToPa
b270: 72 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  rent == null).. 
b280: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 75 6d             colum
b290: 6e 54 6f 50 61 72 65 6e 74 20 3d 20 6e 65 77 20  nToParent = new 
b2a0: 44 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74 2c 20  Dictionary<int, 
b2b0: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 28 29 3b  ColumnParent>();
b2c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20  ....        for 
b2d0: 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20  (int n = 0; n < 
b2e0: 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b 29  fieldCount; n++)
b2f0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
b300: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
b310: 64 61 74 61 62 61 73 65 4e 61 6d 65 20 3d 20 73  databaseName = s
b320: 71 6c 2e 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73  ql.ColumnDatabas
b330: 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b 0d  eName(stmt, n);.
b340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
b350: 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 20 3d 20  ing tableName = 
b360: 73 71 6c 2e 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e  sql.ColumnTableN
b370: 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b 0d 0a 20  ame(stmt, n);.. 
b380: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
b390: 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 20 3d 20 73  g columnName = s
b3a0: 71 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61  ql.ColumnOrigina
b3b0: 6c 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b 0d  lName(stmt, n);.
b3c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  ...            C
b3d0: 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6b 65 79 20  olumnParent key 
b3e0: 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65  = new ColumnPare
b3f0: 6e 74 28 64 61 74 61 62 61 73 65 4e 61 6d 65 2c  nt(databaseName,
b400: 20 74 61 62 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c   tableName, null
b410: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b420: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 76 61 6c  ColumnParent val
b430: 75 65 20 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e 50  ue = new ColumnP
b440: 61 72 65 6e 74 28 64 61 74 61 62 61 73 65 4e 61  arent(databaseNa
b450: 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65 2c 20 63  me, tableName, c
b460: 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  olumnName);.... 
b470: 20 20 20 20 20 20 20 20 20 20 20 4c 69 73 74 3c             List<
b480: 69 6e 74 3e 20 69 6e 64 65 78 4c 69 73 74 3b 0d  int> indexList;.
b490: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
b4a0: 66 20 28 21 70 61 72 65 6e 74 54 6f 43 6f 6c 75  f (!parentToColu
b4b0: 6d 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28  mns.TryGetValue(
b4c0: 6b 65 79 2c 20 6f 75 74 20 69 6e 64 65 78 4c 69  key, out indexLi
b4d0: 73 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st))..          
b4e0: 20 20 20 20 20 20 70 61 72 65 6e 74 54 6f 43 6f        parentToCo
b4f0: 6c 75 6d 6e 73 2e 41 64 64 28 6b 65 79 2c 20 6e  lumns.Add(key, n
b500: 65 77 20 4c 69 73 74 3c 69 6e 74 3e 28 6e 65 77  ew List<int>(new
b510: 20 69 6e 74 5b 5d 20 7b 20 6e 20 7d 29 29 3b 0d   int[] { n }));.
b520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
b530: 65 20 69 66 20 28 69 6e 64 65 78 4c 69 73 74 20  e if (indexList 
b540: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
b550: 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 4c            indexL
b560: 69 73 74 2e 41 64 64 28 6e 29 3b 0d 0a 20 20 20  ist.Add(n);..   
b570: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
b580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
b590: 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 5b 6b  arentToColumns[k
b5a0: 65 79 5d 20 3d 20 6e 65 77 20 4c 69 73 74 3c 69  ey] = new List<i
b5b0: 6e 74 3e 28 6e 65 77 20 69 6e 74 5b 5d 20 7b 20  nt>(new int[] { 
b5c0: 6e 20 7d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  n });....       
b5d0: 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f 50 61 72       columnToPar
b5e0: 65 6e 74 2e 41 64 64 28 6e 2c 20 76 61 6c 75 65  ent.Add(n, value
b5f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
b600: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
b610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b650: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70  ///////....    p
b660: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
b670: 74 20 43 6f 75 6e 74 50 61 72 65 6e 74 73 28 0d  t CountParents(.
b680: 0a 20 20 20 20 20 20 20 20 44 69 63 74 69 6f 6e  .        Diction
b690: 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ary<ColumnParent
b6a0: 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20 70 61 72  , List<int>> par
b6b0: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 0d 0a 20 20  entToColumns..  
b6c0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
b6d0: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 75          int resu
b6e0: 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  lt = 0;....     
b6f0: 20 20 20 69 66 20 28 70 61 72 65 6e 74 54 6f 43     if (parentToC
b700: 6f 6c 75 6d 6e 73 20 21 3d 20 6e 75 6c 6c 29 0d  olumns != null).
b710: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
b720: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
b730: 28 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6b 65  (ColumnParent ke
b740: 79 20 69 6e 20 70 61 72 65 6e 74 54 6f 43 6f 6c  y in parentToCol
b750: 75 6d 6e 73 2e 4b 65 79 73 29 0d 0a 20 20 20 20  umns.Keys)..    
b760: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b770: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
b780: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
b790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7a0: 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
b7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
b7c0: 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 20 3d  ring tableName =
b7d0: 20 6b 65 79 2e 54 61 62 6c 65 4e 61 6d 65 3b 0d   key.TableName;.
b7e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b7f0: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
b800: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 61 62 6c  NullOrEmpty(tabl
b810: 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
b820: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
b830: 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
b840: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
b850: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
b860: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
b870: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
b880: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a  result;..    }..
b890: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
b8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8e0: 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  /....    interna
b8f0: 6c 20 44 61 74 61 54 61 62 6c 65 20 47 65 74 53  l DataTable GetS
b900: 63 68 65 6d 61 54 61 62 6c 65 28 62 6f 6f 6c 20  chemaTable(bool 
b910: 77 61 6e 74 55 6e 69 71 75 65 49 6e 66 6f 2c 20  wantUniqueInfo, 
b920: 62 6f 6f 6c 20 77 61 6e 74 44 65 66 61 75 6c 74  bool wantDefault
b930: 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  Value)..    {.. 
b940: 20 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73         CheckClos
b950: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  ed();..        i
b960: 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f  f (_throwOnDispo
b970: 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61  sed) SQLiteComma
b980: 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e  nd.Check(_comman
b990: 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  d);....        /
b9a0: 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 42 55  /..        // BU
b9b0: 47 46 49 58 3a 20 57 65 20 6e 65 65 64 20 74 6f  GFIX: We need to
b9c0: 20 71 75 69 63 6b 6c 79 20 73 63 61 6e 20 61 6c   quickly scan al
b9d0: 6c 20 74 68 65 20 66 69 65 6c 64 73 20 69 6e 20  l the fields in 
b9e0: 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20  the current..   
b9f0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
ba00: 22 72 65 73 75 6c 74 20 73 65 74 22 20 74 6f 20  "result set" to 
ba10: 73 65 65 20 68 6f 77 20 6d 61 6e 79 20 64 69 73  see how many dis
ba20: 74 69 6e 63 74 20 74 61 62 6c 65 73 20 61 72 65  tinct tables are
ba30: 20 61 63 74 75 61 6c 6c 79 0d 0a 20 20 20 20 20   actually..     
ba40: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69 6e     //         in
ba50: 76 6f 6c 76 65 64 2e 20 20 54 68 69 73 20 69 6e  volved.  This in
ba60: 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 65 63  formation is nec
ba70: 65 73 73 61 72 79 20 73 6f 20 74 68 61 74 20 73  essary so that s
ba80: 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ome..        // 
ba90: 20 20 20 20 20 20 20 20 69 6e 74 65 6c 6c 69 67          intellig
baa0: 65 6e 74 20 64 65 63 69 73 69 6f 6e 73 20 63 61  ent decisions ca
bab0: 6e 20 62 65 20 6d 61 64 65 20 77 68 65 6e 20 63  n be made when c
bac0: 6f 6e 73 74 72 75 63 74 69 6e 67 20 74 68 65 0d  onstructing the.
bad0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
bae0: 20 20 20 20 6d 65 74 61 64 61 74 61 20 62 65 6c      metadata bel
baf0: 6f 77 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ow.  For example
bb00: 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 62 65 20  , we need to be 
bb10: 76 65 72 79 20 63 61 72 65 66 75 6c 0d 0a 20 20  very careful..  
bb20: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
bb30: 20 61 62 6f 75 74 20 66 6c 61 67 67 69 6e 67 20   about flagging 
bb40: 61 20 70 61 72 74 69 63 75 6c 61 72 20 63 6f 6c  a particular col
bb50: 75 6d 6e 20 61 73 20 22 75 6e 69 71 75 65 22 20  umn as "unique" 
bb60: 6a 75 73 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  just..        //
bb70: 20 20 20 20 20 20 20 20 20 62 65 63 61 75 73 65           because
bb80: 20 69 74 20 77 61 73 20 69 6e 20 69 74 73 20 6f   it was in its o
bb90: 72 69 67 69 6e 61 6c 20 75 6e 64 65 72 6c 79 69  riginal underlyi
bba0: 6e 67 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  ng database tabl
bbb0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  e..        //   
bbc0: 20 20 20 20 20 20 69 66 20 74 68 65 72 65 20 61        if there a
bbd0: 72 65 20 6e 6f 77 20 6d 75 6c 74 69 70 6c 65 20  re now multiple 
bbe0: 74 61 62 6c 65 73 20 69 6e 76 6f 6c 76 65 64 20  tables involved 
bbf0: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  in the..        
bc00: 2f 2f 20 20 20 20 20 20 20 20 20 22 72 65 73 75  //         "resu
bc10: 6c 74 20 73 65 74 22 2e 20 20 53 65 65 20 74 69  lt set".  See ti
bc20: 63 6b 65 74 20 5b 37 65 33 66 61 39 33 37 34 34  cket [7e3fa93744
bc30: 5d 20 66 6f 72 20 6d 6f 72 65 20 64 65 74 61 69  ] for more detai
bc40: 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  led..        // 
bc50: 20 20 20 20 20 20 20 20 69 6e 66 6f 72 6d 61 74          informat
bc60: 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
bc70: 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74 69 6f  ..        Dictio
bc80: 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e  nary<ColumnParen
bc90: 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20 70 61  t, List<int>> pa
bca0: 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 20  rentToColumns = 
bcb0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 44  null;..        D
bcc0: 69 63 74 69 6f 6e 61 72 79 3c 69 6e 74 2c 20 43  ictionary<int, C
bcd0: 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 20 63 6f 6c  olumnParent> col
bce0: 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 20 6e 75  umnToParent = nu
bcf0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ll;..        SQL
bd00: 69 74 65 42 61 73 65 20 73 71 6c 20 3d 20 5f 63  iteBase sql = _c
bd10: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
bd20: 6e 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n._sql;....     
bd30: 20 20 20 47 65 74 53 74 61 74 65 6d 65 6e 74 43     GetStatementC
bd40: 6f 6c 75 6d 6e 50 61 72 65 6e 74 73 28 0d 0a 20  olumnParents(.. 
bd50: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 2c 20             sql, 
bd60: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
bd70: 2c 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 0d 0a  , _fieldCount,..
bd80: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
bd90: 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c  parentToColumns,
bda0: 20 72 65 66 20 63 6f 6c 75 6d 6e 54 6f 50 61 72   ref columnToPar
bdb0: 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ent);....       
bdc0: 20 44 61 74 61 54 61 62 6c 65 20 74 62 6c 20 3d   DataTable tbl =
bdd0: 20 6e 65 77 20 44 61 74 61 54 61 62 6c 65 28 22   new DataTable("
bde0: 53 63 68 65 6d 61 54 61 62 6c 65 22 29 3b 0d 0a  SchemaTable");..
bdf0: 20 20 20 20 20 20 20 20 44 61 74 61 54 61 62 6c          DataTabl
be00: 65 20 74 62 6c 49 6e 64 65 78 65 73 20 3d 20 6e  e tblIndexes = n
be10: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 44 61  ull;..        Da
be20: 74 61 54 61 62 6c 65 20 74 62 6c 49 6e 64 65 78  taTable tblIndex
be30: 43 6f 6c 75 6d 6e 73 3b 0d 0a 20 20 20 20 20 20  Columns;..      
be40: 20 20 44 61 74 61 52 6f 77 20 72 6f 77 3b 0d 0a    DataRow row;..
be50: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
be60: 65 6d 70 3b 0d 0a 20 20 20 20 20 20 20 20 73 74  emp;..        st
be70: 72 69 6e 67 20 73 74 72 43 61 74 61 6c 6f 67 20  ring strCatalog 
be80: 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  = String.Empty;.
be90: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
bea0: 73 74 72 54 61 62 6c 65 20 3d 20 53 74 72 69 6e  strTable = Strin
beb0: 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20  g.Empty;..      
bec0: 20 20 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 75    string strColu
bed0: 6d 6e 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74  mn = String.Empt
bee0: 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 62  y;....        tb
bef0: 6c 2e 4c 6f 63 61 6c 65 20 3d 20 43 75 6c 74 75  l.Locale = Cultu
bf00: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
bf10: 43 75 6c 74 75 72 65 3b 0d 0a 20 20 20 20 20 20  Culture;..      
bf20: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
bf30: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
bf40: 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20  umn.ColumnName, 
bf50: 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b  typeof(String));
bf60: 0d 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f  ..        tbl.Co
bf70: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
bf80: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75  TableColumn.Colu
bf90: 6d 6e 4f 72 64 69 6e 61 6c 2c 20 74 79 70 65 6f  mnOrdinal, typeo
bfa0: 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20  f(int));..      
bfb0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
bfc0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
bfd0: 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 2c 20  umn.ColumnSize, 
bfe0: 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20  typeof(int));.. 
bff0: 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d         tbl.Colum
c000: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
c010: 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63  leColumn.Numeric
c020: 50 72 65 63 69 73 69 6f 6e 2c 20 74 79 70 65 6f  Precision, typeo
c030: 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20  f(int));..      
c040: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c050: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
c060: 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c 65  umn.NumericScale
c070: 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d  , typeof(int));.
c080: 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  .        tbl.Col
c090: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
c0a0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69  ableColumn.IsUni
c0b0: 71 75 65 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  que, typeof(Bool
c0c0: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ean));..        
c0d0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c0e0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c0f0: 6e 2e 49 73 4b 65 79 2c 20 74 79 70 65 6f 66 28  n.IsKey, typeof(
c100: 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20  Boolean));..    
c110: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c120: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
c130: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61  ptionalColumn.Ba
c140: 73 65 53 65 72 76 65 72 4e 61 6d 65 2c 20 74 79  seServerName, ty
c150: 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a  peof(string));..
c160: 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75          tbl.Colu
c170: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
c180: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
c190: 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d  n.BaseCatalogNam
c1a0: 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67  e, typeof(String
c1b0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c  ));..        tbl
c1c0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
c1d0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
c1e0: 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74  aseColumnName, t
c1f0: 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0d  ypeof(String));.
c200: 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  .        tbl.Col
c210: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
c220: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 53  ableColumn.BaseS
c230: 63 68 65 6d 61 4e 61 6d 65 2c 20 74 79 70 65 6f  chemaName, typeo
c240: 66 28 53 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20  f(String));..   
c250: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c260: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c270: 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65  Column.BaseTable
c280: 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72  Name, typeof(Str
c290: 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ing));..        
c2a0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c2b0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c2c0: 6e 2e 44 61 74 61 54 79 70 65 2c 20 74 79 70 65  n.DataType, type
c2d0: 6f 66 28 54 79 70 65 29 29 3b 0d 0a 20 20 20 20  of(Type));..    
c2e0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c2f0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
c300: 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c  olumn.AllowDBNul
c310: 6c 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  l, typeof(Boolea
c320: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62  n));..        tb
c330: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c340: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
c350: 50 72 6f 76 69 64 65 72 54 79 70 65 2c 20 74 79  ProviderType, ty
c360: 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20  peof(int));..   
c370: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c380: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c390: 43 6f 6c 75 6d 6e 2e 49 73 41 6c 69 61 73 65 64  Column.IsAliased
c3a0: 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e  , typeof(Boolean
c3b0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62 6c  ));..        tbl
c3c0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
c3d0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49  emaTableColumn.I
c3e0: 73 45 78 70 72 65 73 73 69 6f 6e 2c 20 74 79 70  sExpression, typ
c3f0: 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a  eof(Boolean));..
c400: 20 20 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75          tbl.Colu
c410: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
c420: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
c430: 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e  n.IsAutoIncremen
c440: 74 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  t, typeof(Boolea
c450: 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62  n));..        tb
c460: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
c470: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
c480: 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56 65 72  lColumn.IsRowVer
c490: 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f  sion, typeof(Boo
c4a0: 6c 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20  lean));..       
c4b0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
c4c0: 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  (SchemaTableOpti
c4d0: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 48 69 64  onalColumn.IsHid
c4e0: 64 65 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  den, typeof(Bool
c4f0: 65 61 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ean));..        
c500: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
c510: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
c520: 6e 2e 49 73 4c 6f 6e 67 2c 20 74 79 70 65 6f 66  n.IsLong, typeof
c530: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20 20  (Boolean));..   
c540: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
c550: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
c560: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
c570: 73 52 65 61 64 4f 6e 6c 79 2c 20 74 79 70 65 6f  sReadOnly, typeo
c580: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0d 0a 20 20  f(Boolean));..  
c590: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
c5a0: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
c5b0: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
c5c0: 50 72 6f 76 69 64 65 72 53 70 65 63 69 66 69 63  ProviderSpecific
c5d0: 44 61 74 61 54 79 70 65 2c 20 74 79 70 65 6f 66  DataType, typeof
c5e0: 28 54 79 70 65 29 29 3b 0d 0a 20 20 20 20 20 20  (Type));..      
c5f0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
c600: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
c610: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61  ionalColumn.Defa
c620: 75 6c 74 56 61 6c 75 65 2c 20 74 79 70 65 6f 66  ultValue, typeof
c630: 28 6f 62 6a 65 63 74 29 29 3b 0d 0a 20 20 20 20  (object));..    
c640: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
c650: 41 64 64 28 22 44 61 74 61 54 79 70 65 4e 61 6d  Add("DataTypeNam
c660: 65 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e  e", typeof(strin
c670: 67 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 74 62  g));..        tb
c680: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 43  l.Columns.Add("C
c690: 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 22 2c 20 74  ollationType", t
c6a0: 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d  ypeof(string));.
c6b0: 0a 20 20 20 20 20 20 20 20 74 62 6c 2e 42 65 67  .        tbl.Beg
c6c0: 69 6e 4c 6f 61 64 44 61 74 61 28 29 3b 0d 0a 0d  inLoadData();...
c6d0: 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e  .        for (in
c6e0: 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 66 69  t n = 0; n < _fi
c6f0: 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0d 0a  eldCount; n++)..
c700: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c710: 20 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70         SQLiteTyp
c720: 65 20 73 71 6c 54 79 70 65 20 3d 20 47 65 74 53  e sqlType = GetS
c730: 51 4c 69 74 65 54 79 70 65 28 5f 66 6c 61 67 73  QLiteType(_flags
c740: 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  , n);....       
c750: 20 20 20 20 20 72 6f 77 20 3d 20 74 62 6c 2e 4e       row = tbl.N
c760: 65 77 52 6f 77 28 29 3b 0d 0a 0d 0a 20 20 20 20  ewRow();....    
c770: 20 20 20 20 20 20 20 20 44 62 54 79 70 65 20 74          DbType t
c780: 79 70 20 3d 20 73 71 6c 54 79 70 65 2e 54 79 70  yp = sqlType.Typ
c790: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
c7a0: 20 20 2f 2f 20 44 65 66 61 75 6c 74 20 73 65 74    // Default set
c7b0: 74 69 6e 67 73 20 66 6f 72 20 74 68 65 20 63 6f  tings for the co
c7c0: 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  lumn..          
c7d0: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
c7e0: 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61  eColumn.ColumnNa
c7f0: 6d 65 5d 20 3d 20 47 65 74 4e 61 6d 65 28 6e 29  me] = GetName(n)
c800: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
c810: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
c820: 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e  lumn.ColumnOrdin
c830: 61 6c 5d 20 3d 20 6e 3b 0d 0a 20 20 20 20 20 20  al] = n;..      
c840: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
c850: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75  TableColumn.Colu
c860: 6d 6e 53 69 7a 65 5d 20 3d 20 53 51 4c 69 74 65  mnSize] = SQLite
c870: 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f  Convert.DbTypeTo
c880: 43 6f 6c 75 6d 6e 53 69 7a 65 28 74 79 70 29 3b  ColumnSize(typ);
c890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 6f  ..            ro
c8a0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
c8b0: 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63 69  umn.NumericPreci
c8c0: 73 69 6f 6e 5d 20 3d 20 53 51 4c 69 74 65 43 6f  sion] = SQLiteCo
c8d0: 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f 4e 75  nvert.DbTypeToNu
c8e0: 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e 28 74  mericPrecision(t
c8f0: 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  yp);..          
c900: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
c910: 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53  eColumn.NumericS
c920: 63 61 6c 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f  cale] = SQLiteCo
c930: 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f 4e 75  nvert.DbTypeToNu
c940: 6d 65 72 69 63 53 63 61 6c 65 28 74 79 70 29 3b  mericScale(typ);
c950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 6f  ..            ro
c960: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
c970: 75 6d 6e 2e 50 72 6f 76 69 64 65 72 54 79 70 65  umn.ProviderType
c980: 5d 20 3d 20 73 71 6c 54 79 70 65 2e 54 79 70 65  ] = sqlType.Type
c990: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
c9a0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
c9b0: 6c 75 6d 6e 2e 49 73 4c 6f 6e 67 5d 20 3d 20 66  lumn.IsLong] = f
c9c0: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
c9d0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
c9e0: 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42  leColumn.AllowDB
c9f0: 4e 75 6c 6c 5d 20 3d 20 74 72 75 65 3b 0d 0a 20  Null] = true;.. 
ca00: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
ca10: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
ca20: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f  alColumn.IsReadO
ca30: 6e 6c 79 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  nly] = false;.. 
ca40: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
ca50: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
ca60: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56 65  alColumn.IsRowVe
ca70: 72 73 69 6f 6e 5d 20 3d 20 66 61 6c 73 65 3b 0d  rsion] = false;.
ca80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77  .            row
ca90: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
caa0: 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 20 3d 20 66  mn.IsUnique] = f
cab0: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
cac0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
cad0: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20  leColumn.IsKey] 
cae0: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
caf0: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
cb00: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
cb10: 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d  umn.IsAutoIncrem
cb20: 65 6e 74 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  ent] = false;.. 
cb30: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
cb40: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
cb50: 2e 44 61 74 61 54 79 70 65 5d 20 3d 20 47 65 74  .DataType] = Get
cb60: 46 69 65 6c 64 54 79 70 65 28 6e 29 3b 0d 0a 20  FieldType(n);.. 
cb70: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
cb80: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
cb90: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 48 69 64 64 65  alColumn.IsHidde
cba0: 6e 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  n] = false;..   
cbb0: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
cbc0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
cbd0: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 5d 20 3d  aseSchemaName] =
cbe0: 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65   _baseSchemaName
cbf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
cc00: 20 73 74 72 43 6f 6c 75 6d 6e 20 3d 20 63 6f 6c   strColumn = col
cc10: 75 6d 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 43  umnToParent[n].C
cc20: 6f 6c 75 6d 6e 4e 61 6d 65 3b 0d 0a 20 20 20 20  olumnName;..    
cc30: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
cc40: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
cc50: 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66  (strColumn) == f
cc60: 61 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d 61  alse) row[Schema
cc70: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
cc80: 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20 3d 20 73 74  ColumnName] = st
cc90: 72 43 6f 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20 20 20  rColumn;....    
cca0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
ccb0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
ccc0: 45 78 70 72 65 73 73 69 6f 6e 5d 20 3d 20 53 74  Expression] = St
ccd0: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
cce0: 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29 3b 0d 0a  ty(strColumn);..
ccf0: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
cd00: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
cd10: 6e 2e 49 73 41 6c 69 61 73 65 64 5d 20 3d 20 28  n.IsAliased] = (
cd20: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47  String.Compare(G
cd30: 65 74 4e 61 6d 65 28 6e 29 2c 20 73 74 72 43 6f  etName(n), strCo
cd40: 6c 75 6d 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70  lumn, StringComp
cd50: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
cd60: 6e 6f 72 65 43 61 73 65 29 20 21 3d 20 30 29 3b  noreCase) != 0);
cd70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cd80: 74 65 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50  temp = columnToP
cd90: 61 72 65 6e 74 5b 6e 5d 2e 54 61 62 6c 65 4e 61  arent[n].TableNa
cda0: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
cdb0: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
cdc0: 6c 6c 4f 72 45 6d 70 74 79 28 74 65 6d 70 29 20  llOrEmpty(temp) 
cdd0: 3d 3d 20 66 61 6c 73 65 29 20 72 6f 77 5b 53 63  == false) row[Sc
cde0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
cdf0: 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 20 3d  BaseTableName] =
ce00: 20 74 65 6d 70 3b 0d 0a 0d 0a 20 20 20 20 20 20   temp;....      
ce10: 20 20 20 20 20 20 74 65 6d 70 20 3d 20 63 6f 6c        temp = col
ce20: 75 6d 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 44  umnToParent[n].D
ce30: 61 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20 20  atabaseName;..  
ce40: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
ce50: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
ce60: 74 79 28 74 65 6d 70 29 20 3d 3d 20 66 61 6c 73  ty(temp) == fals
ce70: 65 29 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  e) row[SchemaTab
ce80: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
ce90: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
cea0: 5d 20 3d 20 74 65 6d 70 3b 0d 0a 0d 0a 20 20 20  ] = temp;....   
ceb0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
cec0: 64 61 74 61 54 79 70 65 20 3d 20 6e 75 6c 6c 3b  dataType = null;
ced0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
cee0: 20 49 66 20 77 65 20 68 61 76 65 20 61 20 74 61   If we have a ta
cef0: 62 6c 65 2d 62 6f 75 6e 64 20 63 6f 6c 75 6d 6e  ble-bound column
cf00: 2c 20 65 78 74 72 61 63 74 20 74 68 65 20 65 78  , extract the ex
cf10: 74 72 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  tra information 
cf20: 66 72 6f 6d 20 69 74 0d 0a 20 20 20 20 20 20 20  from it..       
cf30: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
cf40: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74  IsNullOrEmpty(st
cf50: 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20 66 61 6c 73  rColumn) == fals
cf60: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
cf70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
cf80: 20 20 20 73 74 72 69 6e 67 20 62 61 73 65 43 61     string baseCa
cf90: 74 61 6c 6f 67 4e 61 6d 65 20 3d 20 53 74 72 69  talogName = Stri
cfa0: 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20  ng.Empty;....   
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
cfc0: 28 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  (row[SchemaTable
cfd0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42  OptionalColumn.B
cfe0: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20  aseCatalogName] 
cff0: 21 3d 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 29  != DBNull.Value)
d000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d010: 20 20 20 20 20 20 62 61 73 65 43 61 74 61 6c 6f        baseCatalo
d020: 67 4e 61 6d 65 20 3d 20 28 73 74 72 69 6e 67 29  gName = (string)
d030: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
d040: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61  ptionalColumn.Ba
d050: 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 3b 0d  seCatalogName];.
d060: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d070: 20 20 20 73 74 72 69 6e 67 20 62 61 73 65 54 61     string baseTa
d080: 62 6c 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67  bleName = String
d090: 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20  .Empty;....     
d0a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
d0b0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
d0c0: 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61  lumn.BaseTableNa
d0d0: 6d 65 5d 20 21 3d 20 44 42 4e 75 6c 6c 2e 56 61  me] != DBNull.Va
d0e0: 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  lue)..          
d0f0: 20 20 20 20 20 20 20 20 20 20 62 61 73 65 54 61            baseTa
d100: 62 6c 65 4e 61 6d 65 20 3d 20 28 73 74 72 69 6e  bleName = (strin
d110: 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  g)row[SchemaTabl
d120: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c  eColumn.BaseTabl
d130: 65 4e 61 6d 65 5d 3b 0d 0a 0d 0a 20 20 20 20 20  eName];....     
d140: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
d150: 71 6c 2e 44 6f 65 73 54 61 62 6c 65 45 78 69 73  ql.DoesTableExis
d160: 74 28 62 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d  t(baseCatalogNam
d170: 65 2c 20 62 61 73 65 54 61 62 6c 65 4e 61 6d 65  e, baseTableName
d180: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
d190: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d1a0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
d1b0: 67 20 62 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65  g baseColumnName
d1c0: 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b   = String.Empty;
d1d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d1e0: 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 77 5b          if (row[
d1f0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
d200: 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65  n.BaseColumnName
d210: 5d 20 21 3d 20 44 42 4e 75 6c 6c 2e 56 61 6c 75  ] != DBNull.Valu
d220: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d230: 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73 65              base
d240: 43 6f 6c 75 6d 6e 4e 61 6d 65 20 3d 20 28 73 74  ColumnName = (st
d250: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
d260: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  ableColumn.BaseC
d270: 6f 6c 75 6d 6e 4e 61 6d 65 5d 3b 0d 0a 0d 0a 20  olumnName];.... 
d280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d290: 20 20 20 73 74 72 69 6e 67 20 63 6f 6c 6c 53 65     string collSe
d2a0: 71 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  q = null;..     
d2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
d2c0: 6f 6f 6c 20 62 4e 6f 74 4e 75 6c 6c 20 3d 20 66  ool bNotNull = f
d2d0: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
d2e0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
d2f0: 62 50 72 69 6d 61 72 79 4b 65 79 20 3d 20 66 61  bPrimaryKey = fa
d300: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
d310: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 62            bool b
d320: 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20  AutoIncrement = 
d330: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
d340: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
d350: 6e 67 5b 5d 20 61 72 53 69 7a 65 3b 0d 0a 0d 0a  ng[] arSize;....
d360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d370: 20 20 20 20 2f 2f 20 47 65 74 20 74 68 65 20 63      // Get the c
d380: 6f 6c 75 6d 6e 20 6d 65 74 61 20 64 61 74 61 0d  olumn meta data.
d390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d3a0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f       _command.Co
d3b0: 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2e 43 6f  nnection._sql.Co
d3c0: 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 0d 0a 20  lumnMetaData(.. 
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3e0: 20 20 20 20 20 20 20 62 61 73 65 43 61 74 61 6c         baseCatal
d3f0: 6f 67 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ogName,..       
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d410: 20 62 61 73 65 54 61 62 6c 65 4e 61 6d 65 2c 0d   baseTableName,.
d420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d430: 20 20 20 20 20 20 20 20 20 73 74 72 43 6f 6c 75           strColu
d440: 6d 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mn,..           
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 75               tru
d460: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
d470: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
d480: 64 61 74 61 54 79 70 65 2c 20 72 65 66 20 63 6f  dataType, ref co
d490: 6c 6c 53 65 71 2c 20 72 65 66 20 62 4e 6f 74 4e  llSeq, ref bNotN
d4a0: 75 6c 6c 2c 20 72 65 66 20 62 50 72 69 6d 61 72  ull, ref bPrimar
d4b0: 79 4b 65 79 2c 20 72 65 66 20 62 41 75 74 6f 49  yKey, ref bAutoI
d4c0: 6e 63 72 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20  ncrement);....  
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4e0: 20 20 69 66 20 28 62 4e 6f 74 4e 75 6c 6c 20 7c    if (bNotNull |
d4f0: 7c 20 62 50 72 69 6d 61 72 79 4b 65 79 29 20 72  | bPrimaryKey) r
d500: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
d510: 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c  lumn.AllowDBNull
d520: 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  ] = false;..    
d530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d540: 62 6f 6f 6c 20 61 6c 6c 6f 77 44 62 4e 75 6c 6c  bool allowDbNull
d550: 20 3d 20 28 62 6f 6f 6c 29 72 6f 77 5b 53 63 68   = (bool)row[Sch
d560: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41  emaTableColumn.A
d570: 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 3b 0d 0a 0d 0a  llowDBNull];....
d580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d590: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
d5a0: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d  bleColumn.IsKey]
d5b0: 20 3d 20 62 50 72 69 6d 61 72 79 4b 65 79 20 26   = bPrimaryKey &
d5c0: 26 20 43 6f 75 6e 74 50 61 72 65 6e 74 73 28 70  & CountParents(p
d5d0: 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 29 20  arentToColumns) 
d5e0: 3c 3d 20 31 3b 0d 0a 20 20 20 20 20 20 20 20 20  <= 1;..         
d5f0: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
d600: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
d610: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49  alColumn.IsAutoI
d620: 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 62 41 75 74  ncrement] = bAut
d630: 6f 49 6e 63 72 65 6d 65 6e 74 3b 0d 0a 20 20 20  oIncrement;..   
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d650: 20 72 6f 77 5b 22 43 6f 6c 6c 61 74 69 6f 6e 54   row["CollationT
d660: 79 70 65 22 5d 20 3d 20 63 6f 6c 6c 53 65 71 3b  ype"] = collSeq;
d670: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d680: 20 20 20 20 20 20 20 20 2f 2f 20 46 6f 72 20 74          // For t
d690: 79 70 65 73 20 6c 69 6b 65 20 76 61 72 63 68 61  ypes like varcha
d6a0: 72 28 35 30 29 20 61 6e 64 20 73 75 63 68 2c 20  r(50) and such, 
d6b0: 65 78 74 72 61 63 74 20 74 68 65 20 73 69 7a 65  extract the size
d6c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d6d0: 20 20 20 20 20 20 61 72 53 69 7a 65 20 3d 20 64        arSize = d
d6e0: 61 74 61 54 79 70 65 2e 53 70 6c 69 74 28 27 28  ataType.Split('(
d6f0: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ');..           
d700: 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 53           if (arS
d710: 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d  ize.Length > 1).
d720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d730: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d750: 64 61 74 61 54 79 70 65 20 3d 20 61 72 53 69 7a  dataType = arSiz
d760: 65 5b 30 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20  e[0];..         
d770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
d780: 72 53 69 7a 65 20 3d 20 61 72 53 69 7a 65 5b 31  rSize = arSize[1
d790: 5d 2e 53 70 6c 69 74 28 27 29 27 29 3b 0d 0a 20  ].Split(')');.. 
d7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7b0: 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a         if (arSiz
d7c0: 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0d 0a 20  e.Length > 1).. 
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d800: 20 20 20 20 20 20 61 72 53 69 7a 65 20 3d 20 61        arSize = a
d810: 72 53 69 7a 65 5b 30 5d 2e 53 70 6c 69 74 28 27  rSize[0].Split('
d820: 2c 27 2c 20 27 2e 27 29 3b 0d 0a 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 20 20 20 20 20 69 66 20 28 73 71 6c 54 79         if (sqlTy
d850: 70 65 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70  pe.Type == DbTyp
d860: 65 2e 42 69 6e 61 72 79 20 7c 7c 20 53 51 4c 69  e.Binary || SQLi
d870: 74 65 43 6f 6e 76 65 72 74 2e 49 73 53 74 72 69  teConvert.IsStri
d880: 6e 67 44 62 54 79 70 65 28 73 71 6c 54 79 70 65  ngDbType(sqlType
d890: 2e 54 79 70 65 29 29 0d 0a 20 20 20 20 20 20 20  .Type))..       
d8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8d0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
d8e0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f  maTableColumn.Co
d8f0: 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20 43 6f 6e 76  lumnSize] = Conv
d900: 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53 69  ert.ToInt32(arSi
d910: 7a 65 5b 30 5d 2c 20 43 75 6c 74 75 72 65 49 6e  ze[0], CultureIn
d920: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
d930: 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ure);..         
d940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d950: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
d960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d970: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
d980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d990: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9b0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
d9c0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
d9d0: 65 72 69 63 50 72 65 63 69 73 69 6f 6e 5d 20 3d  ericPrecision] =
d9e0: 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32   Convert.ToInt32
d9f0: 28 61 72 53 69 7a 65 5b 30 5d 2c 20 43 75 6c 74  (arSize[0], Cult
da00: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
da10: 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20  tCulture);..    
da20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
da40: 61 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20  arSize.Length > 
da50: 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
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 72 6f 77 5b 53 63 68 65          row[Sche
da80: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75  maTableColumn.Nu
da90: 6d 65 72 69 63 53 63 61 6c 65 5d 20 3d 20 43 6f  mericScale] = Co
daa0: 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72  nvert.ToInt32(ar
dab0: 53 69 7a 65 5b 31 5d 2c 20 43 75 6c 74 75 72 65  Size[1], Culture
dac0: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
dad0: 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20  lture);..       
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
daf0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db10: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
db20: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
db30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db40: 69 66 20 28 77 61 6e 74 44 65 66 61 75 6c 74 56  if (wantDefaultV
db50: 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20  alue)..         
db60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
db70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db80: 20 20 20 20 20 20 2f 2f 20 44 65 74 65 72 6d 69        // Determi
db90: 6e 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  ne the default v
dba0: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c  alue for the col
dbb0: 75 6d 6e 2c 20 77 68 69 63 68 20 73 75 63 6b 73  umn, which sucks
dbc0: 20 62 65 63 61 75 73 65 20 77 65 20 68 61 76 65   because we have
dbd0: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 73 63   to query the sc
dbe0: 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 63 6f  hema for each co
dbf0: 6c 75 6d 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  lumn..          
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
dc10: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
dc20: 6e 64 20 63 6d 64 54 61 62 6c 65 20 3d 20 6e 65  nd cmdTable = ne
dc30: 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28  w SQLiteCommand(
dc40: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
dc50: 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75  ringFormat(Cultu
dc60: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
dc70: 43 75 6c 74 75 72 65 2c 20 22 50 52 41 47 4d 41  Culture, "PRAGMA
dc80: 20 5b 7b 30 7d 5d 2e 54 41 42 4c 45 5f 49 4e 46   [{0}].TABLE_INF
dc90: 4f 28 5b 7b 31 7d 5d 29 22 2c 0d 0a 20 20 20 20  O([{1}])",..    
dca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcb0: 20 20 20 20 20 20 20 20 62 61 73 65 43 61 74 61          baseCata
dcc0: 6c 6f 67 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  logName,..      
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 20 20 20 20 20 20 62 61 73 65 54 61 62 6c 65 4e        baseTableN
dcf0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 2c 20               ), 
dd10: 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74  _command.Connect
dd20: 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ion))..         
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
dd40: 73 69 6e 67 20 28 44 62 44 61 74 61 52 65 61 64  sing (DbDataRead
dd50: 65 72 20 72 64 54 61 62 6c 65 20 3d 20 63 6d 64  er rdTable = cmd
dd60: 54 61 62 6c 65 2e 45 78 65 63 75 74 65 52 65 61  Table.ExecuteRea
dd70: 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20  der())..        
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ddb0: 2f 20 46 69 6e 64 20 74 68 65 20 6d 61 74 63 68  / Find the match
ddc0: 69 6e 67 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20  ing column..    
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 77 68 69 6c 65 20 28 72          while (r
ddf0: 64 54 61 62 6c 65 2e 52 65 61 64 28 29 29 0d 0a  dTable.Read())..
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
de40: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
de50: 65 28 62 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65  e(baseColumnName
de60: 2c 20 72 64 54 61 62 6c 65 2e 47 65 74 53 74 72  , rdTable.GetStr
de70: 69 6e 67 28 31 29 2c 20 53 74 72 69 6e 67 43 6f  ing(1), StringCo
de80: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
de90: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
dea0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dec0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ded0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dee0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 64            if (rd
def0: 54 61 62 6c 65 2e 49 73 44 42 4e 75 6c 6c 28 34  Table.IsDBNull(4
df00: 29 20 3d 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20  ) == false)..   
df10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df30: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
df40: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
df50: 6d 6e 2e 44 65 66 61 75 6c 74 56 61 6c 75 65 5d  mn.DefaultValue]
df60: 20 3d 20 72 64 54 61 62 6c 65 5b 34 5d 3b 0d 0a   = rdTable[4];..
df70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df90: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
dfc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
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 7d 0d 0a 20 20 20 20 20          }..     
e000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
e010: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e020: 20 20 20 20 20 20 20 20 2f 2f 20 44 65 74 65 72          // Deter
e030: 6d 69 6e 65 20 49 73 55 6e 69 71 75 65 20 70 72  mine IsUnique pr
e040: 6f 70 65 72 6c 79 2c 20 77 68 69 63 68 20 69 73  operly, which is
e050: 20 61 20 70 61 69 6e 20 69 6e 20 74 68 65 20 62   a pain in the b
e060: 75 74 74 21 0d 0a 20 20 20 20 20 20 20 20 20 20  utt!..          
e070: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77 61            if (wa
e080: 6e 74 55 6e 69 71 75 65 49 6e 66 6f 29 0d 0a 20  ntUniqueInfo).. 
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e0c0: 20 28 62 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d   (baseCatalogNam
e0d0: 65 20 21 3d 20 73 74 72 43 61 74 61 6c 6f 67 20  e != strCatalog 
e0e0: 7c 7c 20 62 61 73 65 54 61 62 6c 65 4e 61 6d 65  || baseTableName
e0f0: 20 21 3d 20 73 74 72 54 61 62 6c 65 29 0d 0a 20   != strTable).. 
e100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e110: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e130: 20 20 20 20 20 20 73 74 72 43 61 74 61 6c 6f 67        strCatalog
e140: 20 3d 20 62 61 73 65 43 61 74 61 6c 6f 67 4e 61   = baseCatalogNa
e150: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
e160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e170: 20 73 74 72 54 61 62 6c 65 20 3d 20 62 61 73 65   strTable = base
e180: 54 61 62 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  TableName;....  
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1a0: 20 20 20 20 20 20 20 20 20 20 74 62 6c 49 6e 64            tblInd
e1b0: 65 78 65 73 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  exes = _command.
e1c0: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53 63  Connection.GetSc
e1d0: 68 65 6d 61 28 22 49 6e 64 65 78 65 73 22 2c 20  hema("Indexes", 
e1e0: 6e 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b 0d 0a  new string[] {..
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e210: 62 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 2c  baseCatalogName,
e220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e240: 20 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20    null,..       
e250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e260: 20 20 20 20 20 20 20 20 20 62 61 73 65 54 61 62           baseTab
e270: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
e280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e290: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 0d 0a 20           null.. 
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2b0: 20 20 20 20 20 20 20 20 20 20 20 7d 29 3b 0d 0a             });..
e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2f0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 44 61       foreach (Da
e300: 74 61 52 6f 77 20 72 6f 77 49 6e 64 65 78 65 73  taRow rowIndexes
e310: 20 69 6e 20 74 62 6c 49 6e 64 65 78 65 73 2e 52   in tblIndexes.R
e320: 6f 77 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ows)..          
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
e340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e350: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 62 6c               tbl
e360: 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 20 3d 20 5f  IndexColumns = _
e370: 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69  command.Connecti
e380: 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28 22 49 6e  on.GetSchema("In
e390: 64 65 78 43 6f 6c 75 6d 6e 73 22 2c 20 6e 65 77  dexColumns", new
e3a0: 20 73 74 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20   string[] {..   
e3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73               bas
e3d0: 65 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 0d 0a 20  eCatalogName,.. 
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
e400: 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
e410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e420: 20 20 20 20 20 20 62 61 73 65 54 61 62 6c 65 4e        baseTableN
e430: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
e440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e450: 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f        (string)ro
e460: 77 49 6e 64 65 78 65 73 5b 22 49 4e 44 45 58 5f  wIndexes["INDEX_
e470: 4e 41 4d 45 22 5d 2c 0d 0a 20 20 20 20 20 20 20  NAME"],..       
e480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e490: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 0d 0a 20           null.. 
e4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4b0: 20 20 20 20 20 20 20 20 20 20 20 7d 29 3b 0d 0a             });..
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
e4e0: 61 63 68 20 28 44 61 74 61 52 6f 77 20 72 6f 77  ach (DataRow row
e4f0: 43 6f 6c 75 6d 6e 49 6e 64 65 78 20 69 6e 20 74  ColumnIndex in t
e500: 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 2e 52  blIndexColumns.R
e510: 6f 77 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ows)..          
e520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e530: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e550: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
e560: 43 6f 6d 70 61 72 65 28 53 51 4c 69 74 65 43 6f  Compare(SQLiteCo
e570: 6e 76 65 72 74 2e 47 65 74 53 74 72 69 6e 67 4f  nvert.GetStringO
e580: 72 4e 75 6c 6c 28 72 6f 77 43 6f 6c 75 6d 6e 49  rNull(rowColumnI
e590: 6e 64 65 78 5b 22 43 4f 4c 55 4d 4e 5f 4e 41 4d  ndex["COLUMN_NAM
e5a0: 45 22 5d 29 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c  E"]), strColumn,
e5b0: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
e5c0: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
e5d0: 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20  ase) == 0)..    
e5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e620: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e640: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55             // BU
e650: 47 46 49 58 3a 20 4d 61 6b 65 20 73 75 72 65 20  GFIX: Make sure 
e660: 74 68 61 74 20 77 65 20 6f 6e 6c 79 20 66 6c 61  that we only fla
e670: 67 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 61 73  g this column as
e680: 20 22 75 6e 69 71 75 65 22 0d 0a 20 20 20 20 20   "unique"..     
e690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e6b0: 2f 20 20 20 20 20 20 20 20 20 69 66 20 77 65 20  /         if we 
e6c0: 61 72 65 20 6e 6f 74 20 70 72 6f 63 65 73 73 69  are not processi
e6d0: 6e 67 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 20  ng of some kind 
e6e0: 6f 66 20 6d 75 6c 74 69 2d 74 61 62 6c 65 0d 0a  of multi-table..
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e710: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 63      //         c
e720: 6f 6e 73 74 72 75 63 74 20 28 69 2e 65 2e 20 61  onstruct (i.e. a
e730: 20 6a 6f 69 6e 29 20 62 65 63 61 75 73 65 20 69   join) because i
e740: 6e 20 74 68 61 74 20 63 61 73 65 20 77 65 20 6d  n that case we m
e750: 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ust..           
e760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e770: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
e780: 20 20 20 20 61 6c 6c 6f 77 20 64 75 70 6c 69 63      allow duplic
e790: 61 74 65 20 76 61 6c 75 65 73 20 28 72 65 66 65  ate values (refe
e7a0: 72 20 74 6f 20 74 69 63 6b 65 74 20 5b 37 65 33  r to ticket [7e3
e7b0: 66 61 39 33 37 34 34 5d 29 2e 0d 0a 20 20 20 20  fa93744])...    
e7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7e0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
e7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e800: 20 20 20 20 20 20 20 20 69 66 20 28 70 61 72 65          if (pare
e810: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e  ntToColumns.Coun
e820: 74 20 3d 3d 20 31 20 26 26 20 74 62 6c 49 6e 64  t == 1 && tblInd
e830: 65 78 43 6f 6c 75 6d 6e 73 2e 52 6f 77 73 2e 43  exColumns.Rows.C
e840: 6f 75 6e 74 20 3d 3d 20 31 20 26 26 20 61 6c 6c  ount == 1 && all
e850: 6f 77 44 62 4e 75 6c 6c 20 3d 3d 20 66 61 6c 73  owDbNull == fals
e860: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
e870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e880: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
e890: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
e8a0: 6e 2e 49 73 55 6e 69 71 75 65 5d 20 3d 20 72 6f  n.IsUnique] = ro
e8b0: 77 49 6e 64 65 78 65 73 5b 22 55 4e 49 51 55 45  wIndexes["UNIQUE
e8c0: 22 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  "];....         
e8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66             // If
e8f0: 20 69 74 73 20 61 6e 20 69 6e 74 65 67 65 72 20   its an integer 
e900: 70 72 69 6d 61 72 79 20 6b 65 79 20 61 6e 64 20  primary key and 
e910: 74 68 65 20 6f 6e 6c 79 20 70 72 69 6d 61 72 79  the only primary
e920: 20 6b 65 79 20 69 6e 20 74 68 65 20 74 61 62 6c   key in the tabl
e930: 65 2c 20 74 68 65 6e 20 69 74 73 20 61 20 72 6f  e, then its a ro
e940: 77 69 64 20 61 6c 69 61 73 20 61 6e 64 20 69 73  wid alias and is
e950: 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0d 0a   autoincrement..
e960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e980: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 20 43 75      // NOTE:  Cu
e990: 72 72 65 6e 74 6c 79 20 63 6f 6d 6d 65 6e 74 65  rrently commente
e9a0: 64 20 6f 75 74 20 62 65 63 61 75 73 65 20 74 68  d out because th
e9b0: 69 73 20 69 73 20 6e 6f 74 20 61 6c 77 61 79 73  is is not always
e9c0: 20 74 68 65 20 64 65 73 69 72 65 64 20 62 65 68   the desired beh
e9d0: 61 76 69 6f 72 2e 20 20 46 6f 72 20 65 78 61 6d  avior.  For exam
e9e0: 70 6c 65 2c 20 61 20 31 3a 31 20 72 65 6c 61 74  ple, a 1:1 relat
e9f0: 69 6f 6e 73 68 69 70 20 77 69 74 68 0d 0a 20 20  ionship with..  
ea00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea20: 20 20 2f 2f 20 20 20 20 20 20 20 20 61 6e 6f 74    //        anot
ea30: 68 65 72 20 74 61 62 6c 65 2c 20 77 68 65 72 65  her table, where
ea40: 20 74 68 65 20 6f 74 68 65 72 20 74 61 62 6c 65   the other table
ea50: 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
ea60: 74 2c 20 62 75 74 20 74 68 69 73 20 6f 6e 65 20  t, but this one 
ea70: 69 73 20 6e 6f 74 2c 20 61 6e 64 20 75 73 65 73  is not, and uses
ea80: 20 74 68 65 20 72 6f 77 69 64 20 66 72 6f 6d 20   the rowid from 
ea90: 74 68 65 20 6f 74 68 65 72 2e 0d 0a 20 20 20 20  the other...    
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eac0: 2f 2f 20 20 20 20 20 20 20 20 49 74 20 69 73 20  //        It is 
ead0: 73 61 66 65 72 20 74 6f 20 6f 6e 6c 79 20 73 65  safer to only se
eae0: 74 20 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  t Autoincrement 
eaf0: 6f 6e 20 74 61 62 6c 65 73 20 77 68 65 72 65 20  on tables where 
eb00: 77 65 27 72 65 20 53 55 52 45 20 74 68 65 20 75  we're SURE the u
eb10: 73 65 72 20 73 70 65 63 69 66 69 65 64 20 41 55  ser specified AU
eb20: 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 65 76 65  TOINCREMENT, eve
eb30: 6e 20 69 66 20 69 74 73 20 61 20 72 6f 77 69 64  n if its a rowid
eb40: 20 63 6f 6c 75 6d 6e 2e 0d 0a 0d 0a 20 20 20 20   column.....    
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb70: 2f 2f 69 66 20 28 74 62 6c 49 6e 64 65 78 43 6f  //if (tblIndexCo
eb80: 6c 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74  lumns.Rows.Count
eb90: 20 3d 3d 20 31 20 26 26 20 28 62 6f 6f 6c 29 72   == 1 && (bool)r
eba0: 6f 77 49 6e 64 65 78 65 73 5b 22 50 52 49 4d 41  owIndexes["PRIMA
ebb0: 52 59 5f 4b 45 59 22 5d 20 3d 3d 20 74 72 75 65  RY_KEY"] == true
ebc0: 20 26 26 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c   && String.IsNul
ebd0: 6c 4f 72 45 6d 70 74 79 28 64 61 74 61 54 79 70  lOrEmpty(dataTyp
ebe0: 65 29 20 3d 3d 20 66 61 6c 73 65 20 26 26 0d 0a  e) == false &&..
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec10: 20 20 20 20 2f 2f 20 20 53 74 72 69 6e 67 2e 43      //  String.C
ec20: 6f 6d 70 61 72 65 28 64 61 74 61 54 79 70 65 2c  ompare(dataType,
ec30: 20 22 69 6e 74 65 67 65 72 22 2c 20 53 74 72 69   "integer", Stri
ec40: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
ec50: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
ec60: 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
ec70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a             //{..
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecb0: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 20 72 6f      //    //  ro
ecc0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
ecd0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75  ionalColumn.IsAu
ece0: 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 74  toIncrement] = t
ecf0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
ed00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed10: 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d            //}...
ed20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ed30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed40: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
ed70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
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 7d 0d 0a 20 20 20 20 20 20         }..      
edb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
edc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
edd0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ede0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
edf0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
ee00: 61 74 61 54 79 70 65 29 29 0d 0a 20 20 20 20 20  ataType))..     
ee10: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ee20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee30: 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61    TypeAffinity a
ee40: 66 66 69 6e 20 3d 20 54 79 70 65 41 66 66 69 6e  ffin = TypeAffin
ee50: 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65  ity.Uninitialize
ee60: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
ee70: 20 20 20 20 20 20 20 20 64 61 74 61 54 79 70 65          dataType
ee80: 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d   = _activeStatem
ee90: 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54  ent._sql.ColumnT
eea0: 79 70 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ype(_activeState
eeb0: 6d 65 6e 74 2c 20 6e 2c 20 72 65 66 20 61 66 66  ment, n, ref aff
eec0: 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
eed0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
eee0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
eef0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
ef00: 70 74 79 28 64 61 74 61 54 79 70 65 29 20 3d 3d  pty(dataType) ==
ef10: 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 20   false)..       
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
ef30: 5b 22 44 61 74 61 54 79 70 65 4e 61 6d 65 22 5d  ["DataTypeName"]
ef40: 20 3d 20 64 61 74 61 54 79 70 65 3b 0d 0a 20 20   = dataType;..  
ef50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
ef60: 20 20 20 20 20 20 20 20 20 20 20 74 62 6c 2e 52             tbl.R
ef70: 6f 77 73 2e 41 64 64 28 72 6f 77 29 3b 0d 0a 20  ows.Add(row);.. 
ef80: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ef90: 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f      if (_keyInfo
efa0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
efb0: 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e         _keyInfo.
efc0: 41 70 70 65 6e 64 53 63 68 65 6d 61 54 61 62 6c  AppendSchemaTabl
efd0: 65 28 74 62 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20  e(tbl);....     
efe0: 20 20 20 74 62 6c 2e 41 63 63 65 70 74 43 68 61     tbl.AcceptCha
eff0: 6e 67 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  nges();..       
f000: 20 74 62 6c 2e 45 6e 64 4c 6f 61 64 44 61 74 61   tbl.EndLoadData
f010: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ();....        r
f020: 65 74 75 72 6e 20 74 62 6c 3b 0d 0a 20 20 20 20  eturn tbl;..    
f030: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
f040: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
f050: 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f  Retrieves the co
f060: 6c 75 6d 6e 20 61 73 20 61 20 73 74 72 69 6e 67  lumn as a string
f070: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
f080: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
f090: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
f0a0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
f0b0: 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  olumn.</param>..
f0c0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
f0d0: 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73  >string</returns
f0e0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
f0f0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
f100: 74 53 74 72 69 6e 67 28 69 6e 74 20 69 29 0d 0a  tString(int i)..
f110: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
f120: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
f130: 0a 20 20 20 20 20 20 20 20 56 65 72 69 66 79 46  .        VerifyF
f140: 6f 72 47 65 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  orGet();....    
f150: 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
f160: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
f170: 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
f180: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
f190: 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c 69  llbacks) == SQLi
f1a0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
f1b0: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52  s.UseConnectionR
f1c0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
f1d0: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
f1e0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
f1f0: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
f200: 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51 4c   value = new SQL
f210: 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c  iteDataReaderVal
f220: 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ue();..         
f230: 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65     bool complete
f240: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f250: 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75 65   InvokeReadValue
f260: 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77 20  Callback(i, new 
f270: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45  SQLiteReadValueE
f280: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
f290: 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 53             "GetS
f2a0: 74 72 69 6e 67 22 2c 20 6e 75 6c 6c 2c 20 76 61  tring", null, va
f2b0: 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65  lue), out comple
f2c0: 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
f2d0: 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65      if (complete
f2e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
f2f0: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e     return value.
f300: 53 74 72 69 6e 67 56 61 6c 75 65 3b 0d 0a 20 20  StringValue;..  
f310: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f320: 20 20 20 69 66 20 28 69 20 3e 3d 20 50 72 69 76     if (i >= Priv
f330: 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c 64 43  ateVisibleFieldC
f340: 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f  ount && _keyInfo
f350: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
f360: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
f370: 65 79 49 6e 66 6f 2e 47 65 74 53 74 72 69 6e 67  eyInfo.GetString
f380: 28 69 20 2d 20 50 72 69 76 61 74 65 56 69 73 69  (i - PrivateVisi
f390: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0d  bleFieldCount);.
f3a0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
f3b0: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
f3c0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e  onnectionFlags.N
f3d0: 6f 56 65 72 69 66 79 54 65 78 74 41 66 66 69 6e  oVerifyTextAffin
f3e0: 69 74 79 29 20 21 3d 20 53 51 4c 69 74 65 43 6f  ity) != SQLiteCo
f3f0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
f400: 56 65 72 69 66 79 54 65 78 74 41 66 66 69 6e 69  VerifyTextAffini
f410: 74 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty)..           
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 28 5f 66 6c 61 67 73       if ((_flags
f5f0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
f600: 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e  ionFlags.UseConn
f610: 65 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43  ectionReadValueC
f620: 61 6c 6c 62 61 63 6b 73 29 20 3d 3d 20 53 51 4c  allbacks) == SQL
f630: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
f640: 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  gs.UseConnection
f650: 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  ReadValueCallbac
f660: 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ks)..        {..
f670: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
f680: 74 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75  teDataReaderValu
f690: 65 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 53 51  e value = new SQ
f6a0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 56 61  LiteDataReaderVa
f6b0: 6c 75 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue();..        
f6c0: 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74      bool complet
f6d0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
f6e0: 20 20 49 6e 76 6f 6b 65 52 65 61 64 56 61 6c 75    InvokeReadValu
f6f0: 65 43 61 6c 6c 62 61 63 6b 28 69 2c 20 6e 65 77  eCallback(i, new
f700: 20 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65   SQLiteReadValue
f710: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
f720: 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74              "Get
f730: 56 61 6c 75 65 22 2c 20 6e 75 6c 6c 2c 20 76 61  Value", null, va
f740: 6c 75 65 29 2c 20 6f 75 74 20 63 6f 6d 70 6c 65  lue), out comple
f750: 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te);....        
f760: 20 20 20 20 69 66 20 28 63 6f 6d 70 6c 65 74 65      if (complete
f770: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
f780: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e     return value.
f790: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
f7a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
f7b0: 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
f7c0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
f7d0: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
f7e0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
f7f0: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
f800: 2e 47 65 74 56 61 6c 75 65 28 69 20 2d 20 50 72  .GetValue(i - Pr
f810: 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
f820: 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
f830: 20 20 20 20 53 51 4c 69 74 65 54 79 70 65 20 74      SQLiteType t
f840: 79 70 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79  yp = GetSQLiteTy
f850: 70 65 28 5f 66 6c 61 67 73 2c 20 69 29 3b 0d 0a  pe(_flags, i);..
f860: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 28  ..        if (((
f870: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
f880: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44  onnectionFlags.D
f890: 65 74 65 63 74 54 65 78 74 41 66 66 69 6e 69 74  etectTextAffinit
f8a0: 79 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  y) == SQLiteConn
f8b0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65  ectionFlags.Dete
f8c0: 63 74 54 65 78 74 41 66 66 69 6e 69 74 79 29 20  ctTextAffinity) 
f8d0: 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
f8e0: 28 28 74 79 70 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ((typ == null) |
f8f0: 7c 20 28 74 79 70 2e 41 66 66 69 6e 69 74 79 20  | (typ.Affinity 
f900: 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  == TypeAffinity.
f910: 54 65 78 74 29 29 29 0d 0a 20 20 20 20 20 20 20  Text)))..       
f920: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f930: 74 79 70 20 3d 20 47 65 74 53 51 4c 69 74 65 54  typ = GetSQLiteT
f940: 79 70 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ype(..          
f950: 20 20 20 20 20 20 74 79 70 2c 20 5f 61 63 74 69        typ, _acti
f960: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
f970: 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65  .GetText(_active
f980: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d  Statement, i));.
f990: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
f9a0: 20 20 20 20 65 6c 73 65 20 69 66 20 28 28 28 5f      else if (((_
f9b0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
f9c0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65  nnectionFlags.De
f9d0: 74 65 63 74 53 74 72 69 6e 67 54 79 70 65 29 20  tectStringType) 
f9e0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
f9f0: 69 6f 6e 46 6c 61 67 73 2e 44 65 74 65 63 74 53  ionFlags.DetectS
fa00: 74 72 69 6e 67 54 79 70 65 29 20 26 26 0d 0a 20  tringType) &&.. 
fa10: 20 20 20 20 20 20 20 20 20 20 20 28 28 74 79 70             ((typ
fa20: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 53 51 4c   == null) || SQL
fa30: 69 74 65 43 6f 6e 76 65 72 74 2e 49 73 53 74 72  iteConvert.IsStr
fa40: 69 6e 67 44 62 54 79 70 65 28 74 79 70 2e 54 79  ingDbType(typ.Ty
fa50: 70 65 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  pe)))..        {
fa60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79  ..            ty
fa70: 70 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70  p = GetSQLiteTyp
fa80: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
fa90: 20 20 20 20 74 79 70 2c 20 5f 61 63 74 69 76 65      typ, _active
faa0: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
fab0: 65 74 54 65 78 74 28 5f 61 63 74 69 76 65 53 74  etText(_activeSt
fac0: 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0d 0a 20  atement, i));.. 
fad0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
fae0: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
faf0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
fb00: 2e 47 65 74 56 61 6c 75 65 28 5f 61 63 74 69 76  .GetValue(_activ
fb10: 65 53 74 61 74 65 6d 65 6e 74 2c 20 5f 66 6c 61  eStatement, _fla
fb20: 67 73 2c 20 69 2c 20 74 79 70 29 3b 0d 0a 20 20  gs, i, typ);..  
fb30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
fb40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
fb50: 2f 20 52 65 74 72 65 69 76 65 73 20 74 68 65 20  / Retreives the 
fb60: 76 61 6c 75 65 73 20 6f 66 20 6d 75 6c 74 69 70  values of multip
fb70: 6c 65 20 63 6f 6c 75 6d 6e 73 2c 20 75 70 20 74  le columns, up t
fb80: 6f 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  o the size of th
fb90: 65 20 73 75 70 70 6c 69 65 64 20 61 72 72 61 79  e supplied array
fba0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
fbb0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
fbc0: 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65  aram name="value
fbd0: 73 22 3e 54 68 65 20 61 72 72 61 79 20 74 6f 20  s">The array to 
fbe0: 66 69 6c 6c 20 77 69 74 68 20 76 61 6c 75 65 73  fill with values
fbf0: 20 66 72 6f 6d 20 74 68 65 20 63 6f 6c 75 6d 6e   from the column
fc00: 73 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  s in the current
fc10: 20 72 65 73 75 6c 74 73 65 74 3c 2f 70 61 72 61   resultset</para
fc20: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
fc30: 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20  urns>The number 
fc40: 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74 72 69  of columns retri
fc50: 65 76 65 64 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  eved</returns>..
fc60: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
fc70: 69 64 65 20 69 6e 74 20 47 65 74 56 61 6c 75 65  ide int GetValue
fc80: 73 28 6f 62 6a 65 63 74 5b 5d 20 76 61 6c 75 65  s(object[] value
fc90: 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
fca0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
fcb0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  ;....      int n
fcc0: 4d 61 78 20 3d 20 46 69 65 6c 64 43 6f 75 6e 74  Max = FieldCount
fcd0: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 76 61 6c  ;..      if (val
fce0: 75 65 73 2e 4c 65 6e 67 74 68 20 3c 20 6e 4d 61  ues.Length < nMa
fcf0: 78 29 20 6e 4d 61 78 20 3d 20 76 61 6c 75 65 73  x) nMax = values
fd00: 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
fd10: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
fd20: 3b 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29  ; n < nMax; n++)
fd30: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
fd40: 20 20 20 76 61 6c 75 65 73 5b 6e 5d 20 3d 20 47     values[n] = G
fd50: 65 74 56 61 6c 75 65 28 6e 29 3b 0d 0a 20 20 20  etValue(n);..   
fd60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
fd70: 74 75 72 6e 20 6e 4d 61 78 3b 0d 0a 20 20 20 20  turn nMax;..    
fd80: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
fd90: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
fda0: 52 65 74 75 72 6e 73 20 61 20 63 6f 6c 6c 65 63  Returns a collec
fdb0: 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20  tion containing 
fdc0: 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e  all the column n
fdd0: 61 6d 65 73 20 61 6e 64 20 76 61 6c 75 65 73 20  ames and values 
fde0: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
fdf0: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20   current row of 
fe00: 64 61 74 61 20 69 6e 20 74 68 65 20 63 75 72 72  data in the curr
fe10: 65 6e 74 20 72 65 73 75 6c 74 73 65 74 2c 20 69  ent resultset, i
fe20: 66 20 61 6e 79 2e 20 20 49 66 20 74 68 65 72 65  f any.  If there
fe30: 20 69 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20   is no..    /// 
fe40: 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 72 20 6e  current row or n
fe50: 6f 20 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74  o current result
fe60: 73 65 74 2c 20 61 6e 20 65 78 63 65 70 74 69 6f  set, an exceptio
fe70: 6e 20 6d 61 79 20 62 65 20 74 68 72 6f 77 6e 2e  n may be thrown.
fe80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
fe90: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
fea0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
feb0: 20 54 68 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20   The collection 
fec0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 63  containing the c
fed0: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 61 6e 64 20 76  olumn name and v
fee0: 61 6c 75 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  alue information
fef0: 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f   for the..    //
ff00: 2f 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66  / current row of
ff10: 20 64 61 74 61 20 69 6e 20 74 68 65 20 63 75 72   data in the cur
ff20: 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 20 6f  rent resultset o
ff30: 72 20 6e 75 6c 6c 20 69 66 20 74 68 69 73 20 69  r null if this i
ff40: 6e 66 6f 72 6d 61 74 69 6f 6e 0d 0a 20 20 20 20  nformation..    
ff50: 2f 2f 2f 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62  /// cannot be ob
ff60: 74 61 69 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  tained...    ///
ff70: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
ff80: 20 70 75 62 6c 69 63 20 4e 61 6d 65 56 61 6c 75   public NameValu
ff90: 65 43 6f 6c 6c 65 63 74 69 6f 6e 20 47 65 74 56  eCollection GetV
ffa0: 61 6c 75 65 73 28 29 0d 0a 20 20 20 20 7b 0d 0a  alues()..    {..
ffb0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
ffc0: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
ffd0: 20 20 20 20 69 66 20 28 28 5f 61 63 74 69 76 65      if ((_active
ffe0: 53 74 61 74 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c  Statement == nul
fff0: 6c 29 20 7c 7c 20 28 5f 61 63 74 69 76 65 53 74  l) || (_activeSt
10000 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 20 3d 3d 20  atement._sql == 
10010 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
10020 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
10030 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
10040 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20  ception();....  
10050 20 20 20 20 20 20 69 6e 74 20 6e 4d 61 78 20 3d        int nMax =
10060 20 50 72 69 76 61 74 65 56 69 73 69 62 6c 65 46   PrivateVisibleF
10070 69 65 6c 64 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  ieldCount;..    
10080 20 20 20 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c      NameValueCol
10090 6c 65 63 74 69 6f 6e 20 72 65 73 75 6c 74 20 3d  lection result =
100a0 20 6e 65 77 20 4e 61 6d 65 56 61 6c 75 65 43 6f   new NameValueCo
100b0 6c 6c 65 63 74 69 6f 6e 28 6e 4d 61 78 29 3b 0d  llection(nMax);.
100c0 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28  ...        for (
100d0 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 6e  int n = 0; n < n
100e0 4d 61 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20  Max; n++)..     
100f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10100 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20    string name = 
10110 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
10120 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d 65  ._sql.ColumnName
10130 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
10140 74 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  t, n);..        
10150 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65      string value
10160 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d   = _activeStatem
10170 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74  ent._sql.GetText
10180 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
10190 74 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  t, n);....      
101a0 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
101b0 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a  (name, value);..
101c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
101d0 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
101e0 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  lt;..    }....  
101f0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
10200 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
10210 20 54 72 75 65 20 69 66 20 74 68 65 20 72 65 73   True if the res
10220 75 6c 74 73 65 74 20 68 61 73 20 72 6f 77 73 20  ultset has rows 
10230 74 68 61 74 20 63 61 6e 20 62 65 20 66 65 74 63  that can be fetc
10240 68 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  hed..    /// </s
10250 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62  ummary>..    pub
10260 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
10270 6c 20 48 61 73 52 6f 77 73 0d 0a 20 20 20 20 7b  l HasRows..    {
10280 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
10290 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
102a0 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
102b0 20 20 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f          CheckClo
102c0 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
102d0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
102e0 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 73   NOTE: If the "s
102f0 74 69 63 6b 79 22 20 66 6c 61 67 20 68 61 73 20  ticky" flag has 
10300 62 65 65 6e 20 73 65 74 2c 20 75 73 65 20 74 68  been set, use th
10310 65 20 6e 65 77 20 62 65 68 61 76 69 6f 72 2c 0d  e new behavior,.
10320 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
10330 20 20 77 68 69 63 68 20 72 65 74 75 72 6e 73 20    which returns 
10340 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 72  non-zero if ther
10350 65 20 77 65 72 65 20 65 76 65 72 20 61 6e 79 20  e were ever any 
10360 72 6f 77 73 20 69 6e 0d 0a 20 20 20 20 20 20 20  rows in..       
10370 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 61 73   //       the as
10380 73 6f 63 69 61 74 65 64 20 72 65 73 75 6c 74 20  sociated result 
10390 73 65 74 73 2e 20 20 47 65 6e 65 72 61 6c 6c 79  sets.  Generally
103a0 2c 20 74 68 69 73 20 66 6c 61 67 20 69 73 20 6f  , this flag is o
103b0 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  nly..        // 
103c0 20 20 20 20 20 20 75 73 65 66 75 6c 20 77 68 65        useful whe
103d0 6e 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72  n it is necessar
103e0 79 20 74 6f 20 72 65 74 61 69 6e 20 63 6f 6d 70  y to retain comp
103f0 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 0d 0a  atibility with..
10400 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
10410 20 6f 74 68 65 72 20 41 44 4f 2e 4e 45 54 20 70   other ADO.NET p
10420 72 6f 76 69 64 65 72 73 20 74 68 61 74 20 75 73  roviders that us
10430 65 20 74 68 65 73 65 20 73 61 6d 65 20 73 65 6d  e these same sem
10440 61 6e 74 69 63 73 20 66 6f 72 0d 0a 20 20 20 20  antics for..    
10450 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
10460 20 48 61 73 52 6f 77 73 20 70 72 6f 70 65 72 74   HasRows propert
10470 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  y...        //..
10480 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c          if ((_fl
10490 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
104a0 65 63 74 69 6f 6e 46 6c 61 67 73 2e 53 74 69 63  ectionFlags.Stic
104b0 6b 79 48 61 73 52 6f 77 73 29 20 3d 3d 20 53 51  kyHasRows) == SQ
104c0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
104d0 61 67 73 2e 53 74 69 63 6b 79 48 61 73 52 6f 77  ags.StickyHasRow
104e0 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  s)..          re
104f0 74 75 72 6e 20 28 28 5f 72 65 61 64 69 6e 67 53  turn ((_readingS
10500 74 61 74 65 20 21 3d 20 31 29 20 7c 7c 20 28 5f  tate != 1) || (_
10510 73 74 65 70 43 6f 75 6e 74 20 3e 20 30 29 29 3b  stepCount > 0));
10520 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  ....        //..
10530 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
10540 20 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66   This is the def
10550 61 75 6c 74 20 62 65 68 61 76 69 6f 72 2e 20 20  ault behavior.  
10560 49 74 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  It returns non-z
10570 65 72 6f 20 6f 6e 6c 79 20 69 66 0d 0a 20 20 20  ero only if..   
10580 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f       //       mo
10590 72 65 20 72 6f 77 73 20 61 72 65 20 61 76 61 69  re rows are avai
105a0 6c 61 62 6c 65 20 28 69 2e 65 2e 20 61 20 63 61  lable (i.e. a ca
105b0 6c 6c 20 74 6f 20 74 68 65 20 52 65 61 64 20 6d  ll to the Read m
105c0 65 74 68 6f 64 20 69 73 0d 0a 20 20 20 20 20 20  ethod is..      
105d0 20 20 2f 2f 20 20 20 20 20 20 20 65 78 70 65 63    //       expec
105e0 74 65 64 20 74 6f 20 73 75 63 63 65 65 64 29 2e  ted to succeed).
105f0 20 20 50 72 69 6f 72 20 74 6f 20 74 68 65 20 69    Prior to the i
10600 6e 74 72 6f 64 75 63 74 69 6f 6e 20 6f 66 20 74  ntroduction of t
10610 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  he..        //  
10620 20 20 20 20 20 22 73 74 69 63 6b 79 22 20 66 6c       "sticky" fl
10630 61 67 2c 20 74 68 69 73 20 69 73 20 68 6f 77 20  ag, this is how 
10640 74 68 69 73 20 70 72 6f 70 65 72 74 79 20 68 61  this property ha
10650 73 20 61 6c 77 61 79 73 20 77 6f 72 6b 65 64 2e  s always worked.
10660 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
10670 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f 72        return (_r
10680 65 61 64 69 6e 67 53 74 61 74 65 20 21 3d 20 31  eadingState != 1
10690 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
106a0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
106b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
106c0 20 52 65 74 75 72 6e 73 20 54 72 75 65 20 69 66   Returns True if
106d0 20 74 68 65 20 64 61 74 61 20 72 65 61 64 65 72   the data reader
106e0 20 69 73 20 63 6c 6f 73 65 64 0d 0a 20 20 20 20   is closed..    
106f0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
10700 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
10710 69 64 65 20 62 6f 6f 6c 20 49 73 43 6c 6f 73 65  ide bool IsClose
10720 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  d..    {..      
10730 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
10740 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 28 5f  sed(); return (_
10750 63 6f 6d 6d 61 6e 64 20 3d 3d 20 6e 75 6c 6c 29  command == null)
10760 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ; }..    }....  
10770 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
10780 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
10790 20 54 72 75 65 20 69 66 20 74 68 65 20 73 70 65   True if the spe
107a0 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 69 73  cified column is
107b0 20 6e 75 6c 6c 0d 0a 20 20 20 20 2f 2f 2f 20 3c   null..    /// <
107c0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
107d0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
107e0 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
107f0 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
10800 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
10810 74 75 72 6e 73 3e 54 72 75 65 20 6f 72 20 46 61  turns>True or Fa
10820 6c 73 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  lse</returns>.. 
10830 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
10840 64 65 20 62 6f 6f 6c 20 49 73 44 42 4e 75 6c 6c  de bool IsDBNull
10850 28 69 6e 74 20 69 29 0d 0a 20 20 20 20 7b 0d 0a  (int i)..    {..
10860 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
10870 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
10880 20 20 56 65 72 69 66 79 46 6f 72 47 65 74 28 29    VerifyForGet()
10890 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
108a0 28 69 20 3e 3d 20 50 72 69 76 61 74 65 56 69 73  (i >= PrivateVis
108b0 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
108c0 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
108d0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
108e0 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
108f0 2e 49 73 44 42 4e 75 6c 6c 28 69 20 2d 20 50 72  .IsDBNull(i - Pr
10900 69 76 61 74 65 56 69 73 69 62 6c 65 46 69 65 6c  ivateVisibleFiel
10910 64 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  dCount);....    
10920 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
10930 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
10940 2e 49 73 4e 75 6c 6c 28 5f 61 63 74 69 76 65 53  .IsNull(_activeS
10950 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0d 0a 20  tatement, i);.. 
10960 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
10970 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
10980 2f 2f 20 4d 6f 76 65 73 20 74 6f 20 74 68 65 20  // Moves to the 
10990 6e 65 78 74 20 72 65 73 75 6c 74 73 65 74 20 69  next resultset i
109a0 6e 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 2d 72  n multiple row-r
109b0 65 74 75 72 6e 69 6e 67 20 53 51 4c 20 63 6f 6d  eturning SQL com
109c0 6d 61 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mand...    /// <
109d0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
109e0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65  // <returns>True
109f0 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20   if the command 
10a00 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 20 61  was successful a
10a10 6e 64 20 61 20 6e 65 77 20 72 65 73 75 6c 74 73  nd a new results
10a20 65 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  et is available,
10a30 20 46 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65   False otherwise
10a40 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
10a50 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
10a60 20 62 6f 6f 6c 20 4e 65 78 74 52 65 73 75 6c 74   bool NextResult
10a70 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
10a80 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
10a90 3b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c  ;..      CheckCl
10aa0 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 69  osed();..      i
10ab0 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f  f (_throwOnDispo
10ac0 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61  sed) SQLiteComma
10ad0 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e  nd.Check(_comman
10ae0 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c  d);....      SQL
10af0 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
10b00 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  t = null;..     
10b10 20 69 6e 74 20 66 69 65 6c 64 43 6f 75 6e 74 3b   int fieldCount;
10b20 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20 73 63 68  ..      bool sch
10b30 65 6d 61 4f 6e 6c 79 20 3d 20 28 28 5f 63 6f 6d  emaOnly = ((_com
10b40 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43  mandBehavior & C
10b50 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53  ommandBehavior.S
10b60 63 68 65 6d 61 4f 6e 6c 79 29 20 21 3d 20 30 29  chemaOnly) != 0)
10b70 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65  ;....      while
10b80 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20 7b   (true)..      {
10b90 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74  ..        if (st
10ba0 6d 74 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 5f 61  mt == null && _a
10bb0 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 21  ctiveStatement !
10bc0 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76  = null && _activ
10bd0 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 20  eStatement._sql 
10be0 21 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69  != null && _acti
10bf0 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
10c00 2e 49 73 4f 70 65 6e 28 29 29 0d 0a 20 20 20 20  .IsOpen())..    
10c10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10c20 20 2f 2f 20 52 65 73 65 74 20 74 68 65 20 70 72   // Reset the pr
10c30 65 76 69 6f 75 73 6c 79 2d 65 78 65 63 75 74 65  eviously-execute
10c40 64 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20  d statement..   
10c50 20 20 20 20 20 20 20 69 66 20 28 21 73 63 68 65         if (!sche
10c60 6d 61 4f 6e 6c 79 29 20 5f 61 63 74 69 76 65 53  maOnly) _activeS
10c70 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 52 65  tatement._sql.Re
10c80 73 65 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  set(_activeState
10c90 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ment);....      
10ca0 20 20 20 20 2f 2f 20 49 66 20 77 65 27 72 65 20      // If we're 
10cb0 6f 6e 6c 79 20 73 75 70 70 6f 73 65 64 20 74 6f  only supposed to
10cc0 20 72 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65   return a single
10cd0 20 72 6f 77 73 65 74 2c 20 73 74 65 70 20 74 68   rowset, step th
10ce0 72 6f 75 67 68 20 61 6c 6c 20 72 65 6d 61 69 6e  rough all remain
10cf0 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ing statements o
10d00 6e 63 65 20 75 6e 74 69 6c 0d 0a 20 20 20 20 20  nce until..     
10d10 20 20 20 20 20 2f 2f 20 74 68 65 79 20 61 72 65       // they are
10d20 20 61 6c 6c 20 64 6f 6e 65 20 61 6e 64 20 72 65   all done and re
10d30 74 75 72 6e 20 66 61 6c 73 65 20 74 6f 20 69 6e  turn false to in
10d40 64 69 63 61 74 65 20 6e 6f 20 6d 6f 72 65 20 72  dicate no more r
10d50 65 73 75 6c 74 73 65 74 73 20 65 78 69 73 74 2e  esultsets exist.
10d60 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
10d70 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  (_commandBehavio
10d80 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76  r & CommandBehav
10d90 69 6f 72 2e 53 69 6e 67 6c 65 52 65 73 75 6c 74  ior.SingleResult
10da0 29 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) != 0)..       
10db0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10dc0 20 20 66 6f 72 20 28 3b 20 3b 20 29 0d 0a 20 20    for (; ; )..  
10dd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10de0 20 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 20             stmt 
10df0 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74 53 74  = _command.GetSt
10e00 61 74 65 6d 65 6e 74 28 5f 61 63 74 69 76 65 53  atement(_activeS
10e10 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 20 2b 20  tatementIndex + 
10e20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  1);..           
10e30 20 20 20 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e     if (stmt == n
10e40 75 6c 6c 29 20 62 72 65 61 6b 3b 0d 0a 20 20 20  ull) break;..   
10e50 20 20 20 20 20 20 20 20 20 20 20 5f 61 63 74 69             _acti
10e60 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78  veStatementIndex
10e70 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
10e80 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61       if (!schema
10e90 4f 6e 6c 79 20 26 26 20 73 74 6d 74 2e 5f 73 71  Only && stmt._sq
10ea0 6c 2e 53 74 65 70 28 73 74 6d 74 29 29 20 5f 73  l.Step(stmt)) _s
10eb0 74 65 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20  tepCount++;..   
10ec0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
10ed0 74 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43  tmt._sql.ColumnC
10ee0 6f 75 6e 74 28 73 74 6d 74 29 20 3d 3d 20 30 29  ount(stmt) == 0)
10ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10f00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10f10 20 20 20 69 6e 74 20 63 68 61 6e 67 65 73 20 3d     int changes =
10f20 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
10f30 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e       bool readOn
10f40 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ly = false;..   
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10f60 28 73 74 6d 74 2e 54 72 79 47 65 74 43 68 61 6e  (stmt.TryGetChan
10f70 67 65 73 28 72 65 66 20 63 68 61 6e 67 65 73 2c  ges(ref changes,
10f80 20 72 65 66 20 72 65 61 64 4f 6e 6c 79 29 29 0d   ref readOnly)).
10f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10fa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10fb0 20 20 20 20 20 20 69 66 20 28 21 72 65 61 64 4f        if (!readO
10fc0 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nly)..          
10fd0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10ff0 66 20 28 5f 72 6f 77 73 41 66 66 65 63 74 65 64  f (_rowsAffected
11000 20 3d 3d 20 2d 31 29 20 5f 72 6f 77 73 41 66 66   == -1) _rowsAff
11010 65 63 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  ected = 0;..    
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11030 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 2b 3d  _rowsAffected +=
11040 20 63 68 61 6e 67 65 73 3b 0d 0a 20 20 20 20 20   changes;..     
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
11060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11070 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
11080 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
11090 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
110a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
110b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
110d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
110e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
110f0 66 20 28 21 73 63 68 65 6d 61 4f 6e 6c 79 29 20  f (!schemaOnly) 
11100 73 74 6d 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28  stmt._sql.Reset(
11110 73 74 6d 74 29 3b 20 2f 2f 20 47 6f 74 74 61 20  stmt); // Gotta 
11120 72 65 73 65 74 20 61 66 74 65 72 20 65 76 65 72  reset after ever
11130 79 20 73 74 65 70 20 74 6f 20 72 65 6c 65 61 73  y step to releas
11140 65 20 61 6e 79 20 6c 6f 63 6b 73 20 61 6e 64 20  e any locks and 
11150 73 75 63 68 21 0d 0a 20 20 20 20 20 20 20 20 20  such!..         
11160 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
11170 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
11180 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
11190 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
111a0 20 20 20 2f 2f 20 47 65 74 20 74 68 65 20 6e 65     // Get the ne
111b0 78 74 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  xt statement to 
111c0 65 78 65 63 75 74 65 0d 0a 20 20 20 20 20 20 20  execute..       
111d0 20 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64   stmt = _command
111e0 2e 47 65 74 53 74 61 74 65 6d 65 6e 74 28 5f 61  .GetStatement(_a
111f0 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
11200 64 65 78 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20  dex + 1);....   
11210 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65       // If we've
11220 20 72 65 61 63 68 65 64 20 74 68 65 20 65 6e 64   reached the end
11230 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   of the statemen
11240 74 73 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65  ts, return false
11250 2c 20 6e 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74  , no more result
11260 73 65 74 73 0d 0a 20 20 20 20 20 20 20 20 69 66  sets..        if
11270 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c 6c 29 0d   (stmt == null).
11280 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
11290 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
112a0 20 20 20 20 2f 2f 20 49 66 20 77 65 20 77 65 72      // If we wer
112b0 65 20 6f 6e 20 61 20 63 75 72 72 65 6e 74 20 72  e on a current r
112c0 65 73 75 6c 74 73 65 74 2c 20 73 65 74 20 74 68  esultset, set th
112d0 65 20 73 74 61 74 65 20 74 6f 20 22 64 6f 6e 65  e state to "done
112e0 20 72 65 61 64 69 6e 67 22 20 66 6f 72 20 69 74   reading" for it
112f0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 72  ..        if (_r
11300 65 61 64 69 6e 67 53 74 61 74 65 20 3c 20 31 29  eadingState < 1)
11310 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 72 65 61  ..          _rea
11320 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 0d 0a  dingState = 1;..
11330 0d 0a 20 20 20 20 20 20 20 20 5f 61 63 74 69 76  ..        _activ
11340 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b  eStatementIndex+
11350 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 69  +;....        fi
11360 65 6c 64 43 6f 75 6e 74 20 3d 20 73 74 6d 74 2e  eldCount = stmt.
11370 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74  _sql.ColumnCount
11380 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (stmt);....     
11390 20 20 20 2f 2f 20 49 66 20 74 68 65 20 73 74 61     // If the sta
113a0 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 20 61 20  tement is not a 
113b0 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
113c0 20 6f 72 20 77 65 27 72 65 20 6e 6f 74 20 72 65   or we're not re
113d0 74 72 69 65 76 69 6e 67 20 73 63 68 65 6d 61 20  trieving schema 
113e0 6f 6e 6c 79 2c 20 74 68 65 6e 20 70 65 72 66 6f  only, then perfo
113f0 72 6d 20 74 68 65 20 69 6e 69 74 69 61 6c 20 73  rm the initial s
11400 74 65 70 0d 0a 20 20 20 20 20 20 20 20 69 66 20  tep..        if 
11410 28 21 73 63 68 65 6d 61 4f 6e 6c 79 20 7c 7c 20  (!schemaOnly || 
11420 28 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d 20 30  (fieldCount == 0
11430 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
11440 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73 63           if (!sc
11450 68 65 6d 61 4f 6e 6c 79 20 26 26 20 73 74 6d 74  hemaOnly && stmt
11460 2e 5f 73 71 6c 2e 53 74 65 70 28 73 74 6d 74 29  ._sql.Step(stmt)
11470 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
11480 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 74 65              _ste
11490 70 43 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20 20 20  pCount++;..     
114a0 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53         _readingS
114b0 74 61 74 65 20 3d 20 2d 31 3b 0d 0a 20 20 20 20  tate = -1;..    
114c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
114d0 20 20 20 65 6c 73 65 20 69 66 20 28 66 69 65 6c     else if (fiel
114e0 64 43 6f 75 6e 74 20 3d 3d 20 30 29 20 2f 2f 20  dCount == 0) // 
114f0 4e 6f 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  No rows returned
11500 2c 20 69 66 20 66 69 65 6c 64 43 6f 75 6e 74 20  , if fieldCount 
11510 69 73 20 7a 65 72 6f 2c 20 73 6b 69 70 20 74 6f  is zero, skip to
11520 20 74 68 65 20 6e 65 78 74 20 73 74 61 74 65 6d   the next statem
11530 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ent..          {
11540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
11550 74 20 63 68 61 6e 67 65 73 20 3d 20 30 3b 0d 0a  t changes = 0;..
11560 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
11570 20 72 65 61 64 4f 6e 6c 79 20 3d 20 66 61 6c 73   readOnly = fals
11580 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
11590 69 66 20 28 73 74 6d 74 2e 54 72 79 47 65 74 43  if (stmt.TryGetC
115a0 68 61 6e 67 65 73 28 72 65 66 20 63 68 61 6e 67  hanges(ref chang
115b0 65 73 2c 20 72 65 66 20 72 65 61 64 4f 6e 6c 79  es, ref readOnly
115c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
115d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
115e0 20 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d   if (!readOnly).
115f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
11600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11610 20 20 69 66 20 28 5f 72 6f 77 73 41 66 66 65 63    if (_rowsAffec
11620 74 65 64 20 3d 3d 20 2d 31 29 20 5f 72 6f 77 73  ted == -1) _rows
11630 41 66 66 65 63 74 65 64 20 3d 20 30 3b 0d 0a 20  Affected = 0;.. 
11640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
11650 72 6f 77 73 41 66 66 65 63 74 65 64 20 2b 3d 20  rowsAffected += 
11660 63 68 61 6e 67 65 73 3b 0d 0a 20 20 20 20 20 20  changes;..      
11670 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11680 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11690 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
116a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
116b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
116c0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
116d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
116e0 20 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e     if (!schemaOn
116f0 6c 79 29 20 73 74 6d 74 2e 5f 73 71 6c 2e 52 65  ly) stmt._sql.Re
11700 73 65 74 28 73 74 6d 74 29 3b 0d 0a 20 20 20 20  set(stmt);..    
11710 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
11720 3b 20 2f 2f 20 53 6b 69 70 20 74 68 69 73 20 63  ; // Skip this c
11730 6f 6d 6d 61 6e 64 20 61 6e 64 20 6d 6f 76 65 20  ommand and move 
11740 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 69 74 20  to the next, it 
11750 77 61 73 20 6e 6f 74 20 61 20 72 6f 77 2d 72 65  was not a row-re
11760 74 75 72 6e 69 6e 67 20 72 65 73 75 6c 74 73 65  turning resultse
11770 74 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  t..          }..
11780 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 2f            else /
11790 2f 20 4e 6f 20 72 6f 77 73 2c 20 66 69 65 6c 64  / No rows, field
117a0 43 6f 75 6e 74 20 69 73 20 6e 6f 6e 2d 7a 65 72  Count is non-zer
117b0 6f 20 73 6f 20 73 74 6f 70 20 68 65 72 65 0d 0a  o so stop here..
117c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
117d0 20 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e           _readin
117e0 67 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f 20 54  gState = 1; // T
117f0 68 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75  his command retu
11800 72 6e 65 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74  rned columns but
11810 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 72 65 74   no rows, so ret
11820 75 72 6e 20 74 72 75 65 2c 20 62 75 74 20 48 61  urn true, but Ha
11830 73 52 6f 77 73 20 3d 20 66 61 6c 73 65 20 61 6e  sRows = false an
11840 64 20 52 65 61 64 28 29 20 72 65 74 75 72 6e 73  d Read() returns
11850 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20   false..        
11860 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
11870 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 41 68 68  ..        // Ahh
11880 2c 20 77 65 20 66 6f 75 6e 64 20 61 20 72 6f 77  , we found a row
11890 2d 72 65 74 75 72 6e 69 6e 67 20 72 65 73 75 6c  -returning resul
118a0 74 73 65 74 20 65 6c 69 67 69 62 6c 65 20 74 6f  tset eligible to
118b0 20 62 65 20 72 65 74 75 72 6e 65 64 21 0d 0a 20   be returned!.. 
118c0 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74         _activeSt
118d0 61 74 65 6d 65 6e 74 20 3d 20 73 74 6d 74 3b 0d  atement = stmt;.
118e0 0a 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 43  .        _fieldC
118f0 6f 75 6e 74 20 3d 20 66 69 65 6c 64 43 6f 75 6e  ount = fieldCoun
11900 74 3b 0d 0a 20 20 20 20 20 20 20 20 5f 66 69 65  t;..        _fie
11910 6c 64 49 6e 64 65 78 65 73 20 3d 20 6e 65 77 20  ldIndexes = new 
11920 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
11930 67 2c 20 69 6e 74 3e 28 53 74 72 69 6e 67 43 6f  g, int>(StringCo
11940 6d 70 61 72 65 72 2e 4f 72 64 69 6e 61 6c 49 67  mparer.OrdinalIg
11950 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 20 20 20 20  noreCase);..    
11960 20 20 20 20 5f 66 69 65 6c 64 54 79 70 65 41 72      _fieldTypeAr
11970 72 61 79 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ray = new SQLite
11980 54 79 70 65 5b 50 72 69 76 61 74 65 56 69 73 69  Type[PrivateVisi
11990 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 5d 3b 0d  bleFieldCount];.
119a0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
119b0 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72  _commandBehavior
119c0 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69   & CommandBehavi
119d0 6f 72 2e 4b 65 79 49 6e 66 6f 29 20 21 3d 20 30  or.KeyInfo) != 0
119e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 4c 6f 61  )..          Loa
119f0 64 4b 65 79 49 6e 66 6f 28 29 3b 0d 0a 0d 0a 20  dKeyInfo();.... 
11a00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
11a10 75 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ue;..      }..  
11a20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
11a30 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
11a40 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61 74  / This method at
11a50 74 65 6d 70 74 73 20 74 6f 20 71 75 65 72 79 20  tempts to query 
11a60 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
11a70 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  nection associat
11a80 65 64 20 77 69 74 68 0d 0a 20 20 20 20 2f 2f 2f  ed with..    ///
11a90 20 74 68 65 20 64 61 74 61 20 72 65 61 64 65 72   the data reader
11aa0 20 69 6e 20 75 73 65 2e 20 20 49 66 20 74 68 65   in use.  If the
11ab0 20 75 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d 6d   underlying comm
11ac0 61 6e 64 20 6f 72 20 63 6f 6e 6e 65 63 74 69 6f  and or connectio
11ad0 6e 20 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 75 6e  n is..    /// un
11ae0 61 76 61 69 6c 61 62 6c 65 2c 20 61 20 6e 75 6c  available, a nul
11af0 6c 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  l value will be 
11b00 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f  returned...    /
11b10 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
11b20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
11b30 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f  ..    /// The co
11b40 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20  nnection object 
11b50 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20  -OR- null if it 
11b60 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2e 0d  is unavailable..
11b70 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
11b80 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
11b90 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 43  l static SQLiteC
11ba0 6f 6e 6e 65 63 74 69 6f 6e 20 47 65 74 43 6f 6e  onnection GetCon
11bb0 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  nection(..      
11bc0 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
11bd0 65 72 20 64 61 74 61 52 65 61 64 65 72 0d 0a 20  er dataReader.. 
11be0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
11bf0 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
11c00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11c10 20 20 20 20 20 69 66 20 28 64 61 74 61 52 65 61       if (dataRea
11c20 64 65 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  der != null)..  
11c30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
11c50 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
11c60 6e 64 20 3d 20 64 61 74 61 52 65 61 64 65 72 2e  nd = dataReader.
11c70 5f 63 6f 6d 6d 61 6e 64 3b 0d 0a 0d 0a 20 20 20  _command;....   
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11c90 28 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c  (command != null
11ca0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11cb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11cc0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
11cd0 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
11ce0 63 74 69 6f 6e 20 3d 20 63 6f 6d 6d 61 6e 64 2e  ction = command.
11cf0 43 6f 6e 6e 65 63 74 69 6f 6e 3b 0d 0a 0d 0a 20  Connection;.... 
11d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d10 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f     if (connectio
11d20 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n != null)..    
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d40 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 6e 65      return conne
11d50 63 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  ction;..        
11d60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11d70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11d80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74    }..        cat
11d90 63 68 20 28 4f 62 6a 65 63 74 44 69 73 70 6f 73  ch (ObjectDispos
11da0 65 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20  edException)..  
11db0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11dc0 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
11dd0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
11de0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
11df0 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d   null;..    }...
11e00 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
11e10 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  y>..    /// Retr
11e20 69 65 76 65 73 20 74 68 65 20 53 51 4c 69 74 65  ieves the SQLite
11e30 54 79 70 65 20 66 6f 72 20 61 20 67 69 76 65 6e  Type for a given
11e40 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 72 6f 77 20   column and row 
11e50 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  value...    /// 
11e60 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
11e70 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
11e80 22 6f 6c 64 54 79 70 65 22 3e 0d 0a 20 20 20 20  "oldType">..    
11e90 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c  /// The original
11ea0 20 53 51 4c 69 74 65 54 79 70 65 20 73 74 72 75   SQLiteType stru
11eb0 63 74 75 72 65 2c 20 62 61 73 65 64 20 6f 6e 6c  cture, based onl
11ec0 79 20 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  y on the column.
11ed0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
11ee0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
11ef0 61 6d 20 6e 61 6d 65 3d 22 74 65 78 74 22 3e 0d  am name="text">.
11f00 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 74 65 78  .    /// The tex
11f10 74 75 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  tual value of th
11f20 65 20 63 6f 6c 75 6d 6e 20 66 6f 72 20 61 20 67  e column for a g
11f30 69 76 65 6e 20 72 6f 77 2e 0d 0a 20 20 20 20 2f  iven row...    /
11f40 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
11f50 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
11f60 20 20 20 20 2f 2f 2f 20 54 68 65 20 53 51 4c 69      /// The SQLi
11f70 74 65 54 79 70 65 20 73 74 72 75 63 74 75 72 65  teType structure
11f80 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
11f90 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61  urns>..    priva
11fa0 74 65 20 53 51 4c 69 74 65 54 79 70 65 20 47 65  te SQLiteType Ge
11fb0 74 53 51 4c 69 74 65 54 79 70 65 28 0d 0a 20 20  tSQLiteType(..  
11fc0 20 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65        SQLiteType
11fd0 20 6f 6c 64 54 79 70 65 2c 20 2f 2a 20 50 41 53   oldType, /* PAS
11fe0 53 2d 54 48 52 4f 55 47 48 20 2a 2f 0d 0a 20 20  S-THROUGH */..  
11ff0 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
12000 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  t..        )..  
12010 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
12020 28 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 4c  (SQLiteConvert.L
12030 6f 6f 6b 73 4c 69 6b 65 4e 75 6c 6c 28 74 65 78  ooksLikeNull(tex
12040 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
12050 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69   return new SQLi
12060 74 65 54 79 70 65 28 54 79 70 65 41 66 66 69 6e  teType(TypeAffin
12070 69 74 79 2e 4e 75 6c 6c 2c 20 44 62 54 79 70 65  ity.Null, DbType
12080 2e 4f 62 6a 65 63 74 29 3b 0d 0a 0d 0a 20 20 20  .Object);....   
12090 20 20 20 20 20 69 66 20 28 53 51 4c 69 74 65 43       if (SQLiteC
120a0 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65  onvert.LooksLike
120b0 49 6e 74 36 34 28 74 65 78 74 29 29 0d 0a 20 20  Int64(text))..  
120c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
120d0 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 28   new SQLiteType(
120e0 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
120f0 36 34 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34  64, DbType.Int64
12100 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
12110 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e   (SQLiteConvert.
12120 4c 6f 6f 6b 73 4c 69 6b 65 44 6f 75 62 6c 65 28  LooksLikeDouble(
12130 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20  text))..        
12140 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53      return new S
12150 51 4c 69 74 65 54 79 70 65 28 54 79 70 65 41 66  QLiteType(TypeAf
12160 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 2c 20 44  finity.Double, D
12170 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b 0d 0a  bType.Double);..
12180 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
12190 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20  activeStatement 
121a0 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20  != null) &&..   
121b0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
121c0 6f 6e 76 65 72 74 2e 4c 6f 6f 6b 73 4c 69 6b 65  onvert.LooksLike
121d0 44 61 74 65 54 69 6d 65 28 5f 61 63 74 69 76 65  DateTime(_active
121e0 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2c 20  Statement._sql, 
121f0 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20  text))..        
12200 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
12210 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65  eturn new SQLite
12220 54 79 70 65 28 54 79 70 65 41 66 66 69 6e 69 74  Type(TypeAffinit
12230 79 2e 44 61 74 65 54 69 6d 65 2c 20 44 62 54 79  y.DateTime, DbTy
12240 70 65 2e 44 61 74 65 54 69 6d 65 29 3b 0d 0a 20  pe.DateTime);.. 
12250 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
12260 20 20 20 20 72 65 74 75 72 6e 20 6f 6c 64 54 79      return oldTy
12270 70 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  pe;..    }....  
12280 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
12290 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
122a0 65 73 20 74 68 65 20 53 51 4c 69 74 65 54 79 70  es the SQLiteTyp
122b0 65 20 66 6f 72 20 61 20 67 69 76 65 6e 20 63 6f  e for a given co
122c0 6c 75 6d 6e 2c 20 61 6e 64 20 63 61 63 68 65 73  lumn, and caches
122d0 20 69 74 20 74 6f 20 61 76 6f 69 64 20 72 65 70   it to avoid rep
122e0 65 74 65 74 69 76 65 20 69 6e 74 65 72 6f 70 20  etetive interop 
122f0 63 61 6c 6c 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  calls...    /// 
12300 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
12310 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
12320 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c 61 67  "flags">The flag
12330 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
12340 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e  h the parent con
12350 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 3c  nection object.<
12360 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
12370 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
12380 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
12390 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72 61 6d  e column.</param
123a0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
123b0 72 6e 73 3e 41 20 53 51 4c 69 74 65 54 79 70 65  rns>A SQLiteType
123c0 20 73 74 72 75 63 74 75 72 65 3c 2f 72 65 74 75   structure</retu
123d0 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  rns>..    privat
123e0 65 20 53 51 4c 69 74 65 54 79 70 65 20 47 65 74  e SQLiteType Get
123f0 53 51 4c 69 74 65 54 79 70 65 28 53 51 4c 69 74  SQLiteType(SQLit
12400 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
12410 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 29 0d 0a   flags, int i)..
12420 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
12430 51 4c 69 74 65 54 79 70 65 20 74 79 70 20 3d 20  QLiteType typ = 
12440 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 5b  _fieldTypeArray[
12450 69 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  i];....        i
12460 66 20 28 74 79 70 20 3d 3d 20 6e 75 6c 6c 29 0d  f (typ == null).
12470 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
12480 20 20 20 20 20 20 20 20 2f 2f 20 49 6e 69 74 69          // Initi
12490 61 6c 69 7a 65 20 74 68 69 73 20 63 6f 6c 75 6d  alize this colum
124a0 6e 27 73 20 66 69 65 6c 64 20 74 79 70 65 20 69  n's field type i
124b0 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20  nstance..       
124c0 20 20 20 20 20 74 79 70 20 3d 20 5f 66 69 65 6c       typ = _fiel
124d0 64 54 79 70 65 41 72 72 61 79 5b 69 5d 20 3d 20  dTypeArray[i] = 
124e0 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 28 29  new SQLiteType()
124f0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
12500 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f          // If no
12510 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74  t initialized, t
12520 68 65 6e 20 66 65 74 63 68 20 74 68 65 20 64 65  hen fetch the de
12530 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 20 64 61  clared column da
12540 74 61 74 79 70 65 20 61 6e 64 20 61 74 74 65 6d  tatype and attem
12550 70 74 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  pt to convert it
12560 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 74 6f 20  ..        // to 
12570 61 20 6b 6e 6f 77 6e 20 44 62 54 79 70 65 2e 0d  a known DbType..
12580 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70  .        if (typ
12590 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70  .Affinity == Typ
125a0 65 41 66 66 69 6e 69 74 79 2e 55 6e 69 6e 69 74  eAffinity.Uninit
125b0 69 61 6c 69 7a 65 64 29 0d 0a 20 20 20 20 20 20  ialized)..      
125c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
125d0 20 74 79 70 2e 54 79 70 65 20 3d 20 53 51 4c 69   typ.Type = SQLi
125e0 74 65 43 6f 6e 76 65 72 74 2e 54 79 70 65 4e 61  teConvert.TypeNa
125f0 6d 65 54 6f 44 62 54 79 70 65 28 0d 0a 20 20 20  meToDbType(..   
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
12610 43 6f 6e 6e 65 63 74 69 6f 6e 28 74 68 69 73 29  Connection(this)
12620 2c 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  , _activeStateme
12630 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79  nt._sql.ColumnTy
12640 70 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pe(..           
12650 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74       _activeStat
12660 65 6d 65 6e 74 2c 20 69 2c 20 72 65 66 20 74 79  ement, i, ref ty
12670 70 2e 41 66 66 69 6e 69 74 79 29 2c 20 66 6c 61  p.Affinity), fla
12680 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gs);..        }.
12690 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  .        else.. 
126a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
126b0 20 20 20 20 20 20 74 79 70 2e 41 66 66 69 6e 69        typ.Affini
126c0 74 79 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74  ty = _activeStat
126d0 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d  ement._sql.Colum
126e0 6e 41 66 66 69 6e 69 74 79 28 0d 0a 20 20 20 20  nAffinity(..    
126f0 20 20 20 20 20 20 20 20 20 20 20 20 5f 61 63 74              _act
12700 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
12710 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
12720 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
12730 79 70 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  yp;..    }....  
12740 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
12750 0a 20 20 20 20 2f 2f 2f 20 52 65 61 64 73 20 74  .    /// Reads t
12760 68 65 20 6e 65 78 74 20 72 6f 77 20 66 72 6f 6d  he next row from
12770 20 74 68 65 20 72 65 73 75 6c 74 73 65 74 0d 0a   the resultset..
12780 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
12790 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
127a0 75 72 6e 73 3e 54 72 75 65 20 69 66 20 61 20 6e  urns>True if a n
127b0 65 77 20 72 6f 77 20 77 61 73 20 73 75 63 63 65  ew row was succe
127c0 73 73 66 75 6c 6c 79 20 6c 6f 61 64 65 64 20 61  ssfully loaded a
127d0 6e 64 20 69 73 20 72 65 61 64 79 20 66 6f 72 20  nd is ready for 
127e0 70 72 6f 63 65 73 73 69 6e 67 3c 2f 72 65 74 75  processing</retu
127f0 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
12800 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 52   override bool R
12810 65 61 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ead()..    {..  
12820 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
12830 64 28 29 3b 0d 0a 20 20 20 20 20 20 43 68 65 63  d();..      Chec
12840 6b 43 6c 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  kClosed();..    
12850 20 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69    if (_throwOnDi
12860 73 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43 6f  sposed) SQLiteCo
12870 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d  mmand.Check(_com
12880 6d 61 6e 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mand);....      
12890 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68  if ((_commandBeh
128a0 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42  avior & CommandB
128b0 65 68 61 76 69 6f 72 2e 53 63 68 65 6d 61 4f 6e  ehavior.SchemaOn
128c0 6c 79 29 20 21 3d 20 30 29 0d 0a 20 20 20 20 20  ly) != 0)..     
128d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
128e0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 72  ....      if (_r
128f0 65 61 64 69 6e 67 53 74 61 74 65 20 3d 3d 20 2d  eadingState == -
12900 31 29 20 2f 2f 20 46 69 72 73 74 20 73 74 65 70  1) // First step
12910 20 77 61 73 20 61 6c 72 65 61 64 79 20 64 6f 6e   was already don
12920 65 20 61 74 20 74 68 65 20 4e 65 78 74 52 65 73  e at the NextRes
12930 75 6c 74 28 29 20 6c 65 76 65 6c 2c 20 73 6f 20  ult() level, so 
12940 64 6f 6e 27 74 20 73 74 65 70 20 61 67 61 69 6e  don't step again
12950 2c 20 6a 75 73 74 20 72 65 74 75 72 6e 20 74 72  , just return tr
12960 75 65 2e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ue...      {..  
12970 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74        _readingSt
12980 61 74 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ate = 0;..      
12990 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
129a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65        }..      e
129b0 6c 73 65 20 69 66 20 28 5f 72 65 61 64 69 6e 67  lse if (_reading
129c0 53 74 61 74 65 20 3d 3d 20 30 29 20 2f 2f 20 41  State == 0) // A
129d0 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67 20  ctively reading 
129e0 72 6f 77 73 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  rows..      {.. 
129f0 20 20 20 20 20 20 20 2f 2f 20 44 6f 6e 27 74 20         // Don't 
12a00 72 65 61 64 20 61 20 6e 65 77 20 72 6f 77 20 69  read a new row i
12a10 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 62 65  f the command be
12a20 68 61 76 69 6f 72 20 64 69 63 74 61 74 65 73 20  havior dictates 
12a30 53 69 6e 67 6c 65 52 6f 77 2e 20 20 57 65 27 76  SingleRow.  We'v
12a40 65 20 61 6c 72 65 61 64 79 20 72 65 61 64 20 74  e already read t
12a50 68 65 20 66 69 72 73 74 20 72 6f 77 2e 0d 0a 20  he first row... 
12a60 20 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d         if ((_com
12a70 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43  mandBehavior & C
12a80 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53  ommandBehavior.S
12a90 69 6e 67 6c 65 52 6f 77 29 20 3d 3d 20 30 29 0d  ingleRow) == 0).
12aa0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
12ab0 20 20 20 20 20 20 69 66 20 28 5f 61 63 74 69 76        if (_activ
12ac0 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
12ad0 53 74 65 70 28 5f 61 63 74 69 76 65 53 74 61 74  Step(_activeStat
12ae0 65 6d 65 6e 74 29 20 3d 3d 20 74 72 75 65 29 0d  ement) == true).
12af0 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
12b00 20 20 20 20 20 20 20 20 20 20 5f 73 74 65 70 43            _stepC
12b10 6f 75 6e 74 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  ount++;....     
12b20 20 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49         if (_keyI
12b30 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  nfo != null)..  
12b40 20 20 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79              _key
12b50 49 6e 66 6f 2e 52 65 73 65 74 28 29 3b 0d 0a 0d  Info.Reset();...
12b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
12b70 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
12b80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12b90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 72 65  }....        _re
12ba0 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 20  adingState = 1; 
12bb0 2f 2f 20 46 69 6e 69 73 68 65 64 20 72 65 61 64  // Finished read
12bc0 69 6e 67 20 72 6f 77 73 0d 0a 20 20 20 20 20 20  ing rows..      
12bd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
12be0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d  n false;..    }.
12bf0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
12c00 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
12c10 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
12c20 20 6f 66 20 72 6f 77 73 20 61 66 66 65 63 74 65   of rows affecte
12c30 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
12c40 6e 74 20 62 65 69 6e 67 20 65 78 65 63 75 74 65  nt being execute
12c50 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  d...    /// The 
12c60 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 6d  value returned m
12c70 61 79 20 6e 6f 74 20 62 65 20 61 63 63 75 72 61  ay not be accura
12c80 74 65 20 66 6f 72 20 44 44 4c 20 73 74 61 74 65  te for DDL state
12c90 6d 65 6e 74 73 2e 20 20 41 6c 73 6f 2c 20 69 74  ments.  Also, it
12ca0 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 62  ..    /// will b
12cb0 65 20 2d 31 20 66 6f 72 20 61 6e 79 20 73 74 61  e -1 for any sta
12cc0 74 65 6d 65 6e 74 20 74 68 61 74 20 64 6f 65 73  tement that does
12cd0 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20   not modify the 
12ce0 64 61 74 61 62 61 73 65 20 28 65 2e 67 2e 0d 0a  database (e.g...
12cf0 20 20 20 20 2f 2f 2f 20 53 45 4c 45 43 54 29 2e      /// SELECT).
12d00 20 20 49 66 20 61 6e 20 6f 74 68 65 72 77 69 73    If an otherwis
12d10 65 20 72 65 61 64 2d 6f 6e 6c 79 20 73 74 61 74  e read-only stat
12d20 65 6d 65 6e 74 20 6d 6f 64 69 66 69 65 73 20 74  ement modifies t
12d30 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  he database..   
12d40 20 2f 2f 2f 20 69 6e 64 69 72 65 63 74 6c 79 20   /// indirectly 
12d50 28 65 2e 67 2e 20 76 69 61 20 61 20 76 69 72 74  (e.g. via a virt
12d60 75 61 6c 20 74 61 62 6c 65 20 6f 72 20 75 73 65  ual table or use
12d70 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  r-defined functi
12d80 6f 6e 29 2c 20 74 68 65 0d 0a 20 20 20 20 2f 2f  on), the..    //
12d90 2f 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  / value returned
12da0 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0d 0a   is undefined...
12db0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
12dc0 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  y>..    public o
12dd0 76 65 72 72 69 64 65 20 69 6e 74 20 52 65 63 6f  verride int Reco
12de0 72 64 73 41 66 66 65 63 74 65 64 0d 0a 20 20 20  rdsAffected..   
12df0 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20   {..      get { 
12e00 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
12e10 20 72 65 74 75 72 6e 20 5f 72 6f 77 73 41 66 66   return _rowsAff
12e20 65 63 74 65 64 3b 20 7d 0d 0a 20 20 20 20 7d 0d  ected; }..    }.
12e30 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
12e40 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e  ary>..    /// In
12e50 64 65 78 65 72 20 74 6f 20 72 65 74 72 69 65 76  dexer to retriev
12e60 65 20 64 61 74 61 20 66 72 6f 6d 20 61 20 63 6f  e data from a co
12e70 6c 75 6d 6e 20 67 69 76 65 6e 20 69 74 73 20 6e  lumn given its n
12e80 61 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ame..    /// </s
12e90 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
12ea0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61   <param name="na
12eb0 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20  me">The name of 
12ec0 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
12ed0 74 72 69 65 76 65 20 64 61 74 61 20 66 6f 72 3c  trieve data for<
12ee0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
12ef0 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 76 61   <returns>The va
12f00 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
12f10 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74   the column</ret
12f20 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
12f30 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63  c override objec
12f40 74 20 74 68 69 73 5b 73 74 72 69 6e 67 20 6e 61  t this[string na
12f50 6d 65 5d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me]..    {..    
12f60 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
12f70 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
12f80 47 65 74 56 61 6c 75 65 28 47 65 74 4f 72 64 69  GetValue(GetOrdi
12f90 6e 61 6c 28 6e 61 6d 65 29 29 3b 20 7d 0d 0a 20  nal(name)); }.. 
12fa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
12fb0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
12fc0 2f 2f 20 49 6e 64 65 78 65 72 20 74 6f 20 72 65  // Indexer to re
12fd0 74 72 69 65 76 65 20 64 61 74 61 20 66 72 6f 6d  trieve data from
12fe0 20 61 20 63 6f 6c 75 6d 6e 20 67 69 76 65 6e 20   a column given 
12ff0 69 74 73 20 69 0d 0a 20 20 20 20 2f 2f 2f 20 3c  its i..    /// <
13000 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
13010 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
13020 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
13030 74 68 65 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 61 72  the column.</par
13040 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
13050 74 75 72 6e 73 3e 54 68 65 20 76 61 6c 75 65 20  turns>The value 
13060 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
13070 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73   column</returns
13080 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  >..    public ov
13090 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 74 68  erride object th
130a0 69 73 5b 69 6e 74 20 69 5d 0d 0a 20 20 20 20 7b  is[int i]..    {
130b0 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43 68  ..      get { Ch
130c0 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
130d0 65 74 75 72 6e 20 47 65 74 56 61 6c 75 65 28 69  eturn GetValue(i
130e0 29 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ); }..    }.... 
130f0 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
13100 4c 6f 61 64 4b 65 79 49 6e 66 6f 28 29 0d 0a 20  LoadKeyInfo().. 
13110 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
13120 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75   (_keyInfo != nu
13130 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ll)..        {..
13140 20 20 20 20 20 20 20 20 20 20 20 20 5f 6b 65 79              _key
13150 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b 0d  Info.Dispose();.
13160 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6b 65  .            _ke
13170 79 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  yInfo = null;.. 
13180 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
13190 20 20 20 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e      _keyInfo = n
131a0 65 77 20 53 51 4c 69 74 65 4b 65 79 52 65 61 64  ew SQLiteKeyRead
131b0 65 72 28 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e  er(_command.Conn
131c0 65 63 74 69 6f 6e 2c 20 74 68 69 73 2c 20 5f 61  ection, this, _a
131d0 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 29 3b  ctiveStatement);
131e0 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d  ..    }..  }..}.
131f0 0a                                               .