Re: DatabaseMetaData.getTables() problem - Mailing list pgsql-jdbc

From Dave Cramer
Subject Re: DatabaseMetaData.getTables() problem
Date
Msg-id 1036422567.20258.386.camel@inspiron.cramers
Whole thread Raw
In response to Re: DatabaseMetaData.getTables() problem  (Barry Lind <blind@xythos.com>)
List pgsql-jdbc
While I fully endorse this patch, I'm willing to bet this is going to
break some code out there.

Regards,

Dave
On Mon, 2002-11-04 at 02:44, Barry Lind wrote:
> 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
> >>>>
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo@postgresql.org so that your
> message can get through to the mailing list cleanly
>
>




pgsql-jdbc by date:

Previous
From: miguel angel rojas aquino
Date:
Subject: jbuilder and timestamps
Next
From: "Karl Goldstein"
Date:
Subject: