From: Mike Bayer Date: Sat, 27 Jun 2026 17:46:45 +0000 (-0400) Subject: - 2.1.0b3 X-Git-Tag: rel_2_1_0b3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=45535434a0feb437e4edb22607284541456ae916;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - 2.1.0b3 --- diff --git a/doc/build/changelog/changelog_21.rst b/doc/build/changelog/changelog_21.rst index 6cfffde07d..033de605a9 100644 --- a/doc/build/changelog/changelog_21.rst +++ b/doc/build/changelog/changelog_21.rst @@ -10,7 +10,269 @@ .. changelog:: :version: 2.1.0b3 - :include_notes_from: unreleased_21 + :released: June 27, 2026 + + .. change:: + :tags: usecase, orm + :tickets: 10610 + + The ``populate_existing`` execution option is now honored when passed in the + :paramref:`.Session.get.execution_options` dict by the method + :meth:`.Session.get` and analogous in other session kinds. The current + :paramref:`.Session.get.populate_existing` parameter will takes precedence if + specified, overriding the value of the execution options. + + .. change:: + :tags: feature, orm + :tickets: 11450 + + Added :paramref:`.selectinload.chunksize` parameter to :func:`.selectinload` + allowing users to configure the number of primary keys sent per IN clause + when loading relationships. Pull request courtesy bekapono. + + .. change:: + :tags: feature, sqlite + :tickets: 13260 + + Added :class:`_sqlite.JSONB` type for SQLite's binary JSON storage + format, available as of SQLite version 3.45.0. Values are stored via + the ``jsonb()`` SQL function and retrieved via ``json()``, while the + Python-side behavior remains identical to :class:`_sqlite.JSON`. + Pull request courtesy Shamil Abdulaev. + + .. seealso:: + + :class:`_sqlite.JSONB` + + .. change:: + :tags: postgresql, usecase + :tickets: 13268 + + Changed the default backslash escape value in the PostgreSQL dialect to + ``False`` to align it with the default value of + ``standard_conforming_strings=on``. This change should not affect most users + since the value is set at driver initialization on first connect. + + .. change:: + :tags: bug, orm + :tickets: 13291 + + Fixed issue where the declarative class registry would not consider + class-level :class:`.MetaData` objects set on abstract mixin classes when + resolving string-based table references in :func:`.relationship` + configurations. The registry now uses the same metadata resolution logic + as table creation, first checking for a class-specific ``metadata`` + attribute before falling back to :attr:`.registry.metadata`. + + .. change:: + :tags: bug, orm + :tickets: 13293 + + Fixed issue where the :meth:`_engine.Result.unique` filter was not properly + validated against the :meth:`_engine.Result.yield_per` method when both + were called as methods on the result object, such as + ``result.unique().yield_per(N)`` or ``result.yield_per(N).unique()``. The + uniquing filter was previously only checked when ``yield_per`` was set via + :paramref:`_engine.Connection.execution_options.yield_per`. Since these two + features are fundamentally incompatible for ORM results, an + :class:`.InvalidRequestError` is now raised in all cases. + + .. change:: + :tags: orm, usecase + :tickets: 13309 + + Updated the attribute :attr:`_orm.ORMExecuteState.user_defined_options` to + include options that were added to the statement before calling + :meth:`.Select.with_only_columns` or :meth:`_orm.Query.with_entities`. + + .. change:: + :tags: bug, orm + :tickets: 13333 + + A warning is now emitted when a Declarative attribute name is named + ``metadata`` or ``registry``. Previously, no warning was emitted for + ``registry``, and using the name ``metadata`` would raise an + InvalidRequestError. Since these names can be used for attributes + that are mapped as backrefs or using imperative mappings, usage + under Declarative has been relaxed for ``metadata`` but also warns + for both names as they may have unintended interactions with the + Declarative reserved names. + + .. change:: + :tags: usecase, orm, performance + :tickets: 13339 + + Optimized :func:`_orm.selectinload` to skip the ``.unique()`` call on inner + result sets when no nested :func:`_orm.joinedload` on a collection is + present. The uniquing pass is only required when a joined eager load + inflates rows due to a one-to-many or many-to-many JOIN; in the common case + of a leaf selectin load, rows are already unique by construction and the + per-row hashing overhead can be avoided. As a side effect, ``yield_per`` + set in a ``do_orm_execute`` event for a :func:`_orm.selectinload` + relationship load no longer raises ``InvalidRequestError`` when no nested + collection joinedload is in effect, since ``.unique()`` is no longer called + in that path. Pull request courtesy Oliver Parker. + + .. change:: + :tags: bug, sql + :tickets: 13343 + + Fixed issue where negation of comparison expressions involving + ``func.any()``, ``func.all()``, and ``func.some()`` SQL functions would + incorrectly flip the comparison operator (e.g. ``=`` to ``!=``) rather + than wrapping the expression with ``NOT``. These functions are now + registered as collection aggregate functions that prevent operator + flipping on negation, consistent with the behavior of the standalone + :func:`_expression.any_` and :func:`_expression.all_` constructs. + + .. change:: + :tags: usecase, orm + :tickets: 13346 + + Session level :paramref:`_orm.Session.execution_options` now take + effect for Core level SQL emitted by unit of work operations, in + addition to their existing use within ORM statement executions. + This is to provide for Core options such as + :paramref:`_engine.Connection.execution_options.schema_translate_map` + to be applicable to a :class:`.Session` overall. + + .. seealso:: + + :ref:`change_13346` + + .. change:: + :tags: engine, reflection + :tickets: 13350 + + Removed the legacy ``include_columns`` key from the dictionary returned + by the index reflection methods of some dialects. + This information is now part of the ``dialect_options`` dictionary under the key + ``{dialect_name}_include``, such as ``postgresql_include`` or ``mssql_include``. + + .. change:: + :tags: performance, orm + :tickets: 13363 + + ORM result row fetching now processes rows as plain tuples rather than + constructing :class:`.Row` objects, as ORM loaders use position-based + access and do not require the :class:`.Row` interface. :class:`.Row` + construction is still used when engine-level debug logging is enabled so + that individual rows can be logged. Benchmarks show a 3-16% improvement in + ORM entity load times depending on query shape. Pull request courtesy + Oliver Parker. + + .. change:: + :tags: performance, orm + :tickets: 13363 + + Improved performance of :func:`_orm.selectinload` and + :func:`_orm.subqueryload` result handling: + + * in selectinloader, the primary key columns used to correlate related + rows are now selected directly rather than being wrapped in a + :class:`.Bundle`, and are read from positional slices of each result + row. This removes the per-row :class:`.Row` construction that the + :class:`.Bundle` introduced, including for the common single-column + primary key case. + + * removed use of ``groupby()`` + ``lambda`` against :class:`.Row` objects + in subqueryloader; rows are converted to plain tuples and the result + lists are built via ``append()``. + + * many-to-one selectinload reads foreign key values directly from the + parent instance dictionary when present, falling back to attribute-level + access only for expired or deferred attributes. + + Pull request courtesy Oliver Parker. + + .. change:: + :tags: bug, engine + :tickets: 13381 + + Expanded try/except error handling to encompass the + :meth:`_events.ConnectionEvents.before_cursor_execute` and + :meth:`_events.ConnectionEvents.after_cursor_execute` event hooks, so that + exceptions raised within these hooks, including ``BaseException`` + subclasses such as ``asyncio.CancelledError``, are properly handled via the + error handling path used for DBAPI errors. This ensures proper connection + invalidation and pool notification when exit-type exceptions are raised in + event hooks. As part of this change, DBAPI errors raised from within these + event hooks will now be wrapped as SQLAlchemy exceptions. + + .. seealso:: + + :ref:`change_13381` + + .. change:: + :tags: bug, mysql + :tickets: 13393 + + Improved the regular expression used to parse index ``COMMENT`` clauses + in MySQL ``SHOW CREATE TABLE`` reflection to use an unambiguous + single-quoted-string pattern; the previous pattern was theoretically + subject to backtracking on malformed input, though such input is not + producible by MySQL itself. Fix courtesy of Javid Khan. + + .. change:: + :tags: orm, performance + :tickets: 5987 + + The :func:`.selectinload` loader strategy now selects the ``omit_join`` + optimization for many-to-many non-self-referential relationships, reducing + the number of joins in the secondary SELECT by selecting from the secondary + table directly rather than joining back to the parent entity. ``omit_join`` + is enabled automatically when the join condition determines that the + secondary table's foreign keys fully cover the parent's primary key. As + always, ``omit_join`` can be disabled by setting + :paramref:`.relationship.omit_join` to ``False``. Pull request courtesy + bekapono. + + .. change:: + :tags: bug, orm + :tickets: 8068 + + Fixed issue where the declarative class resolver would not consider + the :paramref:`.MetaData.schema` default schema when resolving a + string table name for the :paramref:`.relationship.secondary` parameter + as well as within string-based + :paramref:`.relationship.primaryjoin` and + :paramref:`.relationship.secondaryjoin` expressions. The resolution now + matches the behavior of :class:`.ForeignKey`, where an unqualified + table name is implicitly resolved under the default schema. A + deprecation warning is emitted when an unqualified name resolves to a + :data:`.BLANK_SCHEMA` table in a :class:`.MetaData` that has a default + schema set, as this implicit resolution will change in a future version. + + .. change:: + :tags: usecase, sql + :tickets: 8130 + + Added :meth:`_sql.Delete.using`, allowing explicit FROM expressions such as + joins to be rendered in backend-specific multiple-table DELETE forms + including MySQL/MariaDB ``DELETE .. USING``. Pull request courtesy + cjc0013. + + .. seealso:: + + :ref:`change_8130` + + .. change:: + :tags: performance, mssql, reflection + :tickets: 8430 + + Implemented native multi-table reflection methods for the SQL Server + dialect, providing :meth:`.MSDialect.get_multi_columns`, + :meth:`.MSDialect.get_multi_pk_constraint`, + :meth:`.MSDialect.get_multi_foreign_keys`, + :meth:`.MSDialect.get_multi_indexes` and + :meth:`.MSDialect.get_multi_table_comment`. Previously the SQL Server + dialect relied on the default dialect default implementation + which calls the per-table methods in a loop; the new implementations + issue a single bulk query per object type against the ``sys.*`` + catalog views, avoiding the per-table round trips. The single-table + reflection methods are now thin wrappers over the multi-table ones, + matching the pattern used by the PostgreSQL and Oracle dialects. + Pull request courtesy Gaurav Sharma. .. changelog:: :version: 2.1.0b2 diff --git a/doc/build/changelog/unreleased_21/10610.rst b/doc/build/changelog/unreleased_21/10610.rst deleted file mode 100644 index 03c1466e14..0000000000 --- a/doc/build/changelog/unreleased_21/10610.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. change:: - :tags: usecase, orm - :tickets: 10610 - - The ``populate_existing`` execution option is now honored when passed in the - :paramref:`.Session.get.execution_options` dict by the method - :meth:`.Session.get` and analogous in other session kinds. The current - :paramref:`.Session.get.populate_existing` parameter will takes precedence if - specified, overriding the value of the execution options. diff --git a/doc/build/changelog/unreleased_21/11450.rst b/doc/build/changelog/unreleased_21/11450.rst deleted file mode 100644 index 9ec502b929..0000000000 --- a/doc/build/changelog/unreleased_21/11450.rst +++ /dev/null @@ -1,7 +0,0 @@ -.. change:: - :tags: feature, orm - :tickets: 11450 - - Added :paramref:`.selectinload.chunksize` parameter to :func:`.selectinload` - allowing users to configure the number of primary keys sent per IN clause - when loading relationships. Pull request courtesy bekapono. diff --git a/doc/build/changelog/unreleased_21/13260.rst b/doc/build/changelog/unreleased_21/13260.rst deleted file mode 100644 index 3c49f5b6f6..0000000000 --- a/doc/build/changelog/unreleased_21/13260.rst +++ /dev/null @@ -1,13 +0,0 @@ -.. change:: - :tags: feature, sqlite - :tickets: 13260 - - Added :class:`_sqlite.JSONB` type for SQLite's binary JSON storage - format, available as of SQLite version 3.45.0. Values are stored via - the ``jsonb()`` SQL function and retrieved via ``json()``, while the - Python-side behavior remains identical to :class:`_sqlite.JSON`. - Pull request courtesy Shamil Abdulaev. - - .. seealso:: - - :class:`_sqlite.JSONB` diff --git a/doc/build/changelog/unreleased_21/13268.rst b/doc/build/changelog/unreleased_21/13268.rst deleted file mode 100644 index b55c4da9b1..0000000000 --- a/doc/build/changelog/unreleased_21/13268.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. change:: - :tags: postgresql, usecase - :tickets: 13268 - - Changed the default backslash escape value in the PostgreSQL dialect to - ``False`` to align it with the default value of - ``standard_conforming_strings=on``. This change should not affect most users - since the value is set at driver initialization on first connect. diff --git a/doc/build/changelog/unreleased_21/13291.rst b/doc/build/changelog/unreleased_21/13291.rst deleted file mode 100644 index f68faba21a..0000000000 --- a/doc/build/changelog/unreleased_21/13291.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. change:: - :tags: bug, orm - :tickets: 13291 - - Fixed issue where the declarative class registry would not consider - class-level :class:`.MetaData` objects set on abstract mixin classes when - resolving string-based table references in :func:`.relationship` - configurations. The registry now uses the same metadata resolution logic - as table creation, first checking for a class-specific ``metadata`` - attribute before falling back to :attr:`.registry.metadata`. diff --git a/doc/build/changelog/unreleased_21/13293.rst b/doc/build/changelog/unreleased_21/13293.rst deleted file mode 100644 index 0819277032..0000000000 --- a/doc/build/changelog/unreleased_21/13293.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. change:: - :tags: bug, orm - :tickets: 13293 - - Fixed issue where the :meth:`_engine.Result.unique` filter was not properly - validated against the :meth:`_engine.Result.yield_per` method when both - were called as methods on the result object, such as - ``result.unique().yield_per(N)`` or ``result.yield_per(N).unique()``. The - uniquing filter was previously only checked when ``yield_per`` was set via - :paramref:`_engine.Connection.execution_options.yield_per`. Since these two - features are fundamentally incompatible for ORM results, an - :class:`.InvalidRequestError` is now raised in all cases. diff --git a/doc/build/changelog/unreleased_21/13309.rst b/doc/build/changelog/unreleased_21/13309.rst deleted file mode 100644 index a97686113a..0000000000 --- a/doc/build/changelog/unreleased_21/13309.rst +++ /dev/null @@ -1,7 +0,0 @@ -.. change:: - :tags: orm, usecase - :tickets: 13309 - - Updated the attribute :attr:`_orm.ORMExecuteState.user_defined_options` to - include options that were added to the statement before calling - :meth:`.Select.with_only_columns` or :meth:`_orm.Query.with_entities`. diff --git a/doc/build/changelog/unreleased_21/13333.rst b/doc/build/changelog/unreleased_21/13333.rst deleted file mode 100644 index 8fea67cee6..0000000000 --- a/doc/build/changelog/unreleased_21/13333.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. change:: - :tags: bug, orm - :tickets: 13333 - - A warning is now emitted when a Declarative attribute name is named - ``metadata`` or ``registry``. Previously, no warning was emitted for - ``registry``, and using the name ``metadata`` would raise an - InvalidRequestError. Since these names can be used for attributes - that are mapped as backrefs or using imperative mappings, usage - under Declarative has been relaxed for ``metadata`` but also warns - for both names as they may have unintended interactions with the - Declarative reserved names. diff --git a/doc/build/changelog/unreleased_21/13339.rst b/doc/build/changelog/unreleased_21/13339.rst deleted file mode 100644 index 43dbbfe071..0000000000 --- a/doc/build/changelog/unreleased_21/13339.rst +++ /dev/null @@ -1,14 +0,0 @@ -.. change:: - :tags: usecase, orm, performance - :tickets: 13339 - - Optimized :func:`_orm.selectinload` to skip the ``.unique()`` call on inner - result sets when no nested :func:`_orm.joinedload` on a collection is - present. The uniquing pass is only required when a joined eager load - inflates rows due to a one-to-many or many-to-many JOIN; in the common case - of a leaf selectin load, rows are already unique by construction and the - per-row hashing overhead can be avoided. As a side effect, ``yield_per`` - set in a ``do_orm_execute`` event for a :func:`_orm.selectinload` - relationship load no longer raises ``InvalidRequestError`` when no nested - collection joinedload is in effect, since ``.unique()`` is no longer called - in that path. Pull request courtesy Oliver Parker. diff --git a/doc/build/changelog/unreleased_21/13343.rst b/doc/build/changelog/unreleased_21/13343.rst deleted file mode 100644 index cae9b12458..0000000000 --- a/doc/build/changelog/unreleased_21/13343.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. change:: - :tags: bug, sql - :tickets: 13343 - - Fixed issue where negation of comparison expressions involving - ``func.any()``, ``func.all()``, and ``func.some()`` SQL functions would - incorrectly flip the comparison operator (e.g. ``=`` to ``!=``) rather - than wrapping the expression with ``NOT``. These functions are now - registered as collection aggregate functions that prevent operator - flipping on negation, consistent with the behavior of the standalone - :func:`_expression.any_` and :func:`_expression.all_` constructs. diff --git a/doc/build/changelog/unreleased_21/13346.rst b/doc/build/changelog/unreleased_21/13346.rst deleted file mode 100644 index 08210f85b0..0000000000 --- a/doc/build/changelog/unreleased_21/13346.rst +++ /dev/null @@ -1,14 +0,0 @@ -.. change:: - :tags: usecase, orm - :tickets: 13346 - - Session level :paramref:`_orm.Session.execution_options` now take - effect for Core level SQL emitted by unit of work operations, in - addition to their existing use within ORM statement executions. - This is to provide for Core options such as - :paramref:`_engine.Connection.execution_options.schema_translate_map` - to be applicable to a :class:`.Session` overall. - - .. seealso:: - - :ref:`change_13346` diff --git a/doc/build/changelog/unreleased_21/13350.rst b/doc/build/changelog/unreleased_21/13350.rst deleted file mode 100644 index 710be09752..0000000000 --- a/doc/build/changelog/unreleased_21/13350.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. change:: - :tags: engine, reflection - :tickets: 13350 - - Removed the legacy ``include_columns`` key from the dictionary returned - by the index reflection methods of some dialects. - This information is now part of the ``dialect_options`` dictionary under the key - ``{dialect_name}_include``, such as ``postgresql_include`` or ``mssql_include``. diff --git a/doc/build/changelog/unreleased_21/13363.rst b/doc/build/changelog/unreleased_21/13363.rst deleted file mode 100644 index 1490c5511d..0000000000 --- a/doc/build/changelog/unreleased_21/13363.rst +++ /dev/null @@ -1,35 +0,0 @@ -.. change:: - :tags: performance, orm - :tickets: 13363 - - ORM result row fetching now processes rows as plain tuples rather than - constructing :class:`.Row` objects, as ORM loaders use position-based - access and do not require the :class:`.Row` interface. :class:`.Row` - construction is still used when engine-level debug logging is enabled so - that individual rows can be logged. Benchmarks show a 3-16% improvement in - ORM entity load times depending on query shape. Pull request courtesy - Oliver Parker. - -.. change:: - :tags: performance, orm - :tickets: 13363 - - Improved performance of :func:`_orm.selectinload` and - :func:`_orm.subqueryload` result handling: - - * in selectinloader, the primary key columns used to correlate related - rows are now selected directly rather than being wrapped in a - :class:`.Bundle`, and are read from positional slices of each result - row. This removes the per-row :class:`.Row` construction that the - :class:`.Bundle` introduced, including for the common single-column - primary key case. - - * removed use of ``groupby()`` + ``lambda`` against :class:`.Row` objects - in subqueryloader; rows are converted to plain tuples and the result - lists are built via ``append()``. - - * many-to-one selectinload reads foreign key values directly from the - parent instance dictionary when present, falling back to attribute-level - access only for expired or deferred attributes. - - Pull request courtesy Oliver Parker. diff --git a/doc/build/changelog/unreleased_21/13381.rst b/doc/build/changelog/unreleased_21/13381.rst deleted file mode 100644 index 2780fa0e75..0000000000 --- a/doc/build/changelog/unreleased_21/13381.rst +++ /dev/null @@ -1,17 +0,0 @@ -.. change:: - :tags: bug, engine - :tickets: 13381 - - Expanded try/except error handling to encompass the - :meth:`_events.ConnectionEvents.before_cursor_execute` and - :meth:`_events.ConnectionEvents.after_cursor_execute` event hooks, so that - exceptions raised within these hooks, including ``BaseException`` - subclasses such as ``asyncio.CancelledError``, are properly handled via the - error handling path used for DBAPI errors. This ensures proper connection - invalidation and pool notification when exit-type exceptions are raised in - event hooks. As part of this change, DBAPI errors raised from within these - event hooks will now be wrapped as SQLAlchemy exceptions. - - .. seealso:: - - :ref:`change_13381` diff --git a/doc/build/changelog/unreleased_21/13393.rst b/doc/build/changelog/unreleased_21/13393.rst deleted file mode 100644 index 8083b0b07d..0000000000 --- a/doc/build/changelog/unreleased_21/13393.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. change:: - :tags: bug, mysql - :tickets: 13393 - - Improved the regular expression used to parse index ``COMMENT`` clauses - in MySQL ``SHOW CREATE TABLE`` reflection to use an unambiguous - single-quoted-string pattern; the previous pattern was theoretically - subject to backtracking on malformed input, though such input is not - producible by MySQL itself. Fix courtesy of Javid Khan. diff --git a/doc/build/changelog/unreleased_21/5987.rst b/doc/build/changelog/unreleased_21/5987.rst deleted file mode 100644 index 8408a52c62..0000000000 --- a/doc/build/changelog/unreleased_21/5987.rst +++ /dev/null @@ -1,13 +0,0 @@ -.. change:: - :tags: orm, performance - :tickets: 5987 - - The :func:`.selectinload` loader strategy now selects the ``omit_join`` - optimization for many-to-many non-self-referential relationships, reducing - the number of joins in the secondary SELECT by selecting from the secondary - table directly rather than joining back to the parent entity. ``omit_join`` - is enabled automatically when the join condition determines that the - secondary table's foreign keys fully cover the parent's primary key. As - always, ``omit_join`` can be disabled by setting - :paramref:`.relationship.omit_join` to ``False``. Pull request courtesy - bekapono. diff --git a/doc/build/changelog/unreleased_21/8068.rst b/doc/build/changelog/unreleased_21/8068.rst deleted file mode 100644 index 25eeaadf3c..0000000000 --- a/doc/build/changelog/unreleased_21/8068.rst +++ /dev/null @@ -1,15 +0,0 @@ -.. change:: - :tags: bug, orm - :tickets: 8068 - - Fixed issue where the declarative class resolver would not consider - the :paramref:`.MetaData.schema` default schema when resolving a - string table name for the :paramref:`.relationship.secondary` parameter - as well as within string-based - :paramref:`.relationship.primaryjoin` and - :paramref:`.relationship.secondaryjoin` expressions. The resolution now - matches the behavior of :class:`.ForeignKey`, where an unqualified - table name is implicitly resolved under the default schema. A - deprecation warning is emitted when an unqualified name resolves to a - :data:`.BLANK_SCHEMA` table in a :class:`.MetaData` that has a default - schema set, as this implicit resolution will change in a future version. diff --git a/doc/build/changelog/unreleased_21/8130.rst b/doc/build/changelog/unreleased_21/8130.rst deleted file mode 100644 index 1e866ee5ee..0000000000 --- a/doc/build/changelog/unreleased_21/8130.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. change:: - :tags: usecase, sql - :tickets: 8130 - - Added :meth:`_sql.Delete.using`, allowing explicit FROM expressions such as - joins to be rendered in backend-specific multiple-table DELETE forms - including MySQL/MariaDB ``DELETE .. USING``. Pull request courtesy - cjc0013. - - .. seealso:: - - :ref:`change_8130` diff --git a/doc/build/changelog/unreleased_21/8430.rst b/doc/build/changelog/unreleased_21/8430.rst deleted file mode 100644 index 9467c8a92a..0000000000 --- a/doc/build/changelog/unreleased_21/8430.rst +++ /dev/null @@ -1,17 +0,0 @@ -.. change:: - :tags: performance, mssql, reflection - :tickets: 8430 - - Implemented native multi-table reflection methods for the SQL Server - dialect, providing :meth:`.MSDialect.get_multi_columns`, - :meth:`.MSDialect.get_multi_pk_constraint`, - :meth:`.MSDialect.get_multi_foreign_keys`, - :meth:`.MSDialect.get_multi_indexes` and - :meth:`.MSDialect.get_multi_table_comment`. Previously the SQL Server - dialect relied on the default dialect default implementation - which calls the per-table methods in a loop; the new implementations - issue a single bulk query per object type against the ``sys.*`` - catalog views, avoiding the per-table round trips. The single-table - reflection methods are now thin wrappers over the multi-table ones, - matching the pattern used by the PostgreSQL and Oracle dialects. - Pull request courtesy Gaurav Sharma. diff --git a/doc/build/conf.py b/doc/build/conf.py index c5f8862e48..2fb25cc5e7 100644 --- a/doc/build/conf.py +++ b/doc/build/conf.py @@ -237,9 +237,9 @@ copyright = "2007-2026, the SQLAlchemy authors and contributors" # noqa # The short X.Y version. version = "2.1" # The full version, including alpha/beta/rc tags. -release = "2.1.0b2" +release = "2.1.0b3" -release_date = "April 16, 2026" +release_date = "June 27, 2026" site_base = os.environ.get("RTD_SITE_BASE", "https://www.sqlalchemy.org") site_adapter_template = "docs_adapter.mako"