Re: DbVisualizer shows same tables for all DBs - Mailing list pgsql-jdbc

From Barry Lind
Subject Re: DbVisualizer shows same tables for all DBs
Date
Msg-id 3E406A55.5050309@xythos.com
Whole thread Raw
In response to Re: DbVisualizer shows same tables for all DBs  (Kris Jurka <books@ejurka.com>)
Responses Re: DbVisualizer shows same tables for all DBs
List pgsql-jdbc
Here is my take on what should be done:

Kris Jurka wrote:
>
> On 28 Jan 2003, Daniel Serodio wrote:
>
>
>>I know Postgresql doesn't allow changing DBs with the same Connection,
>>but it should let tools know about this limitation via DatabaseMetadata.
>>I'm not particularly familiar with the JDBC spec, so I don't know if the
>>driver doesn't implement the spec correctly or if the spec doesn't cover
>>this sutiation.
>>
>>The fact is, when I connect to a Postgresql DB using DbVisualizer Free
>>3.1 (www.minq.se) and latest JDBC driver (build 106), I specify which DB
>>I want to connect to in the connection URL (ie
>>"jdbc:postgresql://localhost:5432/testdb"), and 3 DBs show up: testdb,
>>template0 and template1. The weird thing is that template0 and template1
>>seem to be exact copies of testdb. AFAIK, what's really happening is
>>that the driver can't "see" other DBs besides the one I connected to
>>(testdb), so it shows all DBs as if they were the same. IMHO, this
>>behaviour is quite confusing.
>
>
> The DatabaseMetaData.getCatalogs() method is called by DbVisualizer to get
> the list of available databases.  When trying to display the tables in the
> database it passes the desired catalog name into the getTables method, but
> it is ignored.
>
> What could be done:
>
> 1) Make getCatalogs() only return the current catalog.

I think the current functionality is fine, however I could be convinced
otherwise.

>
> 2) Make other DatabaseMetaData methods throw an SQLException if a catalog
> other than Connection.getCatalog() is used.

I don't think an exception is necessary, as clients will not be
expecting to see an exception.  For interoperability across different
clients, I think the best that can be done here is to return nothing.

So the way things work today, if you are using a client app to browse
the objects you would see:

database1
   - db1table1
   - db1table2
database2
   - db1table1
   - db1table2

which is clearly wrong.  So I am suggesting that we return the following
information:

database1
   - db1table1
   - db1table2
database2
   <empty>

or we could:

database1
   - db1table1
   - db1table2
<only one db shown>





>
> The getCatalogs() method's javadoc says "Gets the catalog names available
> in this database."  Does that mean are available to this connection or to
> the current user on another connection or another user on another
> connection?
>

I don't know.

> Kris Jurka
>
>


Does anyone have any opinions on which way to go?

thanks,
--Barry





pgsql-jdbc by date:

Previous
From: Barry Lind
Date:
Subject: Re: 7.3.1 UTF-8 bug(?) and 7.2.x Charset compatibility
Next
From: J M Okomba
Date:
Subject: Re: problem with the Tomcat