diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/UpdateableResultSet.java b/src/interfaces/jdbc/org/postgresql/jdbc2/UpdateableResultSet.java index a85f2b420cd6acddb627adb65fc67f61182517df..9ff8be4080d5cc9001a1ead433eb0ea4428aa1d7 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc2/UpdateableResultSet.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc2/UpdateableResultSet.java @@ -76,7 +76,10 @@ public class UpdateableResultSet extends org.postgresql.jdbc2.ResultSet protected java.sql.PreparedStatement deleteStatement = null; - private java.sql.Statement currentStatement = null; + /** + * PreparedStatement used to refresh data + */ + private java.sql.PreparedStatement selectStatement = null; /** @@ -617,6 +620,78 @@ public class UpdateableResultSet extends org.postgresql.jdbc2.ResultSet } + + public void refreshRow() throws SQLException + { + if ( !isUpdateable() ) + { + throw new PSQLException( "postgresql.updateable.notupdateable" ); + } + + try + { + StringBuffer selectSQL = new StringBuffer( "select "); + + final int numColumns = java.lang.reflect.Array.getLength(fields); + + for (int i=0; i < numColumns ; i++ ) + { + + selectSQL.append( fields[i].getName() ); + + if ( i < numColumns - 1 ) + { + + selectSQL.append(", "); + } + + } + selectSQL.append(" from " ).append(tableName).append(" where "); + + int numKeys = primaryKeys.size(); + + for ( int i = 0; i < numKeys; i++ ) + { + + PrimaryKey primaryKey = ((PrimaryKey)primaryKeys.get(i)); + selectSQL.append(primaryKey.name).append("= ?"); + + 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 j=0, i=1; j < numKeys; j++, i++) + { + selectStatement.setObject( i, ((PrimaryKey)primaryKeys.get(j)).getValue() ); + } + + org.postgresql.jdbc2.ResultSet rs = (org.postgresql.jdbc2.ResultSet) selectStatement.executeQuery(); + + if( rs.first() ) + { + rowBuffer = rs.rowBuffer; + } + + rows.setElementAt( rowBuffer, current_row ); + if ( Driver.logDebug ) Driver.debug("done updates"); + + rs.close(); + selectStatement.close(); + selectStatement = null; + + } + catch (Exception e) + { + if ( Driver.logDebug ) Driver.debug(e.getClass().getName()+e); + throw new SQLException( e.getMessage() ); + } + + } /** * * @throws SQLException diff --git a/src/interfaces/jdbc/org/postgresql/test/jdbc2/UpdateableResultTest.java b/src/interfaces/jdbc/org/postgresql/test/jdbc2/UpdateableResultTest.java index 94effddc06673e7b5f7bcb24e8188963a8148452..722dd78398a634a6abcb34ec6992b330860f3234 100644 --- a/src/interfaces/jdbc/org/postgresql/test/jdbc2/UpdateableResultTest.java +++ b/src/interfaces/jdbc/org/postgresql/test/jdbc2/UpdateableResultTest.java @@ -57,7 +57,7 @@ public class UpdateableResultTest extends TestCase rs.updateString("name", "paul"); rs.insertRow(); - + rs.refreshRow(); assertTrue( rs.getInt("id") == 3 ); assertTrue( rs.getString("name").equals("paul")); assertTrue( rs.getString("notselected") == null );