System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact e7f311d89688b8c0b9228ba484a0dbdbe907cb17:


0000: ef bb bf 2f 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 2a 2a 2a 0a 20 2a 20  ************. * 
0040: 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61  ADO.NET 2.0 Data
0050: 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51   Provider for SQ
0060: 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58  Lite Version 3.X
0070: 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52  . * Written by R
0080: 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72  obert Simpson (r
0090: 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c  obert@blackcastl
00a0: 65 73 6f 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20  esoft.com). * . 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a   risk!. ********
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2f 0a 0a 6e 61 6d 65 73 70 61 63 65 20 53 79 73  /..namespace Sys
0130: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0a  tem.Data.SQLite.
0140: 7b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  {.  using System
0150: 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ;.  using System
0160: 2e 44 61 74 61 3b 0a 20 20 75 73 69 6e 67 20 53  .Data;.  using S
0170: 79 73 74 65 6d 2e 44 61 74 61 2e 43 6f 6d 6d 6f  ystem.Data.Commo
0180: 6e 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  n;.  using Syste
0190: 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65  m.Collections.Ge
01a0: 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e 67 20 53  neric;.  using S
01b0: 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74  ystem.Globalizat
01c0: 69 6f 6e 3b 0a 20 20 75 73 69 6e 67 20 53 79 73  ion;.  using Sys
01d0: 74 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0a  tem.Reflection;.
01e0: 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e  .  /// <summary>
01f0: 0a 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 69 6d  .  /// SQLite im
0200: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
0210: 44 62 44 61 74 61 52 65 61 64 65 72 2e 0a 20 20  DbDataReader..  
0220: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
0230: 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63   public sealed c
0240: 6c 61 73 73 20 53 51 4c 69 74 65 44 61 74 61 52  lass SQLiteDataR
0250: 65 61 64 65 72 20 3a 20 44 62 44 61 74 61 52 65  eader : DbDataRe
0260: 61 64 65 72 0a 20 20 7b 0a 20 20 20 20 2f 2f 2f  ader.  {.    ///
0270: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
0280: 2f 2f 20 55 6e 64 65 72 6c 79 69 6e 67 20 63 6f  // Underlying co
0290: 6d 6d 61 6e 64 20 74 68 69 73 20 72 65 61 64 65  mmand this reade
02a0: 72 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  r is attached to
02b0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
02c0: 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20  ry>.    private 
02d0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 20 20  SQLiteCommand   
02e0: 5f 63 6f 6d 6d 61 6e 64 3b 0a 20 20 20 20 2f 2f  _command;.    //
02f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
0300: 2f 2f 2f 20 49 6e 64 65 78 20 6f 66 20 74 68 65  /// Index of the
0310: 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65   current stateme
0320: 6e 74 20 69 6e 20 74 68 65 20 63 6f 6d 6d 61 6e  nt in the comman
0330: 64 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73 65  d being processe
0340: 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  d.    /// </summ
0350: 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65  ary>.    private
0360: 20 69 6e 74 20 20 20 20 20 20 20 20 20 20 20 20   int            
0370: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
0380: 74 49 6e 64 65 78 3b 0a 20 20 20 20 2f 2f 2f 20  tIndex;.    /// 
0390: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
03a0: 2f 20 43 75 72 72 65 6e 74 20 73 74 61 74 65 6d  / Current statem
03b0: 65 6e 74 20 62 65 69 6e 67 20 52 65 61 64 28 29  ent being Read()
03c0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
03d0: 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20  ry>.    private 
03e0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
03f0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
0400: 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ;.    /// <summa
0410: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 53 74 61 74  ry>.    /// Stat
0420: 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  e of the current
0430: 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
0440: 20 70 72 6f 63 65 73 73 65 64 2e 0a 20 20 20 20   processed..    
0450: 2f 2f 2f 20 2d 31 20 3d 20 46 69 72 73 74 20 53  /// -1 = First S
0460: 74 65 70 28 29 20 65 78 65 63 75 74 65 64 2c 20  tep() executed, 
0470: 73 6f 20 74 68 65 20 66 69 72 73 74 20 52 65 61  so the first Rea
0480: 64 28 29 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f  d() will be igno
0490: 72 65 64 0a 20 20 20 20 2f 2f 2f 20 20 30 20 3d  red.    ///  0 =
04a0: 20 41 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e   Actively readin
04b0: 67 0a 20 20 20 20 2f 2f 2f 20 20 31 20 3d 20 46  g.    ///  1 = F
04c0: 69 6e 69 73 68 65 64 20 72 65 61 64 69 6e 67 0a  inished reading.
04d0: 20 20 20 20 2f 2f 2f 20 20 32 20 3d 20 4e 6f 6e      ///  2 = Non
04e0: 2d 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 73  -row-returning s
04f0: 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 20 72 65 63  tatement, no rec
0500: 6f 72 64 73 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ords.    /// </s
0510: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76  ummary>.    priv
0520: 61 74 65 20 69 6e 74 20 20 20 20 20 20 20 20 20  ate int         
0530: 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74      _readingStat
0540: 65 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  e;.    /// <summ
0550: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 4e 75 6d  ary>.    /// Num
0560: 62 65 72 20 6f 66 20 72 65 63 6f 72 64 73 20 61  ber of records a
0570: 66 66 65 63 74 65 64 20 62 79 20 74 68 65 20 69  ffected by the i
0580: 6e 73 65 72 74 2f 75 70 64 61 74 65 20 73 74 61  nsert/update sta
0590: 74 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64  tements executed
05a0: 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a   on the command.
05b0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
05c0: 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 69  y>.    private i
05d0: 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  nt             _
05e0: 72 6f 77 73 41 66 66 65 63 74 65 64 3b 0a 20 20  rowsAffected;.  
05f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
0600: 20 20 20 20 2f 2f 2f 20 43 6f 75 6e 74 20 6f 66      /// Count of
0610: 20 66 69 65 6c 64 73 20 28 63 6f 6c 75 6d 6e 73   fields (columns
0620: 29 20 69 6e 20 74 68 65 20 72 6f 77 2d 72 65 74  ) in the row-ret
0630: 75 72 6e 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  urning statement
0640: 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
0650: 20 70 72 6f 63 65 73 73 65 64 0a 20 20 20 20 2f   processed.    /
0660: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
0670: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 20 20    private int   
0680: 20 20 20 20 20 20 20 20 20 20 5f 66 69 65 6c 64            _field
0690: 43 6f 75 6e 74 3b 0a 20 20 20 20 2f 2f 2f 20 3c  Count;.    /// <
06a0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
06b0: 20 44 61 74 61 74 79 70 65 73 20 6f 66 20 61 63   Datatypes of ac
06c0: 74 69 76 65 20 66 69 65 6c 64 73 20 28 63 6f 6c  tive fields (col
06d0: 75 6d 6e 73 29 20 69 6e 20 74 68 65 20 63 75 72  umns) in the cur
06e0: 72 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 2c 20  rent statement, 
06f0: 75 73 65 64 20 66 6f 72 20 74 79 70 65 2d 72 65  used for type-re
0700: 73 74 72 69 63 74 69 6e 67 20 64 61 74 61 0a 20  stricting data. 
0710: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0720: 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 53 51  >.    private SQ
0730: 4c 69 74 65 54 79 70 65 5b 5d 20 20 20 20 5f 66  LiteType[]    _f
0740: 69 65 6c 64 54 79 70 65 41 72 72 61 79 3b 0a 0a  ieldTypeArray;..
0750: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0760: 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 62 65  >.    /// The be
0770: 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 64 61  havior of the da
0780: 74 61 72 65 61 64 65 72 0a 20 20 20 20 2f 2f 2f  tareader.    ///
0790: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
07a0: 70 72 69 76 61 74 65 20 43 6f 6d 6d 61 6e 64 42  private CommandB
07b0: 65 68 61 76 69 6f 72 20 5f 63 6f 6d 6d 61 6e 64  ehavior _command
07c0: 42 65 68 61 76 69 6f 72 3b 0a 0a 20 20 20 20 2f  Behavior;..    /
07d0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
07e0: 20 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f   /// Internal co
07f0: 6e 73 74 72 75 63 74 6f 72 2c 20 69 6e 69 74 69  nstructor, initi
0800: 61 6c 69 7a 65 73 20 74 68 65 20 64 61 74 61 72  alizes the datar
0810: 65 61 64 65 72 20 61 6e 64 20 73 65 74 73 20 75  eader and sets u
0820: 70 20 74 6f 20 62 65 67 69 6e 20 65 78 65 63 75  p to begin execu
0830: 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a  ting statements.
0840: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0850: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
0860: 6d 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65  m name="cmd">The
0870: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74   SQLiteCommand t
0880: 68 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20  his data reader 
0890: 69 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0a 20  is for</param>. 
08a0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
08b0: 6d 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20  me="behave">The 
08c0: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
08d0: 72 20 6f 66 20 74 68 65 20 64 61 74 61 20 72 65  r of the data re
08e0: 61 64 65 72 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  ader</param>.   
08f0: 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65   internal SQLite
0900: 44 61 74 61 52 65 61 64 65 72 28 53 51 4c 69 74  DataReader(SQLit
0910: 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43 6f  eCommand cmd, Co
0920: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 62 65  mmandBehavior be
0930: 68 61 76 65 29 0a 20 20 20 20 7b 0a 20 20 20 20  have).    {.    
0940: 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d 20 63 6d 64    _command = cmd
0950: 3b 0a 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64  ;.      _command
0960: 42 65 68 61 76 69 6f 72 20 3d 20 62 65 68 61 76  Behavior = behav
0970: 65 3b 0a 20 20 20 20 20 20 49 6e 69 74 69 61 6c  e;.      Initial
0980: 69 7a 65 28 29 3b 0a 0a 20 20 20 20 20 20 69 66  ize();..      if
0990: 20 28 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75   (_command != nu
09a0: 6c 6c 29 0a 20 20 20 20 20 20 20 20 4e 65 78 74  ll).        Next
09b0: 52 65 73 75 6c 74 28 29 3b 0a 20 20 20 20 7d 0a  Result();.    }.
09c0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
09d0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 69 74 69  y>.    /// Initi
09e0: 61 6c 69 7a 65 73 20 61 6e 64 20 72 65 73 65 74  alizes and reset
09f0: 73 20 74 68 65 20 64 61 74 61 72 65 61 64 65 72  s the datareader
0a00: 27 73 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  's member variab
0a10: 6c 65 73 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  les.    /// </su
0a20: 6d 6d 61 72 79 3e 0a 20 20 20 20 69 6e 74 65 72  mmary>.    inter
0a30: 6e 61 6c 20 76 6f 69 64 20 49 6e 69 74 69 61 6c  nal void Initial
0a40: 69 7a 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  ize().    {.    
0a50: 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65    _activeStateme
0a60: 6e 74 49 6e 64 65 78 20 3d 20 2d 31 3b 0a 20 20  ntIndex = -1;.  
0a70: 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65      _activeState
0a80: 6d 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20  ment = null;.   
0a90: 20 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64     _rowsAffected
0aa0: 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 5f 66 69   = -1;.      _fi
0ab0: 65 6c 64 43 6f 75 6e 74 20 3d 20 2d 31 3b 0a 20  eldCount = -1;. 
0ac0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
0ad0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0ae0: 43 6c 6f 73 65 73 20 74 68 65 20 64 61 74 61 72  Closes the datar
0af0: 65 61 64 65 72 2c 20 70 6f 74 65 6e 74 69 61 6c  eader, potential
0b00: 6c 79 20 63 6c 6f 73 69 6e 67 20 74 68 65 20 63  ly closing the c
0b10: 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 77 65 6c  onnection as wel
0b20: 6c 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65 68 61  l if CommandBeha
0b30: 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63  vior.CloseConnec
0b40: 74 69 6f 6e 20 77 61 73 20 73 70 65 63 69 66 69  tion was specifi
0b50: 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
0b60: 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69  mmary>.    publi
0b70: 63 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  c override void 
0b80: 43 6c 6f 73 65 28 29 0a 20 20 20 20 7b 0a 20 20  Close().    {.  
0b90: 20 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64      if (_command
0ba0: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
0bb0: 7b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20  {.        while 
0bc0: 28 4e 65 78 74 52 65 73 75 6c 74 28 29 29 0a 20  (NextResult()). 
0bd0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
0be0: 20 7d 0a 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d   }.        _comm
0bf0: 61 6e 64 2e 43 6c 65 61 72 44 61 74 61 52 65 61  and.ClearDataRea
0c00: 64 65 72 28 29 3b 0a 20 20 20 20 20 20 7d 0a 0a  der();.      }..
0c10: 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20        // If the 
0c20: 64 61 74 61 72 65 61 64 65 72 27 73 20 62 65 68  datareader's beh
0c30: 61 76 69 6f 72 20 69 6e 63 6c 75 64 65 73 20 63  avior includes c
0c40: 6c 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65  losing the conne
0c50: 63 74 69 6f 6e 2c 20 74 68 65 6e 20 64 6f 20 73  ction, then do s
0c60: 6f 20 68 65 72 65 2e 0a 20 20 20 20 20 20 69 66  o here..      if
0c70: 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76   ((_commandBehav
0c80: 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65 68  ior & CommandBeh
0c90: 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65  avior.CloseConne
0ca0: 63 74 69 6f 6e 29 20 21 3d 20 30 29 0a 20 20 20  ction) != 0).   
0cb0: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f       _command.Co
0cc0: 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29  nnection.Close()
0cd0: 3b 0a 0a 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e  ;..      _comman
0ce0: 64 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  d = null;.      
0cf0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
0d00: 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 5f   = null;.      _
0d10: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d  fieldTypeArray =
0d20: 20 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 0a 20 20   null;.    }..  
0d30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
0d40: 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73      /// Disposes
0d50: 20 74 68 65 20 64 61 74 61 72 65 61 64 65 72 2e   the datareader.
0d60: 20 20 43 61 6c 6c 73 20 43 6c 6f 73 65 28 29 20    Calls Close() 
0d70: 74 6f 20 65 6e 73 75 72 65 20 65 76 65 72 79 74  to ensure everyt
0d80: 68 69 6e 67 20 69 73 20 63 6c 65 61 6e 65 64 20  hing is cleaned 
0d90: 75 70 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  up..    /// </su
0da0: 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 6f 74 65  mmary>.    prote
0db0: 63 74 65 64 20 6f 76 65 72 72 69 64 65 20 76 6f  cted override vo
0dc0: 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20  id Dispose(bool 
0dd0: 64 69 73 70 6f 73 69 6e 67 29 0a 20 20 20 20 7b  disposing).    {
0de0: 0a 20 20 20 20 20 20 43 6c 6f 73 65 28 29 3b 0a  .      Close();.
0df0: 20 20 20 20 20 20 62 61 73 65 2e 44 69 73 70 6f        base.Dispo
0e00: 73 65 28 64 69 73 70 6f 73 69 6e 67 29 3b 0a 20  se(disposing);. 
0e10: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
0e20: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0e30: 54 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 20 69  Throw an error i
0e40: 66 20 74 68 65 20 64 61 74 61 72 65 61 64 65 72  f the datareader
0e50: 20 69 73 20 63 6c 6f 73 65 64 0a 20 20 20 20 2f   is closed.    /
0e60: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
0e70: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
0e80: 68 65 63 6b 43 6c 6f 73 65 64 28 29 0a 20 20 20  heckClosed().   
0e90: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 5f 63 6f   {.      if (_co
0ea0: 6d 6d 61 6e 64 20 3d 3d 20 6e 75 6c 6c 29 0a 20  mmand == null). 
0eb0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
0ec0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
0ed0: 6e 45 78 63 65 70 74 69 6f 6e 28 22 44 61 74 61  nException("Data
0ee0: 52 65 61 64 65 72 20 68 61 73 20 62 65 65 6e 20  Reader has been 
0ef0: 63 6c 6f 73 65 64 22 29 3b 0a 20 20 20 20 7d 0a  closed");.    }.
0f00: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0f10: 79 3e 0a 20 20 20 20 2f 2f 2f 20 45 6e 75 6d 65  y>.    /// Enume
0f20: 72 61 74 6f 72 20 73 75 70 70 6f 72 74 0a 20 20  rator support.  
0f30: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0f40: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
0f50: 73 3e 52 65 74 75 72 6e 73 20 61 20 44 62 45 6e  s>Returns a DbEn
0f60: 75 6d 65 72 61 74 6f 72 20 6f 62 6a 65 63 74 2e  umerator object.
0f70: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
0f80: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 43  ublic override C
0f90: 6f 6c 6c 65 63 74 69 6f 6e 73 2e 49 45 6e 75 6d  ollections.IEnum
0fa0: 65 72 61 74 6f 72 20 47 65 74 45 6e 75 6d 65 72  erator GetEnumer
0fb0: 61 74 6f 72 28 29 0a 20 20 20 20 7b 0a 20 20 20  ator().    {.   
0fc0: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 62     return new Db
0fd0: 45 6e 75 6d 65 72 61 74 6f 72 28 74 68 69 73 29  Enumerator(this)
0fe0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
0ff0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
1000: 2f 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74  // Not implement
1010: 65 64 2e 20 20 52 65 74 75 72 6e 73 20 30 0a 20  ed.  Returns 0. 
1020: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1030: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
1040: 72 72 69 64 65 20 69 6e 74 20 44 65 70 74 68 0a  rride int Depth.
1050: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a      {.      get.
1060: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1070: 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20  CheckClosed();. 
1080: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
1090: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
10a0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
10b0: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  >.    /// Return
10c0: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
10d0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 63  columns in the c
10e0: 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65 74  urrent resultset
10f0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1100: 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ry>.    public o
1110: 76 65 72 72 69 64 65 20 69 6e 74 20 46 69 65 6c  verride int Fiel
1120: 64 43 6f 75 6e 74 0a 20 20 20 20 7b 0a 20 20 20  dCount.    {.   
1130: 20 20 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20     get.      {. 
1140: 20 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73         CheckClos
1150: 65 64 28 29 3b 0a 20 20 20 20 20 20 20 20 72 65  ed();.        re
1160: 74 75 72 6e 20 5f 66 69 65 6c 64 43 6f 75 6e 74  turn _fieldCount
1170: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1180: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1190: 79 3e 0a 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74  y>.    /// SQLit
11a0: 65 20 69 73 20 69 6e 68 65 72 65 6e 74 6c 79 20  e is inherently 
11b0: 75 6e 2d 74 79 70 65 64 2e 20 20 41 6c 6c 20 64  un-typed.  All d
11c0: 61 74 61 74 79 70 65 73 20 69 6e 20 53 51 4c 69  atatypes in SQLi
11d0: 74 65 20 61 72 65 20 6e 61 74 69 76 65 6c 79 20  te are natively 
11e0: 73 74 72 69 6e 67 73 2e 20 20 54 68 65 20 64 65  strings.  The de
11f0: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 65 20  finition of the 
1200: 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61 62  columns of a tab
1210: 6c 65 0a 20 20 20 20 2f 2f 2f 20 61 6e 64 20 74  le.    /// and t
1220: 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 72  he affinity of r
1230: 65 74 75 72 6e 65 64 20 74 79 70 65 73 20 61 72  eturned types ar
1240: 65 20 61 6c 6c 20 77 65 20 68 61 76 65 20 74 6f  e all we have to
1250: 20 67 6f 20 6f 6e 20 74 6f 20 74 79 70 65 2d 72   go on to type-r
1260: 65 73 74 72 69 63 74 20 64 61 74 61 20 69 6e 20  estrict data in 
1270: 74 68 65 20 72 65 61 64 65 72 2e 0a 20 20 20 20  the reader..    
1280: 2f 2f 2f 20 0a 20 20 20 20 2f 2f 2f 20 54 68 69  /// .    /// Thi
1290: 73 20 66 75 6e 63 74 69 6f 6e 20 61 74 74 65 6d  s function attem
12a0: 70 74 73 20 74 6f 20 76 65 72 69 66 79 20 74 68  pts to verify th
12b0: 61 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 64  at the type of d
12c0: 61 74 61 20 62 65 69 6e 67 20 72 65 71 75 65 73  ata being reques
12d0: 74 65 64 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ted of a column 
12e0: 6d 61 74 63 68 65 73 20 74 68 65 20 64 61 74 61  matches the data
12f0: 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  type of the colu
1300: 6d 6e 2e 20 20 49 6e 0a 20 20 20 20 2f 2f 2f 20  mn.  In.    /// 
1310: 74 68 65 20 63 61 73 65 20 6f 66 20 63 6f 6c 75  the case of colu
1320: 6d 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  mns that are not
1330: 20 62 61 63 6b 65 64 20 69 6e 74 6f 20 61 20 74   backed into a t
1340: 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2c  able definition,
1350: 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 6d   we attempt to m
1360: 61 74 63 68 20 75 70 20 74 68 65 20 61 66 66 69  atch up the affi
1370: 6e 69 74 79 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  nity of a column
1380: 20 28 69 6e 74 2c 20 64 6f 75 62 6c 65 2c 20 73   (int, double, s
1390: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 29 0a 20  tring or blob). 
13a0: 20 20 20 2f 2f 2f 20 74 6f 20 61 20 73 65 74 20     /// to a set 
13b0: 6f 66 20 6b 6e 6f 77 6e 20 74 79 70 65 73 20 74  of known types t
13c0: 68 61 74 20 63 6c 6f 73 65 6c 79 20 6d 61 74 63  hat closely matc
13d0: 68 20 74 68 61 74 20 61 66 66 69 6e 69 74 79 2e  h that affinity.
13e0: 20 20 49 74 27 73 20 6e 6f 74 20 61 6e 20 65 78    It's not an ex
13f0: 61 63 74 20 73 63 69 65 6e 63 65 2c 20 62 75 74  act science, but
1400: 20 69 74 73 20 74 68 65 20 62 65 73 74 20 77 65   its the best we
1410: 20 63 61 6e 20 64 6f 2e 0a 20 20 20 20 2f 2f 2f   can do..    ///
1420: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
1430: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0a 20 20  /// <returns>.  
1440: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
1450: 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 49 6e  ion throws an In
1460: 76 61 6c 69 64 54 79 70 65 43 61 73 74 28 29 20  validTypeCast() 
1470: 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65  exception if the
1480: 20 72 65 71 75 65 73 74 65 64 20 74 79 70 65 20   requested type 
1490: 64 6f 65 73 6e 27 74 20 6d 61 74 63 68 20 74 68  doesn't match th
14a0: 65 20 63 6f 6c 75 6d 6e 27 73 20 64 65 66 69 6e  e column's defin
14b0: 69 74 69 6f 6e 20 6f 72 20 61 66 66 69 6e 69 74  ition or affinit
14c0: 79 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  y..    /// </ret
14d0: 75 72 6e 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  urns>.    /// <p
14e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
14f0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
1500: 6f 6c 75 6d 6e 20 74 6f 20 74 79 70 65 2d 63 68  olumn to type-ch
1510: 65 63 6b 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  eck</param>.    
1520: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1530: 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20 77  "typ">The type w
1540: 65 20 77 61 6e 74 20 74 6f 20 67 65 74 20 6f 75  e want to get ou
1550: 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 3c  t of the column<
1560: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 70 72 69 76  /param>.    priv
1570: 61 74 65 20 76 6f 69 64 20 56 65 72 69 66 79 54  ate void VerifyT
1580: 79 70 65 28 69 6e 74 20 69 2c 20 44 62 54 79 70  ype(int i, DbTyp
1590: 65 20 74 79 70 29 0a 20 20 20 20 7b 0a 20 20 20  e typ).    {.   
15a0: 20 20 20 53 51 4c 69 74 65 54 79 70 65 20 74 20     SQLiteType t 
15b0: 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  = GetSQLiteType(
15c0: 69 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 74  i);..      if (t
15d0: 2e 54 79 70 65 20 3d 3d 20 74 79 70 29 20 72 65  .Type == typ) re
15e0: 74 75 72 6e 3b 0a 0a 20 20 20 20 20 20 20 20 2f  turn;..        /
15f0: 2f 20 43 6f 65 72 63 61 62 6c 65 20 74 79 70 65  / Coercable type
1600: 2c 20 75 73 75 61 6c 6c 79 20 61 20 6c 69 74 65  , usually a lite
1610: 72 61 6c 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ral of some kind
1620: 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28 5f  .      switch (_
1630: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69  fieldTypeArray[i
1640: 5d 2e 41 66 66 69 6e 69 74 79 29 0a 20 20 20 20  ].Affinity).    
1650: 20 20 7b 0a 20 20 20 20 20 20 20 20 63 61 73 65    {.        case
1660: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
1670: 74 36 34 3a 0a 20 20 20 20 20 20 20 20 20 20 69  t64:.          i
1680: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
1690: 2e 49 6e 74 31 36 29 20 72 65 74 75 72 6e 3b 0a  .Int16) return;.
16a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
16b0: 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74 33  p == DbType.Int3
16c0: 32 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  2) return;.     
16d0: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
16e0: 44 62 54 79 70 65 2e 49 6e 74 36 34 29 20 72 65  DbType.Int64) re
16f0: 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20  turn;.          
1700: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
1710: 65 2e 42 6f 6f 6c 65 61 6e 29 20 72 65 74 75 72  e.Boolean) retur
1720: 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  n;.          if 
1730: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 42  (typ == DbType.B
1740: 79 74 65 29 20 72 65 74 75 72 6e 3b 0a 20 20 20  yte) return;.   
1750: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1760: 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
1770: 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0a  ffinity.Double:.
1780: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
1790: 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 69 6e 67  p == DbType.Sing
17a0: 6c 65 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  le) return;.    
17b0: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
17c0: 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 20   DbType.Double) 
17d0: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
17e0: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
17f0: 79 70 65 2e 44 65 63 69 6d 61 6c 29 20 72 65 74  ype.Decimal) ret
1800: 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 62  urn;.          b
1810: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61  reak;.        ca
1820: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
1830: 54 65 78 74 3a 0a 20 20 20 20 20 20 20 20 20 20  Text:.          
1840: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
1850: 65 2e 53 42 79 74 65 29 20 72 65 74 75 72 6e 3b  e.SByte) return;
1860: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
1870: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 74 72  yp == DbType.Str
1880: 69 6e 67 29 20 72 65 74 75 72 6e 3b 0a 20 20 20  ing) return;.   
1890: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
18a0: 3d 20 44 62 54 79 70 65 2e 53 42 79 74 65 29 20  = DbType.SByte) 
18b0: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
18c0: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
18d0: 79 70 65 2e 47 75 69 64 29 20 72 65 74 75 72 6e  ype.Guid) return
18e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ;.          if (
18f0: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 61  typ == DbType.Da
1900: 74 65 54 69 6d 65 29 20 72 65 74 75 72 6e 3b 0a  teTime) return;.
1910: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1920: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
1930: 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a  peAffinity.Blob:
1940: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
1950: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 74 72  yp == DbType.Str
1960: 69 6e 67 29 20 72 65 74 75 72 6e 3b 0a 20 20 20  ing) return;.   
1970: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
1980: 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29  = DbType.Binary)
1990: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
19a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
19b0: 7d 0a 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  }..      throw n
19c0: 65 77 20 49 6e 76 61 6c 69 64 43 61 73 74 45 78  ew InvalidCastEx
19d0: 63 65 70 74 69 6f 6e 28 29 3b 0a 20 20 20 20 7d  ception();.    }
19e0: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
19f0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  ry>.    /// Retr
1a00: 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  ieves the column
1a10: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
1a20: 6c 75 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  lue.    /// </su
1a30: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
1a40: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
1a50: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
1a60: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
1a70: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
1a80: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62 6f 6f 6c  // <returns>bool
1a90: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
1aa0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62  ublic override b
1ab0: 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65 61 6e 28 69  ool GetBoolean(i
1ac0: 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20  nt i).    {.    
1ad0: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
1ae0: 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 3b  DbType.Boolean);
1af0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f  .      return Co
1b00: 6e 76 65 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28  nvert.ToBoolean(
1b10: 47 65 74 56 61 6c 75 65 28 69 29 2c 20 43 75 6c  GetValue(i), Cul
1b20: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
1b30: 43 75 6c 74 75 72 65 29 3b 0a 20 20 20 20 7d 0a  Culture);.    }.
1b40: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1b50: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  y>.    /// Retri
1b60: 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  eves the column 
1b70: 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  as a single byte
1b80: 20 76 61 6c 75 65 0a 20 20 20 20 2f 2f 2f 20 3c   value.    /// <
1b90: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
1ba0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
1bb0: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
1bc0: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
1bd0: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  rieve</param>.  
1be0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62    /// <returns>b
1bf0: 79 74 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  yte</returns>.  
1c00: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
1c10: 65 20 62 79 74 65 20 47 65 74 42 79 74 65 28 69  e byte GetByte(i
1c20: 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20  nt i).    {.    
1c30: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
1c40: 44 62 54 79 70 65 2e 42 79 74 65 29 3b 0a 20 20  DbType.Byte);.  
1c50: 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65      return Conve
1c60: 72 74 2e 54 6f 42 79 74 65 28 5f 61 63 74 69 76  rt.ToByte(_activ
1c70: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
1c80: 47 65 74 49 6e 74 33 32 28 5f 61 63 74 69 76 65  GetInt32(_active
1c90: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a  Statement, i));.
1ca0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
1cb0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
1cc0: 20 52 65 74 72 69 65 76 65 73 20 61 20 63 6f 6c   Retrieves a col
1cd0: 75 6d 6e 20 61 73 20 61 6e 20 61 72 72 61 79 20  umn as an array 
1ce0: 6f 66 20 62 79 74 65 73 20 28 62 6c 6f 62 29 0a  of bytes (blob).
1cf0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1d00: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
1d10: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
1d20: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
1d30: 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  mn to retrieve</
1d40: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
1d50: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 65 6c  param name="fiel
1d60: 64 4f 66 66 73 65 74 22 3e 54 68 65 20 7a 65 72  dOffset">The zer
1d70: 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20 6f 66  o-based index of
1d80: 20 77 68 65 72 65 20 74 6f 20 62 65 67 69 6e 20   where to begin 
1d90: 72 65 61 64 69 6e 67 20 74 68 65 20 64 61 74 61  reading the data
1da0: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
1db0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75   <param name="bu
1dc0: 66 66 65 72 22 3e 54 68 65 20 62 75 66 66 65 72  ffer">The buffer
1dd0: 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 62 79   to write the by
1de0: 74 65 73 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e  tes into</param>
1df0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1e00: 6e 61 6d 65 3d 22 62 75 66 66 65 72 6f 66 66 73  name="bufferoffs
1e10: 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73  et">The zero-bas
1e20: 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68 65 72  ed index of wher
1e30: 65 20 74 6f 20 62 65 67 69 6e 20 77 72 69 74 69  e to begin writi
1e40: 6e 67 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61  ng into the arra
1e50: 79 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  y</param>.    //
1e60: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
1e70: 65 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d 62 65  ength">The numbe
1e80: 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72 65  r of bytes to re
1e90: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20  trieve</param>. 
1ea0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
1eb0: 54 68 65 20 61 63 74 75 61 6c 20 6e 75 6d 62 65  The actual numbe
1ec0: 72 20 6f 66 20 62 79 74 65 73 20 77 72 69 74 74  r of bytes writt
1ed0: 65 6e 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61  en into the arra
1ee0: 79 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  y</returns>.    
1ef0: 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a 20 20  /// <remarks>.  
1f00: 20 20 2f 2f 2f 20 54 6f 20 64 65 74 65 72 6d 69    /// To determi
1f10: 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ne the number of
1f20: 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f   bytes in the co
1f30: 6c 75 6d 6e 2c 20 70 61 73 73 20 61 20 6e 75 6c  lumn, pass a nul
1f40: 6c 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  l value for the 
1f50: 62 75 66 66 65 72 2e 20 20 54 68 65 20 74 6f 74  buffer.  The tot
1f60: 61 6c 20 6c 65 6e 67 74 68 20 77 69 6c 6c 20 62  al length will b
1f70: 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 20 20  e returned..    
1f80: 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0a 20  /// </remarks>. 
1f90: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
1fa0: 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73  de long GetBytes
1fb0: 28 69 6e 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65  (int i, long fie
1fc0: 6c 64 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d  ldOffset, byte[]
1fd0: 20 62 75 66 66 65 72 2c 20 69 6e 74 20 62 75 66   buffer, int buf
1fe0: 66 65 72 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c  feroffset, int l
1ff0: 65 6e 67 74 68 29 0a 20 20 20 20 7b 0a 20 20 20  ength).    {.   
2000: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
2010: 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29 3b   DbType.Binary);
2020: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61  .      return _a
2030: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
2040: 73 71 6c 2e 47 65 74 42 79 74 65 73 28 5f 61 63  sql.GetBytes(_ac
2050: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
2060: 2c 20 28 69 6e 74 29 66 69 65 6c 64 4f 66 66 73  , (int)fieldOffs
2070: 65 74 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66  et, buffer, buff
2080: 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68  eroffset, length
2090: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f  );.    }..    //
20a0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
20b0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
20c0: 63 6f 6c 75 6d 6e 20 61 73 20 61 20 73 69 6e 67  column as a sing
20d0: 6c 65 20 63 68 61 72 61 63 74 65 72 0a 20 20 20  le character.   
20e0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
20f0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2100: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
2110: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  x of the column 
2120: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
2130: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
2140: 75 72 6e 73 3e 63 68 61 72 3c 2f 72 65 74 75 72  urns>char</retur
2150: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
2160: 76 65 72 72 69 64 65 20 63 68 61 72 20 47 65 74  verride char Get
2170: 43 68 61 72 28 69 6e 74 20 69 29 0a 20 20 20 20  Char(int i).    
2180: 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79  {.      VerifyTy
2190: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53 42 79  pe(i, DbType.SBy
21a0: 74 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  te);.      retur
21b0: 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 43 68 61 72  n Convert.ToChar
21c0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
21d0: 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32 28  t._sql.GetInt32(
21e0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
21f0: 2c 20 69 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  , i));.    }..  
2200: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
2210: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
2220: 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e  s a column as an
2230: 20 61 72 72 61 79 20 6f 66 20 63 68 61 72 73 20   array of chars 
2240: 28 62 6c 6f 62 29 0a 20 20 20 20 2f 2f 2f 20 3c  (blob).    /// <
2250: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
2260: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
2270: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
2280: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
2290: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  rieve</param>.  
22a0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
22b0: 65 3d 22 66 69 65 6c 64 6f 66 66 73 65 74 22 3e  e="fieldoffset">
22c0: 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69  The zero-based i
22d0: 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f  ndex of where to
22e0: 20 62 65 67 69 6e 20 72 65 61 64 69 6e 67 20 74   begin reading t
22f0: 68 65 20 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0a  he data</param>.
2300: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2310: 61 6d 65 3d 22 62 75 66 66 65 72 22 3e 54 68 65  ame="buffer">The
2320: 20 62 75 66 66 65 72 20 74 6f 20 77 72 69 74 65   buffer to write
2330: 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73 20   the characters 
2340: 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  into</param>.   
2350: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2360: 3d 22 62 75 66 66 65 72 6f 66 66 73 65 74 22 3e  ="bufferoffset">
2370: 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 69  The zero-based i
2380: 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20 74 6f  ndex of where to
2390: 20 62 65 67 69 6e 20 77 72 69 74 69 6e 67 20 69   begin writing i
23a0: 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c 2f 70  nto the array</p
23b0: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  aram>.    /// <p
23c0: 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67 74  aram name="lengt
23d0: 68 22 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  h">The number of
23e0: 20 62 79 74 65 73 20 74 6f 20 72 65 74 72 69 65   bytes to retrie
23f0: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
2400: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
2410: 61 63 74 75 61 6c 20 6e 75 6d 62 65 72 20 6f 66  actual number of
2420: 20 63 68 61 72 61 63 74 65 72 73 20 77 72 69 74   characters writ
2430: 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 61 72 72  ten into the arr
2440: 61 79 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  ay</returns>.   
2450: 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a 20   /// <remarks>. 
2460: 20 20 20 2f 2f 2f 20 54 6f 20 64 65 74 65 72 6d     /// To determ
2470: 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ine the number o
2480: 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  f characters in 
2490: 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 70 61 73 73  the column, pass
24a0: 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 20 66 6f   a null value fo
24b0: 72 20 74 68 65 20 62 75 66 66 65 72 2e 20 20 54  r the buffer.  T
24c0: 68 65 20 74 6f 74 61 6c 20 6c 65 6e 67 74 68 20  he total length 
24d0: 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64  will be returned
24e0: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61  ..    /// </rema
24f0: 72 6b 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rks>.    public 
2500: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
2510: 74 43 68 61 72 73 28 69 6e 74 20 69 2c 20 6c 6f  tChars(int i, lo
2520: 6e 67 20 66 69 65 6c 64 6f 66 66 73 65 74 2c 20  ng fieldoffset, 
2530: 63 68 61 72 5b 5d 20 62 75 66 66 65 72 2c 20 69  char[] buffer, i
2540: 6e 74 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c  nt bufferoffset,
2550: 20 69 6e 74 20 6c 65 6e 67 74 68 29 0a 20 20 20   int length).   
2560: 20 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79 54   {.      VerifyT
2570: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53 74  ype(i, DbType.St
2580: 72 69 6e 67 29 3b 0a 20 20 20 20 20 20 72 65 74  ring);.      ret
2590: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
25a0: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 43 68 61  ment._sql.GetCha
25b0: 72 73 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rs(_activeStatem
25c0: 65 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69 65  ent, i, (int)fie
25d0: 6c 64 6f 66 66 73 65 74 2c 20 62 75 66 66 65 72  ldoffset, buffer
25e0: 2c 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20  , bufferoffset, 
25f0: 6c 65 6e 67 74 68 29 3b 0a 20 20 20 20 7d 0a 0a  length);.    }..
2600: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2610: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  >.    /// Retrie
2620: 76 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ves the name of 
2630: 74 68 65 20 62 61 63 6b 2d 65 6e 64 20 64 61 74  the back-end dat
2640: 61 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c  atype of the col
2650: 75 6d 6e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  umn.    /// </su
2660: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
2670: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
2680: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
2690: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
26a0: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
26b0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69  // <returns>stri
26c0: 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  ng</returns>.   
26d0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
26e0: 20 73 74 72 69 6e 67 20 47 65 74 44 61 74 61 54   string GetDataT
26f0: 79 70 65 4e 61 6d 65 28 69 6e 74 20 69 29 0a 20  ypeName(int i). 
2700: 20 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b     {.      Check
2710: 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20  Closed();.      
2720: 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 20 3d  SQLiteType typ =
2730: 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28 69   GetSQLiteType(i
2740: 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 74 79  );..      if (ty
2750: 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65  p.Type == DbType
2760: 2e 4f 62 6a 65 63 74 29 20 72 65 74 75 72 6e 20  .Object) return 
2770: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51  SQLiteConvert.SQ
2780: 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74  LiteTypeToType(t
2790: 79 70 29 2e 4e 61 6d 65 3b 0a 0a 20 20 20 20 20  yp).Name;..     
27a0: 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53   return _activeS
27b0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f  tatement._sql.Co
27c0: 6c 75 6d 6e 54 79 70 65 28 5f 61 63 74 69 76 65  lumnType(_active
27d0: 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 6f 75  Statement, i, ou
27e0: 74 20 74 79 70 2e 41 66 66 69 6e 69 74 79 29 3b  t typ.Affinity);
27f0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
2800: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
2810: 2f 20 52 65 74 72 69 65 76 65 20 74 68 65 20 63  / Retrieve the c
2820: 6f 6c 75 6d 6e 20 61 73 20 61 20 64 61 74 65 2f  olumn as a date/
2830: 74 69 6d 65 20 76 61 6c 75 65 0a 20 20 20 20 2f  time value.    /
2840: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
2850: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2860: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
2870: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
2880: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
2890: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
28a0: 6e 73 3e 44 61 74 65 54 69 6d 65 3c 2f 72 65 74  ns>DateTime</ret
28b0: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
28c0: 20 6f 76 65 72 72 69 64 65 20 44 61 74 65 54 69   override DateTi
28d0: 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65 28 69  me GetDateTime(i
28e0: 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20  nt i).    {.    
28f0: 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c 20    VerifyType(i, 
2900: 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29  DbType.DateTime)
2910: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f  ;.      return _
2920: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
2930: 5f 73 71 6c 2e 47 65 74 44 61 74 65 54 69 6d 65  _sql.GetDateTime
2940: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
2950: 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  t, i);.    }..  
2960: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
2970: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
2980: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61   the column as a
2990: 20 64 65 63 69 6d 61 6c 20 76 61 6c 75 65 0a 20   decimal value. 
29a0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
29b0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
29c0: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
29d0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
29e0: 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  n to retrieve</p
29f0: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
2a00: 65 74 75 72 6e 73 3e 64 65 63 69 6d 61 6c 3c 2f  eturns>decimal</
2a10: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
2a20: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64 65 63  lic override dec
2a30: 69 6d 61 6c 20 47 65 74 44 65 63 69 6d 61 6c 28  imal GetDecimal(
2a40: 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20  int i).    {.   
2a50: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
2a60: 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29   DbType.Decimal)
2a70: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 43  ;.      return C
2a80: 6f 6e 76 65 72 74 2e 54 6f 44 65 63 69 6d 61 6c  onvert.ToDecimal
2a90: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
2aa0: 74 2e 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65  t._sql.GetDouble
2ab0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
2ac0: 74 2c 20 69 29 29 3b 0a 20 20 20 20 7d 0a 0a 20  t, i));.    }.. 
2ad0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2ae0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
2af0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61   the column as a
2b00: 20 64 6f 75 62 6c 65 0a 20 20 20 20 2f 2f 2f 20   double.    /// 
2b10: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
2b20: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2b30: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
2b40: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
2b50: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20  trieve</param>. 
2b60: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2b70: 64 6f 75 62 6c 65 3c 2f 72 65 74 75 72 6e 73 3e  double</returns>
2b80: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
2b90: 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74 44  ride double GetD
2ba0: 6f 75 62 6c 65 28 69 6e 74 20 69 29 0a 20 20 20  ouble(int i).   
2bb0: 20 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79 54   {.      VerifyT
2bc0: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 44 6f  ype(i, DbType.Do
2bd0: 75 62 6c 65 29 3b 0a 20 20 20 20 20 20 72 65 74  uble);.      ret
2be0: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
2bf0: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44 6f 75  ment._sql.GetDou
2c00: 62 6c 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ble(_activeState
2c10: 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a  ment, i);.    }.
2c20: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
2c30: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  y>.    /// Retur
2c40: 6e 73 20 74 68 65 20 2e 4e 45 54 20 74 79 70 65  ns the .NET type
2c50: 20 6f 66 20 61 20 67 69 76 65 6e 20 63 6f 6c 75   of a given colu
2c60: 6d 6e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  mn.    /// </sum
2c70: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
2c80: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
2c90: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
2ca0: 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76  olumn to retriev
2cb0: 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  e</param>.    //
2cc0: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 79 70 65 3c  / <returns>Type<
2cd0: 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75  /returns>.    pu
2ce0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 54 79  blic override Ty
2cf0: 70 65 20 47 65 74 46 69 65 6c 64 54 79 70 65 28  pe GetFieldType(
2d00: 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20  int i).    {.   
2d10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
2d20: 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79  Convert.SQLiteTy
2d30: 70 65 54 6f 54 79 70 65 28 47 65 74 53 51 4c 69  peToType(GetSQLi
2d40: 74 65 54 79 70 65 28 69 29 29 3b 0a 20 20 20 20  teType(i));.    
2d50: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
2d60: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ary>.    /// Ret
2d70: 75 72 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73  urns a column as
2d80: 20 61 20 66 6c 6f 61 74 20 76 61 6c 75 65 0a 20   a float value. 
2d90: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2da0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
2db0: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
2dc0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
2dd0: 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  n to retrieve</p
2de0: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
2df0: 65 74 75 72 6e 73 3e 66 6c 6f 61 74 3c 2f 72 65  eturns>float</re
2e00: 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69  turns>.    publi
2e10: 63 20 6f 76 65 72 72 69 64 65 20 66 6c 6f 61 74  c override float
2e20: 20 47 65 74 46 6c 6f 61 74 28 69 6e 74 20 69 29   GetFloat(int i)
2e30: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 56 65 72  .    {.      Ver
2e40: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
2e50: 65 2e 53 69 6e 67 6c 65 29 3b 0a 20 20 20 20 20  e.Single);.     
2e60: 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
2e70: 54 6f 53 69 6e 67 6c 65 28 5f 61 63 74 69 76 65  ToSingle(_active
2e80: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
2e90: 65 74 44 6f 75 62 6c 65 28 5f 61 63 74 69 76 65  etDouble(_active
2ea0: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a  Statement, i));.
2eb0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
2ec0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
2ed0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
2ee0: 75 6d 6e 20 61 73 20 61 20 47 75 69 64 0a 20 20  umn as a Guid.  
2ef0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2f00: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
2f10: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
2f20: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
2f30: 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
2f40: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
2f50: 74 75 72 6e 73 3e 47 75 69 64 3c 2f 72 65 74 75  turns>Guid</retu
2f60: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
2f70: 6f 76 65 72 72 69 64 65 20 47 75 69 64 20 47 65  override Guid Ge
2f80: 74 47 75 69 64 28 69 6e 74 20 69 29 0a 20 20 20  tGuid(int i).   
2f90: 20 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79 54   {.      VerifyT
2fa0: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 47 75  ype(i, DbType.Gu
2fb0: 69 64 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  id);.      retur
2fc0: 6e 20 6e 65 77 20 47 75 69 64 28 5f 61 63 74 69  n new Guid(_acti
2fd0: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
2fe0: 2e 47 65 74 54 65 78 74 28 5f 61 63 74 69 76 65  .GetText(_active
2ff0: 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a  Statement, i));.
3000: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
3010: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
3020: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
3030: 75 6d 6e 20 61 73 20 61 20 73 68 6f 72 74 0a 20  umn as a short. 
3040: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3050: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
3060: 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e   name="i">The in
3070: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  dex of the colum
3080: 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  n to retrieve</p
3090: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
30a0: 65 74 75 72 6e 73 3e 49 6e 74 31 36 3c 2f 72 65  eturns>Int16</re
30b0: 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69  turns>.    publi
30c0: 63 20 6f 76 65 72 72 69 64 65 20 49 6e 74 31 36  c override Int16
30d0: 20 47 65 74 49 6e 74 31 36 28 69 6e 74 20 69 29   GetInt16(int i)
30e0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 56 65 72  .    {.      Ver
30f0: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
3100: 65 2e 49 6e 74 31 36 29 3b 0a 20 20 20 20 20 20  e.Int16);.      
3110: 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54  return Convert.T
3120: 6f 49 6e 74 31 36 28 5f 61 63 74 69 76 65 53 74  oInt16(_activeSt
3130: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
3140: 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74 61  Int32(_activeSta
3150: 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20 20  tement, i));.   
3160: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
3170: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65  mary>.    /// Re
3180: 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75  trieves the colu
3190: 6d 6e 20 61 73 20 61 6e 20 69 6e 74 0a 20 20 20  mn as an int.   
31a0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
31b0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
31c0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
31d0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  x of the column 
31e0: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
31f0: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
3200: 75 72 6e 73 3e 49 6e 74 33 32 3c 2f 72 65 74 75  urns>Int32</retu
3210: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
3220: 6f 76 65 72 72 69 64 65 20 49 6e 74 33 32 20 47  override Int32 G
3230: 65 74 49 6e 74 33 32 28 69 6e 74 20 69 29 0a 20  etInt32(int i). 
3240: 20 20 20 7b 0a 20 20 20 20 20 20 56 65 72 69 66     {.      Verif
3250: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
3260: 49 6e 74 33 32 29 3b 0a 20 20 20 20 20 20 72 65  Int32);.      re
3270: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
3280: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e  ement._sql.GetIn
3290: 74 33 32 28 5f 61 63 74 69 76 65 53 74 61 74 65  t32(_activeState
32a0: 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a  ment, i);.    }.
32b0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
32c0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  y>.    /// Retri
32d0: 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  eves the column 
32e0: 61 73 20 61 20 6c 6f 6e 67 0a 20 20 20 20 2f 2f  as a long.    //
32f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
3300: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3310: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
3320: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
3330: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
3340: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
3350: 73 3e 49 6e 74 36 34 3c 2f 72 65 74 75 72 6e 73  s>Int64</returns
3360: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
3370: 72 72 69 64 65 20 49 6e 74 36 34 20 47 65 74 49  rride Int64 GetI
3380: 6e 74 36 34 28 69 6e 74 20 69 29 0a 20 20 20 20  nt64(int i).    
3390: 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79  {.      VerifyTy
33a0: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 49 6e 74  pe(i, DbType.Int
33b0: 36 34 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  64);.      retur
33c0: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
33d0: 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 36 34  nt._sql.GetInt64
33e0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
33f0: 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  t, i);.    }..  
3400: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
3410: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
3420: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
3430: 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2f 2f 2f  e column.    ///
3440: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
3450: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
3460: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
3470: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72   the column to r
3480: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a  etrieve</param>.
3490: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
34a0: 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73  >string</returns
34b0: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
34c0: 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
34d0: 4e 61 6d 65 28 69 6e 74 20 69 29 0a 20 20 20 20  Name(int i).    
34e0: 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  {.      CheckClo
34f0: 73 65 64 28 29 3b 0a 20 20 20 20 20 20 72 65 74  sed();.      ret
3500: 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65  urn _activeState
3510: 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
3520: 4e 61 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74  Name(_activeStat
3530: 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d  ement, i);.    }
3540: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3550: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  ry>.    /// Retr
3560: 69 65 76 65 73 20 74 68 65 20 69 20 6f 66 20 61  ieves the i of a
3570: 20 63 6f 6c 75 6d 6e 2c 20 67 69 76 65 6e 20 69   column, given i
3580: 74 73 20 6e 61 6d 65 0a 20 20 20 20 2f 2f 2f 20  ts name.    /// 
3590: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
35a0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
35b0: 6e 61 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20 6f  name">The name o
35c0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
35d0: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
35e0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
35f0: 73 3e 54 68 65 20 69 6e 74 20 69 20 6f 66 20 74  s>The int i of t
3600: 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72  he column</retur
3610: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
3620: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 4f  verride int GetO
3630: 72 64 69 6e 61 6c 28 73 74 72 69 6e 67 20 6e 61  rdinal(string na
3640: 6d 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  me).    {.      
3650: 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20  CheckClosed();. 
3660: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
3670: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
3680: 6c 2e 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 5f 61  l.ColumnIndex(_a
3690: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
36a0: 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  name);.    }..  
36b0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
36c0: 20 20 20 20 2f 2f 2f 20 53 63 68 65 6d 61 20 69      /// Schema i
36d0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 53 51  nformation in SQ
36e0: 4c 69 74 65 20 69 73 20 61 6e 20 69 66 66 79 2d  Lite is an iffy-
36f0: 62 75 73 69 6e 65 73 73 2e 20 20 57 65 27 76 65  business.  We've
3700: 20 65 78 74 65 6e 64 65 64 20 74 68 65 20 6e 61   extended the na
3710: 74 69 76 65 20 53 51 4c 69 74 65 33 2e 44 4c 4c  tive SQLite3.DLL
3720: 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 20 73 70   to include a sp
3730: 65 63 69 61 6c 20 70 72 61 67 6d 61 20 63 61 6c  ecial pragma cal
3740: 6c 65 64 0a 20 20 20 20 2f 2f 2f 20 50 52 41 47  led.    /// PRAG
3750: 4d 41 20 72 65 61 6c 5f 63 6f 6c 75 6d 6e 5f 6e  MA real_column_n
3760: 61 6d 65 73 0a 20 20 20 20 2f 2f 2f 20 57 68 65  ames.    /// Whe
3770: 6e 20 65 6e 61 62 6c 65 64 2c 20 74 68 65 20 70  n enabled, the p
3780: 72 61 67 6d 61 20 63 61 75 73 65 73 20 61 6c 6c  ragma causes all
3790: 20 63 6f 6c 75 6d 6e 20 61 6c 69 61 73 65 73 20   column aliases 
37a0: 74 6f 20 62 65 20 69 67 6e 6f 72 65 64 2c 20 61  to be ignored, a
37b0: 6e 64 20 74 68 65 20 66 75 6c 6c 20 44 61 74 61  nd the full Data
37c0: 62 61 73 65 2e 54 61 62 6c 65 2e 43 6f 6c 75 6d  base.Table.Colum
37d0: 6e 4e 61 6d 65 20 74 6f 20 62 65 20 72 65 74 75  nName to be retu
37e0: 72 6e 65 64 20 66 6f 72 0a 20 20 20 20 2f 2f 2f  rned for.    ///
37f0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   each column of 
3800: 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
3810: 6e 74 2e 20 20 55 73 69 6e 67 20 74 68 69 73 20  nt.  Using this 
3820: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 74 20 69  information it i
3830: 73 20 74 68 65 6e 20 70 6f 73 73 69 62 6c 65 20  s then possible 
3840: 74 6f 20 71 75 65 72 79 20 65 61 63 68 20 64 61  to query each da
3850: 74 61 62 61 73 65 20 61 6e 64 20 74 61 62 6c 65  tabase and table
3860: 20 66 6f 72 20 74 68 65 0a 20 20 20 20 2f 2f 2f   for the.    ///
3870: 20 6d 61 74 63 68 69 6e 67 20 63 6f 6c 75 6d 6e   matching column
3880: 2c 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 20  , and associate 
3890: 69 74 20 77 69 74 68 20 74 68 65 20 61 63 74 69  it with the acti
38a0: 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20  ve statement..  
38b0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
38c0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b  .    /// <remark
38d0: 73 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63  s>.    /// The c
38e0: 75 72 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f  urrent connectio
38f0: 6e 20 69 73 20 63 6c 6f 6e 65 64 20 66 6f 72 20  n is cloned for 
3900: 74 68 65 20 73 61 6b 65 20 6f 66 20 65 78 65 63  the sake of exec
3910: 75 74 69 6e 67 20 74 68 69 73 20 73 74 61 74 65  uting this state
3920: 6d 65 6e 74 2c 20 73 6f 20 61 73 20 74 6f 20 61  ment, so as to a
3930: 76 6f 69 64 20 61 6e 79 20 70 6f 73 73 69 62 69  void any possibi
3940: 6c 69 74 79 20 6f 66 20 63 6f 72 72 75 70 74 69  lity of corrupti
3950: 6e 67 20 74 68 65 0a 20 20 20 20 2f 2f 2f 20 6f  ng the.    /// o
3960: 72 69 67 69 6e 61 6c 20 63 6f 6e 6e 65 63 74 69  riginal connecti
3970: 6f 6e 27 73 20 65 78 69 73 74 69 6e 67 20 73 74  on's existing st
3980: 61 74 65 6d 65 6e 74 73 20 6f 72 20 73 74 61 74  atements or stat
3990: 65 2e 20 20 41 6e 79 20 61 74 74 61 63 68 65 64  e.  Any attached
39a0: 20 64 61 74 61 62 61 73 65 73 20 61 72 65 20 72   databases are r
39b0: 65 2d 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  e-attached to th
39c0: 65 20 6e 65 77 20 63 6f 6e 6e 65 63 74 69 6f 6e  e new connection
39d0: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61  ..    /// </rema
39e0: 72 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  rks>.    /// <re
39f0: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20  turns>Returns a 
3a00: 44 61 74 61 54 61 62 6c 65 20 63 6f 6e 74 61 69  DataTable contai
3a10: 6e 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61 20  ning the schema 
3a20: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20  information for 
3a30: 74 68 65 20 61 63 74 69 76 65 20 53 45 4c 45 43  the active SELEC
3a40: 54 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  T statement bein
3a50: 67 20 70 72 6f 63 65 73 73 65 64 2e 3c 2f 72 65  g processed.</re
3a60: 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69  turns>.    publi
3a70: 63 20 6f 76 65 72 72 69 64 65 20 44 61 74 61 54  c override DataT
3a80: 61 62 6c 65 20 47 65 74 53 63 68 65 6d 61 54 61  able GetSchemaTa
3a90: 62 6c 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  ble().    {.    
3aa0: 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b    CheckClosed();
3ab0: 0a 0a 20 20 20 20 20 20 44 61 74 61 54 61 62 6c  ..      DataTabl
3ac0: 65 20 74 62 6c 20 3d 20 6e 65 77 20 44 61 74 61  e tbl = new Data
3ad0: 54 61 62 6c 65 28 22 53 63 68 65 6d 61 54 61 62  Table("SchemaTab
3ae0: 6c 65 22 29 3b 0a 20 20 20 20 20 20 73 74 72 69  le");.      stri
3af0: 6e 67 5b 5d 20 61 72 4e 61 6d 65 3b 0a 20 20 20  ng[] arName;.   
3b00: 20 20 20 73 74 72 69 6e 67 20 73 74 72 54 61 62     string strTab
3b10: 6c 65 3b 0a 20 20 20 20 20 20 73 74 72 69 6e 67  le;.      string
3b20: 20 73 74 72 43 61 74 61 6c 6f 67 3b 0a 20 20 20   strCatalog;.   
3b30: 20 20 20 44 61 74 61 52 6f 77 20 72 6f 77 3b 0a     DataRow row;.
3b40: 0a 20 20 20 20 20 20 74 62 6c 2e 4c 6f 63 61 6c  .      tbl.Local
3b50: 65 20 3d 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  e = CultureInfo.
3b60: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
3b70: 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ;.      tbl.Colu
3b80: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
3b90: 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
3ba0: 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72  Name, typeof(Str
3bb0: 69 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  ing));.      tbl
3bc0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
3bd0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43  emaTableColumn.C
3be0: 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 2c 20 74 79  olumnOrdinal, ty
3bf0: 70 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20 20  peof(int));.    
3c00: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
3c10: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
3c20: 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 2c 20  umn.ColumnSize, 
3c30: 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20  typeof(int));.  
3c40: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
3c50: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
3c60: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65  olumn.NumericPre
3c70: 63 69 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 73  cision, typeof(s
3c80: 68 6f 72 74 29 29 3b 0a 20 20 20 20 20 20 74 62  hort));.      tb
3c90: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
3ca0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
3cb0: 4e 75 6d 65 72 69 63 53 63 61 6c 65 2c 20 74 79  NumericScale, ty
3cc0: 70 65 6f 66 28 73 68 6f 72 74 29 29 3b 0a 20 20  peof(short));.  
3cd0: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
3ce0: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
3cf0: 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 2c 20  olumn.IsUnique, 
3d00: 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29  typeof(Boolean))
3d10: 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ;.      tbl.Colu
3d20: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
3d30: 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 2c  bleColumn.IsKey,
3d40: 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
3d50: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
3d60: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
3d70: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
3d80: 6d 6e 2e 42 61 73 65 53 65 72 76 65 72 4e 61 6d  mn.BaseServerNam
3d90: 65 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67  e, typeof(string
3da0: 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  ));.      tbl.Co
3db0: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
3dc0: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
3dd0: 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e  umn.BaseCatalogN
3de0: 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69  ame, typeof(Stri
3df0: 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  ng));.      tbl.
3e00: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
3e10: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61  maTableColumn.Ba
3e20: 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79  seColumnName, ty
3e30: 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0a 20  peof(String));. 
3e40: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
3e50: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
3e60: 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 63 68 65 6d  Column.BaseSchem
3e70: 61 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74  aName, typeof(St
3e80: 72 69 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62  ring));.      tb
3e90: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
3ea0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
3eb0: 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 2c 20 74  BaseTableName, t
3ec0: 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0a  ypeof(String));.
3ed0: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
3ee0: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
3ef0: 65 43 6f 6c 75 6d 6e 2e 44 61 74 61 54 79 70 65  eColumn.DataType
3f00: 2c 20 74 79 70 65 6f 66 28 54 79 70 65 29 29 3b  , typeof(Type));
3f10: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
3f20: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
3f30: 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42  leColumn.AllowDB
3f40: 4e 75 6c 6c 2c 20 74 79 70 65 6f 66 28 42 6f 6f  Null, typeof(Boo
3f50: 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62  lean));.      tb
3f60: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
3f70: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
3f80: 50 72 6f 76 69 64 65 72 54 79 70 65 2c 20 74 79  ProviderType, ty
3f90: 70 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20 20  peof(int));.    
3fa0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
3fb0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
3fc0: 75 6d 6e 2e 49 73 41 6c 69 61 73 65 64 2c 20 74  umn.IsAliased, t
3fd0: 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b  ypeof(Boolean));
3fe0: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
3ff0: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
4000: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65  leColumn.IsExpre
4010: 73 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f  ssion, typeof(Bo
4020: 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74  olean));.      t
4030: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
4040: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
4050: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49  alColumn.IsAutoI
4060: 6e 63 72 65 6d 65 6e 74 2c 20 74 79 70 65 6f 66  ncrement, typeof
4070: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20  (Boolean));.    
4080: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
4090: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
40a0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f  ionalColumn.IsRo
40b0: 77 56 65 72 73 69 6f 6e 2c 20 74 79 70 65 6f 66  wVersion, typeof
40c0: 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20  (Boolean));.    
40d0: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
40e0: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
40f0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 48 69  ionalColumn.IsHi
4100: 64 64 65 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f  dden, typeof(Boo
4110: 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62  lean));.      tb
4120: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
4130: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
4140: 49 73 4c 6f 6e 67 2c 20 74 79 70 65 6f 66 28 42  IsLong, typeof(B
4150: 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20  oolean));.      
4160: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
4170: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
4180: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64  nalColumn.IsRead
4190: 4f 6e 6c 79 2c 20 74 79 70 65 6f 66 28 42 6f 6f  Only, typeof(Boo
41a0: 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62  lean));.      tb
41b0: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
41c0: 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61  hemaTableOptiona
41d0: 6c 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72  lColumn.Provider
41e0: 53 70 65 63 69 66 69 63 44 61 74 61 54 79 70 65  SpecificDataType
41f0: 2c 20 74 79 70 65 6f 66 28 54 79 70 65 29 29 3b  , typeof(Type));
4200: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
4210: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
4220: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
4230: 2e 44 65 66 61 75 6c 74 56 61 6c 75 65 2c 20 74  .DefaultValue, t
4240: 79 70 65 6f 66 28 6f 62 6a 65 63 74 29 29 3b 0a  ypeof(object));.
4250: 0a 20 20 20 20 20 20 74 62 6c 2e 42 65 67 69 6e  .      tbl.Begin
4260: 4c 6f 61 64 44 61 74 61 28 29 3b 0a 0a 20 20 20  LoadData();..   
4270: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
4280: 69 6f 6e 20 63 6e 6e 20 3d 20 28 53 51 4c 69 74  ion cnn = (SQLit
4290: 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 5f 63 6f 6d  eConnection)_com
42a0: 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 3b  mand.Connection;
42b0: 0a 0a 20 20 20 20 20 20 74 72 79 0a 20 20 20 20  ..      try.    
42c0: 20 20 7b 0a 20 20 20 20 20 20 20 20 63 6e 6e 2e    {.        cnn.
42d0: 5f 73 71 6c 2e 53 65 74 52 65 61 6c 43 6f 6c 4e  _sql.SetRealColN
42e0: 61 6d 65 73 28 74 72 75 65 29 3b 0a 0a 20 20 20  ames(true);..   
42f0: 20 20 20 20 20 2f 2f 20 43 72 65 61 74 65 20 61       // Create a
4300: 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 20 62 61 73   new command bas
4310: 65 64 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e  ed on the origin
4320: 61 6c 2e 20 20 54 68 65 20 6f 6e 6c 79 20 64 69  al.  The only di
4330: 66 66 65 72 65 6e 63 65 20 62 65 69 6e 67 20 74  fference being t
4340: 68 61 74 20 74 68 69 73 20 6e 65 77 20 63 6f 6d  hat this new com
4350: 6d 61 6e 64 20 72 65 74 75 72 6e 73 0a 20 20 20  mand returns.   
4360: 20 20 20 20 20 2f 2f 20 66 75 6c 6c 79 2d 71 75       // fully-qu
4370: 61 6c 69 66 69 65 64 20 44 61 74 61 62 61 73 65  alified Database
4380: 2e 54 61 62 6c 65 2e 43 6f 6c 75 6d 6e 20 63 6f  .Table.Column co
4390: 6c 75 6d 6e 20 6e 61 6d 65 73 20 62 65 63 61 75  lumn names becau
43a0: 73 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  se of the above 
43b0: 70 72 61 67 6d 61 0a 20 20 20 20 20 20 20 20 75  pragma.        u
43c0: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
43d0: 61 6e 64 20 63 6d 64 20 3d 20 28 53 51 4c 69 74  and cmd = (SQLit
43e0: 65 43 6f 6d 6d 61 6e 64 29 5f 63 6f 6d 6d 61 6e  eCommand)_comman
43f0: 64 2e 43 6c 6f 6e 65 28 29 29 0a 20 20 20 20 20  d.Clone()).     
4400: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75     {.          u
4410: 73 69 6e 67 20 28 44 62 44 61 74 61 52 65 61 64  sing (DbDataRead
4420: 65 72 20 72 64 20 3d 20 63 6d 64 2e 45 78 65 63  er rd = cmd.Exec
4430: 75 74 65 52 65 61 64 65 72 28 43 6f 6d 6d 61 6e  uteReader(Comman
4440: 64 42 65 68 61 76 69 6f 72 2e 53 63 68 65 6d 61  dBehavior.Schema
4450: 4f 6e 6c 79 29 29 0a 20 20 20 20 20 20 20 20 20  Only)).         
4460: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f   {.            /
4470: 2f 20 4e 6f 20 6e 65 65 64 20 74 6f 20 52 65 61  / No need to Rea
4480: 64 28 29 20 66 72 6f 6d 20 74 68 69 73 20 72 65  d() from this re
4490: 61 64 65 72 2c 20 77 65 20 6a 75 73 74 20 77 61  ader, we just wa
44a0: 6e 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  nt the column na
44b0: 6d 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  mes.            
44c0: 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20  for (int n = 0; 
44d0: 6e 20 3c 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b  n < _fieldCount;
44e0: 20 6e 2b 2b 29 0a 20 20 20 20 20 20 20 20 20 20   n++).          
44f0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
4500: 20 20 73 74 72 54 61 62 6c 65 20 3d 20 22 22 3b    strTable = "";
4510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
4520: 74 72 43 61 74 61 6c 6f 67 20 3d 20 22 6d 61 69  trCatalog = "mai
4530: 6e 22 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
4540: 20 20 20 72 6f 77 20 3d 20 74 62 6c 2e 4e 65 77     row = tbl.New
4550: 52 6f 77 28 29 3b 0a 0a 20 20 20 20 20 20 20 20  Row();..        
4560: 20 20 20 20 20 20 2f 2f 20 44 65 66 61 75 6c 74        // Default
4570: 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20 74 68   settings for th
4580: 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  e column.       
4590: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
45a0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c  aTableColumn.Col
45b0: 75 6d 6e 4e 61 6d 65 5d 20 3d 20 47 65 74 4e 61  umnName] = GetNa
45c0: 6d 65 28 6e 29 3b 0a 20 20 20 20 20 20 20 20 20  me(n);.         
45d0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
45e0: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d  ableColumn.Colum
45f0: 6e 4f 72 64 69 6e 61 6c 5d 20 3d 20 6e 3b 0a 20  nOrdinal] = n;. 
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
4610: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
4620: 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20 3d  mn.ColumnSize] =
4630: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   0;.            
4640: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
4650: 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50  eColumn.NumericP
4660: 72 65 63 69 73 69 6f 6e 5d 20 3d 20 30 3b 0a 20  recision] = 0;. 
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
4680: 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  [SchemaTableColu
4690: 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c 65 5d  mn.NumericScale]
46a0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
46b0: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
46c0: 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64  bleColumn.Provid
46d0: 65 72 54 79 70 65 5d 20 3d 20 47 65 74 53 51 4c  erType] = GetSQL
46e0: 69 74 65 54 79 70 65 28 6e 29 2e 54 79 70 65 3b  iteType(n).Type;
46f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
4700: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
4710: 6c 75 6d 6e 2e 49 73 4c 6f 6e 67 5d 20 3d 20 66  lumn.IsLong] = f
4720: 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20  alse;.          
4730: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
4740: 62 6c 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44  bleColumn.AllowD
4750: 42 4e 75 6c 6c 5d 20 3d 20 74 72 75 65 3b 0a 20  BNull] = true;. 
4760: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
4770: 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  [SchemaTableOpti
4780: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65 61  onalColumn.IsRea
4790: 64 4f 6e 6c 79 5d 20 3d 20 66 61 6c 73 65 3b 0a  dOnly] = false;.
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
47b0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
47c0: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f  ionalColumn.IsRo
47d0: 77 56 65 72 73 69 6f 6e 5d 20 3d 20 66 61 6c 73  wVersion] = fals
47e0: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e;.             
47f0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
4800: 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 5d  Column.IsUnique]
4810: 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20   = false;.      
4820: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
4830: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
4840: 4b 65 79 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20  Key] = false;.  
4850: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
4860: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
4870: 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f  nalColumn.IsAuto
4880: 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 66 61 6c  Increment] = fal
4890: 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se;.            
48a0: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
48b0: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
48c0: 49 73 52 65 61 64 4f 6e 6c 79 5d 20 3d 20 66 61  IsReadOnly] = fa
48d0: 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20  lse;.           
48e0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
48f0: 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c  leColumn.BaseCol
4900: 75 6d 6e 4e 61 6d 65 5d 20 3d 20 47 65 74 4e 61  umnName] = GetNa
4910: 6d 65 28 6e 29 3b 0a 0a 20 20 20 20 20 20 20 20  me(n);..        
4920: 20 20 20 20 20 20 2f 2f 20 54 72 79 20 61 6e 64        // Try and
4930: 20 65 78 74 72 61 63 74 20 74 68 65 20 64 61 74   extract the dat
4940: 61 62 61 73 65 2c 20 74 61 62 6c 65 20 61 6e 64  abase, table and
4950: 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65   column from the
4960: 20 64 61 74 61 72 65 61 64 65 72 0a 20 20 20 20   datareader.    
4970: 20 20 20 20 20 20 20 20 20 20 61 72 4e 61 6d 65            arName
4980: 20 3d 20 72 64 2e 47 65 74 4e 61 6d 65 28 6e 29   = rd.GetName(n)
4990: 2e 53 70 6c 69 74 28 27 2e 27 29 3b 0a 0a 20 20  .Split('.');..  
49a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
49b0: 61 72 4e 61 6d 65 2e 4c 65 6e 67 74 68 20 3e 20  arName.Length > 
49c0: 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1).             
49d0: 20 20 20 73 74 72 54 61 62 6c 65 20 3d 20 61 72     strTable = ar
49e0: 4e 61 6d 65 5b 61 72 4e 61 6d 65 2e 4c 65 6e 67  Name[arName.Leng
49f0: 74 68 20 2d 20 32 5d 3b 0a 0a 20 20 20 20 20 20  th - 2];..      
4a00: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 4e 61          if (arNa
4a10: 6d 65 2e 4c 65 6e 67 74 68 20 3e 20 32 29 0a 20  me.Length > 2). 
4a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4a30: 74 72 43 61 74 61 6c 6f 67 20 3d 20 61 72 4e 61  trCatalog = arNa
4a40: 6d 65 5b 61 72 4e 61 6d 65 2e 4c 65 6e 67 74 68  me[arName.Length
4a50: 20 2d 20 33 5d 3b 0a 0a 20 20 20 20 20 20 20 20   - 3];..        
4a60: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 20 68        // If we h
4a70: 61 76 65 20 61 20 74 61 62 6c 65 2d 62 6f 75 6e  ave a table-boun
4a80: 64 20 63 6f 6c 75 6d 6e 2c 20 65 78 74 72 61 63  d column, extrac
4a90: 74 20 74 68 65 20 65 78 74 72 61 20 69 6e 66 6f  t the extra info
4aa0: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 69 74 0a  rmation from it.
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4ac0: 20 28 61 72 4e 61 6d 65 2e 4c 65 6e 67 74 68 20   (arName.Length 
4ad0: 3e 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20  > 1).           
4ae0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
4af0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
4b00: 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 54 61 62  teCommand cmdTab
4b10: 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  le = new SQLiteC
4b20: 6f 6d 6d 61 6e 64 28 53 74 72 69 6e 67 2e 46 6f  ommand(String.Fo
4b30: 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f  rmat(CultureInfo
4b40: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
4b50: 65 2c 20 22 50 52 41 47 4d 41 20 5b 7b 31 7d 5d  e, "PRAGMA [{1}]
4b60: 2e 54 41 42 4c 45 5f 49 4e 46 4f 28 5b 7b 30 7d  .TABLE_INFO([{0}
4b70: 5d 29 22 2c 20 73 74 72 54 61 62 6c 65 2c 20 73  ])", strTable, s
4b80: 74 72 43 61 74 61 6c 6f 67 29 2c 20 63 6e 6e 29  trCatalog), cnn)
4b90: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
4ba0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
4bb0: 20 20 20 20 20 20 69 66 20 28 61 72 4e 61 6d 65        if (arName
4bc0: 2e 4c 65 6e 67 74 68 20 3c 20 33 29 20 73 74 72  .Length < 3) str
4bd0: 43 61 74 61 6c 6f 67 20 3d 20 22 6d 61 69 6e 22  Catalog = "main"
4be0: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4bf0: 20 20 20 20 20 75 73 69 6e 67 20 28 44 62 44 61       using (DbDa
4c00: 74 61 52 65 61 64 65 72 20 72 64 54 61 62 6c 65  taReader rdTable
4c10: 20 3d 20 63 6d 64 54 61 62 6c 65 2e 45 78 65 63   = cmdTable.Exec
4c20: 75 74 65 52 65 61 64 65 72 28 29 29 0a 20 20 20  uteReader()).   
4c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
4c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4c50: 20 20 20 20 20 77 68 69 6c 65 20 28 72 64 54 61       while (rdTa
4c60: 62 6c 65 2e 52 65 61 64 28 29 29 0a 20 20 20 20  ble.Read()).    
4c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c80: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
4c90: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
4ca0: 6e 67 2e 43 6f 6d 70 61 72 65 28 61 72 4e 61 6d  ng.Compare(arNam
4cb0: 65 5b 61 72 4e 61 6d 65 2e 4c 65 6e 67 74 68 20  e[arName.Length 
4cc0: 2d 20 31 5d 2c 20 72 64 54 61 62 6c 65 2e 47 65  - 1], rdTable.Ge
4cd0: 74 53 74 72 69 6e 67 28 31 29 2c 20 74 72 75 65  tString(1), true
4ce0: 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  , CultureInfo.In
4cf0: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 20  variantCulture) 
4d00: 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20 20  == 0).          
4d10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
4d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d30: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72        string str
4d40: 54 79 70 65 20 3d 20 72 64 54 61 62 6c 65 2e 47  Type = rdTable.G
4d50: 65 74 53 74 72 69 6e 67 28 32 29 3b 0a 20 20 20  etString(2);.   
4d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d70: 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
4d80: 53 69 7a 65 20 3d 20 73 74 72 54 79 70 65 2e 53  Size = strType.S
4d90: 70 6c 69 74 28 27 28 27 29 3b 0a 20 20 20 20 20  plit('(');.     
4da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4db0: 20 20 20 69 66 20 28 61 72 53 69 7a 65 2e 4c 65     if (arSize.Le
4dc0: 6e 67 74 68 20 3e 20 31 29 0a 20 20 20 20 20 20  ngth > 1).      
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4de0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4e00: 72 54 79 70 65 20 3d 20 61 72 53 69 7a 65 5b 30  rType = arSize[0
4e10: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ];.             
4e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 53               arS
4e30: 69 7a 65 20 3d 20 61 72 53 69 7a 65 5b 31 5d 2e  ize = arSize[1].
4e40: 53 70 6c 69 74 28 27 29 27 29 3b 0a 20 20 20 20  Split(')');.    
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e60: 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a 65        if (arSize
4e70: 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20 20 20  .Length > 1).   
4e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e90: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
4ea0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43  emaTableColumn.C
4eb0: 6f 6c 75 6d 6e 53 69 7a 65 5d 20 3d 20 43 6f 6e  olumnSize] = Con
4ec0: 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53  vert.ToInt32(arS
4ed0: 69 7a 65 5b 30 5d 2c 20 43 75 6c 74 75 72 65 49  ize[0], CultureI
4ee0: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
4ef0: 74 75 72 65 29 3b 0a 20 20 20 20 20 20 20 20 20  ture);.         
4f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4f10: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4f20: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 62            bool b
4f30: 4e 6f 74 4e 75 6c 6c 20 3d 20 72 64 54 61 62 6c  NotNull = rdTabl
4f40: 65 2e 47 65 74 42 6f 6f 6c 65 61 6e 28 33 29 3b  e.GetBoolean(3);
4f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4f60: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 62 50           bool bP
4f70: 72 69 6d 61 72 79 4b 65 79 20 3d 20 72 64 54 61  rimaryKey = rdTa
4f80: 62 6c 65 2e 47 65 74 42 6f 6f 6c 65 61 6e 28 35  ble.GetBoolean(5
4f90: 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
4fb0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
4fc0: 6e 2e 44 61 74 61 54 79 70 65 5d 20 3d 20 47 65  n.DataType] = Ge
4fd0: 74 46 69 65 6c 64 54 79 70 65 28 6e 29 3b 0a 20  tFieldType(n);. 
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ff0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
5000: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
5010: 65 54 61 62 6c 65 4e 61 6d 65 5d 20 3d 20 73 74  eTableName] = st
5020: 72 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 20 20  rTable;.        
5030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5040: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
5050: 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e  olumn.BaseColumn
5060: 4e 61 6d 65 5d 20 3d 20 72 64 54 61 62 6c 65 2e  Name] = rdTable.
5070: 47 65 74 53 74 72 69 6e 67 28 31 29 3b 0a 20 20  GetString(1);.  
5080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5090: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
50a0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73  .IsNullOrEmpty(s
50b0: 74 72 43 61 74 61 6c 6f 67 29 20 3d 3d 20 66 61  trCatalog) == fa
50c0: 6c 73 65 29 0a 20 20 20 20 20 20 20 20 20 20 20  lse).           
50d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20               {. 
50e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50f0: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
5100: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
5110: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c  Column.BaseCatal
5120: 6f 67 4e 61 6d 65 5d 20 3d 20 73 74 72 43 61 74  ogName] = strCat
5130: 61 6c 6f 67 3b 0a 20 20 20 20 20 20 20 20 20 20  alog;.          
5140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
5150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5160: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
5170: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 41  emaTableColumn.A
5180: 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 20 28 21  llowDBNull] = (!
5190: 62 4e 6f 74 4e 75 6c 6c 20 26 26 20 21 62 50 72  bNotNull && !bPr
51a0: 69 6d 61 72 79 4b 65 79 29 3b 0a 20 20 20 20 20  imaryKey);.     
51b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51c0: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
51d0: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e 69 71 75  leColumn.IsUniqu
51e0: 65 5d 20 3d 20 62 50 72 69 6d 61 72 79 4b 65 79  e] = bPrimaryKey
51f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
5200: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
5210: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
5220: 49 73 4b 65 79 5d 20 3d 20 62 50 72 69 6d 61 72  IsKey] = bPrimar
5230: 79 4b 65 79 3b 0a 20 20 20 20 20 20 20 20 20 20  yKey;.          
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
5250: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
5260: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75  ionalColumn.IsAu
5270: 74 6f 49 6e 63 72 65 6d 65 6e 74 5d 20 3d 20 62  toIncrement] = b
5280: 50 72 69 6d 61 72 79 4b 65 79 3b 0a 20 20 20 20  PrimaryKey;.    
5290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52a0: 20 20 20 20 69 66 20 28 72 64 54 61 62 6c 65 2e      if (rdTable.
52b0: 49 73 44 42 4e 75 6c 6c 28 34 29 20 3d 3d 20 66  IsDBNull(4) == f
52c0: 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20 20 20  alse).          
52d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52e0: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
52f0: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44 65  ptionalColumn.De
5300: 66 61 75 6c 74 56 61 6c 75 65 5d 20 3d 20 72 64  faultValue] = rd
5310: 54 61 62 6c 65 5b 34 5d 3b 0a 20 20 20 20 20 20  Table[4];.      
5320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5330: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
5340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5360: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
5370: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
5380: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
5390: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
53a0: 20 20 20 20 20 20 20 20 20 20 20 74 62 6c 2e 52             tbl.R
53b0: 6f 77 73 2e 41 64 64 28 72 6f 77 29 3b 0a 20 20  ows.Add(row);.  
53c0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
53d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
53e0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
53f0: 66 69 6e 61 6c 6c 79 0a 20 20 20 20 20 20 7b 0a  finally.      {.
5400: 20 20 20 20 20 20 20 20 63 6e 6e 2e 5f 73 71 6c          cnn._sql
5410: 2e 53 65 74 52 65 61 6c 43 6f 6c 4e 61 6d 65 73  .SetRealColNames
5420: 28 66 61 6c 73 65 29 3b 0a 20 20 20 20 20 20 7d  (false);.      }
5430: 0a 0a 20 20 20 20 20 20 74 62 6c 2e 41 63 63 65  ..      tbl.Acce
5440: 70 74 43 68 61 6e 67 65 73 28 29 3b 0a 20 20 20  ptChanges();.   
5450: 20 20 20 74 62 6c 2e 45 6e 64 4c 6f 61 64 44 61     tbl.EndLoadDa
5460: 74 61 28 29 3b 0a 0a 20 20 20 20 20 20 72 65 74  ta();..      ret
5470: 75 72 6e 20 74 62 6c 3b 0a 20 20 20 20 7d 0a 0a  urn tbl;.    }..
5480: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
5490: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  >.    /// Retrie
54a0: 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  ves the column a
54b0: 73 20 61 20 73 74 72 69 6e 67 0a 20 20 20 20 2f  s a string.    /
54c0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
54d0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
54e0: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
54f0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
5500: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
5510: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
5520: 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72  ns>string</retur
5530: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
5540: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
5550: 65 74 53 74 72 69 6e 67 28 69 6e 74 20 69 29 0a  etString(int i).
5560: 20 20 20 20 7b 0a 20 20 20 20 20 20 56 65 72 69      {.      Veri
5570: 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65  fyType(i, DbType
5580: 2e 53 74 72 69 6e 67 29 3b 0a 20 20 20 20 20 20  .String);.      
5590: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
55a0: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
55b0: 54 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74  Text(_activeStat
55c0: 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d  ement, i);.    }
55d0: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
55e0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72  ry>.    /// Retr
55f0: 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  ieves the column
5600: 20 61 73 20 61 6e 20 6f 62 6a 65 63 74 20 63 6f   as an object co
5610: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74  rresponding to t
5620: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61  he underlying da
5630: 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f  tatype of the co
5640: 6c 75 6d 6e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  lumn.    /// </s
5650: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
5660: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
5670: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
5680: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
5690: 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  eve</param>.    
56a0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 6f 62 6a  /// <returns>obj
56b0: 65 63 74 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  ect</returns>.  
56c0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
56d0: 65 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75  e object GetValu
56e0: 65 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20  e(int i).    {. 
56f0: 20 20 20 20 20 53 51 4c 69 74 65 54 79 70 65 20       SQLiteType 
5700: 74 79 70 20 3d 20 47 65 74 53 51 4c 69 74 65 54  typ = GetSQLiteT
5710: 79 70 65 28 69 29 3b 0a 0a 20 20 20 20 20 20 72  ype(i);..      r
5720: 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61  eturn _activeSta
5730: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 56  tement._sql.GetV
5740: 61 6c 75 65 28 5f 61 63 74 69 76 65 53 74 61 74  alue(_activeStat
5750: 65 6d 65 6e 74 2c 20 69 2c 20 72 65 66 20 74 79  ement, i, ref ty
5760: 70 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  p);.    }..    /
5770: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
5780: 20 2f 2f 2f 20 52 65 74 72 65 69 76 65 73 20 74   /// Retreives t
5790: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 6d 75 6c  he values of mul
57a0: 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 73 2c 20 75  tiple columns, u
57b0: 70 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66  p to the size of
57c0: 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 61 72   the supplied ar
57d0: 72 61 79 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ray.    /// </su
57e0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
57f0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75  param name="valu
5800: 65 73 22 3e 54 68 65 20 61 72 72 61 79 20 74 6f  es">The array to
5810: 20 66 69 6c 6c 20 77 69 74 68 20 76 61 6c 75 65   fill with value
5820: 73 20 66 72 6f 6d 20 74 68 65 20 63 6f 6c 75 6d  s from the colum
5830: 6e 73 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  ns in the curren
5840: 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 70 61 72  t resultset</par
5850: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
5860: 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20  urns>The number 
5870: 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74 72 69  of columns retri
5880: 65 76 65 64 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  eved</returns>. 
5890: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
58a0: 64 65 20 69 6e 74 20 47 65 74 56 61 6c 75 65 73  de int GetValues
58b0: 28 6f 62 6a 65 63 74 5b 5d 20 76 61 6c 75 65 73  (object[] values
58c0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68  ).    {.      Ch
58d0: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20  eckClosed();.   
58e0: 20 20 20 69 6e 74 20 6e 4d 61 78 20 3d 20 5f 66     int nMax = _f
58f0: 69 65 6c 64 43 6f 75 6e 74 3b 0a 20 20 20 20 20  ieldCount;.     
5900: 20 69 66 20 28 76 61 6c 75 65 73 2e 4c 65 6e 67   if (values.Leng
5910: 74 68 20 3c 20 6e 4d 61 78 29 20 6e 4d 61 78 20  th < nMax) nMax 
5920: 3d 20 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 3b  = values.Length;
5930: 0a 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74  ..      for (int
5940: 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 6e 4d 61 78   n = 0; n < nMax
5950: 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 20  ; n++).      {. 
5960: 20 20 20 20 20 20 20 76 61 6c 75 65 73 2e 53 65         values.Se
5970: 74 56 61 6c 75 65 28 47 65 74 56 61 6c 75 65 28  tValue(GetValue(
5980: 6e 29 2c 20 6e 29 3b 0a 20 20 20 20 20 20 7d 0a  n), n);.      }.
5990: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 4d  .      return nM
59a0: 61 78 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ax;.    }..    /
59b0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
59c0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75   /// Returns Tru
59d0: 65 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 73  e if the results
59e0: 65 74 20 68 61 73 20 72 6f 77 73 20 74 68 61 74  et has rows that
59f0: 20 63 61 6e 20 62 65 20 66 65 74 63 68 65 64 0a   can be fetched.
5a00: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5a10: 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  y>.    public ov
5a20: 65 72 72 69 64 65 20 62 6f 6f 6c 20 48 61 73 52  erride bool HasR
5a30: 6f 77 73 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ows.    {.      
5a40: 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  get.      {.    
5a50: 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28      CheckClosed(
5a60: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
5a70: 6e 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65  n (_readingState
5a80: 20 21 3d 20 32 29 3b 0a 20 20 20 20 20 20 7d 0a   != 2);.      }.
5a90: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
5aa0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
5ab0: 20 52 65 74 75 72 6e 73 20 54 72 75 65 20 69 66   Returns True if
5ac0: 20 74 68 65 20 64 61 74 61 20 72 65 61 64 65 72   the data reader
5ad0: 20 69 73 20 63 6c 6f 73 65 64 0a 20 20 20 20 2f   is closed.    /
5ae0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
5af0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
5b00: 65 20 62 6f 6f 6c 20 49 73 43 6c 6f 73 65 64 0a  e bool IsClosed.
5b10: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20      {.      get 
5b20: 7b 20 72 65 74 75 72 6e 20 28 5f 63 6f 6d 6d 61  { return (_comma
5b30: 6e 64 20 3d 3d 20 6e 75 6c 6c 29 3b 20 7d 0a 20  nd == null); }. 
5b40: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
5b50: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
5b60: 52 65 74 75 72 6e 73 20 54 72 75 65 20 69 66 20  Returns True if 
5b70: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  the specified co
5b80: 6c 75 6d 6e 20 69 73 20 6e 75 6c 6c 0a 20 20 20  lumn is null.   
5b90: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
5ba0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5bb0: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
5bc0: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  x of the column 
5bd0: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
5be0: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
5bf0: 75 72 6e 73 3e 54 72 75 65 20 6f 72 20 46 61 6c  urns>True or Fal
5c00: 73 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  se</returns>.   
5c10: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
5c20: 20 62 6f 6f 6c 20 49 73 44 42 4e 75 6c 6c 28 69   bool IsDBNull(i
5c30: 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20  nt i).    {.    
5c40: 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b    CheckClosed();
5c50: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61  .      return _a
5c60: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
5c70: 73 71 6c 2e 49 73 4e 75 6c 6c 28 5f 61 63 74 69  sql.IsNull(_acti
5c80: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b  veStatement, i);
5c90: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
5ca0: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
5cb0: 2f 20 4d 6f 76 65 73 20 74 6f 20 74 68 65 20 6e  / Moves to the n
5cc0: 65 78 74 20 72 65 73 75 6c 74 73 65 74 20 69 6e  ext resultset in
5cd0: 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 2d 72 65   multiple row-re
5ce0: 74 75 72 6e 69 6e 67 20 53 51 4c 20 63 6f 6d 6d  turning SQL comm
5cf0: 61 6e 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  and..    /// </s
5d00: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
5d10: 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66  <returns>True if
5d20: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73   the command was
5d30: 20 73 75 63 63 65 73 73 66 75 6c 20 61 6e 64 20   successful and 
5d40: 61 20 6e 65 77 20 72 65 73 75 6c 74 73 65 74 20  a new resultset 
5d50: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 46 61  is available, Fa
5d60: 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e 3c 2f  lse otherwise.</
5d70: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
5d80: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
5d90: 6c 20 4e 65 78 74 52 65 73 75 6c 74 28 29 0a 20  l NextResult(). 
5da0: 20 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b     {.      Check
5db0: 43 6c 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20  Closed();..     
5dc0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
5dd0: 20 73 74 6d 74 3b 0a 20 20 20 20 20 20 69 6e 74   stmt;.      int
5de0: 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0a 0a 20 20   fieldCount;..  
5df0: 20 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29      while (true)
5e00: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
5e10: 20 69 66 20 28 5f 61 63 74 69 76 65 53 74 61 74   if (_activeStat
5e20: 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0a 20  ement != null). 
5e30: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
5e40: 20 20 20 2f 2f 20 49 66 20 77 65 27 72 65 20 6f     // If we're o
5e50: 6e 6c 79 20 73 75 70 70 6f 73 65 64 20 74 6f 20  nly supposed to 
5e60: 72 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20  return a single 
5e70: 72 6f 77 73 65 74 2c 20 73 74 65 70 20 74 68 72  rowset, step thr
5e80: 6f 75 67 68 20 61 6c 6c 20 72 65 6d 61 69 6e 69  ough all remaini
5e90: 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e  ng statements on
5ea0: 63 65 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 20  ce until.       
5eb0: 20 20 20 2f 2f 20 74 68 65 79 20 61 72 65 20 61     // they are a
5ec0: 6c 6c 20 64 6f 6e 65 20 61 6e 64 20 72 65 74 75  ll done and retu
5ed0: 72 6e 20 66 61 6c 73 65 20 74 6f 20 69 6e 64 69  rn false to indi
5ee0: 63 61 74 65 20 6e 6f 20 6d 6f 72 65 20 72 65 73  cate no more res
5ef0: 75 6c 74 73 65 74 73 20 65 78 69 73 74 2e 0a 20  ultsets exist.. 
5f00: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 63           if ((_c
5f10: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 26  ommandBehavior &
5f20: 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72   CommandBehavior
5f30: 2e 53 69 6e 67 6c 65 52 65 73 75 6c 74 29 20 21  .SingleResult) !
5f40: 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 7b  = 0).          {
5f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
5f60: 52 65 73 65 74 20 74 68 65 20 70 72 65 76 69 6f  Reset the previo
5f70: 75 73 6c 79 2d 65 78 65 63 75 74 65 64 20 63 6f  usly-executed co
5f80: 6d 6d 61 6e 64 0a 20 20 20 20 20 20 20 20 20 20  mmand.          
5f90: 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65    _activeStateme
5fa0: 6e 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28 5f 61  nt._sql.Reset(_a
5fb0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 29 3b  ctiveStatement);
5fc0: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68  ..            wh
5fd0: 69 6c 65 20 28 5f 61 63 74 69 76 65 53 74 61 74  ile (_activeStat
5fe0: 65 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31 20 21  ementIndex + 1 !
5ff0: 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 5f 73 74 61 74  = _command._stat
6000: 65 6d 65 6e 74 4c 69 73 74 2e 4c 65 6e 67 74 68  ementList.Length
6010: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a  ).            {.
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 61                _a
6030: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e  ctiveStatementIn
6040: 64 65 78 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20  dex++;.         
6050: 20 20 20 20 20 73 74 6d 74 20 3d 20 5f 63 6f 6d       stmt = _com
6060: 6d 61 6e 64 2e 5f 73 74 61 74 65 6d 65 6e 74 4c  mand._statementL
6070: 69 73 74 5b 5f 61 63 74 69 76 65 53 74 61 74 65  ist[_activeState
6080: 6d 65 6e 74 49 6e 64 65 78 5d 3b 0a 20 20 20 20  mentIndex];.    
6090: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f            stmt._
60a0: 73 71 6c 2e 53 74 65 70 28 73 74 6d 74 29 3b 0a  sql.Step(stmt);.
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
60c0: 6d 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28 73 74  mt._sql.Reset(st
60d0: 6d 74 29 3b 20 2f 2f 20 47 6f 74 74 61 20 72 65  mt); // Gotta re
60e0: 73 65 74 20 61 66 74 65 72 20 65 76 65 72 79 20  set after every 
60f0: 73 74 65 70 20 74 6f 20 72 65 6c 65 61 73 65 20  step to release 
6100: 61 6e 79 20 6c 6f 63 6b 73 20 61 6e 64 20 73 75  any locks and su
6110: 63 68 21 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch!.            
6120: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  }.            re
6130: 74 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20  turn false;.    
6140: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
6150: 20 20 20 2f 2f 20 52 65 73 65 74 20 74 68 65 20     // Reset the 
6160: 70 72 65 76 69 6f 75 73 6c 79 2d 65 78 65 63 75  previously-execu
6170: 74 65 64 20 63 6f 6d 6d 61 6e 64 0a 20 20 20 20  ted command.    
6180: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
6190: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 52 65 73 65  tement._sql.Rese
61a0: 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  t(_activeStateme
61b0: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a  nt);.        }..
61c0: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
61d0: 27 76 65 20 72 65 61 63 68 65 64 20 74 68 65 20  've reached the 
61e0: 65 6e 64 20 6f 66 20 74 68 65 20 73 74 61 74 65  end of the state
61f0: 6d 65 6e 74 73 2c 20 72 65 74 75 72 6e 20 66 61  ments, return fa
6200: 6c 73 65 2c 20 6e 6f 20 6d 6f 72 65 20 72 65 73  lse, no more res
6210: 75 6c 74 73 65 74 73 0a 20 20 20 20 20 20 20 20  ultsets.        
6220: 69 66 20 28 5f 61 63 74 69 76 65 53 74 61 74 65  if (_activeState
6230: 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31 20 3d 3d  mentIndex + 1 ==
6240: 20 5f 63 6f 6d 6d 61 6e 64 2e 5f 73 74 61 74 65   _command._state
6250: 6d 65 6e 74 4c 69 73 74 2e 4c 65 6e 67 74 68 29  mentList.Length)
6260: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
6270: 6e 20 66 61 6c 73 65 3b 0a 0a 20 20 20 20 20 20  n false;..      
6280: 20 20 2f 2f 20 49 66 20 77 65 20 77 65 72 65 20    // If we were 
6290: 6f 6e 20 61 20 72 65 73 75 6c 74 73 65 74 2c 20  on a resultset, 
62a0: 73 65 74 20 74 68 65 20 73 74 61 74 65 20 74 6f  set the state to
62b0: 20 22 64 6f 6e 65 20 72 65 61 64 69 6e 67 22 20   "done reading" 
62c0: 66 6f 72 20 69 74 0a 20 20 20 20 20 20 20 20 69  for it.        i
62d0: 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65  f (_readingState
62e0: 20 3c 20 31 29 0a 20 20 20 20 20 20 20 20 20 20   < 1).          
62f0: 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20  _readingState = 
6300: 31 3b 0a 0a 20 20 20 20 20 20 20 20 5f 61 63 74  1;..        _act
6310: 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65  iveStatementInde
6320: 78 2b 2b 3b 0a 0a 20 20 20 20 20 20 20 20 73 74  x++;..        st
6330: 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e 5f 73  mt = _command._s
6340: 74 61 74 65 6d 65 6e 74 4c 69 73 74 5b 5f 61 63  tatementList[_ac
6350: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64  tiveStatementInd
6360: 65 78 5d 3b 0a 20 20 20 20 20 20 20 20 66 69 65  ex];.        fie
6370: 6c 64 43 6f 75 6e 74 20 3d 20 73 74 6d 74 2e 5f  ldCount = stmt._
6380: 73 71 6c 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28  sql.ColumnCount(
6390: 73 74 6d 74 29 3b 0a 0a 20 20 20 20 20 20 20 20  stmt);..        
63a0: 2f 2f 20 49 66 20 77 65 27 72 65 20 74 6f 6c 64  // If we're told
63b0: 20 74 6f 20 67 65 74 20 73 63 68 65 6d 61 20 69   to get schema i
63c0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 6c 79 2c  nformation only,
63d0: 20 74 68 65 6e 20 64 6f 6e 27 74 20 70 65 72 66   then don't perf
63e0: 6f 72 6d 20 61 6e 20 69 6e 69 74 69 61 6c 20 73  orm an initial s
63f0: 74 65 70 28 29 20 74 68 72 6f 75 67 68 20 74 68  tep() through th
6400: 65 20 72 65 73 75 6c 74 73 65 74 0a 20 20 20 20  e resultset.    
6410: 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e      if ((_comman
6420: 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d  dBehavior & Comm
6430: 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 63 68 65  andBehavior.Sche
6440: 6d 61 4f 6e 6c 79 29 20 3d 3d 20 30 20 7c 7c 20  maOnly) == 0 || 
6450: 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d 20 30 29  fieldCount == 0)
6460: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
6470: 20 20 20 20 20 69 66 20 28 73 74 6d 74 2e 5f 73       if (stmt._s
6480: 71 6c 2e 53 74 65 70 28 73 74 6d 74 29 29 0a 20  ql.Step(stmt)). 
6490: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
64a0: 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53         _readingS
64b0: 74 61 74 65 20 3d 20 2d 31 3b 0a 20 20 20 20 20  tate = -1;.     
64c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
64d0: 20 65 6c 73 65 20 69 66 20 28 66 69 65 6c 64 43   else if (fieldC
64e0: 6f 75 6e 74 20 3d 3d 20 30 29 20 2f 2f 20 4e 6f  ount == 0) // No
64f0: 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 2c 20   rows returned, 
6500: 69 66 20 66 69 65 6c 64 43 6f 75 6e 74 20 69 73  if fieldCount is
6510: 20 7a 65 72 6f 2c 20 73 6b 69 70 20 74 6f 20 74   zero, skip to t
6520: 68 65 20 6e 65 78 74 20 73 74 61 74 65 6d 65 6e  he next statemen
6530: 74 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  t.          {.  
6540: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f            stmt._
6550: 73 71 6c 2e 52 65 73 65 74 28 73 74 6d 74 29 3b  sql.Reset(stmt);
6560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
6570: 74 69 6e 75 65 3b 20 2f 2f 20 53 6b 69 70 20 74  tinue; // Skip t
6580: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20  his command and 
6590: 6d 6f 76 65 20 74 6f 20 74 68 65 20 6e 65 78 74  move to the next
65a0: 2c 20 69 74 20 77 61 73 20 6e 6f 74 20 61 20 72  , it was not a r
65b0: 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 72 65 73  ow-returning res
65c0: 75 6c 74 73 65 74 0a 20 20 20 20 20 20 20 20 20  ultset.         
65d0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73   }.          els
65e0: 65 20 2f 2f 20 4e 6f 20 72 6f 77 73 2c 20 66 69  e // No rows, fi
65f0: 65 6c 64 43 6f 75 6e 74 20 69 73 20 6e 6f 6e 2d  eldCount is non-
6600: 7a 65 72 6f 20 73 6f 20 73 74 6f 70 20 68 65 72  zero so stop her
6610: 65 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  e.          {.  
6620: 20 20 20 20 20 20 20 20 20 20 5f 72 65 61 64 69            _readi
6630: 6e 67 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f 20  ngState = 1; // 
6640: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65 74  This command ret
6650: 75 72 6e 65 64 20 63 6f 6c 75 6d 6e 73 20 62 75  urned columns bu
6660: 74 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 72 65  t no rows, so re
6670: 74 75 72 6e 20 74 72 75 65 2c 20 62 75 74 20 48  turn true, but H
6680: 61 73 52 6f 77 73 20 3d 20 66 61 6c 73 65 20 61  asRows = false a
6690: 6e 64 20 52 65 61 64 28 29 20 72 65 74 75 72 6e  nd Read() return
66a0: 73 20 66 61 6c 73 65 0a 20 20 20 20 20 20 20 20  s false.        
66b0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20    }.        }.. 
66c0: 20 20 20 20 20 20 20 2f 2f 20 41 68 68 2c 20 77         // Ahh, w
66d0: 65 20 66 6f 75 6e 64 20 61 20 72 6f 77 2d 72 65  e found a row-re
66e0: 74 75 72 6e 69 6e 67 20 72 65 73 75 6c 74 73 65  turning resultse
66f0: 74 20 65 6c 69 67 69 62 6c 65 20 74 6f 20 62 65  t eligible to be
6700: 20 72 65 74 75 72 6e 65 64 21 0a 20 20 20 20 20   returned!.     
6710: 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d     _activeStatem
6720: 65 6e 74 20 3d 20 73 74 6d 74 3b 0a 20 20 20 20  ent = stmt;.    
6730: 20 20 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74 20      _fieldCount 
6740: 3d 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0a 20 20  = fieldCount;.  
6750: 20 20 20 20 20 20 5f 66 69 65 6c 64 54 79 70 65        _fieldType
6760: 41 72 72 61 79 20 3d 20 6e 75 6c 6c 3b 0a 0a 20  Array = null;.. 
6770: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
6780: 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ue;.      }.    
6790: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
67a0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ary>.    /// Ret
67b0: 72 69 65 76 65 73 20 74 68 65 20 53 51 4c 69 74  rieves the SQLit
67c0: 65 54 79 70 65 20 66 6f 72 20 61 20 67 69 76 65  eType for a give
67d0: 6e 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 63 61  n column, and ca
67e0: 63 68 65 73 20 69 74 20 74 6f 20 61 76 6f 69 64  ches it to avoid
67f0: 20 72 65 70 65 74 65 74 69 76 65 20 69 6e 74 65   repetetive inte
6800: 72 6f 70 20 63 61 6c 6c 73 2e 0a 20 20 20 20 2f  rop calls..    /
6810: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
6820: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
6830: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
6840: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
6850: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
6860: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
6870: 6e 73 3e 41 20 53 51 4c 69 74 65 54 79 70 65 20  ns>A SQLiteType 
6880: 73 74 72 75 63 74 75 72 65 3c 2f 72 65 74 75 72  structure</retur
6890: 6e 73 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20  ns>.    private 
68a0: 53 51 4c 69 74 65 54 79 70 65 20 47 65 74 53 51  SQLiteType GetSQ
68b0: 4c 69 74 65 54 79 70 65 28 69 6e 74 20 69 29 0a  LiteType(int i).
68c0: 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63      {.      Chec
68d0: 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20 20  kClosed();.     
68e0: 20 69 66 20 28 5f 66 69 65 6c 64 54 79 70 65 41   if (_fieldTypeA
68f0: 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 20 5f 66  rray == null) _f
6900: 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d 20  ieldTypeArray = 
6910: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 5b 5f  new SQLiteType[_
6920: 66 69 65 6c 64 43 6f 75 6e 74 5d 3b 0a 0a 20 20  fieldCount];..  
6930: 20 20 20 20 69 66 20 28 5f 66 69 65 6c 64 54 79      if (_fieldTy
6940: 70 65 41 72 72 61 79 5b 69 5d 2e 41 66 66 69 6e  peArray[i].Affin
6950: 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ity == TypeAffin
6960: 69 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65  ity.Uninitialize
6970: 64 20 7c 7c 20 5f 66 69 65 6c 64 54 79 70 65 41  d || _fieldTypeA
6980: 72 72 61 79 5b 69 5d 2e 41 66 66 69 6e 69 74 79  rray[i].Affinity
6990: 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
69a0: 2e 4e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 5f  .Null).        _
69b0: 66 69 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69  fieldTypeArray[i
69c0: 5d 2e 54 79 70 65 20 3d 20 53 51 4c 69 74 65 43  ].Type = SQLiteC
69d0: 6f 6e 76 65 72 74 2e 54 79 70 65 4e 61 6d 65 54  onvert.TypeNameT
69e0: 6f 44 62 54 79 70 65 28 5f 61 63 74 69 76 65 53  oDbType(_activeS
69f0: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f  tatement._sql.Co
6a00: 6c 75 6d 6e 54 79 70 65 28 5f 61 63 74 69 76 65  lumnType(_active
6a10: 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 6f 75  Statement, i, ou
6a20: 74 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61  t _fieldTypeArra
6a30: 79 5b 69 5d 2e 41 66 66 69 6e 69 74 79 29 29 3b  y[i].Affinity));
6a40: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66  .      return _f
6a50: 69 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d  ieldTypeArray[i]
6a60: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
6a70: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
6a80: 2f 2f 20 52 65 61 64 73 20 74 68 65 20 6e 65 78  // Reads the nex
6a90: 74 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 72  t row from the r
6aa0: 65 73 75 6c 74 73 65 74 0a 20 20 20 20 2f 2f 2f  esultset.    ///
6ab0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
6ac0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75  /// <returns>Tru
6ad0: 65 20 69 66 20 61 20 6e 65 77 20 72 6f 77 20 77  e if a new row w
6ae0: 61 73 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  as successfully 
6af0: 6c 6f 61 64 65 64 20 61 6e 64 20 69 73 20 72 65  loaded and is re
6b00: 61 64 79 20 66 6f 72 20 70 72 6f 63 65 73 73 69  ady for processi
6b10: 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  ng</returns>.   
6b20: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
6b30: 20 62 6f 6f 6c 20 52 65 61 64 28 29 0a 20 20 20   bool Read().   
6b40: 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c   {.      CheckCl
6b50: 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69  osed();..      i
6b60: 66 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65  f (_readingState
6b70: 20 3d 3d 20 2d 31 29 20 2f 2f 20 46 69 72 73 74   == -1) // First
6b80: 20 73 74 65 70 20 77 61 73 20 61 6c 72 65 61 64   step was alread
6b90: 79 20 64 6f 6e 65 20 61 74 20 74 68 65 20 4e 65  y done at the Ne
6ba0: 78 74 52 65 73 75 6c 74 28 29 20 6c 65 76 65 6c  xtResult() level
6bb0: 2c 20 73 6f 20 64 6f 6e 27 74 20 73 74 65 70 20  , so don't step 
6bc0: 61 67 61 69 6e 2c 20 6a 75 73 74 20 72 65 74 75  again, just retu
6bd0: 72 6e 20 74 72 75 65 2e 0a 20 20 20 20 20 20 7b  rn true..      {
6be0: 0a 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e  .        _readin
6bf0: 67 53 74 61 74 65 20 3d 20 30 3b 0a 20 20 20 20  gState = 0;.    
6c00: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
6c10: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 65  .      }.      e
6c20: 6c 73 65 20 69 66 20 28 5f 72 65 61 64 69 6e 67  lse if (_reading
6c30: 53 74 61 74 65 20 3d 3d 20 30 29 20 2f 2f 20 41  State == 0) // A
6c40: 63 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67 20  ctively reading 
6c50: 72 6f 77 73 0a 20 20 20 20 20 20 7b 0a 20 20 20  rows.      {.   
6c60: 20 20 20 20 20 69 66 20 28 5f 61 63 74 69 76 65       if (_active
6c70: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 53  Statement._sql.S
6c80: 74 65 70 28 5f 61 63 74 69 76 65 53 74 61 74 65  tep(_activeState
6c90: 6d 65 6e 74 29 20 3d 3d 20 74 72 75 65 29 0a 20  ment) == true). 
6ca0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6cb0: 74 72 75 65 3b 0a 0a 20 20 20 20 20 20 20 20 5f  true;..        _
6cc0: 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31  readingState = 1
6cd0: 3b 20 2f 2f 20 46 69 6e 69 73 68 65 64 20 72 65  ; // Finished re
6ce0: 61 64 69 6e 67 20 72 6f 77 73 0a 20 20 20 20 20  ading rows.     
6cf0: 20 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
6d00: 20 66 61 6c 73 65 3b 0a 20 20 20 20 7d 0a 0a 20   false;.    }.. 
6d10: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6d20: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
6d30: 65 20 74 68 65 20 63 6f 75 6e 74 20 6f 66 20 72  e the count of r
6d40: 65 63 6f 72 64 73 20 61 66 66 65 63 74 65 64 20  ecords affected 
6d50: 62 79 20 61 6e 20 75 70 64 61 74 65 2f 69 6e 73  by an update/ins
6d60: 65 72 74 20 63 6f 6d 6d 61 6e 64 2e 20 20 4f 6e  ert command.  On
6d70: 6c 79 20 76 61 6c 69 64 20 6f 6e 63 65 20 74 68  ly valid once th
6d80: 65 20 64 61 74 61 20 72 65 61 64 65 72 20 69 73  e data reader is
6d90: 20 63 6c 6f 73 65 64 21 0a 20 20 20 20 2f 2f 2f   closed!.    ///
6da0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
6db0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
6dc0: 69 6e 74 20 52 65 63 6f 72 64 73 41 66 66 65 63  int RecordsAffec
6dd0: 74 65 64 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ted.    {.      
6de0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 72 6f  get { return _ro
6df0: 77 73 41 66 66 65 63 74 65 64 3b 20 7d 0a 20 20  wsAffected; }.  
6e00: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
6e10: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 49  mmary>.    /// I
6e20: 6e 64 65 78 65 72 20 74 6f 20 72 65 74 72 69 65  ndexer to retrie
6e30: 76 65 20 64 61 74 61 20 66 72 6f 6d 20 61 20 63  ve data from a c
6e40: 6f 6c 75 6d 6e 20 67 69 76 65 6e 20 69 74 73 20  olumn given its 
6e50: 6e 61 6d 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  name.    /// </s
6e60: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
6e70: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d  <param name="nam
6e80: 65 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  e">The name of t
6e90: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
6ea0: 72 69 65 76 65 20 64 61 74 61 20 66 6f 72 3c 2f  rieve data for</
6eb0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
6ec0: 72 65 74 75 72 6e 73 3e 54 68 65 20 76 61 6c 75  returns>The valu
6ed0: 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
6ee0: 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72  he column</retur
6ef0: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
6f00: 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 74  verride object t
6f10: 68 69 73 5b 73 74 72 69 6e 67 20 6e 61 6d 65 5d  his[string name]
6f20: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74  .    {.      get
6f30: 20 7b 20 72 65 74 75 72 6e 20 47 65 74 56 61 6c   { return GetVal
6f40: 75 65 28 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61  ue(GetOrdinal(na
6f50: 6d 65 29 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20  me)); }.    }.. 
6f60: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6f70: 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72  .    /// Indexer
6f80: 20 74 6f 20 72 65 74 72 69 65 76 65 20 64 61 74   to retrieve dat
6f90: 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20  a from a column 
6fa0: 67 69 76 65 6e 20 69 74 73 20 69 0a 20 20 20 20  given its i.    
6fb0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
6fc0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
6fd0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
6fe0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
6ff0: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
7000: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
7010: 72 6e 73 3e 54 68 65 20 76 61 6c 75 65 20 63 6f  rns>The value co
7020: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63  ntained in the c
7030: 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0a  olumn</returns>.
7040: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
7050: 69 64 65 20 6f 62 6a 65 63 74 20 74 68 69 73 5b  ide object this[
7060: 69 6e 74 20 69 5d 0a 20 20 20 20 7b 0a 20 20 20  int i].    {.   
7070: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
7080: 47 65 74 56 61 6c 75 65 28 69 29 3b 20 7d 0a 20  GetValue(i); }. 
7090: 20 20 20 7d 0a 20 20 7d 0a 7d 0a                    }.  }.}.