Re: DatabaseMetaData.getTables() problem - Mailing list pgsql-jdbc
From | Barry Lind |
---|---|
Subject | Re: DatabaseMetaData.getTables() problem |
Date | |
Msg-id | 3DC62570.7060702@xythos.com Whole thread Raw |
In response to | Re: DatabaseMetaData.getTables() problem (Kris Jurka <books@ejurka.com>) |
Responses |
Re: DatabaseMetaData.getTables() problem
|
List | pgsql-jdbc |
Patch applied. Kris Jurka wrote: > I have given this some further thought and believe that we should not do > any case folding in the driver for DatabaseMetaData calls. We cannot > guess what the caller's intention is regarding case handling, so instead > the driver provides the necessary methods to let the user know what the > database does with regard to case. The following methods allow the > caller to do their own case folding if necessary: > > storesLowerCaseIdentifiers > storesLowerCaseQuotedIdentifiers > storesMixedCaseIdentifiers > storesMixedCaseQuotedIdentifiers > storesUpperCaseIdentifiers > storesUpperCaseQuotedIdentifiers > supportsMixedCaseIdentifiers > supportsMixedCaseQuotedIdentifiers > > The attached patch removes the existing case folding in the driver. > > > Barry Lind wrote: > >>Kris, >> >>I can't think of anything better. So yes please submit a patch for this. >> >>thanks, >>--Barry >> >>Kris Jurka wrote: >> >>>This has not been fixed. Currently the driver is doing something along >>>the lines of >>> >>>" WHERE c.relname LIKE " + tableNamePattern.toLowerCase(); >>> >>>This masks the problem of a user supplying an uppercase version of a >>>tablename that was case folded to lower, but does not work when they >>>really want an uppercase table name. >>> >>>I believe that adding a LOWER() to c.relname is the best temporary >>>solution until we figure out a better way to handle case sensitivity. >>> >>>Barry, If you believe this is the way to go I will work up a patch for >>>this an similar places in the driver. >>> >>>Kris Jurka >>> >>> >>>On Tue, 29 Oct 2002, Barry Lind wrote: >>> >>> >>> >>>>Wolfgang, >>>> >>>>Can you try this test using the 7.3beta3 build of the driver from >>>>jdbc.postgresql.org? I think this should be fixed in the latest build. >>>> >>>>thanks, >>>>--Barry >>>> >>>> >>>>w.winter wrote: >>>> >>>> >>>>>Hi, >>>>> >>>>>on testing our auto-configuration persistence framework ACP against >>>>>PostgreSQL we found the following problem: >>>>> >>>>>There is a table A625431658_Person1, created as quoted mixed case >>>>>identifier. >>>>> >>>>>I do: >>>>>databaseMetaData.getTables(null, null, "%", new String[] {"TABLE"}) >>>>>--> A625431658_Person1 is in the ResultSet. OK. >>>>> >>>>>I do: >>>>>databaseMetaData.getTables(null, null, "A625431658_Person1", new String[] >>>>>{"TABLE"}) >>>>>--> A625431658_Person1 is NOT in the ResultSet. >>>>> >>>>>I do: >>>>>databaseMetaData.getTables(null, null, "%erson1", new String[] {"TABLE"}) >>>>>--> A625431658_Person1 is in the ResultSet. OK. >>>>> >>>>>Seems there is a problem with mixed case ? >>>>> >>>>> >>>>>Wolfgang >>>>> >>>>>___________________ >>>>>Dr. Wolfgang Winter >>>>>LogiTags Systems >>>>>www.logitags.com >>>>> >>>>> >>>>>------------------------------------------------------------------------ >>>>> >>>>>? src/interfaces/jdbc/org/postgresql/Driver.java >>>>>Index: src/interfaces/jdbc/org/postgresql//jdbc1/AbstractJdbc1DatabaseMetaData.java >>>>>=================================================================== >>>>>RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java,v >>>>>retrieving revision 1.9 >>>>>diff -c -r1.9 AbstractJdbc1DatabaseMetaData.java >>>>>*** src/interfaces/jdbc/org/postgresql//jdbc1/AbstractJdbc1DatabaseMetaData.java 2002/10/25 02:54:37 1.9 >>>>>--- src/interfaces/jdbc/org/postgresql//jdbc1/AbstractJdbc1DatabaseMetaData.java 2002/11/02 22:26:58 >>>>>*************** >>>>>*** 314,323 **** >>>>> * as case sensitive and as a result store them in mixed case? >>>>> * A JDBC-Compliant driver will always return false. >>>>> * >>>>>- * <p>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 >>>>> */ >>>>>--- 314,319 ---- >>>>>*************** >>>>>*** 1725,1734 **** >>>>> " 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())+"' "; >>>>> } >>>>> if (procedureNamePattern != null) { >>>>>! sql += " AND p.proname LIKE '"+escapeQuotes(procedureNamePattern.toLowerCase())+"' "; >>>>> } >>>>> sql += " ORDER BY PROCEDURE_SCHEM, PROCEDURE_NAME "; >>>>> } else if (connection.haveMinimumServerVersion("7.1")) { >>>>>--- 1721,1730 ---- >>>>> " 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)+"' "; >>>>> } >>>>> if (procedureNamePattern != null) { >>>>>! sql += " AND p.proname LIKE '"+escapeQuotes(procedureNamePattern)+"' "; >>>>> } >>>>> sql += " ORDER BY PROCEDURE_SCHEM, PROCEDURE_NAME "; >>>>> } else if (connection.haveMinimumServerVersion("7.1")) { >>>>>*************** >>>>>*** 1737,1750 **** >>>>> " 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 += " 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 += " ORDER BY PROCEDURE_NAME "; >>>>> } >>>>>--- 1733,1746 ---- >>>>> " 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)+"' "; >>>>> } >>>>> 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)+"' "; >>>>> } >>>>> sql += " ORDER BY PROCEDURE_NAME "; >>>>> } >>>>>*************** >>>>>*** 1822,1831 **** >>>>> " 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())+"' "; >>>>> } >>>>> if (procedureNamePattern != null) { >>>>>! sql += " AND p.proname LIKE '"+escapeQuotes(procedureNamePattern.toLowerCase())+"' "; >>>>> } >>>>> sql += " ORDER BY n.nspname, p.proname "; >>>>> } else { >>>>>--- 1818,1827 ---- >>>>> " 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)+"' "; >>>>> } >>>>> if (procedureNamePattern != null) { >>>>>! sql += " AND p.proname LIKE '"+escapeQuotes(procedureNamePattern)+"' "; >>>>> } >>>>> sql += " ORDER BY n.nspname, p.proname "; >>>>> } else { >>>>>*************** >>>>>*** 1833,1839 **** >>>>> " FROM pg_proc p,pg_type t "+ >>>>> " WHERE p.prorettype=t.oid "; >>>>> if (procedureNamePattern != null) { >>>>>! sql += " AND p.proname LIKE '"+escapeQuotes(procedureNamePattern.toLowerCase())+"' "; >>>>> } >>>>> sql += " ORDER BY p.proname "; >>>>> } >>>>>--- 1829,1835 ---- >>>>> " FROM pg_proc p,pg_type t "+ >>>>> " WHERE p.prorettype=t.oid "; >>>>> if (procedureNamePattern != null) { >>>>>! sql += " AND p.proname LIKE '"+escapeQuotes(procedureNamePattern)+"' "; >>>>> } >>>>> sql += " ORDER BY p.proname "; >>>>> } >>>>>*************** >>>>>*** 1997,2006 **** >>>>> " 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())+"' "; >>>>> } >>>>> if (tableNamePattern != null) { >>>>>! select += " AND c.relname LIKE '"+escapeQuotes(tableNamePattern.toLowerCase())+"' "; >>>>> } >>>>> orderby = " ORDER BY TABLE_TYPE,TABLE_SCHEM,TABLE_NAME "; >>>>> } else { >>>>>--- 1993,2002 ---- >>>>> " 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)+"' "; >>>>> } >>>>> if (tableNamePattern != null) { >>>>>! select += " AND c.relname LIKE '"+escapeQuotes(tableNamePattern)+"' "; >>>>> } >>>>> orderby = " ORDER BY TABLE_TYPE,TABLE_SCHEM,TABLE_NAME "; >>>>> } else { >>>>>*************** >>>>>*** 2290,2296 **** >>>>> " 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())+"' "; >>>>> } >>>>> } 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"+ >>>>>--- 2286,2292 ---- >>>>> " 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)+"' "; >>>>> } >>>>> } 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,2317 **** >>>>> } >>>>> >>>>> if (tableNamePattern != null && !"".equals(tableNamePattern)) { >>>>>! sql += " AND c.relname LIKE '"+escapeQuotes(tableNamePattern.toLowerCase())+"' "; >>>>> } >>>>> if (columnNamePattern != null && !"".equals(columnNamePattern)) { >>>>>! sql += " AND a.attname LIKE '"+escapeQuotes(columnNamePattern.toLowerCase())+"' "; >>>>> } >>>>> sql += " ORDER BY nspname,relname,attname "; >>>>> >>>>>--- 2304,2313 ---- >>>>> } >>>>> >>>>> if (tableNamePattern != null && !"".equals(tableNamePattern)) { >>>>>! sql += " AND c.relname LIKE '"+escapeQuotes(tableNamePattern)+"' "; >>>>> } >>>>> if (columnNamePattern != null && !"".equals(columnNamePattern)) { >>>>>! sql += " AND a.attname LIKE '"+escapeQuotes(columnNamePattern)+"' "; >>>>> } >>>>> sql += " ORDER BY nspname,relname,attname "; >>>>> >>>>>*************** >>>>>*** 2410,2417 **** >>>>> >>>>> 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()); >>>>>--- 2406,2411 ---- >>>>>*************** >>>>>*** 2432,2438 **** >>>>> " AND c.relkind = 'r' "+ >>>>> " AND a.attnum > 0 AND NOT a.attisdropped "; >>>>> if (schema != null && !"".equals(schema)) { >>>>>! sql += " AND n.nspname = '"+escapeQuotes(schema.toLowerCase())+"' "; >>>>> } >>>>> } else { >>>>> sql = "SELECT NULL::text AS nspname,c.relname,u.usename,c.relacl,a.attname "+ >>>>>--- 2426,2432 ---- >>>>> " AND c.relkind = 'r' "+ >>>>> " AND a.attnum > 0 AND NOT a.attisdropped "; >>>>> if (schema != null && !"".equals(schema)) { >>>>>! sql += " AND n.nspname = '"+escapeQuotes(schema)+"' "; >>>>> } >>>>> } else { >>>>> sql = "SELECT NULL::text AS nspname,c.relname,u.usename,c.relacl,a.attname "+ >>>>>*************** >>>>>*** 2443,2451 **** >>>>> " AND c.relkind = 'r' "; >>>>> } >>>>> >>>>>! sql += " AND c.relname = '"+escapeQuotes(table.toLowerCase())+"' "; >>>>> if (columnNamePattern != null && !"".equals(columnNamePattern)) { >>>>>! sql += " AND a.attname LIKE '"+escapeQuotes(columnNamePattern.toLowerCase())+"' "; >>>>> } >>>>> sql += " ORDER BY attname "; >>>>> >>>>>--- 2437,2445 ---- >>>>> " AND c.relkind = 'r' "; >>>>> } >>>>> >>>>>! sql += " AND c.relname = '"+escapeQuotes(table)+"' "; >>>>> if (columnNamePattern != null && !"".equals(columnNamePattern)) { >>>>>! sql += " AND a.attname LIKE '"+escapeQuotes(columnNamePattern)+"' "; >>>>> } >>>>> sql += " ORDER BY attname "; >>>>> >>>>>*************** >>>>>*** 2538,2544 **** >>>>> " AND u.usesysid = c.relowner "+ >>>>> " AND c.relkind = 'r' "; >>>>> if (schemaPattern != null && !"".equals(schemaPattern)) { >>>>>! sql += " AND n.nspname LIKE '"+escapeQuotes(schemaPattern.toLowerCase())+"' "; >>>>> } >>>>> } else { >>>>> sql = "SELECT NULL::text AS nspname,c.relname,u.usename,c.relacl "+ >>>>>--- 2532,2538 ---- >>>>> " AND u.usesysid = c.relowner "+ >>>>> " AND c.relkind = 'r' "; >>>>> if (schemaPattern != null && !"".equals(schemaPattern)) { >>>>>! sql += " AND n.nspname LIKE '"+escapeQuotes(schemaPattern)+"' "; >>>>> } >>>>> } else { >>>>> sql = "SELECT NULL::text AS nspname,c.relname,u.usename,c.relacl "+ >>>>>*************** >>>>>*** 2548,2554 **** >>>>> } >>>>> >>>>> if (tableNamePattern != null && !"".equals(tableNamePattern)) { >>>>>! sql += " AND c.relname LIKE '"+escapeQuotes(tableNamePattern.toLowerCase())+"' "; >>>>> } >>>>> sql += " ORDER BY nspname, relname "; >>>>> >>>>>--- 2542,2548 ---- >>>>> } >>>>> >>>>> if (tableNamePattern != null && !"".equals(tableNamePattern)) { >>>>>! sql += " AND c.relname LIKE '"+escapeQuotes(tableNamePattern)+"' "; >>>>> } >>>>> sql += " ORDER BY nspname, relname "; >>>>> >>>>>*************** >>>>>*** 2752,2758 **** >>>>> from = " FROM pg_catalog.pg_namespace n, pg_catalog.pg_class ct, pg_catalog.pg_class ci, pg_catalog.pg_attributea, pg_catalog.pg_index i "; >>>>> where = " AND ct.relnamespace = n.oid "; >>>>> if (schema != null && !"".equals(schema)) { >>>>>! where += " AND n.nspname = '"+escapeQuotes(schema.toLowerCase())+"' "; >>>>> } >>>>> } else { >>>>> from = " FROM pg_class ct, pg_class ci, pg_attribute a, pg_index i "; >>>>>--- 2746,2752 ---- >>>>> from = " FROM pg_catalog.pg_namespace n, pg_catalog.pg_class ct, pg_catalog.pg_class ci, pg_catalog.pg_attributea, pg_catalog.pg_index i "; >>>>> where = " AND ct.relnamespace = n.oid "; >>>>> if (schema != null && !"".equals(schema)) { >>>>>! where += " AND n.nspname = '"+escapeQuotes(schema)+"' "; >>>>> } >>>>> } else { >>>>> from = " FROM pg_class ct, pg_class ci, pg_attribute a, pg_index i "; >>>>>*************** >>>>>*** 2761,2767 **** >>>>> 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())+"' "+ >>>>> where+ >>>>> " ORDER BY a.attnum "; >>>>> >>>>>--- 2755,2761 ---- >>>>> from+ >>>>> " WHERE ct.oid=i.indrelid AND ci.oid=i.indexrelid "+ >>>>> " AND a.attrelid=ci.oid AND i.indisprimary "+ >>>>>! " AND ct.relname = '"+escapeQuotes(table)+"' "+ >>>>> where+ >>>>> " ORDER BY a.attnum "; >>>>> >>>>>*************** >>>>>*** 2882,2888 **** >>>>> from = " FROM pg_catalog.pg_namespace n, pg_catalog.pg_class ct, pg_catalog.pg_class ci, pg_catalog.pg_attributea, pg_catalog.pg_index i "; >>>>> where = " AND ct.relnamespace = n.oid "; >>>>> if (schema != null && !"".equals(schema)) { >>>>>! where += " AND n.nspname = '"+escapeQuotes(schema.toLowerCase())+"' "; >>>>> } >>>>> } else { >>>>> select = "SELECT NULL AS TABLE_CAT, NULL AS TABLE_SCHEM, "; >>>>>--- 2876,2882 ---- >>>>> from = " FROM pg_catalog.pg_namespace n, pg_catalog.pg_class ct, pg_catalog.pg_class ci, pg_catalog.pg_attributea, pg_catalog.pg_index i "; >>>>> where = " AND ct.relnamespace = n.oid "; >>>>> if (schema != null && !"".equals(schema)) { >>>>>! where += " AND n.nspname = '"+escapeQuotes(schema)+"' "; >>>>> } >>>>> } else { >>>>> select = "SELECT NULL AS TABLE_CAT, NULL AS TABLE_SCHEM, "; >>>>>*************** >>>>>*** 2896,2902 **** >>>>> 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())+"' "+ >>>>> where+ >>>>> " ORDER BY table_name, pk_name, key_seq"; >>>>> return connection.createStatement().executeQuery(sql); >>>>>--- 2890,2896 ---- >>>>> from+ >>>>> " WHERE ct.oid=i.indrelid AND ci.oid=i.indexrelid "+ >>>>> " AND a.attrelid=ci.oid AND i.indisprimary "+ >>>>>! " AND ct.relname = '"+escapeQuotes(table)+"' "+ >>>>> where+ >>>>> " ORDER BY table_name, pk_name, key_seq"; >>>>> return connection.createStatement().executeQuery(sql); >>>>>*************** >>>>>*** 3008,3017 **** >>>>> from = " FROM pg_catalog.pg_namespace n, pg_catalog.pg_namespace n2, pg_catalog.pg_trigger t, pg_catalog.pg_triggert1, pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_class ic, pg_catalog.pg_proc p1, pg_catalog.pg_procp2, 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())+"' "; >>>>> } >>>>> if (foreignSchema != null && !"".equals(foreignSchema)) { >>>>>! where += " AND n2.nspname = '"+escapeQuotes(foreignSchema.toLowerCase())+"' "; >>>>> } >>>>> } else { >>>>> select = "SELECT DISTINCT NULL::text as pnspname, NULL::text as fnspname, "; >>>>>--- 3002,3011 ---- >>>>> from = " FROM pg_catalog.pg_namespace n, pg_catalog.pg_namespace n2, pg_catalog.pg_trigger t, pg_catalog.pg_triggert1, pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_class ic, pg_catalog.pg_proc p1, pg_catalog.pg_procp2, 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)+"' "; >>>>> } >>>>> if (foreignSchema != null && !"".equals(foreignSchema)) { >>>>>! where += " AND n2.nspname = '"+escapeQuotes(foreignSchema)+"' "; >>>>> } >>>>> } else { >>>>> select = "SELECT DISTINCT NULL::text as pnspname, NULL::text as fnspname, "; >>>>>*************** >>>>>*** 3052,3061 **** >>>>> + where; >>>>> >>>>> if (primaryTable != null) { >>>>>! sql += "AND c.relname='" + escapeQuotes(primaryTable.toLowerCase()) + "' "; >>>>> } >>>>> if (foreignTable != null) { >>>>>! sql += "AND c2.relname='" + escapeQuotes(foreignTable.toLowerCase()) + "' "; >>>>> } >>>>> >>>>> sql += "ORDER BY "; >>>>>--- 3046,3055 ---- >>>>> + where; >>>>> >>>>> if (primaryTable != null) { >>>>>! sql += "AND c.relname='" + escapeQuotes(primaryTable) + "' "; >>>>> } >>>>> if (foreignTable != null) { >>>>>! sql += "AND c2.relname='" + escapeQuotes(foreignTable) + "' "; >>>>> } >>>>> >>>>> sql += "ORDER BY "; >>>>>*************** >>>>>*** 3548,3554 **** >>>>> from = " FROM pg_catalog.pg_namespace n, pg_catalog.pg_class ct, pg_catalog.pg_class ci, pg_catalog.pg_indexi, 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())+"' "; >>>>> } >>>>> } else { >>>>> select = "SELECT NULL AS TABLE_CAT, NULL AS TABLE_SCHEM, "; >>>>>--- 3542,3548 ---- >>>>> from = " FROM pg_catalog.pg_namespace n, pg_catalog.pg_class ct, pg_catalog.pg_class ci, pg_catalog.pg_indexi, 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)+"' "; >>>>> } >>>>> } else { >>>>> select = "SELECT NULL AS TABLE_CAT, NULL AS TABLE_SCHEM, "; >>>>>*************** >>>>>*** 3573,3579 **** >>>>> 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())+"' "; >>>>> >>>>> if (unique) { >>>>> sql += " AND i.indisunique "; >>>>>--- 3567,3573 ---- >>>>> 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)+"' "; >>>>> >>>>> if (unique) { >>>>> sql += " AND i.indisunique "; >>>>> >>>>> >>>>>------------------------------------------------------------------------ >>>>> >>>>> >>>>>---------------------------(end of broadcast)--------------------------- >>>>>TIP 4: Don't 'kill -9' the postmaster >>>>
pgsql-jdbc by date: