From b95b22d8c0f9f26e33e1912d8ee205319fc20362 Mon Sep 17 00:00:00 2001 From: Abdulhaq Emhemmed Date: Fri, 10 Feb 2023 22:56:30 +0100 Subject: [PATCH] Fix docs for `case` expression to match new syntax (#9279) * Fix docs for `case` expression to match new syntax Previously (before v1.4), the `whens` arg (when `value` is *not* used) used to be a list of conditions (a 2 item-tuple of condition + value). From v1.4, these are passed as positional args and the old syntax is not supported anymore. * Fix long lines --- lib/sqlalchemy/ext/compiler.py | 2 +- lib/sqlalchemy/orm/mapper.py | 4 ++-- lib/sqlalchemy/sql/_elements_constructors.py | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/sqlalchemy/ext/compiler.py b/lib/sqlalchemy/ext/compiler.py index 54a99cceda..39a5541030 100644 --- a/lib/sqlalchemy/ext/compiler.py +++ b/lib/sqlalchemy/ext/compiler.py @@ -409,7 +409,7 @@ accommodates two arguments:: @compiles(greatest, 'oracle') def case_greatest(element, compiler, **kw): arg1, arg2 = list(element.clauses) - return compiler.process(case([(arg1 > arg2, arg1)], else_=arg2), **kw) + return compiler.process(case((arg1 > arg2, arg1), else_=arg2), **kw) Example usage:: diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 092ab1cdaa..c0ff2ed10e 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -565,10 +565,10 @@ class Mapper( discriminator: Mapped[str] = mapped_column(String(50)) __mapper_args__ = { - "polymorphic_on":case([ + "polymorphic_on":case( (discriminator == "EN", "engineer"), (discriminator == "MA", "manager"), - ], else_="employee"), + else_="employee"), "polymorphic_identity":"employee" } diff --git a/lib/sqlalchemy/sql/_elements_constructors.py b/lib/sqlalchemy/sql/_elements_constructors.py index 98f5a1cc6f..5c70197182 100644 --- a/lib/sqlalchemy/sql/_elements_constructors.py +++ b/lib/sqlalchemy/sql/_elements_constructors.py @@ -757,10 +757,10 @@ def case( .. versionchanged:: 1.4 the :func:`_sql.case` function now accepts the series of WHEN conditions positionally - In the first form, it accepts a list of 2-tuples; each 2-tuple - consists of ``(, )``, where the SQL - expression is a boolean expression and "value" is a resulting value, - e.g.:: + In the first form, it accepts multiple 2-tuples passed as positional + arguments; each 2-tuple consists of ``(, )``, + where the SQL expression is a boolean expression and "value" is a + resulting value, e.g.:: case( (users_table.c.name == 'wendy', 'W'), -- 2.47.2