Re: Connection.setCatalog method - Mailing list pgsql-jdbc

From Fernando Nasser
Subject Re: Connection.setCatalog method
Date
Msg-id 3F3027B7.4040203@redhat.com
Whole thread Raw
In response to Connection.setCatalog method  ("Philip A. Chapman" <pchapman@pcsw.us>)
List pgsql-jdbc
Barry Lind wrote:
> That patch wasn't applied because I vetoed it.  I am unhappy with the
> logic as it appeared in that patch, but due to the limitations of the
> server I don't know of anyway to implement setCatalog().
>

We couldn't find the folow-up to the message where the patch seemed to
have been slated for check in.

Thanks for the clarification.

Regards,
Fernando


> There are two problems I have with the patch as it was originally
> submitted:
>
> 1) Transaction problems.  Lets say I am in the middle of a transaction
> when I call setCatalog(), since the implementation simply closes the
> current connection and opens a new one, my in process transaction is
> aborted.  Which is certainly against the spec.  In general, I don't like
> the patch because is under the covers replaces the existing connection
> with a new one that can have a whole slew of side effects that are not
> addressed (what happens to existing statement objects? existing result
> sets? existing database meta data objects?).
>
> 2) The patch makes the invalid assumption that just because the current
> username/password lets me connect to database A, it will also let me
> connect to database B.  Thus calling setCatalog() if you have security
> setup will leave your connection hosed.
>
> Finally while it may seem on the surface that postgresql databases are
> the same thing as jdbc catalogs, there are many differences.  Enough
> that in my opinion they should not be considered the same thing.  For
> example:
>
> DatabaseMetaData.isCatalogAtStart() says:
> * Retrieves whether a catalog appears at the start of a fully qualified
> * table name.  If not, the catalog appears at the end.
> Thus the jdbc concept of catalog also is a namespace concept (ala
> database.schema.table which postgres doesn't support).
>
> DatabaseMetaData.get*() methods that take a catalog parameter:
> All of these methods assume that you can get information from any
> catalog/database.  But in postgres that isn't true.  You can only get
> meta information for the database you are currently connected to.  And
> because of the issue #2 above there really isn't any way to get
> information about other databases objects.
>
>
> Now I am certainly not against enhanceing postgres to support the jdbc
> view of catalogs, but I think it is much more work and likely will need
> to be done very differently than the below mentioned patch does things.
>
> thanks,
> --Barry
>
>
>
> Fernando Nasser wrote:
>
>> Yes, setCatalog() should switch the connection to another database (it
>> can only be ignored if the driver does not support catalogs, which is
>> not the case).
>>
>> I have no idea why that patch was not applied.  Could not find
>> anything after the thread you've pointed to.
>>
>> Regards,
>> Fernando
>>
>>
>> Philip A. Chapman wrote:
>>
>>> Everyone,
>>>
>>> I am working on yet another database administration application.  I have
>>> run into some issues because the JDBC implementation of
>>> Connection.setCatalog()
>>> (org.postgresq.jdbc1.AbstractJdbc1Connection.java) does nothing when
>>> setCatalog() is called.  My understanding is that doing nothing is
>>> allowed by the JDBC specification, but this is somewhat confusing as
>>> getCatalog() returns a value and DatabaseMetaData.getCatalogs() returns
>>> a list of values.
>>>
>>> While searching though this list's archives, I found a thread from July
>>> of 2001 that deals with this subject.  Toward the end of the thread, it
>>> appears as though it was decided that the setCatalog() functionallity
>>> should be implemented and that a patch was to be accepted to make this
>>> happen:
>>>
>>> http://archives.postgresql.org/pgsql-jdbc/2001-07/msg00150.php
>>>
>>> What has become of this?  Can someone shed some light on why
>>> Connection.getCatalog and DatabaseMetaData.getCatalogs() work, but
>>> Connection.setCatalog does not?
>>
>>
>>
>>
>
>
>


--
Fernando Nasser
Red Hat Canada Ltd.                     E-Mail:  fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario   M4P 2C9


pgsql-jdbc by date:

Previous
From: Fernando Nasser
Date:
Subject: Re: setFetchSize() bug
Next
From: "Philip A. Chapman"
Date:
Subject: [Fwd: Re: Connection.setCatalog method]