db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David Van Couvering (JIRA)" <derby-...@db.apache.org>
Subject [jira] Commented: (DERBY-795) After calling ResultSet.relative(0) the cursor loses its position
Date Thu, 09 Feb 2006 23:55:56 GMT
    [ http://issues.apache.org/jira/browse/DERBY-795?page=comments#action_12365801 ] 

David Van Couvering commented on DERBY-795:
-------------------------------------------

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

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

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message