Author: suresh
Date: 2005-04-29 05:03:57 -0400 (Fri, 29 Apr 2005)
New Revision: 43774
Modified:
trunk/mcs/class/System.Data/System.Data/ChangeLog
trunk/mcs/class/System.Data/System.Data/DataTableReader.cs
trunk/mcs/class/System.Data/Test/System.Data/ChangeLog
trunk/mcs/class/System.Data/Test/System.Data/DataTableReaderTest.cs
Log:
2005-04-29 Sureshkumar T <[EMAIL PROTECTED]>
* Test/System.Data/DataTableReaderTest.cs: Added few more tests.
* System.Data/DataTableReader.cs: removed use of _first. throw if given
index
is out of range of columns.
Modified: trunk/mcs/class/System.Data/System.Data/ChangeLog
===================================================================
--- trunk/mcs/class/System.Data/System.Data/ChangeLog 2005-04-29 07:31:47 UTC
(rev 43773)
+++ trunk/mcs/class/System.Data/System.Data/ChangeLog 2005-04-29 09:03:57 UTC
(rev 43774)
@@ -1,3 +1,8 @@
+2005-04-29 Sureshkumar T <[EMAIL PROTECTED]>
+
+ * DataTableReader.cs: removed use of _first. throw if given index
+ is out of range of columns.
+
2005-04-27 Sureshkumar T <[EMAIL PROTECTED]>
* DataTableReader.cs: Implemented most of the TODO.
Modified: trunk/mcs/class/System.Data/System.Data/DataTableReader.cs
===================================================================
--- trunk/mcs/class/System.Data/System.Data/DataTableReader.cs 2005-04-29
07:31:47 UTC (rev 43773)
+++ trunk/mcs/class/System.Data/System.Data/DataTableReader.cs 2005-04-29
09:03:57 UTC (rev 43774)
@@ -42,8 +42,7 @@
bool _closed;
DataTable [] _tables;
IEnumerator _enumerator;
- bool _first = true;
- int _current = 0;
+ int _current = -1;
int _index;
DataTable _schemaTable;
@@ -64,7 +63,7 @@
this._tables = dataTables;
_closed = false;
_index = 0;
- _current = 0;
+ _current = -1;
}
#endregion // Constructors
@@ -76,11 +75,11 @@
}
public override int FieldCount {
- get { return _tables [_index].Columns.Count; }
+ get { return CurrentTable.Columns.Count; }
}
public override bool HasRows {
- get { return _tables [_index].Rows.Count > 0; }
+ get { return CurrentTable.Rows.Count > 0; }
}
public override bool IsClosed {
@@ -90,6 +89,11 @@
public override object this [int index] {
get {
Validate ();
+ if (index < 0 || index >= FieldCount)
+ throw new ArgumentOutOfRangeException
(String.Format ("index {0} is not" +
+
"in the range",
+
index)
+ );
DataRow row = CurrentRow;
if (row.RowState == DataRowState.Deleted)
throw new InvalidOperationException
("Deleted Row's information cannot be accessed!");
@@ -201,7 +205,7 @@
public override Type GetFieldType (int i)
{
- Validate ();
+ ValidateClosed ();
return CurrentTable.Columns [i].DataType;
}
@@ -237,7 +241,7 @@
public override int GetOrdinal (string name)
{
- Validate ();
+ ValidateClosed ();
DataColumn column = CurrentTable.Columns [name];
if (column == null)
throw new ArgumentException (String.Format
("Column {0} is not found in the schema",
@@ -312,11 +316,20 @@
private void Validate ()
{
+ ValidateClosed ();
+ if (_current == -1)
+ throw new InvalidOperationException ("Invalid
attempt to read before " +
+ "Read is
called");
+ }
+
+ private void ValidateClosed ()
+ {
if (IsClosed)
throw new InvalidOperationException ("Invalid
attempt to read when " +
"the
reader is closed");
}
+
private bool MoveNext ()
{
do {
@@ -328,23 +341,15 @@
public override bool NextResult ()
{
- _current = 0;
+ _current = -1;
_index++;
- _first = true;
_schemaTable = null; // force to create
fresh
return _index < _tables.Length;
}
public override bool Read ()
{
- Validate ();
- if (_first) {
- _first = false;
- if (! HasRows)
- return false;
- if (CurrentRow.RowState !=
DataRowState.Deleted)
- return true;
- }
+ ValidateClosed ();
return MoveNext ();
}
Modified: trunk/mcs/class/System.Data/Test/System.Data/ChangeLog
===================================================================
--- trunk/mcs/class/System.Data/Test/System.Data/ChangeLog 2005-04-29
07:31:47 UTC (rev 43773)
+++ trunk/mcs/class/System.Data/Test/System.Data/ChangeLog 2005-04-29
09:03:57 UTC (rev 43774)
@@ -1,3 +1,7 @@
+2005-04-29 Sureshkumar T <[EMAIL PROTECTED]>
+
+ * DataTableReaderTest.cs: Added few more tests.
+
2005-04-27 Sureshkumar T <[EMAIL PROTECTED]>
* DataTableReaderTest.cs: Added Tests for DataTableReader class.
Modified: trunk/mcs/class/System.Data/Test/System.Data/DataTableReaderTest.cs
===================================================================
--- trunk/mcs/class/System.Data/Test/System.Data/DataTableReaderTest.cs
2005-04-29 07:31:47 UTC (rev 43773)
+++ trunk/mcs/class/System.Data/Test/System.Data/DataTableReaderTest.cs
2005-04-29 09:03:57 UTC (rev 43774)
@@ -183,6 +183,14 @@
reader.Close ();
reader.Read ();
}
+
+ [Test]
+ public void GetOrdinalTest ()
+ {
+ DataTableReader reader = new DataTableReader (dt);
+ Assert.AreEqual (1, reader.GetOrdinal ("name"), "#1
get ordinal should work even" +
+ " without calling Read");
+ }
#endregion // Positive Tests
#region Negative Tests
@@ -205,6 +213,47 @@
DataTableReader reader = new DataTableReader (new
DataTable [] {});
reader.Read ();
}
+
+ [Test]
+ [ExpectedException (typeof (InvalidOperationException))]
+ public void ReadAfterClosedTest ()
+ {
+ DataTableReader reader = new DataTableReader (dt);
+ reader.Read ();
+ reader.Close ();
+ reader.Read ();
+ }
+
+ [Test]
+ [ExpectedException (typeof (InvalidOperationException))]
+ public void AccessAfterClosedTest ()
+ {
+ DataTableReader reader = new DataTableReader (dt);
+ reader.Read ();
+ reader.Close ();
+ int i = (int) reader [0];
+ i++; // to supress warning
+ }
+
+ [Test]
+ [ExpectedException (typeof (InvalidOperationException))]
+ public void AccessBeforeReadTest ()
+ {
+ DataTableReader reader = new DataTableReader (dt);
+ int i = (int) reader [0];
+ i++; // to supress warning
+ }
+
+ [Test]
+ [ExpectedException (typeof (ArgumentOutOfRangeException))]
+ public void InvalidIndexTest ()
+ {
+ DataTableReader reader = new DataTableReader (dt);
+ reader.Read ();
+ int i = (int) reader [90]; // kidding, ;-)
+ i++; // to supress warning
+ }
+
#endregion // Negative Tests
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches