System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact c661633569217ae03b63ea2712ae734bbd4c2f50:


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 0a 20 2a 20 41 44 4f  *********. * ADO
0040: 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50 72  .NET 2.0 Data Pr
0050: 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74  ovider for SQLit
0060: 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0a 20 2a  e Version 3.X. *
0070: 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f 62 65   Written by Robe
0080: 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f 62 65  rt Simpson (robe
0090: 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65 73 6f  rt@blackcastleso
00a0: 66 74 2e 63 6f 6d 29 0a 20 2a 0a 20 2a 20 52 65  ft.com). *. * Re
00b0: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
00c0: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
00d0: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
00e0: 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  k!. ************
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 2f 0a 0a 6e  ************/..n
0120: 61 6d 65 73 70 61 63 65 20 53 79 73 74 65 6d 2e  amespace System.
0130: 44 61 74 61 2e 53 51 4c 69 74 65 0a 7b 0a 20 20  Data.SQLite.{.  
0140: 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0a 20 20  using System;.  
0150: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c  using System.Col
0160: 6c 65 63 74 69 6f 6e 73 2e 47 65 6e 65 72 69 63  lections.Generic
0170: 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ;.  using System
0180: 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 53 70 65  .Collections.Spe
0190: 63 69 61 6c 69 7a 65 64 3b 0a 20 20 75 73 69 6e  cialized;.  usin
01a0: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 3b 0a 20  g System.Data;. 
01b0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
01c0: 74 61 2e 43 6f 6d 6d 6f 6e 3b 0a 20 20 75 73 69  ta.Common;.  usi
01d0: 6e 67 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c  ng System.Global
01e0: 69 7a 61 74 69 6f 6e 3b 0a 0a 20 20 2f 2f 2f 20  ization;..  /// 
01f0: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 2f 2f 2f 20  <summary>.  /// 
0200: 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e 74  SQLite implement
0210: 61 74 69 6f 6e 20 6f 66 20 44 62 44 61 74 61 52  ation of DbDataR
0220: 65 61 64 65 72 2e 0a 20 20 2f 2f 2f 20 3c 2f 73  eader..  /// </s
0230: 75 6d 6d 61 72 79 3e 0a 20 20 70 75 62 6c 69 63  ummary>.  public
0240: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51   sealed class SQ
0250: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 20 3a  LiteDataReader :
0260: 20 44 62 44 61 74 61 52 65 61 64 65 72 0a 20 20   DbDataReader.  
0270: 7b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  {.    /// <summa
0280: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 55 6e 64 65  ry>.    /// Unde
0290: 72 6c 79 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 74  rlying command t
02a0: 68 69 73 20 72 65 61 64 65 72 20 69 73 20 61 74  his reader is at
02b0: 74 61 63 68 65 64 20 74 6f 0a 20 20 20 20 2f 2f  tached to.    //
02c0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
02d0: 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 43   private SQLiteC
02e0: 6f 6d 6d 61 6e 64 20 5f 63 6f 6d 6d 61 6e 64 3b  ommand _command;
02f0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0300: 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78  y>.    /// Index
0310: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
0320: 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65  statement in the
0330: 20 63 6f 6d 6d 61 6e 64 20 62 65 69 6e 67 20 70   command being p
0340: 72 6f 63 65 73 73 65 64 0a 20 20 20 20 2f 2f 2f  rocessed.    ///
0350: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
0360: 70 72 69 76 61 74 65 20 69 6e 74 20 5f 61 63 74  private int _act
0370: 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65  iveStatementInde
0380: 78 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  x;.    /// <summ
0390: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 75 72  ary>.    /// Cur
03a0: 72 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 62  rent statement b
03b0: 65 69 6e 67 20 52 65 61 64 28 29 0a 20 20 20 20  eing Read().    
03c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
03d0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
03e0: 65 53 74 61 74 65 6d 65 6e 74 20 5f 61 63 74 69  eStatement _acti
03f0: 76 65 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20  veStatement;.   
0400: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
0410: 20 20 20 2f 2f 2f 20 53 74 61 74 65 20 6f 66 20     /// State of 
0420: 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74  the current stat
0430: 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72 6f 63  ement being proc
0440: 65 73 73 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 2d  essed..    /// -
0450: 31 20 3d 20 46 69 72 73 74 20 53 74 65 70 28 29  1 = First Step()
0460: 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20 74 68   executed, so th
0470: 65 20 66 69 72 73 74 20 52 65 61 64 28 29 20 77  e first Read() w
0480: 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 0a 20  ill be ignored. 
0490: 20 20 20 2f 2f 2f 20 20 30 20 3d 20 41 63 74 69     ///  0 = Acti
04a0: 76 65 6c 79 20 72 65 61 64 69 6e 67 0a 20 20 20  vely reading.   
04b0: 20 2f 2f 2f 20 20 31 20 3d 20 46 69 6e 69 73 68   ///  1 = Finish
04c0: 65 64 20 72 65 61 64 69 6e 67 0a 20 20 20 20 2f  ed reading.    /
04d0: 2f 2f 20 20 32 20 3d 20 4e 6f 6e 2d 72 6f 77 2d  //  2 = Non-row-
04e0: 72 65 74 75 72 6e 69 6e 67 20 73 74 61 74 65 6d  returning statem
04f0: 65 6e 74 2c 20 6e 6f 20 72 65 63 6f 72 64 73 0a  ent, no records.
0500: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0510: 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 69  y>.    private i
0520: 6e 74 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65  nt _readingState
0530: 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ;.    /// <summa
0540: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 4e 75 6d 62  ry>.    /// Numb
0550: 65 72 20 6f 66 20 72 65 63 6f 72 64 73 20 61 66  er of records af
0560: 66 65 63 74 65 64 20 62 79 20 74 68 65 20 69 6e  fected by the in
0570: 73 65 72 74 2f 75 70 64 61 74 65 20 73 74 61 74  sert/update stat
0580: 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64 20  ements executed 
0590: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 20  on the command. 
05a0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
05b0: 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e  >.    private in
05c0: 74 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64 3b  t _rowsAffected;
05d0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
05e0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6f 75 6e 74  y>.    /// Count
05f0: 20 6f 66 20 66 69 65 6c 64 73 20 28 63 6f 6c 75   of fields (colu
0600: 6d 6e 73 29 20 69 6e 20 74 68 65 20 72 6f 77 2d  mns) in the row-
0610: 72 65 74 75 72 6e 69 6e 67 20 73 74 61 74 65 6d  returning statem
0620: 65 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65  ent currently be
0630: 69 6e 67 20 70 72 6f 63 65 73 73 65 64 0a 20 20  ing processed.  
0640: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0650: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
0660: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0a 20 20   _fieldCount;.  
0670: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
0680: 20 20 20 20 2f 2f 2f 20 4d 61 70 73 20 74 68 65      /// Maps the
0690: 20 66 69 65 6c 64 20 28 63 6f 6c 75 6d 6e 29 20   field (column) 
06a0: 6e 61 6d 65 73 20 74 6f 20 74 68 65 69 72 20 63  names to their c
06b0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 69 6e 64  orresponding ind
06c0: 65 78 65 73 20 77 69 74 68 69 6e 20 74 68 65 20  exes within the 
06d0: 72 65 73 75 6c 74 73 2e 0a 20 20 20 20 2f 2f 2f  results..    ///
06e0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
06f0: 70 72 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61  private Dictiona
0700: 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 20  ry<string, int> 
0710: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 3b 0a 20  _fieldIndexes;. 
0720: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0730: 0a 20 20 20 20 2f 2f 2f 20 44 61 74 61 74 79 70  .    /// Datatyp
0740: 65 73 20 6f 66 20 61 63 74 69 76 65 20 66 69 65  es of active fie
0750: 6c 64 73 20 28 63 6f 6c 75 6d 6e 73 29 20 69 6e  lds (columns) in
0760: 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61   the current sta
0770: 74 65 6d 65 6e 74 2c 20 75 73 65 64 20 66 6f 72  tement, used for
0780: 20 74 79 70 65 2d 72 65 73 74 72 69 63 74 69 6e   type-restrictin
0790: 67 20 64 61 74 61 0a 20 20 20 20 2f 2f 2f 20 3c  g data.    /// <
07a0: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72  /summary>.    pr
07b0: 69 76 61 74 65 20 53 51 4c 69 74 65 54 79 70 65  ivate SQLiteType
07c0: 5b 5d 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72  [] _fieldTypeArr
07d0: 61 79 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ay;..    /// <su
07e0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 54  mmary>.    /// T
07f0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
0800: 68 65 20 64 61 74 61 72 65 61 64 65 72 0a 20 20  he datareader.  
0810: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0820: 0a 20 20 20 20 70 72 69 76 61 74 65 20 43 6f 6d  .    private Com
0830: 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 5f 63 6f  mandBehavior _co
0840: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 3b 0a 0a  mmandBehavior;..
0850: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0860: 3e 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73 65 74  >.    /// If set
0870: 2c 20 74 68 65 6e 20 64 69 73 70 6f 73 65 20 6f  , then dispose o
0880: 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6f 62  f the command ob
0890: 6a 65 63 74 20 77 68 65 6e 20 74 68 65 20 72 65  ject when the re
08a0: 61 64 65 72 20 69 73 20 66 69 6e 69 73 68 65 64  ader is finished
08b0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
08c0: 72 79 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ry>.    internal
08d0: 20 62 6f 6f 6c 20 5f 64 69 73 70 6f 73 65 43 6f   bool _disposeCo
08e0: 6d 6d 61 6e 64 3b 0a 0a 20 20 20 20 2f 2f 2f 20  mmand;..    /// 
08f0: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
0900: 2f 20 49 66 20 73 65 74 2c 20 74 68 65 6e 20 72  / If set, then r
0910: 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f  aise an exceptio
0920: 6e 20 77 68 65 6e 20 74 68 65 20 6f 62 6a 65 63  n when the objec
0930: 74 20 69 73 20 61 63 63 65 73 73 65 64 20 61 66  t is accessed af
0940: 74 65 72 20 62 65 69 6e 67 20 64 69 73 70 6f 73  ter being dispos
0950: 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
0960: 6d 6d 61 72 79 3e 0a 20 20 20 20 69 6e 74 65 72  mmary>.    inter
0970: 6e 61 6c 20 62 6f 6f 6c 20 5f 74 68 72 6f 77 4f  nal bool _throwO
0980: 6e 44 69 73 70 6f 73 65 64 3b 0a 0a 20 20 20 20  nDisposed;..    
0990: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
09a0: 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f    /// An array o
09b0: 66 20 72 6f 77 69 64 27 73 20 66 6f 72 20 74 68  f rowid's for th
09c0: 65 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  e active stateme
09d0: 6e 74 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68  nt if CommandBeh
09e0: 61 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 20 69 73  avior.KeyInfo is
09f0: 20 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 2f   specified.    /
0a00: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
0a10: 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
0a20: 4b 65 79 52 65 61 64 65 72 20 5f 6b 65 79 49 6e  KeyReader _keyIn
0a30: 66 6f 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  fo;..    /// <su
0a40: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 4d  mmary>.    /// M
0a50: 61 74 63 68 65 73 20 74 68 65 20 76 65 72 73 69  atches the versi
0a60: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63  on of the connec
0a70: 74 69 6f 6e 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f  tion..    /// </
0a80: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 69 6e 74  summary>.    int
0a90: 65 72 6e 61 6c 20 6c 6f 6e 67 20 5f 76 65 72 73  ernal long _vers
0aa0: 69 6f 6e 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73  ion;..    /// <s
0ab0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0ac0: 54 68 65 20 22 73 74 75 62 22 20 28 69 2e 65 2e  The "stub" (i.e.
0ad0: 20 70 6c 61 63 65 68 6f 6c 64 65 72 29 20 62 61   placeholder) ba
0ae0: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 74  se schema name t
0af0: 6f 20 75 73 65 20 77 68 65 6e 20 72 65 74 75 72  o use when retur
0b00: 6e 69 6e 67 0a 20 20 20 20 2f 2f 2f 20 63 6f 6c  ning.    /// col
0b10: 75 6d 6e 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  umn schema infor
0b20: 6d 61 74 69 6f 6e 2e 20 20 4d 61 74 63 68 65 73  mation.  Matches
0b30: 20 74 68 65 20 62 61 73 65 20 73 63 68 65 6d 61   the base schema
0b40: 20 6e 61 6d 65 20 75 73 65 64 20 62 79 20 74 68   name used by th
0b50: 65 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69  e.    /// associ
0b60: 61 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  ated connection.
0b70: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0b80: 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20  ry>.    private 
0b90: 73 74 72 69 6e 67 20 5f 62 61 73 65 53 63 68 65  string _baseSche
0ba0: 6d 61 4e 61 6d 65 3b 0a 0a 20 20 20 20 2f 2f 2f  maName;..    ///
0bb0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
0bc0: 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73  // Internal cons
0bd0: 74 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c  tructor, initial
0be0: 69 7a 65 73 20 74 68 65 20 64 61 74 61 72 65 61  izes the datarea
0bf0: 64 65 72 20 61 6e 64 20 73 65 74 73 20 75 70 20  der and sets up 
0c00: 74 6f 20 62 65 67 69 6e 20 65 78 65 63 75 74 69  to begin executi
0c10: 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20  ng statements.  
0c20: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0c30: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0c40: 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65 20 53  name="cmd">The S
0c50: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74 68 69  QLiteCommand thi
0c60: 73 20 64 61 74 61 20 72 65 61 64 65 72 20 69 73  s data reader is
0c70: 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0a 20 20 20   for</param>.   
0c80: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0c90: 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20 65 78  ="behave">The ex
0ca0: 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20  pected behavior 
0cb0: 6f 66 20 74 68 65 20 64 61 74 61 20 72 65 61 64  of the data read
0cc0: 65 72 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 69  er</param>.    i
0cd0: 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 44 61  nternal SQLiteDa
0ce0: 74 61 52 65 61 64 65 72 28 53 51 4c 69 74 65 43  taReader(SQLiteC
0cf0: 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43 6f 6d 6d  ommand cmd, Comm
0d00: 61 6e 64 42 65 68 61 76 69 6f 72 20 62 65 68 61  andBehavior beha
0d10: 76 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ve).    {.      
0d20: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
0d30: 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 5f   = true;.      _
0d40: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6d 64 3b 0a 20  command = cmd;. 
0d50: 20 20 20 20 20 5f 76 65 72 73 69 6f 6e 20 3d 20       _version = 
0d60: 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74  _command.Connect
0d70: 69 6f 6e 2e 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  ion._version;.  
0d80: 20 20 20 20 5f 62 61 73 65 53 63 68 65 6d 61 4e      _baseSchemaN
0d90: 61 6d 65 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43  ame = _command.C
0da0: 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 62 61 73 65 53  onnection._baseS
0db0: 63 68 65 6d 61 4e 61 6d 65 3b 0a 0a 20 20 20 20  chemaName;..    
0dc0: 20 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69    _commandBehavi
0dd0: 6f 72 20 3d 20 62 65 68 61 76 65 3b 0a 20 20 20  or = behave;.   
0de0: 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d     _activeStatem
0df0: 65 6e 74 49 6e 64 65 78 20 3d 20 2d 31 3b 0a 20  entIndex = -1;. 
0e00: 20 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63 74       _rowsAffect
0e10: 65 64 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 20 20  ed = -1;..      
0e20: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
0e30: 2e 4f 6e 43 68 61 6e 67 65 64 28 47 65 74 43 6f  .OnChanged(GetCo
0e40: 6e 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 0a  nnection(this),.
0e50: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f            new Co
0e60: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
0e70: 73 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  s(SQLiteConnecti
0e80: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77 44  onEventType.NewD
0e90: 61 74 61 52 65 61 64 65 72 2c 0a 20 20 20 20 20  ataReader,.     
0ea0: 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c       null, null,
0eb0: 20 5f 63 6f 6d 6d 61 6e 64 2c 20 74 68 69 73 2c   _command, this,
0ec0: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 65 77   null, null, new
0ed0: 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 62 65 68 61   object[] { beha
0ee0: 76 65 20 7d 29 29 3b 0a 0a 20 20 20 20 20 20 69  ve }));..      i
0ef0: 66 20 28 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e  f (_command != n
0f00: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 20 20 4e  ull).          N
0f10: 65 78 74 52 65 73 75 6c 74 28 29 3b 0a 20 20 20  extResult();.   
0f20: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f   }..    ////////
0f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 0a 0a 20 20 20 20 23 72 65  ///////..    #re
0f90: 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65  gion IDisposable
0fa0: 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65   "Pattern" Membe
0fb0: 72 73 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  rs.    private b
0fc0: 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0a 20 20  ool disposed;.  
0fd0: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
0fe0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
0ff0: 2a 20 74 68 72 6f 77 20 2a 2f 0a 20 20 20 20 7b  * throw */.    {
1000: 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
1010: 53 50 4f 53 45 44 0a 20 20 20 20 20 20 20 20 69  SPOSED.        i
1020: 66 20 28 64 69 73 70 6f 73 65 64 20 26 26 20 5f  f (disposed && _
1030: 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29  throwOnDisposed)
1040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
1050: 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73  ow new ObjectDis
1060: 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74  posedException(t
1070: 79 70 65 6f 66 28 53 51 4c 69 74 65 44 61 74 61  ypeof(SQLiteData
1080: 52 65 61 64 65 72 29 2e 4e 61 6d 65 29 3b 0a 23  Reader).Name);.#
1090: 65 6e 64 69 66 0a 20 20 20 20 7d 0a 0a 20 20 20  endif.    }..   
10a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1110: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 44 69 73 70  ry>.    /// Disp
1120: 6f 73 65 20 6f 66 20 61 6c 6c 20 72 65 73 6f 75  ose of all resou
1130: 72 63 65 73 20 75 73 65 64 20 62 79 20 74 68 69  rces used by thi
1140: 73 20 64 61 74 61 72 65 61 64 65 72 2e 0a 20 20  s datareader..  
1150: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1160: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1170: 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22  name="disposing"
1180: 3e 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 70 72  ></param>.    pr
1190: 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65  otected override
11a0: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f   void Dispose(bo
11b0: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0a 20 20  ol disposing).  
11c0: 20 20 7b 0a 20 20 20 20 20 20 20 20 53 51 4c 69    {.        SQLi
11d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43  teConnection.OnC
11e0: 68 61 6e 67 65 64 28 47 65 74 43 6f 6e 6e 65 63  hanged(GetConnec
11f0: 74 69 6f 6e 28 74 68 69 73 29 2c 0a 20 20 20 20  tion(this),.    
1200: 20 20 20 20 20 20 20 20 6e 65 77 20 43 6f 6e 6e          new Conn
1210: 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28  ectionEventArgs(
1220: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1230: 45 76 65 6e 74 54 79 70 65 2e 44 69 73 70 6f 73  EventType.Dispos
1240: 69 6e 67 44 61 74 61 52 65 61 64 65 72 2c 0a 20  ingDataReader,. 
1250: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
1260: 20 6e 75 6c 6c 2c 20 5f 63 6f 6d 6d 61 6e 64 2c   null, _command,
1270: 20 74 68 69 73 2c 20 6e 75 6c 6c 2c 20 6e 75 6c   this, null, nul
1280: 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20  l, new object[] 
1290: 7b 20 64 69 73 70 6f 73 69 6e 67 2c 0a 20 20 20  { disposing,.   
12a0: 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65           dispose
12b0: 64 2c 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76  d, _commandBehav
12c0: 69 6f 72 2c 20 5f 72 65 61 64 69 6e 67 53 74 61  ior, _readingSta
12d0: 74 65 2c 20 5f 72 6f 77 73 41 66 66 65 63 74 65  te, _rowsAffecte
12e0: 64 2c 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 0a  d, _fieldCount,.
12f0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 64 69 73              _dis
1300: 70 6f 73 65 43 6f 6d 6d 61 6e 64 2c 20 5f 74 68  poseCommand, _th
1310: 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 20 7d 29  rowOnDisposed })
1320: 29 3b 0a 0a 20 20 20 20 20 20 20 20 74 72 79 0a  );..        try.
1330: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
1340: 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f        if (!dispo
1350: 73 65 64 29 0a 20 20 20 20 20 20 20 20 20 20 20  sed).           
1360: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1370: 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69     //if (disposi
1380: 6e 67 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng).            
1390: 20 20 20 20 2f 2f 7b 0a 20 20 20 20 20 20 20 20      //{.        
13a0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
13b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  //.             
13e0: 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70     //    // disp
13f0: 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f  ose managed reso
1400: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0a 20 20  urces here....  
1410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1420: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1440: 2f 2f 2f 2f 2f 2f 2f 2f 0a 20 20 20 20 20 20 20  ////////.       
1450: 20 20 20 20 20 20 20 20 20 2f 2f 7d 0a 0a 20 20           //}..  
1460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 0a 20 20 20 20 20 20 20 20 20 20 20  ////.           
14a0: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
14b0: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
14c0: 63 65 73 20 68 65 72 65 2e 2e 2e 0a 20 20 20 20  ces here....    
14d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
14e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1500: 2f 2f 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1510: 20 20 20 20 2f 2f 0a 20 20 20 20 20 20 20 20 20      //.         
1520: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1530: 46 69 78 20 66 6f 72 20 74 69 63 6b 65 74 20 5b  Fix for ticket [
1540: 65 31 62 32 65 30 66 37 36 39 5d 2c 20 64 6f 20  e1b2e0f769], do 
1550: 4e 4f 54 20 74 68 72 6f 77 20 65 78 63 65 70 74  NOT throw except
1560: 69 6f 6e 73 0a 20 20 20 20 20 20 20 20 20 20 20  ions.           
1570: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77 68       //       wh
1580: 69 6c 65 20 77 65 20 61 72 65 20 62 65 69 6e 67  ile we are being
1590: 20 64 69 73 70 6f 73 65 64 2e 0a 20 20 20 20 20   disposed..     
15a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0a 20 20             //.  
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 74                _t
15c0: 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 20 3d  hrowOnDisposed =
15d0: 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20   false;.        
15e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
15f0: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0a          finally.
1600: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
1610: 20 20 20 20 20 20 62 61 73 65 2e 44 69 73 70 6f        base.Dispo
1620: 73 65 28 64 69 73 70 6f 73 69 6e 67 29 3b 0a 0a  se(disposing);..
1630: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0a 20              //. 
1640: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1650: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
1660: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
1670: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
1680: 70 6f 69 6e 74 2e 0a 20 20 20 20 20 20 20 20 20  point..         
1690: 20 20 20 2f 2f 0a 20 20 20 20 20 20 20 20 20 20     //.          
16a0: 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75    disposed = tru
16b0: 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  e;.        }.   
16c0: 20 7d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f   }.    #endregio
16d0: 6e 0a 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  n..    /////////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 2f 2f 0a 0a 20 20 20 20 69 6e 74 65  //////..    inte
1740: 72 6e 61 6c 20 76 6f 69 64 20 43 61 6e 63 65 6c  rnal void Cancel
1750: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f  ().    {.      _
1760: 76 65 72 73 69 6f 6e 20 3d 20 30 3b 0a 20 20 20  version = 0;.   
1770: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
1780: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6c  mary>.    /// Cl
1790: 6f 73 65 73 20 74 68 65 20 64 61 74 61 72 65 61  oses the datarea
17a0: 64 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79  der, potentially
17b0: 20 63 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e   closing the con
17c0: 6e 65 63 74 69 6f 6e 20 61 73 20 77 65 6c 6c 20  nection as well 
17d0: 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69  if CommandBehavi
17e0: 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69  or.CloseConnecti
17f0: 6f 6e 20 77 61 73 20 73 70 65 63 69 66 69 65 64  on was specified
1800: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1810: 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  ary>.    public 
1820: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c  override void Cl
1830: 6f 73 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  ose().    {.    
1840: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
1850: 29 3b 0a 0a 20 20 20 20 20 20 74 72 79 0a 20 20  );..      try.  
1860: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66      {.        if
1870: 20 28 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75   (_command != nu
1880: 6c 6c 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  ll).        {.  
1890: 20 20 20 20 20 20 20 20 74 72 79 0a 20 20 20 20          try.    
18a0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
18b0: 20 20 20 20 74 72 79 0a 20 20 20 20 20 20 20 20      try.        
18c0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
18d0: 20 20 20 20 2f 2f 20 4d 61 6b 65 20 73 75 72 65      // Make sure
18e0: 20 77 65 27 76 65 20 6e 6f 74 20 62 65 65 6e 20   we've not been 
18f0: 63 61 6e 63 65 6c 65 64 0a 20 20 20 20 20 20 20  canceled.       
1900: 20 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73         if (_vers
1910: 69 6f 6e 20 21 3d 20 30 29 0a 20 20 20 20 20 20  ion != 0).      
1920: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
1930: 20 20 20 20 20 20 20 20 20 20 74 72 79 0a 20 20            try.  
1940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a                {.
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1960: 20 20 77 68 69 6c 65 20 28 4e 65 78 74 52 65 73    while (NextRes
1970: 75 6c 74 28 29 29 0a 20 20 20 20 20 20 20 20 20  ult()).         
1980: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
1990: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19c0: 20 63 61 74 63 68 28 53 51 4c 69 74 65 45 78 63   catch(SQLiteExc
19d0: 65 70 74 69 6f 6e 29 0a 20 20 20 20 20 20 20 20  eption).        
19e0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
19f0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1a00: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1a10: 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61            _comma
1a20: 6e 64 2e 43 6c 65 61 72 44 61 74 61 52 65 61 64  nd.ClearDataRead
1a30: 65 72 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20  er();.          
1a40: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
1a50: 66 69 6e 61 6c 6c 79 0a 20 20 20 20 20 20 20 20  finally.        
1a60: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
1a70: 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20 64 61      // If the da
1a80: 74 61 72 65 61 64 65 72 27 73 20 62 65 68 61 76  tareader's behav
1a90: 69 6f 72 20 69 6e 63 6c 75 64 65 73 20 63 6c 6f  ior includes clo
1aa0: 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
1ab0: 69 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73 6f 20  ion, then do so 
1ac0: 68 65 72 65 2e 0a 20 20 20 20 20 20 20 20 20 20  here..          
1ad0: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
1ae0: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
1af0: 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73  andBehavior.Clos
1b00: 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 21 3d 20  eConnection) != 
1b10: 30 20 26 26 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  0 && _command.Co
1b20: 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  nnection != null
1b30: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
1b40: 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65    _command.Conne
1b50: 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0a 20  ction.Close();. 
1b60: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
1b70: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1b80: 20 20 20 66 69 6e 61 6c 6c 79 0a 20 20 20 20 20     finally.     
1b90: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
1ba0: 20 20 20 69 66 20 28 5f 64 69 73 70 6f 73 65 43     if (_disposeC
1bb0: 6f 6d 6d 61 6e 64 29 0a 20 20 20 20 20 20 20 20  ommand).        
1bc0: 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 44        _command.D
1bd0: 69 73 70 6f 73 65 28 29 3b 0a 20 20 20 20 20 20  ispose();.      
1be0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
1bf0: 0a 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e  .        _comman
1c00: 64 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  d = null;.      
1c10: 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65    _activeStateme
1c20: 6e 74 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20  nt = null;.     
1c30: 20 20 20 5f 66 69 65 6c 64 49 6e 64 65 78 65 73     _fieldIndexes
1c40: 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20   = null;.       
1c50: 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79   _fieldTypeArray
1c60: 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 7d   = null;.      }
1c70: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0a 20  .      finally. 
1c80: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69       {.        i
1c90: 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  f (_keyInfo != n
1ca0: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  ull).        {. 
1cb0: 20 20 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66           _keyInf
1cc0: 6f 2e 44 69 73 70 6f 73 65 28 29 3b 0a 20 20 20  o.Dispose();.   
1cd0: 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 20         _keyInfo 
1ce0: 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  = null;.        
1cf0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
1d00: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1d10: 79 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77  y>.    /// Throw
1d20: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
1d30: 20 64 61 74 61 72 65 61 64 65 72 20 69 73 20 63   datareader is c
1d40: 6c 6f 73 65 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f  losed.    /// </
1d50: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69  summary>.    pri
1d60: 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 43  vate void CheckC
1d70: 6c 6f 73 65 64 28 29 0a 20 20 20 20 7b 0a 20 20  losed().    {.  
1d80: 20 20 20 20 69 66 20 28 21 5f 74 68 72 6f 77 4f      if (!_throwO
1d90: 6e 44 69 73 70 6f 73 65 64 29 0a 20 20 20 20 20  nDisposed).     
1da0: 20 20 20 72 65 74 75 72 6e 3b 0a 0a 20 20 20 20     return;..    
1db0: 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64 20 3d    if (_command =
1dc0: 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20  = null).        
1dd0: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
1de0: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
1df0: 69 6f 6e 28 22 44 61 74 61 52 65 61 64 65 72 20  ion("DataReader 
1e00: 68 61 73 20 62 65 65 6e 20 63 6c 6f 73 65 64 22  has been closed"
1e10: 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 5f 76  );..      if (_v
1e20: 65 72 73 69 6f 6e 20 3d 3d 20 30 29 0a 20 20 20  ersion == 0).   
1e30: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
1e40: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
1e50: 45 78 65 63 75 74 69 6f 6e 20 77 61 73 20 61 62  Execution was ab
1e60: 6f 72 74 65 64 20 62 79 20 74 68 65 20 75 73 65  orted by the use
1e70: 72 22 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28  r");..      if (
1e80: 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74  _command.Connect
1e90: 69 6f 6e 2e 53 74 61 74 65 20 21 3d 20 43 6f 6e  ion.State != Con
1ea0: 6e 65 63 74 69 6f 6e 53 74 61 74 65 2e 4f 70 65  nectionState.Ope
1eb0: 6e 20 7c 7c 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f  n || _command.Co
1ec0: 6e 6e 65 63 74 69 6f 6e 2e 5f 76 65 72 73 69 6f  nnection._versio
1ed0: 6e 20 21 3d 20 5f 76 65 72 73 69 6f 6e 29 0a 20  n != _version). 
1ee0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
1ef0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
1f00: 6e 45 78 63 65 70 74 69 6f 6e 28 22 43 6f 6e 6e  nException("Conn
1f10: 65 63 74 69 6f 6e 20 77 61 73 20 63 6c 6f 73 65  ection was close
1f20: 64 2c 20 73 74 61 74 65 6d 65 6e 74 20 77 61 73  d, statement was
1f30: 20 74 65 72 6d 69 6e 61 74 65 64 22 29 3b 0a 20   terminated");. 
1f40: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
1f50: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
1f60: 54 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 20 69  Throw an error i
1f70: 66 20 61 20 72 6f 77 20 69 73 20 6e 6f 74 20 6c  f a row is not l
1f80: 6f 61 64 65 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f  oaded.    /// </
1f90: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69  summary>.    pri
1fa0: 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 56  vate void CheckV
1fb0: 61 6c 69 64 52 6f 77 28 29 0a 20 20 20 20 7b 0a  alidRow().    {.
1fc0: 20 20 20 20 20 20 69 66 20 28 5f 72 65 61 64 69        if (_readi
1fd0: 6e 67 53 74 61 74 65 20 21 3d 20 30 29 0a 20 20  ngState != 0).  
1fe0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1ff0: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
2000: 45 78 63 65 70 74 69 6f 6e 28 22 4e 6f 20 63 75  Exception("No cu
2010: 72 72 65 6e 74 20 72 6f 77 22 29 3b 0a 20 20 20  rrent row");.   
2020: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
2030: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 45 6e  mary>.    /// En
2040: 75 6d 65 72 61 74 6f 72 20 73 75 70 70 6f 72 74  umerator support
2050: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2060: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  ry>.    /// <ret
2070: 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 44  urns>Returns a D
2080: 62 45 6e 75 6d 65 72 61 74 6f 72 20 6f 62 6a 65  bEnumerator obje
2090: 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  ct.</returns>.  
20a0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
20b0: 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 49 45  e Collections.IE
20c0: 6e 75 6d 65 72 61 74 6f 72 20 47 65 74 45 6e 75  numerator GetEnu
20d0: 6d 65 72 61 74 6f 72 28 29 0a 20 20 20 20 7b 0a  merator().    {.
20e0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
20f0: 73 65 64 28 29 3b 0a 20 20 20 20 20 20 72 65 74  sed();.      ret
2100: 75 72 6e 20 6e 65 77 20 44 62 45 6e 75 6d 65 72  urn new DbEnumer
2110: 61 74 6f 72 28 74 68 69 73 2c 20 28 28 5f 63 6f  ator(this, ((_co
2120: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20  mmandBehavior & 
2130: 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e  CommandBehavior.
2140: 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 29  CloseConnection)
2150: 20 3d 3d 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76   == CommandBehav
2160: 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74  ior.CloseConnect
2170: 69 6f 6e 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ion));.    }..  
2180: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
2190: 20 20 20 20 2f 2f 2f 20 4e 6f 74 20 69 6d 70 6c      /// Not impl
21a0: 65 6d 65 6e 74 65 64 2e 20 20 52 65 74 75 72 6e  emented.  Return
21b0: 73 20 30 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s 0.    /// </su
21c0: 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69  mmary>.    publi
21d0: 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 44  c override int D
21e0: 65 70 74 68 0a 20 20 20 20 7b 0a 20 20 20 20 20  epth.    {.     
21f0: 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20   get.      {.   
2200: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2210: 65 64 28 29 3b 0a 20 20 20 20 20 20 20 20 43 68  ed();.        Ch
2220: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20  eckClosed();.   
2230: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20       return 0;. 
2240: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
2250: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
2260: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
2270: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
2280: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 63 75 72  lumns in the cur
2290: 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 0a 20  rent resultset. 
22a0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
22b0: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
22c0: 72 72 69 64 65 20 69 6e 74 20 46 69 65 6c 64 43  rride int FieldC
22d0: 6f 75 6e 74 0a 20 20 20 20 7b 0a 20 20 20 20 20  ount.    {.     
22e0: 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20   get.      {.   
22f0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2300: 65 64 28 29 3b 0a 20 20 20 20 20 20 20 20 43 68  ed();.        Ch
2310: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 0a 20 20  eckClosed();..  
2320: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
2330: 66 6f 20 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  fo == null).    
2340: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69        return _fi
2350: 65 6c 64 43 6f 75 6e 74 3b 0a 0a 20 20 20 20 20  eldCount;..     
2360: 20 20 20 72 65 74 75 72 6e 20 5f 66 69 65 6c 64     return _field
2370: 43 6f 75 6e 74 20 2b 20 5f 6b 65 79 49 6e 66 6f  Count + _keyInfo
2380: 2e 43 6f 75 6e 74 3b 0a 20 20 20 20 20 20 7d 0a  .Count;.      }.
2390: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
23a0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
23b0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   Returns the num
23c0: 62 65 72 20 6f 66 20 76 69 73 69 62 6c 65 20 66  ber of visible f
23d0: 69 65 6c 64 73 20 69 6e 20 74 68 65 20 63 75 72  ields in the cur
23e0: 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74 0a 20  rent resultset. 
23f0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2400: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
2410: 72 72 69 64 65 20 69 6e 74 20 56 69 73 69 62 6c  rride int Visibl
2420: 65 46 69 65 6c 64 43 6f 75 6e 74 0a 20 20 20 20  eFieldCount.    
2430: 7b 0a 20 20 20 20 20 20 67 65 74 0a 20 20 20 20  {.      get.    
2440: 20 20 7b 0a 20 20 20 20 20 20 20 20 43 68 65 63    {.        Chec
2450: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 20 20 20  kDisposed();.   
2460: 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64       CheckClosed
2470: 28 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  ();.        retu
2480: 72 6e 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0a  rn _fieldCount;.
2490: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
24a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
24b0: 0a 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20  .    /// SQLite 
24c0: 69 73 20 69 6e 68 65 72 65 6e 74 6c 79 20 75 6e  is inherently un
24d0: 2d 74 79 70 65 64 2e 20 20 41 6c 6c 20 64 61 74  -typed.  All dat
24e0: 61 74 79 70 65 73 20 69 6e 20 53 51 4c 69 74 65  atypes in SQLite
24f0: 20 61 72 65 20 6e 61 74 69 76 65 6c 79 20 73 74   are natively st
2500: 72 69 6e 67 73 2e 20 20 54 68 65 20 64 65 66 69  rings.  The defi
2510: 6e 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  nition of the co
2520: 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65  lumns of a table
2530: 0a 20 20 20 20 2f 2f 2f 20 61 6e 64 20 74 68 65  .    /// and the
2540: 20 61 66 66 69 6e 69 74 79 20 6f 66 20 72 65 74   affinity of ret
2550: 75 72 6e 65 64 20 74 79 70 65 73 20 61 72 65 20  urned types are 
2560: 61 6c 6c 20 77 65 20 68 61 76 65 20 74 6f 20 67  all we have to g
2570: 6f 20 6f 6e 20 74 6f 20 74 79 70 65 2d 72 65 73  o on to type-res
2580: 74 72 69 63 74 20 64 61 74 61 20 69 6e 20 74 68  trict data in th
2590: 65 20 72 65 61 64 65 72 2e 0a 20 20 20 20 2f 2f  e reader..    //
25a0: 2f 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66  /.    /// This f
25b0: 75 6e 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73  unction attempts
25c0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
25d0: 74 68 65 20 74 79 70 65 20 6f 66 20 64 61 74 61  the type of data
25e0: 20 62 65 69 6e 67 20 72 65 71 75 65 73 74 65 64   being requested
25f0: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6d 61 74   of a column mat
2600: 63 68 65 73 20 74 68 65 20 64 61 74 61 74 79 70  ches the datatyp
2610: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  e of the column.
2620: 20 20 49 6e 0a 20 20 20 20 2f 2f 2f 20 74 68 65    In.    /// the
2630: 20 63 61 73 65 20 6f 66 20 63 6f 6c 75 6d 6e 73   case of columns
2640: 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 62 61   that are not ba
2650: 63 6b 65 64 20 69 6e 74 6f 20 61 20 74 61 62 6c  cked into a tabl
2660: 65 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 77 65  e definition, we
2670: 20 61 74 74 65 6d 70 74 20 74 6f 20 6d 61 74 63   attempt to matc
2680: 68 20 75 70 20 74 68 65 20 61 66 66 69 6e 69 74  h up the affinit
2690: 79 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 28 69  y of a column (i
26a0: 6e 74 2c 20 64 6f 75 62 6c 65 2c 20 73 74 72 69  nt, double, stri
26b0: 6e 67 20 6f 72 20 62 6c 6f 62 29 0a 20 20 20 20  ng or blob).    
26c0: 2f 2f 2f 20 74 6f 20 61 20 73 65 74 20 6f 66 20  /// to a set of 
26d0: 6b 6e 6f 77 6e 20 74 79 70 65 73 20 74 68 61 74  known types that
26e0: 20 63 6c 6f 73 65 6c 79 20 6d 61 74 63 68 20 74   closely match t
26f0: 68 61 74 20 61 66 66 69 6e 69 74 79 2e 20 20 49  hat affinity.  I
2700: 74 27 73 20 6e 6f 74 20 61 6e 20 65 78 61 63 74  t's not an exact
2710: 20 73 63 69 65 6e 63 65 2c 20 62 75 74 20 69 74   science, but it
2720: 73 20 74 68 65 20 62 65 73 74 20 77 65 20 63 61  s the best we ca
2730: 6e 20 64 6f 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f  n do..    /// </
2740: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
2750: 20 3c 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 2f   <returns>.    /
2760: 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  // This function
2770: 20 74 68 72 6f 77 73 20 61 6e 20 49 6e 76 61 6c   throws an Inval
2780: 69 64 54 79 70 65 43 61 73 74 28 29 20 65 78 63  idTypeCast() exc
2790: 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 72 65  eption if the re
27a0: 71 75 65 73 74 65 64 20 74 79 70 65 20 64 6f 65  quested type doe
27b0: 73 6e 27 74 20 6d 61 74 63 68 20 74 68 65 20 63  sn't match the c
27c0: 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e 69 74 69  olumn's definiti
27d0: 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74 79 2e 0a  on or affinity..
27e0: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
27f0: 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  s>.    /// <para
2800: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
2810: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
2820: 6d 6e 20 74 6f 20 74 79 70 65 2d 63 68 65 63 6b  mn to type-check
2830: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
2840: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79   <param name="ty
2850: 70 22 3e 54 68 65 20 74 79 70 65 20 77 65 20 77  p">The type we w
2860: 61 6e 74 20 74 6f 20 67 65 74 20 6f 75 74 20 6f  ant to get out o
2870: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 70 61  f the column</pa
2880: 72 61 6d 3e 0a 20 20 20 20 70 72 69 76 61 74 65  ram>.    private
2890: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 56 65   TypeAffinity Ve
28a0: 72 69 66 79 54 79 70 65 28 69 6e 74 20 69 2c 20  rifyType(int i, 
28b0: 44 62 54 79 70 65 20 74 79 70 29 0a 20 20 20 20  DbType typ).    
28c0: 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  {.      CheckClo
28d0: 73 65 64 28 29 3b 0a 20 20 20 20 20 20 43 68 65  sed();.      Che
28e0: 63 6b 56 61 6c 69 64 52 6f 77 28 29 3b 0a 0a 20  ckValidRow();.. 
28f0: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
2900: 79 20 61 66 66 69 6e 69 74 79 20 3d 20 47 65 74  y affinity = Get
2910: 53 51 4c 69 74 65 54 79 70 65 28 69 29 2e 41 66  SQLiteType(i).Af
2920: 66 69 6e 69 74 79 3b 0a 0a 20 20 20 20 20 20 73  finity;..      s
2930: 77 69 74 63 68 20 28 61 66 66 69 6e 69 74 79 29  witch (affinity)
2940: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
2950: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
2960: 74 79 2e 49 6e 74 36 34 3a 0a 20 20 20 20 20 20  ty.Int64:.      
2970: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
2980: 62 54 79 70 65 2e 49 6e 74 31 36 29 20 72 65 74  bType.Int16) ret
2990: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20  urn affinity;.  
29a0: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
29b0: 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29  == DbType.Int32)
29c0: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
29d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ;.          if (
29e0: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e  typ == DbType.In
29f0: 74 36 34 29 20 72 65 74 75 72 6e 20 61 66 66 69  t64) return affi
2a00: 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20  nity;.          
2a10: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
2a20: 65 2e 42 6f 6f 6c 65 61 6e 29 20 72 65 74 75 72  e.Boolean) retur
2a30: 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20  n affinity;.    
2a40: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
2a50: 20 44 62 54 79 70 65 2e 42 79 74 65 29 20 72 65   DbType.Byte) re
2a60: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20  turn affinity;. 
2a70: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
2a80: 20 3d 3d 20 44 62 54 79 70 65 2e 44 61 74 65 54   == DbType.DateT
2a90: 69 6d 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  ime) return affi
2aa0: 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20  nity;.          
2ab0: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
2ac0: 65 2e 53 69 6e 67 6c 65 29 20 72 65 74 75 72 6e  e.Single) return
2ad0: 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20   affinity;.     
2ae0: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
2af0: 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 20 72  DbType.Double) r
2b00: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a  eturn affinity;.
2b10: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
2b20: 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 65 63 69  p == DbType.Deci
2b30: 6d 61 6c 29 20 72 65 74 75 72 6e 20 61 66 66 69  mal) return affi
2b40: 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20  nity;.          
2b50: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
2b60: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
2b70: 2e 44 6f 75 62 6c 65 3a 0a 20 20 20 20 20 20 20  .Double:.       
2b80: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
2b90: 54 79 70 65 2e 53 69 6e 67 6c 65 29 20 72 65 74  Type.Single) ret
2ba0: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20  urn affinity;.  
2bb0: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
2bc0: 3d 3d 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65  == DbType.Double
2bd0: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
2be0: 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  y;.          if 
2bf0: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44  (typ == DbType.D
2c00: 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e 20 61  ecimal) return a
2c10: 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20  ffinity;.       
2c20: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
2c30: 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29 20 72  Type.DateTime) r
2c40: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a  eturn affinity;.
2c50: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
2c60: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
2c70: 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3a  peAffinity.Text:
2c80: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
2c90: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 42 79  yp == DbType.SBy
2ca0: 74 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  te) return affin
2cb0: 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69  ity;.          i
2cc0: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
2cd0: 2e 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e 20  .String) return 
2ce0: 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20  affinity;.      
2cf0: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
2d00: 62 54 79 70 65 2e 53 42 79 74 65 29 20 72 65 74  bType.SByte) ret
2d10: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20  urn affinity;.  
2d20: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
2d30: 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29 20  == DbType.Guid) 
2d40: 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b  return affinity;
2d50: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
2d60: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 61 74  yp == DbType.Dat
2d70: 65 54 69 6d 65 29 20 72 65 74 75 72 6e 20 61 66  eTime) return af
2d80: 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20  finity;.        
2d90: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
2da0: 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72 65 74  ype.Decimal) ret
2db0: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20  urn affinity;.  
2dc0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2dd0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
2de0: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0a 20  Affinity.Blob:. 
2df0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
2e00: 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29   == DbType.Guid)
2e10: 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79   return affinity
2e20: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ;.          if (
2e30: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 74  typ == DbType.St
2e40: 72 69 6e 67 29 20 72 65 74 75 72 6e 20 61 66 66  ring) return aff
2e50: 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20  inity;.         
2e60: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
2e70: 70 65 2e 42 69 6e 61 72 79 29 20 72 65 74 75 72  pe.Binary) retur
2e80: 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20  n affinity;.    
2e90: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2ea0: 20 20 20 7d 0a 0a 20 20 20 20 20 20 74 68 72 6f     }..      thro
2eb0: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 43 61 73  w new InvalidCas
2ec0: 74 45 78 63 65 70 74 69 6f 6e 28 29 3b 0a 20 20  tException();.  
2ed0: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
2ee0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
2ef0: 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c  etrieves the col
2f00: 75 6d 6e 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e  umn as a boolean
2f10: 20 76 61 6c 75 65 0a 20 20 20 20 2f 2f 2f 20 3c   value.    /// <
2f20: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
2f30: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
2f40: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
2f50: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
2f60: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  rieve</param>.  
2f70: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62    /// <returns>b
2f80: 6f 6f 6c 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  ool</returns>.  
2f90: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
2fa0: 65 20 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65 61  e bool GetBoolea
2fb0: 6e 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20  n(int i).    {. 
2fc0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2fd0: 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20  ed();..      if 
2fe0: 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65  (i >= VisibleFie
2ff0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
3000: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
3010: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
3020: 49 6e 66 6f 2e 47 65 74 42 6f 6f 6c 65 61 6e 28  Info.GetBoolean(
3030: 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64  i - VisibleField
3040: 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56  Count);..      V
3050: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
3060: 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 3b 0a 20 20  ype.Boolean);.  
3070: 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65      return Conve
3080: 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28 47 65 74  rt.ToBoolean(Get
3090: 56 61 6c 75 65 28 69 29 2c 20 43 75 6c 74 75 72  Value(i), Cultur
30a0: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
30b0: 74 75 72 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ture);.    }..  
30c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
30d0: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
30e0: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
30f0: 61 20 73 69 6e 67 6c 65 20 62 79 74 65 20 76 61  a single byte va
3100: 6c 75 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  lue.    /// </su
3110: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
3120: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
3130: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
3140: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
3150: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
3160: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62 79 74 65  // <returns>byte
3170: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
3180: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62  ublic override b
3190: 79 74 65 20 47 65 74 42 79 74 65 28 69 6e 74 20  yte GetByte(int 
31a0: 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43  i).    {.      C
31b0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a  heckDisposed();.
31c0: 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20  .      if (i >= 
31d0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
31e0: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
31f0: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72   null).        r
3200: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
3210: 65 74 42 79 74 65 28 69 20 2d 20 56 69 73 69 62  etByte(i - Visib
3220: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a  leFieldCount);..
3230: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
3240: 28 69 2c 20 44 62 54 79 70 65 2e 42 79 74 65 29  (i, DbType.Byte)
3250: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 43  ;.      return C
3260: 6f 6e 76 65 72 74 2e 54 6f 42 79 74 65 28 5f 61  onvert.ToByte(_a
3270: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
3280: 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63  sql.GetInt32(_ac
3290: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
32a0: 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ));.    }..    /
32b0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
32c0: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 61   /// Retrieves a
32d0: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 61 72   column as an ar
32e0: 72 61 79 20 6f 66 20 62 79 74 65 73 20 28 62 6c  ray of bytes (bl
32f0: 6f 62 29 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ob).    /// </su
3300: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
3310: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
3320: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
3330: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
3340: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
3350: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3360: 66 69 65 6c 64 4f 66 66 73 65 74 22 3e 54 68 65  fieldOffset">The
3370: 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65   zero-based inde
3380: 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65  x of where to be
3390: 67 69 6e 20 72 65 61 64 69 6e 67 20 74 68 65 20  gin reading the 
33a0: 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  data</param>.   
33b0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
33c0: 3d 22 62 75 66 66 65 72 22 3e 54 68 65 20 62 75  ="buffer">The bu
33d0: 66 66 65 72 20 74 6f 20 77 72 69 74 65 20 74 68  ffer to write th
33e0: 65 20 62 79 74 65 73 20 69 6e 74 6f 3c 2f 70 61  e bytes into</pa
33f0: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ram>.    /// <pa
3400: 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72  ram name="buffer
3410: 6f 66 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f  offset">The zero
3420: 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20  -based index of 
3430: 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e 20 77  where to begin w
3440: 72 69 74 69 6e 67 20 69 6e 74 6f 20 74 68 65 20  riting into the 
3450: 61 72 72 61 79 3c 2f 70 61 72 61 6d 3e 0a 20 20  array</param>.  
3460: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
3470: 65 3d 22 6c 65 6e 67 74 68 22 3e 54 68 65 20 6e  e="length">The n
3480: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74  umber of bytes t
3490: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
34a0: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
34b0: 72 6e 73 3e 54 68 65 20 61 63 74 75 61 6c 20 6e  rns>The actual n
34c0: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 77  umber of bytes w
34d0: 72 69 74 74 65 6e 20 69 6e 74 6f 20 74 68 65 20  ritten into the 
34e0: 61 72 72 61 79 3c 2f 72 65 74 75 72 6e 73 3e 0a  array</returns>.
34f0: 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73      /// <remarks
3500: 3e 0a 20 20 20 20 2f 2f 2f 20 54 6f 20 64 65 74  >.    /// To det
3510: 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
3520: 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
3530: 65 20 63 6f 6c 75 6d 6e 2c 20 70 61 73 73 20 61  e column, pass a
3540: 20 6e 75 6c 6c 20 76 61 6c 75 65 20 66 6f 72 20   null value for 
3550: 74 68 65 20 62 75 66 66 65 72 2e 20 20 54 68 65  the buffer.  The
3560: 20 74 6f 74 61 6c 20 6c 65 6e 67 74 68 20 77 69   total length wi
3570: 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0a  ll be returned..
3580: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
3590: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
35a0: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42  erride long GetB
35b0: 79 74 65 73 28 69 6e 74 20 69 2c 20 6c 6f 6e 67  ytes(int i, long
35c0: 20 66 69 65 6c 64 4f 66 66 73 65 74 2c 20 62 79   fieldOffset, by
35d0: 74 65 5b 5d 20 62 75 66 66 65 72 2c 20 69 6e 74  te[] buffer, int
35e0: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 69   bufferoffset, i
35f0: 6e 74 20 6c 65 6e 67 74 68 29 0a 20 20 20 20 7b  nt length).    {
3600: 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70  .      CheckDisp
3610: 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69  osed();..      i
3620: 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46  f (i >= VisibleF
3630: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
3640: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20  yInfo != null). 
3650: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
3660: 65 79 49 6e 66 6f 2e 47 65 74 42 79 74 65 73 28  eyInfo.GetBytes(
3670: 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64  i - VisibleField
3680: 43 6f 75 6e 74 2c 20 66 69 65 6c 64 4f 66 66 73  Count, fieldOffs
3690: 65 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66  et, buffer, buff
36a0: 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68  eroffset, length
36b0: 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66 79  );..      Verify
36c0: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42  Type(i, DbType.B
36d0: 69 6e 61 72 79 29 3b 0a 20 20 20 20 20 20 72 65  inary);.      re
36e0: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
36f0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79  ement._sql.GetBy
3700: 74 65 73 28 5f 61 63 74 69 76 65 53 74 61 74 65  tes(_activeState
3710: 6d 65 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69  ment, i, (int)fi
3720: 65 6c 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65  eldOffset, buffe
3730: 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c  r, bufferoffset,
3740: 20 6c 65 6e 67 74 68 29 3b 0a 20 20 20 20 7d 0a   length);.    }.
3750: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3760: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  y>.    /// Retur
3770: 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73  ns the column as
3780: 20 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63   a single charac
3790: 74 65 72 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ter.    /// </su
37a0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
37b0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
37c0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
37d0: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
37e0: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
37f0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 63 68 61 72  // <returns>char
3800: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
3810: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 63  ublic override c
3820: 68 61 72 20 47 65 74 43 68 61 72 28 69 6e 74 20  har GetChar(int 
3830: 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43  i).    {.      C
3840: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a  heckDisposed();.
3850: 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20  .      if (i >= 
3860: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
3870: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
3880: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72   null).        r
3890: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
38a0: 65 74 43 68 61 72 28 69 20 2d 20 56 69 73 69 62  etChar(i - Visib
38b0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a  leFieldCount);..
38c0: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
38d0: 28 69 2c 20 44 62 54 79 70 65 2e 53 42 79 74 65  (i, DbType.SByte
38e0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
38f0: 43 6f 6e 76 65 72 74 2e 54 6f 43 68 61 72 28 5f  Convert.ToChar(_
3900: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
3910: 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61  _sql.GetInt32(_a
3920: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
3930: 69 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  i));.    }..    
3940: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
3950: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
3960: 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 61  a column as an a
3970: 72 72 61 79 20 6f 66 20 63 68 61 72 73 20 28 62  rray of chars (b
3980: 6c 6f 62 29 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  lob).    /// </s
3990: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
39a0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
39b0: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
39c0: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
39d0: 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  eve</param>.    
39e0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
39f0: 22 66 69 65 6c 64 6f 66 66 73 65 74 22 3e 54 68  "fieldoffset">Th
3a00: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64  e zero-based ind
3a10: 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62  ex of where to b
3a20: 65 67 69 6e 20 72 65 61 64 69 6e 67 20 74 68 65  egin reading the
3a30: 20 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0a 20 20   data</param>.  
3a40: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
3a50: 65 3d 22 62 75 66 66 65 72 22 3e 54 68 65 20 62  e="buffer">The b
3a60: 75 66 66 65 72 20 74 6f 20 77 72 69 74 65 20 74  uffer to write t
3a70: 68 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  he characters in
3a80: 74 6f 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  to</param>.    /
3a90: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3aa0: 62 75 66 66 65 72 6f 66 66 73 65 74 22 3e 54 68  bufferoffset">Th
3ab0: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64  e zero-based ind
3ac0: 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62  ex of where to b
3ad0: 65 67 69 6e 20 77 72 69 74 69 6e 67 20 69 6e 74  egin writing int
3ae0: 6f 20 74 68 65 20 61 72 72 61 79 3c 2f 70 61 72  o the array</par
3af0: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  am>.    /// <par
3b00: 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22  am name="length"
3b10: 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62  >The number of b
3b20: 79 74 65 73 20 74 6f 20 72 65 74 72 69 65 76 65  ytes to retrieve
3b30: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
3b40: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 61 63   <returns>The ac
3b50: 74 75 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63  tual number of c
3b60: 68 61 72 61 63 74 65 72 73 20 77 72 69 74 74 65  haracters writte
3b70: 6e 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79  n into the array
3b80: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 2f  </returns>.    /
3b90: 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a 20 20 20  // <remarks>.   
3ba0: 20 2f 2f 2f 20 54 6f 20 64 65 74 65 72 6d 69 6e   /// To determin
3bb0: 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
3bc0: 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
3bd0: 65 20 63 6f 6c 75 6d 6e 2c 20 70 61 73 73 20 61  e column, pass a
3be0: 20 6e 75 6c 6c 20 76 61 6c 75 65 20 66 6f 72 20   null value for 
3bf0: 74 68 65 20 62 75 66 66 65 72 2e 20 20 54 68 65  the buffer.  The
3c00: 20 74 6f 74 61 6c 20 6c 65 6e 67 74 68 20 77 69   total length wi
3c10: 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0a  ll be returned..
3c20: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
3c30: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
3c40: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43  erride long GetC
3c50: 68 61 72 73 28 69 6e 74 20 69 2c 20 6c 6f 6e 67  hars(int i, long
3c60: 20 66 69 65 6c 64 6f 66 66 73 65 74 2c 20 63 68   fieldoffset, ch
3c70: 61 72 5b 5d 20 62 75 66 66 65 72 2c 20 69 6e 74  ar[] buffer, int
3c80: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 69   bufferoffset, i
3c90: 6e 74 20 6c 65 6e 67 74 68 29 0a 20 20 20 20 7b  nt length).    {
3ca0: 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70  .      CheckDisp
3cb0: 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69  osed();..      i
3cc0: 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46  f (i >= VisibleF
3cd0: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
3ce0: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20  yInfo != null). 
3cf0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
3d00: 65 79 49 6e 66 6f 2e 47 65 74 43 68 61 72 73 28  eyInfo.GetChars(
3d10: 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64  i - VisibleField
3d20: 43 6f 75 6e 74 2c 20 66 69 65 6c 64 6f 66 66 73  Count, fieldoffs
3d30: 65 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66  et, buffer, buff
3d40: 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68  eroffset, length
3d50: 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66 79  );..      Verify
3d60: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53  Type(i, DbType.S
3d70: 74 72 69 6e 67 29 3b 0a 20 20 20 20 20 20 72 65  tring);.      re
3d80: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
3d90: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 43 68  ement._sql.GetCh
3da0: 61 72 73 28 5f 61 63 74 69 76 65 53 74 61 74 65  ars(_activeState
3db0: 6d 65 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69  ment, i, (int)fi
3dc0: 65 6c 64 6f 66 66 73 65 74 2c 20 62 75 66 66 65  eldoffset, buffe
3dd0: 72 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c  r, bufferoffset,
3de0: 20 6c 65 6e 67 74 68 29 3b 0a 20 20 20 20 7d 0a   length);.    }.
3df0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3e00: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  y>.    /// Retri
3e10: 65 76 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  eves the name of
3e20: 20 74 68 65 20 62 61 63 6b 2d 65 6e 64 20 64 61   the back-end da
3e30: 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f  tatype of the co
3e40: 6c 75 6d 6e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  lumn.    /// </s
3e50: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
3e60: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
3e70: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
3e80: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
3e90: 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  eve</param>.    
3ea0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72  /// <returns>str
3eb0: 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  ing</returns>.  
3ec0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
3ed0: 65 20 73 74 72 69 6e 67 20 47 65 74 44 61 74 61  e string GetData
3ee0: 54 79 70 65 4e 61 6d 65 28 69 6e 74 20 69 29 0a  TypeName(int i).
3ef0: 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63      {.      Chec
3f00: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20  kDisposed();..  
3f10: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73      if (i >= Vis
3f20: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
3f30: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
3f40: 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74 75  ll).        retu
3f50: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44  rn _keyInfo.GetD
3f60: 61 74 61 54 79 70 65 4e 61 6d 65 28 69 20 2d 20  ataTypeName(i - 
3f70: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
3f80: 74 29 3b 0a 0a 20 20 20 20 20 20 53 51 4c 69 74  t);..      SQLit
3f90: 65 54 79 70 65 20 74 79 70 20 3d 20 47 65 74 53  eType typ = GetS
3fa0: 51 4c 69 74 65 54 79 70 65 28 69 29 3b 0a 20 20  QLiteType(i);.  
3fb0: 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65      if (typ.Type
3fc0: 20 3d 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63   == DbType.Objec
3fd0: 74 29 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65  t) return SQLite
3fe0: 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79  Convert.SQLiteTy
3ff0: 70 65 54 6f 54 79 70 65 28 74 79 70 29 2e 4e 61  peToType(typ).Na
4000: 6d 65 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  me;.      return
4010: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
4020: 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70  t._sql.ColumnTyp
4030: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
4040: 6e 74 2c 20 69 2c 20 6f 75 74 20 74 79 70 2e 41  nt, i, out typ.A
4050: 66 66 69 6e 69 74 79 29 3b 0a 20 20 20 20 7d 0a  ffinity);.    }.
4060: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
4070: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  y>.    /// Retri
4080: 65 76 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  eve the column a
4090: 73 20 61 20 64 61 74 65 2f 74 69 6d 65 20 76 61  s a date/time va
40a0: 6c 75 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  lue.    /// </su
40b0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
40c0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
40d0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
40e0: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
40f0: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
4100: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 44 61 74 65  // <returns>Date
4110: 54 69 6d 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  Time</returns>. 
4120: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
4130: 64 65 20 44 61 74 65 54 69 6d 65 20 47 65 74 44  de DateTime GetD
4140: 61 74 65 54 69 6d 65 28 69 6e 74 20 69 29 0a 20  ateTime(int i). 
4150: 20 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b     {.      Check
4160: 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20  Disposed();..   
4170: 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69     if (i >= Visi
4180: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
4190: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
41a0: 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  l).        retur
41b0: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 61  n _keyInfo.GetDa
41c0: 74 65 54 69 6d 65 28 69 20 2d 20 56 69 73 69 62  teTime(i - Visib
41d0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a  leFieldCount);..
41e0: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
41f0: 28 69 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54  (i, DbType.DateT
4200: 69 6d 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ime);.      retu
4210: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
4220: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 61 74 65  ent._sql.GetDate
4230: 54 69 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74  Time(_activeStat
4240: 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d  ement, i);.    }
4250: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
4260: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  ry>.    /// Retr
4270: 69 65 76 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ieve the column 
4280: 61 73 20 61 20 64 65 63 69 6d 61 6c 20 76 61 6c  as a decimal val
4290: 75 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ue.    /// </sum
42a0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
42b0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
42c0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
42d0: 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76  olumn to retriev
42e0: 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  e</param>.    //
42f0: 2f 20 3c 72 65 74 75 72 6e 73 3e 64 65 63 69 6d  / <returns>decim
4300: 61 6c 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  al</returns>.   
4310: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
4320: 20 64 65 63 69 6d 61 6c 20 47 65 74 44 65 63 69   decimal GetDeci
4330: 6d 61 6c 28 69 6e 74 20 69 29 0a 20 20 20 20 7b  mal(int i).    {
4340: 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70  .      CheckDisp
4350: 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69  osed();..      i
4360: 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46  f (i >= VisibleF
4370: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
4380: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20  yInfo != null). 
4390: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
43a0: 65 79 49 6e 66 6f 2e 47 65 74 44 65 63 69 6d 61  eyInfo.GetDecima
43b0: 6c 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65  l(i - VisibleFie
43c0: 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20  ldCount);..     
43d0: 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44   VerifyType(i, D
43e0: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 3b 0a  bType.Decimal);.
43f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 65 63        return Dec
4400: 69 6d 61 6c 2e 50 61 72 73 65 28 5f 61 63 74 69  imal.Parse(_acti
4410: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
4420: 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65  .GetText(_active
4430: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 2c 20 4e  Statement, i), N
4440: 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f  umberStyles.Allo
4450: 77 44 65 63 69 6d 61 6c 50 6f 69 6e 74 20 7c 20  wDecimalPoint | 
4460: 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c  NumberStyles.All
4470: 6f 77 45 78 70 6f 6e 65 6e 74 20 7c 20 4e 75 6d  owExponent | Num
4480: 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f 77 4c  berStyles.AllowL
4490: 65 61 64 69 6e 67 53 69 67 6e 2c 20 43 75 6c 74  eadingSign, Cult
44a0: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
44b0: 74 43 75 6c 74 75 72 65 29 3b 0a 20 20 20 20 7d  tCulture);.    }
44c0: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
44d0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  ry>.    /// Retu
44e0: 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  rns the column a
44f0: 73 20 61 20 64 6f 75 62 6c 65 0a 20 20 20 20 2f  s a double.    /
4500: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
4510: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4520: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
4530: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
4540: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
4550: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
4560: 6e 73 3e 64 6f 75 62 6c 65 3c 2f 72 65 74 75 72  ns>double</retur
4570: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
4580: 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47  verride double G
4590: 65 74 44 6f 75 62 6c 65 28 69 6e 74 20 69 29 0a  etDouble(int i).
45a0: 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63      {.      Chec
45b0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20  kDisposed();..  
45c0: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73      if (i >= Vis
45d0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
45e0: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
45f0: 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74 75  ll).        retu
4600: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44  rn _keyInfo.GetD
4610: 6f 75 62 6c 65 28 69 20 2d 20 56 69 73 69 62 6c  ouble(i - Visibl
4620: 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20  eFieldCount);.. 
4630: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
4640: 69 2c 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65  i, DbType.Double
4650: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
4660: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
4670: 2e 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28  ._sql.GetDouble(
4680: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
4690: 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  , i);.    }..   
46a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
46b0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
46c0: 68 65 20 2e 4e 45 54 20 74 79 70 65 20 6f 66 20  he .NET type of 
46d0: 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 0a 20  a given column. 
46e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
46f0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
4700: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
4710: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
4720: 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  n to retrieve</p
4730: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
4740: 65 74 75 72 6e 73 3e 54 79 70 65 3c 2f 72 65 74  eturns>Type</ret
4750: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
4760: 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 20 47   override Type G
4770: 65 74 46 69 65 6c 64 54 79 70 65 28 69 6e 74 20  etFieldType(int 
4780: 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43  i).    {.      C
4790: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a  heckDisposed();.
47a0: 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20  .      if (i >= 
47b0: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
47c0: 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  t && _keyInfo !=
47d0: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72   null).        r
47e0: 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47  eturn _keyInfo.G
47f0: 65 74 46 69 65 6c 64 54 79 70 65 28 69 20 2d 20  etFieldType(i - 
4800: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
4810: 74 29 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72  t);..      retur
4820: 6e 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  n SQLiteConvert.
4830: 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65  SQLiteTypeToType
4840: 28 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 69  (GetSQLiteType(i
4850: 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ));.    }..    /
4860: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
4870: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 63   /// Returns a c
4880: 6f 6c 75 6d 6e 20 61 73 20 61 20 66 6c 6f 61 74  olumn as a float
4890: 20 76 61 6c 75 65 0a 20 20 20 20 2f 2f 2f 20 3c   value.    /// <
48a0: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
48b0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
48c0: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
48d0: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
48e0: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  rieve</param>.  
48f0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 66    /// <returns>f
4900: 6c 6f 61 74 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  loat</returns>. 
4910: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
4920: 64 65 20 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61  de float GetFloa
4930: 74 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20  t(int i).    {. 
4940: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
4950: 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20  ed();..      if 
4960: 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65  (i >= VisibleFie
4970: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
4980: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
4990: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
49a0: 49 6e 66 6f 2e 47 65 74 46 6c 6f 61 74 28 69 20  Info.GetFloat(i 
49b0: 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  - VisibleFieldCo
49c0: 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72  unt);..      Ver
49d0: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
49e0: 65 2e 53 69 6e 67 6c 65 29 3b 0a 20 20 20 20 20  e.Single);.     
49f0: 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
4a00: 54 6f 53 69 6e 67 6c 65 28 5f 61 63 74 69 76 65  ToSingle(_active
4a10: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
4a20: 65 74 44 6f 75 62 6c 65 28 5f 61 63 74 69 76 65  etDouble(_active
4a30: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a  Statement, i));.
4a40: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
4a50: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
4a60: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
4a70: 75 6d 6e 20 61 73 20 61 20 47 75 69 64 0a 20 20  umn as a Guid.  
4a80: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
4a90: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
4aa0: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
4ab0: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
4ac0: 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
4ad0: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
4ae0: 74 75 72 6e 73 3e 47 75 69 64 3c 2f 72 65 74 75  turns>Guid</retu
4af0: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
4b00: 6f 76 65 72 72 69 64 65 20 47 75 69 64 20 47 65  override Guid Ge
4b10: 74 47 75 69 64 28 69 6e 74 20 69 29 0a 20 20 20  tGuid(int i).   
4b20: 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69   {.      CheckDi
4b30: 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20  sposed();..     
4b40: 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c   if (i >= Visibl
4b50: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
4b60: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
4b70: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4b80: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 47 75 69 64  _keyInfo.GetGuid
4b90: 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c  (i - VisibleFiel
4ba0: 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20  dCount);..      
4bb0: 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66  TypeAffinity aff
4bc0: 69 6e 69 74 79 20 3d 20 56 65 72 69 66 79 54 79  inity = VerifyTy
4bd0: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 47 75 69  pe(i, DbType.Gui
4be0: 64 29 3b 0a 20 20 20 20 20 20 69 66 20 28 61 66  d);.      if (af
4bf0: 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66  finity == TypeAf
4c00: 66 69 6e 69 74 79 2e 42 6c 6f 62 29 0a 20 20 20  finity.Blob).   
4c10: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 62 79 74     {.        byt
4c20: 65 5b 5d 20 62 75 66 66 65 72 20 3d 20 6e 65 77  e[] buffer = new
4c30: 20 62 79 74 65 5b 31 36 5d 3b 0a 20 20 20 20 20   byte[16];.     
4c40: 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d     _activeStatem
4c50: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65  ent._sql.GetByte
4c60: 73 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  s(_activeStateme
4c70: 6e 74 2c 20 69 2c 20 30 2c 20 62 75 66 66 65 72  nt, i, 0, buffer
4c80: 2c 20 30 2c 20 31 36 29 3b 0a 20 20 20 20 20 20  , 0, 16);.      
4c90: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
4ca0: 64 28 62 75 66 66 65 72 29 3b 0a 20 20 20 20 20  d(buffer);.     
4cb0: 20 7d 0a 20 20 20 20 20 20 65 6c 73 65 0a 20 20   }.      else.  
4cc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
4cd0: 20 47 75 69 64 28 5f 61 63 74 69 76 65 53 74 61   Guid(_activeSta
4ce0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54  tement._sql.GetT
4cf0: 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ext(_activeState
4d00: 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20 20 20 7d  ment, i));.    }
4d10: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
4d20: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  ry>.    /// Retu
4d30: 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  rns the column a
4d40: 73 20 61 20 73 68 6f 72 74 0a 20 20 20 20 2f 2f  s a short.    //
4d50: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
4d60: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4d70: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
4d80: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
4d90: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
4da0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
4db0: 73 3e 49 6e 74 31 36 3c 2f 72 65 74 75 72 6e 73  s>Int16</returns
4dc0: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
4dd0: 72 72 69 64 65 20 49 6e 74 31 36 20 47 65 74 49  rride Int16 GetI
4de0: 6e 74 31 36 28 69 6e 74 20 69 29 0a 20 20 20 20  nt16(int i).    
4df0: 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73  {.      CheckDis
4e00: 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20  posed();..      
4e10: 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65  if (i >= Visible
4e20: 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b  FieldCount && _k
4e30: 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a  eyInfo != null).
4e40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
4e50: 6b 65 79 49 6e 66 6f 2e 47 65 74 49 6e 74 31 36  keyInfo.GetInt16
4e60: 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c  (i - VisibleFiel
4e70: 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20  dCount);..      
4e80: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
4e90: 54 79 70 65 2e 49 6e 74 31 36 29 3b 0a 20 20 20  Type.Int16);.   
4ea0: 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72     return Conver
4eb0: 74 2e 54 6f 49 6e 74 31 36 28 5f 61 63 74 69 76  t.ToInt16(_activ
4ec0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
4ed0: 47 65 74 49 6e 74 33 32 28 5f 61 63 74 69 76 65  GetInt32(_active
4ee0: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a  Statement, i));.
4ef0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
4f00: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
4f10: 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20 63   Retrieves the c
4f20: 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 69 6e 74 0a  olumn as an int.
4f30: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4f40: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
4f50: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
4f60: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
4f70: 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  mn to retrieve</
4f80: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
4f90: 72 65 74 75 72 6e 73 3e 49 6e 74 33 32 3c 2f 72  returns>Int32</r
4fa0: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
4fb0: 69 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 33  ic override Int3
4fc0: 32 20 47 65 74 49 6e 74 33 32 28 69 6e 74 20 69  2 GetInt32(int i
4fd0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68  ).    {.      Ch
4fe0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a  eckDisposed();..
4ff0: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56        if (i >= V
5000: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
5010: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
5020: 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65  null).        re
5030: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65  turn _keyInfo.Ge
5040: 74 49 6e 74 33 32 28 69 20 2d 20 56 69 73 69 62  tInt32(i - Visib
5050: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a  leFieldCount);..
5060: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
5070: 28 69 2c 20 44 62 54 79 70 65 2e 49 6e 74 33 32  (i, DbType.Int32
5080: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
5090: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
50a0: 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f  ._sql.GetInt32(_
50b0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
50c0: 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   i);.    }..    
50d0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
50e0: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
50f0: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
5100: 6c 6f 6e 67 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  long.    /// </s
5110: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
5120: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
5130: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
5140: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
5150: 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  eve</param>.    
5160: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74  /// <returns>Int
5170: 36 34 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  64</returns>.   
5180: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
5190: 20 49 6e 74 36 34 20 47 65 74 49 6e 74 36 34 28   Int64 GetInt64(
51a0: 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20  int i).    {.   
51b0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
51c0: 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 69  ();..      if (i
51d0: 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64   >= VisibleField
51e0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
51f0: 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  o != null).     
5200: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
5210: 66 6f 2e 47 65 74 49 6e 74 36 34 28 69 20 2d 20  fo.GetInt64(i - 
5220: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
5230: 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66  t);..      Verif
5240: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
5250: 49 6e 74 36 34 29 3b 0a 20 20 20 20 20 20 72 65  Int64);.      re
5260: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
5270: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e  ement._sql.GetIn
5280: 74 36 34 28 5f 61 63 74 69 76 65 53 74 61 74 65  t64(_activeState
5290: 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a  ment, i);.    }.
52a0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
52b0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  y>.    /// Retri
52c0: 65 76 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  eves the name of
52d0: 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20   the column.    
52e0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
52f0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5300: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
5310: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
5320: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
5330: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
5340: 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75  rns>string</retu
5350: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
5360: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
5370: 47 65 74 4e 61 6d 65 28 69 6e 74 20 69 29 0a 20  GetName(int i). 
5380: 20 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b     {.      Check
5390: 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20  Disposed();..   
53a0: 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69     if (i >= Visi
53b0: 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26  bleFieldCount &&
53c0: 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c   _keyInfo != nul
53d0: 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  l).        retur
53e0: 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61  n _keyInfo.GetNa
53f0: 6d 65 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69  me(i - VisibleFi
5400: 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20  eldCount);..    
5410: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
5420: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43  Statement._sql.C
5430: 6f 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63 74 69 76  olumnName(_activ
5440: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a  eStatement, i);.
5450: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
5460: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
5470: 20 52 65 74 72 69 65 76 65 73 20 74 68 65 20 69   Retrieves the i
5480: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 2c 20 67 69   of a column, gi
5490: 76 65 6e 20 69 74 73 20 6e 61 6d 65 0a 20 20 20  ven its name.   
54a0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
54b0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
54c0: 61 6d 65 3d 22 6e 61 6d 65 22 3e 54 68 65 20 6e  ame="name">The n
54d0: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ame of the colum
54e0: 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  n to retrieve</p
54f0: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
5500: 65 74 75 72 6e 73 3e 54 68 65 20 69 6e 74 20 69  eturns>The int i
5510: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f   of the column</
5520: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
5530: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74  lic override int
5540: 20 47 65 74 4f 72 64 69 6e 61 6c 28 73 74 72 69   GetOrdinal(stri
5550: 6e 67 20 6e 61 6d 65 29 0a 20 20 20 20 7b 0a 20  ng name).    {. 
5560: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
5570: 65 64 28 29 3b 0a 20 20 20 20 20 20 43 68 65 63  ed();.      Chec
5580: 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20 20  kClosed();.     
5590: 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73   if (_throwOnDis
55a0: 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d  posed) SQLiteCom
55b0: 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d  mand.Check(_comm
55c0: 61 6e 64 29 3b 0a 0a 20 20 20 20 20 20 2f 2f 0a  and);..      //.
55d0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
55e0: 69 72 73 74 2c 20 63 68 65 63 6b 20 69 66 20 74  irst, check if t
55f0: 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63  he column name c
5600: 61 63 68 65 20 68 61 73 20 62 65 65 6e 20 69 6e  ache has been in
5610: 69 74 69 61 6c 69 7a 65 64 20 79 65 74 2e 0a 20  itialized yet.. 
5620: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66       //       If
5630: 20 6e 6f 74 2c 20 64 6f 20 69 74 20 6e 6f 77 2e   not, do it now.
5640: 0a 20 20 20 20 20 20 2f 2f 0a 20 20 20 20 20 20  .      //.      
5650: 69 66 20 28 5f 66 69 65 6c 64 49 6e 64 65 78 65  if (_fieldIndexe
5660: 73 20 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  s == null).     
5670: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 5f 66 69   {.          _fi
5680: 65 6c 64 49 6e 64 65 78 65 73 20 3d 20 6e 65 77  eldIndexes = new
5690: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
56a0: 6e 67 2c 20 69 6e 74 3e 28 0a 20 20 20 20 20 20  ng, int>(.      
56b0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f          StringCo
56c0: 6d 70 61 72 65 72 2e 4f 72 64 69 6e 61 6c 49 67  mparer.OrdinalIg
56d0: 6e 6f 72 65 43 61 73 65 29 3b 0a 20 20 20 20 20  noreCase);.     
56e0: 20 7d 0a 0a 20 20 20 20 20 20 2f 2f 0a 20 20 20   }..      //.   
56f0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 65 78 74     // NOTE: Next
5700: 2c 20 73 65 65 20 69 66 20 74 68 65 20 69 6e 64  , see if the ind
5710: 65 78 20 66 6f 72 20 74 68 65 20 72 65 71 75 65  ex for the reque
5720: 73 74 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  sted column name
5730: 20 68 61 73 20 62 65 65 6e 0a 20 20 20 20 20 20   has been.      
5740: 2f 2f 20 20 20 20 20 20 20 63 61 63 68 65 64 20  //       cached 
5750: 61 6c 72 65 61 64 79 2e 20 20 49 66 20 73 6f 2c  already.  If so,
5760: 20 72 65 74 75 72 6e 20 74 68 65 20 63 61 63 68   return the cach
5770: 65 64 20 76 61 6c 75 65 2e 20 20 4f 74 68 65 72  ed value.  Other
5780: 77 69 73 65 2c 0a 20 20 20 20 20 20 2f 2f 20 20  wise,.      //  
5790: 20 20 20 20 20 6c 6f 6f 6b 75 70 20 74 68 65 20       lookup the 
57a0: 76 61 6c 75 65 20 61 6e 64 20 74 68 65 6e 20 63  value and then c
57b0: 61 63 68 65 20 74 68 65 20 72 65 73 75 6c 74 20  ache the result 
57c0: 66 6f 72 20 66 75 74 75 72 65 20 75 73 65 2e 0a  for future use..
57d0: 20 20 20 20 20 20 2f 2f 0a 20 20 20 20 20 20 69        //.      i
57e0: 6e 74 20 72 3b 0a 0a 20 20 20 20 20 20 69 66 20  nt r;..      if 
57f0: 28 21 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 2e  (!_fieldIndexes.
5800: 54 72 79 47 65 74 56 61 6c 75 65 28 6e 61 6d 65  TryGetValue(name
5810: 2c 20 6f 75 74 20 72 29 29 0a 20 20 20 20 20 20  , out r)).      
5820: 7b 0a 20 20 20 20 20 20 20 20 20 20 72 20 3d 20  {.          r = 
5830: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
5840: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 49 6e 64 65  ._sql.ColumnInde
5850: 78 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  x(_activeStateme
5860: 6e 74 2c 20 6e 61 6d 65 29 3b 0a 0a 20 20 20 20  nt, name);..    
5870: 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d 20 2d        if (r == -
5880: 31 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d  1 && _keyInfo !=
5890: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 20   null).         
58a0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
58b0: 20 72 20 3d 20 5f 6b 65 79 49 6e 66 6f 2e 47 65   r = _keyInfo.Ge
58c0: 74 4f 72 64 69 6e 61 6c 28 6e 61 6d 65 29 3b 0a  tOrdinal(name);.
58d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
58e0: 20 28 72 20 3e 20 2d 31 29 20 72 20 2b 3d 20 56   (r > -1) r += V
58f0: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
5900: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20  ;.          }.. 
5910: 20 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64 49           _fieldI
5920: 6e 64 65 78 65 73 2e 41 64 64 28 6e 61 6d 65 2c  ndexes.Add(name,
5930: 20 72 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20   r);.      }..  
5940: 20 20 20 20 72 65 74 75 72 6e 20 72 3b 0a 20 20      return r;.  
5950: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
5960: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 53  mmary>.    /// S
5970: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
5980: 6e 20 69 6e 20 53 51 4c 69 74 65 20 69 73 20 64  n in SQLite is d
5990: 69 66 66 69 63 75 6c 74 20 74 6f 20 6d 61 70 20  ifficult to map 
59a0: 69 6e 74 6f 20 2e 4e 45 54 20 63 6f 6e 76 65 6e  into .NET conven
59b0: 74 69 6f 6e 73 2c 20 73 6f 20 61 20 6c 6f 74 20  tions, so a lot 
59c0: 6f 66 20 77 6f 72 6b 20 6d 75 73 74 20 62 65 20  of work must be 
59d0: 64 6f 6e 65 0a 20 20 20 20 2f 2f 2f 20 74 6f 20  done.    /// to 
59e0: 67 61 74 68 65 72 20 74 68 65 20 6e 65 63 65 73  gather the neces
59f0: 73 61 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  sary information
5a00: 20 73 6f 20 69 74 20 63 61 6e 20 62 65 20 72 65   so it can be re
5a10: 70 72 65 73 65 6e 74 65 64 20 69 6e 20 61 6e 20  presented in an 
5a20: 41 44 4f 2e 4e 45 54 20 6d 61 6e 6e 65 72 2e 0a  ADO.NET manner..
5a30: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5a40: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  y>.    /// <retu
5a50: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 44 61  rns>Returns a Da
5a60: 74 61 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  taTable containi
5a70: 6e 67 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  ng the schema in
5a80: 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68  formation for th
5a90: 65 20 61 63 74 69 76 65 20 53 45 4c 45 43 54 20  e active SELECT 
5aa0: 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20  statement being 
5ab0: 70 72 6f 63 65 73 73 65 64 2e 3c 2f 72 65 74 75  processed.</retu
5ac0: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
5ad0: 6f 76 65 72 72 69 64 65 20 44 61 74 61 54 61 62  override DataTab
5ae0: 6c 65 20 47 65 74 53 63 68 65 6d 61 54 61 62 6c  le GetSchemaTabl
5af0: 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  e().    {.      
5b00: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
5b10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65  .      return Ge
5b20: 74 53 63 68 65 6d 61 54 61 62 6c 65 28 74 72 75  tSchemaTable(tru
5b30: 65 2c 20 66 61 6c 73 65 29 3b 0a 20 20 20 20 7d  e, false);.    }
5b40: 0a 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
5b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b90: 2f 0a 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 43  /..    #region C
5ba0: 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 43 6c 61 73  olumnParent Clas
5bb0: 73 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 65  s.    private se
5bc0: 61 6c 65 64 20 63 6c 61 73 73 20 43 6f 6c 75 6d  aled class Colum
5bd0: 6e 50 61 72 65 6e 74 20 3a 20 49 45 71 75 61 6c  nParent : IEqual
5be0: 69 74 79 43 6f 6d 70 61 72 65 72 3c 43 6f 6c 75  ityComparer<Colu
5bf0: 6d 6e 50 61 72 65 6e 74 3e 0a 20 20 20 20 7b 0a  mnParent>.    {.
5c00: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
5c10: 50 75 62 6c 69 63 20 46 69 65 6c 64 73 0a 20 20  Public Fields.  
5c20: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
5c30: 69 6e 67 20 44 61 74 61 62 61 73 65 4e 61 6d 65  ing DatabaseName
5c40: 3b 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ;.        public
5c50: 20 73 74 72 69 6e 67 20 54 61 62 6c 65 4e 61 6d   string TableNam
5c60: 65 3b 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  e;.        publi
5c70: 63 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e  c string ColumnN
5c80: 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 23 65 6e  ame;.        #en
5c90: 64 72 65 67 69 6f 6e 0a 0a 20 20 20 20 20 20 20  dregion..       
5ca0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ce0: 2f 2f 2f 2f 2f 2f 2f 2f 0a 0a 20 20 20 20 20 20  ////////..      
5cf0: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
5d00: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0a 20 20   Constructors.  
5d10: 20 20 20 20 20 20 70 75 62 6c 69 63 20 43 6f 6c        public Col
5d20: 75 6d 6e 50 61 72 65 6e 74 28 29 0a 20 20 20 20  umnParent().    
5d30: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
5d40: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
5d50: 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
5d60: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
5d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 0a 20 20 20  ///////////..   
5db0: 20 20 20 20 20 70 75 62 6c 69 63 20 43 6f 6c 75       public Colu
5dc0: 6d 6e 50 61 72 65 6e 74 28 0a 20 20 20 20 20 20  mnParent(.      
5dd0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74        string dat
5de0: 61 62 61 73 65 4e 61 6d 65 2c 0a 20 20 20 20 20  abaseName,.     
5df0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 61         string ta
5e00: 62 6c 65 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  bleName,.       
5e10: 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6c 75       string colu
5e20: 6d 6e 4e 61 6d 65 0a 20 20 20 20 20 20 20 20 20  mnName.         
5e30: 20 20 20 29 0a 20 20 20 20 20 20 20 20 20 20 20     ).           
5e40: 20 3a 20 74 68 69 73 28 29 0a 20 20 20 20 20 20   : this().      
5e50: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
5e60: 74 68 69 73 2e 44 61 74 61 62 61 73 65 4e 61 6d  this.DatabaseNam
5e70: 65 20 3d 20 64 61 74 61 62 61 73 65 4e 61 6d 65  e = databaseName
5e80: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ;.            th
5e90: 69 73 2e 54 61 62 6c 65 4e 61 6d 65 20 3d 20 74  is.TableName = t
5ea0: 61 62 6c 65 4e 61 6d 65 3b 0a 20 20 20 20 20 20  ableName;.      
5eb0: 20 20 20 20 20 20 74 68 69 73 2e 43 6f 6c 75 6d        this.Colum
5ec0: 6e 4e 61 6d 65 20 3d 20 63 6f 6c 75 6d 6e 4e 61  nName = columnNa
5ed0: 6d 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  me;.        }.  
5ee0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
5ef0: 0a 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
5f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f40: 2f 0a 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  /..        #regi
5f50: 6f 6e 20 49 45 71 75 61 6c 69 74 79 43 6f 6d 70  on IEqualityComp
5f60: 61 72 65 72 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e  arer<ColumnParen
5f70: 74 3e 20 4d 65 6d 62 65 72 73 0a 20 20 20 20 20  t> Members.     
5f80: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 45     public bool E
5f90: 71 75 61 6c 73 28 43 6f 6c 75 6d 6e 50 61 72 65  quals(ColumnPare
5fa0: 6e 74 20 78 2c 20 43 6f 6c 75 6d 6e 50 61 72 65  nt x, ColumnPare
5fb0: 6e 74 20 79 29 0a 20 20 20 20 20 20 20 20 7b 0a  nt y).        {.
5fc0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5fd0: 28 78 20 3d 3d 20 6e 75 6c 6c 29 20 26 26 20 28  (x == null) && (
5fe0: 79 20 3d 3d 20 6e 75 6c 6c 29 29 0a 20 20 20 20  y == null)).    
5ff0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
6000: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6010: 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20   true;.         
6020: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
6030: 20 65 6c 73 65 20 69 66 20 28 28 78 20 3d 3d 20   else if ((x == 
6040: 6e 75 6c 6c 29 20 7c 7c 20 28 79 20 3d 3d 20 6e  null) || (y == n
6050: 75 6c 6c 29 29 0a 20 20 20 20 20 20 20 20 20 20  ull)).          
6060: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
6070: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
6080: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
6090: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
60a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20  .            {. 
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
60c0: 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
60d0: 73 28 78 2e 44 61 74 61 62 61 73 65 4e 61 6d 65  s(x.DatabaseName
60e0: 2c 20 79 2e 44 61 74 61 62 61 73 65 4e 61 6d 65  , y.DatabaseName
60f0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
6100: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
6110: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
6120: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0a 20  alIgnoreCase)). 
6130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
6140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6150: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
6160: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e;.             
6170: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20     }..          
6180: 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
6190: 67 2e 45 71 75 61 6c 73 28 78 2e 54 61 62 6c 65  g.Equals(x.Table
61a0: 4e 61 6d 65 2c 20 79 2e 54 61 62 6c 65 4e 61 6d  Name, y.TableNam
61b0: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
61c0: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
61d0: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
61e0: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0a  nalIgnoreCase)).
61f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6200: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
6210: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
6220: 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se;.            
6230: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20      }..         
6240: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
6250: 6e 67 2e 45 71 75 61 6c 73 28 78 2e 43 6f 6c 75  ng.Equals(x.Colu
6260: 6d 6e 4e 61 6d 65 2c 20 79 2e 43 6f 6c 75 6d 6e  mnName, y.Column
6270: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
6280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
6290: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
62a0: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
62b0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
62c0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
62d0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
62e0: 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 20  false;.         
62f0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
6300: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6310: 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20   true;.         
6320: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a     }.        }..
6330: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a  ///////////////.
6380: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
6390: 69 6e 74 20 47 65 74 48 61 73 68 43 6f 64 65 28  int GetHashCode(
63a0: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6f 62 6a  ColumnParent obj
63b0: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
63c0: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 75          int resu
63d0: 6c 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 20  lt = 0;..       
63e0: 20 20 20 20 20 69 66 20 28 28 6f 62 6a 20 21 3d       if ((obj !=
63f0: 20 6e 75 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 44   null) && (obj.D
6400: 61 74 61 62 61 73 65 4e 61 6d 65 20 21 3d 20 6e  atabaseName != n
6410: 75 6c 6c 29 29 0a 20 20 20 20 20 20 20 20 20 20  ull)).          
6420: 20 20 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20        result ^= 
6430: 6f 62 6a 2e 44 61 74 61 62 61 73 65 4e 61 6d 65  obj.DatabaseName
6440: 2e 47 65 74 48 61 73 68 43 6f 64 65 28 29 3b 0a  .GetHashCode();.
6450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
6460: 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26  ((obj != null) &
6470: 26 20 28 6f 62 6a 2e 54 61 62 6c 65 4e 61 6d 65  & (obj.TableName
6480: 20 21 3d 20 6e 75 6c 6c 29 29 0a 20 20 20 20 20   != null)).     
6490: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
64a0: 74 20 5e 3d 20 6f 62 6a 2e 54 61 62 6c 65 4e 61  t ^= obj.TableNa
64b0: 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28 29  me.GetHashCode()
64c0: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ;..            i
64d0: 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75 6c 6c 29  f ((obj != null)
64e0: 20 26 26 20 28 6f 62 6a 2e 43 6f 6c 75 6d 6e 4e   && (obj.ColumnN
64f0: 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29 0a 20 20  ame != null)).  
6500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6510: 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e 43 6f 6c 75  sult ^= obj.Colu
6520: 6d 6e 4e 61 6d 65 2e 47 65 74 48 61 73 68 43 6f  mnName.GetHashCo
6530: 64 65 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 20  de();..         
6540: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
6550: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
6560: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a 20      #endregion. 
6570: 20 20 20 7d 0a 20 20 20 20 23 65 6e 64 72 65 67     }.    #endreg
6580: 69 6f 6e 0a 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ion..    ///////
6590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65d0: 2f 2f 2f 2f 0a 0a 20 20 20 20 70 72 69 76 61 74  ////..    privat
65e0: 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 47 65  e static void Ge
65f0: 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c 75 6d 6e  tStatementColumn
6600: 50 61 72 65 6e 74 73 28 0a 20 20 20 20 20 20 20  Parents(.       
6610: 20 53 51 4c 69 74 65 42 61 73 65 20 73 71 6c 2c   SQLiteBase sql,
6620: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
6630: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 0a 20  tatement stmt,. 
6640: 20 20 20 20 20 20 20 69 6e 74 20 66 69 65 6c 64         int field
6650: 43 6f 75 6e 74 2c 0a 20 20 20 20 20 20 20 20 72  Count,.        r
6660: 65 66 20 44 69 63 74 69 6f 6e 61 72 79 3c 43 6f  ef Dictionary<Co
6670: 6c 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73 74  lumnParent, List
6680: 3c 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54 6f 43  <int>> parentToC
6690: 6f 6c 75 6d 6e 73 2c 0a 20 20 20 20 20 20 20 20  olumns,.        
66a0: 72 65 66 20 44 69 63 74 69 6f 6e 61 72 79 3c 69  ref Dictionary<i
66b0: 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  nt, ColumnParent
66c0: 3e 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74  > columnToParent
66d0: 0a 20 20 20 20 20 20 20 20 29 0a 20 20 20 20 7b  .        ).    {
66e0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 70 61 72  .        if (par
66f0: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 3d 20  entToColumns == 
6700: 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 20 20  null).          
6710: 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e    parentToColumn
6720: 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
6730: 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c  ry<ColumnParent,
6740: 20 4c 69 73 74 3c 69 6e 74 3e 3e 28 0a 20 20 20   List<int>>(.   
6750: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
6760: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 29 29   ColumnParent())
6770: 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 63  ;..        if (c
6780: 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 20 3d 3d  olumnToParent ==
6790: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 20   null).         
67a0: 20 20 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e     columnToParen
67b0: 74 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  t = new Dictiona
67c0: 72 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61  ry<int, ColumnPa
67d0: 72 65 6e 74 3e 28 29 3b 0a 0a 20 20 20 20 20 20  rent>();..      
67e0: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
67f0: 3b 20 6e 20 3c 20 66 69 65 6c 64 43 6f 75 6e 74  ; n < fieldCount
6800: 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 20 20 7b  ; n++).        {
6810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
6820: 69 6e 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65  ing databaseName
6830: 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 44 61 74   = sql.ColumnDat
6840: 61 62 61 73 65 4e 61 6d 65 28 73 74 6d 74 2c 20  abaseName(stmt, 
6850: 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  n);.            
6860: 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65  string tableName
6870: 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e 54 61 62   = sql.ColumnTab
6880: 6c 65 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 3b  leName(stmt, n);
6890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
68a0: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 20 3d  ing columnName =
68b0: 20 73 71 6c 2e 43 6f 6c 75 6d 6e 4f 72 69 67 69   sql.ColumnOrigi
68c0: 6e 61 6c 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29  nalName(stmt, n)
68d0: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  ;..            C
68e0: 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 6b 65 79 20  olumnParent key 
68f0: 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65  = new ColumnPare
6900: 6e 74 28 64 61 74 61 62 61 73 65 4e 61 6d 65 2c  nt(databaseName,
6910: 20 74 61 62 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c   tableName, null
6920: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  );.            C
6930: 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 76 61 6c 75  olumnParent valu
6940: 65 20 3d 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61  e = new ColumnPa
6950: 72 65 6e 74 28 64 61 74 61 62 61 73 65 4e 61 6d  rent(databaseNam
6960: 65 2c 20 74 61 62 6c 65 4e 61 6d 65 2c 20 63 6f  e, tableName, co
6970: 6c 75 6d 6e 4e 61 6d 65 29 3b 0a 0a 20 20 20 20  lumnName);..    
6980: 20 20 20 20 20 20 20 20 69 66 20 28 21 70 61 72          if (!par
6990: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 43 6f 6e  entToColumns.Con
69a0: 74 61 69 6e 73 4b 65 79 28 6b 65 79 29 29 0a 20  tainsKey(key)). 
69b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
69c0: 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2e 41  arentToColumns.A
69d0: 64 64 28 6b 65 79 2c 20 6e 65 77 20 4c 69 73 74  dd(key, new List
69e0: 3c 69 6e 74 3e 28 6e 65 77 20 69 6e 74 5b 5d 20  <int>(new int[] 
69f0: 7b 20 6e 20 7d 29 29 3b 0a 20 20 20 20 20 20 20  { n }));.       
6a00: 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20       else.      
6a10: 20 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74            parent
6a20: 54 6f 43 6f 6c 75 6d 6e 73 5b 6b 65 79 5d 2e 41  ToColumns[key].A
6a30: 64 64 28 6e 29 3b 0a 0a 20 20 20 20 20 20 20 20  dd(n);..        
6a40: 20 20 20 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65      columnToPare
6a50: 6e 74 2e 41 64 64 28 6e 2c 20 76 61 6c 75 65 29  nt.Add(n, value)
6a60: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
6a70: 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  }..    internal 
6a80: 44 61 74 61 54 61 62 6c 65 20 47 65 74 53 63 68  DataTable GetSch
6a90: 65 6d 61 54 61 62 6c 65 28 62 6f 6f 6c 20 77 61  emaTable(bool wa
6aa0: 6e 74 55 6e 69 71 75 65 49 6e 66 6f 2c 20 62 6f  ntUniqueInfo, bo
6ab0: 6f 6c 20 77 61 6e 74 44 65 66 61 75 6c 74 56 61  ol wantDefaultVa
6ac0: 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  lue).    {.     
6ad0: 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a   CheckClosed();.
6ae0: 20 20 20 20 20 20 69 66 20 28 5f 74 68 72 6f 77        if (_throw
6af0: 4f 6e 44 69 73 70 6f 73 65 64 29 20 53 51 4c 69  OnDisposed) SQLi
6b00: 74 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b 28  teCommand.Check(
6b10: 5f 63 6f 6d 6d 61 6e 64 29 3b 0a 0a 20 20 20 20  _command);..    
6b20: 20 20 2f 2f 0a 20 20 20 20 20 20 2f 2f 20 42 55    //.      // BU
6b30: 47 46 49 58 3a 20 57 65 20 6e 65 65 64 20 74 6f  GFIX: We need to
6b40: 20 71 75 69 63 6b 6c 79 20 73 63 61 6e 20 61 6c   quickly scan al
6b50: 6c 20 74 68 65 20 66 69 65 6c 64 73 20 69 6e 20  l the fields in 
6b60: 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20 20 20  the current.    
6b70: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 22 72 65    //         "re
6b80: 73 75 6c 74 20 73 65 74 22 20 74 6f 20 73 65 65  sult set" to see
6b90: 20 68 6f 77 20 6d 61 6e 79 20 64 69 73 74 69 6e   how many distin
6ba0: 63 74 20 74 61 62 6c 65 73 20 61 72 65 20 61 63  ct tables are ac
6bb0: 74 75 61 6c 6c 79 0a 20 20 20 20 20 20 2f 2f 20  tually.      // 
6bc0: 20 20 20 20 20 20 20 20 69 6e 76 6f 6c 76 65 64          involved
6bd0: 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74  .  This informat
6be0: 69 6f 6e 20 69 73 20 6e 65 63 65 73 73 61 72 79  ion is necessary
6bf0: 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 0a 20 20   so that some.  
6c00: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69      //         i
6c10: 6e 74 65 6c 6c 69 67 65 6e 74 20 64 65 63 69 73  ntelligent decis
6c20: 69 6f 6e 73 20 63 61 6e 20 62 65 20 6d 61 64 65  ions can be made
6c30: 20 77 68 65 6e 20 63 6f 6e 73 74 72 75 63 74 69   when constructi
6c40: 6e 67 20 74 68 65 0a 20 20 20 20 20 20 2f 2f 20  ng the.      // 
6c50: 20 20 20 20 20 20 20 20 6d 65 74 61 64 61 74 61          metadata
6c60: 20 62 65 6c 6f 77 2e 20 20 46 6f 72 20 65 78 61   below.  For exa
6c70: 6d 70 6c 65 2c 20 77 65 20 6e 65 65 64 20 74 6f  mple, we need to
6c80: 20 62 65 20 76 65 72 79 20 63 61 72 65 66 75 6c   be very careful
6c90: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
6ca0: 20 20 61 62 6f 75 74 20 66 6c 61 67 67 69 6e 67    about flagging
6cb0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 63 6f   a particular co
6cc0: 6c 75 6d 6e 20 61 73 20 22 75 6e 69 71 75 65 22  lumn as "unique"
6cd0: 20 6a 75 73 74 0a 20 20 20 20 20 20 2f 2f 20 20   just.      //  
6ce0: 20 20 20 20 20 20 20 62 65 63 61 75 73 65 20 69         because i
6cf0: 74 20 77 61 73 20 69 6e 20 69 74 73 20 6f 72 69  t was in its ori
6d00: 67 69 6e 61 6c 20 75 6e 64 65 72 6c 79 69 6e 67  ginal underlying
6d10: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a   database table.
6d20: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
6d30: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
6d40: 77 20 6d 75 6c 74 69 70 6c 65 20 74 61 62 6c 65  w multiple table
6d50: 73 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20 74 68  s involved in th
6d60: 65 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  e.      //      
6d70: 20 20 20 22 72 65 73 75 6c 74 20 73 65 74 22 2e     "result set".
6d80: 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 65    See ticket [7e
6d90: 33 66 61 39 33 37 34 34 5d 20 66 6f 72 20 6d 6f  3fa93744] for mo
6da0: 72 65 20 64 65 74 61 69 6c 65 64 0a 20 20 20 20  re detailed.    
6db0: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69 6e 66    //         inf
6dc0: 6f 72 6d 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20  ormation..      
6dd0: 2f 2f 0a 20 20 20 20 20 20 44 69 63 74 69 6f 6e  //.      Diction
6de0: 61 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ary<ColumnParent
6df0: 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e 20 70 61 72  , List<int>> par
6e00: 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 20 3d 20 6e  entToColumns = n
6e10: 75 6c 6c 3b 0a 20 20 20 20 20 20 44 69 63 74 69  ull;.      Dicti
6e20: 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d  onary<int, Colum
6e30: 6e 50 61 72 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54  nParent> columnT
6e40: 6f 50 61 72 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0a  oParent = null;.
6e50: 0a 20 20 20 20 20 20 47 65 74 53 74 61 74 65 6d  .      GetStatem
6e60: 65 6e 74 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 73  entColumnParents
6e70: 28 0a 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6d  (.          _com
6e80: 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e  mand.Connection.
6e90: 5f 73 71 6c 2c 20 5f 61 63 74 69 76 65 53 74 61  _sql, _activeSta
6ea0: 74 65 6d 65 6e 74 2c 20 5f 66 69 65 6c 64 43 6f  tement, _fieldCo
6eb0: 75 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 72  unt,.          r
6ec0: 65 66 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  ef parentToColum
6ed0: 6e 73 2c 20 72 65 66 20 63 6f 6c 75 6d 6e 54 6f  ns, ref columnTo
6ee0: 50 61 72 65 6e 74 29 3b 0a 0a 20 20 20 20 20 20  Parent);..      
6ef0: 44 61 74 61 54 61 62 6c 65 20 74 62 6c 20 3d 20  DataTable tbl = 
6f00: 6e 65 77 20 44 61 74 61 54 61 62 6c 65 28 22 53  new DataTable("S
6f10: 63 68 65 6d 61 54 61 62 6c 65 22 29 3b 0a 20 20  chemaTable");.  
6f20: 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 74 62      DataTable tb
6f30: 6c 49 6e 64 65 78 65 73 20 3d 20 6e 75 6c 6c 3b  lIndexes = null;
6f40: 0a 20 20 20 20 20 20 44 61 74 61 54 61 62 6c 65  .      DataTable
6f50: 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73   tblIndexColumns
6f60: 3b 0a 20 20 20 20 20 20 44 61 74 61 52 6f 77 20  ;.      DataRow 
6f70: 72 6f 77 3b 0a 20 20 20 20 20 20 73 74 72 69 6e  row;.      strin
6f80: 67 20 74 65 6d 70 3b 0a 20 20 20 20 20 20 73 74  g temp;.      st
6f90: 72 69 6e 67 20 73 74 72 43 61 74 61 6c 6f 67 20  ring strCatalog 
6fa0: 3d 20 22 22 3b 0a 20 20 20 20 20 20 73 74 72 69  = "";.      stri
6fb0: 6e 67 20 73 74 72 54 61 62 6c 65 20 3d 20 22 22  ng strTable = ""
6fc0: 3b 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73  ;.      string s
6fd0: 74 72 43 6f 6c 75 6d 6e 20 3d 20 22 22 3b 0a 0a  trColumn = "";..
6fe0: 20 20 20 20 20 20 74 62 6c 2e 4c 6f 63 61 6c 65        tbl.Locale
6ff0: 20 3d 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49   = CultureInfo.I
7000: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 3b  nvariantCulture;
7010: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
7020: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
7030: 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e  leColumn.ColumnN
7040: 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69  ame, typeof(Stri
7050: 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  ng));.      tbl.
7060: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
7070: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f  maTableColumn.Co
7080: 6c 75 6d 6e 4f 72 64 69 6e 61 6c 2c 20 74 79 70  lumnOrdinal, typ
7090: 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 20  eof(int));.     
70a0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
70b0: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
70c0: 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 2c 20 74  mn.ColumnSize, t
70d0: 79 70 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20  ypeof(int));.   
70e0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
70f0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
7100: 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63  lumn.NumericPrec
7110: 69 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 69 6e  ision, typeof(in
7120: 74 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  t));.      tbl.C
7130: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
7140: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
7150: 65 72 69 63 53 63 61 6c 65 2c 20 74 79 70 65 6f  ericScale, typeo
7160: 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 20 20 74  f(int));.      t
7170: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
7180: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
7190: 2e 49 73 55 6e 69 71 75 65 2c 20 74 79 70 65 6f  .IsUnique, typeo
71a0: 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20  f(Boolean));.   
71b0: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
71c0: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
71d0: 6c 75 6d 6e 2e 49 73 4b 65 79 2c 20 74 79 70 65  lumn.IsKey, type
71e0: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20  of(Boolean));.  
71f0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
7200: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
7210: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61  ptionalColumn.Ba
7220: 73 65 53 65 72 76 65 72 4e 61 6d 65 2c 20 74 79  seServerName, ty
7230: 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0a 20  peof(string));. 
7240: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
7250: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
7260: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42  OptionalColumn.B
7270: 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 20  aseCatalogName, 
7280: 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b  typeof(String));
7290: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
72a0: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
72b0: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c  leColumn.BaseCol
72c0: 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28  umnName, typeof(
72d0: 53 74 72 69 6e 67 29 29 3b 0a 20 20 20 20 20 20  String));.      
72e0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
72f0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
7300: 6e 2e 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  n.BaseSchemaName
7310: 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29  , typeof(String)
7320: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
7330: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
7340: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
7350: 61 62 6c 65 4e 61 6d 65 2c 20 74 79 70 65 6f 66  ableName, typeof
7360: 28 53 74 72 69 6e 67 29 29 3b 0a 20 20 20 20 20  (String));.     
7370: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
7380: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
7390: 6d 6e 2e 44 61 74 61 54 79 70 65 2c 20 74 79 70  mn.DataType, typ
73a0: 65 6f 66 28 54 79 70 65 29 29 3b 0a 20 20 20 20  eof(Type));.    
73b0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
73c0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
73d0: 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 2c  umn.AllowDBNull,
73e0: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
73f0: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
7400: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
7410: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69  ableColumn.Provi
7420: 64 65 72 54 79 70 65 2c 20 74 79 70 65 6f 66 28  derType, typeof(
7430: 69 6e 74 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  int));.      tbl
7440: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
7450: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49  emaTableColumn.I
7460: 73 41 6c 69 61 73 65 64 2c 20 74 79 70 65 6f 66  sAliased, typeof
7470: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20  (Boolean));.    
7480: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
7490: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
74a0: 75 6d 6e 2e 49 73 45 78 70 72 65 73 73 69 6f 6e  umn.IsExpression
74b0: 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e  , typeof(Boolean
74c0: 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  ));.      tbl.Co
74d0: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
74e0: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
74f0: 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d  umn.IsAutoIncrem
7500: 65 6e 74 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  ent, typeof(Bool
7510: 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  ean));.      tbl
7520: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
7530: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
7540: 43 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56 65 72 73  Column.IsRowVers
7550: 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  ion, typeof(Bool
7560: 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  ean));.      tbl
7570: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
7580: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
7590: 43 6f 6c 75 6d 6e 2e 49 73 48 69 64 64 65 6e 2c  Column.IsHidden,
75a0: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
75b0: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
75c0: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
75d0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e  ableColumn.IsLon
75e0: 67 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  g, typeof(Boolea
75f0: 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  n));.      tbl.C
7600: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
7610: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
7620: 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 2c  lumn.IsReadOnly,
7630: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
7640: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
7650: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
7660: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
7670: 6d 6e 2e 50 72 6f 76 69 64 65 72 53 70 65 63 69  mn.ProviderSpeci
7680: 66 69 63 44 61 74 61 54 79 70 65 2c 20 74 79 70  ficDataType, typ
7690: 65 6f 66 28 54 79 70 65 29 29 3b 0a 20 20 20 20  eof(Type));.    
76a0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
76b0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
76c0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61  ionalColumn.Defa
76d0: 75 6c 74 56 61 6c 75 65 2c 20 74 79 70 65 6f 66  ultValue, typeof
76e0: 28 6f 62 6a 65 63 74 29 29 3b 0a 20 20 20 20 20  (object));.     
76f0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
7700: 28 22 44 61 74 61 54 79 70 65 4e 61 6d 65 22 2c  ("DataTypeName",
7710: 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29   typeof(string))
7720: 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ;.      tbl.Colu
7730: 6d 6e 73 2e 41 64 64 28 22 43 6f 6c 6c 61 74 69  mns.Add("Collati
7740: 6f 6e 54 79 70 65 22 2c 20 74 79 70 65 6f 66 28  onType", typeof(
7750: 73 74 72 69 6e 67 29 29 3b 0a 20 20 20 20 20 20  string));.      
7760: 74 62 6c 2e 42 65 67 69 6e 4c 6f 61 64 44 61 74  tbl.BeginLoadDat
7770: 61 28 29 3b 0a 0a 20 20 20 20 20 20 66 6f 72 20  a();..      for 
7780: 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20  (int n = 0; n < 
7790: 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b  _fieldCount; n++
77a0: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
77b0: 20 20 53 51 4c 69 74 65 54 79 70 65 20 73 71 6c    SQLiteType sql
77c0: 54 79 70 65 20 3d 20 47 65 74 53 51 4c 69 74 65  Type = GetSQLite
77d0: 54 79 70 65 28 6e 29 3b 0a 0a 20 20 20 20 20 20  Type(n);..      
77e0: 20 20 72 6f 77 20 3d 20 74 62 6c 2e 4e 65 77 52    row = tbl.NewR
77f0: 6f 77 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 44  ow();..        D
7800: 62 54 79 70 65 20 74 79 70 20 3d 20 73 71 6c 54  bType typ = sqlT
7810: 79 70 65 2e 54 79 70 65 3b 0a 0a 20 20 20 20 20  ype.Type;..     
7820: 20 20 20 2f 2f 20 44 65 66 61 75 6c 74 20 73 65     // Default se
7830: 74 74 69 6e 67 73 20 66 6f 72 20 74 68 65 20 63  ttings for the c
7840: 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 72 6f  olumn.        ro
7850: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
7860: 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 20  umn.ColumnName] 
7870: 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0a 20 20  = GetName(n);.  
7880: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
7890: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75  TableColumn.Colu
78a0: 6d 6e 4f 72 64 69 6e 61 6c 5d 20 3d 20 6e 3b 0a  mnOrdinal] = n;.
78b0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
78c0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f  maTableColumn.Co
78d0: 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20 53 51 4c 69  lumnSize] = SQLi
78e0: 74 65 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65  teConvert.DbType
78f0: 54 6f 43 6f 6c 75 6d 6e 53 69 7a 65 28 74 79 70  ToColumnSize(typ
7900: 29 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53  );.        row[S
7910: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
7920: 2e 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f  .NumericPrecisio
7930: 6e 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65  n] = SQLiteConve
7940: 72 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65 72  rt.DbTypeToNumer
7950: 69 63 50 72 65 63 69 73 69 6f 6e 28 74 79 70 29  icPrecision(typ)
7960: 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ;.        row[Sc
7970: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
7980: 4e 75 6d 65 72 69 63 53 63 61 6c 65 5d 20 3d 20  NumericScale] = 
7990: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44 62  SQLiteConvert.Db
79a0: 54 79 70 65 54 6f 4e 75 6d 65 72 69 63 53 63 61  TypeToNumericSca
79b0: 6c 65 28 74 79 70 29 3b 0a 20 20 20 20 20 20 20  le(typ);.       
79c0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
79d0: 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72 54  Column.ProviderT
79e0: 79 70 65 5d 20 3d 20 73 71 6c 54 79 70 65 2e 54  ype] = sqlType.T
79f0: 79 70 65 3b 0a 20 20 20 20 20 20 20 20 72 6f 77  ype;.        row
7a00: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
7a10: 6d 6e 2e 49 73 4c 6f 6e 67 5d 20 3d 20 66 61 6c  mn.IsLong] = fal
7a20: 73 65 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  se;.        row[
7a30: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
7a40: 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d  n.AllowDBNull] =
7a50: 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 72   true;.        r
7a60: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
7a70: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52  tionalColumn.IsR
7a80: 65 61 64 4f 6e 6c 79 5d 20 3d 20 66 61 6c 73 65  eadOnly] = false
7a90: 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ;.        row[Sc
7aa0: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
7ab0: 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56 65 72  lColumn.IsRowVer
7ac0: 73 69 6f 6e 5d 20 3d 20 66 61 6c 73 65 3b 0a 20  sion] = false;. 
7ad0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
7ae0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55  aTableColumn.IsU
7af0: 6e 69 71 75 65 5d 20 3d 20 66 61 6c 73 65 3b 0a  nique] = false;.
7b00: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
7b10: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
7b20: 4b 65 79 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20  Key] = false;.  
7b30: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
7b40: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
7b50: 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d  umn.IsAutoIncrem
7b60: 65 6e 74 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20  ent] = false;.  
7b70: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
7b80: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74 61  TableColumn.Data
7b90: 54 79 70 65 5d 20 3d 20 47 65 74 46 69 65 6c 64  Type] = GetField
7ba0: 54 79 70 65 28 6e 29 3b 0a 20 20 20 20 20 20 20  Type(n);.       
7bb0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
7bc0: 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49  OptionalColumn.I
7bd0: 73 48 69 64 64 65 6e 5d 20 3d 20 66 61 6c 73 65  sHidden] = false
7be0: 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63  ;.        row[Sc
7bf0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
7c00: 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 5d 20  BaseSchemaName] 
7c10: 3d 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  = _baseSchemaNam
7c20: 65 3b 0a 0a 20 20 20 20 20 20 20 20 73 74 72 43  e;..        strC
7c30: 6f 6c 75 6d 6e 20 3d 20 63 6f 6c 75 6d 6e 54 6f  olumn = columnTo
7c40: 50 61 72 65 6e 74 5b 6e 5d 2e 43 6f 6c 75 6d 6e  Parent[n].Column
7c50: 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 69 66  Name;.        if
7c60: 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
7c70: 72 45 6d 70 74 79 28 73 74 72 43 6f 6c 75 6d 6e  rEmpty(strColumn
7c80: 29 20 3d 3d 20 66 61 6c 73 65 29 20 72 6f 77 5b  ) == false) row[
7c90: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
7ca0: 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65  n.BaseColumnName
7cb0: 5d 20 3d 20 73 74 72 43 6f 6c 75 6d 6e 3b 0a 0a  ] = strColumn;..
7cc0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
7cd0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
7ce0: 45 78 70 72 65 73 73 69 6f 6e 5d 20 3d 20 53 74  Expression] = St
7cf0: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
7d00: 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29 3b 0a 20  ty(strColumn);. 
7d10: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
7d20: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 41  aTableColumn.IsA
7d30: 6c 69 61 73 65 64 5d 20 3d 20 28 53 74 72 69 6e  liased] = (Strin
7d40: 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4e 61 6d  g.Compare(GetNam
7d50: 65 28 6e 29 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c  e(n), strColumn,
7d60: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
7d70: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
7d80: 61 73 65 29 20 21 3d 20 30 29 3b 0a 0a 20 20 20  ase) != 0);..   
7d90: 20 20 20 20 20 74 65 6d 70 20 3d 20 63 6f 6c 75       temp = colu
7da0: 6d 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 54 61  mnToParent[n].Ta
7db0: 62 6c 65 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20  bleName;.       
7dc0: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
7dd0: 6c 6c 4f 72 45 6d 70 74 79 28 74 65 6d 70 29 20  llOrEmpty(temp) 
7de0: 3d 3d 20 66 61 6c 73 65 29 20 72 6f 77 5b 53 63  == false) row[Sc
7df0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
7e00: 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 20 3d  BaseTableName] =
7e10: 20 74 65 6d 70 3b 0a 0a 20 20 20 20 20 20 20 20   temp;..        
7e20: 74 65 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50  temp = columnToP
7e30: 61 72 65 6e 74 5b 6e 5d 2e 44 61 74 61 62 61 73  arent[n].Databas
7e40: 65 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 69  eName;.        i
7e50: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
7e60: 4f 72 45 6d 70 74 79 28 74 65 6d 70 29 20 3d 3d  OrEmpty(temp) ==
7e70: 20 66 61 6c 73 65 29 20 72 6f 77 5b 53 63 68 65   false) row[Sche
7e80: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
7e90: 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f  olumn.BaseCatalo
7ea0: 67 4e 61 6d 65 5d 20 3d 20 74 65 6d 70 3b 0a 0a  gName] = temp;..
7eb0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
7ec0: 61 74 61 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0a  ataType = null;.
7ed0: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
7ee0: 20 68 61 76 65 20 61 20 74 61 62 6c 65 2d 62 6f   have a table-bo
7ef0: 75 6e 64 20 63 6f 6c 75 6d 6e 2c 20 65 78 74 72  und column, extr
7f00: 61 63 74 20 74 68 65 20 65 78 74 72 61 20 69 6e  act the extra in
7f10: 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 69  formation from i
7f20: 74 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74  t.        if (St
7f30: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
7f40: 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d 3d  ty(strColumn) ==
7f50: 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20   false).        
7f60: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69  {.          stri
7f70: 6e 67 20 63 6f 6c 6c 53 65 71 3b 0a 20 20 20 20  ng collSeq;.    
7f80: 20 20 20 20 20 20 62 6f 6f 6c 20 62 4e 6f 74 4e        bool bNotN
7f90: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 62  ull;.          b
7fa0: 6f 6f 6c 20 62 50 72 69 6d 61 72 79 4b 65 79 3b  ool bPrimaryKey;
7fb0: 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  .          bool 
7fc0: 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 3b 0a  bAutoIncrement;.
7fd0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
7fe0: 5b 5d 20 61 72 53 69 7a 65 3b 0a 0a 20 20 20 20  [] arSize;..    
7ff0: 20 20 20 20 20 20 2f 2f 20 47 65 74 20 74 68 65        // Get the
8000: 20 63 6f 6c 75 6d 6e 20 6d 65 74 61 20 64 61 74   column meta dat
8010: 61 0a 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6d  a.          _com
8020: 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e  mand.Connection.
8030: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4d 65 74 61 44  _sql.ColumnMetaD
8040: 61 74 61 28 0a 20 20 20 20 20 20 20 20 20 20 20  ata(.           
8050: 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68   (string)row[Sch
8060: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
8070: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c  Column.BaseCatal
8080: 6f 67 4e 61 6d 65 5d 2c 0a 20 20 20 20 20 20 20  ogName],.       
8090: 20 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77       (string)row
80a0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
80b0: 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65  mn.BaseTableName
80c0: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ],.            s
80d0: 74 72 43 6f 6c 75 6d 6e 2c 0a 20 20 20 20 20 20  trColumn,.      
80e0: 20 20 20 20 20 20 6f 75 74 20 64 61 74 61 54 79        out dataTy
80f0: 70 65 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71 2c  pe, out collSeq,
8100: 20 6f 75 74 20 62 4e 6f 74 4e 75 6c 6c 2c 20 6f   out bNotNull, o
8110: 75 74 20 62 50 72 69 6d 61 72 79 4b 65 79 2c 20  ut bPrimaryKey, 
8120: 6f 75 74 20 62 41 75 74 6f 49 6e 63 72 65 6d 65  out bAutoIncreme
8130: 6e 74 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
8140: 69 66 20 28 62 4e 6f 74 4e 75 6c 6c 20 7c 7c 20  if (bNotNull || 
8150: 62 50 72 69 6d 61 72 79 4b 65 79 29 20 72 6f 77  bPrimaryKey) row
8160: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
8170: 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20  mn.AllowDBNull] 
8180: 3d 20 66 61 6c 73 65 3b 0a 0a 20 20 20 20 20 20  = false;..      
8190: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
81a0: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d  bleColumn.IsKey]
81b0: 20 3d 20 62 50 72 69 6d 61 72 79 4b 65 79 3b 0a   = bPrimaryKey;.
81c0: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
81d0: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
81e0: 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e  lColumn.IsAutoIn
81f0: 63 72 65 6d 65 6e 74 5d 20 3d 20 62 41 75 74 6f  crement] = bAuto
8200: 49 6e 63 72 65 6d 65 6e 74 3b 0a 20 20 20 20 20  Increment;.     
8210: 20 20 20 20 20 72 6f 77 5b 22 43 6f 6c 6c 61 74       row["Collat
8220: 69 6f 6e 54 79 70 65 22 5d 20 3d 20 63 6f 6c 6c  ionType"] = coll
8230: 53 65 71 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  Seq;..          
8240: 2f 2f 20 46 6f 72 20 74 79 70 65 73 20 6c 69 6b  // For types lik
8250: 65 20 76 61 72 63 68 61 72 28 35 30 29 20 61 6e  e varchar(50) an
8260: 64 20 73 75 63 68 2c 20 65 78 74 72 61 63 74 20  d such, extract 
8270: 74 68 65 20 73 69 7a 65 0a 20 20 20 20 20 20 20  the size.       
8280: 20 20 20 61 72 53 69 7a 65 20 3d 20 64 61 74 61     arSize = data
8290: 54 79 70 65 2e 53 70 6c 69 74 28 27 28 27 29 3b  Type.Split('(');
82a0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61  .          if (a
82b0: 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31  rSize.Length > 1
82c0: 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  ).          {.  
82d0: 20 20 20 20 20 20 20 20 20 20 64 61 74 61 54 79            dataTy
82e0: 70 65 20 3d 20 61 72 53 69 7a 65 5b 30 5d 3b 0a  pe = arSize[0];.
82f0: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 53 69              arSi
8300: 7a 65 20 3d 20 61 72 53 69 7a 65 5b 31 5d 2e 53  ze = arSize[1].S
8310: 70 6c 69 74 28 27 29 27 29 3b 0a 20 20 20 20 20  plit(')');.     
8320: 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a         if (arSiz
8330: 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20 20  e.Length > 1).  
8340: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
8350: 20 20 20 20 20 20 20 20 20 20 61 72 53 69 7a 65            arSize
8360: 20 3d 20 61 72 53 69 7a 65 5b 30 5d 2e 53 70 6c   = arSize[0].Spl
8370: 69 74 28 27 2c 27 2c 20 27 2e 27 29 3b 0a 20 20  it(',', '.');.  
8380: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8390: 73 71 6c 54 79 70 65 2e 54 79 70 65 20 3d 3d 20  sqlType.Type == 
83a0: 44 62 54 79 70 65 2e 41 6e 73 69 53 74 72 69 6e  DbType.AnsiStrin
83b0: 67 20 7c 7c 20 73 71 6c 54 79 70 65 2e 54 79 70  g || sqlType.Typ
83c0: 65 20 3d 3d 20 44 62 54 79 70 65 2e 42 69 6e 61  e == DbType.Bina
83d0: 72 79 20 7c 7c 0a 20 20 20 20 20 20 20 20 20 20  ry ||.          
83e0: 20 20 20 20 20 20 20 20 73 71 6c 54 79 70 65 2e          sqlType.
83f0: 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 53  Type == DbType.S
8400: 74 72 69 6e 67 20 7c 7c 20 73 71 6c 54 79 70 65  tring || sqlType
8410: 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e  .Type == DbType.
8420: 41 6e 73 69 53 74 72 69 6e 67 46 69 78 65 64 4c  AnsiStringFixedL
8430: 65 6e 67 74 68 20 7c 7c 0a 20 20 20 20 20 20 20  ength ||.       
8440: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 54 79             sqlTy
8450: 70 65 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70  pe.Type == DbTyp
8460: 65 2e 53 74 72 69 6e 67 46 69 78 65 64 4c 65 6e  e.StringFixedLen
8470: 67 74 68 29 0a 20 20 20 20 20 20 20 20 20 20 20  gth).           
8480: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
8490: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
84a0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d  ableColumn.Colum
84b0: 6e 53 69 7a 65 5d 20 3d 20 43 6f 6e 76 65 72 74  nSize] = Convert
84c0: 2e 54 6f 49 6e 74 33 32 28 61 72 53 69 7a 65 5b  .ToInt32(arSize[
84d0: 30 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  0], CultureInfo.
84e0: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
84f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
8500: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
8510: 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20   else.          
8520: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
8530: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
8540: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65  TableColumn.Nume
8550: 72 69 63 50 72 65 63 69 73 69 6f 6e 5d 20 3d 20  ricPrecision] = 
8560: 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28  Convert.ToInt32(
8570: 61 72 53 69 7a 65 5b 30 5d 2c 20 43 75 6c 74 75  arSize[0], Cultu
8580: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
8590: 43 75 6c 74 75 72 65 29 3b 0a 20 20 20 20 20 20  Culture);.      
85a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
85b0: 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29  Size.Length > 1)
85c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
85d0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
85e0: 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63  leColumn.Numeric
85f0: 53 63 61 6c 65 5d 20 3d 20 43 6f 6e 76 65 72 74  Scale] = Convert
8600: 2e 54 6f 49 6e 74 33 32 28 61 72 53 69 7a 65 5b  .ToInt32(arSize[
8610: 31 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  1], CultureInfo.
8620: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
8630: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
8640: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
8650: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  .          }..  
8660: 20 20 20 20 20 20 20 20 69 66 20 28 77 61 6e 74          if (want
8670: 44 65 66 61 75 6c 74 56 61 6c 75 65 29 0a 20 20  DefaultValue).  
8680: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
8690: 20 20 20 20 20 20 2f 2f 20 44 65 74 65 72 6d 69        // Determi
86a0: 6e 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  ne the default v
86b0: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c  alue for the col
86c0: 75 6d 6e 2c 20 77 68 69 63 68 20 73 75 63 6b 73  umn, which sucks
86d0: 20 62 65 63 61 75 73 65 20 77 65 20 68 61 76 65   because we have
86e0: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 73 63   to query the sc
86f0: 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 63 6f  hema for each co
8700: 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
8710: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
8720: 6d 6d 61 6e 64 20 63 6d 64 54 61 62 6c 65 20 3d  mmand cmdTable =
8730: 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61   new SQLiteComma
8740: 6e 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  nd(String.Format
8750: 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76  (CultureInfo.Inv
8760: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22  ariantCulture, "
8770: 50 52 41 47 4d 41 20 5b 7b 30 7d 5d 2e 54 41 42  PRAGMA [{0}].TAB
8780: 4c 45 5f 49 4e 46 4f 28 5b 7b 31 7d 5d 29 22 2c  LE_INFO([{1}])",
8790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
87a0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70  ow[SchemaTableOp
87b0: 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73  tionalColumn.Bas
87c0: 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 2c 0a 20  eCatalogName],. 
87d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
87e0: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
87f0: 6d 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65  mn.BaseTableName
8800: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
8810: 29 2c 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e  ), _command.Conn
8820: 65 63 74 69 6f 6e 29 29 0a 20 20 20 20 20 20 20  ection)).       
8830: 20 20 20 20 20 75 73 69 6e 67 20 28 44 62 44 61       using (DbDa
8840: 74 61 52 65 61 64 65 72 20 72 64 54 61 62 6c 65  taReader rdTable
8850: 20 3d 20 63 6d 64 54 61 62 6c 65 2e 45 78 65 63   = cmdTable.Exec
8860: 75 74 65 52 65 61 64 65 72 28 29 29 0a 20 20 20  uteReader()).   
8870: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
8880: 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 64           // Find
8890: 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 63 6f   the matching co
88a0: 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
88b0: 20 20 20 77 68 69 6c 65 20 28 72 64 54 61 62 6c     while (rdTabl
88c0: 65 2e 52 65 61 64 28 29 29 0a 20 20 20 20 20 20  e.Read()).      
88d0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
88e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
88f0: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 28 73 74  ring.Compare((st
8900: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
8910: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  ableColumn.BaseC
8920: 6f 6c 75 6d 6e 4e 61 6d 65 5d 2c 20 72 64 54 61  olumnName], rdTa
8930: 62 6c 65 2e 47 65 74 53 74 72 69 6e 67 28 31 29  ble.GetString(1)
8940: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
8950: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
8960: 43 61 73 65 29 20 3d 3d 20 30 29 0a 20 20 20 20  Case) == 0).    
8970: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
8980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8990: 69 66 20 28 72 64 54 61 62 6c 65 2e 49 73 44 42  if (rdTable.IsDB
89a0: 4e 75 6c 6c 28 34 29 20 3d 3d 20 66 61 6c 73 65  Null(4) == false
89b0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
89c0: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
89d0: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
89e0: 75 6d 6e 2e 44 65 66 61 75 6c 74 56 61 6c 75 65  umn.DefaultValue
89f0: 5d 20 3d 20 72 64 54 61 62 6c 65 5b 34 5d 3b 0a  ] = rdTable[4];.
8a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8a10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
8a20: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
8a30: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
8a40: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
8a50: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20      }..         
8a60: 20 2f 2f 20 44 65 74 65 72 6d 69 6e 65 20 49 73   // Determine Is
8a70: 55 6e 69 71 75 65 20 70 72 6f 70 65 72 6c 79 2c  Unique properly,
8a80: 20 77 68 69 63 68 20 69 73 20 61 20 70 61 69 6e   which is a pain
8a90: 20 69 6e 20 74 68 65 20 62 75 74 74 21 0a 20 20   in the butt!.  
8aa0: 20 20 20 20 20 20 20 20 69 66 20 28 77 61 6e 74          if (want
8ab0: 55 6e 69 71 75 65 49 6e 66 6f 29 0a 20 20 20 20  UniqueInfo).    
8ac0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
8ad0: 20 20 20 20 69 66 20 28 28 73 74 72 69 6e 67 29      if ((string)
8ae0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
8af0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61  ptionalColumn.Ba
8b00: 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20 21  seCatalogName] !
8b10: 3d 20 73 74 72 43 61 74 61 6c 6f 67 0a 20 20 20  = strCatalog.   
8b20: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 73             || (s
8b30: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
8b40: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
8b50: 54 61 62 6c 65 4e 61 6d 65 5d 20 21 3d 20 73 74  TableName] != st
8b60: 72 54 61 62 6c 65 29 0a 20 20 20 20 20 20 20 20  rTable).        
8b70: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
8b80: 20 20 20 20 73 74 72 43 61 74 61 6c 6f 67 20 3d      strCatalog =
8b90: 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68   (string)row[Sch
8ba0: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
8bb0: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c  Column.BaseCatal
8bc0: 6f 67 4e 61 6d 65 5d 3b 0a 20 20 20 20 20 20 20  ogName];.       
8bd0: 20 20 20 20 20 20 20 73 74 72 54 61 62 6c 65 20         strTable 
8be0: 3d 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63  = (string)row[Sc
8bf0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
8c00: 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 3b 0a  BaseTableName];.
8c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
8c20: 62 6c 49 6e 64 65 78 65 73 20 3d 20 5f 63 6f 6d  blIndexes = _com
8c30: 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e  mand.Connection.
8c40: 47 65 74 53 63 68 65 6d 61 28 22 49 6e 64 65 78  GetSchema("Index
8c50: 65 73 22 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b  es", new string[
8c60: 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] {.            
8c70: 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77 5b      (string)row[
8c80: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
8c90: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61  nalColumn.BaseCa
8ca0: 74 61 6c 6f 67 4e 61 6d 65 5d 2c 0a 20 20 20 20  talogName],.    
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
8cc0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
8cd0: 20 20 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63    (string)row[Sc
8ce0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
8cf0: 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 2c 0a  BaseTableName],.
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d10: 6e 75 6c 6c 20 7d 29 3b 0a 20 20 20 20 20 20 20  null });.       
8d20: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
8d30: 20 20 20 20 66 6f 72 65 61 63 68 20 28 44 61 74      foreach (Dat
8d40: 61 52 6f 77 20 72 6f 77 49 6e 64 65 78 65 73 20  aRow rowIndexes 
8d50: 69 6e 20 74 62 6c 49 6e 64 65 78 65 73 2e 52 6f  in tblIndexes.Ro
8d60: 77 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ws).            
8d70: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
8d80: 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 20  tblIndexColumns 
8d90: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  = _command.Conne
8da0: 63 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28  ction.GetSchema(
8db0: 22 49 6e 64 65 78 43 6f 6c 75 6d 6e 73 22 2c 20  "IndexColumns", 
8dc0: 6e 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b 0a 20  new string[] {. 
8dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
8de0: 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d  string)row[Schem
8df0: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
8e00: 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67  lumn.BaseCatalog
8e10: 4e 61 6d 65 5d 2c 0a 20 20 20 20 20 20 20 20 20  Name],.         
8e20: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 0a 20 20 20         null,.   
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74               (st
8e40: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
8e50: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54  ableColumn.BaseT
8e60: 61 62 6c 65 4e 61 6d 65 5d 2c 0a 20 20 20 20 20  ableName],.     
8e70: 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
8e80: 6e 67 29 72 6f 77 49 6e 64 65 78 65 73 5b 22 49  ng)rowIndexes["I
8e90: 4e 44 45 58 5f 4e 41 4d 45 22 5d 2c 0a 20 20 20  NDEX_NAME"],.   
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
8eb0: 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l.              
8ec0: 20 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20    });.          
8ed0: 20 20 20 20 66 6f 72 65 61 63 68 20 28 44 61 74      foreach (Dat
8ee0: 61 52 6f 77 20 72 6f 77 43 6f 6c 75 6d 6e 49 6e  aRow rowColumnIn
8ef0: 64 65 78 20 69 6e 20 74 62 6c 49 6e 64 65 78 43  dex in tblIndexC
8f00: 6f 6c 75 6d 6e 73 2e 52 6f 77 73 29 0a 20 20 20  olumns.Rows).   
8f10: 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20             {.   
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
8f30: 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28  (String.Compare(
8f40: 28 73 74 72 69 6e 67 29 72 6f 77 43 6f 6c 75 6d  (string)rowColum
8f50: 6e 49 6e 64 65 78 5b 22 43 4f 4c 55 4d 4e 5f 4e  nIndex["COLUMN_N
8f60: 41 4d 45 22 5d 2c 20 73 74 72 43 6f 6c 75 6d 6e  AME"], strColumn
8f70: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
8f80: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
8f90: 43 61 73 65 29 20 3d 3d 20 30 29 0a 20 20 20 20  Case) == 0).    
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fc0: 2f 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  //.             
8fd0: 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20       // BUGFIX: 
8fe0: 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 77  Make sure that w
8ff0: 65 20 6f 6e 6c 79 20 66 6c 61 67 20 74 68 69 73  e only flag this
9000: 20 63 6f 6c 75 6d 6e 20 61 73 20 22 75 6e 69 71   column as "uniq
9010: 75 65 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue".            
9020: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
9030: 20 69 66 20 77 65 20 61 72 65 20 6e 6f 74 20 70   if we are not p
9040: 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 73 6f 6d  rocessing of som
9050: 65 20 6b 69 6e 64 20 6f 66 20 6d 75 6c 74 69 2d  e kind of multi-
9060: 74 61 62 6c 65 0a 20 20 20 20 20 20 20 20 20 20  table.          
9070: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
9080: 20 20 20 63 6f 6e 73 74 72 75 63 74 20 28 69 2e     construct (i.
9090: 65 2e 20 61 20 6a 6f 69 6e 29 20 62 65 63 61 75  e. a join) becau
90a0: 73 65 20 69 6e 20 74 68 61 74 20 63 61 73 65 20  se in that case 
90b0: 77 65 20 6d 75 73 74 0a 20 20 20 20 20 20 20 20  we must.        
90c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
90d0: 20 20 20 20 20 61 6c 6c 6f 77 20 64 75 70 6c 69       allow dupli
90e0: 63 61 74 65 20 76 61 6c 75 65 73 20 28 72 65 66  cate values (ref
90f0: 65 72 20 74 6f 20 74 69 63 6b 65 74 20 5b 37 65  er to ticket [7e
9100: 33 66 61 39 33 37 34 34 5d 29 2e 0a 20 20 20 20  3fa93744])..    
9110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
9120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9130: 20 20 20 69 66 20 28 70 61 72 65 6e 74 54 6f 43     if (parentToC
9140: 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 20 3d 3d 20  olumns.Count == 
9150: 31 20 26 26 20 74 62 6c 49 6e 64 65 78 43 6f 6c  1 && tblIndexCol
9160: 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74 20  umns.Rows.Count 
9170: 3d 3d 20 31 20 26 26 20 28 62 6f 6f 6c 29 72 6f  == 1 && (bool)ro
9180: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
9190: 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d  umn.AllowDBNull]
91a0: 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 20   == false).     
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
91c0: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
91d0: 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 20 3d  lumn.IsUnique] =
91e0: 20 72 6f 77 49 6e 64 65 78 65 73 5b 22 55 4e 49   rowIndexes["UNI
91f0: 51 55 45 22 5d 3b 0a 0a 20 20 20 20 20 20 20 20  QUE"];..        
9200: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20            // If 
9210: 69 74 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70  its an integer p
9220: 72 69 6d 61 72 79 20 6b 65 79 20 61 6e 64 20 74  rimary key and t
9230: 68 65 20 6f 6e 6c 79 20 70 72 69 6d 61 72 79 20  he only primary 
9240: 6b 65 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65  key in the table
9250: 2c 20 74 68 65 6e 20 69 74 73 20 61 20 72 6f 77  , then its a row
9260: 69 64 20 61 6c 69 61 73 20 61 6e 64 20 69 73 20  id alias and is 
9270: 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 20 20  autoincrement.  
9280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9290: 2f 2f 20 4e 4f 54 45 3a 20 20 43 75 72 72 65 6e  // NOTE:  Curren
92a0: 74 6c 79 20 63 6f 6d 6d 65 6e 74 65 64 20 6f 75  tly commented ou
92b0: 74 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69  t because this i
92c0: 73 20 6e 6f 74 20 61 6c 77 61 79 73 20 74 68 65  s not always the
92d0: 20 64 65 73 69 72 65 64 20 62 65 68 61 76 69 6f   desired behavio
92e0: 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  r.  For example,
92f0: 20 61 20 31 3a 31 20 72 65 6c 61 74 69 6f 6e 73   a 1:1 relations
9300: 68 69 70 20 77 69 74 68 0a 20 20 20 20 20 20 20  hip with.       
9310: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
9320: 20 20 20 20 20 61 6e 6f 74 68 65 72 20 74 61 62       another tab
9330: 6c 65 2c 20 77 68 65 72 65 20 74 68 65 20 6f 74  le, where the ot
9340: 68 65 72 20 74 61 62 6c 65 20 69 73 20 61 75 74  her table is aut
9350: 6f 69 6e 63 72 65 6d 65 6e 74 2c 20 62 75 74 20  oincrement, but 
9360: 74 68 69 73 20 6f 6e 65 20 69 73 20 6e 6f 74 2c  this one is not,
9370: 20 61 6e 64 20 75 73 65 73 20 74 68 65 20 72 6f   and uses the ro
9380: 77 69 64 20 66 72 6f 6d 20 74 68 65 20 6f 74 68  wid from the oth
9390: 65 72 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  er..            
93a0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
93b0: 49 74 20 69 73 20 73 61 66 65 72 20 74 6f 20 6f  It is safer to o
93c0: 6e 6c 79 20 73 65 74 20 41 75 74 6f 69 6e 63 72  nly set Autoincr
93d0: 65 6d 65 6e 74 20 6f 6e 20 74 61 62 6c 65 73 20  ement on tables 
93e0: 77 68 65 72 65 20 77 65 27 72 65 20 53 55 52 45  where we're SURE
93f0: 20 74 68 65 20 75 73 65 72 20 73 70 65 63 69 66   the user specif
9400: 69 65 64 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  ied AUTOINCREMEN
9410: 54 2c 20 65 76 65 6e 20 69 66 20 69 74 73 20 61  T, even if its a
9420: 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 2e 0a 0a   rowid column...
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9440: 20 20 69 66 20 28 74 62 6c 49 6e 64 65 78 43 6f    if (tblIndexCo
9450: 6c 75 6d 6e 73 2e 52 6f 77 73 2e 43 6f 75 6e 74  lumns.Rows.Count
9460: 20 3d 3d 20 31 20 26 26 20 28 62 6f 6f 6c 29 72   == 1 && (bool)r
9470: 6f 77 49 6e 64 65 78 65 73 5b 22 50 52 49 4d 41  owIndexes["PRIMA
9480: 52 59 5f 4b 45 59 22 5d 20 3d 3d 20 74 72 75 65  RY_KEY"] == true
9490: 20 26 26 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c   && String.IsNul
94a0: 6c 4f 72 45 6d 70 74 79 28 64 61 74 61 54 79 70  lOrEmpty(dataTyp
94b0: 65 29 20 3d 3d 20 66 61 6c 73 65 20 26 26 0a 20  e) == false &&. 
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94d0: 20 20 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72     String.Compar
94e0: 65 28 64 61 74 61 54 79 70 65 2c 20 22 69 6e 74  e(dataType, "int
94f0: 65 67 65 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d  eger", StringCom
9500: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
9510: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
9520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9530: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
9540: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 72 6f 77           //  row
9550: 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  [SchemaTableOpti
9560: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74  onalColumn.IsAut
9570: 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 74 72  oIncrement] = tr
9580: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue;.            
9590: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
95a0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
95b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
95c0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
95d0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
95e0: 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20  }.          }.. 
95f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
9600: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
9610: 79 28 64 61 74 61 54 79 70 65 29 29 0a 20 20 20  y(dataType)).   
9620: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
9630: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
9640: 79 20 61 66 66 69 6e 3b 0a 20 20 20 20 20 20 20  y affin;.       
9650: 20 20 20 20 20 64 61 74 61 54 79 70 65 20 3d 20       dataType = 
9660: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
9670: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65  ._sql.ColumnType
9680: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
9690: 74 2c 20 6e 2c 20 6f 75 74 20 61 66 66 69 6e 29  t, n, out affin)
96a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20  ;.          }.. 
96b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
96c0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
96d0: 79 28 64 61 74 61 54 79 70 65 29 20 3d 3d 20 66  y(dataType) == f
96e0: 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20 20 20  alse).          
96f0: 20 20 72 6f 77 5b 22 44 61 74 61 54 79 70 65 4e    row["DataTypeN
9700: 61 6d 65 22 5d 20 3d 20 64 61 74 61 54 79 70 65  ame"] = dataType
9710: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
9720: 20 20 20 20 74 62 6c 2e 52 6f 77 73 2e 41 64 64      tbl.Rows.Add
9730: 28 72 6f 77 29 3b 0a 20 20 20 20 20 20 7d 0a 0a  (row);.      }..
9740: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 49 6e        if (_keyIn
9750: 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  fo != null).    
9760: 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 41 70 70      _keyInfo.App
9770: 65 6e 64 53 63 68 65 6d 61 54 61 62 6c 65 28 74  endSchemaTable(t
9780: 62 6c 29 3b 0a 0a 20 20 20 20 20 20 74 62 6c 2e  bl);..      tbl.
9790: 41 63 63 65 70 74 43 68 61 6e 67 65 73 28 29 3b  AcceptChanges();
97a0: 0a 20 20 20 20 20 20 74 62 6c 2e 45 6e 64 4c 6f  .      tbl.EndLo
97b0: 61 64 44 61 74 61 28 29 3b 0a 0a 20 20 20 20 20  adData();..     
97c0: 20 72 65 74 75 72 6e 20 74 62 6c 3b 0a 20 20 20   return tbl;.   
97d0: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
97e0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65  mary>.    /// Re
97f0: 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75  trieves the colu
9800: 6d 6e 20 61 73 20 61 20 73 74 72 69 6e 67 0a 20  mn as a string. 
9810: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9820: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
9830: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
9840: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
9850: 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  n to retrieve</p
9860: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
9870: 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c 2f 72  eturns>string</r
9880: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
9890: 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  ic override stri
98a0: 6e 67 20 47 65 74 53 74 72 69 6e 67 28 69 6e 74  ng GetString(int
98b0: 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20   i).    {.      
98c0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
98d0: 0a 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d  ..      if (i >=
98e0: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
98f0: 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21  nt && _keyInfo !
9900: 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20  = null).        
9910: 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e  return _keyInfo.
9920: 47 65 74 53 74 72 69 6e 67 28 69 20 2d 20 56 69  GetString(i - Vi
9930: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
9940: 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66 79 54  ;..      VerifyT
9950: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53 74  ype(i, DbType.St
9960: 72 69 6e 67 29 3b 0a 20 20 20 20 20 20 72 65 74  ring);.      ret
9970: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
9980: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78  ment._sql.GetTex
9990: 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  t(_activeStateme
99a0: 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20  nt, i);.    }.. 
99b0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
99c0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
99d0: 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73  es the column as
99e0: 20 61 6e 20 6f 62 6a 65 63 74 20 63 6f 72 72 65   an object corre
99f0: 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20  sponding to the 
9a00: 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 74  underlying datat
9a10: 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ype of the colum
9a20: 6e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  n.    /// </summ
9a30: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
9a40: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
9a50: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
9a60: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
9a70: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
9a80: 20 3c 72 65 74 75 72 6e 73 3e 6f 62 6a 65 63 74   <returns>object
9a90: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
9aa0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f  ublic override o
9ab0: 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 69  bject GetValue(i
9ac0: 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20  nt i).    {.    
9ad0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9ae0: 29 3b 0a 20 20 20 20 20 20 43 68 65 63 6b 56 61  );.      CheckVa
9af0: 6c 69 64 52 6f 77 28 29 3b 0a 0a 20 20 20 20 20  lidRow();..     
9b00: 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c   if (i >= Visibl
9b10: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
9b20: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
9b30: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
9b40: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 56 61 6c 75  _keyInfo.GetValu
9b50: 65 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65  e(i - VisibleFie
9b60: 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20  ldCount);..     
9b70: 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 20   SQLiteType typ 
9b80: 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  = GetSQLiteType(
9b90: 69 29 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72  i);..      retur
9ba0: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
9bb0: 6e 74 2e 5f 73 71 6c 2e 47 65 74 56 61 6c 75 65  nt._sql.GetValue
9bc0: 28 0a 20 20 20 20 20 20 20 20 20 20 5f 61 63 74  (.          _act
9bd0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 53 51  iveStatement, SQ
9be0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 47 65 74 46  LiteCommand.GetF
9bf0: 6c 61 67 73 28 5f 63 6f 6d 6d 61 6e 64 29 2c 20  lags(_command), 
9c00: 69 2c 20 74 79 70 29 3b 0a 20 20 20 20 7d 0a 0a  i, typ);.    }..
9c10: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9c20: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 65 69  >.    /// Retrei
9c30: 76 65 73 20 74 68 65 20 76 61 6c 75 65 73 20 6f  ves the values o
9c40: 66 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d  f multiple colum
9c50: 6e 73 2c 20 75 70 20 74 6f 20 74 68 65 20 73 69  ns, up to the si
9c60: 7a 65 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69  ze of the suppli
9c70: 65 64 20 61 72 72 61 79 0a 20 20 20 20 2f 2f 2f  ed array.    ///
9c80: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
9c90: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
9ca0: 22 76 61 6c 75 65 73 22 3e 54 68 65 20 61 72 72  "values">The arr
9cb0: 61 79 20 74 6f 20 66 69 6c 6c 20 77 69 74 68 20  ay to fill with 
9cc0: 76 61 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20  values from the 
9cd0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 63  columns in the c
9ce0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
9cf0: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
9d00: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75   <returns>The nu
9d10: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
9d20: 72 65 74 72 69 65 76 65 64 3c 2f 72 65 74 75 72  retrieved</retur
9d30: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
9d40: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 56  verride int GetV
9d50: 61 6c 75 65 73 28 6f 62 6a 65 63 74 5b 5d 20 76  alues(object[] v
9d60: 61 6c 75 65 73 29 0a 20 20 20 20 7b 0a 20 20 20  alues).    {.   
9d70: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
9d80: 28 29 3b 0a 0a 20 20 20 20 20 20 69 6e 74 20 6e  ();..      int n
9d90: 4d 61 78 20 3d 20 46 69 65 6c 64 43 6f 75 6e 74  Max = FieldCount
9da0: 3b 0a 20 20 20 20 20 20 69 66 20 28 76 61 6c 75  ;.      if (valu
9db0: 65 73 2e 4c 65 6e 67 74 68 20 3c 20 6e 4d 61 78  es.Length < nMax
9dc0: 29 20 6e 4d 61 78 20 3d 20 76 61 6c 75 65 73 2e  ) nMax = values.
9dd0: 4c 65 6e 67 74 68 3b 0a 0a 20 20 20 20 20 20 66  Length;..      f
9de0: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
9df0: 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0a 20 20   < nMax; n++).  
9e00: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 76 61      {.        va
9e10: 6c 75 65 73 5b 6e 5d 20 3d 20 47 65 74 56 61 6c  lues[n] = GetVal
9e20: 75 65 28 6e 29 3b 0a 20 20 20 20 20 20 7d 0a 0a  ue(n);.      }..
9e30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 4d 61        return nMa
9e40: 78 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f  x;.    }..    //
9e50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
9e60: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 63 6f  /// Returns a co
9e70: 6c 6c 65 63 74 69 6f 6e 20 63 6f 6e 74 61 69 6e  llection contain
9e80: 69 6e 67 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75  ing all the colu
9e90: 6d 6e 20 6e 61 6d 65 73 20 61 6e 64 20 76 61 6c  mn names and val
9ea0: 75 65 73 20 66 6f 72 20 74 68 65 0a 20 20 20 20  ues for the.    
9eb0: 2f 2f 2f 20 63 75 72 72 65 6e 74 20 72 6f 77 20  /// current row 
9ec0: 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65 20 63  of data in the c
9ed0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
9ee0: 2c 20 69 66 20 61 6e 79 2e 20 20 49 66 20 74 68  , if any.  If th
9ef0: 65 72 65 20 69 73 20 6e 6f 0a 20 20 20 20 2f 2f  ere is no.    //
9f00: 2f 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 72  / current row or
9f10: 20 6e 6f 20 63 75 72 72 65 6e 74 20 72 65 73 75   no current resu
9f20: 6c 74 73 65 74 2c 20 61 6e 20 65 78 63 65 70 74  ltset, an except
9f30: 69 6f 6e 20 6d 61 79 20 62 65 20 74 68 72 6f 77  ion may be throw
9f40: 6e 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  n..    /// </sum
9f50: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  mary>.    /// <r
9f60: 65 74 75 72 6e 73 3e 0a 20 20 20 20 2f 2f 2f 20  eturns>.    /// 
9f70: 54 68 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 63  The collection c
9f80: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 63 6f  ontaining the co
9f90: 6c 75 6d 6e 20 6e 61 6d 65 20 61 6e 64 20 76 61  lumn name and va
9fa0: 6c 75 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lue information 
9fb0: 66 6f 72 20 74 68 65 0a 20 20 20 20 2f 2f 2f 20  for the.    /// 
9fc0: 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 64  current row of d
9fd0: 61 74 61 20 69 6e 20 74 68 65 20 63 75 72 72 65  ata in the curre
9fe0: 6e 74 20 72 65 73 75 6c 74 73 65 74 20 6f 72 20  nt resultset or 
9ff0: 6e 75 6c 6c 20 69 66 20 74 68 69 73 20 69 6e 66  null if this inf
a000: 6f 72 6d 61 74 69 6f 6e 0a 20 20 20 20 2f 2f 2f  ormation.    ///
a010: 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69   cannot be obtai
a020: 6e 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ned..    /// </r
a030: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
a040: 69 63 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c  ic NameValueColl
a050: 65 63 74 69 6f 6e 20 47 65 74 56 61 6c 75 65 73  ection GetValues
a060: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20  ().    {.       
a070: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a080: 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ;..        if ((
a090: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
a0a0: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 5f 61   == null) || (_a
a0b0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
a0c0: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 29 0a 20 20  sql == null)).  
a0d0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
a0e0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
a0f0: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
a100: 0a 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 4d  ..        int nM
a110: 61 78 20 3d 20 56 69 73 69 62 6c 65 46 69 65 6c  ax = VisibleFiel
a120: 64 43 6f 75 6e 74 3b 0a 20 20 20 20 20 20 20 20  dCount;.        
a130: 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63 74  NameValueCollect
a140: 69 6f 6e 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  ion result = new
a150: 20 4e 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63   NameValueCollec
a160: 74 69 6f 6e 28 6e 4d 61 78 29 3b 0a 0a 20 20 20  tion(nMax);..   
a170: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20       for (int n 
a180: 3d 20 30 3b 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e  = 0; n < nMax; n
a190: 2b 2b 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  ++).        {.  
a1a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
a1b0: 20 6e 61 6d 65 20 3d 20 5f 61 63 74 69 76 65 53   name = _activeS
a1c0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f  tatement._sql.Co
a1d0: 6c 75 6d 6e 4e 61 6d 65 28 5f 61 63 74 69 76 65  lumnName(_active
a1e0: 53 74 61 74 65 6d 65 6e 74 2c 20 6e 29 3b 0a 20  Statement, n);. 
a1f0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
a200: 67 20 76 61 6c 75 65 20 3d 20 5f 61 63 74 69 76  g value = _activ
a210: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
a220: 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65 53  GetText(_activeS
a230: 74 61 74 65 6d 65 6e 74 2c 20 6e 29 3b 0a 0a 20  tatement, n);.. 
a240: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
a250: 74 2e 41 64 64 28 6e 61 6d 65 2c 20 76 61 6c 75  t.Add(name, valu
a260: 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20  e);.        }.. 
a270: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
a280: 73 75 6c 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  sult;.    }..   
a290: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
a2a0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54     /// Returns T
a2b0: 72 75 65 20 69 66 20 74 68 65 20 72 65 73 75 6c  rue if the resul
a2c0: 74 73 65 74 20 68 61 73 20 72 6f 77 73 20 74 68  tset has rows th
a2d0: 61 74 20 63 61 6e 20 62 65 20 66 65 74 63 68 65  at can be fetche
a2e0: 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  d.    /// </summ
a2f0: 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  ary>.    public 
a300: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 48 61  override bool Ha
a310: 73 52 6f 77 73 0a 20 20 20 20 7b 0a 20 20 20 20  sRows.    {.    
a320: 20 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20    get.      {.  
a330: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
a340: 73 65 64 28 29 3b 0a 20 20 20 20 20 20 20 20 43  sed();.        C
a350: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20  heckClosed();.  
a360: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f 72        return (_r
a370: 65 61 64 69 6e 67 53 74 61 74 65 20 21 3d 20 31  eadingState != 1
a380: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
a390: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
a3a0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  ry>.    /// Retu
a3b0: 72 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20  rns True if the 
a3c0: 64 61 74 61 20 72 65 61 64 65 72 20 69 73 20 63  data reader is c
a3d0: 6c 6f 73 65 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f  losed.    /// </
a3e0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75 62  summary>.    pub
a3f0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
a400: 6c 20 49 73 43 6c 6f 73 65 64 0a 20 20 20 20 7b  l IsClosed.    {
a410: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65  .      get { Che
a420: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
a430: 74 75 72 6e 20 28 5f 63 6f 6d 6d 61 6e 64 20 3d  turn (_command =
a440: 3d 20 6e 75 6c 6c 29 3b 20 7d 0a 20 20 20 20 7d  = null); }.    }
a450: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
a460: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  ry>.    /// Retu
a470: 72 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20  rns True if the 
a480: 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e  specified column
a490: 20 69 73 20 6e 75 6c 6c 0a 20 20 20 20 2f 2f 2f   is null.    ///
a4a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
a4b0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
a4c0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
a4d0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72   the column to r
a4e0: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a  etrieve</param>.
a4f0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
a500: 3e 54 72 75 65 20 6f 72 20 46 61 6c 73 65 3c 2f  >True or False</
a510: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
a520: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
a530: 6c 20 49 73 44 42 4e 75 6c 6c 28 69 6e 74 20 69  l IsDBNull(int i
a540: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68  ).    {.      Ch
a550: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a  eckDisposed();..
a560: 20 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56        if (i >= V
a570: 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74  isibleFieldCount
a580: 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20   && _keyInfo != 
a590: 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65  null).        re
a5a0: 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 49 73  turn _keyInfo.Is
a5b0: 44 42 4e 75 6c 6c 28 69 20 2d 20 56 69 73 69 62  DBNull(i - Visib
a5c0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a  leFieldCount);..
a5d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63        return _ac
a5e0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
a5f0: 71 6c 2e 49 73 4e 75 6c 6c 28 5f 61 63 74 69 76  ql.IsNull(_activ
a600: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a  eStatement, i);.
a610: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
a620: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
a630: 20 4d 6f 76 65 73 20 74 6f 20 74 68 65 20 6e 65   Moves to the ne
a640: 78 74 20 72 65 73 75 6c 74 73 65 74 20 69 6e 20  xt resultset in 
a650: 6d 75 6c 74 69 70 6c 65 20 72 6f 77 2d 72 65 74  multiple row-ret
a660: 75 72 6e 69 6e 67 20 53 51 4c 20 63 6f 6d 6d 61  urning SQL comma
a670: 6e 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  nd..    /// </su
a680: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
a690: 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20  returns>True if 
a6a0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  the command was 
a6b0: 73 75 63 63 65 73 73 66 75 6c 20 61 6e 64 20 61  successful and a
a6c0: 20 6e 65 77 20 72 65 73 75 6c 74 73 65 74 20 69   new resultset i
a6d0: 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 46 61 6c  s available, Fal
a6e0: 73 65 20 6f 74 68 65 72 77 69 73 65 2e 3c 2f 72  se otherwise.</r
a6f0: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
a700: 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
a710: 20 4e 65 78 74 52 65 73 75 6c 74 28 29 0a 20 20   NextResult().  
a720: 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 44    {.      CheckD
a730: 69 73 70 6f 73 65 64 28 29 3b 0a 20 20 20 20 20  isposed();.     
a740: 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a   CheckClosed();.
a750: 20 20 20 20 20 20 69 66 20 28 5f 74 68 72 6f 77        if (_throw
a760: 4f 6e 44 69 73 70 6f 73 65 64 29 20 53 51 4c 69  OnDisposed) SQLi
a770: 74 65 43 6f 6d 6d 61 6e 64 2e 43 68 65 63 6b 28  teCommand.Check(
a780: 5f 63 6f 6d 6d 61 6e 64 29 3b 0a 0a 20 20 20 20  _command);..    
a790: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
a7a0: 74 20 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0a 20  t stmt = null;. 
a7b0: 20 20 20 20 20 69 6e 74 20 66 69 65 6c 64 43 6f       int fieldCo
a7c0: 75 6e 74 3b 0a 20 20 20 20 20 20 62 6f 6f 6c 20  unt;.      bool 
a7d0: 73 63 68 65 6d 61 4f 6e 6c 79 20 3d 20 28 28 5f  schemaOnly = ((_
a7e0: 63 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20  commandBehavior 
a7f0: 26 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  & CommandBehavio
a800: 72 2e 53 63 68 65 6d 61 4f 6e 6c 79 29 20 21 3d  r.SchemaOnly) !=
a810: 20 30 29 3b 0a 0a 20 20 20 20 20 20 77 68 69 6c   0);..      whil
a820: 65 20 28 74 72 75 65 29 0a 20 20 20 20 20 20 7b  e (true).      {
a830: 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d  .        if (stm
a840: 74 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63  t == null && _ac
a850: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20 21 3d  tiveStatement !=
a860: 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76 65   null && _active
a870: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 20 21  Statement._sql !
a880: 3d 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76  = null && _activ
a890: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
a8a0: 49 73 4f 70 65 6e 28 29 29 0a 20 20 20 20 20 20  IsOpen()).      
a8b0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2f    {.          //
a8c0: 20 52 65 73 65 74 20 74 68 65 20 70 72 65 76 69   Reset the previ
a8d0: 6f 75 73 6c 79 2d 65 78 65 63 75 74 65 64 20 73  ously-executed s
a8e0: 74 61 74 65 6d 65 6e 74 0a 20 20 20 20 20 20 20  tatement.       
a8f0: 20 20 20 69 66 20 28 21 73 63 68 65 6d 61 4f 6e     if (!schemaOn
a900: 6c 79 29 20 5f 61 63 74 69 76 65 53 74 61 74 65  ly) _activeState
a910: 6d 65 6e 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28  ment._sql.Reset(
a920: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
a930: 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  );..          //
a940: 20 49 66 20 77 65 27 72 65 20 6f 6e 6c 79 20 73   If we're only s
a950: 75 70 70 6f 73 65 64 20 74 6f 20 72 65 74 75 72  upposed to retur
a960: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 73 65  n a single rowse
a970: 74 2c 20 73 74 65 70 20 74 68 72 6f 75 67 68 20  t, step through 
a980: 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 73 74  all remaining st
a990: 61 74 65 6d 65 6e 74 73 20 6f 6e 63 65 20 75 6e  atements once un
a9a0: 74 69 6c 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  til.          //
a9b0: 20 74 68 65 79 20 61 72 65 20 61 6c 6c 20 64 6f   they are all do
a9c0: 6e 65 20 61 6e 64 20 72 65 74 75 72 6e 20 66 61  ne and return fa
a9d0: 6c 73 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20  lse to indicate 
a9e0: 6e 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74 73 65  no more resultse
a9f0: 74 73 20 65 78 69 73 74 2e 0a 20 20 20 20 20 20  ts exist..      
aa00: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
aa10: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
aa20: 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 69 6e 67  andBehavior.Sing
aa30: 6c 65 52 65 73 75 6c 74 29 20 21 3d 20 30 29 0a  leResult) != 0).
aa40: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
aa50: 20 20 20 20 20 20 20 20 66 6f 72 20 28 3b 20 3b          for (; ;
aa60: 20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b   ).            {
aa70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
aa80: 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 47  tmt = _command.G
aa90: 65 74 53 74 61 74 65 6d 65 6e 74 28 5f 61 63 74  etStatement(_act
aaa0: 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65  iveStatementInde
aab0: 78 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 20 20  x + 1);.        
aac0: 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d        if (stmt =
aad0: 3d 20 6e 75 6c 6c 29 20 62 72 65 61 6b 3b 0a 20  = null) break;. 
aae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 61 63               _ac
aaf0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64  tiveStatementInd
ab00: 65 78 2b 2b 3b 0a 0a 20 20 20 20 20 20 20 20 20  ex++;..         
ab10: 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61       if (!schema
ab20: 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f 73 71 6c 2e  Only) stmt._sql.
ab30: 53 74 65 70 28 73 74 6d 74 29 3b 0a 20 20 20 20  Step(stmt);.    
ab40: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
ab50: 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f  mt._sql.ColumnCo
ab60: 75 6e 74 28 73 74 6d 74 29 20 3d 3d 20 30 29 0a  unt(stmt) == 0).
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a                {.
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab90: 69 66 20 28 5f 72 6f 77 73 41 66 66 65 63 74 65  if (_rowsAffecte
aba0: 64 20 3d 3d 20 2d 31 29 20 5f 72 6f 77 73 41 66  d == -1) _rowsAf
abb0: 66 65 63 74 65 64 20 3d 20 30 3b 0a 20 20 20 20  fected = 0;.    
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
abd0: 63 68 61 6e 67 65 73 20 3d 20 30 3b 0a 20 20 20  changes = 0;.   
abe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
abf0: 28 73 74 6d 74 2e 54 72 79 47 65 74 43 68 61 6e  (stmt.TryGetChan
ac00: 67 65 73 28 72 65 66 20 63 68 61 6e 67 65 73 29  ges(ref changes)
ac10: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
ac20: 20 20 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63        _rowsAffec
ac30: 74 65 64 20 2b 3d 20 63 68 61 6e 67 65 73 3b 0a  ted += changes;.
ac40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac50: 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 20  else.           
ac60: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ac70: 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 20  false;.         
ac80: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
ac90: 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d 61       if (!schema
aca0: 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f 73 71 6c 2e  Only) stmt._sql.
acb0: 52 65 73 65 74 28 73 74 6d 74 29 3b 20 2f 2f 20  Reset(stmt); // 
acc0: 47 6f 74 74 61 20 72 65 73 65 74 20 61 66 74 65  Gotta reset afte
acd0: 72 20 65 76 65 72 79 20 73 74 65 70 20 74 6f 20  r every step to 
ace0: 72 65 6c 65 61 73 65 20 61 6e 79 20 6c 6f 63 6b  release any lock
acf0: 73 20 61 6e 64 20 73 75 63 68 21 0a 20 20 20 20  s and such!.    
ad00: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ad10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
ad20: 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  se;.          }.
ad30: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
ad40: 20 20 20 2f 2f 20 47 65 74 20 74 68 65 20 6e 65     // Get the ne
ad50: 78 74 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  xt statement to 
ad60: 65 78 65 63 75 74 65 0a 20 20 20 20 20 20 20 20  execute.        
ad70: 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  stmt = _command.
ad80: 47 65 74 53 74 61 74 65 6d 65 6e 74 28 5f 61 63  GetStatement(_ac
ad90: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64  tiveStatementInd
ada0: 65 78 20 2b 20 31 29 3b 0a 0a 20 20 20 20 20 20  ex + 1);..      
adb0: 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 72 65    // If we've re
adc0: 61 63 68 65 64 20 74 68 65 20 65 6e 64 20 6f 66  ached the end of
add0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 73 2c   the statements,
ade0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2c 20 6e   return false, n
adf0: 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74 73 65 74  o more resultset
ae00: 73 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74  s.        if (st
ae10: 6d 74 20 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  mt == null).    
ae20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
ae30: 73 65 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20  se;..        // 
ae40: 49 66 20 77 65 20 77 65 72 65 20 6f 6e 20 61 20  If we were on a 
ae50: 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65  current resultse
ae60: 74 2c 20 73 65 74 20 74 68 65 20 73 74 61 74 65  t, set the state
ae70: 20 74 6f 20 22 64 6f 6e 65 20 72 65 61 64 69 6e   to "done readin
ae80: 67 22 20 66 6f 72 20 69 74 0a 20 20 20 20 20 20  g" for it.      
ae90: 20 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74    if (_readingSt
aea0: 61 74 65 20 3c 20 31 29 0a 20 20 20 20 20 20 20  ate < 1).       
aeb0: 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65     _readingState
aec0: 20 3d 20 31 3b 0a 0a 20 20 20 20 20 20 20 20 5f   = 1;..        _
aed0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49  activeStatementI
aee0: 6e 64 65 78 2b 2b 3b 0a 0a 20 20 20 20 20 20 20  ndex++;..       
aef0: 20 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20 73 74   fieldCount = st
af00: 6d 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f  mt._sql.ColumnCo
af10: 75 6e 74 28 73 74 6d 74 29 3b 0a 0a 20 20 20 20  unt(stmt);..    
af20: 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20 73 74      // If the st
af30: 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 20 61  atement is not a
af40: 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
af50: 74 20 6f 72 20 77 65 27 72 65 20 6e 6f 74 20 72  t or we're not r
af60: 65 74 72 69 65 76 69 6e 67 20 73 63 68 65 6d 61  etrieving schema
af70: 20 6f 6e 6c 79 2c 20 74 68 65 6e 20 70 65 72 66   only, then perf
af80: 6f 72 6d 20 74 68 65 20 69 6e 69 74 69 61 6c 20  orm the initial 
af90: 73 74 65 70 0a 20 20 20 20 20 20 20 20 69 66 20  step.        if 
afa0: 28 21 73 63 68 65 6d 61 4f 6e 6c 79 20 7c 7c 20  (!schemaOnly || 
afb0: 28 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d 20 30  (fieldCount == 0
afc0: 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  )).        {.   
afd0: 20 20 20 20 20 20 20 69 66 20 28 21 73 63 68 65         if (!sche
afe0: 6d 61 4f 6e 6c 79 20 26 26 20 73 74 6d 74 2e 5f  maOnly && stmt._
aff0: 73 71 6c 2e 53 74 65 70 28 73 74 6d 74 29 29 0a  sql.Step(stmt)).
b000: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
b010: 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67          _reading
b020: 53 74 61 74 65 20 3d 20 2d 31 3b 0a 20 20 20 20  State = -1;.    
b030: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
b040: 20 20 65 6c 73 65 20 69 66 20 28 66 69 65 6c 64    else if (field
b050: 43 6f 75 6e 74 20 3d 3d 20 30 29 20 2f 2f 20 4e  Count == 0) // N
b060: 6f 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 2c  o rows returned,
b070: 20 69 66 20 66 69 65 6c 64 43 6f 75 6e 74 20 69   if fieldCount i
b080: 73 20 7a 65 72 6f 2c 20 73 6b 69 70 20 74 6f 20  s zero, skip to 
b090: 74 68 65 20 6e 65 78 74 20 73 74 61 74 65 6d 65  the next stateme
b0a0: 6e 74 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20  nt.          {. 
b0b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
b0c0: 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d 3d 20  rowsAffected == 
b0d0: 2d 31 29 20 5f 72 6f 77 73 41 66 66 65 63 74 65  -1) _rowsAffecte
b0e0: 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  d = 0;.         
b0f0: 20 20 20 69 6e 74 20 63 68 61 6e 67 65 73 20 3d     int changes =
b100: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   0;.            
b110: 69 66 20 28 73 74 6d 74 2e 54 72 79 47 65 74 43  if (stmt.TryGetC
b120: 68 61 6e 67 65 73 28 72 65 66 20 63 68 61 6e 67  hanges(ref chang
b130: 65 73 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  es)).           
b140: 20 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64     _rowsAffected
b150: 20 2b 3d 20 63 68 61 6e 67 65 73 3b 0a 20 20 20   += changes;.   
b160: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20           else.  
b170: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b180: 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20  rn false;.      
b190: 20 20 20 20 20 20 69 66 20 28 21 73 63 68 65 6d        if (!schem
b1a0: 61 4f 6e 6c 79 29 20 73 74 6d 74 2e 5f 73 71 6c  aOnly) stmt._sql
b1b0: 2e 52 65 73 65 74 28 73 74 6d 74 29 3b 0a 20 20  .Reset(stmt);.  
b1c0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
b1d0: 75 65 3b 20 2f 2f 20 53 6b 69 70 20 74 68 69 73  ue; // Skip this
b1e0: 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 6d 6f 76   command and mov
b1f0: 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 69  e to the next, i
b200: 74 20 77 61 73 20 6e 6f 74 20 61 20 72 6f 77 2d  t was not a row-
b210: 72 65 74 75 72 6e 69 6e 67 20 72 65 73 75 6c 74  returning result
b220: 73 65 74 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  set.          }.
b230: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 2f            else /
b240: 2f 20 4e 6f 20 72 6f 77 73 2c 20 66 69 65 6c 64  / No rows, field
b250: 43 6f 75 6e 74 20 69 73 20 6e 6f 6e 2d 7a 65 72  Count is non-zer
b260: 6f 20 73 6f 20 73 74 6f 70 20 68 65 72 65 0a 20  o so stop here. 
b270: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
b280: 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53         _readingS
b290: 74 61 74 65 20 3d 20 31 3b 20 2f 2f 20 54 68 69  tate = 1; // Thi
b2a0: 73 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e  s command return
b2b0: 65 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20 6e  ed columns but n
b2c0: 6f 20 72 6f 77 73 2c 20 73 6f 20 72 65 74 75 72  o rows, so retur
b2d0: 6e 20 74 72 75 65 2c 20 62 75 74 20 48 61 73 52  n true, but HasR
b2e0: 6f 77 73 20 3d 20 66 61 6c 73 65 20 61 6e 64 20  ows = false and 
b2f0: 52 65 61 64 28 29 20 72 65 74 75 72 6e 73 20 66  Read() returns f
b300: 61 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 7d  alse.          }
b310: 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
b320: 20 20 20 20 2f 2f 20 41 68 68 2c 20 77 65 20 66      // Ahh, we f
b330: 6f 75 6e 64 20 61 20 72 6f 77 2d 72 65 74 75 72  ound a row-retur
b340: 6e 69 6e 67 20 72 65 73 75 6c 74 73 65 74 20 65  ning resultset e
b350: 6c 69 67 69 62 6c 65 20 74 6f 20 62 65 20 72 65  ligible to be re
b360: 74 75 72 6e 65 64 21 0a 20 20 20 20 20 20 20 20  turned!.        
b370: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
b380: 20 3d 20 73 74 6d 74 3b 0a 20 20 20 20 20 20 20   = stmt;.       
b390: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20 66   _fieldCount = f
b3a0: 69 65 6c 64 43 6f 75 6e 74 3b 0a 20 20 20 20 20  ieldCount;.     
b3b0: 20 20 20 5f 66 69 65 6c 64 49 6e 64 65 78 65 73     _fieldIndexes
b3c0: 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20   = null;.       
b3d0: 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79   _fieldTypeArray
b3e0: 20 3d 20 6e 75 6c 6c 3b 0a 0a 20 20 20 20 20 20   = null;..      
b3f0: 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42    if ((_commandB
b400: 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e  ehavior & Comman
b410: 64 42 65 68 61 76 69 6f 72 2e 4b 65 79 49 6e 66  dBehavior.KeyInf
b420: 6f 29 20 21 3d 20 30 29 0a 20 20 20 20 20 20 20  o) != 0).       
b430: 20 20 20 4c 6f 61 64 4b 65 79 49 6e 66 6f 28 29     LoadKeyInfo()
b440: 3b 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
b450: 6e 20 74 72 75 65 3b 0a 20 20 20 20 20 20 7d 0a  n true;.      }.
b460: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
b470: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
b480: 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61 74 74   This method att
b490: 65 6d 70 74 73 20 74 6f 20 71 75 65 72 79 20 74  empts to query t
b4a0: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
b4b0: 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
b4c0: 64 20 77 69 74 68 0a 20 20 20 20 2f 2f 2f 20 74  d with.    /// t
b4d0: 68 65 20 64 61 74 61 20 72 65 61 64 65 72 20 69  he data reader i
b4e0: 6e 20 75 73 65 2e 20 20 49 66 20 74 68 65 20 75  n use.  If the u
b4f0: 6e 64 65 72 6c 79 69 6e 67 20 63 6f 6d 6d 61 6e  nderlying comman
b500: 64 20 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  d or connection 
b510: 69 73 0a 20 20 20 20 2f 2f 2f 20 75 6e 61 76 61  is.    /// unava
b520: 69 6c 61 62 6c 65 2c 20 61 20 6e 75 6c 6c 20 76  ilable, a null v
b530: 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 74  alue will be ret
b540: 75 72 6e 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c  urned..    /// <
b550: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
b560: 2f 20 3c 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  / <returns>.    
b570: 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74 69  /// The connecti
b580: 6f 6e 20 6f 62 6a 65 63 74 20 2d 4f 52 2d 20 6e  on object -OR- n
b590: 75 6c 6c 20 69 66 20 69 74 20 69 73 20 75 6e 61  ull if it is una
b5a0: 76 61 69 6c 61 62 6c 65 2e 0a 20 20 20 20 2f 2f  vailable..    //
b5b0: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  / </returns>.   
b5c0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
b5d0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
b5e0: 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 0a   GetConnection(.
b5f0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
b600: 74 61 52 65 61 64 65 72 20 64 61 74 61 52 65 61  taReader dataRea
b610: 64 65 72 0a 20 20 20 20 20 20 20 20 29 0a 20 20  der.        ).  
b620: 20 20 7b 0a 20 20 20 20 20 20 20 20 74 72 79 0a    {.        try.
b630: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
b640: 20 20 20 20 20 20 69 66 20 28 64 61 74 61 52 65        if (dataRe
b650: 61 64 65 72 20 21 3d 20 6e 75 6c 6c 29 0a 20 20  ader != null).  
b660: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
b670: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
b680: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
b690: 64 20 3d 20 64 61 74 61 52 65 61 64 65 72 2e 5f  d = dataReader._
b6a0: 63 6f 6d 6d 61 6e 64 3b 0a 0a 20 20 20 20 20 20  command;..      
b6b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
b6c0: 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0a 20  mmand != null). 
b6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
b6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b6f0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
b700: 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ction connection
b710: 20 3d 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65   = command.Conne
b720: 63 74 69 6f 6e 3b 0a 0a 20 20 20 20 20 20 20 20  ction;..        
b730: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b740: 63 6f 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75  connection != nu
b750: 6c 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll).            
b760: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b770: 72 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 3b 0a 20  rn connection;. 
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
b790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
b7a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
b7b0: 20 63 61 74 63 68 20 28 4f 62 6a 65 63 74 44 69   catch (ObjectDi
b7c0: 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 29  sposedException)
b7d0: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
b7e0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
b7f0: 68 69 6e 67 2e 0a 20 20 20 20 20 20 20 20 7d 0a  hing..        }.
b800: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
b810: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  null;.    }..   
b820: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
b830: 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
b840: 6f 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20 71  od attempts to q
b850: 75 65 72 79 20 74 68 65 20 66 6c 61 67 73 20 61  uery the flags a
b860: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
b870: 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  he database.    
b880: 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  /// connection i
b890: 6e 20 75 73 65 2e 20 20 49 66 20 74 68 65 20 64  n use.  If the d
b8a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b8b0: 6f 6e 20 69 73 20 64 69 73 70 6f 73 65 64 2c 20  on is disposed, 
b8c0: 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 20 20  the default.    
b8d0: 2f 2f 2f 20 66 6c 61 67 73 20 77 69 6c 6c 20 62  /// flags will b
b8e0: 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 20 20  e returned..    
b8f0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
b900: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
b910: 6d 65 3d 22 64 61 74 61 52 65 61 64 65 72 22 3e  me="dataReader">
b920: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 61 74  .    /// The dat
b930: 61 20 72 65 61 64 65 72 20 63 6f 6e 74 61 69 6e  a reader contain
b940: 69 6e 67 20 74 68 65 20 64 61 74 61 62 73 65 20  ing the databse 
b950: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 71 75  connection to qu
b960: 65 72 79 20 74 68 65 20 66 6c 61 67 73 20 66 72  ery the flags fr
b970: 6f 6d 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  om..    /// </pa
b980: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
b990: 74 75 72 6e 73 3e 0a 20 20 20 20 2f 2f 2f 20 54  turns>.    /// T
b9a0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  he connection fl
b9b0: 61 67 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2f  ags value..    /
b9c0: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  // </returns>.  
b9d0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
b9e0: 63 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  c SQLiteConnecti
b9f0: 6f 6e 46 6c 61 67 73 20 47 65 74 46 6c 61 67 73  onFlags GetFlags
ba00: 28 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  (.        SQLite
ba10: 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52  DataReader dataR
ba20: 65 61 64 65 72 0a 20 20 20 20 20 20 20 20 29 0a  eader.        ).
ba30: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 74 72      {.        tr
ba40: 79 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  y.        {.    
ba50: 20 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61          if (data
ba60: 52 65 61 64 65 72 20 21 3d 20 6e 75 6c 6c 29 0a  Reader != null).
ba70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
ba80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
ba90: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
baa0: 61 6e 64 20 3d 20 64 61 74 61 52 65 61 64 65 72  and = dataReader
bab0: 2e 5f 63 6f 6d 6d 61 6e 64 3b 0a 0a 20 20 20 20  ._command;..    
bac0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
bad0: 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29  command != null)
bae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
baf0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
bb00: 74 65 43 6f 6d 6d 61 6e 64 2e 47 65 74 46 6c 61  teCommand.GetFla
bb10: 67 73 28 63 6f 6d 6d 61 6e 64 29 3b 0a 20 20 20  gs(command);.   
bb20: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
bb30: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63 61 74     }.        cat
bb40: 63 68 20 28 4f 62 6a 65 63 74 44 69 73 70 6f 73  ch (ObjectDispos
bb50: 65 64 45 78 63 65 70 74 69 6f 6e 29 0a 20 20 20  edException).   
bb60: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
bb70: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
bb80: 2e 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  ..        }..   
bb90: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
bba0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
bbb0: 73 2e 44 65 66 61 75 6c 74 3b 0a 20 20 20 20 7d  s.Default;.    }
bbc0: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
bbd0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  ry>.    /// Retr
bbe0: 69 65 76 65 73 20 74 68 65 20 53 51 4c 69 74 65  ieves the SQLite
bbf0: 54 79 70 65 20 66 6f 72 20 61 20 67 69 76 65 6e  Type for a given
bc00: 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 63 61 63   column, and cac
bc10: 68 65 73 20 69 74 20 74 6f 20 61 76 6f 69 64 20  hes it to avoid 
bc20: 72 65 70 65 74 65 74 69 76 65 20 69 6e 74 65 72  repetetive inter
bc30: 6f 70 20 63 61 6c 6c 73 2e 0a 20 20 20 20 2f 2f  op calls..    //
bc40: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
bc50: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
bc60: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
bc70: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
bc80: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
bc90: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
bca0: 73 3e 41 20 53 51 4c 69 74 65 54 79 70 65 20 73  s>A SQLiteType s
bcb0: 74 72 75 63 74 75 72 65 3c 2f 72 65 74 75 72 6e  tructure</return
bcc0: 73 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 53  s>.    private S
bcd0: 51 4c 69 74 65 54 79 70 65 20 47 65 74 53 51 4c  QLiteType GetSQL
bce0: 69 74 65 54 79 70 65 28 69 6e 74 20 69 29 0a 20  iteType(int i). 
bcf0: 20 20 20 7b 0a 20 20 20 20 20 20 53 51 4c 69 74     {.      SQLit
bd00: 65 54 79 70 65 20 74 79 70 3b 0a 0a 20 20 20 20  eType typ;..    
bd10: 20 20 2f 2f 20 49 6e 69 74 69 61 6c 69 7a 65 20    // Initialize 
bd20: 74 68 65 20 66 69 65 6c 64 20 74 79 70 65 73 20  the field types 
bd30: 61 72 72 61 79 20 69 66 20 6e 6f 74 20 61 6c 72  array if not alr
bd40: 65 61 64 79 20 69 6e 69 74 69 61 6c 69 7a 65 64  eady initialized
bd50: 0a 20 20 20 20 20 20 69 66 20 28 5f 66 69 65 6c  .      if (_fiel
bd60: 64 54 79 70 65 41 72 72 61 79 20 3d 3d 20 6e 75  dTypeArray == nu
bd70: 6c 6c 29 0a 20 20 20 20 20 20 20 20 5f 66 69 65  ll).        _fie
bd80: 6c 64 54 79 70 65 41 72 72 61 79 20 3d 20 6e 65  ldTypeArray = ne
bd90: 77 20 53 51 4c 69 74 65 54 79 70 65 5b 56 69 73  w SQLiteType[Vis
bda0: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 5d 3b  ibleFieldCount];
bdb0: 0a 0a 20 20 20 20 20 20 2f 2f 20 49 6e 69 74 69  ..      // Initi
bdc0: 61 6c 69 7a 65 20 74 68 69 73 20 63 6f 6c 75 6d  alize this colum
bdd0: 6e 27 73 20 66 69 65 6c 64 20 74 79 70 65 20 69  n's field type i
bde0: 6e 73 74 61 6e 63 65 0a 20 20 20 20 20 20 69 66  nstance.      if
bdf0: 20 28 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61   (_fieldTypeArra
be00: 79 5b 69 5d 20 3d 3d 20 6e 75 6c 6c 29 20 5f 66  y[i] == null) _f
be10: 69 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d  ieldTypeArray[i]
be20: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70   = new SQLiteTyp
be30: 65 28 29 3b 0a 0a 20 20 20 20 20 20 74 79 70 20  e();..      typ 
be40: 3d 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61  = _fieldTypeArra
be50: 79 5b 69 5d 3b 0a 0a 20 20 20 20 20 20 2f 2f 20  y[i];..      // 
be60: 49 66 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  If not initializ
be70: 65 64 2c 20 74 68 65 6e 20 66 65 74 63 68 20 74  ed, then fetch t
be80: 68 65 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75  he declared colu
be90: 6d 6e 20 64 61 74 61 74 79 70 65 20 61 6e 64 20  mn datatype and 
bea0: 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6e 76 65  attempt to conve
beb0: 72 74 20 69 74 0a 20 20 20 20 20 20 2f 2f 20 74  rt it.      // t
bec0: 6f 20 61 20 6b 6e 6f 77 6e 20 44 62 54 79 70 65  o a known DbType
bed0: 2e 0a 20 20 20 20 20 20 69 66 20 28 74 79 70 2e  ..      if (typ.
bee0: 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65  Affinity == Type
bef0: 41 66 66 69 6e 69 74 79 2e 55 6e 69 6e 69 74 69  Affinity.Uniniti
bf00: 61 6c 69 7a 65 64 29 0a 20 20 20 20 20 20 20 20  alized).        
bf10: 74 79 70 2e 54 79 70 65 20 3d 20 53 51 4c 69 74  typ.Type = SQLit
bf20: 65 43 6f 6e 76 65 72 74 2e 54 79 70 65 4e 61 6d  eConvert.TypeNam
bf30: 65 54 6f 44 62 54 79 70 65 28 47 65 74 43 6f 6e  eToDbType(GetCon
bf40: 6e 65 63 74 69 6f 6e 28 74 68 69 73 29 2c 20 5f  nection(this), _
bf50: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
bf60: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28  _sql.ColumnType(
bf70: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
bf80: 2c 20 69 2c 20 6f 75 74 20 74 79 70 2e 41 66 66  , i, out typ.Aff
bf90: 69 6e 69 74 79 29 2c 20 47 65 74 46 6c 61 67 73  inity), GetFlags
bfa0: 28 74 68 69 73 29 29 3b 0a 20 20 20 20 20 20 65  (this));.      e
bfb0: 6c 73 65 0a 20 20 20 20 20 20 20 20 74 79 70 2e  lse.        typ.
bfc0: 41 66 66 69 6e 69 74 79 20 3d 20 5f 61 63 74 69  Affinity = _acti
bfd0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
bfe0: 2e 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  .ColumnAffinity(
bff0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
c000: 2c 20 69 29 3b 0a 0a 20 20 20 20 20 20 72 65 74  , i);..      ret
c010: 75 72 6e 20 74 79 70 3b 0a 20 20 20 20 7d 0a 0a  urn typ;.    }..
c020: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
c030: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 61 64 73 20  >.    /// Reads 
c040: 74 68 65 20 6e 65 78 74 20 72 6f 77 20 66 72 6f  the next row fro
c050: 6d 20 74 68 65 20 72 65 73 75 6c 74 73 65 74 0a  m the resultset.
c060: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
c070: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  y>.    /// <retu
c080: 72 6e 73 3e 54 72 75 65 20 69 66 20 61 20 6e 65  rns>True if a ne
c090: 77 20 72 6f 77 20 77 61 73 20 73 75 63 63 65 73  w row was succes
c0a0: 73 66 75 6c 6c 79 20 6c 6f 61 64 65 64 20 61 6e  sfully loaded an
c0b0: 64 20 69 73 20 72 65 61 64 79 20 66 6f 72 20 70  d is ready for p
c0c0: 72 6f 63 65 73 73 69 6e 67 3c 2f 72 65 74 75 72  rocessing</retur
c0d0: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
c0e0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 52 65 61  verride bool Rea
c0f0: 64 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  d().    {.      
c100: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
c110: 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73  .      CheckClos
c120: 65 64 28 29 3b 0a 20 20 20 20 20 20 69 66 20 28  ed();.      if (
c130: 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64  _throwOnDisposed
c140: 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e  ) SQLiteCommand.
c150: 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b  Check(_command);
c160: 0a 0a 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f  ..      if ((_co
c170: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20  mmandBehavior & 
c180: 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e  CommandBehavior.
c190: 53 63 68 65 6d 61 4f 6e 6c 79 29 20 21 3d 20 30  SchemaOnly) != 0
c1a0: 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ).        return
c1b0: 20 66 61 6c 73 65 3b 0a 0a 20 20 20 20 20 20 69   false;..      i
c1c0: 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65  f (_readingState
c1d0: 20 3d 3d 20 2d 31 29 20 2f 2f 20 46 69 72 73 74   == -1) // First
c1e0: 20 73 74 65 70 20 77 61 73 20 61 6c 72 65 61 64   step was alread
c1f0: 79 20 64 6f 6e 65 20 61 74 20 74 68 65 20 4e 65  y done at the Ne
c200: 78 74 52 65 73 75 6c 74 28 29 20 6c 65 76 65 6c  xtResult() level
c210: 2c 20 73 6f 20 64 6f 6e 27 74 20 73 74 65 70 20  , so don't step 
c220: 61 67 61 69 6e 2c 20 6a 75 73 74 20 72 65 74 75  again, just retu
c230: 72 6e 20 74 72 75 65 2e 0a 20 20 20 20 20 20 7b  rn true..      {
c240: 0a 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e  .        _readin
c250: 67 53 74 61 74 65 20 3d 20 30 3b 0a 20 20 20 20  gState = 0;.    
c260: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
c270: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 65  .      }.      e
c280: 6c 73 65 20 69 66 20 28 5f 72 65 61 64 69 6e 67  lse if (_reading
c290: 53 74 61 74 65 20 3d 3d 20 30 29 20 2f 2f 20 41  State == 0) // A
c2a0: 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67 20  ctively reading 
c2b0: 72 6f 77 73 0a 20 20 20 20 20 20 7b 0a 20 20 20  rows.      {.   
c2c0: 20 20 20 20 20 2f 2f 20 44 6f 6e 27 74 20 72 65       // Don't re
c2d0: 61 64 20 61 20 6e 65 77 20 72 6f 77 20 69 66 20  ad a new row if 
c2e0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 62 65 68 61  the command beha
c2f0: 76 69 6f 72 20 64 69 63 74 61 74 65 73 20 53 69  vior dictates Si
c300: 6e 67 6c 65 52 6f 77 2e 20 20 57 65 27 76 65 20  ngleRow.  We've 
c310: 61 6c 72 65 61 64 79 20 72 65 61 64 20 74 68 65  already read the
c320: 20 66 69 72 73 74 20 72 6f 77 2e 0a 20 20 20 20   first row..    
c330: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
c340: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
c350: 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 69 6e 67  andBehavior.Sing
c360: 6c 65 52 6f 77 29 20 3d 3d 20 30 29 0a 20 20 20  leRow) == 0).   
c370: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
c380: 20 69 66 20 28 5f 61 63 74 69 76 65 53 74 61 74   if (_activeStat
c390: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 53 74 65 70 28  ement._sql.Step(
c3a0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
c3b0: 29 20 3d 3d 20 74 72 75 65 29 0a 20 20 20 20 20  ) == true).     
c3c0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
c3d0: 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20     if (_keyInfo 
c3e0: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  != null).       
c3f0: 20 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e         _keyInfo.
c400: 52 65 73 65 74 28 29 3b 0a 0a 20 20 20 20 20 20  Reset();..      
c410: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
c420: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  e;.          }. 
c430: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
c440: 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20    _readingState 
c450: 3d 20 31 3b 20 2f 2f 20 46 69 6e 69 73 68 65 64  = 1; // Finished
c460: 20 72 65 61 64 69 6e 67 20 72 6f 77 73 0a 20 20   reading rows.  
c470: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 65 74      }..      ret
c480: 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 7d  urn false;.    }
c490: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
c4a0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  ry>.    /// Retr
c4b0: 69 65 76 65 20 74 68 65 20 63 6f 75 6e 74 20 6f  ieve the count o
c4c0: 66 20 72 65 63 6f 72 64 73 20 61 66 66 65 63 74  f records affect
c4d0: 65 64 20 62 79 20 61 6e 20 75 70 64 61 74 65 2f  ed by an update/
c4e0: 69 6e 73 65 72 74 20 63 6f 6d 6d 61 6e 64 2e 20  insert command. 
c4f0: 20 4f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 63 65   Only valid once
c500: 20 74 68 65 20 64 61 74 61 20 72 65 61 64 65 72   the data reader
c510: 20 69 73 20 63 6c 6f 73 65 64 21 0a 20 20 20 20   is closed!.    
c520: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
c530: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
c540: 64 65 20 69 6e 74 20 52 65 63 6f 72 64 73 41 66  de int RecordsAf
c550: 66 65 63 74 65 64 0a 20 20 20 20 7b 0a 20 20 20  fected.    {.   
c560: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
c570: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
c580: 20 28 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20   (_rowsAffected 
c590: 3c 20 30 29 20 3f 20 30 20 3a 20 5f 72 6f 77 73  < 0) ? 0 : _rows
c5a0: 41 66 66 65 63 74 65 64 3b 20 7d 0a 20 20 20 20  Affected; }.    
c5b0: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
c5c0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 64  ary>.    /// Ind
c5d0: 65 78 65 72 20 74 6f 20 72 65 74 72 69 65 76 65  exer to retrieve
c5e0: 20 64 61 74 61 20 66 72 6f 6d 20 61 20 63 6f 6c   data from a col
c5f0: 75 6d 6e 20 67 69 76 65 6e 20 69 74 73 20 6e 61  umn given its na
c600: 6d 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  me.    /// </sum
c610: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
c620: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
c630: 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  >The name of the
c640: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
c650: 65 76 65 20 64 61 74 61 20 66 6f 72 3c 2f 70 61  eve data for</pa
c660: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
c670: 74 75 72 6e 73 3e 54 68 65 20 76 61 6c 75 65 20  turns>The value 
c680: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
c690: 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73   column</returns
c6a0: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
c6b0: 72 72 69 64 65 20 6f 62 6a 65 63 74 20 74 68 69  rride object thi
c6c0: 73 5b 73 74 72 69 6e 67 20 6e 61 6d 65 5d 0a 20  s[string name]. 
c6d0: 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b     {.      get {
c6e0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
c6f0: 3b 20 72 65 74 75 72 6e 20 47 65 74 56 61 6c 75  ; return GetValu
c700: 65 28 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d  e(GetOrdinal(nam
c710: 65 29 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  e)); }.    }..  
c720: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
c730: 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72 20      /// Indexer 
c740: 74 6f 20 72 65 74 72 69 65 76 65 20 64 61 74 61  to retrieve data
c750: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 67   from a column g
c760: 69 76 65 6e 20 69 74 73 20 69 0a 20 20 20 20 2f  iven its i.    /
c770: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
c780: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
c790: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
c7a0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
c7b0: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
c7c0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
c7d0: 6e 73 3e 54 68 65 20 76 61 6c 75 65 20 63 6f 6e  ns>The value con
c7e0: 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f  tained in the co
c7f0: 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  lumn</returns>. 
c800: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
c810: 64 65 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 69  de object this[i
c820: 6e 74 20 69 5d 0a 20 20 20 20 7b 0a 20 20 20 20  nt i].    {.    
c830: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
c840: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
c850: 47 65 74 56 61 6c 75 65 28 69 29 3b 20 7d 0a 20  GetValue(i); }. 
c860: 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74     }..    privat
c870: 65 20 76 6f 69 64 20 4c 6f 61 64 4b 65 79 49 6e  e void LoadKeyIn
c880: 66 6f 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  fo().    {.     
c890: 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20     if (_keyInfo 
c8a0: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  != null).       
c8b0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f   {.            _
c8c0: 6b 65 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28  keyInfo.Dispose(
c8d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  );.            _
c8e0: 6b 65 79 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0a  keyInfo = null;.
c8f0: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
c900: 20 20 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 65     _keyInfo = ne
c910: 77 20 53 51 4c 69 74 65 4b 65 79 52 65 61 64 65  w SQLiteKeyReade
c920: 72 28 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  r(_command.Conne
c930: 63 74 69 6f 6e 2c 20 74 68 69 73 2c 20 5f 61 63  ction, this, _ac
c940: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 29 3b 0a  tiveStatement);.
c950: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a                  }.  }.}.