Index: src/interfaces/jdbc/org/postgresql/Connection.java =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/Connection.java,v retrieving revision 1.24 diff -c -r1.24 Connection.java *** src/interfaces/jdbc/org/postgresql/Connection.java 2001/08/07 17:45:29 1.24 --- src/interfaces/jdbc/org/postgresql/Connection.java 2001/08/08 19:51:53 *************** *** 37,43 **** */ private Encoding encoding = Encoding.defaultEncoding(); - private String dbVersionLong; private String dbVersionNumber; public boolean CONNECTION_OK = true; --- 37,42 ---- *************** *** 257,264 **** firstWarning = null; - String dbEncoding; - // "pg_encoding_to_char(1)" will return 'EUC_JP' for a backend compiled with multibyte, // otherwise it's hardcoded to 'SQL_ASCII'. // If the backend doesn't know about multibyte we can't assume anything about the encoding --- 256,261 ---- *************** *** 276,283 **** if (! resultSet.next()) { throw new PSQLException("postgresql.con.failed", "failed getting backend encoding"); } ! dbVersionLong = resultSet.getString(1); ! dbEncoding = resultSet.getString(2); encoding = Encoding.getEncoding(dbEncoding, info.getProperty("charSet")); // Initialise object handling --- 273,282 ---- if (! resultSet.next()) { throw new PSQLException("postgresql.con.failed", "failed getting backend encoding"); } ! String version = resultSet.getString(1); ! dbVersionNumber = extractVersionNumber(version); ! ! String dbEncoding = resultSet.getString(2); encoding = Encoding.getEncoding(dbEncoding, info.getProperty("charSet")); // Initialise object handling *************** *** 1002,1026 **** //this can be simplified isolationLevel = level; String isolationLevelSQL; - switch(isolationLevel) { - case java.sql.Connection.TRANSACTION_READ_COMMITTED: - if (haveMinimumServerVersion("7.1")) { - isolationLevelSQL = "SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED"; - } else { - isolationLevelSQL = getIsolationLevelSQL(); - } - break; - - case java.sql.Connection.TRANSACTION_SERIALIZABLE: - if (haveMinimumServerVersion("7.1")) { - isolationLevelSQL = "SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE"; - } else { - isolationLevelSQL = getIsolationLevelSQL(); - } - break; ! default: ! throw new PSQLException("postgresql.con.isolevel",new Integer(isolationLevel)); } ExecSQL(isolationLevelSQL); } --- 1001,1022 ---- //this can be simplified isolationLevel = level; String isolationLevelSQL; ! if (!haveMinimumServerVersion("7.1")) { ! isolationLevelSQL = getIsolationLevelSQL(); ! } else { ! isolationLevelSQL = "SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL "; ! switch(isolationLevel) { ! case java.sql.Connection.TRANSACTION_READ_COMMITTED: ! isolationLevelSQL += "READ COMMITTED"; ! break; ! case java.sql.Connection.TRANSACTION_SERIALIZABLE: ! isolationLevelSQL += "SERIALIZABLE"; ! break; ! default: ! throw new PSQLException("postgresql.con.isolevel", ! new Integer(isolationLevel)); ! } } ExecSQL(isolationLevelSQL); } *************** *** 1094,1152 **** close(); } ! /** ! * This is an attempt to implement SQL Escape clauses ! */ ! public String EscapeSQL(String sql) { ! //if (DEBUG) { System.out.println ("parseSQLEscapes called"); } ! ! // If we find a "{d", assume we have a date escape. ! // ! // Since the date escape syntax is very close to the ! // native Postgres date format, we just remove the escape ! // delimiters. ! // ! // This implementation could use some optimization, but it has ! // worked in practice for two years of solid use. ! int index = sql.indexOf("{d"); ! while (index != -1) { ! //System.out.println ("escape found at index: " + index); ! StringBuffer buf = new StringBuffer(sql); ! buf.setCharAt(index, ' '); ! buf.setCharAt(index + 1, ' '); ! buf.setCharAt(sql.indexOf('}', index), ' '); ! sql = new String(buf); ! index = sql.indexOf("{d"); ! } ! //System.out.println ("modified SQL: " + sql); ! return sql; ! } ! ! /** ! * What is the version of the server ! * ! * @return the database version ! * @exception SQLException if a database access error occurs ! */ ! public String getDBVersionNumber() throws SQLException { ! if(dbVersionNumber == null) { ! StringTokenizer versionParts = new StringTokenizer(dbVersionLong); versionParts.nextToken(); /* "PostgreSQL" */ ! dbVersionNumber = versionParts.nextToken(); /* "X.Y.Z" */ ! } ! return dbVersionNumber; } public boolean haveMinimumServerVersion(String ver) throws SQLException { ! if (getDBVersionNumber().compareTo(ver)>=0) ! return true; ! else ! return false; } - - - } --- 1090,1112 ---- close(); } ! private static String extractVersionNumber(String fullVersionString) { ! StringTokenizer versionParts = new StringTokenizer(fullVersionString); versionParts.nextToken(); /* "PostgreSQL" */ ! return versionParts.nextToken(); /* "X.Y.Z" */ } + /** + * Get server version number + */ + public String getDBVersionNumber() { + return dbVersionNumber; + } + public boolean haveMinimumServerVersion(String ver) throws SQLException { ! return (getDBVersionNumber().compareTo(ver) >= 0); } } Index: src/interfaces/jdbc/org/postgresql/Statement.java =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/Statement.java,v retrieving revision 1.1 diff -c -r1.1 Statement.java *** src/interfaces/jdbc/org/postgresql/Statement.java 2001/01/31 09:23:45 1.1 --- src/interfaces/jdbc/org/postgresql/Statement.java 2001/08/08 19:51:53 *************** *** 1,6 **** package org.postgresql; ! import java.sql.SQLException; /** * This class defines methods implemented by the two subclasses --- 1,7 ---- package org.postgresql; ! import java.sql.*; ! import org.postgresql.util.PSQLException; /** * This class defines methods implemented by the two subclasses *************** *** 24,42 **** public abstract class Statement { ! public Statement() { ! } ! /** ! * Returns the status message from the current Result.

! * This is used internally by the driver. ! * ! * @return status message from backend ! */ ! public abstract String getResultStatusString(); ! ! /** ! * @return the OID of the last row inserted ! */ ! public abstract int getInsertedOID() throws SQLException; ! } \ No newline at end of file --- 25,251 ---- public abstract class Statement { ! /** The warnings chain. */ ! protected SQLWarning warnings = null; ! /** The current results */ ! protected java.sql.ResultSet result = null; ! ! /** Maximum number of rows to return, 0 = unlimited */ ! protected int maxrows = 0; ! ! /** Timeout (in seconds) for a query (not used) */ ! protected int timeout = 0; ! ! protected boolean escapeProcessing = true; ! ! ! public Statement() { ! } ! ! /** ! * Returns the status message from the current Result.

! * This is used internally by the driver. ! * ! * @return status message from backend ! */ ! public String getResultStatusString() { ! if (result == null) ! return null; ! return ((org.postgresql.ResultSet) result).getStatusString(); ! } ! ! /** ! * The maxRows limit is set to limit the number of rows that ! * any ResultSet can contain. If the limit is exceeded, the ! * excess rows are silently dropped. ! * ! * @return the current maximum row limit; zero means unlimited ! * @exception SQLException if a database access error occurs ! */ ! public int getMaxRows() throws SQLException { ! return maxrows; ! } ! ! /** ! * Set the maximum number of rows ! * ! * @param max the new max rows limit; zero means unlimited ! * @exception SQLException if a database access error occurs ! * @see getMaxRows ! */ ! public void setMaxRows(int max) throws SQLException { ! maxrows = max; ! } ! ! /** ! * If escape scanning is on (the default), the driver will do escape ! * substitution before sending the SQL to the database. ! * ! * @param enable true to enable; false to disable ! * @exception SQLException if a database access error occurs ! */ ! public void setEscapeProcessing(boolean enable) throws SQLException { ! escapeProcessing = enable; ! } ! ! /** ! * The queryTimeout limit is the number of seconds the driver ! * will wait for a Statement to execute. If the limit is ! * exceeded, a SQLException is thrown. ! * ! * @return the current query timeout limit in seconds; 0 = unlimited ! * @exception SQLException if a database access error occurs ! */ ! public int getQueryTimeout() throws SQLException { ! return timeout; ! } ! ! /** ! * Sets the queryTimeout limit ! * ! * @param seconds - the new query timeout limit in seconds ! * @exception SQLException if a database access error occurs ! */ ! public void setQueryTimeout(int seconds) throws SQLException { ! timeout = seconds; ! } ! ! /** ! * The first warning reported by calls on this Statement is ! * returned. A Statement's execute methods clear its SQLWarning ! * chain. Subsequent Statement warnings will be chained to this ! * SQLWarning. ! * ! *

The Warning chain is automatically cleared each time a statement ! * is (re)executed. ! * ! *

Note: If you are processing a ResultSet then any warnings ! * associated with ResultSet reads will be chained on the ResultSet ! * object. ! * ! * @return the first SQLWarning on null ! * @exception SQLException if a database access error occurs ! */ ! public SQLWarning getWarnings() throws SQLException { ! return warnings; ! } ! ! /** ! * The maxFieldSize limit (in bytes) is the maximum amount of ! * data returned for any column value; it only applies to ! * BINARY, VARBINARY, LONGVARBINARY, CHAR, VARCHAR and LONGVARCHAR ! * columns. If the limit is exceeded, the excess data is silently ! * discarded. ! * ! * @return the current max column size limit; zero means unlimited ! * @exception SQLException if a database access error occurs ! */ ! public int getMaxFieldSize() throws SQLException { ! return 8192; // We cannot change this ! } ! ! /** ! * Sets the maxFieldSize - NOT! - We throw an SQLException just ! * to inform them to stop doing this. ! * ! * @param max the new max column size limit; zero means unlimited ! * @exception SQLException if a database access error occurs ! */ ! public void setMaxFieldSize(int max) throws SQLException { ! throw new PSQLException("postgresql.stat.maxfieldsize"); ! } ! ! /** ! * After this call, getWarnings returns null until a new warning ! * is reported for this Statement. ! * ! * @exception SQLException if a database access error occurs ! */ ! public void clearWarnings() throws SQLException { ! warnings = null; ! } ! ! /** ! * Cancel can be used by one thread to cancel a statement that ! * is being executed by another thread. ! *

! * Not implemented, this method is a no-op. ! * ! * @exception SQLException only because thats the spec. ! */ ! public void cancel() throws SQLException { ! // FIXME: Cancel feature has been available since 6.4. Implement it here! ! } ! ! /** ! * New in 7.1: Returns the Last inserted oid. This should be used, rather ! * than the old method using getResultSet, which for executeUpdate returns ! * null. ! * @return OID of last insert ! */ ! public int getInsertedOID() throws SQLException { ! if (result == null) ! return 0; ! return ((org.postgresql.ResultSet) result).getInsertedOID(); ! } ! ! /** ! * getResultSet returns the current result as a ResultSet. It ! * should only be called once per result. ! * ! * @return the current result set; null if there are no more ! * @exception SQLException if a database access error occurs (why?) ! */ ! public java.sql.ResultSet getResultSet() throws SQLException { ! if (result != null && ((org.postgresql.ResultSet) result).reallyResultSet()) ! return result; ! return null; ! } ! ! /** ! * In many cases, it is desirable to immediately release a ! * Statement's database and JDBC resources instead of waiting ! * for this to happen when it is automatically closed. The ! * close method provides this immediate release. ! * ! *

Note: A Statement is automatically closed when it is ! * garbage collected. When a Statement is closed, its current ! * ResultSet, if one exists, is also closed. ! * ! * @exception SQLException if a database access error occurs (why?) ! */ ! public void close() throws SQLException { ! // Force the ResultSet to close ! java.sql.ResultSet rs = getResultSet(); ! if(rs!=null) ! rs.close(); ! ! // Disasociate it from us (For Garbage Collection) ! result = null; ! } ! ! /** ! * This is an attempt to implement SQL Escape clauses ! */ ! protected static String escapeSQL(String sql) { ! // If we find a "{d", assume we have a date escape. ! // ! // Since the date escape syntax is very close to the ! // native Postgres date format, we just remove the escape ! // delimiters. ! // ! // This implementation could use some optimization, but it has ! // worked in practice for two years of solid use. ! int index = sql.indexOf("{d"); ! while (index != -1) { ! StringBuffer buf = new StringBuffer(sql); ! buf.setCharAt(index, ' '); ! buf.setCharAt(index + 1, ' '); ! buf.setCharAt(sql.indexOf('}', index), ' '); ! sql = new String(buf); ! index = sql.indexOf("{d"); ! } ! return sql; ! } ! } Index: src/interfaces/jdbc/org/postgresql/jdbc1/Statement.java =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Statement.java,v retrieving revision 1.9 diff -c -r1.9 Statement.java *** src/interfaces/jdbc/org/postgresql/jdbc1/Statement.java 2001/05/16 16:20:53 1.9 --- src/interfaces/jdbc/org/postgresql/jdbc1/Statement.java 2001/08/08 19:51:54 *************** *** 24,35 **** */ public class Statement extends org.postgresql.Statement implements java.sql.Statement { ! Connection connection; // The connection who created us ! java.sql.ResultSet result = null; // The current results ! SQLWarning warnings = null; // The warnings chain. ! int timeout = 0; // The timeout for a query (not used) ! boolean escapeProcessing = true;// escape processing flag ! int maxrows=0; /** * Constructor for a Statement. It simply sets the connection --- 24,30 ---- */ public class Statement extends org.postgresql.Statement implements java.sql.Statement { ! private Connection connection; // The connection who created us /** * Constructor for a Statement. It simply sets the connection *************** *** 77,242 **** } /** - * In many cases, it is desirable to immediately release a - * Statement's database and JDBC resources instead of waiting - * for this to happen when it is automatically closed. The - * close method provides this immediate release. - * - *

Note: A Statement is automatically closed when it is - * garbage collected. When a Statement is closed, its current - * ResultSet, if one exists, is also closed. - * - * @exception SQLException if a database access error occurs (why?) - */ - public void close() throws SQLException - { - // Force the ResultSet to close - java.sql.ResultSet rs = getResultSet(); - if(rs!=null) - rs.close(); - - // Disasociate it from us (For Garbage Collection) - result = null; - } - - /** - * The maxFieldSize limit (in bytes) is the maximum amount of - * data returned for any column value; it only applies to - * BINARY, VARBINARY, LONGVARBINARY, CHAR, VARCHAR and LONGVARCHAR - * columns. If the limit is exceeded, the excess data is silently - * discarded. - * - * @return the current max column size limit; zero means unlimited - * @exception SQLException if a database access error occurs - */ - public int getMaxFieldSize() throws SQLException - { - return 8192; // We cannot change this - } - - /** - * Sets the maxFieldSize - NOT! - We throw an SQLException just - * to inform them to stop doing this. - * - * @param max the new max column size limit; zero means unlimited - * @exception SQLException if a database access error occurs - */ - public void setMaxFieldSize(int max) throws SQLException - { - throw new PSQLException("postgresql.stat.maxfieldsize"); - } - - /** - * The maxRows limit is set to limit the number of rows that - * any ResultSet can contain. If the limit is exceeded, the - * excess rows are silently dropped. - * - * @return the current maximum row limit; zero means unlimited - * @exception SQLException if a database access error occurs - */ - public int getMaxRows() throws SQLException - { - return maxrows; - } - - /** - * Set the maximum number of rows - * - * @param max the new max rows limit; zero means unlimited - * @exception SQLException if a database access error occurs - * @see getMaxRows - */ - public void setMaxRows(int max) throws SQLException - { - maxrows = max; - } - - /** - * If escape scanning is on (the default), the driver will do escape - * substitution before sending the SQL to the database. - * - * @param enable true to enable; false to disable - * @exception SQLException if a database access error occurs - */ - public void setEscapeProcessing(boolean enable) throws SQLException - { - escapeProcessing = enable; - } - - /** - * The queryTimeout limit is the number of seconds the driver - * will wait for a Statement to execute. If the limit is - * exceeded, a SQLException is thrown. - * - * @return the current query timeout limit in seconds; 0 = unlimited - * @exception SQLException if a database access error occurs - */ - public int getQueryTimeout() throws SQLException - { - return timeout; - } - - /** - * Sets the queryTimeout limit - * - * @param seconds - the new query timeout limit in seconds - * @exception SQLException if a database access error occurs - */ - public void setQueryTimeout(int seconds) throws SQLException - { - timeout = seconds; - } - - /** - * Cancel can be used by one thread to cancel a statement that - * is being executed by another thread. However, PostgreSQL is - * a sync. sort of thing, so this really has no meaning - we - * define it as a no-op (i.e. you can't cancel, but there is no - * error if you try.) - * - * 6.4 introduced a cancel operation, but we have not implemented it - * yet. Sometime before 6.5, this method will be implemented. - * - * @exception SQLException only because thats the spec. - */ - public void cancel() throws SQLException - { - // No-op - } - - /** - * The first warning reported by calls on this Statement is - * returned. A Statement's execute methods clear its SQLWarning - * chain. Subsequent Statement warnings will be chained to this - * SQLWarning. - * - *

The Warning chain is automatically cleared each time a statement - * is (re)executed. - * - *

Note: If you are processing a ResultSet then any warnings - * associated with ResultSet reads will be chained on the ResultSet - * object. - * - * @return the first SQLWarning on null - * @exception SQLException if a database access error occurs - */ - public SQLWarning getWarnings() throws SQLException - { - return warnings; - } - - /** - * After this call, getWarnings returns null until a new warning - * is reported for this Statement. - * - * @exception SQLException if a database access error occurs (why?) - */ - public void clearWarnings() throws SQLException - { - warnings = null; - } - - /** * setCursorName defines the SQL cursor name that will be used by * subsequent execute methods. This name can then be used in SQL * positioned update/delete statements to identify the current row --- 72,77 ---- *************** *** 273,299 **** */ public boolean execute(String sql) throws SQLException { ! if(escapeProcessing) ! sql=connection.EscapeSQL(sql); result = connection.ExecSQL(sql); return (result != null && ((org.postgresql.ResultSet)result).reallyResultSet()); } /** - * getResultSet returns the current result as a ResultSet. It - * should only be called once per result. - * - * @return the current result set; null if there are no more - * @exception SQLException if a database access error occurs (why?) - */ - public java.sql.ResultSet getResultSet() throws SQLException - { - if (result != null && ((org.postgresql.ResultSet)result).reallyResultSet()) - return result; - return null; - } - - /** * getUpdateCount returns the current result as an update count, * if the result is a ResultSet or there are no more results, -1 * is returned. It should only be called once per result. --- 108,120 ---- */ public boolean execute(String sql) throws SQLException { ! if (escapeProcessing) ! sql = escapeSql(sql); result = connection.ExecSQL(sql); return (result != null && ((org.postgresql.ResultSet)result).reallyResultSet()); } /** * getUpdateCount returns the current result as an update count, * if the result is a ResultSet or there are no more results, -1 * is returned. It should only be called once per result. *************** *** 320,350 **** result = ((org.postgresql.ResultSet)result).getNext(); return (result != null && ((org.postgresql.ResultSet)result).reallyResultSet()); } - - /** - * Returns the status message from the current Result.

- * This is used internally by the driver. - * - * @return status message from backend - */ - public String getResultStatusString() - { - if(result == null) - return null; - return ((org.postgresql.ResultSet)result).getStatusString(); - } - - /** - * New in 7.1: Returns the Last inserted oid. This should be used, rather - * than the old method using getResultSet, which for executeUpdate returns - * null. - * @return OID of last insert - */ - public int getInsertedOID() throws SQLException - { - if(result!=null) - return ((org.postgresql.ResultSet)result).getInsertedOID(); - return 0; - } - } --- 141,144 ---- Index: src/interfaces/jdbc/org/postgresql/jdbc2/Statement.java =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Statement.java,v retrieving revision 1.10 diff -c -r1.10 Statement.java *** src/interfaces/jdbc/org/postgresql/jdbc2/Statement.java 2001/02/16 16:45:00 1.10 --- src/interfaces/jdbc/org/postgresql/jdbc2/Statement.java 2001/08/08 19:51:55 *************** *** 24,38 **** */ public class Statement extends org.postgresql.Statement implements java.sql.Statement { ! Connection connection; // The connection who created us ! java.sql.ResultSet result = null; // The current results ! SQLWarning warnings = null; // The warnings chain. ! int timeout = 0; // The timeout for a query (not used) ! boolean escapeProcessing = true;// escape processing flag private Vector batch=null; ! int resultsettype; // the resultset type to return ! int concurrency; // is it updateable or not? ! int maxrows=0; // the maximum number of rows to return 0=unlimited /** * Constructor for a Statement. It simply sets the connection --- 24,33 ---- */ public class Statement extends org.postgresql.Statement implements java.sql.Statement { ! private Connection connection; // The connection who created us private Vector batch=null; ! private int resultsettype; // the resultset type to return ! private int concurrency; // is it updateable or not? /** * Constructor for a Statement. It simply sets the connection *************** *** 82,247 **** } /** - * In many cases, it is desirable to immediately release a - * Statement's database and JDBC resources instead of waiting - * for this to happen when it is automatically closed. The - * close method provides this immediate release. - * - *

Note: A Statement is automatically closed when it is - * garbage collected. When a Statement is closed, its current - * ResultSet, if one exists, is also closed. - * - * @exception SQLException if a database access error occurs (why?) - */ - public void close() throws SQLException - { - // Force the ResultSet to close - java.sql.ResultSet rs = getResultSet(); - if(rs!=null) - rs.close(); - - // Disasociate it from us (For Garbage Collection) - result = null; - } - - /** - * The maxFieldSize limit (in bytes) is the maximum amount of - * data returned for any column value; it only applies to - * BINARY, VARBINARY, LONGVARBINARY, CHAR, VARCHAR and LONGVARCHAR - * columns. If the limit is exceeded, the excess data is silently - * discarded. - * - * @return the current max column size limit; zero means unlimited - * @exception SQLException if a database access error occurs - */ - public int getMaxFieldSize() throws SQLException - { - return 8192; // We cannot change this - } - - /** - * Sets the maxFieldSize - NOT! - We throw an SQLException just - * to inform them to stop doing this. - * - * @param max the new max column size limit; zero means unlimited - * @exception SQLException if a database access error occurs - */ - public void setMaxFieldSize(int max) throws SQLException - { - throw new PSQLException("postgresql.stat.maxfieldsize"); - } - - /** - * The maxRows limit is set to limit the number of rows that - * any ResultSet can contain. If the limit is exceeded, the - * excess rows are silently dropped. - * - * @return the current maximum row limit; zero means unlimited - * @exception SQLException if a database access error occurs - */ - public int getMaxRows() throws SQLException - { - return maxrows; - } - - /** - * Set the maximum number of rows - * - * @param max the new max rows limit; zero means unlimited - * @exception SQLException if a database access error occurs - * @see getMaxRows - */ - public void setMaxRows(int max) throws SQLException - { - maxrows = max; - } - - /** - * If escape scanning is on (the default), the driver will do escape - * substitution before sending the SQL to the database. - * - * @param enable true to enable; false to disable - * @exception SQLException if a database access error occurs - */ - public void setEscapeProcessing(boolean enable) throws SQLException - { - escapeProcessing = enable; - } - - /** - * The queryTimeout limit is the number of seconds the driver - * will wait for a Statement to execute. If the limit is - * exceeded, a SQLException is thrown. - * - * @return the current query timeout limit in seconds; 0 = unlimited - * @exception SQLException if a database access error occurs - */ - public int getQueryTimeout() throws SQLException - { - return timeout; - } - - /** - * Sets the queryTimeout limit - * - * @param seconds - the new query timeout limit in seconds - * @exception SQLException if a database access error occurs - */ - public void setQueryTimeout(int seconds) throws SQLException - { - timeout = seconds; - } - - /** - * Cancel can be used by one thread to cancel a statement that - * is being executed by another thread. However, PostgreSQL is - * a sync. sort of thing, so this really has no meaning - we - * define it as a no-op (i.e. you can't cancel, but there is no - * error if you try.) - * - * 6.4 introduced a cancel operation, but we have not implemented it - * yet. Sometime before 6.5, this method will be implemented. - * - * @exception SQLException only because thats the spec. - */ - public void cancel() throws SQLException - { - // No-op - } - - /** - * The first warning reported by calls on this Statement is - * returned. A Statement's execute methods clear its SQLWarning - * chain. Subsequent Statement warnings will be chained to this - * SQLWarning. - * - *

The Warning chain is automatically cleared each time a statement - * is (re)executed. - * - *

Note: If you are processing a ResultSet then any warnings - * associated with ResultSet reads will be chained on the ResultSet - * object. - * - * @return the first SQLWarning on null - * @exception SQLException if a database access error occurs - */ - public SQLWarning getWarnings() throws SQLException - { - return warnings; - } - - /** - * After this call, getWarnings returns null until a new warning - * is reported for this Statement. - * - * @exception SQLException if a database access error occurs (why?) - */ - public void clearWarnings() throws SQLException - { - warnings = null; - } - - /** * setCursorName defines the SQL cursor name that will be used by * subsequent execute methods. This name can then be used in SQL * positioned update/delete statements to identify the current row --- 77,82 ---- *************** *** 278,285 **** */ public boolean execute(String sql) throws SQLException { ! if(escapeProcessing) ! sql=connection.EscapeSQL(sql); // New in 7.1, if we have a previous resultset then force it to close // This brings us nearer to compliance, and helps memory management. --- 113,120 ---- */ public boolean execute(String sql) throws SQLException { ! if (escapeProcessing) ! sql = escapeSQL(sql); // New in 7.1, if we have a previous resultset then force it to close // This brings us nearer to compliance, and helps memory management. *************** *** 300,319 **** } /** - * getResultSet returns the current result as a ResultSet. It - * should only be called once per result. - * - * @return the current result set; null if there are no more - * @exception SQLException if a database access error occurs (why?) - */ - public java.sql.ResultSet getResultSet() throws SQLException - { - if (result != null && ((org.postgresql.ResultSet)result).reallyResultSet()) - return result; - return null; - } - - /** * getUpdateCount returns the current result as an update count, * if the result is a ResultSet or there are no more results, -1 * is returned. It should only be called once per result. --- 135,140 ---- *************** *** 341,359 **** return (result != null && ((org.postgresql.ResultSet)result).reallyResultSet()); } - /** - * Returns the status message from the current Result.

- * This is used internally by the driver. - * - * @return status message from backend - */ - public String getResultStatusString() - { - if(result == null) - return null; - return ((org.postgresql.ResultSet)result).getStatusString(); - } - // ** JDBC 2 Extensions ** public void addBatch(String sql) throws SQLException --- 162,167 ---- *************** *** 442,459 **** { resultsettype=value; } - - /** - * New in 7.1: Returns the Last inserted oid. This should be used, rather - * than the old method using getResultSet, which for executeUpdate returns - * null. - * @return OID of last insert - */ - public int getInsertedOID() throws SQLException - { - if(result!=null) - return ((org.postgresql.ResultSet)result).getInsertedOID(); - return 0; - } - } --- 250,253 ----