Received: from candle.pha.pa.us (pgman@nav-43.dsl.navpoint.com [162.33.245.46]) by hub.org (8.10.1/8.10.1) with ESMTP id e8C4HIf98499; Tue, 12 Sep 2000 00:17:19 -0400 (EDT) Received: (from pgman@localhost) by candle.pha.pa.us (8.9.0/8.9.0) id AAA08841; Tue, 12 Sep 2000 00:16:57 -0400 (EDT) From: Bruce Momjian Message-Id: <200009120416.AAA08841@candle.pha.pa.us> Subject: Re: [PATCHES] JDBC Patch In-Reply-To: <39A577C6.52AD43D8@mhsoftware.com> "from Christopher Cain at Aug 24, 2000 01:30:14 pm" To: Christopher Cain Date: Tue, 12 Sep 2000 00:16:57 -0400 (EDT) CC: pgsql-interfaces@postgresql.org, pgsql-patches@postgresql.org X-Mailer: ELM [version 2.4ME+ PL77 (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Archive-Number: 200009/42 Applied. Thanks. > This patch for the 7.0.2 JDBC interface addresses four issues I > encountered while getting my reporting tool up and running with the > driver. All changes are in the DatabaseMetaData class. > > Problem: The getDatabaseProductVersion() method was returning "6.5.2" > Resolution: Changed it to return "7.0.2" > > Problem: A call to getTables() with an unsupported table type (in the > String array) resulted in a malformed SQL statement and subsequent > parsing error > Resolution: Unsupported table types are now ignored without error > > Problem: In a getTables() call, tables and views were both returned by > the "TABLE" table type, and the "VIEW" table type was unsupported > Resolution: Changed the "TABLE" type to return only physical tables and > added support for the "VIEW" table type (returning only views) > > Problem: The getIdentifierQuoteString() method was returning null > Resolution: This method now returns a double-quote > > Regards ... > > - Christopher > diff -U 5 -r postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.java postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.java > --- postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.java Mon Apr 17 14:07:48 2000 > +++ postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.java Thu Aug 24 11:42:28 2000 > @@ -177,11 +177,11 @@ > * @return the database version > * @exception SQLException if a database access error occurs > */ > public String getDatabaseProductVersion() throws SQLException > { > - return ("6.5.2"); > + return ("7.0.2"); > } > > /** > * What is the name of this JDBC driver? If we don't know this > * we are doing something wrong! > @@ -361,11 +361,11 @@ > * @return the quoting string > * @exception SQLException if a database access error occurs > */ > public String getIdentifierQuoteString() throws SQLException > { > - return null; > + return "\""; > } > > /** > * Get a comma separated list of all a database's SQL keywords that > * are NOT also SQL92 keywords. > @@ -1652,14 +1652,14 @@ > > // Now form the query > StringBuffer sql = new StringBuffer("select relname,oid from pg_class where ("); > boolean notFirst=false; > for(int i=0;i - if(notFirst) > - sql.append(" or "); > for(int j=0;j if(getTableTypes[j][0].equals(types[i])) { > + if(notFirst) > + sql.append(" or "); > sql.append(getTableTypes[j][1]); > notFirst=true; > } > } > > @@ -1704,22 +1704,23 @@ > // Each supported type consists of it's name, and the sql where > // clause to retrieve that value. > // > // IMPORTANT: the query must be enclosed in ( ) > private static final String getTableTypes[][] = { > - {"TABLE", "(relkind='r' and relname !~ '^pg_' and relname !~ '^xinv')"}, > + {"TABLE", "(relkind='r' and relhasrules='f' and relname !~ '^pg_' and relname !~ '^xinv')"}, > + {"VIEW", "(relkind='r' and relhasrules='t' and relname !~ '^pg_' and relname !~ '^xinv')"}, > {"INDEX", "(relkind='i' and relname !~ '^pg_' and relname !~ '^xinx')"}, > {"LARGE OBJECT", "(relkind='r' and relname ~ '^xinv')"}, > {"SEQUENCE", "(relkind='S' and relname !~ '^pg_')"}, > {"SYSTEM TABLE", "(relkind='r' and relname ~ '^pg_')"}, > {"SYSTEM INDEX", "(relkind='i' and relname ~ '^pg_')"} > }; > > // These are the default tables, used when NULL is passed to getTables > // The choice of these provide the same behaviour as psql's \d > private static final String defaultTableTypes[] = { > - "TABLE","INDEX","SEQUENCE" > + "TABLE","VIEW","INDEX","SEQUENCE" > }; > > /** > * Get the schema names available in this database. The results > * are ordered by schema name. > diff -U 5 -r postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java > --- postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java Mon Apr 17 14:07:50 2000 > +++ postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java Wed Aug 23 15:14:50 2000 > @@ -177,11 +177,11 @@ > * @return the database version > * @exception SQLException if a database access error occurs > */ > public String getDatabaseProductVersion() throws SQLException > { > - return ("6.5.2"); > + return ("7.0.2"); > } > > /** > * What is the name of this JDBC driver? If we don't know this > * we are doing something wrong! > @@ -361,11 +361,11 @@ > * @return the quoting string > * @exception SQLException if a database access error occurs > */ > public String getIdentifierQuoteString() throws SQLException > { > - return null; > + return "\""; > } > > /** > * Get a comma separated list of all a database's SQL keywords that > * are NOT also SQL92 keywords. > @@ -1652,14 +1652,14 @@ > > // Now form the query > StringBuffer sql = new StringBuffer("select relname,oid from pg_class where ("); > boolean notFirst=false; > for(int i=0;i - if(notFirst) > - sql.append(" or "); > for(int j=0;j if(getTableTypes[j][0].equals(types[i])) { > + if(notFirst) > + sql.append(" or "); > sql.append(getTableTypes[j][1]); > notFirst=true; > } > } > > @@ -1704,22 +1704,23 @@ > // Each supported type consists of it's name, and the sql where > // clause to retrieve that value. > // > // IMPORTANT: the query must be enclosed in ( ) > private static final String getTableTypes[][] = { > - {"TABLE", "(relkind='r' and relname !~ '^pg_' and relname !~ '^xinv')"}, > + {"TABLE", "(relkind='r' and relhasrules='f' and relname !~ '^pg_' and relname !~ '^xinv')"}, > + {"VIEW", "(relkind='r' and relhasrules='t' and relname !~ '^pg_' and relname !~ '^xinv')"}, > {"INDEX", "(relkind='i' and relname !~ '^pg_' and relname !~ '^xinx')"}, > {"LARGE OBJECT", "(relkind='r' and relname ~ '^xinv')"}, > {"SEQUENCE", "(relkind='S' and relname !~ '^pg_')"}, > {"SYSTEM TABLE", "(relkind='r' and relname ~ '^pg_')"}, > {"SYSTEM INDEX", "(relkind='i' and relname ~ '^pg_')"} > }; > > // These are the default tables, used when NULL is passed to getTables > // The choice of these provide the same behaviour as psql's \d > private static final String defaultTableTypes[] = { > - "TABLE","INDEX","SEQUENCE" > + "TABLE","VIEW","INDEX","SEQUENCE" > }; > > /** > * Get the schema names available in this database. The results > * are ordered by schema name. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026