Re: [PATCH] NPE in meta data getPrimaryKeys() - Mailing list pgsql-jdbc

From Daniel Serodio
Subject Re: [PATCH] NPE in meta data getPrimaryKeys()
Date
Msg-id 1040143458.26502.18.camel@kelly
Whole thread Raw
In response to [PATCH] NPE in meta data getPrimaryKeys()  (Anders Hermansen <anders@yoyo.no>)
Responses Re: [PATCH] NPE in meta data getPrimaryKeys()
Re: [PATCH] NPE in meta data getPrimaryKeys()
List pgsql-jdbc
The Javadoc for DatabaseMetaData.getPrimaryKeys(...) clearly states that
catalog may be null, but doesn't mention anything about schema or table
being null. I understand this as meaning they (schema and table) can't
be null.

<quote>
Parameters:
    catalog - a catalog name; "" retrieves those without a catalog; null
means drop catalog name from the selection criteria
    schema - a schema name; "" retrieves those without a schema
    table - a table name
</quote>

On Tue, 2002-12-17 at 14:35, Anders Hermansen wrote:
> Hello,
>
> I'm trying to use jakarta ojb for database access in a web application.
> For this I have to generate a object-relational mapping. There is a
> tool, reversedb, that will generate this for a live database.
>
> When I run this against my postgresql database I get the following
> exception:
>
> java.lang.NullPointerException
>     at
> org.postgresql.jdbc1.AbstractJdbc1DatabaseMetaData.escapeQuotes(AbstractJdbc1DatabaseMetaData.java:1666)
>     at
> org.postgresql.jdbc1.AbstractJdbc1DatabaseMetaData.getPrimaryKeys(AbstractJdbc1DatabaseMetaData.java:2899)
>     at
> org.apache.ojb.tools.mapping.reversedb.DBMeta.read(Unknown Source)
>     at
> org.apache.ojb.tools.mapping.reversedb.gui.JFrmMainFrame.analyzeSchema(Unknown
> Source)
> (...)
>
> It fails with a npe because table was set to null. Is setting table to
> null for the getPrimaryKeys illegall according to jdbc specification?
>
> As it seems ojb is requesting primary keys for all tables when table is
> set to null, and is assuming this will be legal
>
> >From line 279 i in DBMeta.read() in ojb source:
> rs = this.dbMeta.getPrimaryKeys(null, null, null);
>
> Attached is a patch which makes the getPrimaryKeys method accept the
> value of null for the table parameter.
>
> Is this the correct solution?
>
>
> Anders
>
> --
> Anders Hermansen
> YoYo Mobile as
> ----
>

> Index: org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java
> ===================================================================
> RCS file:
/projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java,v
> retrieving revision 1.13
> diff -u -r1.13 AbstractJdbc1DatabaseMetaData.java
> --- org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java    2002/12/11 21:02:58    1.13
> +++ org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java    2002/12/17 16:34:20
> @@ -2903,9 +2903,11 @@
>              " ci.relname AS PK_NAME "+
>              from+
>              " WHERE ct.oid=i.indrelid AND ci.oid=i.indexrelid "+
> -            " AND a.attrelid=ci.oid AND i.indisprimary "+
> -            " AND ct.relname = '"+escapeQuotes(table)+"' "+
> -            where+
> +            " AND a.attrelid=ci.oid AND i.indisprimary ";
> +                        if (table != null && !"".equals(table)) {
> +                    sql += " AND ct.relname = '"+escapeQuotes(table)+"' ";
> +                        }
> +            sql += where+
>              " ORDER BY table_name, pk_name, key_seq";
>          return connection.createStatement().executeQuery(sql);
>      }
> ----
>

>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
--
[]'s
Daniel Serodio


pgsql-jdbc by date:

Previous
From: Dave Cramer
Date:
Subject: Re: [PATCH] NPE in meta data getPrimaryKeys()
Next
From: Dave Cramer
Date:
Subject: Re: [PATCH] NPE in meta data getPrimaryKeys()