From fdf6b4ff936167388fc18276cbcf88c54dd0d3b7 Mon Sep 17 00:00:00 2001 From: Barry Lind Date: Mon, 4 Nov 2002 06:42:33 +0000 Subject: [PATCH] Applied two patches from Kris Jurka. - First fixes a problem with a recent patch allowing setNull on updateable resultsets - Second removed toLower() calls on database object names. Leave it to the caller to correctly pass lower, upper or mixed case. The driver already has methods that the caller can use to determine that postgres stores identifiers in lowercase. (unless the identifier was quoted when created). Modified Files: jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java --- .../jdbc1/AbstractJdbc1DatabaseMetaData.java | 60 ++++++++++------------ .../postgresql/jdbc2/AbstractJdbc2ResultSet.java | 60 ++++++++++++---------- 2 files changed, 61 insertions(+), 59 deletions(-) diff --git a/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java b/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java index f126b4002e..2fd1a2bd8e 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java @@ -314,10 +314,6 @@ public abstract class AbstractJdbc1DatabaseMetaData * as case sensitive and as a result store them in mixed case? * A JDBC-Compliant driver will always return false. * - *

Predicament - what do they mean by "SQL identifiers" - if it - * means the names of the tables and columns, then the answers - * given below are correct - otherwise I don't know. - * * @return true if so * @exception SQLException if a database access error occurs */ @@ -1725,10 +1721,10 @@ public abstract class AbstractJdbc1DatabaseMetaData " LEFT JOIN pg_catalog.pg_namespace pn ON (c.relnamespace=pn.oid AND pn.nspname='pg_catalog') "+ " WHERE p.pronamespace=n.oid "; if (schemaPattern != null && !"".equals(schemaPattern)) { - sql += " AND n.nspname LIKE '"+escapeQuotes(schemaPattern.toLowerCase())+"' "; + sql += " AND n.nspname LIKE '"+escapeQuotes(schemaPattern)+"' "; } if (procedureNamePattern != null) { - sql += " AND p.proname LIKE '"+escapeQuotes(procedureNamePattern.toLowerCase())+"' "; + sql += " AND p.proname LIKE '"+escapeQuotes(procedureNamePattern)+"' "; } sql += " ORDER BY PROCEDURE_SCHEM, PROCEDURE_NAME "; } else if (connection.haveMinimumServerVersion("7.1")) { @@ -1737,14 +1733,14 @@ public abstract class AbstractJdbc1DatabaseMetaData " LEFT JOIN pg_description d ON (p.oid=d.objoid) "+ " LEFT JOIN pg_class c ON (d.classoid=c.oid AND c.relname='pg_proc') "; if (procedureNamePattern != null) { - sql += " WHERE p.proname LIKE '"+escapeQuotes(procedureNamePattern.toLowerCase())+"' "; + sql += " WHERE p.proname LIKE '"+escapeQuotes(procedureNamePattern)+"' "; } sql += " ORDER BY PROCEDURE_NAME "; } else { sql = "SELECT NULL AS PROCEDURE_CAT, NULL AS PROCEDURE_SCHEM, p.proname AS PROCEDURE_NAME, NULL, NULL, NULL, NULL AS REMARKS, "+java.sql.DatabaseMetaData.procedureReturnsResult+" AS PROCEDURE_TYPE "+ " FROM pg_proc p "; if (procedureNamePattern != null) { - sql += " WHERE p.proname LIKE '"+escapeQuotes(procedureNamePattern.toLowerCase())+"' "; + sql += " WHERE p.proname LIKE '"+escapeQuotes(procedureNamePattern)+"' "; } sql += " ORDER BY PROCEDURE_NAME "; } @@ -1822,10 +1818,10 @@ public abstract class AbstractJdbc1DatabaseMetaData " FROM pg_catalog.pg_proc p,pg_catalog.pg_namespace n, pg_catalog.pg_type t "+ " WHERE p.pronamespace=n.oid AND p.prorettype=t.oid "; if (schemaPattern != null && !"".equals(schemaPattern)) { - sql += " AND n.nspname LIKE '"+escapeQuotes(schemaPattern.toLowerCase())+"' "; + sql += " AND n.nspname LIKE '"+escapeQuotes(schemaPattern)+"' "; } if (procedureNamePattern != null) { - sql += " AND p.proname LIKE '"+escapeQuotes(procedureNamePattern.toLowerCase())+"' "; + sql += " AND p.proname LIKE '"+escapeQuotes(procedureNamePattern)+"' "; } sql += " ORDER BY n.nspname, p.proname "; } else { @@ -1833,7 +1829,7 @@ public abstract class AbstractJdbc1DatabaseMetaData " FROM pg_proc p,pg_type t "+ " WHERE p.prorettype=t.oid "; if (procedureNamePattern != null) { - sql += " AND p.proname LIKE '"+escapeQuotes(procedureNamePattern.toLowerCase())+"' "; + sql += " AND p.proname LIKE '"+escapeQuotes(procedureNamePattern)+"' "; } sql += " ORDER BY p.proname "; } @@ -1997,10 +1993,10 @@ public abstract class AbstractJdbc1DatabaseMetaData " LEFT JOIN pg_catalog.pg_namespace dn ON (dn.oid=dc.relnamespace AND dn.nspname='pg_catalog') "+ " WHERE c.relnamespace = n.oid "; if (schemaPattern != null && !"".equals(schemaPattern)) { - select += " AND n.nspname LIKE '"+escapeQuotes(schemaPattern.toLowerCase())+"' "; + select += " AND n.nspname LIKE '"+escapeQuotes(schemaPattern)+"' "; } if (tableNamePattern != null) { - select += " AND c.relname LIKE '"+escapeQuotes(tableNamePattern.toLowerCase())+"' "; + select += " AND c.relname LIKE '"+escapeQuotes(tableNamePattern)+"' "; } orderby = " ORDER BY TABLE_TYPE,TABLE_SCHEM,TABLE_NAME "; } else { @@ -2290,7 +2286,7 @@ public abstract class AbstractJdbc1DatabaseMetaData " LEFT JOIN pg_catalog.pg_namespace dn ON (dc.relnamespace=dn.oid AND dn.nspname='pg_catalog') "+ " WHERE a.attnum > 0 AND NOT a.attisdropped "; if (schemaPattern != null && !"".equals(schemaPattern)) { - sql += " AND n.nspname LIKE '"+escapeQuotes(schemaPattern.toLowerCase())+"' "; + sql += " AND n.nspname LIKE '"+escapeQuotes(schemaPattern)+"' "; } } else if (connection.haveMinimumServerVersion("7.1")) { sql = "SELECT NULL::text AS nspname,c.relname,a.attname,a.atttypid,a.attnotnull,a.atttypmod,a.attlen,a.attnum,def.adsrc,dsc.description "+ @@ -2308,10 +2304,10 @@ public abstract class AbstractJdbc1DatabaseMetaData } if (tableNamePattern != null && !"".equals(tableNamePattern)) { - sql += " AND c.relname LIKE '"+escapeQuotes(tableNamePattern.toLowerCase())+"' "; + sql += " AND c.relname LIKE '"+escapeQuotes(tableNamePattern)+"' "; } if (columnNamePattern != null && !"".equals(columnNamePattern)) { - sql += " AND a.attname LIKE '"+escapeQuotes(columnNamePattern.toLowerCase())+"' "; + sql += " AND a.attname LIKE '"+escapeQuotes(columnNamePattern)+"' "; } sql += " ORDER BY nspname,relname,attname "; @@ -2410,8 +2406,6 @@ public abstract class AbstractJdbc1DatabaseMetaData if (columnNamePattern == null) columnNamePattern = "%"; - else - columnNamePattern = columnNamePattern.toLowerCase(); f[0] = new Field(connection, "TABLE_CAT", iVarcharOid, getMaxNameLength()); f[1] = new Field(connection, "TABLE_SCHEM", iVarcharOid, getMaxNameLength()); @@ -2432,7 +2426,7 @@ public abstract class AbstractJdbc1DatabaseMetaData " AND c.relkind = 'r' "+ " AND a.attnum > 0 AND NOT a.attisdropped "; if (schema != null && !"".equals(schema)) { - sql += " AND n.nspname = '"+escapeQuotes(schema.toLowerCase())+"' "; + sql += " AND n.nspname = '"+escapeQuotes(schema)+"' "; } } else { sql = "SELECT NULL::text AS nspname,c.relname,u.usename,c.relacl,a.attname "+ @@ -2443,9 +2437,9 @@ public abstract class AbstractJdbc1DatabaseMetaData " AND c.relkind = 'r' "; } - sql += " AND c.relname = '"+escapeQuotes(table.toLowerCase())+"' "; + sql += " AND c.relname = '"+escapeQuotes(table)+"' "; if (columnNamePattern != null && !"".equals(columnNamePattern)) { - sql += " AND a.attname LIKE '"+escapeQuotes(columnNamePattern.toLowerCase())+"' "; + sql += " AND a.attname LIKE '"+escapeQuotes(columnNamePattern)+"' "; } sql += " ORDER BY attname "; @@ -2538,7 +2532,7 @@ public abstract class AbstractJdbc1DatabaseMetaData " AND u.usesysid = c.relowner "+ " AND c.relkind = 'r' "; if (schemaPattern != null && !"".equals(schemaPattern)) { - sql += " AND n.nspname LIKE '"+escapeQuotes(schemaPattern.toLowerCase())+"' "; + sql += " AND n.nspname LIKE '"+escapeQuotes(schemaPattern)+"' "; } } else { sql = "SELECT NULL::text AS nspname,c.relname,u.usename,c.relacl "+ @@ -2548,7 +2542,7 @@ public abstract class AbstractJdbc1DatabaseMetaData } if (tableNamePattern != null && !"".equals(tableNamePattern)) { - sql += " AND c.relname LIKE '"+escapeQuotes(tableNamePattern.toLowerCase())+"' "; + sql += " AND c.relname LIKE '"+escapeQuotes(tableNamePattern)+"' "; } sql += " ORDER BY nspname, relname "; @@ -2752,7 +2746,7 @@ public abstract class AbstractJdbc1DatabaseMetaData from = " FROM pg_catalog.pg_namespace n, pg_catalog.pg_class ct, pg_catalog.pg_class ci, pg_catalog.pg_attribute a, pg_catalog.pg_index i "; where = " AND ct.relnamespace = n.oid "; if (schema != null && !"".equals(schema)) { - where += " AND n.nspname = '"+escapeQuotes(schema.toLowerCase())+"' "; + where += " AND n.nspname = '"+escapeQuotes(schema)+"' "; } } else { from = " FROM pg_class ct, pg_class ci, pg_attribute a, pg_index i "; @@ -2761,7 +2755,7 @@ public abstract class AbstractJdbc1DatabaseMetaData from+ " WHERE ct.oid=i.indrelid AND ci.oid=i.indexrelid "+ " AND a.attrelid=ci.oid AND i.indisprimary "+ - " AND ct.relname = '"+escapeQuotes(table.toLowerCase())+"' "+ + " AND ct.relname = '"+escapeQuotes(table)+"' "+ where+ " ORDER BY a.attnum "; @@ -2882,7 +2876,7 @@ public abstract class AbstractJdbc1DatabaseMetaData from = " FROM pg_catalog.pg_namespace n, pg_catalog.pg_class ct, pg_catalog.pg_class ci, pg_catalog.pg_attribute a, pg_catalog.pg_index i "; where = " AND ct.relnamespace = n.oid "; if (schema != null && !"".equals(schema)) { - where += " AND n.nspname = '"+escapeQuotes(schema.toLowerCase())+"' "; + where += " AND n.nspname = '"+escapeQuotes(schema)+"' "; } } else { select = "SELECT NULL AS TABLE_CAT, NULL AS TABLE_SCHEM, "; @@ -2896,7 +2890,7 @@ public abstract class AbstractJdbc1DatabaseMetaData from+ " WHERE ct.oid=i.indrelid AND ci.oid=i.indexrelid "+ " AND a.attrelid=ci.oid AND i.indisprimary "+ - " AND ct.relname = '"+escapeQuotes(table.toLowerCase())+"' "+ + " AND ct.relname = '"+escapeQuotes(table)+"' "+ where+ " ORDER BY table_name, pk_name, key_seq"; return connection.createStatement().executeQuery(sql); @@ -3008,10 +3002,10 @@ public abstract class AbstractJdbc1DatabaseMetaData from = " FROM pg_catalog.pg_namespace n, pg_catalog.pg_namespace n2, pg_catalog.pg_trigger t, pg_catalog.pg_trigger t1, pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_class ic, pg_catalog.pg_proc p1, pg_catalog.pg_proc p2, pg_catalog.pg_index i, pg_catalog.pg_attribute a "; where = " AND c.relnamespace = n.oid AND c2.relnamespace=n2.oid "; if (primarySchema != null && !"".equals(primarySchema)) { - where += " AND n.nspname = '"+escapeQuotes(primarySchema.toLowerCase())+"' "; + where += " AND n.nspname = '"+escapeQuotes(primarySchema)+"' "; } if (foreignSchema != null && !"".equals(foreignSchema)) { - where += " AND n2.nspname = '"+escapeQuotes(foreignSchema.toLowerCase())+"' "; + where += " AND n2.nspname = '"+escapeQuotes(foreignSchema)+"' "; } } else { select = "SELECT DISTINCT NULL::text as pnspname, NULL::text as fnspname, "; @@ -3052,10 +3046,10 @@ public abstract class AbstractJdbc1DatabaseMetaData + where; if (primaryTable != null) { - sql += "AND c.relname='" + escapeQuotes(primaryTable.toLowerCase()) + "' "; + sql += "AND c.relname='" + escapeQuotes(primaryTable) + "' "; } if (foreignTable != null) { - sql += "AND c2.relname='" + escapeQuotes(foreignTable.toLowerCase()) + "' "; + sql += "AND c2.relname='" + escapeQuotes(foreignTable) + "' "; } sql += "ORDER BY "; @@ -3548,7 +3542,7 @@ public abstract class AbstractJdbc1DatabaseMetaData from = " FROM pg_catalog.pg_namespace n, pg_catalog.pg_class ct, pg_catalog.pg_class ci, pg_catalog.pg_index i, pg_catalog.pg_attribute a, pg_catalog.pg_am am "; where = " AND n.oid = ct.relnamespace "; if (schema != null && ! "".equals(schema)) { - where += " AND n.nspname = '"+escapeQuotes(schema.toLowerCase())+"' "; + where += " AND n.nspname = '"+escapeQuotes(schema)+"' "; } } else { select = "SELECT NULL AS TABLE_CAT, NULL AS TABLE_SCHEM, "; @@ -3573,7 +3567,7 @@ public abstract class AbstractJdbc1DatabaseMetaData from+ " WHERE ct.oid=i.indrelid AND ci.oid=i.indexrelid AND a.attrelid=ci.oid AND ci.relam=am.oid "+ where+ - " AND ct.relname = '"+escapeQuotes(tableName.toLowerCase())+"' "; + " AND ct.relname = '"+escapeQuotes(tableName)+"' "; if (unique) { sql += " AND i.indisunique "; diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java b/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java index 24d9f426ec..23191b16a6 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java @@ -15,7 +15,7 @@ import org.postgresql.util.PGbytea; import org.postgresql.util.PSQLException; -/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/AbstractJdbc2ResultSet.java,v 1.9 2002/10/17 19:17:08 barry Exp $ +/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/AbstractJdbc2ResultSet.java,v 1.10 2002/11/04 06:42:33 barry Exp $ * This class defines methods of the jdbc2 specification. This class extends * org.postgresql.jdbc1.AbstractJdbc1ResultSet which provides the jdbc1 * methods. The real Statement class (for jdbc2) is org.postgresql.jdbc2.Jdbc2ResultSet @@ -1406,34 +1406,42 @@ public abstract class AbstractJdbc2ResultSet extends org.postgresql.jdbc1.Abstra String columnName = (String) columns.nextElement(); int columnIndex = _findColumn( columnName ) - 1; - switch ( connection.getSQLType( fields[columnIndex].getPGType() ) ) + Object valueObject = updateValues.get(columnName); + if (valueObject instanceof NullObject) { + rowBuffer[columnIndex] = null; + } + else { + + switch ( connection.getSQLType( fields[columnIndex].getPGType() ) ) + { - case Types.DECIMAL: - case Types.BIGINT: - case Types.DOUBLE: - case Types.BIT: - case Types.VARCHAR: - case Types.DATE: - case Types.TIME: - case Types.TIMESTAMP: - case Types.SMALLINT: - case Types.FLOAT: - case Types.INTEGER: - case Types.CHAR: - case Types.NUMERIC: - case Types.REAL: - case Types.TINYINT: - - rowBuffer[columnIndex] = connection.getEncoding().encode(String.valueOf( updateValues.get( columnName ) )); - - case Types.NULL: - continue; - - default: - rowBuffer[columnIndex] = (byte[]) updateValues.get( columnName ); - } + case Types.DECIMAL: + case Types.BIGINT: + case Types.DOUBLE: + case Types.BIT: + case Types.VARCHAR: + case Types.DATE: + case Types.TIME: + case Types.TIMESTAMP: + case Types.SMALLINT: + case Types.FLOAT: + case Types.INTEGER: + case Types.CHAR: + case Types.NUMERIC: + case Types.REAL: + case Types.TINYINT: + + rowBuffer[columnIndex] = connection.getEncoding().encode(String.valueOf( valueObject)); + + case Types.NULL: + continue; + + default: + rowBuffer[columnIndex] = (byte[]) valueObject; + } + } } } -- 2.11.0