]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commit
more extensibility for asc/desc
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 29 Jul 2025 18:19:34 +0000 (14:19 -0400)
committerMichael Bayer <mike_mp@zzzcomputing.com>
Fri, 22 Aug 2025 18:05:48 +0000 (18:05 +0000)
commit3e5f4d63b53c17ab582d66357fa18326096f359e
treefc4498df7ff465055d063f11be59d0472d516fdd
parent6ea5d662c841cba628bbeb197bc68b7301b4aaea
more extensibility for asc/desc

Improved the behavior of standalone "operators" like :func:`_sql.desc`,
:func:`_sql.asc`, :func:`_sql.all_`, etc. so that they consult the given
expression object for an overriding method for that operator, even if the
object is not itself a ``ClauseElement``, such as if it's an ORM attribute.
This allows custom comparators for things like :func:`_orm.composite` to
provide custom implementations of methods like ``desc()``, ``asc()``, etc.

Added default implementations of :meth:`.ColumnOperators.desc`,
:meth:`.ColumnOperators.asc`, :meth:`.ColumnOperators.nulls_first`,
:meth:`.ColumnOperators.nulls_last` to :func:`_orm.composite` attributes,
by default applying the modifier to all contained columns.  Can be
overridden using a custom comparator.

Fixes: #12769
Change-Id: I055ce79bf7ac31fb61d48bc3ab34799d42fb6336
13 files changed:
doc/build/changelog/unreleased_21/12769.rst [new file with mode: 0644]
doc/build/core/sqlelement.rst
lib/sqlalchemy/__init__.py
lib/sqlalchemy/orm/descriptor_props.py
lib/sqlalchemy/sql/_elements_constructors.py
lib/sqlalchemy/sql/compiler.py
lib/sqlalchemy/sql/elements.py
lib/sqlalchemy/sql/expression.py
lib/sqlalchemy/sql/operators.py
test/orm/test_composites.py
test/sql/test_compare.py
test/sql/test_compiler.py
test/sql/test_operators.py