David W. Van Couvering wrote:
Hi, Andreas. Upon further thought, once we work through the comments on DERBY-934 (still to come) I am going to go ahead and apply all these patches at once, no need for you to do extra work. But a request for next time to please try and keep your patches independent instead of interdependent.

That is great.
I think the patches are independent, however they are slightly related.

DERBY-918: a patch for improving the test harness

DERBY-934: a set of tests which can be run independentely using junit.textui.TestRunner or by using the test harness with patch 918

DERBY-795: a patch for a specific bug in derby. I did not submit extra tests for this, since it is covered in 934, however there is a simple java program there, which can be run to verify the fix and the bug

There are no compile dependencies between these patches. I think it was much better to submit these as independent patches, instead of in one huge patch.

Andreas


Thanks!

David

David W. Van Couvering wrote:

Hi, Andreas, your set of patches have a set of dependencies which are a little confusing at first, and ultimately somewhat intractable:

DERBY-795 is tested by DERBY-934
DERBY-934 can't be run without, and therefore depends upon, DERBY-918

I really can't just commit one of these patches at a time, it has to be all or none.

I really would like each of these patches stand on their own, or at a minimum don't submit a dependent patch until the patch it depends upon has been committed.

Here's what I would like to see:

DERBY-918 comes with its own sample unit test that verifies that the .junit test type works. Something very simple and easy.

DERBY-795 has its own test that comes with it, rather than being tested by DERBY-934

I have some comments on DERBY-934 too, I'll send these in a separate email.

Thanks,

David

David W. Van Couvering wrote:

Crud, I missed this comment somehow, I'll look at DERBY-934 again, I bet *both* my questions will be answered :)

I'll get back to you if I need anything else, Andreas.

David

Andreas Korneliussen (JIRA) wrote:

     [ http://issues.apache.org/jira/browse/DERBY-795?page=all ]

Andreas Korneliussen updated DERBY-795:
---------------------------------------

    Attachment: DERBY-795.diff
                DERBY-795.diff

Attached is a fix for this issue.
The problem is detected by the jdbcapi/SURQueryMix.junit test provided in DERBY-934, when running in embedded mode.


After calling ResultSet.relative(0) the cursor loses its position
-----------------------------------------------------------------

        Key: DERBY-795
        URL: http://issues.apache.org/jira/browse/DERBY-795
    Project: Derby
       Type: Bug
 Components: JDBC
   Versions: 10.1.2.1
Environment: Any
   Reporter: Andreas Korneliussen
   Assignee: Andreas Korneliussen
   Priority: Minor
Attachments: DERBY-795.diff, DERBY-795.diff

After calling rs.relative(0), on a scrollable ResultSet, the cursor looses its position, and a rs.getXXX(..) fails with:
SQL Exception: Invalid cursor state - no current row.
Probably caused by the following logic in ScrollInsensitiveResultSet.getRelativeRow(int row):
    // Return the current row for 0
        if (row == 0)
        {
                   if ((beforeFirst || afterLast) ||
                       (!beforeFirst && !afterLast)) {
                       return null;
                   } else {
            return getRowFromHashTable(currentPosition);
                   }
        }
The if () will always evaluate to true, regardless of the values of beforeFirst and afterLast
Test code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class RelativeZeroIssue {
          public static void main(String[] args) throws Exception {
              Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection con = DriverManager.getConnection("jdbc:derby:testdb2;create=true");
       con.setAutoCommit(false);
try { Statement statement = con.createStatement();
                      /** Create the table */
           statement.execute("create table t1(id int)");
           statement.execute("insert into t1 values 1,2,3,4,5,6,7,8");
Statement s = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                   ResultSet.CONCUR_READ_ONLY);
           ResultSet rs = s.executeQuery("select * from t1");
           rs.next();
           System.out.println(rs.getInt(1));
           System.out.println(rs.relative(0));
           System.out.println(rs.getInt(1));
       }  finally {
                      con.rollback();
           con.close();
       }
   }
}
Output from test:
1
false
Exception in thread "main" SQL Exception: Invalid cursor state - no current row. at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(Unknown Source) at org.apache.derby.impl.jdbc.ConnectionChild.newSQLException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedResultSet.checkOnRow(Unknown Source) at org.apache.derby.impl.jdbc.EmbedResultSet.getColumn(Unknown Source) at org.apache.derby.impl.jdbc.EmbedResultSet.getInt(Unknown Source)
       at derbytest.RelativeZeroIssue.main(RelativeZeroIssue.java:51)
Java Result: 1






Reply via email to