* Copyright (c) 2003, PostgreSQL Global Development Group
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/AbstractJdbc2ResultSet.java,v 1.25.2.5 2004/04/24 01:54:45 jurka Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/AbstractJdbc2ResultSet.java,v 1.25.2.6 2004/06/16 05:11:44 jurka Exp $
*
*-------------------------------------------------------------------------
*/
deleteStatement.executeUpdate();
rows.removeElementAt(current_row);
+ current_row--;
+ moveToCurrentRow();
}
public boolean rowDeleted() throws SQLException
{
- // only sub-classes implement CONCURuPDATEABLE
- throw Driver.notImplemented();
+ return false;
}
public boolean rowInserted() throws SQLException
{
- // only sub-classes implement CONCURuPDATEABLE
- throw Driver.notImplemented();
+ return false;
}
public boolean rowUpdated() throws SQLException
{
- // only sub-classes implement CONCURuPDATEABLE
- throw Driver.notImplemented();
+ return false;
}
{
throw new PSQLException( "postgresql.updateable.notupdateable" );
}
+ if (onInsertRow)
+ throw new PSQLException("postgresql.res.oninsertrow");
- try
- {
- StringBuffer selectSQL = new StringBuffer( "select ");
+ if (isBeforeFirst() || isAfterLast())
+ return;
- final int numColumns = java.lang.reflect.Array.getLength(fields);
+ StringBuffer selectSQL = new StringBuffer( "select ");
- for (int i = 0; i < numColumns; i++ )
- {
+ final int numColumns = java.lang.reflect.Array.getLength(fields);
- selectSQL.append( fields[i].getName() );
+ for (int i = 0; i < numColumns; i++ )
+ {
- if ( i < numColumns - 1 )
- {
+ selectSQL.append( fields[i].getName() );
- selectSQL.append(", ");
- }
+ if ( i < numColumns - 1 )
+ {
+ selectSQL.append(", ");
}
- selectSQL.append(" from " ).append(tableName).append(" where ");
- int numKeys = primaryKeys.size();
-
- for ( int i = 0; i < numKeys; i++ )
- {
+ }
+ selectSQL.append(" from " ).append(tableName).append(" where ");
- PrimaryKey primaryKey = ((PrimaryKey) primaryKeys.get(i));
- selectSQL.append(primaryKey.name).append("= ?");
+ int numKeys = primaryKeys.size();
- if ( i < numKeys - 1 )
- {
- selectSQL.append(" and ");
- }
- }
- if ( Driver.logDebug )
- Driver.debug("selecting " + selectSQL.toString());
- selectStatement = ((java.sql.Connection) connection).prepareStatement(selectSQL.toString());
+ for ( int i = 0; i < numKeys; i++ )
+ {
+ PrimaryKey primaryKey = ((PrimaryKey) primaryKeys.get(i));
+ selectSQL.append(primaryKey.name).append("= ?");
- for ( int j = 0, i = 1; j < numKeys; j++, i++)
+ if ( i < numKeys - 1 )
{
- selectStatement.setObject( i, ((PrimaryKey) primaryKeys.get(j)).getValue() );
+ selectSQL.append(" and ");
}
+ }
+ if ( Driver.logDebug )
+ Driver.debug("selecting " + selectSQL.toString());
+ selectStatement = ((java.sql.Connection) connection).prepareStatement(selectSQL.toString());
- AbstractJdbc2ResultSet rs = (AbstractJdbc2ResultSet) selectStatement.executeQuery();
-
- if ( rs.first() )
- {
- rowBuffer = rs.rowBuffer;
- }
- rows.setElementAt( rowBuffer, current_row );
- this_row = rowBuffer;
- if ( Driver.logDebug )
- Driver.debug("done updates");
+ for ( int j = 0, i = 1; j < numKeys; j++, i++)
+ {
+ selectStatement.setObject( i, ((PrimaryKey) primaryKeys.get(j)).getValue() );
+ }
- rs.close();
- selectStatement.close();
- selectStatement = null;
+ AbstractJdbc2ResultSet rs = (AbstractJdbc2ResultSet) selectStatement.executeQuery();
- }
- catch (Exception e)
+ if ( rs.first() )
{
- if ( Driver.logDebug )
- Driver.debug(e.getClass().getName() + e);
- throw new SQLException( e.getMessage() );
+ rowBuffer = rs.rowBuffer;
}
+ rows.setElementAt( rowBuffer, current_row );
+ this_row = rowBuffer;
+ if ( Driver.logDebug )
+ Driver.debug("done updates");
+
+ rs.close();
+ selectStatement.close();
+ selectStatement = null;
+
}
TestUtil.closeDB(con);
}
+ public void testDeleteRows() throws SQLException
+ {
+ Statement st = con.createStatement();
+ st.executeUpdate("INSERT INTO second values (2,'two')");
+ st.executeUpdate("INSERT INTO second values (3,'three')");
+ st.executeUpdate("INSERT INTO second values (4,'four')");
+ st.close();
+
+ st = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );
+ ResultSet rs = st.executeQuery( "select id1,name1 from second order by id1");
+
+ assertTrue(rs.next());
+ assertEquals(1, rs.getInt("id1"));
+ rs.deleteRow();
+ assertTrue(rs.isBeforeFirst());
+
+ assertTrue(rs.next());
+ assertTrue(rs.next());
+ assertEquals(3, rs.getInt("id1"));
+ rs.deleteRow();
+ assertEquals(2, rs.getInt("id1"));
+
+ rs.close();
+ st.close();
+ }
+
+
+
public void testCancelRowUpdates() throws Exception
{
Statement st = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );
- public void testUpdateable()
+ public void testUpdateable() throws SQLException
{
- try
- {
- Statement st = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );
- ResultSet rs = st.executeQuery( "select * from updateable");
- assertNotNull( rs );
- rs.moveToInsertRow();
- rs.updateInt( 1, 1 );
- rs.updateString( 2, "jake" );
- rs.updateString( 3, "avalue" );
- rs.insertRow();
- rs.first();
-
- rs.updateInt( "id", 2 );
- rs.updateString( "name", "dave" );
- rs.updateRow();
-
- assertTrue( rs.getInt("id") == 2 );
- assertTrue( rs.getString("name").equals("dave"));
- assertTrue( rs.getString("notselected").equals("avalue") );
-
- rs.deleteRow();
- rs.moveToInsertRow();
- rs.updateInt("id", 3);
- rs.updateString("name", "paul");
-
- rs.insertRow();
- rs.refreshRow();
- assertTrue( rs.getInt("id") == 3 );
- assertTrue( rs.getString("name").equals("paul"));
- assertTrue( rs.getString("notselected") == null );
+ Statement st = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );
+ ResultSet rs = st.executeQuery( "select * from updateable");
+ assertNotNull( rs );
+ rs.moveToInsertRow();
+ rs.updateInt( 1, 1 );
+ rs.updateString( 2, "jake" );
+ rs.updateString( 3, "avalue" );
+ rs.insertRow();
+ rs.first();
+ rs.updateInt( "id", 2 );
+ rs.updateString( "name", "dave" );
+ rs.updateRow();
- rs.close();
+ assertEquals(2, rs.getInt("id"));
+ assertEquals("dave", rs.getString("name"));
+ assertEquals("avalue", rs.getString("notselected"));
- rs = st.executeQuery("select id1, id, name, name1 from updateable, second" );
- try
- {
- while ( rs.next() )
- {
- rs.updateInt( "id", 2 );
- rs.updateString( "name", "dave" );
- rs.updateRow();
- }
+ rs.deleteRow();
+ rs.moveToInsertRow();
+ rs.updateInt("id", 3);
+ rs.updateString("name", "paul");
+ rs.insertRow();
- assertTrue( "should not get here, update should fail", false );
- }
- catch (SQLException ex)
- {}
+ try {
+ rs.refreshRow();
+ fail("Can't refresh when on the insert row.");
+ } catch (SQLException sqle) { }
- try
- {
- rs = st.executeQuery("select oid,* from updateable");
- if ( rs.first() )
- {
- rs.updateInt( "id", 3 );
- rs.updateString( "name", "dave3");
- rs.updateRow();
- assertTrue(rs.getInt("id") == 3 );
- assertTrue(rs.getString("name").equals("dave3"));
-
- rs.moveToInsertRow();
- rs.updateInt( "id", 4 );
- rs.updateString( "name", "dave4" );
-
- rs.insertRow();
- rs.updateInt("id", 5 );
- rs.updateString( "name", "dave5" );
- rs.insertRow();
-
- rs.moveToCurrentRow();
- assertTrue(rs.getInt("id") == 3 );
- assertTrue(rs.getString("name").equals("dave3"));
-
- assertTrue( rs.next() );
- assertTrue(rs.getInt("id") == 4 );
- assertTrue(rs.getString("name").equals("dave4"));
-
- assertTrue( rs.next() );
- assertTrue(rs.getInt("id") == 5 );
- assertTrue(rs.getString("name").equals("dave5"));
-
- }
- }
- catch (SQLException ex)
+ assertEquals(3, rs.getInt("id"));
+ assertEquals("paul", rs.getString("name"));
+ assertNull(rs.getString("notselected"));
+
+ rs.close();
+
+ rs = st.executeQuery("select id1, id, name, name1 from updateable, second" );
+ try
+ {
+ while ( rs.next() )
{
- fail(ex.getMessage());
+ rs.updateInt( "id", 2 );
+ rs.updateString( "name", "dave" );
+ rs.updateRow();
}
- st.close();
+ fail("should not get here, update should fail");
}
- catch (Exception ex)
- {
- ex.printStackTrace();
- fail(ex.getMessage());
- }
- }
+ catch (SQLException ex)
+ {}
+ rs = st.executeQuery("select oid,* from updateable");
+ assertTrue(rs.first());
+ rs.updateInt( "id", 3 );
+ rs.updateString( "name", "dave3");
+ rs.updateRow();
+ assertEquals(3, rs.getInt("id"));
+ assertEquals("dave3", rs.getString("name"));
+
+ rs.moveToInsertRow();
+ rs.updateInt( "id", 4 );
+ rs.updateString( "name", "dave4" );
+
+ rs.insertRow();
+ rs.updateInt("id", 5 );
+ rs.updateString( "name", "dave5" );
+ rs.insertRow();
+
+ rs.moveToCurrentRow();
+ assertEquals(3, rs.getInt("id"));
+ assertEquals("dave3", rs.getString("name"));
+
+ assertTrue( rs.next() );
+ assertEquals(4, rs.getInt("id"));
+ assertEquals("dave4", rs.getString("name"));
+
+ assertTrue( rs.next() );
+ assertEquals(5, rs.getInt("id"));
+ assertEquals("dave5", rs.getString("name"));
+
+ rs.close();
+ st.close();
+ }
}