diff options
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/mapper.py | 10 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/util.py | 11 |
2 files changed, 12 insertions, 9 deletions
diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 9e939c918..aac271efe 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -1101,7 +1101,12 @@ class Mapper(object): """ props = self._props - tables = set(props[key].parent.local_table for key in attribute_names) + + tables = set(chain(* + (sqlutil.find_tables(props[key].columns[0], check_columns=True) + for key in attribute_names) + )) + if self.base_mapper.local_table in tables: return None @@ -1138,7 +1143,8 @@ class Mapper(object): return None cond = sql.and_(*allconds) - return sql.select(tables, cond, use_labels=True) + + return sql.select([props[key].columns[0] for key in attribute_names], cond, use_labels=True) def cascade_iterator(self, type_, state, halt_on=None): """Iterate each element and its mapper in an object graph, diff --git a/lib/sqlalchemy/sql/util.py b/lib/sqlalchemy/sql/util.py index f1f329b5e..ac95c3a20 100644 --- a/lib/sqlalchemy/sql/util.py +++ b/lib/sqlalchemy/sql/util.py @@ -53,24 +53,21 @@ def find_tables(clause, check_columns=False, include_aliases=False, include_join tables = [] _visitors = {} - def visit_something(elem): - tables.append(elem) - if include_selects: - _visitors['select'] = _visitors['compound_select'] = visit_something + _visitors['select'] = _visitors['compound_select'] = tables.append if include_joins: - _visitors['join'] = visit_something + _visitors['join'] = tables.append if include_aliases: - _visitors['alias'] = visit_something + _visitors['alias'] = tables.append if check_columns: def visit_column(column): tables.append(column.table) _visitors['column'] = visit_column - _visitors['table'] = visit_something + _visitors['table'] = tables.append visitors.traverse(clause, {'column_collections':False}, _visitors) return tables |
