* RecordCache.cs: Reduce some extraneous nesting.
[mono.git] / mcs / class / System.Data / System.Data.Common / DbDataReader.cs
index ba0d2fab0c5d39127507db1fd6c66b50a33fee0c..7d046978a41ca66e73a53f66a106efa4ae174289 100644 (file)
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_2_0
+#if NET_2_0 || TARGET_JVM
 
 using System.Collections;
+using System.ComponentModel;
 using System.Data;
 
 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
 
@@ -55,32 +56,50 @@ namespace System.Data.Common {
                public abstract object this [int index] { get; }
                public abstract object this [string name] { get; }
                public abstract int RecordsAffected { get; }
-               public abstract int VisibleFieldCount { get; }
 
+#if NET_2_0
+               public virtual int VisibleFieldCount {
+                       get { return FieldCount; }
+               }
+#endif
                #endregion // Properties
 
                #region Methods
 
                public abstract void Close ();
-               public abstract void Dispose ();
                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);
 
-               [MonoTODO]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public void Dispose ()
+               {
+                       Dispose (true); 
+               }
+               
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (disposing)
+                               Close ();
+               }
+#if NET_2_0
+               [EditorBrowsable (EditorBrowsableState.Never)]
                public DbDataReader GetData (int i)
                {
-                       throw new NotImplementedException ();
+                       return ((DbDataReader) this [i]);
                }
+#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);
+
+               [EditorBrowsable (EditorBrowsableState.Never)]
                public abstract IEnumerator GetEnumerator ();
-               public abstract Type GetFieldProviderSpecificType (int i);
+
                public abstract Type GetFieldType (int i);
                public abstract float GetFloat (int i);
                public abstract Guid GetGuid (int i);
@@ -89,8 +108,32 @@ namespace System.Data.Common {
                public abstract long GetInt64 (int i);
                public abstract string GetName (int i);
                public abstract int GetOrdinal (string name);
-               public abstract object GetProviderSpecificValue (int i);
-               public abstract int GetProviderSpecificValues (object[] values);
+
+#if NET_2_0
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public virtual Type GetProviderSpecificFieldType (int i)
+               {
+                       return GetFieldType (i);
+               }
+
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public virtual object GetProviderSpecificValue (int i)
+               {
+                       return GetValue (i);
+               }
+
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public virtual int GetProviderSpecificValues (object[] values)
+               {
+                       return GetValues (values);
+               }
+       
+               protected virtual DbDataReader GetDbDataReader (int ordinal)
+               {
+                       return ((DbDataReader) this [ordinal]);
+               }
+#endif 
+
                public abstract DataTable GetSchemaTable ();
                public abstract string GetString (int i);
                public abstract object GetValue (int i);
@@ -105,8 +148,44 @@ namespace System.Data.Common {
                public abstract bool NextResult ();
                public abstract bool Read ();
 
+                internal static DataTable GetSchemaTableTemplate ()
+               {
+                       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);
+
+                       return schemaTable;
+               }
+
                #endregion // Methods
        }
 }
 
-#endif // NET_2_0
+#endif