? cloudscape.LOG Index: org/postgresql/errors.properties =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/errors.properties,v retrieving revision 1.20 diff -c -p -c -p -r1.20 errors.properties *** org/postgresql/errors.properties 29 May 2003 03:21:32 -0000 1.20 --- org/postgresql/errors.properties 30 Jun 2003 15:07:17 -0000 *************** postgresql.call.funcover:Cannot execute *** 97,99 **** --- 97,100 ---- postgresql.call.wrongget:Parameter of type {0} was registered but call to get{1} (sqltype={2}) was made. postgresql.call.noreturnval:A CallableStatement Function was executed with nothing returned. postgresql.call.wrongrtntype:A CallableStatement Function was executed and the return was of type ({0}) however type={1} was registered. + postgresql.stmt.closed:This Statement has been closed and cannot be used to set or retrieve values any longer. It also cannot be used to execute queries. Index: org/postgresql/jdbc1/AbstractJdbc1Statement.java =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java,v retrieving revision 1.24 diff -c -p -c -p -r1.24 AbstractJdbc1Statement.java *** org/postgresql/jdbc1/AbstractJdbc1Statement.java 29 May 2003 04:52:44 -0000 1.24 --- org/postgresql/jdbc1/AbstractJdbc1Statement.java 30 Jun 2003 15:07:19 -0000 *************** public abstract class AbstractJdbc1State *** 88,93 **** --- 88,94 ---- private boolean returnTypeSet; protected Object callResult; + private boolean isClosed = false; public abstract BaseResultSet createResultSet(Field[] fields, Vector tuples, String status, int updateCount, long insertOID, boolean binaryCursor) throws SQLException; *************** public abstract class AbstractJdbc1State *** 116,121 **** --- 117,123 ---- protected void parseSqlStmt (String p_sql) throws SQLException { + checkClosed(); String l_sql = p_sql; l_sql = replaceProcessing(l_sql); *************** public abstract class AbstractJdbc1State *** 162,167 **** --- 164,170 ---- */ public java.sql.ResultSet executeQuery(String p_sql) throws SQLException { + checkClosed(); String l_sql = replaceProcessing(p_sql); m_sqlFragments = new String[] {l_sql}; m_binds = new Object[0]; *************** public abstract class AbstractJdbc1State *** 197,202 **** --- 200,206 ---- */ public java.sql.ResultSet executeQuery() throws SQLException { + checkClosed(); this.execute(); while (result != null && !result.reallyResultSet()) *************** public abstract class AbstractJdbc1State *** 217,222 **** --- 221,227 ---- */ public int executeUpdate(String p_sql) throws SQLException { + checkClosed(); String l_sql = replaceProcessing(p_sql); m_sqlFragments = new String[] {l_sql}; m_binds = new Object[0]; *************** public abstract class AbstractJdbc1State *** 242,247 **** --- 247,253 ---- */ public int executeUpdate() throws SQLException { + checkClosed(); this.execute(); if (result.reallyResultSet()) throw new PSQLException("postgresql.stat.result"); *************** public abstract class AbstractJdbc1State *** 261,266 **** --- 267,273 ---- */ public boolean execute(String p_sql) throws SQLException { + checkClosed(); String l_sql = replaceProcessing(p_sql); m_sqlFragments = new String[] {l_sql}; m_binds = new Object[0]; *************** public abstract class AbstractJdbc1State *** 290,295 **** --- 297,303 ---- */ public boolean execute() throws SQLException { + checkClosed(); if (isFunction && !returnTypeSet) throw new PSQLException("postgresql.call.noreturntype"); if (isFunction) *************** public abstract class AbstractJdbc1State *** 481,486 **** --- 489,495 ---- */ public void setCursorName(String name) throws SQLException { + checkClosed(); connection.setCursorName(name); } *************** public abstract class AbstractJdbc1State *** 495,500 **** --- 504,510 ---- */ public int getUpdateCount() throws SQLException { + checkClosed(); if (result == null) return -1; if (isFunction) *************** public abstract class AbstractJdbc1State *** 513,518 **** --- 523,529 ---- */ public boolean getMoreResults() throws SQLException { + checkClosed(); result = (BaseResultSet) result.getNext(); return (result != null && result.reallyResultSet()); } *************** public abstract class AbstractJdbc1State *** 542,547 **** --- 553,559 ---- */ public int getMaxRows() throws SQLException { + checkClosed(); return maxrows; } *************** public abstract class AbstractJdbc1State *** 554,559 **** --- 566,572 ---- */ public void setMaxRows(int max) throws SQLException { + checkClosed(); maxrows = max; } *************** public abstract class AbstractJdbc1State *** 566,571 **** --- 579,585 ---- */ public void setEscapeProcessing(boolean enable) throws SQLException { + checkClosed(); replaceProcessingEnabled = enable; } *************** public abstract class AbstractJdbc1State *** 579,584 **** --- 593,599 ---- */ public int getQueryTimeout() throws SQLException { + checkClosed(); return timeout; } *************** public abstract class AbstractJdbc1State *** 590,595 **** --- 605,611 ---- */ public void setQueryTimeout(int seconds) throws SQLException { + checkClosed(); timeout = seconds; } *************** public abstract class AbstractJdbc1State *** 638,643 **** --- 654,660 ---- */ public int getMaxFieldSize() throws SQLException { + checkClosed(); return 8192; // We cannot change this } *************** public abstract class AbstractJdbc1State *** 650,655 **** --- 667,673 ---- */ public void setMaxFieldSize(int max) throws SQLException { + checkClosed(); throw new PSQLException("postgresql.stat.maxfieldsize"); } *************** public abstract class AbstractJdbc1State *** 714,719 **** --- 732,741 ---- if (m_useServerPrepare && m_statementName != null) { connection.execSQL("DEALLOCATE " + m_statementName); } + //need to null call_m_binds as well if CallableStatement patch goes in + m_binds = null; + callResult = null; + isClosed = true; // Disasociate it from us (For Garbage Collection) result = null; *************** public abstract class AbstractJdbc1State *** 843,848 **** --- 865,871 ---- */ public void setNull(int parameterIndex, int sqlType) throws SQLException { + checkClosed(); String l_pgType; switch (sqlType) { *************** public abstract class AbstractJdbc1State *** 905,910 **** --- 928,934 ---- */ public void setBoolean(int parameterIndex, boolean x) throws SQLException { + checkClosed(); bind(parameterIndex, x ? "'t'" : "'f'", PG_BOOLEAN); } *************** public abstract class AbstractJdbc1State *** 918,923 **** --- 942,948 ---- */ public void setByte(int parameterIndex, byte x) throws SQLException { + checkClosed(); bind(parameterIndex, Integer.toString(x), PG_TEXT); } *************** public abstract class AbstractJdbc1State *** 931,936 **** --- 956,962 ---- */ public void setShort(int parameterIndex, short x) throws SQLException { + checkClosed(); bind(parameterIndex, Integer.toString(x), PG_INT2); } *************** public abstract class AbstractJdbc1State *** 944,949 **** --- 970,976 ---- */ public void setInt(int parameterIndex, int x) throws SQLException { + checkClosed(); bind(parameterIndex, Integer.toString(x), PG_INTEGER); } *************** public abstract class AbstractJdbc1State *** 957,962 **** --- 984,990 ---- */ public void setLong(int parameterIndex, long x) throws SQLException { + checkClosed(); bind(parameterIndex, Long.toString(x), PG_INT8); } *************** public abstract class AbstractJdbc1State *** 970,975 **** --- 998,1004 ---- */ public void setFloat(int parameterIndex, float x) throws SQLException { + checkClosed(); bind(parameterIndex, Float.toString(x), PG_FLOAT); } *************** public abstract class AbstractJdbc1State *** 983,988 **** --- 1012,1018 ---- */ public void setDouble(int parameterIndex, double x) throws SQLException { + checkClosed(); bind(parameterIndex, Double.toString(x), PG_DOUBLE); } *************** public abstract class AbstractJdbc1State *** 997,1002 **** --- 1027,1033 ---- */ public void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException { + checkClosed(); if (x == null) setNull(parameterIndex, Types.DECIMAL); else *************** public abstract class AbstractJdbc1State *** 1017,1028 **** --- 1048,1061 ---- */ public void setString(int parameterIndex, String x) throws SQLException { + checkClosed(); setString(parameterIndex, x, PG_TEXT); } public void setString(int parameterIndex, String x, String type) throws SQLException { // if the passed string is null, then set this column to null + checkClosed(); if (x == null) setNull(parameterIndex, Types.VARCHAR); else *************** public abstract class AbstractJdbc1State *** 1065,1070 **** --- 1098,1104 ---- */ public void setBytes(int parameterIndex, byte x[]) throws SQLException { + checkClosed(); if (connection.haveMinimumCompatibleVersion("7.2")) { //Version 7.2 supports the bytea datatype for byte arrays *************** public abstract class AbstractJdbc1State *** 1099,1104 **** --- 1133,1139 ---- */ public void setDate(int parameterIndex, java.sql.Date x) throws SQLException { + checkClosed(); if (null == x) { setNull(parameterIndex, Types.DATE); *************** public abstract class AbstractJdbc1State *** 1119,1124 **** --- 1154,1160 ---- */ public void setTime(int parameterIndex, Time x) throws SQLException { + checkClosed(); if (null == x) { setNull(parameterIndex, Types.TIME); *************** public abstract class AbstractJdbc1State *** 1139,1144 **** --- 1175,1181 ---- */ public void setTimestamp(int parameterIndex, Timestamp x) throws SQLException { + checkClosed(); if (null == x) { setNull(parameterIndex, Types.TIMESTAMP); *************** public abstract class AbstractJdbc1State *** 1252,1257 **** --- 1289,1295 ---- */ public void setAsciiStream(int parameterIndex, InputStream x, int length) throws SQLException { + checkClosed(); if (connection.haveMinimumCompatibleVersion("7.2")) { //Version 7.2 supports AsciiStream for all PG text types (char, varchar, text) *************** public abstract class AbstractJdbc1State *** 1301,1306 **** --- 1339,1345 ---- */ public void setUnicodeStream(int parameterIndex, InputStream x, int length) throws SQLException { + checkClosed(); if (connection.haveMinimumCompatibleVersion("7.2")) { //Version 7.2 supports AsciiStream for all PG text types (char, varchar, text) *************** public abstract class AbstractJdbc1State *** 1349,1354 **** --- 1388,1394 ---- */ public void setBinaryStream(int parameterIndex, InputStream x, int length) throws SQLException { + checkClosed(); if (connection.haveMinimumCompatibleVersion("7.2")) { //Version 7.2 supports BinaryStream for for the PG bytea type *************** public abstract class AbstractJdbc1State *** 1454,1459 **** --- 1494,1500 ---- */ public void setObject(int parameterIndex, Object x, int targetSqlType, int scale) throws SQLException { + checkClosed(); if (x == null) { setNull(parameterIndex, targetSqlType); *************** public abstract class AbstractJdbc1State *** 1524,1529 **** --- 1565,1571 ---- */ public void setObject(int parameterIndex, Object x) throws SQLException { + checkClosed(); if (x == null) { setNull(parameterIndex, Types.OTHER); *************** public abstract class AbstractJdbc1State *** 1579,1584 **** --- 1621,1627 ---- */ public void registerOutParameter(int parameterIndex, int sqlType) throws SQLException { + checkClosed(); if (parameterIndex != 1) throw new PSQLException ("postgresql.call.noinout"); if (!isFunction) *************** public abstract class AbstractJdbc1State *** 1641,1646 **** --- 1684,1690 ---- */ public String getString(int parameterIndex) throws SQLException { + checkClosed(); checkIndex (parameterIndex, Types.VARCHAR, "String"); return (String)callResult; } *************** public abstract class AbstractJdbc1State *** 1655,1660 **** --- 1699,1705 ---- */ public boolean getBoolean(int parameterIndex) throws SQLException { + checkClosed(); checkIndex (parameterIndex, Types.BIT, "Boolean"); if (callResult == null) return false; *************** public abstract class AbstractJdbc1State *** 1670,1675 **** --- 1715,1721 ---- */ public byte getByte(int parameterIndex) throws SQLException { + checkClosed(); checkIndex (parameterIndex, Types.TINYINT, "Byte"); if (callResult == null) return 0; *************** public abstract class AbstractJdbc1State *** 1685,1690 **** --- 1731,1737 ---- */ public short getShort(int parameterIndex) throws SQLException { + checkClosed(); checkIndex (parameterIndex, Types.SMALLINT, "Short"); if (callResult == null) return 0; *************** public abstract class AbstractJdbc1State *** 1701,1706 **** --- 1748,1754 ---- */ public int getInt(int parameterIndex) throws SQLException { + checkClosed(); checkIndex (parameterIndex, Types.INTEGER, "Int"); if (callResult == null) return 0; *************** public abstract class AbstractJdbc1State *** 1716,1721 **** --- 1764,1770 ---- */ public long getLong(int parameterIndex) throws SQLException { + checkClosed(); checkIndex (parameterIndex, Types.BIGINT, "Long"); if (callResult == null) return 0; *************** public abstract class AbstractJdbc1State *** 1731,1736 **** --- 1780,1786 ---- */ public float getFloat(int parameterIndex) throws SQLException { + checkClosed(); checkIndex (parameterIndex, Types.REAL, "Float"); if (callResult == null) return 0; *************** public abstract class AbstractJdbc1State *** 1746,1751 **** --- 1796,1802 ---- */ public double getDouble(int parameterIndex) throws SQLException { + checkClosed(); checkIndex (parameterIndex, Types.DOUBLE, "Double"); if (callResult == null) return 0; *************** public abstract class AbstractJdbc1State *** 1766,1771 **** --- 1817,1823 ---- public BigDecimal getBigDecimal(int parameterIndex, int scale) throws SQLException { + checkClosed(); checkIndex (parameterIndex, Types.NUMERIC, "BigDecimal"); return ((BigDecimal)callResult); } *************** public abstract class AbstractJdbc1State *** 1780,1785 **** --- 1832,1838 ---- */ public byte[] getBytes(int parameterIndex) throws SQLException { + checkClosed(); checkIndex (parameterIndex, Types.VARBINARY, Types.BINARY, "Bytes"); return ((byte [])callResult); } *************** public abstract class AbstractJdbc1State *** 1794,1799 **** --- 1847,1853 ---- */ public java.sql.Date getDate(int parameterIndex) throws SQLException { + checkClosed(); checkIndex (parameterIndex, Types.DATE, "Date"); return (java.sql.Date)callResult; } *************** public abstract class AbstractJdbc1State *** 1807,1812 **** --- 1861,1867 ---- */ public java.sql.Time getTime(int parameterIndex) throws SQLException { + checkClosed(); checkIndex (parameterIndex, Types.TIME, "Time"); return (java.sql.Time)callResult; } *************** public abstract class AbstractJdbc1State *** 1821,1826 **** --- 1876,1882 ---- public java.sql.Timestamp getTimestamp(int parameterIndex) throws SQLException { + checkClosed(); checkIndex (parameterIndex, Types.TIMESTAMP, "Timestamp"); return (java.sql.Timestamp)callResult; } *************** public abstract class AbstractJdbc1State *** 1848,1853 **** --- 1904,1910 ---- public Object getObject(int parameterIndex) throws SQLException { + checkClosed(); checkIndex (parameterIndex); return callResult; } *************** public abstract class AbstractJdbc1State *** 1914,1919 **** --- 1971,1977 ---- */ private String modifyJdbcCall(String p_sql) throws SQLException { + checkClosed(); //Check that this is actually a call which should start with a { //if not do nothing and treat this as a standard prepared sql if (!p_sql.trim().startsWith("{")) { *************** public abstract class AbstractJdbc1State *** 2003,2009 **** public void setUseServerPrepare(boolean flag) throws SQLException { ! //Server side prepared statements were introduced in 7.3 if (connection.haveMinimumServerVersion("7.3")) { //If turning server prepared statements off deallocate statement //and reset statement name --- 2061,2068 ---- public void setUseServerPrepare(boolean flag) throws SQLException { ! checkClosed(); ! //Server side prepared statements were introduced in 7.3 if (connection.haveMinimumServerVersion("7.3")) { //If turning server prepared statements off deallocate statement //and reset statement name *************** public abstract class AbstractJdbc1State *** 2021,2026 **** --- 2080,2092 ---- public boolean isUseServerPrepare() { return m_useServerPrepare; + } + + private void checkClosed() throws SQLException + { + //need to add to errors.properties. + if (isClosed) + throw new PSQLException("postgresql.stmt.closed"); } Index: org/postgresql/jdbc2/AbstractJdbc2Statement.java =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java,v retrieving revision 1.14 diff -c -p -c -p -r1.14 AbstractJdbc2Statement.java *** org/postgresql/jdbc2/AbstractJdbc2Statement.java 29 May 2003 04:52:44 -0000 1.14 --- org/postgresql/jdbc2/AbstractJdbc2Statement.java 30 Jun 2003 15:07:19 -0000 *************** public abstract class AbstractJdbc2State *** 58,63 **** --- 58,64 ---- public void addBatch(String p_sql) throws SQLException { + checkClosed(); if (batch == null) batch = new Vector(); Object[] l_statement = new Object[] {new String[] {p_sql}, new Object[0], new String[0]}; *************** public abstract class AbstractJdbc2State *** 71,76 **** --- 72,78 ---- public int[] executeBatch() throws SQLException { + checkClosed(); if (batch == null) batch = new Vector(); int size = batch.size(); *************** public abstract class AbstractJdbc2State *** 124,144 **** --- 126,150 ---- public Connection getConnection() throws SQLException { + checkClosed(); return (Connection) connection; } public int getFetchDirection() throws SQLException { + checkClosed(); throw new PSQLException("postgresql.psqlnotimp"); } public int getResultSetConcurrency() throws SQLException { + checkClosed(); return concurrency; } public int getResultSetType() throws SQLException { + checkClosed(); return resultsettype; } *************** public abstract class AbstractJdbc2State *** 151,171 **** --- 157,181 ---- public void setFetchSize(int rows) throws SQLException { + checkClosed(); super.fetchSize = rows; } public void setResultSetConcurrency(int value) throws SQLException { + checkClosed(); concurrency = value; } public void setResultSetType(int value) throws SQLException { + checkClosed(); resultsettype = value; } public void addBatch() throws SQLException { + checkClosed(); if (batch == null) batch = new Vector(); *************** public abstract class AbstractJdbc2State *** 185,190 **** --- 195,201 ---- public ResultSetMetaData getMetaData() throws SQLException { + checkClosed(); ResultSet rs = getResultSet(); if (rs != null) return rs.getMetaData(); *************** public abstract class AbstractJdbc2State *** 195,205 **** --- 206,218 ---- public void setArray(int i, java.sql.Array x) throws SQLException { + checkClosed(); setString(i, x.toString()); } public void setBlob(int i, Blob x) throws SQLException { + checkClosed(); InputStream l_inStream = x.getBinaryStream(); LargeObjectManager lom = connection.getLargeObjectAPI(); int oid = lom.create(); *************** public abstract class AbstractJdbc2State *** 241,246 **** --- 254,260 ---- public void setCharacterStream(int i, java.io.Reader x, int length) throws SQLException { + checkClosed(); if (connection.haveMinimumCompatibleVersion("7.2")) { //Version 7.2 supports CharacterStream for for the PG text types *************** public abstract class AbstractJdbc2State *** 296,301 **** --- 310,316 ---- public void setClob(int i, Clob x) throws SQLException { + checkClosed(); InputStream l_inStream = x.getAsciiStream(); int l_length = (int) x.length(); LargeObjectManager lom = connection.getLargeObjectAPI(); *************** public abstract class AbstractJdbc2State *** 327,332 **** --- 342,348 ---- public void setNull(int i, int t, String s) throws SQLException { + checkClosed(); setNull(i, t); } *************** public abstract class AbstractJdbc2State *** 337,342 **** --- 353,359 ---- public void setDate(int i, java.sql.Date d, java.util.Calendar cal) throws SQLException { + checkClosed(); if (cal == null) setDate(i, d); else *************** public abstract class AbstractJdbc2State *** 348,353 **** --- 365,371 ---- public void setTime(int i, Time t, java.util.Calendar cal) throws SQLException { + checkClosed(); if (cal == null) setTime(i, t); else *************** public abstract class AbstractJdbc2State *** 359,364 **** --- 377,383 ---- public void setTimestamp(int i, Timestamp t, java.util.Calendar cal) throws SQLException { + checkClosed(); if (cal == null) setTimestamp(i, t); else *************** public abstract class AbstractJdbc2State *** 377,382 **** --- 396,402 ---- public java.math.BigDecimal getBigDecimal(int parameterIndex) throws SQLException { + checkClosed(); checkIndex (parameterIndex, Types.NUMERIC, "BigDecimal"); return ((BigDecimal)callResult); }