Merge pull request #439 from mono-soc-2012/garyb/iconfix
[mono.git] / mcs / class / System.Data / System.Data.Common / DbDataReader.cs
index 03a35de427c0058933a0f8aef994a705c333b988..676fd1404f6872a64f2250086d0f4bc0887c95bf 100644 (file)
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_2_0 || TARGET_JVM
-
 using System.Collections;
+using System.ComponentModel;
 using System.Data;
+using System.IO;
+
+#if NET_4_5
+using System.Threading;
+using System.Threading.Tasks;
+#endif
 
 namespace System.Data.Common {
-       public abstract class DbDataReader : MarshalByRefObject, IDataReader, IDataReader2, IDataRecord, IDataRecord2, IDisposable, IEnumerable
+       public abstract class DbDataReader : MarshalByRefObject, IDataReader, IDataRecord, IDisposable, IEnumerable
        {
                #region Constructors
 
@@ -52,133 +57,202 @@ namespace System.Data.Common {
                public abstract int FieldCount { get; }
                public abstract bool HasRows { get; }
                public abstract bool IsClosed { get; }
-               public abstract object this [int index] { get; }
+               public abstract object this [int ordinal] { get; }
                public abstract object this [string name] { get; }
                public abstract int RecordsAffected { get; }
+
 #if NET_2_0
-               public abstract int VisibleFieldCount { get; }
+               public virtual int VisibleFieldCount {
+                       get { return FieldCount; }
+               }
 #endif
-
                #endregion // Properties
 
                #region Methods
 
                public abstract void Close ();
-               public abstract bool GetBoolean (int i);
-               public abstract byte GetByte (int i);
-               public abstract long GetBytes (int i, long fieldOffset, byte[] buffer, int bufferOffset, int length);
-               public abstract char GetChar (int i);
-               public abstract long GetChars (int i, long dataIndex, char[] buffer, int bufferIndex, int length);
-               public virtual void Dispose ()
+               public abstract bool GetBoolean (int ordinal);
+               public abstract byte GetByte (int ordinal);
+               public abstract long GetBytes (int ordinal, long dataOffset, byte[] buffer, int bufferOffset, int length);
+               public abstract char GetChar (int ordinal);
+               public abstract long GetChars (int ordinal, long dataOffset, char[] buffer, int bufferOffset, int length);
+
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public void Dispose ()
                {
                        Dispose (true); 
                }
                
-               [MonoTODO]
                protected virtual void Dispose (bool disposing)
                {
-                       throw new NotImplementedException ();
+                       if (disposing)
+                               Close ();
                }
 #if NET_2_0
-               [MonoTODO]
-               public DbDataReader GetData (int i)
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public DbDataReader GetData (int ordinal)
                {
-                       throw new NotImplementedException ();
+                       return ((DbDataReader) this [ordinal]);
                }
 #endif
 
-               public abstract string GetDataTypeName (int i);
-               public abstract DateTime GetDateTime (int i);
-               public abstract decimal GetDecimal (int i);
-               public abstract double GetDouble (int i);
+               public abstract string GetDataTypeName (int ordinal);
+               public abstract DateTime GetDateTime (int ordinal);
+               public abstract decimal GetDecimal (int ordinal);
+               public abstract double GetDouble (int ordinal);
+
+               [EditorBrowsable (EditorBrowsableState.Never)]
                public abstract IEnumerator GetEnumerator ();
-               public abstract Type GetFieldType (int i);
-               public abstract float GetFloat (int i);
-               public abstract Guid GetGuid (int i);
-               public abstract short GetInt16 (int i);
-               public abstract int GetInt32 (int i);
-               public abstract long GetInt64 (int i);
-               public abstract string GetName (int i);
+
+               public abstract Type GetFieldType (int ordinal);
+               public abstract float GetFloat (int ordinal);
+               public abstract Guid GetGuid (int ordinal);
+               public abstract short GetInt16 (int ordinal);
+               public abstract int GetInt32 (int ordinal);
+               public abstract long GetInt64 (int ordinal);
+               public abstract string GetName (int ordinal);
                public abstract int GetOrdinal (string name);
 
 #if NET_2_0
-               [MonoTODO]
-               public virtual Type GetProviderSpecificFieldType (int i)
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public virtual Type GetProviderSpecificFieldType (int ordinal)
                {
-                       throw new NotImplementedException ();
+                       return GetFieldType (ordinal);
                }
 
-               [MonoTODO]
-               public virtual object GetProviderSpecificValue (int i)
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public virtual object GetProviderSpecificValue (int ordinal)
                {
-                       throw new NotImplementedException ();
+                       return GetValue (ordinal);
                }
 
-               [MonoTODO]
+               [EditorBrowsable (EditorBrowsableState.Never)]
                public virtual int GetProviderSpecificValues (object[] values)
                {
-                       throw new NotImplementedException ();
+                       return GetValues (values);
                }
        
-               [MonoTODO]
-               public virtual int GetDbDataReader (int ordinal)
+               protected virtual DbDataReader GetDbDataReader (int ordinal)
                {
-                       throw new NotImplementedException ();
+                       return ((DbDataReader) this [ordinal]);
                }
 #endif 
 
                public abstract DataTable GetSchemaTable ();
-               public abstract string GetString (int i);
-               public abstract object GetValue (int i);
+               public abstract string GetString (int ordinal);
+               public abstract object GetValue (int ordinal);
                public abstract int GetValues (object[] values);
 
-               IDataReader IDataRecord.GetData (int i)
+               IDataReader IDataRecord.GetData (int ordinal)
                {
-                       return ((IDataReader) this).GetData (i);
+                       return ((IDataReader) this).GetData (ordinal);
                }
 
-               public abstract bool IsDBNull (int i);
+               public abstract bool IsDBNull (int ordinal);
                public abstract bool NextResult ();
                public abstract bool Read ();
 
                 internal static DataTable GetSchemaTableTemplate ()
                {
-                       Type booleanType        = Type.GetType ("System.Boolean");
-                       Type stringType         = Type.GetType ("System.String");
-                       Type intType            = Type.GetType ("System.Int32");
-                       Type typeType           = Type.GetType ("System.Type");
-                       Type shortType          = Type.GetType ("System.Int16");
+                       Type booleanType = typeof (bool);
+                       Type stringType = typeof (string);
+                       Type intType = typeof (int);
+                       Type typeType = typeof (Type);
+                       Type shortType = typeof (short);
 
                        DataTable schemaTable = new DataTable ("SchemaTable");
-                       schemaTable.Columns.Add ("ColumnName",          stringType);
-                       schemaTable.Columns.Add ("ColumnOrdinal",       intType);
-                       schemaTable.Columns.Add ("ColumnSize",          intType);
-                       schemaTable.Columns.Add ("NumericPrecision",    shortType);
-                       schemaTable.Columns.Add ("NumericScale",        shortType);
-                       schemaTable.Columns.Add ("IsUnique",            booleanType);
-                       schemaTable.Columns.Add ("IsKey",               booleanType);
-                       schemaTable.Columns.Add ("BaseServerName",      stringType);
-                       schemaTable.Columns.Add ("BaseCatalogName",     stringType);
-                       schemaTable.Columns.Add ("BaseColumnName",      stringType);
-                       schemaTable.Columns.Add ("BaseSchemaName",      stringType);
-                       schemaTable.Columns.Add ("BaseTableName",       stringType);
-                       schemaTable.Columns.Add ("DataType",            typeType);
-                       schemaTable.Columns.Add ("AllowDBNull",         booleanType);
-                       schemaTable.Columns.Add ("ProviderType",        intType);
-                       schemaTable.Columns.Add ("IsAliased",           booleanType);
-                       schemaTable.Columns.Add ("IsExpression",        booleanType);
-                       schemaTable.Columns.Add ("IsIdentity",          booleanType);
-                       schemaTable.Columns.Add ("IsAutoIncrement",     booleanType);
-                       schemaTable.Columns.Add ("IsRowVersion",        booleanType);
-                       schemaTable.Columns.Add ("IsHidden",            booleanType);
-                       schemaTable.Columns.Add ("IsLong",              booleanType);
-                       schemaTable.Columns.Add ("IsReadOnly",          booleanType);
+                       schemaTable.Columns.Add ("ColumnName",       stringType);
+                       schemaTable.Columns.Add ("ColumnOrdinal",    intType);
+                       schemaTable.Columns.Add ("ColumnSize",       intType);
+                       schemaTable.Columns.Add ("NumericPrecision", shortType);
+                       schemaTable.Columns.Add ("NumericScale",     shortType);
+                       schemaTable.Columns.Add ("IsUnique",         booleanType);
+                       schemaTable.Columns.Add ("IsKey",            booleanType);
+                       schemaTable.Columns.Add ("BaseServerName",   stringType);
+                       schemaTable.Columns.Add ("BaseCatalogName",  stringType);
+                       schemaTable.Columns.Add ("BaseColumnName",   stringType);
+                       schemaTable.Columns.Add ("BaseSchemaName",   stringType);
+                       schemaTable.Columns.Add ("BaseTableName",    stringType);
+                       schemaTable.Columns.Add ("DataType",         typeType);
+                       schemaTable.Columns.Add ("AllowDBNull",      booleanType);
+                       schemaTable.Columns.Add ("ProviderType",     intType);
+                       schemaTable.Columns.Add ("IsAliased",        booleanType);
+                       schemaTable.Columns.Add ("IsExpression",     booleanType);
+                       schemaTable.Columns.Add ("IsIdentity",       booleanType);
+                       schemaTable.Columns.Add ("IsAutoIncrement",  booleanType);
+                       schemaTable.Columns.Add ("IsRowVersion",     booleanType);
+                       schemaTable.Columns.Add ("IsHidden",         booleanType);
+                       schemaTable.Columns.Add ("IsLong",           booleanType);
+                       schemaTable.Columns.Add ("IsReadOnly",       booleanType);
 
                        return schemaTable;
                }
+               
+#if NET_4_5
+               [MonoTODO]
+               public virtual T GetFieldValue<T> (int i)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               public Task<T> GetFieldValueAsync<T> (int ordinal)
+               {
+                       return GetFieldValueAsync<T> (ordinal, CancellationToken.None);
+               }
+               
+               [MonoTODO]
+               public virtual Task<T> GetFieldValueAsync<T> (int ordinal, CancellationToken cancellationToken)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public Task<bool> NextResultAsync ()
+               {
+                       return NextResultAsync (CancellationToken.None);
+               }
+               
+               public Task<bool> IsDBNullAsync (int ordinal)
+               {
+                       return IsDBNullAsync (ordinal, CancellationToken.None);
+               }
+
+               [MonoTODO]
+               public virtual Stream GetStream (int i)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               [MonoTODO]
+               public virtual TextReader GetTextReader (int i)
+               {
+                       throw new NotImplementedException ();   
+               }
+
+               [MonoTODO]
+               public virtual Task<bool> IsDBNullAsync (int ordinal, CancellationToken cancellationToken)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               [MonoTODO]
+               public virtual Task<bool> NextResultAsync (CancellationToken cancellationToken)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public Task<bool> ReadAsync ()
+               {
+                       return ReadAsync (CancellationToken.None);
+               }
+               
+               [MonoTODO]
+               public virtual Task<bool> ReadAsync (CancellationToken cancellationToken)
+               {
+                       throw new NotImplementedException ();
+               }
+#endif
 
                #endregion // Methods
        }
 }
 
-#endif