.. changelog::
:version: 2.0.38
- :include_notes_from: unreleased_20
+ :released: February 6, 2025
+
+ .. change::
+ :tags: postgresql, usecase, asyncio
+ :tickets: 12077
+
+ Added an additional ``asyncio.shield()`` call within the connection
+ terminate process of the asyncpg driver, to mitigate an issue where
+ terminate would be prevented from completing under the anyio concurrency
+ library.
+
+ .. change::
+ :tags: bug, dml, mariadb, mysql
+ :tickets: 12117
+
+ Fixed a bug where the MySQL statement compiler would not properly compile
+ statements where :meth:`_mysql.Insert.on_duplicate_key_update` was passed
+ values that included ORM-mapped attributes (e.g.
+ :class:`InstrumentedAttribute` objects) as keys. Pull request courtesy of
+ mingyu.
+
+ .. change::
+ :tags: bug, postgresql
+ :tickets: 12159
+
+ Adjusted the asyncpg connection wrapper so that the
+ ``connection.transaction()`` call sent to asyncpg sends ``None`` for
+ ``isolation_level`` if not otherwise set in the SQLAlchemy dialect/wrapper,
+ thereby allowing asyncpg to make use of the server level setting for
+ ``isolation_level`` in the absense of a client-level setting. Previously,
+ this behavior of asyncpg was blocked by a hardcoded ``read_committed``.
+
+ .. change::
+ :tags: bug, sqlite, aiosqlite, asyncio, pool
+ :tickets: 12285
+
+ Changed default connection pool used by the ``aiosqlite`` dialect
+ from :class:`.NullPool` to :class:`.AsyncAdaptedQueuePool`; this change
+ should have been made when 2.0 was first released as the ``pysqlite``
+ dialect was similarly changed to use :class:`.QueuePool` as detailed
+ in :ref:`change_7490`.
+
+
+ .. change::
+ :tags: bug, engine
+ :tickets: 12289
+
+ Fixed event-related issue where invoking :meth:`.Engine.execution_options`
+ on a :class:`.Engine` multiple times while making use of event-registering
+ parameters such as ``isolation_level`` would lead to internal errors
+ involving event registration.
+
+ .. change::
+ :tags: bug, sql
+ :tickets: 12302
+
+ Reorganized the internals by which the ``.c`` collection on a
+ :class:`.FromClause` gets generated so that it is resilient against the
+ collection being accessed in concurrent fashion. An example is creating a
+ :class:`.Alias` or :class:`.Subquery` and accessing it as a module level
+ variable. This impacts the Oracle dialect which uses such module-level
+ global alias objects but is of general use as well.
+
+ .. change::
+ :tags: bug, sql
+ :tickets: 12314
+
+ Fixed SQL composition bug which impacted caching where using a ``None``
+ value inside of an ``in_()`` expression would bypass the usual "expanded
+ bind parameter" logic used by the IN construct, which allows proper caching
+ to take place.
+
.. changelog::
:version: 2.0.37
+++ /dev/null
-.. change::
- :tags: postgresql, usecase, asyncio
- :tickets: 12077
-
- Added an additional ``asyncio.shield()`` call within the connection
- terminate process of the asyncpg driver, to mitigate an issue where
- terminate would be prevented from completing under the anyio concurrency
- library.
+++ /dev/null
-.. change::
- :tags: bug, dml, mariadb, mysql
- :tickets: 12117
-
- Fixed a bug where the MySQL statement compiler would not properly compile
- statements where :meth:`_mysql.Insert.on_duplicate_key_update` was passed
- values that included ORM-mapped attributes (e.g.
- :class:`InstrumentedAttribute` objects) as keys. Pull request courtesy of
- mingyu.
+++ /dev/null
-.. change::
- :tags: bug, postgresql
- :tickets: 12159
-
- Adjusted the asyncpg connection wrapper so that the
- ``connection.transaction()`` call sent to asyncpg sends ``None`` for
- ``isolation_level`` if not otherwise set in the SQLAlchemy dialect/wrapper,
- thereby allowing asyncpg to make use of the server level setting for
- ``isolation_level`` in the absense of a client-level setting. Previously,
- this behavior of asyncpg was blocked by a hardcoded ``read_committed``.
+++ /dev/null
-.. change::
- :tags: bug, sqlite, aiosqlite, asyncio, pool
- :tickets: 12285
-
- Changed default connection pool used by the ``aiosqlite`` dialect
- from :class:`.NullPool` to :class:`.AsyncAdaptedQueuePool`; this change
- should have been made when 2.0 was first released as the ``pysqlite``
- dialect was similarly changed to use :class:`.QueuePool` as detailed
- in :ref:`change_7490`.
-
+++ /dev/null
-.. change::
- :tags: bug, engine
- :tickets: 12289
-
- Fixed event-related issue where invoking :meth:`.Engine.execution_options`
- on a :class:`.Engine` multiple times while making use of event-registering
- parameters such as ``isolation_level`` would lead to internal errors
- involving event registration.
+++ /dev/null
-.. change::
- :tags: bug, sql
- :tickets: 12302
-
- Reorganized the internals by which the ``.c`` collection on a
- :class:`.FromClause` gets generated so that it is resilient against the
- collection being accessed in concurrent fashion. An example is creating a
- :class:`.Alias` or :class:`.Subquery` and accessing it as a module level
- variable. This impacts the Oracle dialect which uses such module-level
- global alias objects but is of general use as well.
+++ /dev/null
-.. change::
- :tags: bug, sql
- :tickets: 12314
-
- Fixed SQL composition bug which impacted caching where using a ``None``
- value inside of an ``in_()`` expression would bypass the usual "expanded
- bind parameter" logic used by the IN construct, which allows proper caching
- to take place.
-
# The short X.Y version.
version = "2.0"
# The full version, including alpha/beta/rc tags.
-release = "2.0.37"
+release = "2.0.38"
-release_date = "January 9, 2025"
+release_date = "February 6, 2025"
site_base = os.environ.get("RTD_SITE_BASE", "https://www.sqlalchemy.org")
site_adapter_template = "docs_adapter.mako"