I wasn't able to get it working so easily using the existing entry- points so I created a new one, quote_schema, and use it explicitly in a couple of places in compiler.py. The default implementation is the same as the old one.
pjjH + def quote_schema(self, schema, force): + """Quote a schema. + + Subclasses should override this to provide database-dependent + quoting behavior. + """ + return self.quote(schema, force) + def quote_schema(self, schema, force=True): """Prepare a quoted table and schema name.""" result = '.'.join([self.quote(x, force) for x in schema.split ('.')]) return result On Mar 10, 5:30 pm, "phrrn...@googlemail.com" <phrrn...@googlemail.com> wrote: > As it happens, this works on the Sybase dialect without fixing the > quoting at all! Apparently SQL such as this is happily accepted by > Sybase: > > SELECT [fdcommon.dbo].organization.org_id, > [fdcommon.dbo].organization.abbrev > FROM [fdcommon.dbo].organization JOIN [fdcommon.dbo].org_type > ON [fdcommon.dbo].org_type.org_type_id = > [fdcommon.dbo].organization.org_type > > I resorted to some brute-force list operations rather than regular > expressions to parse out the component names (see diff below). I will > fix the quoting shortly (within the next day or so) and submit a > single diff. > > thanks, > > pjjH > > Index: schema.py > > =================================================================== > > --- schema.py (revision 5816) > > +++ schema.py (working copy) > > @@ -876,17 +876,22 @@ > > raise exc.ArgumentError( > "Parent column '%s' does not descend from a " > "table-attached Column" % str(self.parent)) > - m = re.match(r"^(.+?)(?:\.(.+?))?(?:\.(.+?))?$", > self._colspec, > - re.UNICODE) > + m = self._colspec.split('.') > if m is None: > raise exc.ArgumentError( > "Invalid foreign key column specification: %s" % > self._colspec) > - if m.group(3) is None: > - (tname, colname) = m.group(1, 2) > + > + m.reverse() > + (colname, tname) = m[0:2] > + > + if m[2] is None: > schema = None > else: > - (schema, tname, colname) = m.group(1, 2, 3) > + m1 = m[2:] > + m1.reverse() > + schema = '.'.join(m1) > + > > On Mar 5, 7:21 pm, "phrrn...@googlemail.com" <phrrn...@googlemail.com> > wrote: > > > OK. If it might be as easy as that, I will have a go and see how well > > it works. > > > pjjH > > > On Mar 5, 4:31 pm, "Michael Bayer" <mike...@zzzcomputing.com> wrote: > > > > phrrn...@googlemail.com wrote: > > > > > Sybase (and SQL Server) support cross-database JOINs (Sybase even > > > > supports cross-database foreign-key constraints). There are four > > > > components to an object identifier: > > > > > 1 = Object name > > > > 2 = Schema name > > > > 3 = Database name > > > > 4 = Server name > > > > > the dataserver, database and schema are assumed for one-part > > > > identifiers (e.g. 'foo'), dataserver and database assumed for two-part > > > > identifiers (e.g. 'dbo.foo') and, finally, dataserver assumed for > > > > three-part identifiers ('production.dbo.foo') > > > > > e.g. SELECT foo.* FROM BANANA.production.dbo.foo > > > > SELECT foo.* FROM production.dbo.foo > > > > SELECT foo.* FROM production..foo -- same as the previous query > > > > if the callers default schema is dbo > > > > SELECT foo.* FROM dbo.foo > > > > SELECT foo.* FROM foo > > > > SELECT foo.* FROM ..foo > > > > I am not so interested in supporting four-part identifiers in SA but I > > > > would like to figure out how to support three-part identifiers as very > > > > many of our databases have cross-database references. > > > > > One natural (to me!) way of doing this is to add a 'database' property > > > > to the Table and ForeignKeyConstraint schema items and have the Sybase/ > > > > SQL Server dialects always emit fully-qualified three-part identifiers > > > > for table names. > > > > we have an element on Table called "schema". I had in mind that schema > > > should accept dotted names, so SQLA generally doesn't need to get > > > involved. The only change needed is to the IdentifierPreparer, such that > > > when quote_schema is called, it separates the name along the dot first so > > > that it can quote each token separately. --~--~---------~--~----~------------~-------~--~----~ 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 sqlalchemy+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---