summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqlalchemy/sql.py2
-rwxr-xr-xtest/sql/selectable.py5
2 files changed, 7 insertions, 0 deletions
diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py
index 3a8a27d67..41b61d4af 100644
--- a/lib/sqlalchemy/sql.py
+++ b/lib/sqlalchemy/sql.py
@@ -1734,6 +1734,8 @@ class FromClause(Selectable):
for co in self._adjusted_exportable_columns():
cp = self._proxy_column(co)
for ci in cp.orig_set:
+ # note that some ambiguity is raised here, whereby a selectable might have more than
+ # one column that maps to an "original" column. examples include unions and joins
self._orig_cols[ci] = cp
if self.oid_column is not None:
for ci in self.oid_column.orig_set:
diff --git a/test/sql/selectable.py b/test/sql/selectable.py
index 221d8430c..57ad99886 100755
--- a/test/sql/selectable.py
+++ b/test/sql/selectable.py
@@ -27,6 +27,11 @@ table2 = Table('table2', db,
)
class SelectableTest(testbase.AssertMixin):
+ def testjoinagainstself(self):
+ jj = select([table.c.col1.label('bar_col1')])
+ jjj = join(table, jj, table.c.col1==jj.c.bar_col1)
+ assert jjj.corresponding_column(jjj.c.table1_col1) is jjj.c.table1_col1
+
def testjoinagainstjoin(self):
j = outerjoin(table, table2, table.c.col1==table2.c.col2)
jj = select([ table.c.col1.label('bar_col1')],from_obj=[j]).alias('foo')