From: Mike Bayer Date: Tue, 29 Jul 2025 12:48:27 +0000 (-0400) Subject: cherry-pick changelog from 2.0.42 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f92b090d73e76a1a6211f7421f4ee42b137f2427;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git cherry-pick changelog from 2.0.42 --- diff --git a/doc/build/changelog/changelog_20.rst b/doc/build/changelog/changelog_20.rst index 4c607422b8..4f2633027e 100644 --- a/doc/build/changelog/changelog_20.rst +++ b/doc/build/changelog/changelog_20.rst @@ -10,7 +10,162 @@ .. changelog:: :version: 2.0.42 - :include_notes_from: unreleased_20 + :released: July 29, 2025 + + .. change:: + :tags: usecase, orm + :tickets: 10674 + + Added ``dataclass_metadata`` argument to all ORM attribute constructors + that accept dataclasses parameters, e.g. :paramref:`.mapped_column.dataclass_metadata`, + :paramref:`.relationship.dataclass_metadata`, etc. + It's passed to the underlying dataclass ``metadata`` attribute + of the dataclass field. Pull request courtesy Sigmund Lahn. + + .. change:: + :tags: usecase, postgresql + :tickets: 10927 + + Added support for PostgreSQL 14+ JSONB subscripting syntax. When connected + to PostgreSQL 14 or later, JSONB columns now automatically use the native + subscript notation ``jsonb_col['key']`` instead of the arrow operator + ``jsonb_col -> 'key'`` for both read and write operations. This provides + better compatibility with PostgreSQL's native JSONB subscripting feature + while maintaining backward compatibility with older PostgreSQL versions. + JSON columns continue to use the traditional arrow syntax regardless of + PostgreSQL version. + + .. change:: + :tags: bug, orm + :tickets: 12593 + + Implemented the :func:`_orm.defer`, :func:`_orm.undefer` and + :func:`_orm.load_only` loader options to work for composite attributes, a + use case that had never been supported previously. + + .. change:: + :tags: bug, postgresql, reflection + :tickets: 12600 + + Fixed regression caused by :ticket:`10665` where the newly modified + constraint reflection query would fail on older versions of PostgreSQL + such as version 9.6. Pull request courtesy Denis Laxalde. + + .. change:: + :tags: bug, mysql + :tickets: 12648 + + Fixed yet another regression caused by by the DEFAULT rendering changes in + 2.0.40 :ticket:`12425`, similar to :ticket:`12488`, this time where using a + CURRENT_TIMESTAMP function with a fractional seconds portion inside a + textual default value would also fail to be recognized as a + non-parenthesized server default. + + + + .. change:: + :tags: bug, mssql + :tickets: 12654 + + Reworked SQL Server column reflection to be based on the ``sys.columns`` + table rather than ``information_schema.columns`` view. By correctly using + the SQL Server ``object_id()`` function as a lead and joining to related + tables on object_id rather than names, this repairs a variety of issues in + SQL Server reflection, including: + + * Issue where reflected column comments would not correctly line up + with the columns themselves in the case that the table had been ALTERed + * Correctly targets tables with awkward names such as names with brackets, + when reflecting not just the basic table / columns but also extended + information including IDENTITY, computed columns, comments which + did not work previously + * Correctly targets IDENTITY, computed status from temporary tables + which did not work previously + + .. change:: + :tags: bug, sql + :tickets: 12681 + + Fixed issue where :func:`.select` of a free-standing scalar expression that + has a unary operator applied, such as negation, would not apply result + processors to the selected column even though the correct type remains in + place for the unary expression. + + + .. change:: + :tags: bug, sql + :tickets: 12692 + + Hardening of the compiler's actions for UPDATE statements that access + multiple tables to report more specifically when tables or aliases are + referenced in the SET clause; on cases where the backend does not support + secondary tables in the SET clause, an explicit error is raised, and on the + MySQL or similar backends that support such a SET clause, more specific + checking for not-properly-included tables is performed. Overall the change + is preventing these erroneous forms of UPDATE statements from being + compiled, whereas previously it was relied on the database to raise an + error, which was not always guaranteed to happen, or to be non-ambiguous, + due to cases where the parent table included the same column name as the + secondary table column being updated. + + + .. change:: + :tags: bug, orm + :tickets: 12692 + + Fixed bug where the ORM would pull in the wrong column into an UPDATE when + a key name inside of the :meth:`.ValuesBase.values` method could be located + from an ORM entity mentioned in the statement, but where that ORM entity + was not the actual table that the statement was inserting or updating. An + extra check for this edge case is added to avoid this problem. + + .. change:: + :tags: bug, postgresql + :tickets: 12728 + + Re-raise catched ``CancelledError`` in the terminate method of the + asyncpg dialect to avoid possible hangs of the code execution. + + + .. change:: + :tags: usecase, sql + :tickets: 12734 + + The :func:`_sql.values` construct gains a new method :meth:`_sql.Values.cte`, + which allows creation of a named, explicit-columns :class:`.CTE` against an + unnamed ``VALUES`` expression, producing a syntax that allows column-oriented + selection from a ``VALUES`` construct on modern versions of PostgreSQL, SQLite, + and MariaDB. + + .. change:: + :tags: bug, reflection, postgresql + :tickets: 12744 + + Fixes bug that would mistakenly interpret a domain or enum type + with name starting in ``interval`` as an ``INTERVAL`` type while + reflecting a table. + + .. change:: + :tags: usecase, postgresql + :tickets: 8664 + + Added ``postgresql_ops`` key to the ``dialect_options`` entry in reflected + dictionary. This maps names of columns used in the index to respective + operator class, if distinct from the default one for column's data type. + Pull request courtesy Denis Laxalde. + + .. seealso:: + + :ref:`postgresql_operator_classes` + + .. change:: + :tags: engine + + Improved validation of execution parameters passed to the + :meth:`_engine.Connection.execute` and similar methods to + provided a better error when tuples are passed in. + Previously the execution would fail with a difficult to + understand error message. .. changelog:: :version: 2.0.41 diff --git a/doc/build/changelog/unreleased_20/10674.rst b/doc/build/changelog/unreleased_20/10674.rst deleted file mode 100644 index a7f7a047b8..0000000000 --- a/doc/build/changelog/unreleased_20/10674.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. change:: - :tags: usecase, orm - :tickets: 10674 - - Added ``dataclass_metadata`` argument to all ORM attribute constructors - that accept dataclasses parameters, e.g. :paramref:`.mapped_column.dataclass_metadata`, - :paramref:`.relationship.dataclass_metadata`, etc. - It's passed to the underlying dataclass ``metadata`` attribute - of the dataclass field. Pull request courtesy Sigmund Lahn. diff --git a/doc/build/changelog/unreleased_20/10927.rst b/doc/build/changelog/unreleased_20/10927.rst deleted file mode 100644 index 765cffd5f9..0000000000 --- a/doc/build/changelog/unreleased_20/10927.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. change:: - :tags: usecase, postgresql - :tickets: 10927 - - Added support for PostgreSQL 14+ JSONB subscripting syntax. When connected - to PostgreSQL 14 or later, JSONB columns now automatically use the native - subscript notation ``jsonb_col['key']`` instead of the arrow operator - ``jsonb_col -> 'key'`` for both read and write operations. This provides - better compatibility with PostgreSQL's native JSONB subscripting feature - while maintaining backward compatibility with older PostgreSQL versions. - JSON columns continue to use the traditional arrow syntax regardless of - PostgreSQL version. diff --git a/doc/build/changelog/unreleased_20/12593.rst b/doc/build/changelog/unreleased_20/12593.rst deleted file mode 100644 index 945e0d65f5..0000000000 --- a/doc/build/changelog/unreleased_20/12593.rst +++ /dev/null @@ -1,7 +0,0 @@ -.. change:: - :tags: bug, orm - :tickets: 12593 - - Implemented the :func:`_orm.defer`, :func:`_orm.undefer` and - :func:`_orm.load_only` loader options to work for composite attributes, a - use case that had never been supported previously. diff --git a/doc/build/changelog/unreleased_20/12600.rst b/doc/build/changelog/unreleased_20/12600.rst deleted file mode 100644 index d544a225d3..0000000000 --- a/doc/build/changelog/unreleased_20/12600.rst +++ /dev/null @@ -1,7 +0,0 @@ -.. change:: - :tags: bug, postgresql, reflection - :tickets: 12600 - - Fixed regression caused by :ticket:`10665` where the newly modified - constraint reflection query would fail on older versions of PostgreSQL - such as version 9.6. Pull request courtesy Denis Laxalde. diff --git a/doc/build/changelog/unreleased_20/12648.rst b/doc/build/changelog/unreleased_20/12648.rst deleted file mode 100644 index 4abe0e395d..0000000000 --- a/doc/build/changelog/unreleased_20/12648.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. change:: - :tags: bug, mysql - :tickets: 12648 - - Fixed yet another regression caused by by the DEFAULT rendering changes in - 2.0.40 :ticket:`12425`, similar to :ticket:`12488`, this time where using a - CURRENT_TIMESTAMP function with a fractional seconds portion inside a - textual default value would also fail to be recognized as a - non-parenthesized server default. - - diff --git a/doc/build/changelog/unreleased_20/12654.rst b/doc/build/changelog/unreleased_20/12654.rst deleted file mode 100644 index 63489535c7..0000000000 --- a/doc/build/changelog/unreleased_20/12654.rst +++ /dev/null @@ -1,18 +0,0 @@ -.. change:: - :tags: bug, mssql - :tickets: 12654 - - Reworked SQL Server column reflection to be based on the ``sys.columns`` - table rather than ``information_schema.columns`` view. By correctly using - the SQL Server ``object_id()`` function as a lead and joining to related - tables on object_id rather than names, this repairs a variety of issues in - SQL Server reflection, including: - - * Issue where reflected column comments would not correctly line up - with the columns themselves in the case that the table had been ALTERed - * Correctly targets tables with awkward names such as names with brackets, - when reflecting not just the basic table / columns but also extended - information including IDENTITY, computed columns, comments which - did not work previously - * Correctly targets IDENTITY, computed status from temporary tables - which did not work previously diff --git a/doc/build/changelog/unreleased_20/12681.rst b/doc/build/changelog/unreleased_20/12681.rst deleted file mode 100644 index 72e7e1e58e..0000000000 --- a/doc/build/changelog/unreleased_20/12681.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. change:: - :tags: bug, sql - :tickets: 12681 - - Fixed issue where :func:`.select` of a free-standing scalar expression that - has a unary operator applied, such as negation, would not apply result - processors to the selected column even though the correct type remains in - place for the unary expression. - diff --git a/doc/build/changelog/unreleased_20/12692.rst b/doc/build/changelog/unreleased_20/12692.rst deleted file mode 100644 index b2a48b6cef..0000000000 --- a/doc/build/changelog/unreleased_20/12692.rst +++ /dev/null @@ -1,26 +0,0 @@ -.. change:: - :tags: bug, sql - :tickets: 12692 - - Hardening of the compiler's actions for UPDATE statements that access - multiple tables to report more specifically when tables or aliases are - referenced in the SET clause; on cases where the backend does not support - secondary tables in the SET clause, an explicit error is raised, and on the - MySQL or similar backends that support such a SET clause, more specific - checking for not-properly-included tables is performed. Overall the change - is preventing these erroneous forms of UPDATE statements from being - compiled, whereas previously it was relied on the database to raise an - error, which was not always guaranteed to happen, or to be non-ambiguous, - due to cases where the parent table included the same column name as the - secondary table column being updated. - - -.. change:: - :tags: bug, orm - :tickets: 12692 - - Fixed bug where the ORM would pull in the wrong column into an UPDATE when - a key name inside of the :meth:`.ValuesBase.values` method could be located - from an ORM entity mentioned in the statement, but where that ORM entity - was not the actual table that the statement was inserting or updating. An - extra check for this edge case is added to avoid this problem. diff --git a/doc/build/changelog/unreleased_20/12728.rst b/doc/build/changelog/unreleased_20/12728.rst deleted file mode 100644 index f710370b64..0000000000 --- a/doc/build/changelog/unreleased_20/12728.rst +++ /dev/null @@ -1,7 +0,0 @@ -.. change:: - :tags: bug, postgresql - :tickets: 12728 - - Re-raise catched ``CancelledError`` in the terminate method of the - asyncpg dialect to avoid possible hangs of the code execution. - diff --git a/doc/build/changelog/unreleased_20/12734.rst b/doc/build/changelog/unreleased_20/12734.rst deleted file mode 100644 index ab6a52bff4..0000000000 --- a/doc/build/changelog/unreleased_20/12734.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. change:: - :tags: usecase, sql - :tickets: 12734 - - The :func:`_sql.values` construct gains a new method :meth:`_sql.Values.cte`, - which allows creation of a named, explicit-columns :class:`.CTE` against an - unnamed ``VALUES`` expression, producing a syntax that allows column-oriented - selection from a ``VALUES`` construct on modern versions of PostgreSQL, SQLite, - and MariaDB. diff --git a/doc/build/changelog/unreleased_20/12744.rst b/doc/build/changelog/unreleased_20/12744.rst deleted file mode 100644 index 0adbdc71f2..0000000000 --- a/doc/build/changelog/unreleased_20/12744.rst +++ /dev/null @@ -1,7 +0,0 @@ -.. change:: - :tags: bug, reflection, postgresql - :tickets: 12744 - - Fixes bug that would mistakenly interpret a domain or enum type - with name starting in ``interval`` as an ``INTERVAL`` type while - reflecting a table. diff --git a/doc/build/changelog/unreleased_20/8664.rst b/doc/build/changelog/unreleased_20/8664.rst deleted file mode 100644 index 8a17e43972..0000000000 --- a/doc/build/changelog/unreleased_20/8664.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. change:: - :tags: usecase, postgresql - :tickets: 8664 - - Added ``postgresql_ops`` key to the ``dialect_options`` entry in reflected - dictionary. This maps names of columns used in the index to respective - operator class, if distinct from the default one for column's data type. - Pull request courtesy Denis Laxalde. - - .. seealso:: - - :ref:`postgresql_operator_classes` diff --git a/doc/build/changelog/unreleased_20/no_tuples.rst b/doc/build/changelog/unreleased_20/no_tuples.rst deleted file mode 100644 index c276b858df..0000000000 --- a/doc/build/changelog/unreleased_20/no_tuples.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. change:: - :tags: engine - - Improved validation of execution parameters passed to the - :meth:`_engine.Connection.execute` and similar methods to - provided a better error when tuples are passed in. - Previously the execution would fail with a difficult to - understand error message.