Skip site navigation (1) Skip section navigation (2)

Re: [PATCHES] absolute() error with jdbc7.1-1.2

From: Barry Lind <barry(at)xythos(dot)com>
To: Liam Stewart <liams(at)redhat(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org, pgsql-patches(at)postgresql(dot)org
Subject: Re: [PATCHES] absolute() error with jdbc7.1-1.2
Date: 2001-11-14 04:11:47
Message-ID: 3BF1EF03.8040905@xythos.com (view raw or flat)
Thread:
Lists: pgsql-jdbcpgsql-patches
Liam,

I reviewed and applied your patch.  It will be in beta3.

thanks,
--Barry

Liam Stewart wrote:

> Attached is a patch against the CVS repository that fixes the problem.
> There's also a little fix for the getRow() method. While fixing
> absolute(), I noticed that getRow() wasn't quite following the spec: it
> wasn't returning 0 when the ResultSet wasn't positioned on a row.  I've
> started a ResultSet test case and included it as well.
> 
> Liam
> 
> On Mon, Nov 12, 2001 at 10:53:45AM -0800, Robert Down wrote:
> 
>>with the lasttest driver, I can't use absolute() according to the spec.
>>
>>index = -1;
>>rs.absolute(index);      
>>
>>What it currently does:
>>java.lang.ArrayIndexOutOfBoundsException: -2 < 0
>>
>>
>>What it should do according to the spec:
>>========================================
>>public boolean absolute(int row)
>>                 throws SQLExceptionMoves the cursor to the given row number 
>>in this ResultSet object. 
>>
>>If the row number is positive, the cursor moves to the given row number with 
>>respect to the beginning of the result set. The first row is row 1, the 
>>second is row 2, and so on. 
>>
>>If the given row number is negative, the cursor moves to an absolute row 
>>position with respect to the end of the result set. For example, calling the 
>>method absolute(-1) positions the cursor on the last row; calling the method 
>>absolute(-2) moves the cursor to the next-to-last row, and so on. 
>>
>>An attempt to position the cursor beyond the first/last row in the result set 
>>leaves the cursor before the first row or after the last row. 
>>===========================================
>>
>>Please note the important fact that you can use (-1) as a position.  This is 
>>very important.
>>
>>Thanks!
>>
>>---------------------------(end of broadcast)---------------------------
>>TIP 3: if posting/reading through Usenet, please send an appropriate
>>subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
>>message can get through to the mailing list cleanly
>>
> 
> 
> ------------------------------------------------------------------------
> 
> package org.postgresql.test.jdbc2;
> 
> import org.postgresql.test.JDBC2Tests;
> import junit.framework.TestCase;
> import java.io.*;
> import java.sql.*;
> 
> /**
>  * ResultSet tests.
>  */
> public class ResultSetTest extends TestCase
> {
> 	private Connection con;
> 
> 	public ResultSetTest(String name)
> 	{
> 		super(name);
> 	}
> 
> 	protected void setUp() throws Exception
> 	{
> 		con = JDBC2Tests.openDB();
> 		Statement stmt = con.createStatement();
> 		
> 		JDBC2Tests.createTable(con, "testrs", "id integer");
> 
> 		stmt.executeUpdate("INSERT INTO testrs VALUES (1)");
> 		stmt.executeUpdate("INSERT INTO testrs VALUES (2)");
> 		stmt.executeUpdate("INSERT INTO testrs VALUES (3)");
> 		stmt.executeUpdate("INSERT INTO testrs VALUES (4)");
> 		stmt.executeUpdate("INSERT INTO testrs VALUES (6)");
> 		stmt.executeUpdate("INSERT INTO testrs VALUES (9)");
> 
> 		stmt.close();
> 	}
> 
> 	protected void tearDown() throws Exception
> 	{
> 		JDBC2Tests.dropTable(con, "testrs");
> 		JDBC2Tests.closeDB(con);
> 	}
> 
> 	public void testAbsolute() throws Exception
> 	{
> 		Statement stmt = con.createStatement();
> 		ResultSet rs = stmt.executeQuery("SELECT * FROM testrs");
> 		
> 		assertTrue(rs.absolute(-1));
> 		assertEquals(6, rs.getRow());
> 
> 		assertTrue(rs.absolute(1));
> 		assertEquals(1, rs.getRow());
> 
> 		assertTrue(!rs.absolute(-10));
> 		assertEquals(0, rs.getRow());
>  		assertTrue(rs.next());
>  		assertEquals(1, rs.getRow());
> 
> 		assertTrue(!rs.absolute(10));
> 		assertEquals(0, rs.getRow());
> 		assertTrue(rs.previous());
> 		assertEquals(6, rs.getRow());
> 		
> 		stmt.close();
> 	}
> }
> 
> 
> ------------------------------------------------------------------------
> 
> Index: src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java
> ===================================================================
> RCS file: /projects/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java,v
> retrieving revision 1.41
> diff -c -r1.41 ResultSet.java
> *** src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java	2001/11/12 19:59:46	1.41
> --- src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java	2001/11/13 21:22:01
> ***************
> *** 836,841 ****
> --- 836,842 ----
>   		//if index<0, count from the end of the result set, but check
>   		//to be sure that it is not beyond the first index
>   		if (index < 0)
> + 		{
>   			if (index >= -rows_size)
>   				internalIndex = rows_size + index;
>   			else
> ***************
> *** 843,858 ****
>   				beforeFirst();
>   				return false;
>   			}
> ! 
> ! 		//must be the case that index>0,
> ! 		//find the correct place, assuming that
> ! 		//the index is not too large
> ! 		if (index <= rows_size)
> ! 			internalIndex = index - 1;
>   		else
>   		{
> ! 			afterLast();
> ! 			return false;
>   		}
>   
>   		current_row = internalIndex;
> --- 844,862 ----
>   				beforeFirst();
>   				return false;
>   			}
> ! 		}
>   		else
>   		{
> ! 			//must be the case that index>0,
> ! 			//find the correct place, assuming that
> ! 			//the index is not too large
> ! 			if (index <= rows_size)
> ! 				internalIndex = index - 1;
> ! 			else
> ! 			{
> ! 				afterLast();
> ! 				return false;
> ! 			}
>   		}
>   
>   		current_row = internalIndex;
> ***************
> *** 1074,1079 ****
> --- 1078,1088 ----
>   
>   	public int getRow() throws SQLException
>   	{
> + 		final int rows_size = rows.size();
> + 
> + 		if (current_row < 0 || current_row >= rows_size)
> + 			return 0;
> + 		
>   		return current_row + 1;
>   	}
>   
> Index: src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java
> ===================================================================
> RCS file: /projects/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java,v
> retrieving revision 1.8
> diff -c -r1.8 JDBC2Tests.java
> *** src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java	2001/10/25 05:59:59	1.8
> --- src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java	2001/11/13 21:22:01
> ***************
> *** 205,210 ****
> --- 205,211 ----
>   		// Connectivity/Protocols
>   
>   		// ResultSet
> + 		suite.addTestSuite(ResultSetTest.class);
>   
>   		// Time, Date, Timestamp
>   		suite.addTestSuite(DateTest.class);
> 
> 
> ------------------------------------------------------------------------
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
> message can get through to the mailing list cleanly
> 



In response to

Responses

pgsql-patches by date

Next:From: Bill StudenmundDate: 2001-11-14 07:19:56
Subject: Re: Patch to add Heimdal kerberos support
Previous:From: Bill StudenmundDate: 2001-11-14 02:48:52
Subject: Re: Patch to add Heimdal kerberos support

pgsql-jdbc by date

Next:From: Antonio Fiol BonnĂ­nDate: 2001-11-14 08:17:59
Subject: Re: [GENERAL] Storing a tree
Previous:From: Barry LindDate: 2001-11-14 03:27:04
Subject: Re: jdbc 7.2b1 question...

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group