summaryrefslogtreecommitdiff
path: root/test/sql
diff options
context:
space:
mode:
Diffstat (limited to 'test/sql')
-rw-r--r--test/sql/test_compiler.py3
-rw-r--r--test/sql/test_text.py24
2 files changed, 23 insertions, 4 deletions
diff --git a/test/sql/test_compiler.py b/test/sql/test_compiler.py
index ca73f6c18..486b54682 100644
--- a/test/sql/test_compiler.py
+++ b/test/sql/test_compiler.py
@@ -2073,7 +2073,8 @@ class SelectTest(fixtures.TestBase, AssertsCompiledSQL):
# to check the special thing CompoundSelect does with labels
assert_raises_message(
exc.CompileError,
- "Can't resolve label reference for ORDER BY / GROUP BY. Textual "
+ "Can't resolve label reference for ORDER BY / GROUP BY / "
+ "DISTINCT etc. Textual "
"SQL expression 'noname'",
union(
select([table1.c.myid, table1.c.name]),
diff --git a/test/sql/test_text.py b/test/sql/test_text.py
index 3f12d06a9..3386d0aae 100644
--- a/test/sql/test_text.py
+++ b/test/sql/test_text.py
@@ -678,14 +678,16 @@ class TextErrorsTest(fixtures.TestBase, AssertsCompiledSQL):
class OrderByLabelResolutionTest(fixtures.TestBase, AssertsCompiledSQL):
__dialect__ = "default"
- def _test_exception(self, stmt, offending_clause):
+ def _test_exception(self, stmt, offending_clause, dialect=None):
assert_raises_message(
exc.CompileError,
- r"Can't resolve label reference for ORDER BY / GROUP BY. "
+ r"Can't resolve label reference for ORDER BY / GROUP BY / "
+ "DISTINCT etc. "
"Textual SQL "
"expression %r should be explicitly "
r"declared as text\(%r\)" % (offending_clause, offending_clause),
stmt.compile,
+ dialect=dialect,
)
def test_order_by_label(self):
@@ -736,6 +738,21 @@ class OrderByLabelResolutionTest(fixtures.TestBase, AssertsCompiledSQL):
stmt = select([table1.c.myid]).order_by("foobar")
self._test_exception(stmt, "foobar")
+ def test_distinct_label(self):
+
+ stmt = select([table1.c.myid.label("foo")]).distinct("foo")
+ self.assert_compile(
+ stmt,
+ "SELECT DISTINCT ON (foo) mytable.myid AS foo FROM mytable",
+ dialect="postgresql",
+ )
+
+ def test_unresolvable_distinct_label(self):
+ from sqlalchemy.dialects import postgresql
+
+ stmt = select([table1.c.myid.label("foo")]).distinct("not a label")
+ self._test_exception(stmt, "not a label", dialect=postgresql.dialect())
+
def test_group_by_label(self):
stmt = select([table1.c.myid.label("foo")]).group_by("foo")
self.assert_compile(
@@ -890,7 +907,8 @@ class OrderByLabelResolutionTest(fixtures.TestBase, AssertsCompiledSQL):
assert_raises_message(
exc.CompileError,
- r"Can't resolve label reference for ORDER BY / GROUP BY. "
+ r"Can't resolve label reference for ORDER BY / GROUP BY / "
+ "DISTINCT etc. "
"Textual SQL "
"expression 't1name' should be explicitly "
r"declared as text\('t1name'\)",