Thread: JDBC Patch
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<types.length;i++) { - if(notFirst) - sql.append(" or "); for(int j=0;j<getTableTypes.length;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<types.length;i++) { - if(notFirst) - sql.append(" or "); for(int j=0;j<getTableTypes.length;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.
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<types.length;i++) { > - if(notFirst) > - sql.append(" or "); > for(int j=0;j<getTableTypes.length;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<types.length;i++) { > - if(notFirst) > - sql.append(" or "); > for(int j=0;j<getTableTypes.length;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
Eeek, I've got this in my copy ready to commit. How is CVS going to handle this problem? Peter -- Peter Mount Enterprise Support Officer, Maidstone Borough Council Email: petermount@maidstone.gov.uk WWW: http://www.maidstone.gov.uk All views expressed within this email are not the views of Maidstone Borough Council -----Original Message----- From: Bruce Momjian [mailto:pgman@candle.pha.pa.us] Sent: Tuesday, September 12, 2000 5:17 AM To: Christopher Cain Cc: pgsql-interfaces@postgresql.org; pgsql-patches@postgresql.org Subject: Re: [PATCHES] JDBC Patch 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.j ava postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData. java > --- postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.j ava 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<types.length;i++) { > - if(notFirst) > - sql.append(" or "); > for(int j=0;j<getTableTypes.length;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.j ava postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData. java > --- postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.j ava 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<types.length;i++) { > - if(notFirst) > - sql.append(" or "); > for(int j=0;j<getTableTypes.length;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
Peter Mount <petermount@maidstone.gov.uk> writes: > Eeek, I've got this in my copy ready to commit. How is CVS going to handle > this problem? You'll have to "cvs update" those files and then check that the changes were merged correctly before you commit. I believe CVS will not let you commit a file in which there are changes since your last cvs update. Although "cvs update" will try to merge the changes from the repository with your local edits, my experience is that CVS is not too bright about merging overlapping differences. I prefer to do the change merge by hand --- move my modified files someplace else, cvs update to fetch clean current copies, then edit to bring the files back in sync. This process is a bit tedious, but much more reliable than CVS by itself. Jan Wieck has posted about his preferred method, which IIRC involves working in a complete separate copy of the source tree, and then using "diff -c -R" to generate a summary of his changes. Then he cvs update's his reference tree and uses "patch" to apply the diff output to it, followed by hand cleanup of whatever merges patch couldn't handle. This is probably a better way if you plan to do a large pile of changes between syncs with the repository. regards, tom lane
Thanks, this follows previous experience where I've had to check out a fresh set, run diff, and then merge by hand. It's just more tedious with only a 28k connection. Peter -- Peter Mount Enterprise Support Officer, Maidstone Borough Council Email: petermount@maidstone.gov.uk WWW: http://www.maidstone.gov.uk All views expressed within this email are not the views of Maidstone Borough Council -----Original Message----- From: Tom Lane [mailto:tgl@sss.pgh.pa.us] Sent: Tuesday, September 12, 2000 8:16 AM To: Peter Mount Cc: 'Bruce Momjian'; Christopher Cain; pgsql-interfaces@postgresql.org; pgsql-patches@postgresql.org Subject: Re: [PATCHES] JDBC Patch Peter Mount <petermount@maidstone.gov.uk> writes: > Eeek, I've got this in my copy ready to commit. How is CVS going to handle > this problem? You'll have to "cvs update" those files and then check that the changes were merged correctly before you commit. I believe CVS will not let you commit a file in which there are changes since your last cvs update. Although "cvs update" will try to merge the changes from the repository with your local edits, my experience is that CVS is not too bright about merging overlapping differences. I prefer to do the change merge by hand --- move my modified files someplace else, cvs update to fetch clean current copies, then edit to bring the files back in sync. This process is a bit tedious, but much more reliable than CVS by itself. Jan Wieck has posted about his preferred method, which IIRC involves working in a complete separate copy of the source tree, and then using "diff -c -R" to generate a summary of his changes. Then he cvs update's his reference tree and uses "patch" to apply the diff output to it, followed by hand cleanup of whatever merges patch couldn't handle. This is probably a better way if you plan to do a large pile of changes between syncs with the repository. regards, tom lane
[ Charset ISO-8859-1 unsupported, converting... ] > Eeek, I've got this in my copy ready to commit. How is CVS going to handle > this problem? Do a cvs update and see if it skips those changes. > > Peter > > -- > Peter Mount > Enterprise Support Officer, Maidstone Borough Council > Email: petermount@maidstone.gov.uk > WWW: http://www.maidstone.gov.uk > All views expressed within this email are not the views of Maidstone Borough > Council > > > -----Original Message----- > From: Bruce Momjian [mailto:pgman@candle.pha.pa.us] > Sent: Tuesday, September 12, 2000 5:17 AM > To: Christopher Cain > Cc: pgsql-interfaces@postgresql.org; pgsql-patches@postgresql.org > Subject: Re: [PATCHES] JDBC Patch > > > 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.j > ava > postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData. > java > > --- > postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.j > ava 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<types.length;i++) { > > - if(notFirst) > > - sql.append(" or "); > > for(int j=0;j<getTableTypes.length;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.j > ava > postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData. > java > > --- > postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.j > ava 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<types.length;i++) { > > - if(notFirst) > > - sql.append(" or "); > > for(int j=0;j<getTableTypes.length;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 > -- 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
[ Charset ISO-8859-1 unsupported, converting... ] > Eeek, I've got this in my copy ready to commit. How is CVS going to handle > this problem? Do a cvs update and see if it skips those changes. > > Peter > > -- > Peter Mount > Enterprise Support Officer, Maidstone Borough Council > Email: petermount@maidstone.gov.uk > WWW: http://www.maidstone.gov.uk > All views expressed within this email are not the views of Maidstone Borough > Council > > > -----Original Message----- > From: Bruce Momjian [mailto:pgman@candle.pha.pa.us] > Sent: Tuesday, September 12, 2000 5:17 AM > To: Christopher Cain > Cc: pgsql-interfaces@postgresql.org; pgsql-patches@postgresql.org > Subject: Re: [PATCHES] JDBC Patch > > > 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.j > ava > postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData. > java > > --- > postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.j > ava 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<types.length;i++) { > > - if(notFirst) > > - sql.append(" or "); > > for(int j=0;j<getTableTypes.length;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.j > ava > postgresql-7.0.2a/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData. > java > > --- > postgresql-7.0.2/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.j > ava 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<types.length;i++) { > > - if(notFirst) > > - sql.append(" or "); > > for(int j=0;j<getTableTypes.length;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 > -- 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