From: Mike Bayer Date: Fri, 3 Apr 2026 16:38:35 +0000 (-0400) Subject: cherry-pick changelog from 2.0.49 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=555f461d4e9d1332ce55999cff82a0414ce6de5e;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git cherry-pick changelog from 2.0.49 --- diff --git a/doc/build/changelog/changelog_20.rst b/doc/build/changelog/changelog_20.rst index 125406a9b2..ff7cfbee9f 100644 --- a/doc/build/changelog/changelog_20.rst +++ b/doc/build/changelog/changelog_20.rst @@ -10,7 +10,120 @@ .. changelog:: :version: 2.0.49 - :include_notes_from: unreleased_20 + :released: April 3, 2026 + + .. change:: + :tags: postgresql, bug + :tickets: 10902 + + Fixed regular expression used when reflecting foreign keys in PostgreSQL to + support escaped quotes in table names. + Pull request courtesy of Austin Graham + + .. change:: + :tags: bug, oracle + :tickets: 13150 + + Fixed issue in Oracle dialect where the :class:`_oracle.RAW` datatype would + not reflect the length parameter. Pull request courtesy Daniel Sullivan. + + + .. change:: + :tags: usecase, mssql + :tickets: 13152 + + Enhanced the ``aioodbc`` dialect to expose the ``fast_executemany`` + attribute of the pyodbc cursor. This allows the ``fast_executemany`` + parameter to work with the ``mssql+aioodbc`` dialect. Pull request + courtesy Georg Sieber. + + .. change:: + :tags: bug, typing + :tickets: 13167 + + Fixed a typing issue where the typed members of :data:`.func` would return + the appropriate class of the same name, however this creates an issue for + typecheckers such as Zuban and pyrefly that assume :pep:`749` style + typechecking even if the file states that it's a :pep:`563` file; they see + the returned name as indicating the method object and not the class object. + These typecheckers are actually following along with an upcoming test + harness that insists on :pep:`749` style name resolution for this case + unconditionally. Since :pep:`749` is the way of the future regardless, + differently-named type aliases have been added for these return types. + + + .. change:: + :tags: bug, orm + :tickets: 13176 + + Fixed issue where :meth:`_orm.Session.get` would bypass the identity map + and emit unnecessary SQL when ``with_for_update=False`` was passed, + rather than treating it equivalently to the default of ``None``. + Pull request courtesy of Joshua Swanson. + + .. change:: + :tags: bug, mssql, reflection + :tickets: 13181, 13182 + + Fixed regression from version 2.0.42 caused by :ticket:`12654` where the + updated column reflection query would receive SQL Server "type alias" names + for special types such as ``sysname``, whereas previously the base name + would be received (e.g. ``nvarchar`` for ``sysname``), leading to warnings + that such types could not be reflected and resulting in :class:`.NullType`, + rather than the expected :class:`.NVARCHAR` for a type like ``sysname``. + The column reflection query now joins ``sys.types`` a second time to look + up the base type when the user type name is not present in + :attr:`.MSDialect.ischema_names`, and both names are checked in + :attr:`.MSDialect.ischema_names` for a match. Pull request courtesy Carlos + Serrano. + + .. change:: + :tags: mssql, usecase + :tickets: 13185 + + Remove warning for SQL Server dialect when a new version is detected. + The warning was originally added more than 15 years ago due to an unexpected + value returned when using an old version of FreeTDS. + The assumption is that since then the issue has been resolved, so make the + SQL Server dialect behave like the other ones that don't have an upper bound + check on the version number. + + .. change:: + :tags: bug, orm + :tickets: 13193 + + Fixed issue where chained :func:`_orm.joinedload` options would not be + applied correctly when the final relationship in the chain is declared on a + base mapper and accessed through a subclass mapper in a + :func:`_orm.with_polymorphic` query. The path registry now correctly + computes the natural path when a property declared on a base class is + accessed through a path containing a subclass mapper, ensuring the loader + option can be located during query compilation. + + .. change:: + :tags: bug, orm, inheritance + :tickets: 13202 + + Fixed issue where using :meth:`_orm.Load.options` to apply a chained loader + option such as :func:`_orm.joinedload` or :func:`_orm.selectinload` with + :meth:`_orm.PropComparator.of_type` for a polymorphic relationship would + not generate the necessary clauses for the polymorphic subclasses. The + polymorphic loading strategy is now correctly propagated when using a call + such as ``joinedload(A.b).options(joinedload(B.c.of_type(poly)))`` to match + the behavior of direct chaining e.g. + ``joinedload(A.b).joinedload(B.c.of_type(poly))``. + + .. change:: + :tags: bug, orm, inheritance + :tickets: 13209 + + Fixed issue where using chained loader options such as + :func:`_orm.selectinload` after :func:`_orm.joinedload` with + :meth:`_orm.PropComparator.of_type` for a polymorphic relationship would + not properly apply the chained loader option. The loader option is now + correctly applied when using a call such as + ``joinedload(A.b.of_type(poly)).selectinload(poly.SubClass.c)`` to eagerly + load related objects. .. changelog:: :version: 2.0.48 diff --git a/doc/build/changelog/unreleased_20/10902.rst b/doc/build/changelog/unreleased_20/10902.rst deleted file mode 100644 index 7ef60abba4..0000000000 --- a/doc/build/changelog/unreleased_20/10902.rst +++ /dev/null @@ -1,7 +0,0 @@ -.. change:: - :tags: postgresql, bug - :tickets: 10902 - - Fixed regular expression used when reflecting foreign keys in PostgreSQL to - support escaped quotes in table names. - Pull request courtesy of Austin Graham diff --git a/doc/build/changelog/unreleased_20/13150.rst b/doc/build/changelog/unreleased_20/13150.rst deleted file mode 100644 index 2466575992..0000000000 --- a/doc/build/changelog/unreleased_20/13150.rst +++ /dev/null @@ -1,7 +0,0 @@ -.. change:: - :tags: bug, oracle - :tickets: 13150 - - Fixed issue in Oracle dialect where the :class:`_oracle.RAW` datatype would - not reflect the length parameter. Pull request courtesy Daniel Sullivan. - diff --git a/doc/build/changelog/unreleased_20/13152.rst b/doc/build/changelog/unreleased_20/13152.rst deleted file mode 100644 index 47334ed231..0000000000 --- a/doc/build/changelog/unreleased_20/13152.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. change:: - :tags: usecase, mssql - :tickets: 13152 - - Enhanced the ``aioodbc`` dialect to expose the ``fast_executemany`` - attribute of the pyodbc cursor. This allows the ``fast_executemany`` - parameter to work with the ``mssql+aioodbc`` dialect. Pull request - courtesy Georg Sieber. diff --git a/doc/build/changelog/unreleased_20/13167.rst b/doc/build/changelog/unreleased_20/13167.rst deleted file mode 100644 index e874b406d0..0000000000 --- a/doc/build/changelog/unreleased_20/13167.rst +++ /dev/null @@ -1,14 +0,0 @@ -.. change:: - :tags: bug, typing - :tickets: 13167 - - Fixed a typing issue where the typed members of :data:`.func` would return - the appropriate class of the same name, however this creates an issue for - typecheckers such as Zuban and pyrefly that assume :pep:`749` style - typechecking even if the file states that it's a :pep:`563` file; they see - the returned name as indicating the method object and not the class object. - These typecheckers are actually following along with an upcoming test - harness that insists on :pep:`749` style name resolution for this case - unconditionally. Since :pep:`749` is the way of the future regardless, - differently-named type aliases have been added for these return types. - diff --git a/doc/build/changelog/unreleased_20/13176.rst b/doc/build/changelog/unreleased_20/13176.rst deleted file mode 100644 index 78dfb43a29..0000000000 --- a/doc/build/changelog/unreleased_20/13176.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. change:: - :tags: bug, orm - :tickets: 13176 - - Fixed issue where :meth:`_orm.Session.get` would bypass the identity map - and emit unnecessary SQL when ``with_for_update=False`` was passed, - rather than treating it equivalently to the default of ``None``. - Pull request courtesy of Joshua Swanson. diff --git a/doc/build/changelog/unreleased_20/13181.rst b/doc/build/changelog/unreleased_20/13181.rst deleted file mode 100644 index 9f0d10a402..0000000000 --- a/doc/build/changelog/unreleased_20/13181.rst +++ /dev/null @@ -1,15 +0,0 @@ -.. change:: - :tags: bug, mssql, reflection - :tickets: 13181, 13182 - - Fixed regression from version 2.0.42 caused by :ticket:`12654` where the - updated column reflection query would receive SQL Server "type alias" names - for special types such as ``sysname``, whereas previously the base name - would be received (e.g. ``nvarchar`` for ``sysname``), leading to warnings - that such types could not be reflected and resulting in :class:`.NullType`, - rather than the expected :class:`.NVARCHAR` for a type like ``sysname``. - The column reflection query now joins ``sys.types`` a second time to look - up the base type when the user type name is not present in - :attr:`.MSDialect.ischema_names`, and both names are checked in - :attr:`.MSDialect.ischema_names` for a match. Pull request courtesy Carlos - Serrano. diff --git a/doc/build/changelog/unreleased_20/13185.rst b/doc/build/changelog/unreleased_20/13185.rst deleted file mode 100644 index a4c1b20d65..0000000000 --- a/doc/build/changelog/unreleased_20/13185.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. change:: - :tags: mssql, usecase - :tickets: 13185 - - Remove warning for SQL Server dialect when a new version is detected. - The warning was originally added more than 15 years ago due to an unexpected - value returned when using an old version of FreeTDS. - The assumption is that since then the issue has been resolved, so make the - SQL Server dialect behave like the other ones that don't have an upper bound - check on the version number. diff --git a/doc/build/changelog/unreleased_20/13193.rst b/doc/build/changelog/unreleased_20/13193.rst deleted file mode 100644 index 6c595a591c..0000000000 --- a/doc/build/changelog/unreleased_20/13193.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. change:: - :tags: bug, orm - :tickets: 13193 - - Fixed issue where chained :func:`_orm.joinedload` options would not be - applied correctly when the final relationship in the chain is declared on a - base mapper and accessed through a subclass mapper in a - :func:`_orm.with_polymorphic` query. The path registry now correctly - computes the natural path when a property declared on a base class is - accessed through a path containing a subclass mapper, ensuring the loader - option can be located during query compilation. diff --git a/doc/build/changelog/unreleased_20/13202.rst b/doc/build/changelog/unreleased_20/13202.rst deleted file mode 100644 index 0f0559f4eb..0000000000 --- a/doc/build/changelog/unreleased_20/13202.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. change:: - :tags: bug, orm, inheritance - :tickets: 13202 - - Fixed issue where using :meth:`_orm.Load.options` to apply a chained loader - option such as :func:`_orm.joinedload` or :func:`_orm.selectinload` with - :meth:`_orm.PropComparator.of_type` for a polymorphic relationship would - not generate the necessary clauses for the polymorphic subclasses. The - polymorphic loading strategy is now correctly propagated when using a call - such as ``joinedload(A.b).options(joinedload(B.c.of_type(poly)))`` to match - the behavior of direct chaining e.g. - ``joinedload(A.b).joinedload(B.c.of_type(poly))``. diff --git a/doc/build/changelog/unreleased_20/13209.rst b/doc/build/changelog/unreleased_20/13209.rst deleted file mode 100644 index ed22f1acac..0000000000 --- a/doc/build/changelog/unreleased_20/13209.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. change:: - :tags: bug, orm, inheritance - :tickets: 13209 - - Fixed issue where using chained loader options such as - :func:`_orm.selectinload` after :func:`_orm.joinedload` with - :meth:`_orm.PropComparator.of_type` for a polymorphic relationship would - not properly apply the chained loader option. The loader option is now - correctly applied when using a call such as - ``joinedload(A.b.of_type(poly)).selectinload(poly.SubClass.c)`` to eagerly - load related objects.