diff --git a/blaze/compute/sql.py b/blaze/compute/sql.py index 8c51b30b0..a4053bce4 100644 --- a/blaze/compute/sql.py +++ b/blaze/compute/sql.py @@ -686,6 +686,7 @@ def post_compute(t, s, **kwargs): @dispatch(ReLabel, Selectable) def compute_up(t, s, **kwargs): + s = s.alias() columns = [getattr(s.c, col).label(new_col) if col != new_col else getattr(s.c, col) diff --git a/blaze/compute/tests/test_sql_compute.py b/blaze/compute/tests/test_sql_compute.py index e1df354b7..10ab51679 100644 --- a/blaze/compute/tests/test_sql_compute.py +++ b/blaze/compute/tests/test_sql_compute.py @@ -16,8 +16,8 @@ from blaze.compute.sql import compute, select, lower_column, compute_up from blaze.expr import ( - symbol, discover, transform, summary, by, sin, join, - floor, cos, merge, nunique, mean, sum, count, exp, concat, + symbol, transform, summary, by, sin, join, + floor, cos, merge, nunique, mean, sum, count, exp ) from blaze.compatibility import xfail from blaze.utils import tmpfile, example @@ -538,11 +538,35 @@ def test_label(): def test_relabel(): result = compute(t.relabel({'name': 'NAME', 'id': 'ID'}), s) - expected = select([s.c.name.label('NAME'), s.c.amount, s.c.id.label('ID')]) + from_ = s.alias() + expected = select([ + from_.c.name.label('NAME'), + from_.c.amount, + from_.c.id.label('ID'), + ]) assert str(result) == str(expected) +def test_relabel_selection(): + result = compute( + t[['name', 'id']].relabel(name='new_name', id='new_id'), + s, + ) + assert normalize(str(result)) == normalize( + """ + select + anon_1.name as new_name, + anon_1.id as new_id + from + (select + accounts.name as name, + accounts.id as id + from accounts) as anon_1 + """, + ) + + def test_merge(): col = (t['amount'] * 2).label('new') diff --git a/docs/source/whatsnew/0.8.3.txt b/docs/source/whatsnew/0.8.3.txt index efee2ffd6..e669fa35d 100644 --- a/docs/source/whatsnew/0.8.3.txt +++ b/docs/source/whatsnew/0.8.3.txt @@ -69,3 +69,5 @@ Bug Fixes (:issue:`1207`) * Fixed a bug where the wrong value was being passed into :func:`~blaze.expr.datetime.time` (:issue:`1213`) +* Fixed a bug in sql relabel that prevented relabeling anything that generated + a subselect. (:issue:`1216`)