diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-03-06 02:27:13 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-03-06 02:27:13 +0000 |
commit | a0079b6831aef2b604859f89f07772e65c04d5d4 (patch) | |
tree | e70475a71ecc1cc198f8a7dd70f17fb081fb9727 /lib | |
parent | 51acad4b5bf4ec5517d66e111d625ac0a0fd443e (diff) | |
download | sqlalchemy-a0079b6831aef2b604859f89f07772e65c04d5d4.tar.gz |
added new 'polymorphic' example. still trying to understand it :) .
fixes to relation to enable it to locate "direction" more consistently with inheritance relationships
more tweaks to parenthesizing subqueries, unions, etc.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sqlalchemy/ansisql.py | 7 | ||||
-rw-r--r-- | lib/sqlalchemy/mapping/mapper.py | 1 | ||||
-rw-r--r-- | lib/sqlalchemy/mapping/properties.py | 7 | ||||
-rw-r--r-- | lib/sqlalchemy/sql.py | 8 |
4 files changed, 14 insertions, 9 deletions
diff --git a/lib/sqlalchemy/ansisql.py b/lib/sqlalchemy/ansisql.py index 64715cb4f..118f9f809 100644 --- a/lib/sqlalchemy/ansisql.py +++ b/lib/sqlalchemy/ansisql.py @@ -240,7 +240,10 @@ class ANSICompiler(sql.Compiled): text = string.join([self.get_str(c) for c in cs.selects], " " + cs.keyword + " ") for tup in cs.clauses: text += " " + tup[0] + " " + self.get_str(tup[1]) - self.strings[cs] = text + if cs.parens: + self.strings[cs] = "(" + text + ")" + else: + self.strings[cs] = text self.froms[cs] = "(" + text + ")" def visit_binary(self, binary): @@ -368,7 +371,7 @@ class ANSICompiler(sql.Compiled): text += self.visit_select_postclauses(select) - if getattr(select, 'useparens', False): + if getattr(select, 'parens', False): self.strings[select] = "(" + text + ")" else: self.strings[select] = text diff --git a/lib/sqlalchemy/mapping/mapper.py b/lib/sqlalchemy/mapping/mapper.py index 6a7eb9659..7b4595fb0 100644 --- a/lib/sqlalchemy/mapping/mapper.py +++ b/lib/sqlalchemy/mapping/mapper.py @@ -952,7 +952,6 @@ def object_mapper(object): def class_mapper(class_): """given a class, returns the primary Mapper associated with the class.""" - return mapper_registry[class_] try: return mapper_registry[class_] except KeyError: diff --git a/lib/sqlalchemy/mapping/properties.py b/lib/sqlalchemy/mapping/properties.py index 023e44bf7..0f83568ed 100644 --- a/lib/sqlalchemy/mapping/properties.py +++ b/lib/sqlalchemy/mapping/properties.py @@ -229,7 +229,8 @@ class PropertyLoader(MapperProperty): def _get_direction(self): """determines our 'direction', i.e. do we represent one to many, many to many, etc.""" -# print self.key, repr(self.parent.table.name), repr(self.parent.primarytable.name), repr(self.foreignkey.table.name) + #print self.key, repr(self.parent.table.name), repr(self.parent.primarytable.name), repr(self.foreignkey.table.name), repr(self.target), repr(self.foreigntable.name) + if self.parent.table is self.target: if self.foreignkey.primary_key: return PropertyLoader.MANYTOONE @@ -237,9 +238,9 @@ class PropertyLoader(MapperProperty): return PropertyLoader.ONETOMANY elif self.secondaryjoin is not None: return PropertyLoader.MANYTOMANY - elif self.foreigntable == self.target: + elif self.foreigntable is self.target or self.foreigntable in self.mapper.tables: return PropertyLoader.ONETOMANY - elif self.foreigntable == self.parent.table: + elif self.foreigntable is self.parent.table or self.foreigntable in self.parent.tables: return PropertyLoader.MANYTOONE else: raise ArgumentError("Cant determine relation direction") diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index d4d059d6a..a6ddf8cb9 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -454,7 +454,7 @@ class CompareMixin(object): # assume *other is a list of selects. # so put them in a UNION. if theres only one, you just get one SELECT # statement out of it. - return self._compare('IN', union(*other)) + return self._compare('IN', union(parens=True, *other)) def startswith(self, other): return self._compare('LIKE', str(other) + "%") def endswith(self, other): @@ -1123,6 +1123,7 @@ class CompoundSelect(SelectBaseMixin, FromClause): self.keyword = keyword self.selects = selects self.use_labels = kwargs.pop('use_labels', False) + self.parens = kwargs.pop('parens', False) self.oid_column = selects[0].oid_column for s in self.selects: s.group_by(None) @@ -1209,7 +1210,8 @@ class Select(SelectBaseMixin, FromClause): def visit_compound_select(self, cs): self.visit_select(cs) for s in cs.selects: - s.useparens = False + s.parens = False + print "BUT", id(cs), cs.parens def visit_column(self, c):pass def visit_table(self, c):pass def visit_select(self, select): @@ -1217,7 +1219,7 @@ class Select(SelectBaseMixin, FromClause): return select.is_where = self.is_where select.issubquery = True - select.useparens = True + select.parens = True if getattr(select, '_correlated', None) is None: select._correlated = self.select._froms |