This looks like a good solution. I'll need some time to provide a test case, however.
If the change breaks existing code, how are cross-schema references supposed to be handled? Best regards Klaus On 18 Jun., 21:54, Michael Bayer <[EMAIL PROTECTED]> wrote: > On Jun 18, 2007, at 4:25 AM, [EMAIL PROTECTED] wrote: > > > > > In my first experiments with elixir I noticed that sqlalchemy doesn't > > handle foreign keys correctly on autoloaded tables. This has to to > > with schema handling in the postgresql driver. A foreign key > > referencing a table in the public schema from "outside" gets the table > > name without the schema part and thus locates the table in its own > > schema. I've appended a trivial fix below. > > im afraid this patch breaks several postgres reflection unit tests, > since the "schema" attribute of Table is assumed to be of the default > schema if not present. by making it present here, it fails to locate > tables within its own metadata. i found when trying to create the > test case for this issue it required explicitly stating the default > schema name as the "schema" of the "inside" table. that is also a bug. > > the patch that fixes the all issues for the test I was able to create > is: > > Index: lib/sqlalchemy/schema.py > =================================================================== > --- lib/sqlalchemy/schema.py (revision 2742) > +++ lib/sqlalchemy/schema.py (working copy) > @@ -701,7 +701,7 @@ > raise exceptions.ArgumentError("Invalid foreign > key column specification: " + self._colspec) > if m.group(3) is None: > (tname, colname) = m.group(1, 2) > - schema = parenttable.schema > + schema = None > else: > (schema,tname,colname) = m.group(1,2,3) > table = Table(tname, parenttable.metadata, > mustexist=True, schema=schema) > > meaning, if you say ForeignKey("sometable.somecolumn") for a > particular Column, the "schema" is assumed to be the "default" > schema, not the "schema" specified for the Table which contains the > ForeignKey object. this means creating a ForeignKey between two > tables A and B, both with schema="myschema", would have to look like > ForeignKey("myschema.a.somecol"), even though both tables are in the > same "myschema" schema. Im OK with that but not sure how disruptive > this change would be. > > if you can provide a test case illustrating your scenario (using > Table/MetaData/Engine objects only; no elixir classes please), that > would help greatly. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---