db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David W. Van Couvering" <David.Vancouver...@Sun.COM>
Subject Re: [jira] Updated: (DERBY-795) After calling ResultSet.relative(0) the cursor loses its position
Date Thu, 09 Feb 2006 23:54:45 GMT
Made this a comment on the JIRA issue, but emailing directly too:

===

Hi, Andreas, this fix *looks* good, but it would be nice to see a test 
come with it, both so that the committer can verify that everything 
works better with the patch, and also to increase our test code coverage.

Since you included test code that demonstrates this bug, it shouldn't be 
too hard to integrate to an existing JDBC test...

Thanks,

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
> 
> 

Mime
View raw message