System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 1cd924cb589b51217b1011398fd6964ca00106d7:


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 0a 20 20 2f 2f 2f 20 3c 73 75 6d  ion;..  /// <sum
01d0: 6d 61 72 79 3e 0a 20 20 2f 2f 2f 20 53 51 4c 69  mary>.  /// SQLi
01e0: 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  te implementatio
01f0: 6e 20 6f 66 20 44 62 44 61 74 61 52 65 61 64 65  n of DbDataReade
0200: 72 2e 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  r..  /// </summa
0210: 72 79 3e 0a 20 20 70 75 62 6c 69 63 20 73 65 61  ry>.  public sea
0220: 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65  led class SQLite
0230: 44 61 74 61 52 65 61 64 65 72 20 3a 20 44 62 44  DataReader : DbD
0240: 61 74 61 52 65 61 64 65 72 0a 20 20 7b 0a 20 20  ataReader.  {.  
0250: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
0260: 20 20 20 20 2f 2f 2f 20 55 6e 64 65 72 6c 79 69      /// Underlyi
0270: 6e 67 20 63 6f 6d 6d 61 6e 64 20 74 68 69 73 20  ng command this 
0280: 72 65 61 64 65 72 20 69 73 20 61 74 74 61 63 68  reader is attach
0290: 65 64 20 74 6f 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ed to.    /// </
02a0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69  summary>.    pri
02b0: 76 61 74 65 20 53 51 4c 69 74 65 43 6f 6d 6d 61  vate SQLiteComma
02c0: 6e 64 20 20 20 5f 63 6f 6d 6d 61 6e 64 3b 0a 20  nd   _command;. 
02d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
02e0: 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 20 6f  .    /// Index o
02f0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  f the current st
0300: 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 63  atement in the c
0310: 6f 6d 6d 61 6e 64 20 62 65 69 6e 67 20 70 72 6f  ommand being pro
0320: 63 65 73 73 65 64 0a 20 20 20 20 2f 2f 2f 20 3c  cessed.    /// <
0330: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72  /summary>.    pr
0340: 69 76 61 74 65 20 69 6e 74 20 20 20 20 20 20 20  ivate int       
0350: 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61        _activeSta
0360: 74 65 6d 65 6e 74 49 6e 64 65 78 3b 0a 20 20 20  tementIndex;.   
0370: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
0380: 20 20 20 2f 2f 2f 20 43 75 72 72 65 6e 74 20 73     /// Current s
0390: 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 52  tatement being R
03a0: 65 61 64 28 29 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ead().    /// </
03b0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69  summary>.    pri
03c0: 76 61 74 65 20 53 51 4c 69 74 65 53 74 61 74 65  vate SQLiteState
03d0: 6d 65 6e 74 20 5f 61 63 74 69 76 65 53 74 61 74  ment _activeStat
03e0: 65 6d 65 6e 74 3b 0a 20 20 20 20 2f 2f 2f 20 3c  ement;.    /// <
03f0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
0400: 20 53 74 61 74 65 20 6f 66 20 74 68 65 20 63 75   State of the cu
0410: 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20  rrent statement 
0420: 62 65 69 6e 67 20 70 72 6f 63 65 73 73 65 64 2e  being processed.
0430: 0a 20 20 20 20 2f 2f 2f 20 2d 31 20 3d 20 46 69  .    /// -1 = Fi
0440: 72 73 74 20 53 74 65 70 28 29 20 65 78 65 63 75  rst Step() execu
0450: 74 65 64 2c 20 73 6f 20 74 68 65 20 66 69 72 73  ted, so the firs
0460: 74 20 52 65 61 64 28 29 20 77 69 6c 6c 20 62 65  t Read() will be
0470: 20 69 67 6e 6f 72 65 64 0a 20 20 20 20 2f 2f 2f   ignored.    ///
0480: 20 20 30 20 3d 20 41 63 74 69 76 65 6c 79 20 72    0 = Actively r
0490: 65 61 64 69 6e 67 0a 20 20 20 20 2f 2f 2f 20 20  eading.    ///  
04a0: 31 20 3d 20 46 69 6e 69 73 68 65 64 20 72 65 61  1 = Finished rea
04b0: 64 69 6e 67 0a 20 20 20 20 2f 2f 2f 20 20 32 20  ding.    ///  2 
04c0: 3d 20 4e 6f 6e 2d 72 6f 77 2d 72 65 74 75 72 6e  = Non-row-return
04d0: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 2c 20 6e  ing statement, n
04e0: 6f 20 72 65 63 6f 72 64 73 0a 20 20 20 20 2f 2f  o records.    //
04f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
0500: 20 70 72 69 76 61 74 65 20 69 6e 74 20 20 20 20   private int    
0510: 20 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e           _readin
0520: 67 53 74 61 74 65 3b 0a 20 20 20 20 2f 2f 2f 20  gState;.    /// 
0530: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
0540: 2f 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 63 6f  / Number of reco
0550: 72 64 73 20 61 66 66 65 63 74 65 64 20 62 79 20  rds affected by 
0560: 74 68 65 20 69 6e 73 65 72 74 2f 75 70 64 61 74  the insert/updat
0570: 65 20 73 74 61 74 65 6d 65 6e 74 73 20 65 78 65  e statements exe
0580: 63 75 74 65 64 20 6f 6e 20 74 68 65 20 63 6f 6d  cuted on the com
0590: 6d 61 6e 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  mand.    /// </s
05a0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76  ummary>.    priv
05b0: 61 74 65 20 69 6e 74 20 20 20 20 20 20 20 20 20  ate int         
05c0: 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63 74 65      _rowsAffecte
05d0: 64 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  d;.    /// <summ
05e0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6f 75  ary>.    /// Cou
05f0: 6e 74 20 6f 66 20 66 69 65 6c 64 73 20 28 63 6f  nt of fields (co
0600: 6c 75 6d 6e 73 29 20 69 6e 20 74 68 65 20 72 6f  lumns) in the ro
0610: 77 2d 72 65 74 75 72 6e 69 6e 67 20 73 74 61 74  w-returning stat
0620: 65 6d 65 6e 74 20 63 75 72 72 65 6e 74 6c 79 20  ement currently 
0630: 62 65 69 6e 67 20 70 72 6f 63 65 73 73 65 64 0a  being processed.
0640: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0650: 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 69  y>.    private i
0660: 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  nt             _
0670: 66 69 65 6c 64 43 6f 75 6e 74 3b 0a 20 20 20 20  fieldCount;.    
0680: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
0690: 20 20 2f 2f 2f 20 44 61 74 61 74 79 70 65 73 20    /// Datatypes 
06a0: 6f 66 20 61 63 74 69 76 65 20 66 69 65 6c 64 73  of active fields
06b0: 20 28 63 6f 6c 75 6d 6e 73 29 20 69 6e 20 74 68   (columns) in th
06c0: 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
06d0: 65 6e 74 2c 20 75 73 65 64 20 66 6f 72 20 74 79  ent, used for ty
06e0: 70 65 2d 72 65 73 74 72 69 63 74 69 6e 67 20 64  pe-restricting d
06f0: 61 74 61 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ata.    /// </su
0700: 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61  mmary>.    priva
0710: 74 65 20 53 51 4c 69 74 65 54 79 70 65 5b 5d 20  te SQLiteType[] 
0720: 20 20 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72     _fieldTypeArr
0730: 61 79 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ay;..    /// <su
0740: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 54  mmary>.    /// T
0750: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
0760: 68 65 20 64 61 74 61 72 65 61 64 65 72 0a 20 20  he datareader.  
0770: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0780: 0a 20 20 20 20 70 72 69 76 61 74 65 20 43 6f 6d  .    private Com
0790: 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 5f 63 6f  mandBehavior _co
07a0: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 3b 0a 0a  mmandBehavior;..
07b0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
07c0: 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 74 65 72 6e  >.    /// Intern
07d0: 61 6c 20 63 6f 6e 73 74 72 75 63 74 6f 72 2c 20  al constructor, 
07e0: 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20  initializes the 
07f0: 64 61 74 61 72 65 61 64 65 72 20 61 6e 64 20 73  datareader and s
0800: 65 74 73 20 75 70 20 74 6f 20 62 65 67 69 6e 20  ets up to begin 
0810: 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d  executing statem
0820: 65 6e 74 73 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ents.    /// </s
0830: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0840: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6d 64  <param name="cmd
0850: 22 3e 54 68 65 20 53 51 4c 69 74 65 43 6f 6d 6d  ">The SQLiteComm
0860: 61 6e 64 20 74 68 69 73 20 64 61 74 61 20 72 65  and this data re
0870: 61 64 65 72 20 69 73 20 66 6f 72 3c 2f 70 61 72  ader is for</par
0880: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  am>.    /// <par
0890: 61 6d 20 6e 61 6d 65 3d 22 62 65 68 61 76 65 22  am name="behave"
08a0: 3e 54 68 65 20 65 78 70 65 63 74 65 64 20 62 65  >The expected be
08b0: 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 64 61  havior of the da
08c0: 74 61 20 72 65 61 64 65 72 3c 2f 70 61 72 61 6d  ta reader</param
08d0: 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53  >.    internal S
08e0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 28  QLiteDataReader(
08f0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6d  SQLiteCommand cm
0900: 64 2c 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69  d, CommandBehavi
0910: 6f 72 20 62 65 68 61 76 65 29 0a 20 20 20 20 7b  or behave).    {
0920: 0a 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20  .      _command 
0930: 3d 20 63 6d 64 3b 0a 20 20 20 20 20 20 5f 63 6f  = cmd;.      _co
0940: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 3d 20  mmandBehavior = 
0950: 62 65 68 61 76 65 3b 0a 20 20 20 20 20 20 49 6e  behave;.      In
0960: 69 74 69 61 6c 69 7a 65 28 29 3b 0a 0a 20 20 20  itialize();..   
0970: 20 20 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64 20     if (_command 
0980: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  != null).       
0990: 20 4e 65 78 74 52 65 73 75 6c 74 28 29 3b 0a 20   NextResult();. 
09a0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
09b0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
09c0: 49 6e 69 74 69 61 6c 69 7a 65 73 20 61 6e 64 20  Initializes and 
09d0: 72 65 73 65 74 73 20 74 68 65 20 64 61 74 61 72  resets the datar
09e0: 65 61 64 65 72 27 73 20 6d 65 6d 62 65 72 20 76  eader's member v
09f0: 61 72 69 61 62 6c 65 73 0a 20 20 20 20 2f 2f 2f  ariables.    ///
0a00: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
0a10: 69 6e 74 65 72 6e 61 6c 20 76 6f 69 64 20 49 6e  internal void In
0a20: 69 74 69 61 6c 69 7a 65 28 29 0a 20 20 20 20 7b  itialize().    {
0a30: 0a 20 20 20 20 20 20 5f 61 63 74 69 76 65 53 74  .      _activeSt
0a40: 61 74 65 6d 65 6e 74 49 6e 64 65 78 20 3d 20 2d  atementIndex = -
0a50: 31 3b 0a 20 20 20 20 20 20 5f 61 63 74 69 76 65  1;.      _active
0a60: 53 74 61 74 65 6d 65 6e 74 20 3d 20 6e 75 6c 6c  Statement = null
0a70: 3b 0a 20 20 20 20 20 20 5f 72 6f 77 73 41 66 66  ;.      _rowsAff
0a80: 65 63 74 65 64 20 3d 20 2d 31 3b 0a 20 20 20 20  ected = -1;.    
0a90: 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20    _fieldCount = 
0aa0: 2d 31 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  -1;.    }..    /
0ab0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
0ac0: 20 2f 2f 2f 20 43 6c 6f 73 65 73 20 74 68 65 20   /// Closes the 
0ad0: 64 61 74 61 72 65 61 64 65 72 2c 20 70 6f 74 65  datareader, pote
0ae0: 6e 74 69 61 6c 6c 79 20 63 6c 6f 73 69 6e 67 20  ntially closing 
0af0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  the connection a
0b00: 73 20 77 65 6c 6c 20 69 66 20 43 6f 6d 6d 61 6e  s well if Comman
0b10: 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43  dBehavior.CloseC
0b20: 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 73 70  onnection was sp
0b30: 65 63 69 66 69 65 64 2e 0a 20 20 20 20 2f 2f 2f  ecified..    ///
0b40: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
0b50: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
0b60: 76 6f 69 64 20 43 6c 6f 73 65 28 29 0a 20 20 20  void Close().   
0b70: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 5f 63 6f   {.      if (_co
0b80: 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0a 20  mmand != null). 
0b90: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 77       {.        w
0ba0: 68 69 6c 65 20 28 4e 65 78 74 52 65 73 75 6c 74  hile (NextResult
0bb0: 28 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  ()).        {.  
0bc0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
0bd0: 5f 63 6f 6d 6d 61 6e 64 2e 43 6c 65 61 72 44 61  _command.ClearDa
0be0: 74 61 52 65 61 64 65 72 28 29 3b 0a 20 20 20 20  taReader();.    
0bf0: 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2f 20 49 66    }..      // If
0c00: 20 74 68 65 20 64 61 74 61 72 65 61 64 65 72 27   the datareader'
0c10: 73 20 62 65 68 61 76 69 6f 72 20 69 6e 63 6c 75  s behavior inclu
0c20: 64 65 73 20 63 6c 6f 73 69 6e 67 20 74 68 65 20  des closing the 
0c30: 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e  connection, then
0c40: 20 64 6f 20 73 6f 20 68 65 72 65 2e 0a 20 20 20   do so here..   
0c50: 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64     if ((_command
0c60: 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61  Behavior & Comma
0c70: 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65  ndBehavior.Close
0c80: 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 21 3d 20 30  Connection) != 0
0c90: 29 0a 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61  ).        _comma
0ca0: 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c  nd.Connection.Cl
0cb0: 6f 73 65 28 29 3b 0a 0a 20 20 20 20 20 20 5f 63  ose();..      _c
0cc0: 6f 6d 6d 61 6e 64 20 3d 20 6e 75 6c 6c 3b 0a 20  ommand = null;. 
0cd0: 20 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74       _activeStat
0ce0: 65 6d 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0a 20 20  ement = null;.  
0cf0: 20 20 20 20 5f 66 69 65 6c 64 54 79 70 65 41 72      _fieldTypeAr
0d00: 72 61 79 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20  ray = null;.    
0d10: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
0d20: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 44 69 73  ary>.    /// Dis
0d30: 70 6f 73 65 73 20 74 68 65 20 64 61 74 61 72 65  poses the datare
0d40: 61 64 65 72 2e 20 20 43 61 6c 6c 73 20 43 6c 6f  ader.  Calls Clo
0d50: 73 65 28 29 20 74 6f 20 65 6e 73 75 72 65 20 65  se() to ensure e
0d60: 76 65 72 79 74 68 69 6e 67 20 69 73 20 63 6c 65  verything is cle
0d70: 61 6e 65 64 20 75 70 2e 0a 20 20 20 20 2f 2f 2f  aned up..    ///
0d80: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
0d90: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
0da0: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0a 20  void Dispose(). 
0db0: 20 20 20 7b 0a 20 20 20 20 20 20 43 6c 6f 73 65     {.      Close
0dc0: 28 29 3b 0a 20 20 20 20 20 20 47 43 2e 53 75 70  ();.      GC.Sup
0dd0: 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68  pressFinalize(th
0de0: 69 73 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  is);.    }..    
0df0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
0e00: 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e 20 65    /// Throw an e
0e10: 72 72 6f 72 20 69 66 20 74 68 65 20 64 61 74 61  rror if the data
0e20: 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65 64  reader is closed
0e30: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0e40: 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20  ry>.    private 
0e50: 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73 65 64  void CheckClosed
0e60: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69  ().    {.      i
0e70: 66 20 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d 20 6e  f (_command == n
0e80: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 74 68 72  ull).        thr
0e90: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
0ea0: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
0eb0: 28 22 44 61 74 61 52 65 61 64 65 72 20 68 61 73  ("DataReader has
0ec0: 20 62 65 65 6e 20 63 6c 6f 73 65 64 22 29 3b 0a   been closed");.
0ed0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
0ee0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
0ef0: 20 45 6e 75 6d 65 72 61 74 6f 72 20 73 75 70 70   Enumerator supp
0f00: 6f 72 74 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ort.    /// </su
0f10: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
0f20: 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
0f30: 61 20 44 62 45 6e 75 6d 65 72 61 74 6f 72 20 6f  a DbEnumerator o
0f40: 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e  bject.</returns>
0f50: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
0f60: 72 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 73  ride Collections
0f70: 2e 49 45 6e 75 6d 65 72 61 74 6f 72 20 47 65 74  .IEnumerator Get
0f80: 45 6e 75 6d 65 72 61 74 6f 72 28 29 0a 20 20 20  Enumerator().   
0f90: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
0fa0: 6e 65 77 20 44 62 45 6e 75 6d 65 72 61 74 6f 72  new DbEnumerator
0fb0: 28 74 68 69 73 29 3b 0a 20 20 20 20 7d 0a 0a 20  (this);.    }.. 
0fc0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0fd0: 0a 20 20 20 20 2f 2f 2f 20 4e 6f 74 20 69 6d 70  .    /// Not imp
0fe0: 6c 65 6d 65 6e 74 65 64 2e 20 20 52 65 74 75 72  lemented.  Retur
0ff0: 6e 73 20 30 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ns 0.    /// </s
1000: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75 62 6c  ummary>.    publ
1010: 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  ic override int 
1020: 44 65 70 74 68 0a 20 20 20 20 7b 0a 20 20 20 20  Depth.    {.    
1030: 20 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20    get.      {.  
1040: 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65        CheckClose
1050: 64 28 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74  d();.        ret
1060: 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  urn 0;.      }. 
1070: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
1080: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
1090: 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  Returns the numb
10a0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10b0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 73   the current res
10c0: 75 6c 74 73 65 74 0a 20 20 20 20 2f 2f 2f 20 3c  ultset.    /// <
10d0: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75  /summary>.    pu
10e0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e  blic override in
10f0: 74 20 46 69 65 6c 64 43 6f 75 6e 74 0a 20 20 20  t FieldCount.   
1100: 20 7b 0a 20 20 20 20 20 20 67 65 74 0a 20 20 20   {.      get.   
1110: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 43 68 65     {.        Che
1120: 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20  ckClosed();.    
1130: 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69 65 6c      return _fiel
1140: 64 43 6f 75 6e 74 3b 0a 20 20 20 20 20 20 7d 0a  dCount;.      }.
1150: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
1160: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
1170: 20 53 51 4c 69 74 65 20 69 73 20 69 6e 68 65 72   SQLite is inher
1180: 65 6e 74 6c 79 20 75 6e 2d 74 79 70 65 64 2e 20  ently un-typed. 
1190: 20 41 6c 6c 20 64 61 74 61 74 79 70 65 73 20 69   All datatypes i
11a0: 6e 20 53 51 4c 69 74 65 20 61 72 65 20 6e 61 74  n SQLite are nat
11b0: 69 76 65 6c 79 20 73 74 72 69 6e 67 73 2e 20 20  ively strings.  
11c0: 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  The definition o
11d0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  f the columns of
11e0: 20 61 20 74 61 62 6c 65 0a 20 20 20 20 2f 2f 2f   a table.    ///
11f0: 20 61 6e 64 20 74 68 65 20 61 66 66 69 6e 69 74   and the affinit
1200: 79 20 6f 66 20 72 65 74 75 72 6e 65 64 20 74 79  y of returned ty
1210: 70 65 73 20 61 72 65 20 61 6c 6c 20 77 65 20 68  pes are all we h
1220: 61 76 65 20 74 6f 20 67 6f 20 6f 6e 20 74 6f 20  ave to go on to 
1230: 74 79 70 65 2d 72 65 73 74 72 69 63 74 20 64 61  type-restrict da
1240: 74 61 20 69 6e 20 74 68 65 20 72 65 61 64 65 72  ta in the reader
1250: 2e 0a 20 20 20 20 2f 2f 2f 20 0a 20 20 20 20 2f  ..    /// .    /
1260: 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  // This function
1270: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 76 65 72   attempts to ver
1280: 69 66 79 20 74 68 61 74 20 74 68 65 20 74 79 70  ify that the typ
1290: 65 20 6f 66 20 64 61 74 61 20 62 65 69 6e 67 20  e of data being 
12a0: 72 65 71 75 65 73 74 65 64 20 6f 66 20 61 20 63  requested of a c
12b0: 6f 6c 75 6d 6e 20 6d 61 74 63 68 65 73 20 74 68  olumn matches th
12c0: 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68  e datatype of th
12d0: 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 6e 0a 20 20  e column.  In.  
12e0: 20 20 2f 2f 2f 20 74 68 65 20 63 61 73 65 20 6f    /// the case o
12f0: 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61  f columns that a
1300: 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 69 6e  re not backed in
1310: 74 6f 20 61 20 74 61 62 6c 65 20 64 65 66 69 6e  to a table defin
1320: 69 74 69 6f 6e 2c 20 77 65 20 61 74 74 65 6d 70  ition, we attemp
1330: 74 20 74 6f 20 6d 61 74 63 68 20 75 70 20 74 68  t to match up th
1340: 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 61 20  e affinity of a 
1350: 63 6f 6c 75 6d 6e 20 28 69 6e 74 2c 20 64 6f 75  column (int, dou
1360: 62 6c 65 2c 20 73 74 72 69 6e 67 20 6f 72 20 62  ble, string or b
1370: 6c 6f 62 29 0a 20 20 20 20 2f 2f 2f 20 74 6f 20  lob).    /// to 
1380: 61 20 73 65 74 20 6f 66 20 6b 6e 6f 77 6e 20 74  a set of known t
1390: 79 70 65 73 20 74 68 61 74 20 63 6c 6f 73 65 6c  ypes that closel
13a0: 79 20 6d 61 74 63 68 20 74 68 61 74 20 61 66 66  y match that aff
13b0: 69 6e 69 74 79 2e 20 20 49 74 27 73 20 6e 6f 74  inity.  It's not
13c0: 20 61 6e 20 65 78 61 63 74 20 73 63 69 65 6e 63   an exact scienc
13d0: 65 2c 20 62 75 74 20 69 74 73 20 74 68 65 20 62  e, but its the b
13e0: 65 73 74 20 77 65 20 63 61 6e 20 64 6f 2e 0a 20  est we can do.. 
13f0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1400: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
1410: 6e 73 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  ns>.    /// This
1420: 20 66 75 6e 63 74 69 6f 6e 20 74 68 72 6f 77 73   function throws
1430: 20 61 6e 20 49 6e 76 61 6c 69 64 54 79 70 65 43   an InvalidTypeC
1440: 61 73 74 28 29 20 65 78 63 65 70 74 69 6f 6e 20  ast() exception 
1450: 69 66 20 74 68 65 20 72 65 71 75 65 73 74 65 64  if the requested
1460: 20 74 79 70 65 20 64 6f 65 73 6e 27 74 20 6d 61   type doesn't ma
1470: 74 63 68 20 74 68 65 20 63 6f 6c 75 6d 6e 27 73  tch the column's
1480: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 20 61   definition or a
1490: 66 66 69 6e 69 74 79 2e 0a 20 20 20 20 2f 2f 2f  ffinity..    ///
14a0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20   </returns>.    
14b0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
14c0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
14d0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 74   the column to t
14e0: 79 70 65 2d 63 68 65 63 6b 3c 2f 70 61 72 61 6d  ype-check</param
14f0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
1500: 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20   name="typ">The 
1510: 74 79 70 65 20 77 65 20 77 61 6e 74 20 74 6f 20  type we want to 
1520: 67 65 74 20 6f 75 74 20 6f 66 20 74 68 65 20 63  get out of the c
1530: 6f 6c 75 6d 6e 3c 2f 70 61 72 61 6d 3e 0a 20 20  olumn</param>.  
1540: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 56    private void V
1550: 65 72 69 66 79 54 79 70 65 28 69 6e 74 20 69 2c  erifyType(int i,
1560: 20 44 62 54 79 70 65 20 74 79 70 29 0a 20 20 20   DbType typ).   
1570: 20 7b 0a 20 20 20 20 20 20 53 51 4c 69 74 65 54   {.      SQLiteT
1580: 79 70 65 20 74 20 3d 20 47 65 74 53 51 4c 69 74  ype t = GetSQLit
1590: 65 54 79 70 65 28 69 29 3b 0a 0a 20 20 20 20 20  eType(i);..     
15a0: 20 69 66 20 28 74 2e 54 79 70 65 20 3d 3d 20 74   if (t.Type == t
15b0: 79 70 29 20 72 65 74 75 72 6e 3b 0a 0a 20 20 20  yp) return;..   
15c0: 20 20 20 69 66 20 28 74 2e 54 79 70 65 20 21 3d     if (t.Type !=
15d0: 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0a   DbType.Object).
15e0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
15f0: 2f 2f 20 43 6f 65 72 63 61 62 6c 65 20 74 79 70  // Coercable typ
1600: 65 2c 20 75 73 75 61 6c 6c 79 20 61 20 6c 69 74  e, usually a lit
1610: 65 72 61 6c 20 6f 66 20 73 6f 6d 65 20 6b 69 6e  eral of some kin
1620: 64 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68  d.        switch
1630: 20 28 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61   (_fieldTypeArra
1640: 79 5b 69 5d 2e 41 66 66 69 6e 69 74 79 29 0a 20  y[i].Affinity). 
1650: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
1660: 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
1670: 6e 69 74 79 2e 49 6e 74 36 34 3a 0a 20 20 20 20  nity.Int64:.    
1680: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
1690: 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74 31 36 29  == DbType.Int16)
16a0: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
16b0: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
16c0: 44 62 54 79 70 65 2e 49 6e 74 33 32 29 20 72 65  DbType.Int32) re
16d0: 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20  turn;.          
16e0: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
16f0: 79 70 65 2e 49 6e 74 36 34 29 20 72 65 74 75 72  ype.Int64) retur
1700: 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  n;.            i
1710: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
1720: 2e 42 6f 6f 6c 65 61 6e 29 20 72 65 74 75 72 6e  .Boolean) return
1730: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
1740: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
1750: 42 79 74 65 29 20 72 65 74 75 72 6e 3b 0a 20 20  Byte) return;.  
1760: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1770: 0a 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20  .          case 
1780: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
1790: 62 6c 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ble:.           
17a0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
17b0: 70 65 2e 53 69 6e 67 6c 65 29 20 72 65 74 75 72  pe.Single) retur
17c0: 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  n;.            i
17d0: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
17e0: 2e 44 6f 75 62 6c 65 29 20 72 65 74 75 72 6e 3b  .Double) return;
17f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1800: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44  (typ == DbType.D
1810: 65 63 69 6d 61 6c 29 20 72 65 74 75 72 6e 3b 0a  ecimal) return;.
1820: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1830: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 63 61 73  k;.          cas
1840: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54  e TypeAffinity.T
1850: 65 78 74 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ext:.           
1860: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
1870: 70 65 2e 53 42 79 74 65 29 20 72 65 74 75 72 6e  pe.SByte) return
1880: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
1890: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
18a0: 53 74 72 69 6e 67 29 20 72 65 74 75 72 6e 3b 0a  String) return;.
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18c0: 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 42  typ == DbType.SB
18d0: 79 74 65 29 20 72 65 74 75 72 6e 3b 0a 20 20 20  yte) return;.   
18e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
18f0: 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29   == DbType.Guid)
1900: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
1910: 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20       if (typ == 
1920: 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29  DbType.DateTime)
1930: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
1940: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1950: 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
1960: 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0a 20 20  ffinity.Blob:.  
1970: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
1980: 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 74 72 69  p == DbType.Stri
1990: 6e 67 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  ng) return;.    
19a0: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
19b0: 3d 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79  == DbType.Binary
19c0: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  ) return;.      
19d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
19e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
19f0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1a00: 49 6e 76 61 6c 69 64 43 61 73 74 45 78 63 65 70  InvalidCastExcep
1a10: 74 69 6f 6e 28 29 3b 0a 20 20 20 20 7d 0a 0a 20  tion();.    }.. 
1a20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1a30: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
1a40: 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73  es the column as
1a50: 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
1a60: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1a70: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
1a80: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
1a90: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
1aa0: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
1ab0: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
1ac0: 3c 72 65 74 75 72 6e 73 3e 62 6f 6f 6c 3c 2f 72  <returns>bool</r
1ad0: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
1ae0: 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
1af0: 20 47 65 74 42 6f 6f 6c 65 61 6e 28 69 6e 74 20   GetBoolean(int 
1b00: 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 56  i).    {.      V
1b10: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
1b20: 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 3b 0a 20 20  ype.Boolean);.  
1b30: 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65      return Conve
1b40: 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28 47 65 74  rt.ToBoolean(Get
1b50: 56 61 6c 75 65 28 69 29 2c 20 43 75 6c 74 75 72  Value(i), Cultur
1b60: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
1b70: 74 75 72 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ture);.    }..  
1b80: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
1b90: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
1ba0: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
1bb0: 61 20 73 69 6e 67 6c 65 20 62 79 74 65 20 76 61  a single byte va
1bc0: 6c 75 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  lue.    /// </su
1bd0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
1be0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
1bf0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
1c00: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
1c10: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
1c20: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62 79 74 65  // <returns>byte
1c30: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
1c40: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62  ublic override b
1c50: 79 74 65 20 47 65 74 42 79 74 65 28 69 6e 74 20  yte GetByte(int 
1c60: 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 56  i).    {.      V
1c70: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
1c80: 79 70 65 2e 42 79 74 65 29 3b 0a 20 20 20 20 20  ype.Byte);.     
1c90: 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
1ca0: 54 6f 42 79 74 65 28 5f 61 63 74 69 76 65 53 74  ToByte(_activeSt
1cb0: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
1cc0: 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74 61  Int32(_activeSta
1cd0: 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20 20  tement, i));.   
1ce0: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
1cf0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65  mary>.    /// Re
1d00: 74 72 69 65 76 65 73 20 61 20 63 6f 6c 75 6d 6e  trieves a column
1d10: 20 61 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20   as an array of 
1d20: 62 79 74 65 73 20 28 62 6c 6f 62 29 0a 20 20 20  bytes (blob).   
1d30: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
1d40: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1d50: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
1d60: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  x of the column 
1d70: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
1d80: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  am>.    /// <par
1d90: 61 6d 20 6e 61 6d 65 3d 22 66 69 65 6c 64 4f 66  am name="fieldOf
1da0: 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62  fset">The zero-b
1db0: 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68  ased index of wh
1dc0: 65 72 65 20 74 6f 20 62 65 67 69 6e 20 72 65 61  ere to begin rea
1dd0: 64 69 6e 67 20 74 68 65 20 64 61 74 61 3c 2f 70  ding the data</p
1de0: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  aram>.    /// <p
1df0: 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65  aram name="buffe
1e00: 72 22 3e 54 68 65 20 62 75 66 66 65 72 20 74 6f  r">The buffer to
1e10: 20 77 72 69 74 65 20 74 68 65 20 62 79 74 65 73   write the bytes
1e20: 20 69 6e 74 6f 3c 2f 70 61 72 61 6d 3e 0a 20 20   into</param>.  
1e30: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1e40: 65 3d 22 62 75 66 66 65 72 6f 66 66 73 65 74 22  e="bufferoffset"
1e50: 3e 54 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20  >The zero-based 
1e60: 69 6e 64 65 78 20 6f 66 20 77 68 65 72 65 20 74  index of where t
1e70: 6f 20 62 65 67 69 6e 20 77 72 69 74 69 6e 67 20  o begin writing 
1e80: 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c 2f  into the array</
1e90: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
1ea0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67  param name="leng
1eb0: 74 68 22 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f  th">The number o
1ec0: 66 20 62 79 74 65 73 20 74 6f 20 72 65 74 72 69  f bytes to retri
1ed0: 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  eve</param>.    
1ee0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
1ef0: 20 61 63 74 75 61 6c 20 6e 75 6d 62 65 72 20 6f   actual number o
1f00: 66 20 62 79 74 65 73 20 77 72 69 74 74 65 6e 20  f bytes written 
1f10: 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c 2f  into the array</
1f20: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 2f 2f 2f  returns>.    ///
1f30: 20 3c 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20 2f   <remarks>.    /
1f40: 2f 2f 20 54 6f 20 64 65 74 65 72 6d 69 6e 65 20  // To determine 
1f50: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
1f60: 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  tes in the colum
1f70: 6e 2c 20 70 61 73 73 20 61 20 6e 75 6c 6c 20 76  n, pass a null v
1f80: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62 75 66  alue for the buf
1f90: 66 65 72 2e 20 20 54 68 65 20 74 6f 74 61 6c 20  fer.  The total 
1fa0: 6c 65 6e 67 74 68 20 77 69 6c 6c 20 62 65 20 72  length will be r
1fb0: 65 74 75 72 6e 65 64 2e 0a 20 20 20 20 2f 2f 2f  eturned..    ///
1fc0: 20 3c 2f 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20   </remarks>.    
1fd0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
1fe0: 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28 69 6e  long GetBytes(in
1ff0: 74 20 69 2c 20 6c 6f 6e 67 20 66 69 65 6c 64 4f  t i, long fieldO
2000: 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 75  ffset, byte[] bu
2010: 66 66 65 72 2c 20 69 6e 74 20 62 75 66 66 65 72  ffer, int buffer
2020: 6f 66 66 73 65 74 2c 20 69 6e 74 20 6c 65 6e 67  offset, int leng
2030: 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  th).    {.      
2040: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
2050: 54 79 70 65 2e 42 69 6e 61 72 79 29 3b 0a 20 20  Type.Binary);.  
2060: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69      return _acti
2070: 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c  veStatement._sql
2080: 2e 47 65 74 42 79 74 65 73 28 5f 61 63 74 69 76  .GetBytes(_activ
2090: 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 28  eStatement, i, (
20a0: 69 6e 74 29 66 69 65 6c 64 4f 66 66 73 65 74 2c  int)fieldOffset,
20b0: 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72 6f   buffer, buffero
20c0: 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b 0a  ffset, length);.
20d0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
20e0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
20f0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c   Returns the col
2100: 75 6d 6e 20 61 73 20 61 20 73 69 6e 67 6c 65 20  umn as a single 
2110: 63 68 61 72 61 63 74 65 72 0a 20 20 20 20 2f 2f  character.    //
2120: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
2130: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2140: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
2150: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
2160: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
2170: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
2180: 73 3e 63 68 61 72 3c 2f 72 65 74 75 72 6e 73 3e  s>char</returns>
2190: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
21a0: 72 69 64 65 20 63 68 61 72 20 47 65 74 43 68 61  ride char GetCha
21b0: 72 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20  r(int i).    {. 
21c0: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
21d0: 69 2c 20 44 62 54 79 70 65 2e 53 42 79 74 65 29  i, DbType.SByte)
21e0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 43  ;.      return C
21f0: 6f 6e 76 65 72 74 2e 54 6f 43 68 61 72 28 5f 61  onvert.ToChar(_a
2200: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
2210: 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63  sql.GetInt32(_ac
2220: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
2230: 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ));.    }..    /
2240: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
2250: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 61   /// Retrieves a
2260: 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 61 72   column as an ar
2270: 72 61 79 20 6f 66 20 63 68 61 72 73 20 28 62 6c  ray of chars (bl
2280: 6f 62 29 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ob).    /// </su
2290: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
22a0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
22b0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
22c0: 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65  column to retrie
22d0: 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ve</param>.    /
22e0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
22f0: 66 69 65 6c 64 6f 66 66 73 65 74 22 3e 54 68 65  fieldoffset">The
2300: 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65   zero-based inde
2310: 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65  x of where to be
2320: 67 69 6e 20 72 65 61 64 69 6e 67 20 74 68 65 20  gin reading the 
2330: 64 61 74 61 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  data</param>.   
2340: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2350: 3d 22 62 75 66 66 65 72 22 3e 54 68 65 20 62 75  ="buffer">The bu
2360: 66 66 65 72 20 74 6f 20 77 72 69 74 65 20 74 68  ffer to write th
2370: 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 74  e characters int
2380: 6f 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  o</param>.    //
2390: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
23a0: 75 66 66 65 72 6f 66 66 73 65 74 22 3e 54 68 65  ufferoffset">The
23b0: 20 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65   zero-based inde
23c0: 78 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65  x of where to be
23d0: 67 69 6e 20 77 72 69 74 69 6e 67 20 69 6e 74 6f  gin writing into
23e0: 20 74 68 65 20 61 72 72 61 79 3c 2f 70 61 72 61   the array</para
23f0: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  m>.    /// <para
2400: 6d 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e  m name="length">
2410: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  The number of by
2420: 74 65 73 20 74 6f 20 72 65 74 72 69 65 76 65 3c  tes to retrieve<
2430: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
2440: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 61 63 74  <returns>The act
2450: 75 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63 68  ual number of ch
2460: 61 72 61 63 74 65 72 73 20 77 72 69 74 74 65 6e  aracters written
2470: 20 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c   into the array<
2480: 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 2f 2f  /returns>.    //
2490: 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20  / <remarks>.    
24a0: 2f 2f 2f 20 54 6f 20 64 65 74 65 72 6d 69 6e 65  /// To determine
24b0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
24c0: 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
24d0: 20 63 6f 6c 75 6d 6e 2c 20 70 61 73 73 20 61 20   column, pass a 
24e0: 6e 75 6c 6c 20 76 61 6c 75 65 20 66 6f 72 20 74  null value for t
24f0: 68 65 20 62 75 66 66 65 72 2e 20 20 54 68 65 20  he buffer.  The 
2500: 74 6f 74 61 6c 20 6c 65 6e 67 74 68 20 77 69 6c  total length wil
2510: 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0a 20  l be returned.. 
2520: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
2530: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
2540: 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43 68  rride long GetCh
2550: 61 72 73 28 69 6e 74 20 69 2c 20 6c 6f 6e 67 20  ars(int i, long 
2560: 66 69 65 6c 64 6f 66 66 73 65 74 2c 20 63 68 61  fieldoffset, cha
2570: 72 5b 5d 20 62 75 66 66 65 72 2c 20 69 6e 74 20  r[] buffer, int 
2580: 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 69 6e  bufferoffset, in
2590: 74 20 6c 65 6e 67 74 68 29 0a 20 20 20 20 7b 0a  t length).    {.
25a0: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
25b0: 28 69 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e  (i, DbType.Strin
25c0: 67 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g);.      return
25d0: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
25e0: 74 2e 5f 73 71 6c 2e 47 65 74 43 68 61 72 73 28  t._sql.GetChars(
25f0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
2600: 2c 20 69 2c 20 28 69 6e 74 29 66 69 65 6c 64 6f  , i, (int)fieldo
2610: 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c 20 62  ffset, buffer, b
2620: 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c 65 6e  ufferoffset, len
2630: 67 74 68 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  gth);.    }..   
2640: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
2650: 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73     /// Retrieves
2660: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
2670: 20 62 61 63 6b 2d 65 6e 64 20 64 61 74 61 74 79   back-end dataty
2680: 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  pe of the column
2690: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
26a0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
26b0: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
26c0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
26d0: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
26e0: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
26f0: 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e 67 3c  <returns>string<
2700: 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75  /returns>.    pu
2710: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74  blic override st
2720: 72 69 6e 67 20 47 65 74 44 61 74 61 54 79 70 65  ring GetDataType
2730: 4e 61 6d 65 28 69 6e 74 20 69 29 0a 20 20 20 20  Name(int i).    
2740: 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  {.      CheckClo
2750: 73 65 64 28 29 3b 0a 20 20 20 20 20 20 53 51 4c  sed();.      SQL
2760: 69 74 65 54 79 70 65 20 74 79 70 20 3d 20 47 65  iteType typ = Ge
2770: 74 53 51 4c 69 74 65 54 79 70 65 28 69 29 3b 0a  tSQLiteType(i);.
2780: 0a 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54  .      if (typ.T
2790: 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 4f 62  ype == DbType.Ob
27a0: 6a 65 63 74 29 20 72 65 74 75 72 6e 20 53 51 4c  ject) return SQL
27b0: 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74  iteConvert.SQLit
27c0: 65 54 79 70 65 54 6f 54 79 70 65 28 74 79 70 29  eTypeToType(typ)
27d0: 2e 4e 61 6d 65 3b 0a 0a 20 20 20 20 20 20 72 65  .Name;..      re
27e0: 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74  turn _activeStat
27f0: 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d  ement._sql.Colum
2800: 6e 54 79 70 65 28 5f 61 63 74 69 76 65 53 74 61  nType(_activeSta
2810: 74 65 6d 65 6e 74 2c 20 69 2c 20 6f 75 74 20 74  tement, i, out t
2820: 79 70 2e 41 66 66 69 6e 69 74 79 29 3b 0a 20 20  yp.Affinity);.  
2830: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
2840: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
2850: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 75  etrieve the colu
2860: 6d 6e 20 61 73 20 61 20 64 61 74 65 2f 74 69 6d  mn as a date/tim
2870: 65 20 76 61 6c 75 65 0a 20 20 20 20 2f 2f 2f 20  e value.    /// 
2880: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
2890: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
28a0: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
28b0: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
28c0: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20  trieve</param>. 
28d0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
28e0: 44 61 74 65 54 69 6d 65 3c 2f 72 65 74 75 72 6e  DateTime</return
28f0: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
2900: 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65 20  erride DateTime 
2910: 47 65 74 44 61 74 65 54 69 6d 65 28 69 6e 74 20  GetDateTime(int 
2920: 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 56  i).    {.      V
2930: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
2940: 79 70 65 2e 44 61 74 65 54 69 6d 65 29 3b 0a 20  ype.DateTime);. 
2950: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74       return _act
2960: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
2970: 6c 2e 47 65 74 44 61 74 65 54 69 6d 65 28 5f 61  l.GetDateTime(_a
2980: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
2990: 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  i);.    }..    /
29a0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
29b0: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 20 74 68   /// Retrieve th
29c0: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 64 65  e column as a de
29d0: 63 69 6d 61 6c 20 76 61 6c 75 65 0a 20 20 20 20  cimal value.    
29e0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
29f0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2a00: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
2a10: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
2a20: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
2a30: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
2a40: 72 6e 73 3e 64 65 63 69 6d 61 6c 3c 2f 72 65 74  rns>decimal</ret
2a50: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
2a60: 20 6f 76 65 72 72 69 64 65 20 64 65 63 69 6d 61   override decima
2a70: 6c 20 47 65 74 44 65 63 69 6d 61 6c 28 69 6e 74  l GetDecimal(int
2a80: 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20   i).    {.      
2a90: 56 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62  VerifyType(i, Db
2aa0: 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 3b 0a 20  Type.Decimal);. 
2ab0: 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
2ac0: 65 72 74 2e 54 6f 44 65 63 69 6d 61 6c 28 5f 61  ert.ToDecimal(_a
2ad0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
2ae0: 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f 61  sql.GetDouble(_a
2af0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
2b00: 69 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  i));.    }..    
2b10: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
2b20: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
2b30: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 64 6f  e column as a do
2b40: 75 62 6c 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  uble.    /// </s
2b50: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
2b60: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
2b70: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
2b80: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
2b90: 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  eve</param>.    
2ba0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 64 6f 75  /// <returns>dou
2bb0: 62 6c 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  ble</returns>.  
2bc0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
2bd0: 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62  e double GetDoub
2be0: 6c 65 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a  le(int i).    {.
2bf0: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
2c00: 28 69 2c 20 44 62 54 79 70 65 2e 44 6f 75 62 6c  (i, DbType.Doubl
2c10: 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  e);.      return
2c20: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
2c30: 74 2e 5f 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65  t._sql.GetDouble
2c40: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
2c50: 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  t, i);.    }..  
2c60: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
2c70: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
2c80: 74 68 65 20 2e 4e 45 54 20 74 79 70 65 20 6f 66  the .NET type of
2c90: 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 0a   a given column.
2ca0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2cb0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
2cc0: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69  m name="i">The i
2cd0: 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75  ndex of the colu
2ce0: 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  mn to retrieve</
2cf0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
2d00: 72 65 74 75 72 6e 73 3e 54 79 70 65 3c 2f 72 65  returns>Type</re
2d10: 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69  turns>.    publi
2d20: 63 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 20  c override Type 
2d30: 47 65 74 46 69 65 6c 64 54 79 70 65 28 69 6e 74  GetFieldType(int
2d40: 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20   i).    {.      
2d50: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 43 6f 6e  return SQLiteCon
2d60: 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54  vert.SQLiteTypeT
2d70: 6f 54 79 70 65 28 47 65 74 53 51 4c 69 74 65 54  oType(GetSQLiteT
2d80: 79 70 65 28 69 29 29 3b 0a 20 20 20 20 7d 0a 0a  ype(i));.    }..
2d90: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2da0: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  >.    /// Return
2db0: 73 20 61 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  s a column as a 
2dc0: 66 6c 6f 61 74 20 76 61 6c 75 65 0a 20 20 20 20  float value.    
2dd0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
2de0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2df0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
2e00: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
2e10: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
2e20: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
2e30: 72 6e 73 3e 66 6c 6f 61 74 3c 2f 72 65 74 75 72  rns>float</retur
2e40: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
2e50: 76 65 72 72 69 64 65 20 66 6c 6f 61 74 20 47 65  verride float Ge
2e60: 74 46 6c 6f 61 74 28 69 6e 74 20 69 29 0a 20 20  tFloat(int i).  
2e70: 20 20 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79    {.      Verify
2e80: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53  Type(i, DbType.S
2e90: 69 6e 67 6c 65 29 3b 0a 20 20 20 20 20 20 72 65  ingle);.      re
2ea0: 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 53  turn Convert.ToS
2eb0: 69 6e 67 6c 65 28 5f 61 63 74 69 76 65 53 74 61  ingle(_activeSta
2ec0: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 44  tement._sql.GetD
2ed0: 6f 75 62 6c 65 28 5f 61 63 74 69 76 65 53 74 61  ouble(_activeSta
2ee0: 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20 20  tement, i));.   
2ef0: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
2f00: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65  mary>.    /// Re
2f10: 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e  turns the column
2f20: 20 61 73 20 61 20 47 75 69 64 0a 20 20 20 20 2f   as a Guid.    /
2f30: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
2f40: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2f50: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
2f60: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
2f70: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
2f80: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
2f90: 6e 73 3e 47 75 69 64 3c 2f 72 65 74 75 72 6e 73  ns>Guid</returns
2fa0: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
2fb0: 72 72 69 64 65 20 47 75 69 64 20 47 65 74 47 75  rride Guid GetGu
2fc0: 69 64 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a  id(int i).    {.
2fd0: 20 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65        VerifyType
2fe0: 28 69 2c 20 44 62 54 79 70 65 2e 47 75 69 64 29  (i, DbType.Guid)
2ff0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ;.      return n
3000: 65 77 20 47 75 69 64 28 5f 61 63 74 69 76 65 53  ew Guid(_activeS
3010: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
3020: 74 54 65 78 74 28 5f 61 63 74 69 76 65 53 74 61  tText(_activeSta
3030: 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20 20  tement, i));.   
3040: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
3050: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65  mary>.    /// Re
3060: 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d 6e  turns the column
3070: 20 61 73 20 61 20 73 68 6f 72 74 0a 20 20 20 20   as a short.    
3080: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
3090: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
30a0: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
30b0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
30c0: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
30d0: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
30e0: 72 6e 73 3e 49 6e 74 31 36 3c 2f 72 65 74 75 72  rns>Int16</retur
30f0: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
3100: 76 65 72 72 69 64 65 20 49 6e 74 31 36 20 47 65  verride Int16 Ge
3110: 74 49 6e 74 31 36 28 69 6e 74 20 69 29 0a 20 20  tInt16(int i).  
3120: 20 20 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79    {.      Verify
3130: 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 49  Type(i, DbType.I
3140: 6e 74 31 36 29 3b 0a 20 20 20 20 20 20 72 65 74  nt16);.      ret
3150: 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e  urn Convert.ToIn
3160: 74 31 36 28 5f 61 63 74 69 76 65 53 74 61 74 65  t16(_activeState
3170: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74  ment._sql.GetInt
3180: 33 32 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  32(_activeStatem
3190: 65 6e 74 2c 20 69 29 29 3b 0a 20 20 20 20 7d 0a  ent, i));.    }.
31a0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
31b0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  y>.    /// Retri
31c0: 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  eves the column 
31d0: 61 73 20 61 6e 20 69 6e 74 0a 20 20 20 20 2f 2f  as an int.    //
31e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
31f0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3200: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
3210: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
3220: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
3230: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
3240: 73 3e 49 6e 74 33 32 3c 2f 72 65 74 75 72 6e 73  s>Int32</returns
3250: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
3260: 72 72 69 64 65 20 49 6e 74 33 32 20 47 65 74 49  rride Int32 GetI
3270: 6e 74 33 32 28 69 6e 74 20 69 29 0a 20 20 20 20  nt32(int i).    
3280: 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79  {.      VerifyTy
3290: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 49 6e 74  pe(i, DbType.Int
32a0: 33 32 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  32);.      retur
32b0: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
32c0: 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 33 32  nt._sql.GetInt32
32d0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
32e0: 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  t, i);.    }..  
32f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
3300: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
3310: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
3320: 61 20 6c 6f 6e 67 0a 20 20 20 20 2f 2f 2f 20 3c  a long.    /// <
3330: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
3340: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
3350: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
3360: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
3370: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  rieve</param>.  
3380: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 49    /// <returns>I
3390: 6e 74 36 34 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  nt64</returns>. 
33a0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
33b0: 64 65 20 49 6e 74 36 34 20 47 65 74 49 6e 74 36  de Int64 GetInt6
33c0: 34 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20  4(int i).    {. 
33d0: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
33e0: 69 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29  i, DbType.Int64)
33f0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f  ;.      return _
3400: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
3410: 5f 73 71 6c 2e 47 65 74 49 6e 74 36 34 28 5f 61  _sql.GetInt64(_a
3420: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
3430: 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  i);.    }..    /
3440: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
3450: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
3460: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
3470: 6f 6c 75 6d 6e 0a 20 20 20 20 2f 2f 2f 20 3c 2f  olumn.    /// </
3480: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
3490: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22   <param name="i"
34a0: 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68  >The index of th
34b0: 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72  e column to retr
34c0: 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  ieve</param>.   
34d0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74   /// <returns>st
34e0: 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  ring</returns>. 
34f0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
3500: 64 65 20 73 74 72 69 6e 67 20 47 65 74 4e 61 6d  de string GetNam
3510: 65 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20  e(int i).    {. 
3520: 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65 64       CheckClosed
3530: 28 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ();.      return
3540: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
3550: 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 4e 61 6d  t._sql.ColumnNam
3560: 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  e(_activeStateme
3570: 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20  nt, i);.    }.. 
3580: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3590: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
35a0: 65 73 20 74 68 65 20 69 20 6f 66 20 61 20 63 6f  es the i of a co
35b0: 6c 75 6d 6e 2c 20 67 69 76 65 6e 20 69 74 73 20  lumn, given its 
35c0: 6e 61 6d 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  name.    /// </s
35d0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
35e0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d  <param name="nam
35f0: 65 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  e">The name of t
3600: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
3610: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  rieve</param>.  
3620: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
3630: 68 65 20 69 6e 74 20 69 20 6f 66 20 74 68 65 20  he int i of the 
3640: 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e  column</returns>
3650: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
3660: 72 69 64 65 20 69 6e 74 20 47 65 74 4f 72 64 69  ride int GetOrdi
3670: 6e 61 6c 28 73 74 72 69 6e 67 20 6e 61 6d 65 29  nal(string name)
3680: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68 65  .    {.      Che
3690: 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20  ckClosed();.    
36a0: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
36b0: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43  Statement._sql.C
36c0: 6f 6c 75 6d 6e 49 6e 64 65 78 28 5f 61 63 74 69  olumnIndex(_acti
36d0: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e 61 6d  veStatement, nam
36e0: 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  e);.    }..    /
36f0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
3700: 20 2f 2f 2f 20 53 63 68 65 6d 61 20 69 6e 66 6f   /// Schema info
3710: 72 6d 61 74 69 6f 6e 20 69 6e 20 53 51 4c 69 74  rmation in SQLit
3720: 65 20 69 73 20 61 6e 20 69 66 66 79 2d 62 75 73  e is an iffy-bus
3730: 69 6e 65 73 73 2e 20 20 57 65 27 76 65 20 65 78  iness.  We've ex
3740: 74 65 6e 64 65 64 20 74 68 65 20 6e 61 74 69 76  tended the nativ
3750: 65 20 53 51 4c 69 74 65 33 2e 44 4c 4c 20 74 6f  e SQLite3.DLL to
3760: 20 69 6e 63 6c 75 64 65 20 61 20 73 70 65 63 69   include a speci
3770: 61 6c 20 70 72 61 67 6d 61 20 63 61 6c 6c 65 64  al pragma called
3780: 0a 20 20 20 20 2f 2f 2f 20 50 52 41 47 4d 41 20  .    /// PRAGMA 
3790: 72 65 61 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  real_column_name
37a0: 73 0a 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 65  s.    /// When e
37b0: 6e 61 62 6c 65 64 2c 20 74 68 65 20 70 72 61 67  nabled, the prag
37c0: 6d 61 20 63 61 75 73 65 73 20 61 6c 6c 20 63 6f  ma causes all co
37d0: 6c 75 6d 6e 20 61 6c 69 61 73 65 73 20 74 6f 20  lumn aliases to 
37e0: 62 65 20 69 67 6e 6f 72 65 64 2c 20 61 6e 64 20  be ignored, and 
37f0: 74 68 65 20 66 75 6c 6c 20 44 61 74 61 62 61 73  the full Databas
3800: 65 2e 54 61 62 6c 65 2e 43 6f 6c 75 6d 6e 4e 61  e.Table.ColumnNa
3810: 6d 65 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65  me to be returne
3820: 64 20 66 6f 72 0a 20 20 20 20 2f 2f 2f 20 65 61  d for.    /// ea
3830: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 20 53  ch column of a S
3840: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
3850: 20 20 55 73 69 6e 67 20 74 68 69 73 20 69 6e 66    Using this inf
3860: 6f 72 6d 61 74 69 6f 6e 20 69 74 20 69 73 20 74  ormation it is t
3870: 68 65 6e 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  hen possible to 
3880: 71 75 65 72 79 20 65 61 63 68 20 64 61 74 61 62  query each datab
3890: 61 73 65 20 61 6e 64 20 74 61 62 6c 65 20 66 6f  ase and table fo
38a0: 72 20 74 68 65 0a 20 20 20 20 2f 2f 2f 20 6d 61  r the.    /// ma
38b0: 74 63 68 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 61  tching column, a
38c0: 6e 64 20 61 73 73 6f 63 69 61 74 65 20 69 74 20  nd associate it 
38d0: 77 69 74 68 20 74 68 65 20 61 63 74 69 76 65 20  with the active 
38e0: 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 20 20 2f  statement..    /
38f0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
3900: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a    /// <remarks>.
3910: 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 75 72 72      /// The curr
3920: 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ent connection i
3930: 73 20 63 6c 6f 6e 65 64 20 66 6f 72 20 74 68 65  s cloned for the
3940: 20 73 61 6b 65 20 6f 66 20 65 78 65 63 75 74 69   sake of executi
3950: 6e 67 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e  ng this statemen
3960: 74 2c 20 73 6f 20 61 73 20 74 6f 20 61 76 6f 69  t, so as to avoi
3970: 64 20 61 6e 79 20 70 6f 73 73 69 62 69 6c 69 74  d any possibilit
3980: 79 20 6f 66 20 63 6f 72 72 75 70 74 69 6e 67 20  y of corrupting 
3990: 74 68 65 0a 20 20 20 20 2f 2f 2f 20 6f 72 69 67  the.    /// orig
39a0: 69 6e 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 27  inal connection'
39b0: 73 20 65 78 69 73 74 69 6e 67 20 73 74 61 74 65  s existing state
39c0: 6d 65 6e 74 73 20 6f 72 20 73 74 61 74 65 2e 20  ments or state. 
39d0: 20 41 6e 79 20 61 74 74 61 63 68 65 64 20 64 61   Any attached da
39e0: 74 61 62 61 73 65 73 20 61 72 65 20 72 65 2d 61  tabases are re-a
39f0: 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 6e  ttached to the n
3a00: 65 77 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 20  ew connection.. 
3a10: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
3a20: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
3a30: 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 44 61 74  ns>Returns a Dat
3a40: 61 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  aTable containin
3a50: 67 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66  g the schema inf
3a60: 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65  ormation for the
3a70: 20 61 63 74 69 76 65 20 53 45 4c 45 43 54 20 73   active SELECT s
3a80: 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70  tatement being p
3a90: 72 6f 63 65 73 73 65 64 2e 3c 2f 72 65 74 75 72  rocessed.</retur
3aa0: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
3ab0: 76 65 72 72 69 64 65 20 44 61 74 61 54 61 62 6c  verride DataTabl
3ac0: 65 20 47 65 74 53 63 68 65 6d 61 54 61 62 6c 65  e GetSchemaTable
3ad0: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43  ().    {.      C
3ae0: 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 0a 20  heckClosed();.. 
3af0: 20 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 74       DataTable t
3b00: 62 6c 20 3d 20 6e 65 77 20 44 61 74 61 54 61 62  bl = new DataTab
3b10: 6c 65 28 22 53 63 68 65 6d 61 54 61 62 6c 65 22  le("SchemaTable"
3b20: 29 3b 0a 20 20 20 20 20 20 73 74 72 69 6e 67 5b  );.      string[
3b30: 5d 20 61 72 4e 61 6d 65 3b 0a 20 20 20 20 20 20  ] arName;.      
3b40: 73 74 72 69 6e 67 20 73 74 72 54 61 62 6c 65 3b  string strTable;
3b50: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74  .      string st
3b60: 72 43 61 74 61 6c 6f 67 3b 0a 20 20 20 20 20 20  rCatalog;.      
3b70: 44 61 74 61 52 6f 77 20 72 6f 77 3b 0a 0a 20 20  DataRow row;..  
3b80: 20 20 20 20 74 62 6c 2e 4c 6f 63 61 6c 65 20 3d      tbl.Locale =
3b90: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76   CultureInfo.Inv
3ba0: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 3b 0a 20  ariantCulture;. 
3bb0: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
3bc0: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
3bd0: 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d  Column.ColumnNam
3be0: 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67  e, typeof(String
3bf0: 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  ));.      tbl.Co
3c00: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
3c10: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75  TableColumn.Colu
3c20: 6d 6e 4f 72 64 69 6e 61 6c 2c 20 74 79 70 65 6f  mnOrdinal, typeo
3c30: 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 20 20 74  f(int));.      t
3c40: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
3c50: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
3c60: 2e 43 6f 6c 75 6d 6e 53 69 7a 65 2c 20 74 79 70  .ColumnSize, typ
3c70: 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 20  eof(int));.     
3c80: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
3c90: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
3ca0: 6d 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63 69 73  mn.NumericPrecis
3cb0: 69 6f 6e 2c 20 74 79 70 65 6f 66 28 73 68 6f 72  ion, typeof(shor
3cc0: 74 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  t));.      tbl.C
3cd0: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
3ce0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
3cf0: 65 72 69 63 53 63 61 6c 65 2c 20 74 79 70 65 6f  ericScale, typeo
3d00: 66 28 73 68 6f 72 74 29 29 3b 0a 20 20 20 20 20  f(short));.     
3d10: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
3d20: 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75  (SchemaTableColu
3d30: 6d 6e 2e 49 73 55 6e 69 71 75 65 2c 20 74 79 70  mn.IsUnique, typ
3d40: 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20  eof(Boolean));. 
3d50: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
3d60: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
3d70: 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 2c 20 74 79  Column.IsKey, ty
3d80: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a  peof(Boolean));.
3d90: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
3da0: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
3db0: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
3dc0: 42 61 73 65 53 65 72 76 65 72 4e 61 6d 65 2c 20  BaseServerName, 
3dd0: 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b  typeof(string));
3de0: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
3df0: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
3e00: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
3e10: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
3e20: 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29  , typeof(String)
3e30: 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  );.      tbl.Col
3e40: 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54  umns.Add(SchemaT
3e50: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  ableColumn.BaseC
3e60: 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79 70 65 6f  olumnName, typeo
3e70: 66 28 53 74 72 69 6e 67 29 29 3b 0a 20 20 20 20  f(String));.    
3e80: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
3e90: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  d(SchemaTableCol
3ea0: 75 6d 6e 2e 42 61 73 65 53 63 68 65 6d 61 4e 61  umn.BaseSchemaNa
3eb0: 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e  me, typeof(Strin
3ec0: 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  g));.      tbl.C
3ed0: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
3ee0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73  aTableColumn.Bas
3ef0: 65 54 61 62 6c 65 4e 61 6d 65 2c 20 74 79 70 65  eTableName, type
3f00: 6f 66 28 53 74 72 69 6e 67 29 29 3b 0a 20 20 20  of(String));.   
3f10: 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
3f20: 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  dd(SchemaTableCo
3f30: 6c 75 6d 6e 2e 44 61 74 61 54 79 70 65 2c 20 74  lumn.DataType, t
3f40: 79 70 65 6f 66 28 54 79 70 65 29 29 3b 0a 20 20  ypeof(Type));.  
3f50: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
3f60: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
3f70: 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c  olumn.AllowDBNul
3f80: 6c 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  l, typeof(Boolea
3f90: 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  n));.      tbl.C
3fa0: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
3fb0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f  aTableColumn.Pro
3fc0: 76 69 64 65 72 54 79 70 65 2c 20 74 79 70 65 6f  viderType, typeo
3fd0: 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 20 20 74  f(int));.      t
3fe0: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
3ff0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
4000: 2e 49 73 41 6c 69 61 73 65 64 2c 20 74 79 70 65  .IsAliased, type
4010: 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20  of(Boolean));.  
4020: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
4030: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
4040: 6f 6c 75 6d 6e 2e 49 73 45 78 70 72 65 73 73 69  olumn.IsExpressi
4050: 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65  on, typeof(Boole
4060: 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  an));.      tbl.
4070: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
4080: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
4090: 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72  olumn.IsAutoIncr
40a0: 65 6d 65 6e 74 2c 20 74 79 70 65 6f 66 28 42 6f  ement, typeof(Bo
40b0: 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74  olean));.      t
40c0: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
40d0: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
40e0: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56 65  alColumn.IsRowVe
40f0: 72 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 42 6f  rsion, typeof(Bo
4100: 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74  olean));.      t
4110: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
4120: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
4130: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 48 69 64 64 65  alColumn.IsHidde
4140: 6e 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  n, typeof(Boolea
4150: 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  n));.      tbl.C
4160: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
4170: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4c  aTableColumn.IsL
4180: 6f 6e 67 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c  ong, typeof(Bool
4190: 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  ean));.      tbl
41a0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
41b0: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
41c0: 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c  Column.IsReadOnl
41d0: 79 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  y, typeof(Boolea
41e0: 6e 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43  n));.      tbl.C
41f0: 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d  olumns.Add(Schem
4200: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
4210: 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72 53 70 65  lumn.ProviderSpe
4220: 63 69 66 69 63 44 61 74 61 54 79 70 65 2c 20 74  cificDataType, t
4230: 79 70 65 6f 66 28 54 79 70 65 29 29 3b 0a 20 20  ypeof(Type));.  
4240: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
4250: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f  Add(SchemaTableO
4260: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 44 65  ptionalColumn.De
4270: 66 61 75 6c 74 56 61 6c 75 65 2c 20 74 79 70 65  faultValue, type
4280: 6f 66 28 6f 62 6a 65 63 74 29 29 3b 0a 0a 20 20  of(object));..  
4290: 20 20 20 20 74 62 6c 2e 42 65 67 69 6e 4c 6f 61      tbl.BeginLoa
42a0: 64 44 61 74 61 28 29 3b 0a 0a 20 20 20 20 20 20  dData();..      
42b0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
42c0: 20 63 6e 6e 20 3d 20 28 53 51 4c 69 74 65 43 6f   cnn = (SQLiteCo
42d0: 6e 6e 65 63 74 69 6f 6e 29 5f 63 6f 6d 6d 61 6e  nnection)_comman
42e0: 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 3b 0a 0a 20  d.Connection;.. 
42f0: 20 20 20 20 20 74 72 79 0a 20 20 20 20 20 20 7b       try.      {
4300: 0a 20 20 20 20 20 20 20 20 63 6e 6e 2e 5f 73 71  .        cnn._sq
4310: 6c 2e 53 65 74 52 65 61 6c 43 6f 6c 4e 61 6d 65  l.SetRealColName
4320: 73 28 74 72 75 65 29 3b 0a 0a 20 20 20 20 20 20  s(true);..      
4330: 20 20 2f 2f 20 43 72 65 61 74 65 20 61 20 6e 65    // Create a ne
4340: 77 20 63 6f 6d 6d 61 6e 64 20 62 61 73 65 64 20  w command based 
4350: 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 2e  on the original.
4360: 20 20 54 68 65 20 6f 6e 6c 79 20 64 69 66 66 65    The only diffe
4370: 72 65 6e 63 65 20 62 65 69 6e 67 20 74 68 61 74  rence being that
4380: 20 74 68 69 73 20 6e 65 77 20 63 6f 6d 6d 61 6e   this new comman
4390: 64 20 72 65 74 75 72 6e 73 0a 20 20 20 20 20 20  d returns.      
43a0: 20 20 2f 2f 20 66 75 6c 6c 79 2d 71 75 61 6c 69    // fully-quali
43b0: 66 69 65 64 20 44 61 74 61 62 61 73 65 2e 54 61  fied Database.Ta
43c0: 62 6c 65 2e 43 6f 6c 75 6d 6e 20 63 6f 6c 75 6d  ble.Column colum
43d0: 6e 20 6e 61 6d 65 73 20 62 65 63 61 75 73 65 20  n names because 
43e0: 6f 66 20 74 68 65 20 61 62 6f 76 65 20 70 72 61  of the above pra
43f0: 67 6d 61 0a 20 20 20 20 20 20 20 20 75 73 69 6e  gma.        usin
4400: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
4410: 20 63 6d 64 20 3d 20 6e 65 77 20 53 51 4c 69 74   cmd = new SQLit
4420: 65 43 6f 6d 6d 61 6e 64 28 5f 61 63 74 69 76 65  eCommand(_active
4430: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 53 74  Statement._sqlSt
4440: 61 74 65 6d 65 6e 74 2c 20 63 6e 6e 29 29 0a 20  atement, cnn)). 
4450: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
4460: 20 20 20 75 73 69 6e 67 20 28 44 62 44 61 74 61     using (DbData
4470: 52 65 61 64 65 72 20 72 64 20 3d 20 63 6d 64 2e  Reader rd = cmd.
4480: 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29  ExecuteReader())
4490: 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20  .          {.   
44a0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 6f 20 6e           // No n
44b0: 65 65 64 20 74 6f 20 52 65 61 64 28 29 20 66 72  eed to Read() fr
44c0: 6f 6d 20 74 68 69 73 20 72 65 61 64 65 72 2c 20  om this reader, 
44d0: 77 65 20 6a 75 73 74 20 77 61 6e 74 20 74 68 65  we just want the
44e0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 0a 20 20   column names.  
44f0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
4500: 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 66  nt n = 0; n < _f
4510: 69 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0a  ieldCount; n++).
4520: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
4530: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 54              strT
4540: 61 62 6c 65 20 3d 20 22 22 3b 0a 20 20 20 20 20  able = "";.     
4550: 20 20 20 20 20 20 20 20 20 73 74 72 43 61 74 61           strCata
4560: 6c 6f 67 20 3d 20 22 6d 61 69 6e 22 3b 0a 0a 20  log = "main";.. 
4570: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
4580: 20 3d 20 74 62 6c 2e 4e 65 77 52 6f 77 28 29 3b   = tbl.NewRow();
4590: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
45a0: 2f 2f 20 44 65 66 61 75 6c 74 20 73 65 74 74 69  // Default setti
45b0: 6e 67 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ngs for the colu
45c0: 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
45d0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
45e0: 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d  Column.ColumnNam
45f0: 65 5d 20 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b  e] = GetName(n);
4600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
4610: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
4620: 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e  lumn.ColumnOrdin
4630: 61 6c 5d 20 3d 20 6e 3b 0a 20 20 20 20 20 20 20  al] = n;.       
4640: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
4650: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c  aTableColumn.Col
4660: 75 6d 6e 53 69 7a 65 5d 20 3d 20 30 3b 0a 20 20  umnSize] = 0;.  
4670: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
4680: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
4690: 6e 2e 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69  n.NumericPrecisi
46a0: 6f 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  on] = 0;.       
46b0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
46c0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
46d0: 65 72 69 63 53 63 61 6c 65 5d 20 3d 20 30 3b 0a  ericScale] = 0;.
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
46f0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
4700: 75 6d 6e 2e 50 72 6f 76 69 64 65 72 54 79 70 65  umn.ProviderType
4710: 5d 20 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70  ] = GetSQLiteTyp
4720: 65 28 6e 29 2e 54 79 70 65 3b 0a 20 20 20 20 20  e(n).Type;.     
4730: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
4740: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49  emaTableColumn.I
4750: 73 4c 6f 6e 67 5d 20 3d 20 66 61 6c 73 65 3b 0a  sLong] = false;.
4760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
4770: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
4780: 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d  umn.AllowDBNull]
4790: 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20   = true;.       
47a0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
47b0: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
47c0: 6c 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 5d  lumn.IsReadOnly]
47d0: 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20   = true;.       
47e0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
47f0: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
4800: 6c 75 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f  lumn.IsRowVersio
4810: 6e 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20  n] = false;.    
4820: 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63            row[Sc
4830: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
4840: 49 73 55 6e 69 71 75 65 5d 20 3d 20 66 61 6c 73  IsUnique] = fals
4850: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e;.             
4860: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
4870: 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20  Column.IsKey] = 
4880: 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 20  false;.         
4890: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
48a0: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
48b0: 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65  mn.IsAutoIncreme
48c0: 6e 74 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20  nt] = false;.   
48d0: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
48e0: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
48f0: 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65 61 64 4f  alColumn.IsReadO
4900: 6e 6c 79 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20  nly] = false;.  
4910: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
4920: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
4930: 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65  n.BaseColumnName
4940: 5d 20 3d 20 47 65 74 4e 61 6d 65 28 6e 29 3b 0a  ] = GetName(n);.
4950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  .              /
4960: 2f 20 54 72 79 20 61 6e 64 20 65 78 74 72 61 63  / Try and extrac
4970: 74 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20  t the database, 
4980: 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
4990: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 72 65   from the datare
49a0: 61 64 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  ader.           
49b0: 20 20 20 61 72 4e 61 6d 65 20 3d 20 72 64 2e 47     arName = rd.G
49c0: 65 74 4e 61 6d 65 28 6e 29 2e 53 70 6c 69 74 28  etName(n).Split(
49d0: 27 2e 27 29 3b 0a 0a 20 20 20 20 20 20 20 20 20  '.');..         
49e0: 20 20 20 20 20 69 66 20 28 61 72 4e 61 6d 65 2e       if (arName.
49f0: 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20 20 20 20  Length > 1).    
4a00: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 54              strT
4a10: 61 62 6c 65 20 3d 20 61 72 4e 61 6d 65 5b 61 72  able = arName[ar
4a20: 4e 61 6d 65 2e 4c 65 6e 67 74 68 20 2d 20 32 5d  Name.Length - 2]
4a30: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4a40: 20 69 66 20 28 61 72 4e 61 6d 65 2e 4c 65 6e 67   if (arName.Leng
4a50: 74 68 20 3e 20 32 29 0a 20 20 20 20 20 20 20 20  th > 2).        
4a60: 20 20 20 20 20 20 20 20 73 74 72 43 61 74 61 6c          strCatal
4a70: 6f 67 20 3d 20 61 72 4e 61 6d 65 5b 61 72 4e 61  og = arName[arNa
4a80: 6d 65 2e 4c 65 6e 67 74 68 20 2d 20 33 5d 3b 0a  me.Length - 3];.
4a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  .              /
4aa0: 2f 20 49 66 20 77 65 20 68 61 76 65 20 61 20 74  / If we have a t
4ab0: 61 62 6c 65 2d 62 6f 75 6e 64 20 63 6f 6c 75 6d  able-bound colum
4ac0: 6e 2c 20 65 78 74 72 61 63 74 20 74 68 65 20 65  n, extract the e
4ad0: 78 74 72 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  xtra information
4ae0: 20 66 72 6f 6d 20 69 74 0a 20 20 20 20 20 20 20   from it.       
4af0: 20 20 20 20 20 20 20 69 66 20 28 61 72 4e 61 6d         if (arNam
4b00: 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20 20  e.Length > 1).  
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
4b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
4b30: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
4b40: 6e 64 20 63 6d 64 54 61 62 6c 65 20 3d 20 6e 65  nd cmdTable = ne
4b50: 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28  w SQLiteCommand(
4b60: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75  String.Format(Cu
4b70: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
4b80: 74 43 75 6c 74 75 72 65 2c 20 22 50 52 41 47 4d  tCulture, "PRAGM
4b90: 41 20 5b 7b 31 7d 5d 2e 54 41 42 4c 45 5f 49 4e  A [{1}].TABLE_IN
4ba0: 46 4f 28 5b 7b 30 7d 5d 29 22 2c 20 73 74 72 54  FO([{0}])", strT
4bb0: 61 62 6c 65 2c 20 73 74 72 43 61 74 61 6c 6f 67  able, strCatalog
4bc0: 29 2c 20 63 6e 6e 29 29 0a 20 20 20 20 20 20 20  ), cnn)).       
4bd0: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
4be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4bf0: 28 61 72 4e 61 6d 65 2e 4c 65 6e 67 74 68 20 3c  (arName.Length <
4c00: 20 33 29 20 73 74 72 43 61 74 61 6c 6f 67 20 3d   3) strCatalog =
4c10: 20 22 6d 61 69 6e 22 3b 0a 0a 20 20 20 20 20 20   "main";..      
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
4c30: 67 20 28 44 62 44 61 74 61 52 65 61 64 65 72 20  g (DbDataReader 
4c40: 72 64 54 61 62 6c 65 20 3d 20 63 6d 64 54 61 62  rdTable = cmdTab
4c50: 6c 65 2e 45 78 65 63 75 74 65 52 65 61 64 65 72  le.ExecuteReader
4c60: 28 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()).            
4c70: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
4c90: 65 20 28 72 64 54 61 62 6c 65 2e 52 65 61 64 28  e (rdTable.Read(
4ca0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
4cb0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
4cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4cd0: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
4ce0: 65 28 61 72 4e 61 6d 65 5b 61 72 4e 61 6d 65 2e  e(arName[arName.
4cf0: 4c 65 6e 67 74 68 20 2d 20 31 5d 2c 20 72 64 54  Length - 1], rdT
4d00: 61 62 6c 65 2e 47 65 74 53 74 72 69 6e 67 28 31  able.GetString(1
4d10: 29 2c 20 74 72 75 65 2c 20 43 75 6c 74 75 72 65  ), true, Culture
4d20: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
4d30: 75 72 65 29 20 3d 3d 20 30 29 0a 20 20 20 20 20  ure) == 0).     
4d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d50: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
4d60: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
4d70: 67 20 73 74 72 54 79 70 65 20 3d 20 72 64 54 61  g strType = rdTa
4d80: 62 6c 65 2e 47 65 74 53 74 72 69 6e 67 28 32 29  ble.GetString(2)
4d90: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
4da0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
4db0: 5b 5d 20 61 72 53 69 7a 65 20 3d 20 73 74 72 54  [] arSize = strT
4dc0: 79 70 65 2e 53 70 6c 69 74 28 27 28 27 29 3b 0a  ype.Split('(');.
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4de0: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 53 69          if (arSi
4df0: 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20  ze.Length > 1). 
4e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e10: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
4e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e30: 20 20 20 73 74 72 54 79 70 65 20 3d 20 61 72 53     strType = arS
4e40: 69 7a 65 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20  ize[0];.        
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e60: 20 20 61 72 53 69 7a 65 20 3d 20 61 72 53 69 7a    arSize = arSiz
4e70: 65 5b 31 5d 2e 53 70 6c 69 74 28 27 29 27 29 3b  e[1].Split(')');
4e80: 0a 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 20 20 69 66 20 28 61             if (a
4ea0: 72 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31  rSize.Length > 1
4eb0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
4ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
4ed0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
4ee0: 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20  umn.ColumnSize] 
4ef0: 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33  = Convert.ToInt3
4f00: 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20 43 75 6c  2(arSize[0], Cul
4f10: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
4f20: 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20 20 20 20  ntCulture);.    
4f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f40: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20      }..         
4f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
4f60: 6f 6f 6c 20 62 4e 6f 74 4e 75 6c 6c 20 3d 20 72  ool bNotNull = r
4f70: 64 54 61 62 6c 65 2e 47 65 74 42 6f 6f 6c 65 61  dTable.GetBoolea
4f80: 6e 28 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  n(3);.          
4f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
4fa0: 6f 6c 20 62 50 72 69 6d 61 72 79 4b 65 79 20 3d  ol bPrimaryKey =
4fb0: 20 72 64 54 61 62 6c 65 2e 47 65 74 42 6f 6f 6c   rdTable.GetBool
4fc0: 65 61 6e 28 35 29 3b 0a 0a 20 20 20 20 20 20 20  ean(5);..       
4fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fe0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
4ff0: 43 6f 6c 75 6d 6e 2e 44 61 74 61 54 79 70 65 5d  Column.DataType]
5000: 20 3d 20 47 65 74 46 69 65 6c 64 54 79 70 65 28   = GetFieldType(
5010: 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  n);.            
5020: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
5030: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
5040: 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d  n.BaseTableName]
5050: 20 3d 20 73 74 72 54 61 62 6c 65 3b 0a 20 20 20   = strTable;.   
5060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5070: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
5080: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 43  ableColumn.BaseC
5090: 6f 6c 75 6d 6e 4e 61 6d 65 5d 20 3d 20 72 64 54  olumnName] = rdT
50a0: 61 62 6c 65 2e 47 65 74 53 74 72 69 6e 67 28 31  able.GetString(1
50b0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
50c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
50d0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
50e0: 70 74 79 28 73 74 72 43 61 74 61 6c 6f 67 29 20  pty(strCatalog) 
50f0: 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20  == false).      
5100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5110: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
5120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
5130: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
5140: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65  ionalColumn.Base
5150: 43 61 74 61 6c 6f 67 4e 61 6d 65 5d 20 3d 20 73  CatalogName] = s
5160: 74 72 43 61 74 61 6c 6f 67 3b 0a 20 20 20 20 20  trCatalog;.     
5170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5180: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20     }..          
5190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
51a0: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
51b0: 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d  umn.AllowDBNull]
51c0: 20 3d 20 28 21 62 4e 6f 74 4e 75 6c 6c 20 26 26   = (!bNotNull &&
51d0: 20 21 62 50 72 69 6d 61 72 79 4b 65 79 29 3b 0a   !bPrimaryKey);.
51e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51f0: 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65          row[Sche
5200: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
5210: 55 6e 69 71 75 65 5d 20 3d 20 62 50 72 69 6d 61  Unique] = bPrima
5220: 72 79 4b 65 79 3b 0a 20 20 20 20 20 20 20 20 20  ryKey;.         
5230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5240: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
5250: 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20 3d 20 62 50  lumn.IsKey] = bP
5260: 72 69 6d 61 72 79 4b 65 79 3b 0a 20 20 20 20 20  rimaryKey;.     
5270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5280: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
5290: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
52a0: 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74  .IsAutoIncrement
52b0: 5d 20 3d 20 28 62 50 72 69 6d 61 72 79 4b 65 79  ] = (bPrimaryKey
52c0: 20 26 26 0a 20 20 20 20 20 20 20 20 20 20 20 20   &&.            
52d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52e0: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 73  String.Compare(s
52f0: 74 72 54 79 70 65 2c 20 22 69 6e 74 65 67 65 72  trType, "integer
5300: 22 2c 20 74 72 75 65 2c 20 43 75 6c 74 75 72 65  ", true, Culture
5310: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
5320: 6c 74 75 72 65 29 20 3d 3d 20 30 29 3b 0a 20 20  lture) == 0);.  
5330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5340: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
5350: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
5360: 75 6d 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 5d 20  umn.IsReadOnly] 
5370: 3d 20 28 62 6f 6f 6c 29 72 6f 77 5b 53 63 68 65  = (bool)row[Sche
5380: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
5390: 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72  olumn.IsAutoIncr
53a0: 65 6d 65 6e 74 5d 3b 0a 20 20 20 20 20 20 20 20  ement];.        
53b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53c0: 69 66 20 28 72 64 54 61 62 6c 65 2e 49 73 44 42  if (rdTable.IsDB
53d0: 4e 75 6c 6c 28 34 29 20 3d 3d 20 66 61 6c 73 65  Null(4) == false
53e0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
5400: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
5410: 6e 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c  nalColumn.Defaul
5420: 74 56 61 6c 75 65 5d 20 3d 20 72 64 54 61 62 6c  tValue] = rdTabl
5430: 65 5b 34 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  e[4];.          
5440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
5450: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20  eak;.           
5460: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
5470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5480: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
5490: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
54a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
54b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
54c0: 20 20 20 20 20 20 20 74 62 6c 2e 52 6f 77 73 2e         tbl.Rows.
54d0: 41 64 64 28 72 6f 77 29 3b 0a 20 20 20 20 20 20  Add(row);.      
54e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
54f0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
5500: 20 20 20 20 7d 0a 20 20 20 20 20 20 66 69 6e 61      }.      fina
5510: 6c 6c 79 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  lly.      {.    
5520: 20 20 20 20 63 6e 6e 2e 5f 73 71 6c 2e 53 65 74      cnn._sql.Set
5530: 52 65 61 6c 43 6f 6c 4e 61 6d 65 73 28 66 61 6c  RealColNames(fal
5540: 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  se);.      }..  
5550: 20 20 20 20 74 62 6c 2e 41 63 63 65 70 74 43 68      tbl.AcceptCh
5560: 61 6e 67 65 73 28 29 3b 0a 20 20 20 20 20 20 74  anges();.      t
5570: 62 6c 2e 45 6e 64 4c 6f 61 64 44 61 74 61 28 29  bl.EndLoadData()
5580: 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
5590: 74 62 6c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  tbl;.    }..    
55a0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
55b0: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
55c0: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
55d0: 73 74 72 69 6e 67 0a 20 20 20 20 2f 2f 2f 20 3c  string.    /// <
55e0: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
55f0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
5600: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
5610: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
5620: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  rieve</param>.  
5630: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 73    /// <returns>s
5640: 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0a  tring</returns>.
5650: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
5660: 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 53 74  ide string GetSt
5670: 72 69 6e 67 28 69 6e 74 20 69 29 0a 20 20 20 20  ring(int i).    
5680: 7b 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79  {.      VerifyTy
5690: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53 74 72  pe(i, DbType.Str
56a0: 69 6e 67 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ing);.      retu
56b0: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
56c0: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74  ent._sql.GetText
56d0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
56e0: 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  t, i);.    }..  
56f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
5700: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
5710: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
5720: 61 6e 20 6f 62 6a 65 63 74 20 63 6f 72 72 65 73  an object corres
5730: 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 75  ponding to the u
5740: 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 74 79  nderlying dataty
5750: 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  pe of the column
5760: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
5770: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
5780: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
5790: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
57a0: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
57b0: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
57c0: 3c 72 65 74 75 72 6e 73 3e 6f 62 6a 65 63 74 3c  <returns>object<
57d0: 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75  /returns>.    pu
57e0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62  blic override ob
57f0: 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 69 6e  ject GetValue(in
5800: 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  t i).    {.     
5810: 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 20   SQLiteType typ 
5820: 3d 20 47 65 74 53 51 4c 69 74 65 54 79 70 65 28  = GetSQLiteType(
5830: 69 29 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72  i);..      retur
5840: 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  n _activeStateme
5850: 6e 74 2e 5f 73 71 6c 2e 47 65 74 56 61 6c 75 65  nt._sql.GetValue
5860: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
5870: 74 2c 20 69 2c 20 72 65 66 20 74 79 70 29 3b 0a  t, i, ref typ);.
5880: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
5890: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
58a0: 20 52 65 74 72 65 69 76 65 73 20 74 68 65 20 76   Retreives the v
58b0: 61 6c 75 65 73 20 6f 66 20 6d 75 6c 74 69 70 6c  alues of multipl
58c0: 65 20 63 6f 6c 75 6d 6e 73 2c 20 75 70 20 74 6f  e columns, up to
58d0: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
58e0: 20 73 75 70 70 6c 69 65 64 20 61 72 72 61 79 0a   supplied array.
58f0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5900: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
5910: 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e  m name="values">
5920: 54 68 65 20 61 72 72 61 79 20 74 6f 20 66 69 6c  The array to fil
5930: 6c 20 77 69 74 68 20 76 61 6c 75 65 73 20 66 72  l with values fr
5940: 6f 6d 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69  om the columns i
5950: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65  n the current re
5960: 73 75 6c 74 73 65 74 3c 2f 70 61 72 61 6d 3e 0a  sultset</param>.
5970: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
5980: 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  >The number of c
5990: 6f 6c 75 6d 6e 73 20 72 65 74 72 69 65 76 65 64  olumns retrieved
59a0: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
59b0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
59c0: 6e 74 20 47 65 74 56 61 6c 75 65 73 28 6f 62 6a  nt GetValues(obj
59d0: 65 63 74 5b 5d 20 76 61 6c 75 65 73 29 0a 20 20  ect[] values).  
59e0: 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43    {.      CheckC
59f0: 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20 69  losed();.      i
5a00: 6e 74 20 6e 4d 61 78 20 3d 20 5f 66 69 65 6c 64  nt nMax = _field
5a10: 43 6f 75 6e 74 3b 0a 20 20 20 20 20 20 69 66 20  Count;.      if 
5a20: 28 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 20 3c  (values.Length <
5a30: 20 6e 4d 61 78 29 20 6e 4d 61 78 20 3d 20 76 61   nMax) nMax = va
5a40: 6c 75 65 73 2e 4c 65 6e 67 74 68 3b 0a 0a 20 20  lues.Length;..  
5a50: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d      for (int n =
5a60: 20 30 3b 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e 2b   0; n < nMax; n+
5a70: 2b 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  +).      {.     
5a80: 20 20 20 76 61 6c 75 65 73 2e 53 65 74 56 61 6c     values.SetVal
5a90: 75 65 28 47 65 74 56 61 6c 75 65 28 6e 29 2c 20  ue(GetValue(n), 
5aa0: 6e 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  n);.      }..   
5ab0: 20 20 20 72 65 74 75 72 6e 20 6e 4d 61 78 3b 0a     return nMax;.
5ac0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
5ad0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
5ae0: 20 52 65 74 75 72 6e 73 20 54 72 75 65 20 69 66   Returns True if
5af0: 20 74 68 65 20 72 65 73 75 6c 74 73 65 74 20 68   the resultset h
5b00: 61 73 20 72 6f 77 73 20 74 68 61 74 20 63 61 6e  as rows that can
5b10: 20 62 65 20 66 65 74 63 68 65 64 0a 20 20 20 20   be fetched.    
5b20: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
5b30: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
5b40: 64 65 20 62 6f 6f 6c 20 48 61 73 52 6f 77 73 0a  de bool HasRows.
5b50: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a      {.      get.
5b60: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
5b70: 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20  CheckClosed();. 
5b80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f         return (_
5b90: 72 65 61 64 69 6e 67 53 74 61 74 65 20 21 3d 20  readingState != 
5ba0: 32 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  2);.      }.    
5bb0: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
5bc0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ary>.    /// Ret
5bd0: 75 72 6e 73 20 54 72 75 65 20 69 66 20 74 68 65  urns True if the
5be0: 20 64 61 74 61 20 72 65 61 64 65 72 20 69 73 20   data reader is 
5bf0: 63 6c 6f 73 65 64 0a 20 20 20 20 2f 2f 2f 20 3c  closed.    /// <
5c00: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75  /summary>.    pu
5c10: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f  blic override bo
5c20: 6f 6c 20 49 73 43 6c 6f 73 65 64 0a 20 20 20 20  ol IsClosed.    
5c30: 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65  {.      get { re
5c40: 74 75 72 6e 20 28 5f 63 6f 6d 6d 61 6e 64 20 3d  turn (_command =
5c50: 3d 20 6e 75 6c 6c 29 3b 20 7d 0a 20 20 20 20 7d  = null); }.    }
5c60: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5c70: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  ry>.    /// Retu
5c80: 72 6e 73 20 54 72 75 65 20 69 66 20 74 68 65 20  rns True if the 
5c90: 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e  specified column
5ca0: 20 69 73 20 6e 75 6c 6c 0a 20 20 20 20 2f 2f 2f   is null.    ///
5cb0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
5cc0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5cd0: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
5ce0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72   the column to r
5cf0: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a  etrieve</param>.
5d00: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
5d10: 3e 54 72 75 65 20 6f 72 20 46 61 6c 73 65 3c 2f  >True or False</
5d20: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
5d30: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
5d40: 6c 20 49 73 44 42 4e 75 6c 6c 28 69 6e 74 20 69  l IsDBNull(int i
5d50: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68  ).    {.      Ch
5d60: 65 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20  eckClosed();.   
5d70: 20 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76     return _activ
5d80: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e  eStatement._sql.
5d90: 49 73 4e 75 6c 6c 28 5f 61 63 74 69 76 65 53 74  IsNull(_activeSt
5da0: 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20  atement, i);.   
5db0: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
5dc0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 4d 6f  mary>.    /// Mo
5dd0: 76 65 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ves to the next 
5de0: 72 65 73 75 6c 74 73 65 74 20 69 6e 20 6d 75 6c  resultset in mul
5df0: 74 69 70 6c 65 20 72 6f 77 2d 72 65 74 75 72 6e  tiple row-return
5e00: 69 6e 67 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e  ing SQL command.
5e10: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
5e20: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  ry>.    /// <ret
5e30: 75 72 6e 73 3e 54 72 75 65 20 69 66 20 74 68 65  urns>True if the
5e40: 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 75 63   command was suc
5e50: 63 65 73 73 66 75 6c 20 61 6e 64 20 61 20 6e 65  cessful and a ne
5e60: 77 20 72 65 73 75 6c 74 73 65 74 20 69 73 20 61  w resultset is a
5e70: 76 61 69 6c 61 62 6c 65 2c 20 46 61 6c 73 65 20  vailable, False 
5e80: 6f 74 68 65 72 77 69 73 65 2e 3c 2f 72 65 74 75  otherwise.</retu
5e90: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
5ea0: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 4e 65  override bool Ne
5eb0: 78 74 52 65 73 75 6c 74 28 29 0a 20 20 20 20 7b  xtResult().    {
5ec0: 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73  .      CheckClos
5ed0: 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 53 51 4c  ed();..      SQL
5ee0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
5ef0: 74 3b 0a 20 20 20 20 20 20 69 6e 74 20 66 69 65  t;.      int fie
5f00: 6c 64 43 6f 75 6e 74 3b 0a 0a 20 20 20 20 20 20  ldCount;..      
5f10: 77 68 69 6c 65 20 28 74 72 75 65 29 0a 20 20 20  while (true).   
5f20: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20     {.        if 
5f30: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
5f40: 74 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  t != null).     
5f50: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 2f     {.          /
5f60: 2f 20 49 66 20 77 65 27 72 65 20 6f 6e 6c 79 20  / If we're only 
5f70: 73 75 70 70 6f 73 65 64 20 74 6f 20 72 65 74 75  supposed to retu
5f80: 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 73  rn a single rows
5f90: 65 74 2c 20 73 74 65 70 20 74 68 72 6f 75 67 68  et, step through
5fa0: 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 73   all remaining s
5fb0: 74 61 74 65 6d 65 6e 74 73 20 6f 6e 63 65 20 75  tatements once u
5fc0: 6e 74 69 6c 0a 20 20 20 20 20 20 20 20 20 20 2f  ntil.          /
5fd0: 2f 20 74 68 65 79 20 61 72 65 20 61 6c 6c 20 64  / they are all d
5fe0: 6f 6e 65 20 61 6e 64 20 72 65 74 75 72 6e 20 66  one and return f
5ff0: 61 6c 73 65 20 74 6f 20 69 6e 64 69 63 61 74 65  alse to indicate
6000: 20 6e 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74 73   no more results
6010: 65 74 73 20 65 78 69 73 74 2e 0a 20 20 20 20 20  ets exist..     
6020: 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61       if ((_comma
6030: 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d  ndBehavior & Com
6040: 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 69 6e  mandBehavior.Sin
6050: 67 6c 65 52 65 73 75 6c 74 29 20 21 3d 20 30 29  gleResult) != 0)
6060: 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20  .          {.   
6070: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 73 65           // Rese
6080: 74 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  t the previously
6090: 2d 65 78 65 63 75 74 65 64 20 63 6f 6d 6d 61 6e  -executed comman
60a0: 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 61  d.            _a
60b0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
60c0: 73 71 6c 2e 52 65 73 65 74 28 5f 61 63 74 69 76  sql.Reset(_activ
60d0: 65 53 74 61 74 65 6d 65 6e 74 29 3b 0a 0a 20 20  eStatement);..  
60e0: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
60f0: 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e  (_activeStatemen
6100: 74 49 6e 64 65 78 20 2b 20 31 20 21 3d 20 5f 63  tIndex + 1 != _c
6110: 6f 6d 6d 61 6e 64 2e 5f 73 74 61 74 65 6d 65 6e  ommand._statemen
6120: 74 4c 69 73 74 2e 4c 65 6e 67 74 68 29 0a 20 20  tList.Length).  
6130: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
6140: 20 20 20 20 20 20 20 20 20 20 5f 61 63 74 69 76            _activ
6150: 65 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b  eStatementIndex+
6160: 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +;.             
6170: 20 73 74 6d 74 20 3d 20 5f 63 6f 6d 6d 61 6e 64   stmt = _command
6180: 2e 5f 73 74 61 74 65 6d 65 6e 74 4c 69 73 74 5b  ._statementList[
6190: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
61a0: 49 6e 64 65 78 5d 3b 0a 20 20 20 20 20 20 20 20  Index];.        
61b0: 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 2e        stmt._sql.
61c0: 53 74 65 70 28 73 74 6d 74 29 3b 0a 20 20 20 20  Step(stmt);.    
61d0: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f            stmt._
61e0: 73 71 6c 2e 52 65 73 65 74 28 73 74 6d 74 29 3b  sql.Reset(stmt);
61f0: 20 2f 2f 20 47 6f 74 74 61 20 72 65 73 65 74 20   // Gotta reset 
6200: 61 66 74 65 72 20 65 76 65 72 79 20 73 74 65 70  after every step
6210: 20 74 6f 20 72 65 6c 65 61 73 65 20 61 6e 79 20   to release any 
6220: 6c 6f 63 6b 73 20 61 6e 64 20 73 75 63 68 21 0a  locks and such!.
6230: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
6240: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6250: 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20   false;.        
6260: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 2f    }..          /
6270: 2f 20 52 65 73 65 74 20 74 68 65 20 70 72 65 76  / Reset the prev
6280: 69 6f 75 73 6c 79 2d 65 78 65 63 75 74 65 64 20  iously-executed 
6290: 63 6f 6d 6d 61 6e 64 0a 20 20 20 20 20 20 20 20  command.        
62a0: 20 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65    _activeStateme
62b0: 6e 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28 5f 61  nt._sql.Reset(_a
62c0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 29 3b  ctiveStatement);
62d0: 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
62e0: 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20      // If we've 
62f0: 72 65 61 63 68 65 64 20 74 68 65 20 65 6e 64 20  reached the end 
6300: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
6310: 73 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2c  s, return false,
6320: 20 6e 6f 20 6d 6f 72 65 20 72 65 73 75 6c 74 73   no more results
6330: 65 74 73 0a 20 20 20 20 20 20 20 20 69 66 20 28  ets.        if (
6340: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
6350: 49 6e 64 65 78 20 2b 20 31 20 3d 3d 20 5f 63 6f  Index + 1 == _co
6360: 6d 6d 61 6e 64 2e 5f 73 74 61 74 65 6d 65 6e 74  mmand._statement
6370: 4c 69 73 74 2e 4c 65 6e 67 74 68 29 0a 20 20 20  List.Length).   
6380: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
6390: 6c 73 65 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f  lse;..        //
63a0: 20 49 66 20 77 65 20 77 65 72 65 20 6f 6e 20 61   If we were on a
63b0: 20 72 65 73 75 6c 74 73 65 74 2c 20 73 65 74 20   resultset, set 
63c0: 74 68 65 20 73 74 61 74 65 20 74 6f 20 22 64 6f  the state to "do
63d0: 6e 65 20 72 65 61 64 69 6e 67 22 20 66 6f 72 20  ne reading" for 
63e0: 69 74 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  it.        if (_
63f0: 72 65 61 64 69 6e 67 53 74 61 74 65 20 3c 20 31  readingState < 1
6400: 29 0a 20 20 20 20 20 20 20 20 20 20 5f 72 65 61  ).          _rea
6410: 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 0a 0a  dingState = 1;..
6420: 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
6430: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b  tatementIndex++;
6440: 0a 0a 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d  ..        stmt =
6450: 20 5f 63 6f 6d 6d 61 6e 64 2e 5f 73 74 61 74 65   _command._state
6460: 6d 65 6e 74 4c 69 73 74 5b 5f 61 63 74 69 76 65  mentList[_active
6470: 53 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 5d 3b  StatementIndex];
6480: 0a 20 20 20 20 20 20 20 20 66 69 65 6c 64 43 6f  .        fieldCo
6490: 75 6e 74 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 2e  unt = stmt._sql.
64a0: 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74  ColumnCount(stmt
64b0: 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 49  );..        // I
64c0: 66 20 77 65 27 72 65 20 74 6f 6c 64 20 74 6f 20  f we're told to 
64d0: 67 65 74 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  get schema infor
64e0: 6d 61 74 69 6f 6e 20 6f 6e 6c 79 2c 20 74 68 65  mation only, the
64f0: 6e 20 64 6f 6e 27 74 20 70 65 72 66 6f 72 6d 20  n don't perform 
6500: 61 6e 20 69 6e 69 74 69 61 6c 20 73 74 65 70 28  an initial step(
6510: 29 20 74 68 72 6f 75 67 68 20 74 68 65 20 72 65  ) through the re
6520: 73 75 6c 74 73 65 74 0a 20 20 20 20 20 20 20 20  sultset.        
6530: 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68  if ((_commandBeh
6540: 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42  avior & CommandB
6550: 65 68 61 76 69 6f 72 2e 53 63 68 65 6d 61 4f 6e  ehavior.SchemaOn
6560: 6c 79 29 20 3d 3d 20 30 20 7c 7c 20 66 69 65 6c  ly) == 0 || fiel
6570: 64 43 6f 75 6e 74 20 3d 3d 20 30 29 0a 20 20 20  dCount == 0).   
6580: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
6590: 20 69 66 20 28 73 74 6d 74 2e 5f 73 71 6c 2e 53   if (stmt._sql.S
65a0: 74 65 70 28 73 74 6d 74 29 29 0a 20 20 20 20 20  tep(stmt)).     
65b0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
65c0: 20 20 20 5f 72 65 61 64 69 6e 67 53 74 61 74 65     _readingState
65d0: 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 20   = -1;.         
65e0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73   }.          els
65f0: 65 20 69 66 20 28 66 69 65 6c 64 43 6f 75 6e 74  e if (fieldCount
6600: 20 3d 3d 20 30 29 20 2f 2f 20 4e 6f 20 72 6f 77   == 0) // No row
6610: 73 20 72 65 74 75 72 6e 65 64 2c 20 69 66 20 66  s returned, if f
6620: 69 65 6c 64 43 6f 75 6e 74 20 69 73 20 7a 65 72  ieldCount is zer
6630: 6f 2c 20 73 6b 69 70 20 74 6f 20 74 68 65 20 6e  o, skip to the n
6640: 65 78 74 20 73 74 61 74 65 6d 65 6e 74 0a 20 20  ext statement.  
6650: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
6660: 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 2e        stmt._sql.
6670: 52 65 73 65 74 28 73 74 6d 74 29 3b 0a 20 20 20  Reset(stmt);.   
6680: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
6690: 65 3b 20 2f 2f 20 53 6b 69 70 20 74 68 69 73 20  e; // Skip this 
66a0: 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 6d 6f 76 65  command and move
66b0: 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 69 74   to the next, it
66c0: 20 77 61 73 20 6e 6f 74 20 61 20 72 6f 77 2d 72   was not a row-r
66d0: 65 74 75 72 6e 69 6e 67 20 72 65 73 75 6c 74 73  eturning results
66e0: 65 74 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  et.          }. 
66f0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 2f 2f           else //
6700: 20 4e 6f 20 72 6f 77 73 2c 20 66 69 65 6c 64 43   No rows, fieldC
6710: 6f 75 6e 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  ount is non-zero
6720: 20 73 6f 20 73 74 6f 70 20 68 65 72 65 0a 20 20   so stop here.  
6730: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
6740: 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53 74        _readingSt
6750: 61 74 65 20 3d 20 31 3b 20 2f 2f 20 54 68 69 73  ate = 1; // This
6760: 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 65   command returne
6770: 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20 6e 6f  d columns but no
6780: 20 72 6f 77 73 2c 20 73 6f 20 72 65 74 75 72 6e   rows, so return
6790: 20 74 72 75 65 2c 20 62 75 74 20 48 61 73 52 6f   true, but HasRo
67a0: 77 73 20 3d 20 66 61 6c 73 65 20 61 6e 64 20 52  ws = false and R
67b0: 65 61 64 28 29 20 72 65 74 75 72 6e 73 20 66 61  ead() returns fa
67c0: 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  lse.          }.
67d0: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
67e0: 20 20 20 2f 2f 20 41 68 68 2c 20 77 65 20 66 6f     // Ahh, we fo
67f0: 75 6e 64 20 61 20 72 6f 77 2d 72 65 74 75 72 6e  und a row-return
6800: 69 6e 67 20 72 65 73 75 6c 74 73 65 74 20 65 6c  ing resultset el
6810: 69 67 69 62 6c 65 20 74 6f 20 62 65 20 72 65 74  igible to be ret
6820: 75 72 6e 65 64 21 0a 20 20 20 20 20 20 20 20 5f  urned!.        _
6830: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20  activeStatement 
6840: 3d 20 73 74 6d 74 3b 0a 20 20 20 20 20 20 20 20  = stmt;.        
6850: 5f 66 69 65 6c 64 43 6f 75 6e 74 20 3d 20 66 69  _fieldCount = fi
6860: 65 6c 64 43 6f 75 6e 74 3b 0a 20 20 20 20 20 20  eldCount;.      
6870: 20 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61    _fieldTypeArra
6880: 79 20 3d 20 6e 75 6c 6c 3b 0a 0a 20 20 20 20 20  y = null;..     
6890: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a     return true;.
68a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
68b0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
68c0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
68d0: 65 73 20 74 68 65 20 53 51 4c 69 74 65 54 79 70  es the SQLiteTyp
68e0: 65 20 66 6f 72 20 61 20 67 69 76 65 6e 20 63 6f  e for a given co
68f0: 6c 75 6d 6e 2c 20 61 6e 64 20 63 61 63 68 65 73  lumn, and caches
6900: 20 69 74 20 74 6f 20 61 76 6f 69 64 20 72 65 70   it to avoid rep
6910: 65 74 65 74 69 76 65 20 69 6e 74 65 72 6f 70 20  etetive interop 
6920: 63 61 6c 6c 73 2e 0a 20 20 20 20 2f 2f 2f 20 3c  calls..    /// <
6930: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
6940: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
6950: 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74  ">The index of t
6960: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
6970: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  rieve</param>.  
6980: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41    /// <returns>A
6990: 20 53 51 4c 69 74 65 54 79 70 65 20 73 74 72 75   SQLiteType stru
69a0: 63 74 75 72 65 3c 2f 72 65 74 75 72 6e 73 3e 0a  cture</returns>.
69b0: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
69c0: 74 65 54 79 70 65 20 47 65 74 53 51 4c 69 74 65  teType GetSQLite
69d0: 54 79 70 65 28 69 6e 74 20 69 29 0a 20 20 20 20  Type(int i).    
69e0: 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  {.      CheckClo
69f0: 73 65 64 28 29 3b 0a 20 20 20 20 20 20 69 66 20  sed();.      if 
6a00: 28 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79  (_fieldTypeArray
6a10: 20 3d 3d 20 6e 75 6c 6c 29 20 5f 66 69 65 6c 64   == null) _field
6a20: 54 79 70 65 41 72 72 61 79 20 3d 20 6e 65 77 20  TypeArray = new 
6a30: 53 51 4c 69 74 65 54 79 70 65 5b 5f 66 69 65 6c  SQLiteType[_fiel
6a40: 64 43 6f 75 6e 74 5d 3b 0a 0a 20 20 20 20 20 20  dCount];..      
6a50: 69 66 20 28 5f 66 69 65 6c 64 54 79 70 65 41 72  if (_fieldTypeAr
6a60: 72 61 79 5b 69 5d 2e 41 66 66 69 6e 69 74 79 20  ray[i].Affinity 
6a70: 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20 5f 66  == 0).        _f
6a80: 69 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d  ieldTypeArray[i]
6a90: 2e 54 79 70 65 20 3d 20 53 51 4c 69 74 65 43 6f  .Type = SQLiteCo
6aa0: 6e 76 65 72 74 2e 54 79 70 65 4e 61 6d 65 54 6f  nvert.TypeNameTo
6ab0: 44 62 54 79 70 65 28 5f 61 63 74 69 76 65 53 74  DbType(_activeSt
6ac0: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c  atement._sql.Col
6ad0: 75 6d 6e 54 79 70 65 28 5f 61 63 74 69 76 65 53  umnType(_activeS
6ae0: 74 61 74 65 6d 65 6e 74 2c 20 69 2c 20 6f 75 74  tatement, i, out
6af0: 20 5f 66 69 65 6c 64 54 79 70 65 41 72 72 61 79   _fieldTypeArray
6b00: 5b 69 5d 2e 41 66 66 69 6e 69 74 79 29 29 3b 0a  [i].Affinity));.
6b10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 69        return _fi
6b20: 65 6c 64 54 79 70 65 41 72 72 61 79 5b 69 5d 3b  eldTypeArray[i];
6b30: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
6b40: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
6b50: 2f 20 52 65 61 64 73 20 74 68 65 20 6e 65 78 74  / Reads the next
6b60: 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 72 65   row from the re
6b70: 73 75 6c 74 73 65 74 0a 20 20 20 20 2f 2f 2f 20  sultset.    /// 
6b80: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
6b90: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65  // <returns>True
6ba0: 20 69 66 20 61 20 6e 65 77 20 72 6f 77 20 77 61   if a new row wa
6bb0: 73 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 6c  s successfully l
6bc0: 6f 61 64 65 64 20 61 6e 64 20 69 73 20 72 65 61  oaded and is rea
6bd0: 64 79 20 66 6f 72 20 70 72 6f 63 65 73 73 69 6e  dy for processin
6be0: 67 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  g</returns>.    
6bf0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
6c00: 62 6f 6f 6c 20 52 65 61 64 28 29 0a 20 20 20 20  bool Read().    
6c10: 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f  {.      CheckClo
6c20: 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66  sed();..      if
6c30: 20 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20   (_readingState 
6c40: 3d 3d 20 2d 31 29 20 2f 2f 20 46 69 72 73 74 20  == -1) // First 
6c50: 73 74 65 70 20 77 61 73 20 61 6c 72 65 61 64 79  step was already
6c60: 20 64 6f 6e 65 20 61 74 20 74 68 65 20 4e 65 78   done at the Nex
6c70: 74 52 65 73 75 6c 74 28 29 20 6c 65 76 65 6c 2c  tResult() level,
6c80: 20 73 6f 20 64 6f 6e 27 74 20 73 74 65 70 20 61   so don't step a
6c90: 67 61 69 6e 2c 20 6a 75 73 74 20 72 65 74 75 72  gain, just retur
6ca0: 6e 20 74 72 75 65 2e 0a 20 20 20 20 20 20 7b 0a  n true..      {.
6cb0: 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67          _reading
6cc0: 53 74 61 74 65 20 3d 20 30 3b 0a 20 20 20 20 20  State = 0;.     
6cd0: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a     return true;.
6ce0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 65 6c        }.      el
6cf0: 73 65 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53  se if (_readingS
6d00: 74 61 74 65 20 3d 3d 20 30 29 20 2f 2f 20 41 63  tate == 0) // Ac
6d10: 74 69 76 65 6c 79 20 72 65 61 64 69 6e 67 20 72  tively reading r
6d20: 6f 77 73 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  ows.      {.    
6d30: 20 20 20 20 69 66 20 28 5f 61 63 74 69 76 65 53      if (_activeS
6d40: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 53 74  tatement._sql.St
6d50: 65 70 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  ep(_activeStatem
6d60: 65 6e 74 29 20 3d 3d 20 74 72 75 65 29 0a 20 20  ent) == true).  
6d70: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
6d80: 72 75 65 3b 0a 0a 20 20 20 20 20 20 20 20 5f 72  rue;..        _r
6d90: 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b  eadingState = 1;
6da0: 20 2f 2f 20 46 69 6e 69 73 68 65 64 20 72 65 61   // Finished rea
6db0: 64 69 6e 67 20 72 6f 77 73 0a 20 20 20 20 20 20  ding rows.      
6dc0: 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  }..      return 
6dd0: 66 61 6c 73 65 3b 0a 20 20 20 20 7d 0a 0a 20 20  false;.    }..  
6de0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
6df0: 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65      /// Retrieve
6e00: 20 74 68 65 20 63 6f 75 6e 74 20 6f 66 20 72 65   the count of re
6e10: 63 6f 72 64 73 20 61 66 66 65 63 74 65 64 20 62  cords affected b
6e20: 79 20 61 6e 20 75 70 64 61 74 65 2f 69 6e 73 65  y an update/inse
6e30: 72 74 20 63 6f 6d 6d 61 6e 64 2e 20 20 4f 6e 6c  rt command.  Onl
6e40: 79 20 76 61 6c 69 64 20 6f 6e 63 65 20 74 68 65  y valid once the
6e50: 20 64 61 74 61 20 72 65 61 64 65 72 20 69 73 20   data reader is 
6e60: 63 6c 6f 73 65 64 21 0a 20 20 20 20 2f 2f 2f 20  closed!.    /// 
6e70: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70  </summary>.    p
6e80: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
6e90: 6e 74 20 52 65 63 6f 72 64 73 41 66 66 65 63 74  nt RecordsAffect
6ea0: 65 64 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  ed.    {.      g
6eb0: 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 72 6f 77  et { return _row
6ec0: 73 41 66 66 65 63 74 65 64 3b 20 7d 0a 20 20 20  sAffected; }.   
6ed0: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
6ee0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e  mary>.    /// In
6ef0: 64 65 78 65 72 20 74 6f 20 72 65 74 72 69 65 76  dexer to retriev
6f00: 65 20 64 61 74 61 20 66 72 6f 6d 20 61 20 63 6f  e data from a co
6f10: 6c 75 6d 6e 20 67 69 76 65 6e 20 69 74 73 20 6e  lumn given its n
6f20: 61 6d 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ame.    /// </su
6f30: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
6f40: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65  param name="name
6f50: 22 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  ">The name of th
6f60: 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72  e column to retr
6f70: 69 65 76 65 20 64 61 74 61 20 66 6f 72 3c 2f 70  ieve data for</p
6f80: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
6f90: 65 74 75 72 6e 73 3e 54 68 65 20 76 61 6c 75 65  eturns>The value
6fa0: 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
6fb0: 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
6fc0: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
6fd0: 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 74 68  erride object th
6fe0: 69 73 5b 73 74 72 69 6e 67 20 6e 61 6d 65 5d 0a  is[string name].
6ff0: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20      {.      get 
7000: 7b 20 72 65 74 75 72 6e 20 47 65 74 56 61 6c 75  { return GetValu
7010: 65 28 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d  e(GetOrdinal(nam
7020: 65 29 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  e)); }.    }..  
7030: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
7040: 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72 20      /// Indexer 
7050: 74 6f 20 72 65 74 72 69 65 76 65 20 64 61 74 61  to retrieve data
7060: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 67   from a column g
7070: 69 76 65 6e 20 69 74 73 20 69 0a 20 20 20 20 2f  iven its i.    /
7080: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
7090: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
70a0: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
70b0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
70c0: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
70d0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
70e0: 6e 73 3e 54 68 65 20 76 61 6c 75 65 20 63 6f 6e  ns>The value con
70f0: 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f  tained in the co
7100: 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  lumn</returns>. 
7110: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
7120: 64 65 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 69  de object this[i
7130: 6e 74 20 69 5d 0a 20 20 20 20 7b 0a 20 20 20 20  nt i].    {.    
7140: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 47    get { return G
7150: 65 74 56 61 6c 75 65 28 69 29 3b 20 7d 0a 20 20  etValue(i); }.  
7160: 20 20 7d 0a 20 20 7d 0a 7d 0a                      }.  }.}.