Re: JDBC pg_description update needed for CVS tip - Mailing list pgsql-jdbc
From | Rene Pijlman |
---|---|
Subject | Re: JDBC pg_description update needed for CVS tip |
Date | |
Msg-id | 0f4gnt0o4dmlunkr16kkr7jqs669i14dbh@4ax.com Whole thread Raw |
In response to | JDBC pg_description update needed for CVS tip (Tom Lane <tgl@sss.pgh.pa.us>) |
Responses |
Re: [PATCHES] Re: JDBC pg_description update needed for CVS tip
Re: [PATCHES] Re: JDBC pg_description update needed for CVS tip |
List | pgsql-jdbc |
Attached is the patch requested by Tom Lane (see below). It includes two changes in the JDBC driver: 1) When connected to a backend >= 7.2: use obj_description() and col_description() instead of direct access to pg_description. 2) In DatabaseMetaData.getTables()/getColumns()/getProcedures(): when there is no comment on the object, return null in the REMARKS column of the ResultSet, instead of the default string "no remarks". Change 2 first appeared as a side-effect of change 1, but it is actually more compliant with the JDBC spec: "String object containing an explanatory comment on the table/column/procedure, which may be null". The default string "no remarks" was strictly speaking incorrect, as it could not be distinguished from a real user comment "no remarks". So I removed the default string completely. Change 2 might break existing code that doesn't follow the JDBC spec and isn't prepared to handle a null in the REMARKS column of getTables()/getColumns()/getProcedures. Patch tested with jdbc2 against both a 7.1 and a CVS tip backend. I did not have a jdbc1 environment to build and test with, but since the touched code is identical in jdbc1 and jdbc2 I don't foresee any problems. Regards, René Pijlman On Fri, 10 Aug 2001 16:08:50 -0400, Tom Lane wrote: >Would some JDBC hacker develop a patch for the following issue? The >change is just barely large enough that I don't want to commit untested >code for it --- but not having a Java development environment at hand, >I can't test the updated code. > >The problem is in DatabaseMetaData.java (same code in both jdbc1 and >jdbc2, looks like). It does direct access to pg_description that isn't >right anymore. In getTables, instead of > > java.sql.ResultSet dr = connection.ExecSQL("select description from pg_description where objoid="+r.getInt(2)); > >it should be > > java.sql.ResultSet dr = connection.ExecSQL("select obj_description("+r.getInt(2)+",'pg_class')"); > >In getColumns, the change is a little more involved, because >pg_attribute doesn't have an OID column anymore. The initial query >can't fetch a.oid, but should fetch a.attrelid instead, and then the >pg_description query should become > > java.sql.ResultSet dr = connection.ExecSQL("select col_description("+r.getInt(1)+","+r.getInt(5)+")"); > >(col_description takes the table OID and the column's attnum). > >The reason this is more than a 3-line change is that it should be done >either the old way or the new way depending on whether server version >= >7.2 or not, for backwards-compatibility of the driver. > >It's possible there are other similar changes needed that I missed in a >quick lookover. > >So, would some enterprising person fix the JDBC code to work with CVS >tip, and submit a patch? > > thanks, tom lane > >---------------------------(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 Regards, René Pijlman
Attachment
pgsql-jdbc by date: