hi javier,
On 11/3/05, Javier Bermejo <[EMAIL PROTECTED]> wrote:
> Hello,
>
> Some days ago I was testing performance using orm-persistence with
> hibernate 2 and PostgreSQL. Today I have tested SimpleDBPersistence
> using a postgreSQL database and I have detected a bug in the class:
>
> Using JDBC with PostgreSQL doesn't found any table when checking the
> schema because it needs the tableNamePattern in lowercase (not
> uppercase), the effect is that it tries to create every time you start
> the repository the tables and get a Exception. So the solution I propose
> is to search the tableNamePattern using lower and uppercase in the
> checkSchema method:
>
> protected void checkSchema() throws Exception {
> String tableName = schemaObjectPrefix + "NODE";
> ResultSet rs1 = con.getMetaData().getTables(null, null,
> (tableName).toLowerCase(), null);
> ResultSet rs2 = con.getMetaData().getTables(null, null,
> tableName, null);
> boolean schemaExists;
> try {
> schemaExists = rs1.next() || rs2.next();
> } finally {
> rs1.close();
> rs2.close();
> }
>
> I attach the diff from latest version in svn.
thanks! i will have a look at it asap.
btw: i'd be very interested in the results of your performance tests.
could you please share them with us?
btw2: it would be cool if you could contribute a postgres.ddl file
that works with SimpleDbPersistenceManager (see o.a.j.c.state.db.mysql.ddl
for an an example for mysql). i 'd more than happy to commit it :)
cheers
stefan
>
> Best regards
> Javier Bermejo
>
>
>
> Index:
> src/main/java/org/apache/jackrabbit/core/state/db/SimpleDbPersistenceManager.java
> ===================================================================
> ---
> src/main/java/org/apache/jackrabbit/core/state/db/SimpleDbPersistenceManager.java
> (revisión: 330576)
> +++
> src/main/java/org/apache/jackrabbit/core/state/db/SimpleDbPersistenceManager.java
> (copia de trabajo)
> @@ -924,13 +924,17 @@
> * @throws Exception if an error occurs
> */
> protected void checkSchema() throws Exception {
> - ResultSet rs = con.getMetaData().getTables(null, null,
> - schemaObjectPrefix + "NODE", null);
> + String tableName = schemaObjectPrefix + "NODE";
> + ResultSet rs1 = con.getMetaData().getTables(null, null,
> + (tableName).toLowerCase(), null);
> + ResultSet rs2 = con.getMetaData().getTables(null, null,
> + tableName, null);
> boolean schemaExists;
> try {
> - schemaExists = rs.next();
> + schemaExists = rs1.next() || rs2.next();
> } finally {
> - rs.close();
> + rs1.close();
> + rs2.close();
> }
>
> if (!schemaExists) {
>
>
>