Yeah, I've seen that attitude on PG JDBC list before (".... it's easy to get items added to the todo list.."). I can sympathize to an extent, as I am often reluctant to add things to Cayenne that don't feel right from where I am. Still this doesn't help that in this case such thing is a standard java.sql.Statement method. :-/

So back to the original sequence naming discussion. Since we do not want to break our default implicit sequence naming for the existing installations of Cayenne, maybe approach it from the other end: on reverse engineering explicitly populate the sequence names for "serial" columns with PostgreSQL names? This way legacy DB's can be mapped with little effort.

Do you think that'll work?

Andrus



On Aug 2, 2007, at 10:13 PM, Kevin Menard wrote:
-----Original Message-----
From: Andrus Adamchik [mailto:[EMAIL PROTECTED]
Sent: Thursday, August 02, 2007 8:20 AM
To: dev@cayenne.apache.org
Subject: Re: PostgreSQL sequences revisited

A question - would serial type work as an auto-increment? I.e. is it
possible to run PreparedStatement like this (notice no PK in the
statement):

   INSERT INTO ARTIST (NAME) VALUES (?)

This indeed works (no real surprise).

And then get back DB-generated ARTIST_ID via
java.sql.Statement.getGeneratedKeys()? I suspect no, but if it is, it
would be a really nice improvement to PG adapter.

This does not.  The JDBC driver does not support it, per:

http://gborg.postgresql.org/project/pgjdbc/bugs/bugupdate.php?984
http://archives.postgresql.org/pgsql-jdbc/2004-09/msg00190.php

In my quick investigation, it appears the addition of the RETURNING
clause to DML statements may help push through an implementation of
getGeneratedKeys(). The RETURNING clause was only recently added in 8.2
though, so it would not degrade nicely for us.

We could issue curval() calls, but things could get funky for batched
INSERTs, I imagine.

--
Kevin


Reply via email to