Обсуждение: JDBC pg_description update needed for CVS tip

Поиск
Список
Период
Сортировка

JDBC pg_description update needed for CVS tip

От
Tom Lane
Дата:
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

Re: [JDBC] JDBC pg_description update needed for CVS tip

От
Rene Pijlman
Дата:
On Fri, 10 Aug 2001 16:08:50 -0400, Tom Lane wrote:
[direct access to pg_description that isn't right anymore]
>So, would some enterprising person fix the JDBC code to work
>with CVS tip, and submit a patch?

I'm working on it Tom, but I may need a couple of days or so to
get this done. Is that OK? This is because I still need to setup
a test environment with a running server build from current CVS.
That's fine, I wanted to do that anyway. I'm also in the middle
a chess tournament and still need to work on my Queen's Gambit
Declined :-)

By the way, what does "tip" mean?

Regards,
René Pijlman

Re: [JDBC] JDBC pg_description update needed for CVS tip

От
Tom Lane
Дата:
Rene Pijlman <rpijlman@wanadoo.nl> writes:
> By the way, what does "tip" mean?

"CVS tip" = "latest file versions in CVS".  Think tip of a branch...

            regards, tom lane

Re: [JDBC] JDBC pg_description update needed for CVS tip

От
Rene Pijlman
Дата:
On Fri, 10 Aug 2001 16:08:50 -0400, you wrote:
>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')");

Done that (columns to). When testing I noticed a difference
between 7.1 and 7.2: when there is no comment on a table or
column, 7.1 returns the string "no remarks" in the REMARKS
column of the ResultSet from getTables()/getColumns(), whereas
7.2 returns null.

So it appears that your new statement that uses
obj_description() and col_description() returns one row with a
null when there is no comment, instead of 0 rows. Is this
intentional?

The JDBC spec says: "String object containing an explanatory
comment on the table/column, which may be null". So actually,
this new behaviour is closer to the standard than the old
behaviour and I'm inclined to leave it this way. In fact, I
might as well remove the defaultRemarks code from
DatabaseMetaData.java.

This 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().

Regards,
René Pijlman

Re: [JDBC] JDBC pg_description update needed for CVS tip

От
Tom Lane
Дата:
Rene Pijlman <rpijlman@wanadoo.nl> writes:
> So it appears that your new statement that uses
> obj_description() and col_description() returns one row with a
> null when there is no comment, instead of 0 rows. Is this
> intentional?

That is how selecting a function result would work.  If you don't
like the behavior then we can reconsider it --- but if it's per
spec then I think we should be happy.

            regards, tom lane