summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/orm/mapper.py10
-rw-r--r--lib/sqlalchemy/sql/util.py11
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