.. changelog::
:version: 2.1.0b2
- :include_notes_from: unreleased_21
+ :released: April 16, 2026
+
+ .. change::
+ :tags: feature, oracle
+ :tickets: 10375
+
+ Added support for the :class:`_sqltypes.JSON` datatype when using the
+ Oracle database with the oracledb dialect. JSON values are serialized and
+ deserialized using configurable strategies that accommodate Oracle's native
+ JSON type available as of Oracle 21c. Pull request courtesy Abdallah
+ Alhadad.
+
+ .. seealso::
+
+ :class:`_oracle.JSON` - Oracle-specific JSON class that includes
+ implementation and platform notes.
+
+ :ref:`oracledb_json`
+
+ .. change::
+ :tags: bug, schema
+ :tickets: 10604
+
+ Amended the ``repr()`` output for :class:`.Enum` so that the
+ :class:`.MetaData` is not shown in the output, as this interferes with
+ Alembic-autogenerated forms of this type which should be inheriting the
+ :class:`.MetaData` of the parent table in the migration script.
+
+
+ .. change::
+ :tags: bug, sql
+ :tickets: 11526
+
+ A warning is emitted when using the standalone :func:`_sql.distinct`
+ function in a :func:`_sql.select` columns list outside of an aggregate
+ function; this function is not intended as a replacement for the use of
+ :meth:`.Select.distinct`. Pull request courtesy bekapono.
+
+ .. change::
+ :tags: usecase, sql
+ :tickets: 11671
+
+ Added new parameter :paramref:`_sql.over.exclude` to :func:`_sql.over` and
+ related methods, enabling SQL standard frame exclusion clauses ``EXCLUDE
+ CURRENT ROW``, ``EXCLUDE GROUP``, ``EXCLUDE TIES``, ``EXCLUDE NO OTHERS``
+ in window functions. Pull request courtesy of Varun Chawla.
+
+ .. change::
+ :tags: feature, mssql
+ :tickets: 12869
+
+ Added support for the ``mssql-python`` driver, Microsoft's official Python
+ driver for SQL Server.
+
+ .. seealso::
+
+ :ref:`mssql_python` - Documentation for the mssql-python dialect
+
+
+ .. change::
+ :tags: schema, usecase
+ :tickets: 13085
+
+ Most :class:`_sql.FromClause` subclasses are now generic on
+ :class:`_schema.TypedColumns` subclasses, that can be used to type their
+ :attr:`_sql.FromClause.c` collection.
+ This applied to :class:`_schema.Table`, :class:`_sql.Join`,
+ :class:`_sql.Subquery`, :class:`_sql.CTE` and more.
+
+ .. seealso::
+
+ :ref:`change_13085`
+
+ .. change::
+ :tags: bug, typing
+ :tickets: 13091
+
+ Fixed issue in new :pep:`646` support for result sets where an issue in the
+ mypy type checker prevented "scalar" methods including
+ :meth:`.Connection.scalar`, :meth:`.Result.scalar`,
+ :meth:`_orm.Session.scalar`, as well as async versions of these methods
+ from applying the correct type to the scalar result value, when the columns
+ in the originating :func:`_sql.select` were typed as ``Any``. Pull request
+ courtesy Yurii Karabas.
+
+
+ .. change::
+ :tags: bug, typing
+ :tickets: 13131
+
+ Improved typing of :class:`_sqltypes.JSON` as well as dialect specific
+ variants like :class:`_postgresql.JSON` to include generic capabilities, so
+ that the types may be parameterized to indicate any specific type of
+ contents expected, e.g. ``JSONB[list[str]]()``.
+
+
+ .. change::
+ :tags: bug, sql
+ :tickets: 13140
+
+ Improved the ability for :class:`.TypeDecorator` to produce a correct
+ ``repr()`` for "schema" types such as :class:`.Enum` and :class:`.Boolean`.
+ This is mostly to support the Alembic autogenerate use case so that custom
+ types render with relevant arguments present. Improved the architecture
+ used by :class:`.TypeEngine` to produce ``repr()`` strings to be more
+ modular for compound types like :class:`.TypeDecorator`.
+
+ .. change::
+ :tags: usecase, orm
+ :tickets: 13198
+
+ The ``metadata``, ``type_annotation_map``, or ``registry`` can now be
+ set up in a declarative base also via a mixin class, not only by
+ directly setting them on the subclass like before.
+ The declarative class setup now uses ``getattr()`` to look for these
+ attributes, instead of relying only on the class ``__dict__``.
+
+ .. change::
+ :tags: usecase, sql
+
+ The :class:`.ColumnCollection` class hierarchy has been refactored to allow
+ column names such as ``add``, ``remove``, ``update``, ``extend``, and
+ ``clear`` to be used without conflicts. :class:`.ColumnCollection` is now
+ an abstract base class, with mutation operations moved to
+ :class:`.WriteableColumnCollection` and :class:`.DedupeColumnCollection`
+ subclasses. The :class:`.ReadOnlyColumnCollection` exposed as attributes
+ such as :attr:`.Table.c` no longer includes mutation methods that raised
+ :class:`.NotImplementedError`, allowing these common column names to be
+ accessed naturally, e.g. ``table.c.add``, ``table.c.remove``,
+ ``table.c.update``, etc.
.. changelog::
:version: 2.1.0b1
+++ /dev/null
-.. change::
- :tags: usecase, sql
-
- The :class:`.ColumnCollection` class hierarchy has been refactored to allow
- column names such as ``add``, ``remove``, ``update``, ``extend``, and
- ``clear`` to be used without conflicts. :class:`.ColumnCollection` is now
- an abstract base class, with mutation operations moved to
- :class:`.WriteableColumnCollection` and :class:`.DedupeColumnCollection`
- subclasses. The :class:`.ReadOnlyColumnCollection` exposed as attributes
- such as :attr:`.Table.c` no longer includes mutation methods that raised
- :class:`.NotImplementedError`, allowing these common column names to be
- accessed naturally, e.g. ``table.c.add``, ``table.c.remove``,
- ``table.c.update``, etc.