So the original problem we are trying to solve is the table naming
conflict that is possible if we do not account for schemas. If there
is no table naming conflict, there is no problem with the current
mechanism. If there is, it equally breaks all PK generation engines
that we provide. Or am I missing some other aspects of it?
It now occurred to me that the limitation above is deeper than the PK
generation mechanism. EntityResolver is not schema aware, so
"schema1.table1" and "schema2.table1" will result in a conflict even
before we hit the PK generation, and even if multiple DataMaps are
used in the same domain to map the conflicting tables. So looks like
we need to investigate (and fix) that first, before getting to the PK
discussion.
Andrus
On Aug 17, 2008, at 12:37 AM, Kevin Menard wrote:
I agree that such a flag would support backward compatibility. I'm
a bit
dubious about its value though. So, by default we ship "broken"
behavior
and expect the user to toggle a checkbox to do the correct thing?
The use
of schemas may have nothing to do with naming conflicts, as well.
Moreover,
PKs shouldn't be treated any differently than tables are, at least
with
regards to qualifications of naming.
The level at which I'm talking doesn't have any effect on sequence-
based PK
generators, as far as I can tell. It would mostly affect
AUTO_PK_SUPPORT,
let DB-specific generators handle the finer details of working with
sequences.
Having said that, I do value backwards compatibility, so I'm not
against
100% against it. It just feels a bit dirty. I'd rather we do
something
like check the version of the datamap and let that determine the
default
value of the checkbox. Of course, even that raises problems with
people
that have been tracking the milestones . . .
--
Kevin
On Sat, Aug 16, 2008 at 4:38 PM, Andrus Adamchik <[EMAIL PROTECTED]
>wrote:
Expanding on this some more...
So we may have a DataMap (or DataDomain) flag saying "Use target
table
schema when accessing PK generation helper objects". By default
this will be
false (current behavior), resulting in default schema for PK
generation
objects. If a user expects naming conflicts (i.e. there is a
"schema1.table1" and "schema2.table1" in the same mapping), they
can change
that to "true", and then we'd use "schema1.auto_pk_support" for
tables in
schema1 and "schema2.auto_pk_support" for tables in schema2. This
ports
nicely into sequence based PK generators (i.e. each pk sequence
will be
created in the target schema, preventing any possibility of
conflicts).
Another benefit is that it is backwards compatible.
Andrus
On Aug 16, 2008, at 11:20 PM, Andrus Adamchik wrote:
I have doubts about this approach, aside from the fact that we will
force
an upgrade step on everyone using schemas. How is this going to
work with
sequence-based pk generators?
Maybe the PK generation supporting objects themselves should be
prefixed
with schema names (as an option I guess) instead of storing the
schema in
the lookup table?
Thoughts?
Andrus
On Aug 16, 2008, at 10:58 PM, Kevin Menard wrote:
In order to fix CAY-539 and CAY-730, I'm changing the default
JdbcPkGenerator use fullyQualifiedNames. For anyone not using a
schema,
this shouldn't be a problem. For those using schemas, but
relying on
Cayenne to ignore them, they're going to have to delete the
schema in
order
for things to work.
In theory this all should be fine . . . getFullyQualifiedName()
falls
back
to getName() if appropriate. However, this is used by a fair
number of
the
DbAdapters and I want to make sure that I haven't broken
anything. Thus,
testing on as many DBs as possible would be nice. I'd appreciate
any
help
in this regard, whether it come from Hudson or other team members.
Otherwise, I'll be a bit reluctant to make the change, just
because I
don't
want to break anything on anyone. I'll obviously test on whatever
platforms
I can.
--
Kevin