--- /dev/null
+.. change::
+ :tags: bug, sql
+ :tickets: 13396
+
+ Fixed issue where :meth:`_sql.Select.get_final_froms` would emit a
+ deprecation warning when the statement made use of the PostgreSQL-specific
+ expression argument to :meth:`_sql.Select.distinct`; the same spurious
+ warning would be emitted when stringifying such a statement without
+ explicitly using a PostgreSQL dialect. The fix ensures that this 1.4-era
+ warning is suppressed under both 2.0 and 2.1.
+
+ Note that under SQLAlchemy 2.1, passing an expression to
+ :meth:`_sql.Select.distinct` is deprecated overall, and is replaced by a
+ new PostgreSQL-specific construct (see :ticket:`12342`).
\ No newline at end of file
"""
+ def get_select_precolumns(self, select: Select[Any], **kw: Any) -> str:
+ return "DISTINCT " if select._distinct else ""
+
def _fallback_column_name(self, column):
return "<name unknown>"
"SELECT count(DISTINCT mytable.myid) AS count_1 FROM mytable",
)
+ @testing.variation("case", ["stringify", "final_froms"])
+ def test_distinct_expr_no_dep_warning_str_compiler(self, case):
+ """test for #13396"""
+
+ t = Table("foo", MetaData(), Column("bar"))
+
+ stmt = select(t).distinct(t.c.bar)
+
+ if case.stringify:
+ eq_(str(stmt), "SELECT DISTINCT foo.bar \nFROM foo")
+ elif case.final_froms:
+ eq_(stmt.get_final_froms(), [t])
+ else:
+ case.fail()
+
def test_distinct_on(self):
with testing.expect_deprecated(
"DISTINCT ON is currently supported only by the PostgreSQL "
"dialect"
):
- select("*").distinct(table1.c.myid).compile()
+ self.assert_compile(
+ select("*").distinct(table1.c.myid), "SELECT DISTINCT *"
+ )
def test_where_empty(self):
self.assert_compile(