David W. Van Couvering wrote:
I agree they should be submitted as independent patches. But they should also be committable independently.


They are committable independently, however it is a good idea to commit the patches incrementally, as they were submitted:

1. Review and commit DERBY-918. Test with existing junit tests

2. Review and commit DERBY-934. Test using junit.textui.TestRunner or by using the feature provided in DERBY-918.

3. Review and commit 795. Test using existing junit tests (934)


I can't verify DERBY-918 without a test that works with the .junit test type. That's provided in DERBY-934. Why not provide a simple sanity Junit test with this patch that I can use to verify?


I agree that it would be great to have a simple sanity junit test.
The feature DERBY-918 is the ability to launch a junit test from the old harness, without having to make a new main method for every junit test.

It can be tested with the old junit tests. The fact that the old tests fails, (due to the fact that they were never designed to run in junit.textui.TestRunner), do not make them valueless in terms of verifying the feature.

Then, I can't verify DERBY-795 is fixed without applying and running the tests in DERBY-934. It would be great if DERBY-795 included a test that verifies it is fixed as part of the patch.


DERBY-795 comes with a test in the description. It is not part of the patch, since I know this will be tested as part of another patch.

DERBY-934 can be run directly from junit.textui.TestRunner's main, and can therefore be verified without DERBY-918.

That would make them *truly* independent, not just in terms of what they are about, but in terms of the ability of the committer to review and test them independently.


I do not see how it affects the committers ability to review the patches independently. Huge patches with a lot of soon-to-be obsolete code, is harder to review than small patches, which can be reviewed and committed incrementally.


Andreas

David

Andreas Korneliussen wrote:

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