]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- 1.4.0b1
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 2 Nov 2020 19:35:38 +0000 (14:35 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 2 Nov 2020 19:35:38 +0000 (14:35 -0500)
136 files changed:
doc/build/changelog/changelog_14.rst
doc/build/changelog/unreleased_14/1390.rst [deleted file]
doc/build/changelog/unreleased_14/1653.rst [deleted file]
doc/build/changelog/unreleased_14/1763.rst [deleted file]
doc/build/changelog/unreleased_14/2056.rst [deleted file]
doc/build/changelog/unreleased_14/3414.rst [deleted file]
doc/build/changelog/unreleased_14/3858.rst [deleted file]
doc/build/changelog/unreleased_14/4002.rst [deleted file]
doc/build/changelog/unreleased_14/4189.rst [deleted file]
doc/build/changelog/unreleased_14/4194.rst [deleted file]
doc/build/changelog/unreleased_14/4195.rst [deleted file]
doc/build/changelog/unreleased_14/4212.rst [deleted file]
doc/build/changelog/unreleased_14/4235.rst [deleted file]
doc/build/changelog/unreleased_14/4262.rst [deleted file]
doc/build/changelog/unreleased_14/4336.rst [deleted file]
doc/build/changelog/unreleased_14/4384.rst [deleted file]
doc/build/changelog/unreleased_14/4395.rst [deleted file]
doc/build/changelog/unreleased_14/4449.rst [deleted file]
doc/build/changelog/unreleased_14/4458.rst [deleted file]
doc/build/changelog/unreleased_14/4472.rst [deleted file]
doc/build/changelog/unreleased_14/4519.rst [deleted file]
doc/build/changelog/unreleased_14/4524.rst [deleted file]
doc/build/changelog/unreleased_14/4617_coercion.rst [deleted file]
doc/build/changelog/unreleased_14/4617_implicit_subquery.rst [deleted file]
doc/build/changelog/unreleased_14/4617_scalar.rst [deleted file]
doc/build/changelog/unreleased_14/4621.rst [deleted file]
doc/build/changelog/unreleased_14/4632.rst [deleted file]
doc/build/changelog/unreleased_14/4634.rst [deleted file]
doc/build/changelog/unreleased_14/4638.rst [deleted file]
doc/build/changelog/unreleased_14/4639.rst [deleted file]
doc/build/changelog/unreleased_14/4642.rst [deleted file]
doc/build/changelog/unreleased_14/4643.rst [deleted file]
doc/build/changelog/unreleased_14/4644.rst [deleted file]
doc/build/changelog/unreleased_14/4645.rst [deleted file]
doc/build/changelog/unreleased_14/4649.rst [deleted file]
doc/build/changelog/unreleased_14/4656.rst [deleted file]
doc/build/changelog/unreleased_14/4662.rst [deleted file]
doc/build/changelog/unreleased_14/4696.rst [deleted file]
doc/build/changelog/unreleased_14/4699.rst [deleted file]
doc/build/changelog/unreleased_14/4705.rst [deleted file]
doc/build/changelog/unreleased_14/4710.rst [deleted file]
doc/build/changelog/unreleased_14/4712.rst [deleted file]
doc/build/changelog/unreleased_14/4718.rst [deleted file]
doc/build/changelog/unreleased_14/4719.rst [deleted file]
doc/build/changelog/unreleased_14/4737.rst [deleted file]
doc/build/changelog/unreleased_14/4741.rst [deleted file]
doc/build/changelog/unreleased_14/4753.rst [deleted file]
doc/build/changelog/unreleased_14/4755.rst [deleted file]
doc/build/changelog/unreleased_14/4789.rst [deleted file]
doc/build/changelog/unreleased_14/4808.rst [deleted file]
doc/build/changelog/unreleased_14/4809.rst [deleted file]
doc/build/changelog/unreleased_14/4826.rst [deleted file]
doc/build/changelog/unreleased_14/4829.rst [deleted file]
doc/build/changelog/unreleased_14/4836.rst [deleted file]
doc/build/changelog/unreleased_14/4846.rst [deleted file]
doc/build/changelog/unreleased_14/4857.rst [deleted file]
doc/build/changelog/unreleased_14/4868.rst [deleted file]
doc/build/changelog/unreleased_14/4877.rst [deleted file]
doc/build/changelog/unreleased_14/4878.rst [deleted file]
doc/build/changelog/unreleased_14/4887.rst [deleted file]
doc/build/changelog/unreleased_14/4895.rst [deleted file]
doc/build/changelog/unreleased_14/4914.rst [deleted file]
doc/build/changelog/unreleased_14/4966.rst [deleted file]
doc/build/changelog/unreleased_14/4971.rst [deleted file]
doc/build/changelog/unreleased_14/4976.rst [deleted file]
doc/build/changelog/unreleased_14/4980.rst [deleted file]
doc/build/changelog/unreleased_14/4994.rst [deleted file]
doc/build/changelog/unreleased_14/5001.rst [deleted file]
doc/build/changelog/unreleased_14/5004.rst [deleted file]
doc/build/changelog/unreleased_14/5010.rst [deleted file]
doc/build/changelog/unreleased_14/5018.rst [deleted file]
doc/build/changelog/unreleased_14/5027.rst [deleted file]
doc/build/changelog/unreleased_14/5054.rst [deleted file]
doc/build/changelog/unreleased_14/5074.rst [deleted file]
doc/build/changelog/unreleased_14/5084.rst [deleted file]
doc/build/changelog/unreleased_14/5094.rst [deleted file]
doc/build/changelog/unreleased_14/5122.rst [deleted file]
doc/build/changelog/unreleased_14/5127.rst [deleted file]
doc/build/changelog/unreleased_14/5131.rst [deleted file]
doc/build/changelog/unreleased_14/5134.rst [deleted file]
doc/build/changelog/unreleased_14/5150.rst [deleted file]
doc/build/changelog/unreleased_14/5159.rst [deleted file]
doc/build/changelog/unreleased_14/5171.rst [deleted file]
doc/build/changelog/unreleased_14/5189.rst [deleted file]
doc/build/changelog/unreleased_14/5191.rst [deleted file]
doc/build/changelog/unreleased_14/5192.rst [deleted file]
doc/build/changelog/unreleased_14/5221.rst [deleted file]
doc/build/changelog/unreleased_14/5226.rst [deleted file]
doc/build/changelog/unreleased_14/5237.rst [deleted file]
doc/build/changelog/unreleased_14/5244.rst [deleted file]
doc/build/changelog/unreleased_14/5263.rst [deleted file]
doc/build/changelog/unreleased_14/527.rst [deleted file]
doc/build/changelog/unreleased_14/5284.rst [deleted file]
doc/build/changelog/unreleased_14/5315.rst [deleted file]
doc/build/changelog/unreleased_14/5362.rst [deleted file]
doc/build/changelog/unreleased_14/5367.rst [deleted file]
doc/build/changelog/unreleased_14/5380.rst [deleted file]
doc/build/changelog/unreleased_14/5400.rst [deleted file]
doc/build/changelog/unreleased_14/5401.rst [deleted file]
doc/build/changelog/unreleased_14/5404.rst [deleted file]
doc/build/changelog/unreleased_14/5413.rst [deleted file]
doc/build/changelog/unreleased_14/5435.rst [deleted file]
doc/build/changelog/unreleased_14/5459.rst [deleted file]
doc/build/changelog/unreleased_14/5496.rst [deleted file]
doc/build/changelog/unreleased_14/5497.rst [deleted file]
doc/build/changelog/unreleased_14/5498.rst [deleted file]
doc/build/changelog/unreleased_14/5506.rst [deleted file]
doc/build/changelog/unreleased_14/5508.rst [deleted file]
doc/build/changelog/unreleased_14/5526.rst [deleted file]
doc/build/changelog/unreleased_14/5527.rst [deleted file]
doc/build/changelog/unreleased_14/5549.rst [deleted file]
doc/build/changelog/unreleased_14/5573.rst [deleted file]
doc/build/changelog/unreleased_14/5576.rst [deleted file]
doc/build/changelog/unreleased_14/5578.rst [deleted file]
doc/build/changelog/unreleased_14/5597.rst [deleted file]
doc/build/changelog/unreleased_14/5606.rst [deleted file]
doc/build/changelog/unreleased_14/5634.rst [deleted file]
doc/build/changelog/unreleased_14/5649.rst [deleted file]
doc/build/changelog/unreleased_14/5653.rst [deleted file]
doc/build/changelog/unreleased_14/asbool_join.rst [deleted file]
doc/build/changelog/unreleased_14/bind_removed_from_compiler.rst [deleted file]
doc/build/changelog/unreleased_14/checks_deferred_to_compile.rst [deleted file]
doc/build/changelog/unreleased_14/mssql_identity_dialect_options.rst [deleted file]
doc/build/changelog/unreleased_14/mssql_version.rst [deleted file]
doc/build/changelog/unreleased_14/mysql_has_table.rst [deleted file]
doc/build/changelog/unreleased_14/oracle_limit.rst [deleted file]
doc/build/changelog/unreleased_14/oracle_sequence_options.rst [deleted file]
doc/build/changelog/unreleased_14/orm_update_delete.rst [deleted file]
doc/build/changelog/unreleased_14/pg8000.rst [deleted file]
doc/build/changelog/unreleased_14/psycopg2_27.rst [deleted file]
doc/build/changelog/unreleased_14/removed_depthfirst.rst [deleted file]
doc/build/changelog/unreleased_14/result.rst [deleted file]
doc/build/changelog/unreleased_14/sscursor.rst [deleted file]
doc/build/changelog/unreleased_14/table_mustexist.rst [deleted file]
doc/build/changelog/unreleased_14/table_no_dupe_cols.rst [deleted file]
doc/build/conf.py

index 060e63c7d7862bd071c1f7ea4c9bafb6501e7e0c..7acd06c009a6ebbb42893a48a736b4f2aab809bc 100644 (file)
@@ -15,4 +15,2061 @@ This document details individual issue-level changes made throughout
 
 .. changelog::
     :version: 1.4.0b1
-    :include_notes_from: unreleased_14
+    :released: November 2, 2020
+
+    .. change::
+        :tags: feature, orm
+        :tickets: 5159
+
+        The ORM can now generate queries previously only available when using
+        :class:`_orm.Query` using the :func:`_sql.select` construct directly.
+        A new system by which ORM "plugins" may establish themselves within a
+        Core :class:`_sql.Select` allow the majority of query building logic
+        previously inside of :class:`_orm.Query` to now take place within
+        a compilation-level extension for :class:`_sql.Select`.  Similar changes
+        have been made for the :class:`_sql.Update` and :class:`_sql.Delete`
+        constructs as well.  The constructs when invoked using :meth:`_orm.Session.execute`
+        now do ORM-related work within the method. For :class:`_sql.Select`,
+        the :class:`_engine.Result` object returned now contains ORM-level
+        entities and results.
+
+        .. seealso::
+
+            :ref:`change_5159`
+
+    .. change::
+        :tags: feature,sql
+        :tickets: 4737
+
+        Added "from linting" as a built-in feature to the SQL compiler.  This
+        allows the compiler to maintain graph of all the FROM clauses in a
+        particular SELECT statement, linked by criteria in either the WHERE
+        or in JOIN clauses that link these FROM clauses together.  If any two
+        FROM clauses have no path between them, a warning is emitted that the
+        query may be producing a cartesian product.   As the Core expression
+        language as well as the ORM are built on an "implicit FROMs" model where
+        a particular FROM clause is automatically added if any part of the query
+        refers to it, it is easy for this to happen inadvertently and it is
+        hoped that the new feature helps with this issue.
+
+        .. seealso::
+
+            :ref:`change_4737`
+
+    .. change::
+        :tags: deprecated, orm
+        :tickets: 5606
+
+        The "slice index" feature used by :class:`_orm.Query` as well as by the
+        dynamic relationship loader will no longer accept negative indexes in
+        SQLAlchemy 2.0.  These operations do not work efficiently and load the
+        entire collection in, which is both surprising and undesirable.   These
+        will warn in 1.4 unless the :paramref:`_orm.Session.future` flag is set in
+        which case they will raise IndexError.
+
+
+    .. change::
+        :tags: sql, change
+        :tickets: 4617
+
+        The "clause coercion" system, which is SQLAlchemy Core's system of receiving
+        arguments and resolving them into :class:`_expression.ClauseElement` structures in order
+        to build up SQL expression objects, has been rewritten from a series of
+        ad-hoc functions to a fully consistent class-based system.   This change
+        is internal and should have no impact on end users other than more specific
+        error messages when the wrong kind of argument is passed to an expression
+        object, however the change is part of a larger set of changes involving
+        the role and behavior of :func:`_expression.select` objects.
+
+
+    .. change::
+        :tags: bug, mysql
+
+        The MySQL and MariaDB dialects now query from the information_schema.tables
+        system view in order to determine if a particular table exists or not.
+        Previously, the "DESCRIBE" command was used with an exception catch to
+        detect non-existent,  which would have the undesirable effect of emitting a
+        ROLLBACK on the connection. There appeared to be legacy encoding issues
+        which prevented the use of "SHOW TABLES", for this, but as MySQL support is
+        now at 5.0.2  or above due to :ticket:`4189`, the information_schema tables
+        are now available in all cases.
+
+
+    .. change::
+        :tags: bug, orm
+        :tickets: 5122
+
+        A query that is against a mapped inheritance subclass which also uses
+        :meth:`_query.Query.select_entity_from` or a similar technique in order  to
+        provide an existing subquery to SELECT from, will now raise an error if the
+        given subquery returns entities that do not correspond to the given
+        subclass, that is, they are sibling or superclasses in the same hierarchy.
+        Previously, these would be returned without error.  Additionally, if the
+        inheritance mapping is a single-inheritance mapping, the given subquery
+        must apply the appropriate filtering against the polymorphic discriminator
+        column in order to avoid this error; previously, the :class:`_query.Query` would
+        add this criteria to the outside query however this interferes with some
+        kinds of query that return other kinds of entities as well.
+
+        .. seealso::
+
+            :ref:`change_5122`
+
+    .. change::
+        :tags: bug, engine
+        :tickets: 5004
+
+        Revised the :paramref:`.Connection.execution_options.schema_translate_map`
+        feature such that the processing of the SQL statement to receive a specific
+        schema name occurs within the execution phase of the statement, rather than
+        at the compile phase.   This is to support the statement being efficiently
+        cached.   Previously, the current schema being rendered into the statement
+        for a particular run would be considered as part of the cache key itself,
+        meaning that for a run against hundreds of schemas, there would be hundreds
+        of cache keys, rendering the cache much less performant.  The new behavior
+        is that the rendering is done in a similar  manner as the "post compile"
+        rendering added in 1.4 as part of :ticket:`4645`, :ticket:`4808`.
+
+    .. change::
+        :tags: usecase, sql
+        :tickets: 527
+
+        The :meth:`.Index.create` and :meth:`.Index.drop` methods now have a
+        parameter :paramref:`.Index.create.checkfirst`, in the same way as that of
+        :class:`_schema.Table` and :class:`.Sequence`, which when enabled will cause the
+        operation to detect if the index exists (or not) before performing a create
+        or drop operation.
+
+
+    .. change::
+        :tags: sql, postgresql
+        :tickets: 5498
+
+        Allow specifying the data type when creating a :class:`.Sequence` in
+        PostgreSQL by using the parameter :paramref:`.Sequence.data_type`.
+
+    .. change::
+        :tags: change, mssql
+        :tickets: 5084
+
+        SQL Server OFFSET and FETCH keywords are now used for limit/offset, rather
+        than using a window function, for SQL Server versions 11 and higher. TOP is
+        still used for a query that features only LIMIT.   Pull request courtesy
+        Elkin.
+
+    .. change::
+        :tags: deprecated, engine
+        :tickets: 5526
+
+        The :class:`_engine.URL` object is now an immutable named tuple. To modify
+        a URL object, use the :meth:`_engine.URL.set` method to produce a new URL
+        object.
+
+        .. seealso::
+
+            :ref:`change_5526` - notes on migration
+
+
+    .. change::
+        :tags: change, postgresql
+
+        When using the psycopg2 dialect for PostgreSQL, psycopg2 minimum version is
+        set at 2.7. The psycopg2 dialect relies upon many features of psycopg2
+        released in the past few years, so to simplify the dialect, version 2.7,
+        released in March, 2017 is now the minimum version required.
+
+
+    .. change::
+        :tags: usecase, sql
+
+        The :func:`.true` and :func:`.false` operators may now be applied as the
+        "onclause" of a :func:`_expression.join` on a backend that does not support
+        "native boolean" expressions, e.g. Oracle or SQL Server, and the expression
+        will render as "1=1" for true and "1=0" false.  This is the behavior that
+        was introduced many years ago in :ticket:`2804` for and/or expressions.
+
+    .. change::
+        :tags: feature, engine
+        :tickets: 5087, 4395, 4959
+
+        Implemented an all-new :class:`_result.Result` object that replaces the previous
+        ``ResultProxy`` object.   As implemented in Core, the subclass
+        :class:`_result.CursorResult` features a compatible calling interface with the
+        previous ``ResultProxy``, and additionally adds a great amount of new
+        functionality that can be applied to Core result sets as well as ORM result
+        sets, which are now integrated into the same model.   :class:`_result.Result`
+        includes features such as column selection and rearrangement, improved
+        fetchmany patterns, uniquing, as well as a variety of implementations that
+        can be used to create database results from in-memory structures as well.
+
+
+        .. seealso::
+
+            :ref:`change_result_14_core`
+
+
+    .. change::
+        :tags: renamed, engine
+        :tickets: 5244
+
+        The :meth:`_reflection.Inspector.reflecttable` was renamed to
+        :meth:`_reflection.Inspector.reflect_table`.
+
+    .. change::
+        :tags: change, orm
+        :tickets: 4662
+
+        The condition where a pending object being flushed with an identity that
+        already exists in the identity map has been adjusted to emit a warning,
+        rather than throw a :class:`.FlushError`. The rationale is so that the
+        flush will proceed and raise a :class:`.IntegrityError` instead, in the
+        same way as if the existing object were not present in the identity map
+        already.   This helps with schemes that are using the
+        :class:`.IntegrityError` as a means of catching whether or not a row
+        already exists in the table.
+
+        .. seealso::
+
+            :ref:`change_4662`
+
+
+    .. change::
+        :tags: bug, sql
+        :tickets: 5001
+
+        Fixed issue where when constructing constraints from ORM-bound columns,
+        primarily :class:`_schema.ForeignKey` objects but also :class:`.UniqueConstraint`,
+        :class:`.CheckConstraint` and others, the ORM-level
+        :class:`.InstrumentedAttribute` is discarded entirely, and all ORM-level
+        annotations from the columns are removed; this is so that the constraints
+        are still fully pickleable without the ORM-level entities being pulled in.
+        These annotations are not necessary to be present at the schema/metadata
+        level.
+
+    .. change::
+        :tags: bug, mysql
+        :tickets: 5568
+
+        The "skip_locked" keyword used with ``with_for_update()`` will render "SKIP
+        LOCKED" on all MySQL backends, meaning it will fail for MySQL less than
+        version 8 and on current MariaDB backends.  This is because those backends
+        do not support "SKIP LOCKED" or any equivalent, so this error should not be
+        silently ignored.   This is upgraded from a warning in the 1.3 series.
+
+
+    .. change::
+        :tags: performance, postgresql
+        :tickets: 5401
+
+        The psycopg2 dialect now defaults to using the very performant
+        ``execute_values()`` psycopg2 extension for compiled INSERT statements,
+        and also implements RETURNING support when this extension is used.  This
+        allows INSERT statements that even include an autoincremented SERIAL
+        or IDENTITY value to run very fast while still being able to return the
+        newly generated primary key values.   The ORM will then integrate this
+        new feature in a separate change.
+
+        .. seealso::
+
+            :ref:`change_5401` - full list of changes regarding the
+            ``executemany_mode`` parameter.
+
+
+    .. change::
+        :tags: feature, orm
+        :tickets: 4472
+
+        Added the ability to add arbitrary criteria to the ON clause generated
+        by a relationship attribute in a query, which applies to methods such
+        as :meth:`_query.Query.join` as well as loader options like
+        :func:`_orm.joinedload`.   Additionally, a "global" version of the option
+        allows limiting criteria to be applied to particular entities in
+        a query globally.
+
+        .. seealso::
+
+            :ref:`loader_option_criteria`
+
+            :ref:`do_orm_execute_global_criteria`
+
+            :func:`_orm.with_loader_criteria`
+
+    .. change::
+        :tags: renamed, sql
+
+        :class:`_schema.Table` parameter ``mustexist`` has been renamed
+        to :paramref:`_schema.Table.must_exist` and will now warn when used.
+
+    .. change::
+        :tags: removed, sql
+        :tickets: 4632
+
+        The "threadlocal" execution strategy, deprecated in 1.3, has been
+        removed for 1.4, as well as the concept of "engine strategies" and the
+        ``Engine.contextual_connect`` method.  The "strategy='mock'" keyword
+        argument is still accepted for now with a deprecation warning; use
+        :func:`.create_mock_engine` instead for this use case.
+
+        .. seealso::
+
+            :ref:`change_4393_threadlocal` - from the 1.3 migration notes which
+            discusses the rationale for deprecation.
+
+    .. change::
+        :tags: mssql, postgresql, reflection, schema, usecase
+        :tickets: 4458
+
+        Improved support for covering indexes (with INCLUDE columns). Added the
+        ability for postgresql to render CREATE INDEX statements with an INCLUDE
+        clause from Core. Index reflection also report INCLUDE columns separately
+        for both mssql and postgresql (11+).
+
+    .. change::
+        :tags: change, platform
+        :tickets: 5400
+
+        The ``importlib_metadata`` library is used to scan for setuptools
+        entrypoints rather than pkg_resources.   as importlib_metadata is a small
+        library that is included as of Python 3.8, the compatibility library is
+        installed as a dependency for Python versions older than 3.8.
+
+
+    .. change::
+        :tags: feature, sql, mssql, oracle
+        :tickets: 4808
+
+        Added new "post compile parameters" feature.  This feature allows a
+        :func:`.bindparam` construct to have its value rendered into the SQL string
+        before being passed to the DBAPI driver, but after the compilation step,
+        using the "literal render" feature of the compiler.  The immediate
+        rationale for this feature is to support LIMIT/OFFSET schemes that don't
+        work or perform well as bound parameters handled by the database driver,
+        while still allowing for SQLAlchemy SQL constructs to be cacheable in their
+        compiled form.     The immediate targets for the new feature are the "TOP
+        N" clause used by SQL Server (and Sybase) which does not support a bound
+        parameter, as well as the "ROWNUM" and optional "FIRST_ROWS()" schemes used
+        by the Oracle dialect, the former of which has been known to perform better
+        without bound parameters and the latter of which does not support a bound
+        parameter.   The feature builds upon the mechanisms first developed to
+        support "expanding" parameters for IN expressions.   As part of this
+        feature, the Oracle ``use_binds_for_limits`` feature is turned on
+        unconditionally and this flag is now deprecated.
+
+        .. seealso::
+
+            :ref:`change_4808`
+
+    .. change::
+        :tags: feature, sql
+        :tickets: 1390
+
+        Add support for regular expression on supported backends.
+        Two operations have been defined:
+
+        * :meth:`_sql.ColumnOperators.regexp_match` implementing a regular
+          expression match like function.
+        * :meth:`_sql.ColumnOperators.regexp_replace` implementing a regular
+          expression string replace function.
+
+        Supported backends include SQLite, PostgreSQL, MySQL / MariaDB, and Oracle.
+
+        .. seealso::
+
+            :ref:`change_1390`
+
+    .. change::
+        :tags: bug, orm
+        :tickets: 4696
+
+        The internal attribute symbols NO_VALUE and NEVER_SET have been unified, as
+        there was no meaningful difference between these two symbols, other than a
+        few codepaths where they were differentiated in subtle and undocumented
+        ways, these have been fixed.
+
+
+    .. change::
+        :tags: oracle, bug
+
+        Correctly render :class:`_schema.Sequence` and :class:`_schema.Identity`
+        column options ``nominvalue`` and ``nomaxvalue`` as ``NOMAXVALUE` and
+        ``NOMINVALUE`` on oracle database.
+
+    .. change::
+        :tags: bug, schema
+        :tickets: 4262
+
+        Cleaned up the internal ``str()`` for datatypes so that all types produce a
+        string representation without any dialect present, including that it works
+        for third-party dialect types without that dialect being present.  The
+        string representation defaults to being the UPPERCASE name of that type
+        with nothing else.
+
+
+    .. change::
+        :tags: deprecated, sql
+        :tickets: 5010
+
+        The :meth:`_sql.Join.alias` method is deprecated and will be removed in
+        SQLAlchemy 2.0.   An explicit select + subquery, or aliasing of the inner
+        tables, should be used instead.
+
+
+    .. change::
+        :tags: bug, orm
+        :tickets: 4194
+
+        Fixed bug where a versioning column specified on a mapper against a
+        :func:`_expression.select` construct where the version_id_col itself were against the
+        underlying table would incur additional loads when accessed, even if the
+        value were locally persisted by the flush.  The actual fix is a result of
+        the changes in :ticket:`4617`,  by fact that a :func:`_expression.select` object no
+        longer has a ``.c`` attribute and therefore does not confuse the mapper
+        into thinking there's an unknown column value present.
+
+    .. change::
+        :tags: bug, orm
+        :tickets: 3858
+
+        An ``UnmappedInstanceError`` is now raised for :class:`.InstrumentedAttribute`
+        if an instance is an unmapped object. Prior to this an ``AttributeError``
+        was raised. Pull request courtesy Ramon Williams.
+
+    .. change::
+        :tags: removed, platform
+        :tickets: 5634
+
+        Dropped support for python 3.4 and 3.5 that has reached EOL. SQLAlchemy 1.4
+        series requires python 2.7 or 3.6+.
+
+        .. seealso::
+
+            :ref:`change_5634`
+
+    .. change::
+        :tags: performance, sql
+        :tickets: 4639
+
+        An all-encompassing reorganization and refactoring of Core and ORM
+        internals now allows all Core and ORM statements within the areas of
+        DQL (e.g. SELECTs) and DML (e.g. INSERT, UPDATE, DELETE) to allow their
+        SQL compilation as well as the construction of result-fetching metadata
+        to be fully cached in most cases.   This effectively provides a transparent
+        and generalized version of what the "Baked Query" extension has offered
+        for the ORM in past versions.  The new feature can calculate the
+        cache key for any given SQL construction based on the string that
+        it would ultimately produce for a given dialect, allowing functions that
+        compose the equivalent select(), Query(), insert(), update() or delete()
+        object each time to have that statement cached after it's generated
+        the first time.
+
+        The feature is enabled transparently but includes some new programming
+        paradigms that may be employed to make the caching even more efficient.
+
+        .. seealso::
+
+            :ref:`change_4639`
+
+            :ref:`sql_caching`
+
+    .. change::
+        :tags: orm, removed
+        :tickets: 4638
+
+        All long-deprecated "extension" classes have been removed, including
+        MapperExtension, SessionExtension, PoolListener, ConnectionProxy,
+        AttributeExtension.  These classes have been deprecated since version 0.7
+        long superseded by the event listener system.
+
+
+    .. change::
+        :tags: feature, mssql, sql
+        :tickets: 4384
+
+        Added support for the :class:`_types.JSON` datatype on the SQL Server
+        dialect using the :class:`_mssql.JSON` implementation, which implements SQL
+        Server's JSON functionality against the ``NVARCHAR(max)`` datatype as per
+        SQL Server documentation. Implementation courtesy Gord Thompson.
+
+    .. change::
+        :tags: change, sql
+        :tickets: 4868
+
+        Added a core :class:`Values` object that enables a VALUES construct
+        to be used in the FROM clause of an SQL statement for databases that
+        support it (mainly PostgreSQL and SQL Server).
+
+    .. change::
+        :tags: usecase, mysql
+        :tickets: 5496
+
+        Added a new dialect token "mariadb" that may be used in place of "mysql" in
+        the :func:`_sa.create_engine` URL.  This will deliver a MariaDB dialect
+        subclass of the MySQLDialect in use that forces the "is_mariadb" flag to
+        True.  The dialect will raise an error if a server version string that does
+        not indicate MariaDB in use is received.   This is useful for
+        MariaDB-specific testing scenarios as well as to support applications that
+        are hardcoding to MariaDB-only concepts.  As MariaDB and MySQL featuresets
+        and usage patterns continue to diverge, this pattern may become more
+        prominent.
+
+
+    .. change::
+        :tags: bug, postgresql
+
+        The pg8000 dialect has been revised and modernized for the most recent
+        version of the pg8000 driver for PostgreSQL.  Changes to the dialect
+        include:
+
+        * All data types are now sent as text rather than binary.
+
+        * Using adapters, custom types can be plugged in to pg8000.
+
+        * Previously, named prepared statements were used for all statements.
+          Now unnamed prepared statements are used by default, and named
+          prepared statements can be used explicitly by calling the
+          Connection.prepare() method, which returns a PreparedStatement
+          object.
+
+        Pull request courtesy Tony Locke.
+
+    .. change::
+        :tags: bug, orm
+        :tickets: 5074
+
+        The :class:`.Session` object no longer initiates a
+        :class:`.SessionTransaction` object immediately upon construction or after
+        the previous transaction is closed; instead, "autobegin" logic now
+        initiates the new :class:`.SessionTransaction` on demand when it is next
+        needed.  Rationale includes to remove reference cycles from a
+        :class:`.Session` that has been closed out, as well as to remove the
+        overhead incurred by the creation of :class:`.SessionTransaction` objects
+        that are often discarded immediately. This change affects the behavior of
+        the :meth:`.SessionEvents.after_transaction_create` hook in that the event
+        will be emitted when the :class:`.Session` first requires a
+        :class:`.SessionTransaction` be present, rather than whenever the
+        :class:`.Session` were created or the previous :class:`.SessionTransaction`
+        were closed.   Interactions with the :class:`_engine.Engine` and the database
+        itself remain unaffected.
+
+        .. seealso::
+
+            :ref:`change_5074`
+
+
+    .. change::
+        :tags: oracle, change
+
+        The LIMIT / OFFSET scheme used in Oracle now makes use of named subqueries
+        rather than unnamed subqueries when it transparently rewrites a SELECT
+        statement to one that uses a subquery that includes ROWNUM.  The change is
+        part of a larger change where unnamed subqueries are no longer directly
+        supported by Core, as well as to modernize the internal use of the select()
+        construct within the Oracle dialect.
+
+
+    .. change::
+        :tags: feature, engine, orm
+        :tickets: 3414
+
+        SQLAlchemy now includes support for Python asyncio within both Core and
+        ORM, using the included :ref:`asyncio extension <asyncio_toplevel>`. The
+        extension makes use of the `greenlet
+        <https://greenlet.readthedocs.io/en/latest/>`_ library in order to adapt
+        SQLAlchemy's sync-oriented internals such that an asyncio interface that
+        ultimately interacts with an asyncio database adapter is now feasible.  The
+        single driver supported at the moment is the
+        :ref:`dialect-postgresql-asyncpg` driver for PostgreSQL.
+
+        .. seealso::
+
+            :ref:`change_3414`
+
+
+    .. change::
+        :tags: removed, sql
+
+        Removed the ``sqlalchemy.sql.visitors.iterate_depthfirst`` and
+        ``sqlalchemy.sql.visitors.traverse_depthfirst`` functions.  These functions
+        were unused by any part of SQLAlchemy.  The
+        :func:`_sa.sql.visitors.iterate` and :func:`_sa.sql.visitors.traverse`
+        functions are commonly used for these functions.  Also removed unused
+        options from the remaining functions including "column_collections",
+        "schema_visitor".
+
+
+    .. change::
+        :tags: orm, performance
+
+        The bulk update and delete methods :meth:`.Query.update` and
+        :meth:`.Query.delete`, as well as their 2.0-style counterparts, now make
+        use of RETURNING when the "fetch" strategy is used in order to fetch the
+        list of affected primary key identites, rather than emitting a separate
+        SELECT, when the backend in use supports RETURNING.  Additionally, the
+        "fetch" strategy will in ordinary cases not expire the attributes that have
+        been updated, and will instead apply the updated values directly in the
+        same way that the "evaluate" strategy does, to avoid having to refresh the
+        object.   The "evaluate" strategy will also fall back to expiring
+        attributes that were updated to a SQL expression that was unevaluable in
+        Python.
+
+        .. seealso::
+
+            :ref:`change_orm_update_returning_14`
+
+    .. change::
+        :tags: bug, orm
+        :tickets: 4829
+
+        Added new entity-targeting capabilities to the ORM query context
+        help with the case where the :class:`.Session` is using a bind dictionary
+        against mapped classes, rather than a single bind, and the :class:`_query.Query`
+        is against a Core statement that was ultimately generated from a method
+        such as :meth:`_query.Query.subquery`.  First implemented using a deep
+        search, the current approach leverages the unified :func:`_sql.select`
+        construct to keep track of the first mapper that is part of
+        the construct.
+
+
+    .. change::
+        :tags: mssql
+
+        The mssql dialect will assume that at least MSSQL 2005 is used.
+        There is no hard exception raised if a previous version is detected,
+        but operations may fail for older versions.
+
+    .. change::
+        :tags: bug, inheritance, orm
+        :tickets: 4212
+
+        An :class:`.ArgumentError` is now raised if both the ``selectable`` and
+        ``flat`` parameters are set to True in :func:`.orm.with_polymorphic`. The
+        selectable name is already aliased and applying flat=True overrides the
+        selectable name with an anonymous name that would've previously caused the
+        code to break. Pull request courtesy Ramon Williams.
+
+    .. change::
+        :tags: mysql, usecase
+        :tickets: 4976
+
+        Added support for use of the :class:`.Sequence` construct with MariaDB 10.3
+        and greater, as this is now supported by this database.  The construct
+        integrates with the :class:`_schema.Table` object in the same way that it does for
+        other databases like PostgreSQL and Oracle; if is present on the integer
+        primary key "autoincrement" column, it is used to generate defaults.   For
+        backwards compatibility, to support a :class:`_schema.Table` that has a
+        :class:`.Sequence` on it to support sequence only databases like Oracle,
+        while still not having the sequence fire off for MariaDB, the optional=True
+        flag should be set, which indicates the sequence should only be used to
+        generate the primary key if the target database offers no other option.
+
+        .. seealso::
+
+            :ref:`change_4976`
+
+
+    .. change::
+        :tags: deprecated, engine
+        :tickets: 4634
+
+        The :paramref:`_schema.MetaData.bind` argument as well as the overall
+        concept of "bound metadata" is deprecated in SQLAlchemy 1.4 and will be
+        removed in SQLAlchemy 2.0.  The parameter as well as related functions now
+        emit a :class:`_exc.RemovedIn20Warning` when :ref:`deprecation_20_mode` is
+        in use.
+
+        .. seealso::
+
+            :ref:`migration_20_implicit_execution`
+
+
+
+    .. change::
+        :tags: change, extensions
+        :tickets: 5142
+
+        Added new parameter :paramref:`_automap.AutomapBase.prepare.autoload_with`
+        which supersedes :paramref:`_automap.AutomapBase.prepare.reflect`
+        and :paramref:`_automap.AutomapBase.prepare.engine`.
+
+
+
+    .. change::
+        :tags: usecase, mssql, postgresql
+        :tickets: 4966
+
+        Added support for inspection / reflection of partial indexes / filtered
+        indexes, i.e. those which use the ``mssql_where`` or ``postgresql_where``
+        parameters, with :class:`_schema.Index`.   The entry is both part of the
+        dictionary returned by :meth:`.Inspector.get_indexes` as well as part of a
+        reflected :class:`_schema.Index` construct that was reflected.  Pull
+        request courtesy Ramon Williams.
+
+    .. change::
+        :tags: mssql, feature
+        :tickets: 4235, 4633
+
+        Added support for "CREATE SEQUENCE" and full :class:`.Sequence` support for
+        Microsoft SQL Server.  This removes the deprecated feature of using
+        :class:`.Sequence` objects to manipulate IDENTITY characteristics which
+        should now be performed using ``mssql_identity_start`` and
+        ``mssql_identity_increment`` as documented at :ref:`mssql_identity`. The
+        change includes a new parameter :paramref:`.Sequence.data_type` to
+        accommodate SQL Server's choice of datatype, which for that backend
+        includes INTEGER, BIGINT, and DECIMAL(n, 0).   The default starting value
+        for SQL Server's version of :class:`.Sequence` has been set at 1; this
+        default is now emitted within the CREATE SEQUENCE DDL for all backends.
+
+        .. seealso::
+
+            :ref:`change_4235`
+
+    .. change::
+        :tags: bug, orm
+        :tickets: 4718
+
+        Fixed issue in polymorphic loading internals which would fall back to a
+        more expensive, soon-to-be-deprecated form of result column lookup within
+        certain unexpiration scenarios in conjunction with the use of
+        "with_polymorphic".
+
+    .. change::
+        :tags: mssql, reflection
+        :tickets: 5527
+
+        As part of the support for reflecting :class:`_schema.Identity` objects,
+        the method :meth:`_reflection.Inspector.get_columns` no longer returns
+        ``mssql_identity_start`` and ``mssql_identity_increment`` as part of the
+        ``dialect_options``. Use the information in the ``identity`` key instead.
+
+    .. change::
+        :tags: schema, sql
+        :tickets: 5362, 5324, 5360
+
+        Added the :class:`_schema.Identity` construct that can be used to
+        configure identity columns rendered with GENERATED { ALWAYS |
+        BY DEFAULT } AS IDENTITY. Currently the supported backends are
+        PostgreSQL >= 10, Oracle >= 12 and MSSQL (with different syntax
+        and a subset of functionalities).
+
+    .. change::
+        :tags: change, orm, sql
+
+        A selection of Core and ORM query objects now perform much more of their
+        Python computational tasks within the compile step, rather than at
+        construction time.  This is to support an upcoming caching model that will
+        provide for caching of the compiled statement structure based on a cache
+        key that is derived from the statement construct, which itself is expected
+        to be newly constructed in Python code each time it is used.    This means
+        that the internal state of these objects may not be the same as it used to
+        be, as well as that some but not all error raise scenarios for various
+        kinds of argument validation will occur within the compilation / execution
+        phase, rather than at statement construction time.   See the migration
+        notes linked below for complete details.
+
+        .. seealso::
+
+            :ref:`change_deferred_construction`
+
+
+    .. change::
+        :tags: usecase, mssql, reflection
+        :tickets: 5506
+
+        Added support for reflection of temporary tables with the SQL Server dialect.
+        Table names that are prefixed by a pound sign "#" are now introspected from
+        the MSSQL "tempdb" system catalog.
+
+    .. change::
+        :tags: firebird, deprecated
+        :tickets: 5189
+
+        The Firebird dialect is deprecated, as there is now a 3rd party
+        dialect that supports this database.
+
+    .. change::
+        :tags: misc, deprecated
+        :tickets: 5189
+
+        The Sybase dialect is deprecated.
+
+
+    .. change::
+        :tags: mssql, deprecated
+        :tickets: 5189
+
+        The adodbapi and mxODBC dialects are deprecated.
+
+
+    .. change::
+        :tags: mysql, deprecated
+        :tickets: 5189
+
+        The OurSQL dialect is deprecated.
+
+    .. change::
+        :tags: postgresql, deprecated
+        :tickets: 5189
+
+        The pygresql and py-postgresql dialects are deprecated.
+
+    .. change::
+       :tags: bug, sql
+       :tickets: 4649, 4569
+
+       Registered function names based on :class:`.GenericFunction` are now
+       retrieved in a case-insensitive fashion in all cases, removing the
+       deprecation logic from 1.3 which temporarily allowed multiple
+       :class:`.GenericFunction` objects to exist with differing cases.   A
+       :class:`.GenericFunction` that replaces another on the same name whether or
+       not it's case sensitive emits a warning before replacing the object.
+
+    .. change::
+        :tags: orm, performance, postgresql
+        :tickets: 5263
+
+        Implemented support for the psycopg2 ``execute_values()`` extension
+        within the ORM flush process via the enhancements to Core made
+        in :ticket:`5401`, so that this extension is used
+        both as a strategy to batch INSERT statements together as well as
+        that RETURNING may now be used among multiple parameter sets to
+        retrieve primary key values back in batch.   This allows nearly
+        all INSERT statements emitted by the ORM on behalf of PostgreSQL
+        to be submitted in batch and also via the ``execute_values()``
+        extension which benches at five times faster than plain
+        executemany() for this particular backend.
+
+        .. seealso::
+
+            :ref:`change_5263`
+
+    .. change::
+        :tags: change, general
+        :tickets: 4789
+
+        "python setup.py test" is no longer a test runner, as this is deprecated by
+        Pypa.   Please use "tox" with no arguments for a basic test run.
+
+
+    .. change::
+        :tags: usecase, oracle
+        :tickets: 4857
+
+        The max_identifier_length for the Oracle dialect is now 128 characters by
+        default, unless compatibility version less than 12.2 upon first connect, in
+        which case the legacy length of 30 characters is used.  This is a
+        continuation of the issue as committed to the 1.3 series which adds max
+        identifier length detection upon first connect as well as warns for the
+        change in Oracle server.
+
+        .. seealso::
+
+            :ref:`oracle_max_identifier_lengths` - in the Oracle dialect documentation
+
+
+    .. change::
+        :tags: bug, oracle
+        :tickets: 4971
+
+        The :class:`_oracle.INTERVAL` class of the Oracle dialect is now correctly
+        a subclass of the abstract version of :class:`.Interval` as well as the
+        correct "emulated" base class, which allows for correct behavior under both
+        native and non-native modes; previously it was only based on
+        :class:`.TypeEngine`.
+
+
+    .. change::
+        :tags: bug, orm
+        :tickets: 4994
+
+        An error is raised if any persistence-related "cascade" settings are made
+        on a :func:`_orm.relationship` that also sets up viewonly=True.   The "cascade"
+        settings now default to non-persistence related settings only when viewonly
+        is also set.  This is the continuation from :ticket:`4993` where this
+        setting was changed to emit a warning in 1.3.
+
+        .. seealso::
+
+            :ref:`change_4994`
+
+
+
+    .. change::
+        :tags: bug, sql
+        :tickets: 5054
+
+        Creating an :func:`.and_` or :func:`.or_` construct with no arguments or
+        empty ``*args`` will now emit a deprecation warning, as the SQL produced is
+        a no-op (i.e. it renders as a blank string). This behavior is considered to
+        be non-intuitive, so for empty or possibly empty :func:`.and_` or
+        :func:`.or_` constructs, an appropriate default boolean should be included,
+        such as ``and_(True, *args)`` or ``or_(False, *args)``.   As has been the
+        case for many major versions of SQLAlchemy, these particular boolean
+        values will not render if the ``*args`` portion is non-empty.
+
+    .. change::
+        :tags: removed, sql
+
+        Removed the concept of a bound engine from the :class:`.Compiler` object,
+        and removed the ``.execute()`` and ``.scalar()`` methods from
+        :class:`.Compiler`. These were essentially forgotten methods from over a
+        decade ago and had no practical use, and it's not appropriate for the
+        :class:`.Compiler` object itself to be maintaining a reference to an
+        :class:`_engine.Engine`.
+
+    .. change::
+       :tags: performance, engine
+       :tickets: 4524
+
+       The pool "pre-ping" feature has been refined to not invoke for a DBAPI
+       connection that was just opened in the same checkout operation.  pre ping
+       only applies to a DBAPI connection that's been checked into the pool
+       and is being checked out again.
+
+    .. change::
+        :tags: deprecated, engine
+
+        The ``server_side_cursors`` engine-wide parameter is deprecated and will be
+        removed in a future release.  For unbuffered cursors, the
+        :paramref:`_engine.Connection.execution_options.stream_results` execution
+        option should be used on a per-execution basis.
+
+    .. change::
+        :tags: bug, orm
+        :tickets: 4699
+
+        Improved declarative inheritance scanning to not get tripped up when the
+        same base class appears multiple times in the base inheritance list.
+
+
+    .. change::
+        :tags: orm, change
+        :tickets: 4395
+
+        The automatic uniquing of rows on the client side is turned off for the new
+        :term:`2.0 style` of ORM querying.  This improves both clarity and
+        performance.  However, uniquing of rows on the client side is generally
+        necessary when using joined eager loading for collections, as there
+        will be duplicates of the primary entity for each element in the
+        collection because a join was used.  This uniquing must now be manually
+        enabled and can be achieved using the new
+        :meth:`_engine.Result.unique` modifier.   To avoid silent failure, the ORM
+        explicitly requires the method be called when the result of an ORM
+        query in 2.0 style makes use of joined load collections.    The newer
+        :func:`_orm.selectinload` strategy is likely preferable for eager loading
+        of collections in any case.
+
+        .. seealso::
+
+            :ref:`joinedload_not_uniqued`
+
+    .. change::
+        :tags: bug, orm
+        :tickets: 4195
+
+        Fixed bug in ORM versioning feature where assignment of an explicit
+        version_id for a counter configured against a mapped selectable where
+        version_id_col is against the underlying table would fail if the previous
+        value were expired; this was due to the fact that the  mapped attribute
+        would not be configured with active_history=True.
+
+
+    .. change::
+        :tags: mssql, bug, schema
+        :tickets: 5597
+
+        Fixed an issue where :meth:`_reflection.has_table` always returned
+        ``False`` for temporary tables.
+
+    .. change::
+        :tags: mssql, engine
+        :tickets: 4809
+
+        Deprecated the ``legacy_schema_aliasing`` parameter to
+        :meth:`_sa.create_engine`.   This is a long-outdated parameter that has
+        defaulted to False since version 1.1.
+
+    .. change::
+        :tags: usecase, orm
+        :tickets: 1653
+
+        The evaluator that takes place within the ORM bulk update and delete for
+        synchronize_session="evaluate" now supports the IN and NOT IN operators.
+        Tuple IN is also supported.
+
+
+    .. change::
+        :tags: change, sql
+        :tickets: 5284
+
+        The :func:`_expression.select` construct is moving towards a new calling
+        form that is ``select(col1, col2, col3, ..)``, with all other keyword
+        arguments removed, as these are all suited using generative methods.    The
+        single list of column or table arguments passed to ``select()`` is still
+        accepted, however is no longer necessary if expressions are passed in a
+        simple positional style.   Other keyword arguments are disallowed when this
+        form is used.
+
+
+        .. seealso::
+
+            :ref:`change_5284`
+
+    .. change::
+        :tags: change, sqlite
+        :tickets: 4895
+
+        Dropped support for right-nested join rewriting to support old SQLite
+        versions prior to 3.7.16, released in 2013.   It is expected that
+        all modern Python versions among those now supported should all include
+        much newer versions of SQLite.
+
+        .. seealso::
+
+            :ref:`change_4895`
+
+
+    .. change::
+        :tags: deprecated, engine
+        :tickets: 5131
+
+        The :meth:`_engine.Connection.connect` method is deprecated as is the concept of
+        "connection branching", which copies a :class:`_engine.Connection` into a new one
+        that has a no-op ".close()" method.  This pattern is oriented around the
+        "connectionless execution" concept which is also being removed in 2.0.
+
+    .. change::
+       :tags: bug, general
+       :tickets: 4656, 4689
+
+       Refactored the internal conventions used to cross-import modules that have
+       mutual dependencies between them, such that the inspected arguments of
+       functions and methods are no longer modified.  This allows tools like
+       pylint, Pycharm, other code linters, as well as hypothetical pep-484
+       implementations added in the future to function correctly as they no longer
+       see missing arguments to function calls.   The new approach is also
+       simpler and more performant.
+
+       .. seealso::
+
+            :ref:`change_4656`
+
+    .. change::
+        :tags: sql, usecase
+        :tickets: 5191
+
+        Change the method ``__str`` of :class:`ColumnCollection` to avoid
+        confusing it with a python list of string.
+
+    .. change::
+        :tags: sql, reflection
+        :tickets: 4741
+
+        The "NO ACTION" keyword for foreign key "ON UPDATE" is now considered to be
+        the default cascade for a foreign key on all supporting backends (SQlite,
+        MySQL, PostgreSQL) and when detected is not included in the reflection
+        dictionary; this is already the behavior for PostgreSQL and MySQL for all
+        previous SQLAlchemy versions in any case.   The "RESTRICT" keyword is
+        positively stored when detected; PostgreSQL does report on this keyword,
+        and MySQL as of version 8.0 does as well.  On earlier MySQL versions, it is
+        not reported by the database.
+
+    .. change::
+        :tags: sql, reflection
+        :tickets: 5527, 5324
+
+        Added support for reflecting "identity" columns, which are now returned
+        as part of the structure returned by :meth:`_reflection.Inspector.get_columns`.
+        When reflecting full :class:`_schema.Table` objects, identity columns will
+        be represented using the :class:`_schema.Identity` construct.
+        Currently the supported backends are
+        PostgreSQL >= 10, Oracle >= 12 and MSSQL (with different syntax
+        and a subset of functionalities).
+
+    .. change::
+        :tags: feature, sql
+        :tickets: 4753
+
+        The :func:`_expression.select` construct and related constructs now allow for
+        duplication of column labels and columns themselves in the columns clause,
+        mirroring exactly how column expressions were passed in.   This allows
+        the tuples returned by an executed result to match what was SELECTed
+        for in the first place, which is how the ORM :class:`_query.Query` works, so
+        this establishes better cross-compatibility between the two constructs.
+        Additionally, it allows column-positioning-sensitive structures such as
+        UNIONs (i.e. :class:`_selectable.CompoundSelect`) to be more intuitively constructed
+        in those cases where a particular column might appear in more than one
+        place.   To support this change, the :class:`_expression.ColumnCollection` has been
+        revised to support duplicate columns as well as to allow integer index
+        access.
+
+        .. seealso::
+
+            :ref:`change_4753`
+
+
+    .. change::
+        :tags: renamed, sql
+        :tickets: 4617
+
+        The :meth:`_expression.SelectBase.as_scalar` and :meth:`_query.Query.as_scalar` methods have
+        been renamed to :meth:`_expression.SelectBase.scalar_subquery` and
+        :meth:`_query.Query.scalar_subquery`, respectively.  The old names continue to
+        exist within 1.4 series with a deprecation warning.  In addition, the
+        implicit coercion of :class:`_expression.SelectBase`, :class:`_expression.Alias`, and other
+        SELECT oriented objects into scalar subqueries when evaluated in a column
+        context is also deprecated, and emits a warning that the
+        :meth:`_expression.SelectBase.scalar_subquery` method should be called explicitly.
+        This warning will in a later major release become an error, however the
+        message will always be clear when :meth:`_expression.SelectBase.scalar_subquery` needs
+        to be invoked.   The latter part of the change is for clarity and to reduce
+        the implicit decisionmaking by the query coercion system.   The
+        :meth:`.Subquery.as_scalar` method, which was previously
+        ``Alias.as_scalar``, is also deprecated; ``.scalar_subquery()`` should be
+        invoked directly from ` :func:`_expression.select` object or :class:`_query.Query` object.
+
+        This change is part of the larger change to convert :func:`_expression.select` objects
+        to no longer be directly part of the "from clause" class hierarchy, which
+        also includes an overhaul of the clause coercion system.
+
+
+    .. change::
+        :tags: bug, mssql
+        :tickets: 4980
+
+        Fixed the base class of the :class:`_mssql.DATETIMEOFFSET` datatype to
+        be based on the :class:`.DateTime` class hierarchy, as this is a
+        datetime-holding datatype.
+
+
+    .. change::
+        :tags: bug, engine
+        :tickets: 4712
+
+        The :class:`_engine.Connection` object will now not clear a rolled-back
+        transaction  until the outermost transaction is explicitly rolled back.
+        This is essentially the same behavior that the ORM :class:`.Session` has
+        had for a long time, where an explicit call to ``.rollback()`` on all
+        enclosing transactions is required for the transaction to logically clear,
+        even though the DBAPI-level transaction has already been rolled back.
+        The new behavior helps with situations such as the "ORM rollback test suite"
+        pattern where the test suite rolls the transaction back within the ORM
+        scope, but the test harness which seeks to control the scope of the
+        transaction externally does not expect a new transaction to start
+        implicitly.
+
+        .. seealso::
+
+            :ref:`change_4712`
+
+
+    .. change::
+        :tags: deprecated, orm
+        :tickets: 4719
+
+        Calling the :meth:`_query.Query.instances` method without passing a
+        :class:`.QueryContext` is deprecated.   The original use case for this was
+        that a :class:`_query.Query` could yield ORM objects when given only the entities
+        to be selected as well as a DBAPI cursor object.  However, for this to work
+        correctly there is essential metadata that is passed from a SQLAlchemy
+        :class:`_engine.ResultProxy` that is derived from the mapped column expressions,
+        which comes originally from the :class:`.QueryContext`.   To retrieve ORM
+        results from arbitrary SELECT statements, the :meth:`_query.Query.from_statement`
+        method should be used.
+
+
+    .. change::
+        :tags: deprecated, sql
+
+        The :class:`_schema.Table` class now raises a deprecation warning
+        when columns with the same name are defined. To replace a column a new
+        parameter :paramref:`_schema.Table.append_column.replace_existing` was
+        added to the :meth:`_schema.Table.append_column` method.
+
+        The :meth:`_expression.ColumnCollection.contains_column` will now
+        raises an error when called with a string, suggesting the caller
+        to use ``in`` instead.
+
+    .. change::
+        :tags: deprecated, engine
+        :tickets: 4878
+
+        The :paramref:`.case_sensitive` flag on :func:`_sa.create_engine` is
+        deprecated; this flag was part of the transition of the result row object
+        to allow case sensitive column matching as the default, while providing
+        backwards compatibility for the former matching method.   All string access
+        for a row should be assumed to be case sensitive just like any other Python
+        mapping.
+
+
+    .. change::
+        :tags: bug, sql
+        :tickets: 5127
+
+        Improved the :func:`_sql.tuple_` construct such that it behaves predictably
+        when used in a columns-clause context.  The SQL tuple is not supported as a
+        "SELECT" columns clause element on most backends; on those that do
+        (PostgreSQL, not surprisingly), the Python DBAPI does not have a "nested
+        type" concept so there are still challenges in fetching rows for such an
+        object. Use of :func:`_sql.tuple_` in a :func:`_sql.select` or
+        :class:`_orm.Query` will now raise a :class:`_exc.CompileError` at the
+        point at which the :func:`_sql.tuple_` object is seen as presenting itself
+        for fetching rows (i.e., if the tuple is in the columns clause of a
+        subquery, no error is raised).  For ORM use,the :class:`_orm.Bundle` object
+        is an explicit directive that a series of columns should be returned as a
+        sub-tuple per row and is suggested by the error message. Additionally ,the
+        tuple will now render with parenthesis in all contexts. Previously, the
+        parenthesization would not render in a columns context leading to
+        non-defined behavior.
+
+    .. change::
+        :tags: usecase, sql
+        :tickets: 5576
+
+        Add support to ``FETCH {FIRST | NEXT} [ count ]
+        {ROW | ROWS} {ONLY | WITH TIES}`` in the select for the supported
+        backends, currently PostgreSQL, Oracle and MSSQL.
+
+    .. change::
+        :tags: feature, engine, alchemy2
+        :tickets: 4644
+
+        Implemented the :paramref:`_sa.create_engine.future` parameter which
+        enables forwards compatibility with SQLAlchemy 2. is used for forwards
+        compatibility with SQLAlchemy 2.   This engine features
+        always-transactional behavior with autobegin.
+
+        .. seealso::
+
+            :ref:`migration_20_toplevel`
+
+    .. change::
+        :tags: usecase, sql
+        :tickets: 4449
+
+        Additional logic has been added such that certain SQL expressions which
+        typically wrap a single database column will use the name of that column as
+        their "anonymous label" name within a SELECT statement, potentially making
+        key-based lookups in result tuples more intuitive.   The primary example of
+        this is that of a CAST expression, e.g. ``CAST(table.colname AS INTEGER)``,
+        which will export its default name as "colname", rather than the usual
+        "anon_1" label, that is, ``CAST(table.colname AS INTEGER) AS colname``.
+        If the inner expression doesn't have a name, then the previous "anonymous
+        label" logic is used.  When using SELECT statements that make use of
+        :meth:`_expression.Select.apply_labels`, such as those emitted by the ORM, the
+        labeling logic will produce ``<tablename>_<inner column name>`` in the same
+        was as if the column were named alone.   The logic applies right now to the
+        :func:`.cast` and :func:`.type_coerce` constructs as well as some
+        single-element boolean expressions.
+
+        .. seealso::
+
+            :ref:`change_4449`
+
+    .. change::
+        :tags: feature, orm
+        :tickets: 5508
+
+        The ORM Declarative system is now unified into the ORM itself, with new
+        import spaces under ``sqlalchemy.orm`` and new kinds of mappings.  Support
+        for decorator-based mappings without using a base class, support for
+        classical style-mapper() calls that have access to the declarative class
+        registry for relationships, and full integration of Declarative with 3rd
+        party class attribute systems like ``dataclasses`` and ``attrs`` is now
+        supported.
+
+        .. seealso::
+
+            :ref:`change_5508`
+
+            :ref:`change_5027`
+
+    .. change::
+        :tags: removed, platform
+        :tickets: 5094
+
+        Removed all dialect code related to support for Jython and zxJDBC. Jython
+        has not been supported by SQLAlchemy for many years and it is not expected
+        that the current zxJDBC code is at all functional; for the moment it just
+        takes up space and adds confusion by showing up in documentation. At the
+        moment, it appears that Jython has achieved Python 2.7 support in its
+        releases but not Python 3.   If Jython were to be supported again, the form
+        it should take is against the Python 3 version of Jython, and the various
+        zxJDBC stubs for various backends should be implemented as a third party
+        dialect.
+
+
+    .. change::
+        :tags: feature, sql
+        :tickets: 5221
+
+        Enhanced the disambiguating labels feature of the
+        :func:`_expression.select` construct such that when a select statement
+        is used in a subquery, repeated column names from different tables are now
+        automatically labeled with a unique label name, without the need to use the
+        full "apply_labels()" feature that combines tablename plus column name.
+        The disambiguated labels are available as plain string keys in the .c
+        collection of the subquery, and most importantly the feature allows an ORM
+        :func:`_orm.aliased` construct against the combination of an entity and an
+        arbitrary subquery to work correctly, targeting the correct columns despite
+        same-named columns in the source tables, without the need for an "apply
+        labels" warning.
+
+
+        .. seealso::
+
+            :ref:`migration_20_query_from_self` - Illustrates the new
+            disambiguation feature as part of a strategy to migrate away from the
+            :meth:`_query.Query.from_self` method.
+
+    .. change::
+        :tags: usecase, postgresql
+        :tickets: 5549
+
+        Added support for PostgreSQL "readonly" and "deferrable" flags for all of
+        psycopg2, asyncpg and pg8000 dialects.   This takes advantage of a newly
+        generalized version of the "isolation level" API to support other kinds of
+        session attributes set via execution options that are reliably reset
+        when connections are returned to the connection pool.
+
+        .. seealso::
+
+            :ref:`postgresql_readonly_deferrable`
+
+    .. change::
+        :tags: mysql, feature
+        :tickets: 5459
+
+        Added support for MariaDB Connector/Python to the mysql dialect. Original
+        pull request courtesy Georg Richter.
+
+    .. change::
+        :tags: usecase, orm
+        :tickets: 5171
+
+        Enhanced logic that tracks if relationships will be conflicting with each
+        other when they write to the same column to include simple cases of two
+        relationships that should have a "backref" between them.   This means that
+        if two relationships are not viewonly, are not linked with back_populates
+        and are not otherwise in an inheriting sibling/overriding arrangement, and
+        will populate the same foreign key column, a warning is emitted at mapper
+        configuration time warning that a conflict may arise.  A new parameter
+        :paramref:`_orm.relationship.overlaps` is added to suit those very rare cases
+        where such an overlapping persistence arrangement may be unavoidable.
+
+
+    .. change::
+        :tags: deprecated, orm
+        :tickets: 4705, 5202
+
+        Using strings to represent relationship names in ORM operations such as
+        :meth:`_orm.Query.join`, as well as strings for all ORM attribute names
+        in loader options like :func:`_orm.selectinload`
+        is deprecated and will be removed in SQLAlchemy 2.0.  The class-bound
+        attribute should be passed instead.  This provides much better specificity
+        to the given method, allows for modifiers such as ``of_type()``, and
+        reduces internal complexity.
+
+        Additionally, the ``aliased`` and ``from_joinpoint`` parameters to
+        :meth:`_orm.Query.join` are also deprecated.   The :func:`_orm.aliased`
+        construct now provides for a great deal of flexibility and capability
+        and should be used directly.
+
+        .. seealso::
+
+            :ref:`migration_20_orm_query_join_strings`
+
+            :ref:`migration_20_query_join_options`
+
+    .. change::
+        :tags: change, platform
+        :tickets: 5404
+
+        Installation has been modernized to use setup.cfg for most package
+        metadata.
+
+    .. change::
+        :tags: bug, sql, postgresql
+        :tickets: 5653
+
+        Improved support for column names that contain percent signs in the string,
+        including repaired issues involving anoymous labels that also embedded a
+        column name with a percent sign in it, as well as re-established support
+        for bound parameter names with percent signs embedded on the psycopg2
+        dialect, using a late-escaping process similar to that used by the
+        cx_Oracle dialect.
+
+
+    .. change::
+        :tags: orm, deprecated
+        :tickets: 5134
+
+        Deprecated logic in :meth:`_query.Query.distinct` that automatically adds
+        columns in the ORDER BY clause to the columns clause; this will be removed
+        in 2.0.
+
+        .. seealso::
+
+            :ref:`migration_20_query_distinct`
+
+    .. change::
+       :tags: orm, removed
+       :tickets: 4642
+
+       Remove the deprecated loader options ``joinedload_all``, ``subqueryload_all``,
+       ``lazyload_all``, ``selectinload_all``. The normal version with method chaining
+       should be used in their place.
+
+    .. change::
+        :tags: bug, sql
+        :tickets: 4887
+
+        Custom functions that are created as subclasses of
+        :class:`.FunctionElement` will now generate an "anonymous label" based on
+        the "name" of the function just like any other :class:`.Function` object,
+        e.g. ``"SELECT myfunc() AS myfunc_1"``. While SELECT statements no longer
+        require labels in order for the result proxy object to function, the ORM
+        still targets columns in rows by using objects as mapping keys, which works
+        more reliably when the column expressions have distinct names.  In any
+        case, the behavior is  now made consistent between functions generated by
+        :attr:`.func` and those generated as custom :class:`.FunctionElement`
+        objects.
+
+
+    .. change::
+        :tags: usecase, extensions
+        :tickets: 4887
+
+        Custom compiler constructs created using the :mod:`sqlalchemy.ext.compiled`
+        extension will automatically add contextual information to the compiler
+        when a custom construct is interpreted as an element in the columns
+        clause of a SELECT statement, such that the custom element will be
+        targetable as a key in result row mappings, which is the kind of targeting
+        that the ORM uses in order to match column elements into result tuples.
+
+    .. change::
+        :tags: engine, bug
+        :tickets: 5497
+
+        Adjusted the dialect initialization process such that the
+        :meth:`_engine.Dialect.on_connect` is not called a second time
+        on the first connection.   The hook is called first, then the
+        :meth:`_engine.Dialect.initialize` is called if that connection is the
+        first for that dialect, then no more events are called.   This eliminates
+        the two calls to the "on_connect" function which can produce very
+        difficult debugging situations.
+
+    .. change::
+        :tags: feature, engine, pyodbc
+        :tickets: 5649
+
+        Reworked the "setinputsizes()" set of dialect hooks to be correctly
+        extensible for any arbirary DBAPI, by allowing dialects individual hooks
+        that may invoke cursor.setinputsizes() in the appropriate style for that
+        DBAPI.   In particular this is intended to support pyodbc's style of usage
+        which is fundamentally different from that of cx_Oracle.  Added support
+        for pyodbc.
+
+
+    .. change::
+        :tags: deprecated, engine
+        :tickets: 4846
+
+        "Implicit autocommit", which is the COMMIT that occurs when a DML or DDL
+        statement is emitted on a connection, is deprecated and won't be part of
+        SQLAlchemy 2.0.   A 2.0-style warning is emitted when autocommit takes
+        effect, so that the calling code may be adjusted to use an explicit
+        transaction.
+
+        As part of this change, DDL methods such as
+        :meth:`_schema.MetaData.create_all` when used against an
+        :class:`_engine.Engine` will run the operation in a BEGIN block if one is
+        not started already.
+
+        .. seealso::
+
+            :ref:`deprecation_20_mode`
+
+
+    .. change::
+        :tags: deprecated, orm
+        :tickets: 5573
+
+        Passing keyword arguments to methods such as :meth:`_orm.Session.execute`
+        to be passed into the :meth:`_orm.Session.get_bind` method is deprecated;
+        the new :paramref:`_orm.Session.execute.bind_arguments` dictionary should
+        be passed instead.
+
+
+    .. change::
+       :tags: renamed, schema
+       :tickets: 5413
+
+       Renamed the :meth:`_schema.Table.tometadata` method to
+       :meth:`_schema.Table.to_metadata`.  The previous name remains with a
+       deprecation warning.
+
+    .. change::
+       :tags: bug, sql
+       :tickets: 4336
+
+       Reworked the :meth:`_expression.ClauseElement.compare` methods in terms of a new
+       visitor-based approach, and additionally added test coverage ensuring that
+       all :class:`_expression.ClauseElement` subclasses can be accurately compared
+       against each other in terms of structure.   Structural comparison
+       capability is used to a small degree within the ORM currently, however
+       it also may form the basis for new caching features.
+
+    .. change::
+        :tags: feature, orm
+        :tickets: 1763
+
+        Eager loaders, such as joined loading, SELECT IN loading, etc., when
+        configured on a mapper or via query options will now be invoked during
+        the refresh on an expired object; in the case of selectinload and
+        subqueryload, since the additional load is for a single object only,
+        the "immediateload" scheme is used in these cases which resembles the
+        single-parent query emitted by lazy loading.
+
+        .. seealso::
+
+            :ref:`change_1763`
+
+    .. change::
+        :tags: usecase, orm
+        :tickets: 5018, 3903
+
+        The ORM bulk update and delete operations, historically available via the
+        :meth:`_orm.Query.update` and :meth:`_orm.Query.delete` methods as well as
+        via the :class:`_dml.Update` and :class:`_dml.Delete` constructs for
+        :term:`2.0 style` execution, will now automatically accommodate for the
+        additional WHERE criteria needed for a single-table inheritance
+        discriminator in order to limit the statement to rows referring to the
+        specific subtype requested.   The new :func:`_orm.with_loader_criteria`
+        construct is also supported for with bulk update/delete operations.
+
+    .. change::
+       :tags: engine, removed
+       :tickets: 4643
+
+       Remove deprecated method ``get_primary_keys`` in the :class:`.Dialect` and
+       :class:`_reflection.Inspector` classes. Please refer to the
+       :meth:`.Dialect.get_pk_constraint` and :meth:`_reflection.Inspector.get_primary_keys`
+       methods.
+
+       Remove deprecated event ``dbapi_error`` and the method
+       ``ConnectionEvents.dbapi_error``. Please refer to the
+       :meth:`_events.ConnectionEvents.handle_error` event.
+       This change also removes the attributes ``ExecutionContext.is_disconnect``
+       and ``ExecutionContext.exception``.
+
+    .. change::
+       :tags: removed, postgresql
+       :tickets: 4643
+
+       Remove support for deprecated engine URLs of the form ``postgres://``;
+       this has emitted a warning for many years and projects should be
+       using ``postgresql://``.
+
+    .. change::
+       :tags: removed, mysql
+       :tickets: 4643
+
+       Remove deprecated dialect ``mysql+gaerdbms`` that has been deprecated
+       since version 1.0. Use the MySQLdb dialect directly.
+
+       Remove deprecated parameter ``quoting`` from :class:`.mysql.ENUM`
+       and :class:`.mysql.SET` in the ``mysql`` dialect. The values passed to the
+       enum or the set are quoted by SQLAlchemy when needed automatically.
+
+    .. change::
+       :tags: removed, orm
+       :tickets: 4643
+
+       Remove deprecated function ``comparable_property``. Please refer to the
+       :mod:`~sqlalchemy.ext.hybrid` extension. This also removes the function
+       ``comparable_using`` in the declarative extension.
+
+       Remove deprecated function ``compile_mappers``.  Please use
+       :func:`.configure_mappers`
+
+       Remove deprecated method ``collection.linker``. Please refer to the
+       :meth:`.AttributeEvents.init_collection` and
+       :meth:`.AttributeEvents.dispose_collection` event handlers.
+
+       Remove deprecated method ``Session.prune`` and parameter
+       ``Session.weak_identity_map``. See the recipe at
+       :ref:`session_referencing_behavior` for an event-based approach to
+       maintaining strong identity references.
+       This change also removes the class ``StrongInstanceDict``.
+
+       Remove deprecated parameter ``mapper.order_by``. Use :meth:`_query.Query.order_by`
+       to determine the ordering of a result set.
+
+       Remove deprecated parameter ``Session._enable_transaction_accounting``.
+
+       Remove deprecated parameter ``Session.is_modified.passive``.
+
+    .. change::
+       :tags: removed, schema
+       :tickets: 4643
+
+       Remove deprecated class ``Binary``. Please use :class:`.LargeBinary`.
+
+    .. change::
+       :tags: removed, sql
+       :tickets: 4643
+
+       Remove deprecated methods ``Compiled.compile``, ``ClauseElement.__and__`` and
+       ``ClauseElement.__or__`` and attribute ``Over.func``.
+
+       Remove deprecated ``FromClause.count`` method. Please use the
+       :class:`_functions.count` function available from the
+       :attr:`.func` namespace.
+
+    .. change::
+       :tags: removed,  sql
+       :tickets: 4643
+
+       Remove deprecated parameters ``text.bindparams`` and ``text.typemap``.
+       Please refer to the :meth:`_expression.TextClause.bindparams` and
+       :meth:`_expression.TextClause.columns` methods.
+
+       Remove deprecated parameter ``Table.useexisting``. Please use
+       :paramref:`_schema.Table.extend_existing`.
+
+    .. change::
+        :tags: bug, orm
+        :tickets: 4836
+
+        An exception is now raised if the ORM loads a row for a polymorphic
+        instance that has a primary key but the discriminator column is NULL, as
+        discriminator columns should not be null.
+
+
+
+    .. change::
+        :tags: bug, sql
+        :tickets: 4002
+
+        Deprecate usage of ``DISTINCT ON`` in dialect other than PostgreSQL.
+        Deprecate old usage of string distinct in MySQL dialect
+
+    .. change::
+        :tags: orm, usecase
+        :tickets: 5237
+
+        Update :paramref:`_orm.relationship.sync_backref` flag in a relationship
+        to make it implicitly ``False`` in ``viewonly=True`` relationships,
+        preventing synchronization events.
+
+
+        .. seealso::
+
+            :ref:`change_5237_14`
+
+    .. change::
+        :tags: deprecated, engine
+        :tickets: 4877
+
+        Deprecated the behavior by which a :class:`_schema.Column` can be used as the key
+        in a result set row lookup, when that :class:`_schema.Column` is not part of the
+        SQL selectable that is being selected; that is, it is only matched on name.
+        A deprecation warning is now emitted for this case.   Various ORM use
+        cases, such as those involving :func:`_expression.text` constructs, have been improved
+        so that this fallback logic is avoided in most cases.
+
+
+    .. change::
+        :tags: change, schema
+        :tickets: 5367
+
+        The :paramref:`.Enum.create_constraint` and
+        :paramref:`.Boolean.create_constraint` parameters now default to False,
+        indicating when a so-called "non-native" version of these two datatypes is
+        created, a CHECK constraint will not be generated by default.   These CHECK
+        constraints present schema-management maintenance complexities that should
+        be opted in to, rather than being turned on by default.
+
+
+    .. change::
+        :tags: feature, sql
+        :tickets: 4645
+
+        The "expanding IN" feature, which generates IN expressions at query
+        execution time which are based on the particular parameters associated with
+        the statement execution, is now used for all IN expressions made against
+        lists of literal values.   This allows IN expressions to be fully cacheable
+        independently of the list of values being passed, and also includes support
+        for empty lists. For any scenario where the IN expression contains
+        non-literal SQL expressions, the old behavior of pre-rendering for each
+        position in the IN is maintained. The change also completes support for
+        expanding IN with tuples, where previously type-specific bind processors
+        weren't taking effect.
+
+        .. seealso::
+
+            :ref:`change_4645`
+
+    .. change::
+        :tags: bug, mysql
+        :tickets: 4189
+
+        MySQL dialect's server_version_info tuple is now all numeric.  String
+        tokens like "MariaDB" are no longer present so that numeric comparison
+        works in all cases.  The .is_mariadb flag on the dialect should be
+        consulted for whether or not mariadb was detected.   Additionally removed
+        structures meant to support extremely old MySQL versions 3.x and 4.x;
+        the minimum MySQL version supported is now version 5.0.2.
+
+
+    .. change::
+        :tags: engine, feature
+        :tickets: 2056
+
+        Added new reflection method :meth:`.Inspector.get_sequence_names` which
+        returns all the sequences defined and :meth:`.Inspector.has_sequence` to
+        check if a particular sequence exits.
+        Support for this method has been added to the backend that support
+        :class:`.Sequence`: PostgreSQL, Oracle and MariaDB >= 10.3.
+
+    .. change::
+        :tags: usecase, postgresql
+        :tickets: 4914
+
+        The maximum buffer size for the :class:`.BufferedRowResultProxy`, which
+        is used by dialects such as PostgreSQL when ``stream_results=True``, can
+        now be set to a number greater than 1000 and the buffer will grow to
+        that size.  Previously, the buffer would not go beyond 1000 even if the
+        value were set larger.   The growth of the buffer is also now based
+        on a simple multiplying factor currently set to 5.  Pull request courtesy
+        Soumaya Mauthoor.
+
+
+    .. change::
+        :tags: bug, orm
+        :tickets: 4519
+
+        Accessing a collection-oriented attribute on a newly created object no
+        longer mutates ``__dict__``, but still returns an empty collection as has
+        always been the case.   This allows collection-oriented attributes to work
+        consistently in comparison to scalar attributes which return ``None``, but
+        also don't mutate ``__dict__``.  In order to accommodate for the collection
+        being mutated, the same empty collection is returned each time once
+        initially created, and when it is mutated (e.g. an item appended, added,
+        etc.) it is then moved into ``__dict__``.  This removes the last of
+        mutating side-effects on read-only attribute access within the ORM.
+
+        .. seealso::
+
+            :ref:`change_4519`
+
+    .. change::
+        :tags: change, sql
+        :tickets: 4617
+
+        As part of the SQLAlchemy 2.0 migration project, a conceptual change has
+        been made to the role of the :class:`_expression.SelectBase` class hierarchy,
+        which is the root of all "SELECT" statement constructs, in that they no
+        longer serve directly as FROM clauses, that is, they no longer subclass
+        :class:`_expression.FromClause`.  For end users, the change mostly means that any
+        placement of a :func:`_expression.select` construct in the FROM clause of another
+        :func:`_expression.select` requires first that it be wrapped in a subquery first,
+        which historically is through the use of the :meth:`_expression.SelectBase.alias`
+        method, and is now also available through the use of
+        :meth:`_expression.SelectBase.subquery`.    This was usually a requirement in any
+        case since several databases don't accept unnamed SELECT subqueries
+        in their FROM clause in any case.
+
+        .. seealso::
+
+            :ref:`change_4617`
+
+    .. change::
+        :tags: change, sql
+        :tickets: 4617
+
+        Added a new Core class :class:`.Subquery`, which takes the place of
+        :class:`_expression.Alias` when creating named subqueries against a :class:`_expression.SelectBase`
+        object.   :class:`.Subquery` acts in the same way as :class:`_expression.Alias`
+        and is produced from the :meth:`_expression.SelectBase.subquery` method; for
+        ease of use and backwards compatibility, the :meth:`_expression.SelectBase.alias`
+        method is synonymous with this new method.
+
+        .. seealso::
+
+            :ref:`change_4617`
+
+    .. change::
+        :tags: change, orm
+        :tickets: 4617
+
+        The ORM will now warn when asked to coerce a :func:`_expression.select` construct into
+        a subquery implicitly.  This occurs within places such as the
+        :meth:`_query.Query.select_entity_from` and  :meth:`_query.Query.select_from` methods
+        as well as within the :func:`.with_polymorphic` function.  When a
+        :class:`_expression.SelectBase` (which is what's produced by :func:`_expression.select`) or
+        :class:`_query.Query` object is passed directly to these functions and others,
+        the ORM is typically coercing them to be a subquery by calling the
+        :meth:`_expression.SelectBase.alias` method automatically (which is now superseded by
+        the :meth:`_expression.SelectBase.subquery` method).   See the migration notes linked
+        below for further details.
+
+        .. seealso::
+
+            :ref:`change_4617`
+
+    .. change::
+        :tags: bug, sql
+        :tickets: 4617
+
+        The ORDER BY clause of a :class:`_selectable.CompoundSelect`, e.g. UNION, EXCEPT, etc.
+        will not render the table name associated with a given column when applying
+        :meth:`_selectable.CompoundSelect.order_by` in terms of a :class:`_schema.Table` - bound
+        column.   Most databases require that the names in the ORDER BY clause be
+        expressed as label names only which are matched to names in the first
+        SELECT statement.    The change is related to :ticket:`4617` in that a
+        previous workaround was to refer to the ``.c`` attribute of the
+        :class:`_selectable.CompoundSelect` in order to get at a column that has no table
+        name.  As the subquery is now named, this change allows both the workaround
+        to continue to work, as well as allows table-bound columns as well as the
+        :attr:`_selectable.CompoundSelect.selected_columns` collections to be usable in the
+        :meth:`_selectable.CompoundSelect.order_by` method.
+
+    .. change::
+        :tags: bug, orm
+        :tickets: 5226
+
+        The refresh of an expired object will now trigger an autoflush if the list
+        of expired attributes include one or more attributes that were explicitly
+        expired or refreshed using the :meth:`.Session.expire` or
+        :meth:`.Session.refresh` methods.   This is an attempt to find a middle
+        ground between the normal unexpiry of attributes that can happen in many
+        cases where autoflush is not desirable, vs. the case where attributes are
+        being explicitly expired or refreshed and it is possible that these
+        attributes depend upon other pending state within the session that needs to
+        be flushed.   The two methods now also gain a new flag
+        :paramref:`.Session.expire.autoflush` and
+        :paramref:`.Session.refresh.autoflush`, defaulting to True; when set to
+        False, this will disable the autoflush that occurs on unexpire for these
+        attributes.
+
+    .. change::
+        :tags: feature, sql
+        :tickets: 5380
+
+        Along with the new transparent statement caching feature introduced as part
+        of :ticket:`4369`, a new feature intended to decrease the Python overhead
+        of creating statements is added, allowing lambdas to be used when
+        indicating arguments being passed to a statement object such as select(),
+        Query(), update(), etc., as well as allowing the construction of full
+        statements within lambdas in a similar manner as that of the "baked query"
+        system.   The rationale of using lambdas is adapted from that of the "baked
+        query" approach which uses lambdas to encapsulate any amount of Python code
+        into a callable that only needs to be called when the statement is first
+        constructed into a string.  The new feature however is more sophisticated
+        in that Python literal values that would be passed as parameters are
+        automatically extracted, so that there is no longer a need to use
+        bindparam() objects with such queries.   Use of the feature is optional and
+        can be used to as small or as great a degree as is desired, while still
+        allowing statements to be fully cacheable.
+
+        .. seealso::
+
+            :ref:`engine_lambda_caching`
+
+
+    .. change::
+        :tags: feature, orm
+        :tickets: 5027
+
+        Added support for direct mapping of Python classes that are defined using
+        the Python ``dataclasses`` decorator.    Pull request courtesy Václav
+        Klusák.  The new feature integrates into new support at the Declarative
+        level for systems such as ``dataclasses`` and ``attrs``.
+
+        .. seealso::
+
+            :ref:`change_5027`
+
+            :ref:`change_5508`
+
+
+    .. change::
+        :tags: change, engine
+        :tickets: 4710
+
+        The ``RowProxy`` class is no longer a "proxy" object, and is instead
+        directly populated with the post-processed contents of the DBAPI row tuple
+        upon construction.   Now named :class:`.Row`, the mechanics of how the
+        Python-level value processors have been simplified, particularly as it impacts the
+        format of the C code, so that a DBAPI row is processed into a result tuple
+        up front.   The object returned by the :class:`_engine.ResultProxy` is now the
+        :class:`.LegacyRow` subclass, which maintains mapping/tuple hybrid behavior,
+        however the base :class:`.Row` class now behaves more fully like a named
+        tuple.
+
+        .. seealso::
+
+            :ref:`change_4710_core`
+
+
+    .. change::
+        :tags: change, orm
+        :tickets: 4710
+
+        The "KeyedTuple" class returned by :class:`_query.Query` is now replaced with the
+        Core :class:`.Row` class, which behaves in the same way as KeyedTuple.
+        In SQLAlchemy 2.0, both Core and ORM will return result rows using the same
+        :class:`.Row` object.   In the interim, Core uses a backwards-compatibility
+        class :class:`.LegacyRow` that maintains the former mapping/tuple hybrid
+        behavior used by "RowProxy".
+
+        .. seealso::
+
+            :ref:`change_4710_orm`
+
+    .. change::
+        :tags: feature, orm
+        :tickets: 4826
+
+        Added "raiseload" feature for ORM mapped columns via :paramref:`.orm.defer.raiseload`
+        parameter on :func:`.defer` and :func:`.deferred`.   This provides
+        similar behavior for column-expression mapped attributes as the
+        :func:`.raiseload` option does for relationship mapped attributes.  The
+        change also includes some behavioral changes to deferred columns regarding
+        expiration; see the migration notes for details.
+
+        .. seealso::
+
+            :ref:`change_4826`
+
+
+    .. change::
+        :tags: bug, orm
+        :tickets: 5150
+
+        The behavior of the :paramref:`_orm.relationship.cascade_backrefs` flag
+        will be reversed in 2.0 and set to ``False`` unconditionally, such that
+        backrefs don't cascade save-update operations from a forwards-assignment to
+        a backwards assignment.   A 2.0 deprecation warning is emitted when the
+        parameter is left at its default of ``True`` at the point at which such a
+        cascade operation actually takes place.   The new behavior can be
+        established as always by setting the flag to ``False`` on a specific
+        :func:`_orm.relationship`, or more generally can be set up across the board
+        by setting the the :paramref:`_orm.Session.future` flag to True.
+
+        .. seealso::
+
+            :ref:`change_5150`
+
+    .. change::
+        :tags: deprecated, engine
+        :tickets: 4755
+
+        Deprecated remaining engine-level introspection and utility methods
+        including :meth:`_engine.Engine.run_callable`, :meth:`_engine.Engine.transaction`,
+        :meth:`_engine.Engine.table_names`, :meth:`_engine.Engine.has_table`.   The utility
+        methods are superseded by modern context-manager patterns, and the table
+        introspection tasks are suited by the :class:`_reflection.Inspector` object.
+
+    .. change::
+        :tags: removed, engine
+        :tickets: 4755
+
+        The internal dialect method ``Dialect.reflecttable`` has been removed.  A
+        review of third party dialects has not found any making use of this method,
+        as it was already documented as one that should not be used by external
+        dialects.  Additionally, the private ``Engine._run_visitor`` method
+        is also removed.
+
+
+    .. change::
+        :tags: removed, engine
+        :tickets: 4755
+
+        The long-deprecated ``Inspector.get_table_names.order_by`` parameter has
+        been removed.
+
+    .. change::
+        :tags: feature, engine
+        :tickets: 4755
+
+        The :paramref:`_schema.Table.autoload_with` parameter now accepts an :class:`_reflection.Inspector` object
+        directly, as well as any :class:`_engine.Engine` or :class:`_engine.Connection` as was the case before.
+
+
+    .. change::
+        :tags: change, performance, engine, py3k
+        :tickets: 5315
+
+        Disabled the "unicode returns" check that runs on dialect startup when
+        running under Python 3, which for many years has occurred in order to test
+        the current DBAPI's behavior for whether or not it returns Python Unicode
+        or Py2K strings for the VARCHAR and NVARCHAR datatypes.  The check still
+        occurs by default under Python 2, however the mechanism to test the
+        behavior will be removed in SQLAlchemy 2.0 when Python 2 support is also
+        removed.
+
+        This logic was very effective when it was needed, however now that Python 3
+        is standard, all DBAPIs are expected to return Python 3 strings for
+        character datatypes.  In the unlikely case that a third party DBAPI does
+        not support this, the conversion logic within :class:`.String` is still
+        available and the third party dialect may specify this in its upfront
+        dialect flags by setting the dialect level flag ``returns_unicode_strings``
+        to one of :attr:`.String.RETURNS_CONDITIONAL` or
+        :attr:`.String.RETURNS_BYTES`, both of which will enable Unicode conversion
+        even under Python 3.
+
+    .. change::
+        :tags: renamed, sql
+        :tickets: 5435, 5429
+
+        Several operators are renamed to achieve more consistent naming across
+        SQLAlchemy.
+
+        The operator changes are:
+
+        * ``isfalse`` is now ``is_false``
+        * ``isnot_distinct_from`` is now ``is_not_distinct_from``
+        * ``istrue`` is now ``is_true``
+        * ``notbetween`` is now ``not_between``
+        * ``notcontains`` is now ``not_contains``
+        * ``notendswith`` is now ``not_endswith``
+        * ``notilike`` is now ``not_ilike``
+        * ``notlike`` is now ``not_like``
+        * ``notmatch`` is now ``not_match``
+        * ``notstartswith`` is now ``not_startswith``
+        * ``nullsfirst`` is now ``nulls_first``
+        * ``nullslast`` is now ``nulls_last``
+        * ``isnot`` is now ``is_not``
+        * ``not_in_`` is now ``not_in``
+
+        Because these are core operators, the internal migration strategy for this
+        change is to support legacy terms for an extended period of time -- if not
+        indefinitely -- but update all documentation, tutorials, and internal usage
+        to the new terms.  The new terms are used to define the functions, and
+        the legacy terms have been deprecated into aliases of the new terms.
+
+
+
+    .. change::
+        :tags: orm, deprecated
+        :tickets: 5192
+
+        The :func:`.eagerload` and :func:`.relation` were old aliases and are
+        now deprecated. Use :func:`_orm.joinedload` and :func:`_orm.relationship`
+        respectively.
+
+
+    .. change::
+        :tags: bug, sql
+        :tickets: 4621
+
+        The :class:`_expression.Join` construct no longer considers the "onclause" as a source
+        of additional FROM objects to be omitted from the FROM list of an enclosing
+        :class:`_expression.Select` object as standalone FROM objects. This applies to an ON
+        clause that includes a reference to another  FROM object outside the JOIN;
+        while this is usually not correct from a SQL perspective, it's also
+        incorrect for it to be omitted, and the behavioral change makes the
+        :class:`_expression.Select` / :class:`_expression.Join` behave a bit more intuitively.
+
diff --git a/doc/build/changelog/unreleased_14/1390.rst b/doc/build/changelog/unreleased_14/1390.rst
deleted file mode 100644 (file)
index 0915a8e..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-.. change::
-    :tags: feature, sql
-    :tickets: 1390
-
-    Add support for regular expression on supported backends.
-    Two operations have been defined:
-
-    * :meth:`_sql.ColumnOperators.regexp_match` implementing a regular
-      expression match like function.
-    * :meth:`_sql.ColumnOperators.regexp_replace` implementing a regular
-      expression string replace function.
-
-    Supported backends include SQLite, PostgreSQL, MySQL / MariaDB, and Oracle.
-
-    .. seealso::
-
-        :ref:`change_1390`
diff --git a/doc/build/changelog/unreleased_14/1653.rst b/doc/build/changelog/unreleased_14/1653.rst
deleted file mode 100644 (file)
index e351212..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.. change::
-    :tags: usecase, orm
-    :tickets: 1653
-
-    The evaluator that takes place within the ORM bulk update and delete for
-    synchronize_session="evaluate" now supports the IN and NOT IN operators.
-    Tuple IN is also supported.
-
diff --git a/doc/build/changelog/unreleased_14/1763.rst b/doc/build/changelog/unreleased_14/1763.rst
deleted file mode 100644 (file)
index 18ec015..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-.. change::
-    :tags: feature, orm
-    :tickets: 1763
-
-    Eager loaders, such as joined loading, SELECT IN loading, etc., when
-    configured on a mapper or via query options will now be invoked during
-    the refresh on an expired object; in the case of selectinload and
-    subqueryload, since the additional load is for a single object only,
-    the "immediateload" scheme is used in these cases which resembles the
-    single-parent query emitted by lazy loading.
-
-    .. seealso::
-
-        :ref:`change_1763`
diff --git a/doc/build/changelog/unreleased_14/2056.rst b/doc/build/changelog/unreleased_14/2056.rst
deleted file mode 100644 (file)
index 41f1f43..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-.. change::
-    :tags: engine, feature
-    :tickets: 2056
-
-    Added new reflection method :meth:`.Inspector.get_sequence_names` which
-    returns all the sequences defined and :meth:`.Inspector.has_sequence` to
-    check if a particular sequence exits.
-    Support for this method has been added to the backend that support
-    :class:`.Sequence`: PostgreSQL, Oracle and MariaDB >= 10.3.
diff --git a/doc/build/changelog/unreleased_14/3414.rst b/doc/build/changelog/unreleased_14/3414.rst
deleted file mode 100644 (file)
index a278244..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-.. change::
-    :tags: feature, engine, orm
-    :tickets: 3414
-
-    SQLAlchemy now includes support for Python asyncio within both Core and
-    ORM, using the included :ref:`asyncio extension <asyncio_toplevel>`. The
-    extension makes use of the `greenlet
-    <https://greenlet.readthedocs.io/en/latest/>`_ library in order to adapt
-    SQLAlchemy's sync-oriented internals such that an asyncio interface that
-    ultimately interacts with an asyncio database adapter is now feasible.  The
-    single driver supported at the moment is the
-    :ref:`dialect-postgresql-asyncpg` driver for PostgreSQL.
-
-    .. seealso::
-
-        :ref:`change_3414`
-
diff --git a/doc/build/changelog/unreleased_14/3858.rst b/doc/build/changelog/unreleased_14/3858.rst
deleted file mode 100644 (file)
index 62d57cc..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-.. change::
-    :tags: bug, orm
-    :tickets: 3858
-
-    An ``UnmappedInstanceError`` is now raised for :class:`.InstrumentedAttribute`
-    if an instance is an unmapped object. Prior to this an ``AttributeError``
-    was raised. Pull request courtesy Ramon Williams.
diff --git a/doc/build/changelog/unreleased_14/4002.rst b/doc/build/changelog/unreleased_14/4002.rst
deleted file mode 100644 (file)
index 53dc0cf..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.. change::
-    :tags: bug, sql
-    :tickets: 4002
-
-    Deprecate usage of ``DISTINCT ON`` in dialect other than PostgreSQL.
-    Deprecate old usage of string distinct in MySQL dialect
diff --git a/doc/build/changelog/unreleased_14/4189.rst b/doc/build/changelog/unreleased_14/4189.rst
deleted file mode 100644 (file)
index 4eb0df6..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.. change::
-    :tags: bug, mysql
-    :tickets: 4189
-
-    MySQL dialect's server_version_info tuple is now all numeric.  String
-    tokens like "MariaDB" are no longer present so that numeric comparison
-    works in all cases.  The .is_mariadb flag on the dialect should be
-    consulted for whether or not mariadb was detected.   Additionally removed
-    structures meant to support extremely old MySQL versions 3.x and 4.x;
-    the minimum MySQL version supported is now version 5.0.2.
-
diff --git a/doc/build/changelog/unreleased_14/4194.rst b/doc/build/changelog/unreleased_14/4194.rst
deleted file mode 100644 (file)
index 9fd7a5c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.. change::
-    :tags: bug, orm
-    :tickets: 4194
-
-    Fixed bug where a versioning column specified on a mapper against a
-    :func:`_expression.select` construct where the version_id_col itself were against the
-    underlying table would incur additional loads when accessed, even if the
-    value were locally persisted by the flush.  The actual fix is a result of
-    the changes in :ticket:`4617`,  by fact that a :func:`_expression.select` object no
-    longer has a ``.c`` attribute and therefore does not confuse the mapper
-    into thinking there's an unknown column value present.
diff --git a/doc/build/changelog/unreleased_14/4195.rst b/doc/build/changelog/unreleased_14/4195.rst
deleted file mode 100644 (file)
index f5ca494..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-.. change::
-    :tags: bug, orm
-    :tickets: 4195
-
-    Fixed bug in ORM versioning feature where assignment of an explicit
-    version_id for a counter configured against a mapped selectable where
-    version_id_col is against the underlying table would fail if the previous
-    value were expired; this was due to the fact that the  mapped attribute
-    would not be configured with active_history=True.
-
diff --git a/doc/build/changelog/unreleased_14/4212.rst b/doc/build/changelog/unreleased_14/4212.rst
deleted file mode 100644 (file)
index 36fc664..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-.. change::
-    :tags: bug, inheritance, orm
-    :tickets: 4212
-
-    An :class:`.ArgumentError` is now raised if both the ``selectable`` and
-    ``flat`` parameters are set to True in :func:`.orm.with_polymorphic`. The
-    selectable name is already aliased and applying flat=True overrides the
-    selectable name with an anonymous name that would've previously caused the
-    code to break. Pull request courtesy Ramon Williams.
diff --git a/doc/build/changelog/unreleased_14/4235.rst b/doc/build/changelog/unreleased_14/4235.rst
deleted file mode 100644 (file)
index d0b430a..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-.. change::
-    :tags: mssql, feature
-    :tickets: 4235, 4633
-
-    Added support for "CREATE SEQUENCE" and full :class:`.Sequence` support for
-    Microsoft SQL Server.  This removes the deprecated feature of using
-    :class:`.Sequence` objects to manipulate IDENTITY characteristics which
-    should now be performed using ``mssql_identity_start`` and
-    ``mssql_identity_increment`` as documented at :ref:`mssql_identity`. The
-    change includes a new parameter :paramref:`.Sequence.data_type` to
-    accommodate SQL Server's choice of datatype, which for that backend
-    includes INTEGER, BIGINT, and DECIMAL(n, 0).   The default starting value
-    for SQL Server's version of :class:`.Sequence` has been set at 1; this
-    default is now emitted within the CREATE SEQUENCE DDL for all backends.
-
-    .. seealso::
-
-        :ref:`change_4235`
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/4262.rst b/doc/build/changelog/unreleased_14/4262.rst
deleted file mode 100644 (file)
index b91e1d8..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-.. change::
-    :tags: bug, schema
-    :tickets: 4262
-
-    Cleaned up the internal ``str()`` for datatypes so that all types produce a
-    string representation without any dialect present, including that it works
-    for third-party dialect types without that dialect being present.  The
-    string representation defaults to being the UPPERCASE name of that type
-    with nothing else.
-
diff --git a/doc/build/changelog/unreleased_14/4336.rst b/doc/build/changelog/unreleased_14/4336.rst
deleted file mode 100644 (file)
index 56f7f06..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-.. change::
-   :tags: bug, sql
-   :tickets: 4336
-
-   Reworked the :meth:`_expression.ClauseElement.compare` methods in terms of a new
-   visitor-based approach, and additionally added test coverage ensuring that
-   all :class:`_expression.ClauseElement` subclasses can be accurately compared
-   against each other in terms of structure.   Structural comparison
-   capability is used to a small degree within the ORM currently, however
-   it also may form the basis for new caching features.
diff --git a/doc/build/changelog/unreleased_14/4384.rst b/doc/build/changelog/unreleased_14/4384.rst
deleted file mode 100644 (file)
index afc5e3a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.. change::
-    :tags: feature, mssql, sql
-    :tickets: 4384
-
-    Added support for the :class:`_types.JSON` datatype on the SQL Server
-    dialect using the :class:`_mssql.JSON` implementation, which implements SQL
-    Server's JSON functionality against the ``NVARCHAR(max)`` datatype as per
-    SQL Server documentation. Implementation courtesy Gord Thompson.
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/4395.rst b/doc/build/changelog/unreleased_14/4395.rst
deleted file mode 100644 (file)
index 7d1ebfa..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-.. change::
-    :tags: orm, change
-    :tickets: 4395
-
-    The automatic uniquing of rows on the client side is turned off for the new
-    :term:`2.0 style` of ORM querying.  This improves both clarity and
-    performance.  However, uniquing of rows on the client side is generally
-    necessary when using joined eager loading for collections, as there
-    will be duplicates of the primary entity for each element in the
-    collection because a join was used.  This uniquing must now be manually
-    enabled and can be achieved using the new
-    :meth:`_engine.Result.unique` modifier.   To avoid silent failure, the ORM
-    explicitly requires the method be called when the result of an ORM
-    query in 2.0 style makes use of joined load collections.    The newer
-    :func:`_orm.selectinload` strategy is likely preferable for eager loading
-    of collections in any case.
-
-    .. seealso::
-
-        :ref:`joinedload_not_uniqued`
diff --git a/doc/build/changelog/unreleased_14/4449.rst b/doc/build/changelog/unreleased_14/4449.rst
deleted file mode 100644 (file)
index 8b9c4a3..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-.. change::
-    :tags: usecase, sql
-    :tickets: 4449
-
-    Additional logic has been added such that certain SQL expressions which
-    typically wrap a single database column will use the name of that column as
-    their "anonymous label" name within a SELECT statement, potentially making
-    key-based lookups in result tuples more intuitive.   The primary example of
-    this is that of a CAST expression, e.g. ``CAST(table.colname AS INTEGER)``,
-    which will export its default name as "colname", rather than the usual
-    "anon_1" label, that is, ``CAST(table.colname AS INTEGER) AS colname``.
-    If the inner expression doesn't have a name, then the previous "anonymous
-    label" logic is used.  When using SELECT statements that make use of
-    :meth:`_expression.Select.apply_labels`, such as those emitted by the ORM, the
-    labeling logic will produce ``<tablename>_<inner column name>`` in the same
-    was as if the column were named alone.   The logic applies right now to the
-    :func:`.cast` and :func:`.type_coerce` constructs as well as some
-    single-element boolean expressions.
-
-    .. seealso::
-
-        :ref:`change_4449`
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/4458.rst b/doc/build/changelog/unreleased_14/4458.rst
deleted file mode 100644 (file)
index 976f51d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.. change::
-    :tags: mssql, postgresql, reflection, schema, usecase
-    :tickets: 4458
-
-    Improved support for covering indexes (with INCLUDE columns). Added the
-    ability for postgresql to render CREATE INDEX statements with an INCLUDE
-    clause from Core. Index reflection also report INCLUDE columns separately
-    for both mssql and postgresql (11+).
diff --git a/doc/build/changelog/unreleased_14/4472.rst b/doc/build/changelog/unreleased_14/4472.rst
deleted file mode 100644 (file)
index 35fa920..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-.. change::
-    :tags: feature, orm
-    :tickets: 4472
-
-    Added the ability to add arbitrary criteria to the ON clause generated
-    by a relationship attribute in a query, which applies to methods such
-    as :meth:`_query.Query.join` as well as loader options like
-    :func:`_orm.joinedload`.   Additionally, a "global" version of the option
-    allows limiting criteria to be applied to particular entities in
-    a query globally.
-
-    .. seealso::
-
-        :ref:`loader_option_criteria`
-
-        :ref:`do_orm_execute_global_criteria`
-
-        :func:`_orm.with_loader_criteria`
diff --git a/doc/build/changelog/unreleased_14/4519.rst b/doc/build/changelog/unreleased_14/4519.rst
deleted file mode 100644 (file)
index c1fdb8a..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-.. change::
-    :tags: bug, orm
-    :tickets: 4519
-
-    Accessing a collection-oriented attribute on a newly created object no
-    longer mutates ``__dict__``, but still returns an empty collection as has
-    always been the case.   This allows collection-oriented attributes to work
-    consistently in comparison to scalar attributes which return ``None``, but
-    also don't mutate ``__dict__``.  In order to accommodate for the collection
-    being mutated, the same empty collection is returned each time once
-    initially created, and when it is mutated (e.g. an item appended, added,
-    etc.) it is then moved into ``__dict__``.  This removes the last of
-    mutating side-effects on read-only attribute access within the ORM.
-
-    .. seealso::
-
-        :ref:`change_4519`
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/4524.rst b/doc/build/changelog/unreleased_14/4524.rst
deleted file mode 100644 (file)
index 5e9e564..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.. change::
-   :tags: performance, engine
-   :tickets: 4524
-
-   The pool "pre-ping" feature has been refined to not invoke for a DBAPI
-   connection that was just opened in the same checkout operation.  pre ping
-   only applies to a DBAPI connection that's been checked into the pool
-   and is being checked out again.
diff --git a/doc/build/changelog/unreleased_14/4617_coercion.rst b/doc/build/changelog/unreleased_14/4617_coercion.rst
deleted file mode 100644 (file)
index 09d0b8e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-.. change::
-    :tags: sql, change
-    :tickets: 4617
-
-    The "clause coercion" system, which is SQLAlchemy Core's system of receiving
-    arguments and resolving them into :class:`_expression.ClauseElement` structures in order
-    to build up SQL expression objects, has been rewritten from a series of
-    ad-hoc functions to a fully consistent class-based system.   This change
-    is internal and should have no impact on end users other than more specific
-    error messages when the wrong kind of argument is passed to an expression
-    object, however the change is part of a larger set of changes involving
-    the role and behavior of :func:`_expression.select` objects.
-
diff --git a/doc/build/changelog/unreleased_14/4617_implicit_subquery.rst b/doc/build/changelog/unreleased_14/4617_implicit_subquery.rst
deleted file mode 100644 (file)
index 6bce7e2..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-.. change::
-    :tags: change, sql
-    :tickets: 4617
-
-    As part of the SQLAlchemy 2.0 migration project, a conceptual change has
-    been made to the role of the :class:`_expression.SelectBase` class hierarchy,
-    which is the root of all "SELECT" statement constructs, in that they no
-    longer serve directly as FROM clauses, that is, they no longer subclass
-    :class:`_expression.FromClause`.  For end users, the change mostly means that any
-    placement of a :func:`_expression.select` construct in the FROM clause of another
-    :func:`_expression.select` requires first that it be wrapped in a subquery first,
-    which historically is through the use of the :meth:`_expression.SelectBase.alias`
-    method, and is now also available through the use of
-    :meth:`_expression.SelectBase.subquery`.    This was usually a requirement in any
-    case since several databases don't accept unnamed SELECT subqueries
-    in their FROM clause in any case.
-
-    .. seealso::
-
-        :ref:`change_4617`
-
-.. change::
-    :tags: change, sql
-    :tickets: 4617
-
-    Added a new Core class :class:`.Subquery`, which takes the place of
-    :class:`_expression.Alias` when creating named subqueries against a :class:`_expression.SelectBase`
-    object.   :class:`.Subquery` acts in the same way as :class:`_expression.Alias`
-    and is produced from the :meth:`_expression.SelectBase.subquery` method; for
-    ease of use and backwards compatibility, the :meth:`_expression.SelectBase.alias`
-    method is synonymous with this new method.
-
-    .. seealso::
-
-        :ref:`change_4617`
-
-.. change::
-    :tags: change, orm
-    :tickets: 4617
-
-    The ORM will now warn when asked to coerce a :func:`_expression.select` construct into
-    a subquery implicitly.  This occurs within places such as the
-    :meth:`_query.Query.select_entity_from` and  :meth:`_query.Query.select_from` methods
-    as well as within the :func:`.with_polymorphic` function.  When a
-    :class:`_expression.SelectBase` (which is what's produced by :func:`_expression.select`) or
-    :class:`_query.Query` object is passed directly to these functions and others,
-    the ORM is typically coercing them to be a subquery by calling the
-    :meth:`_expression.SelectBase.alias` method automatically (which is now superseded by
-    the :meth:`_expression.SelectBase.subquery` method).   See the migration notes linked
-    below for further details.
-
-    .. seealso::
-
-        :ref:`change_4617`
-
-.. change::
-    :tags: bug, sql
-    :tickets: 4617
-
-    The ORDER BY clause of a :class:`_selectable.CompoundSelect`, e.g. UNION, EXCEPT, etc.
-    will not render the table name associated with a given column when applying
-    :meth:`_selectable.CompoundSelect.order_by` in terms of a :class:`_schema.Table` - bound
-    column.   Most databases require that the names in the ORDER BY clause be
-    expressed as label names only which are matched to names in the first
-    SELECT statement.    The change is related to :ticket:`4617` in that a
-    previous workaround was to refer to the ``.c`` attribute of the
-    :class:`_selectable.CompoundSelect` in order to get at a column that has no table
-    name.  As the subquery is now named, this change allows both the workaround
-    to continue to work, as well as allows table-bound columns as well as the
-    :attr:`_selectable.CompoundSelect.selected_columns` collections to be usable in the
-    :meth:`_selectable.CompoundSelect.order_by` method.
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/4617_scalar.rst b/doc/build/changelog/unreleased_14/4617_scalar.rst
deleted file mode 100644 (file)
index 52b1d79..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-.. change::
-    :tags: renamed, sql
-    :tickets: 4617
-
-    The :meth:`_expression.SelectBase.as_scalar` and :meth:`_query.Query.as_scalar` methods have
-    been renamed to :meth:`_expression.SelectBase.scalar_subquery` and
-    :meth:`_query.Query.scalar_subquery`, respectively.  The old names continue to
-    exist within 1.4 series with a deprecation warning.  In addition, the
-    implicit coercion of :class:`_expression.SelectBase`, :class:`_expression.Alias`, and other
-    SELECT oriented objects into scalar subqueries when evaluated in a column
-    context is also deprecated, and emits a warning that the
-    :meth:`_expression.SelectBase.scalar_subquery` method should be called explicitly.
-    This warning will in a later major release become an error, however the
-    message will always be clear when :meth:`_expression.SelectBase.scalar_subquery` needs
-    to be invoked.   The latter part of the change is for clarity and to reduce
-    the implicit decisionmaking by the query coercion system.   The
-    :meth:`.Subquery.as_scalar` method, which was previously
-    ``Alias.as_scalar``, is also deprecated; ``.scalar_subquery()`` should be
-    invoked directly from ` :func:`_expression.select` object or :class:`_query.Query` object.
-
-    This change is part of the larger change to convert :func:`_expression.select` objects
-    to no longer be directly part of the "from clause" class hierarchy, which
-    also includes an overhaul of the clause coercion system.
-
diff --git a/doc/build/changelog/unreleased_14/4621.rst b/doc/build/changelog/unreleased_14/4621.rst
deleted file mode 100644 (file)
index 22537ec..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-.. change::
-    :tags: bug, sql
-    :tickets: 4621
-
-    The :class:`_expression.Join` construct no longer considers the "onclause" as a source
-    of additional FROM objects to be omitted from the FROM list of an enclosing
-    :class:`_expression.Select` object as standalone FROM objects. This applies to an ON
-    clause that includes a reference to another  FROM object outside the JOIN;
-    while this is usually not correct from a SQL perspective, it's also
-    incorrect for it to be omitted, and the behavioral change makes the
-    :class:`_expression.Select` / :class:`_expression.Join` behave a bit more intuitively.
-
diff --git a/doc/build/changelog/unreleased_14/4632.rst b/doc/build/changelog/unreleased_14/4632.rst
deleted file mode 100644 (file)
index c3a74b6..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-.. change::
-    :tags: removed, sql
-    :tickets: 4632
-
-    The "threadlocal" execution strategy, deprecated in 1.3, has been
-    removed for 1.4, as well as the concept of "engine strategies" and the
-    ``Engine.contextual_connect`` method.  The "strategy='mock'" keyword
-    argument is still accepted for now with a deprecation warning; use
-    :func:`.create_mock_engine` instead for this use case.
-
-    .. seealso::
-
-        :ref:`change_4393_threadlocal` - from the 1.3 migration notes which
-        discusses the rationale for deprecation.
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/4634.rst b/doc/build/changelog/unreleased_14/4634.rst
deleted file mode 100644 (file)
index aa58aa1..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-.. change::
-    :tags: deprecated, engine
-    :tickets: 4634
-
-    The :paramref:`_schema.MetaData.bind` argument as well as the overall
-    concept of "bound metadata" is deprecated in SQLAlchemy 1.4 and will be
-    removed in SQLAlchemy 2.0.  The parameter as well as related functions now
-    emit a :class:`_exc.RemovedIn20Warning` when :ref:`deprecation_20_mode` is
-    in use.
-
-    .. seealso::
-
-        :ref:`migration_20_implicit_execution`
-
-
-
-.. change::
-    :tags: change, extensions
-    :tickets: 5142
-
-    Added new parameter :paramref:`_automap.AutomapBase.prepare.autoload_with`
-    which supersedes :paramref:`_automap.AutomapBase.prepare.reflect`
-    and :paramref:`_automap.AutomapBase.prepare.engine`.
-
-
diff --git a/doc/build/changelog/unreleased_14/4638.rst b/doc/build/changelog/unreleased_14/4638.rst
deleted file mode 100644 (file)
index 6578933..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-.. change::
-    :tags: orm, removed
-    :tickets: 4638
-
-    All long-deprecated "extension" classes have been removed, including
-    MapperExtension, SessionExtension, PoolListener, ConnectionProxy,
-    AttributeExtension.  These classes have been deprecated since version 0.7
-    long superseded by the event listener system.
-
diff --git a/doc/build/changelog/unreleased_14/4639.rst b/doc/build/changelog/unreleased_14/4639.rst
deleted file mode 100644 (file)
index 7558f36..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-.. change::
-    :tags: performance, sql
-    :tickets: 4639
-
-    An all-encompassing reorganization and refactoring of Core and ORM
-    internals now allows all Core and ORM statements within the areas of
-    DQL (e.g. SELECTs) and DML (e.g. INSERT, UPDATE, DELETE) to allow their
-    SQL compilation as well as the construction of result-fetching metadata
-    to be fully cached in most cases.   This effectively provides a transparent
-    and generalized version of what the "Baked Query" extension has offered
-    for the ORM in past versions.  The new feature can calculate the
-    cache key for any given SQL construction based on the string that
-    it would ultimately produce for a given dialect, allowing functions that
-    compose the equivalent select(), Query(), insert(), update() or delete()
-    object each time to have that statement cached after it's generated
-    the first time.
-
-    The feature is enabled transparently but includes some new programming
-    paradigms that may be employed to make the caching even more efficient.
-
-    .. seealso::
-
-        :ref:`change_4639`
-
-        :ref:`sql_caching`
diff --git a/doc/build/changelog/unreleased_14/4642.rst b/doc/build/changelog/unreleased_14/4642.rst
deleted file mode 100644 (file)
index 10b57c2..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-.. change::
-   :tags: orm, removed
-   :tickets: 4642
-
-   Remove the deprecated loader options ``joinedload_all``, ``subqueryload_all``,
-   ``lazyload_all``, ``selectinload_all``. The normal version with method chaining
-   should be used in their place.
diff --git a/doc/build/changelog/unreleased_14/4643.rst b/doc/build/changelog/unreleased_14/4643.rst
deleted file mode 100644 (file)
index 81ae88a..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-.. change::
-   :tags: engine, removed
-   :tickets: 4643
-
-   Remove deprecated method ``get_primary_keys`` in the :class:`.Dialect` and
-   :class:`_reflection.Inspector` classes. Please refer to the
-   :meth:`.Dialect.get_pk_constraint` and :meth:`_reflection.Inspector.get_primary_keys`
-   methods.
-
-   Remove deprecated event ``dbapi_error`` and the method
-   ``ConnectionEvents.dbapi_error``. Please refer to the
-   :meth:`_events.ConnectionEvents.handle_error` event.
-   This change also removes the attributes ``ExecutionContext.is_disconnect``
-   and ``ExecutionContext.exception``.
-
-.. change::
-   :tags: removed, postgresql
-   :tickets: 4643
-
-   Remove support for deprecated engine URLs of the form ``postgres://``;
-   this has emitted a warning for many years and projects should be
-   using ``postgresql://``.
-
-.. change::
-   :tags: removed, mysql
-   :tickets: 4643
-
-   Remove deprecated dialect ``mysql+gaerdbms`` that has been deprecated
-   since version 1.0. Use the MySQLdb dialect directly.
-
-   Remove deprecated parameter ``quoting`` from :class:`.mysql.ENUM`
-   and :class:`.mysql.SET` in the ``mysql`` dialect. The values passed to the
-   enum or the set are quoted by SQLAlchemy when needed automatically.
-
-.. change::
-   :tags: removed, orm
-   :tickets: 4643
-
-   Remove deprecated function ``comparable_property``. Please refer to the
-   :mod:`~sqlalchemy.ext.hybrid` extension. This also removes the function
-   ``comparable_using`` in the declarative extension.
-
-   Remove deprecated function ``compile_mappers``.  Please use
-   :func:`.configure_mappers`
-
-   Remove deprecated method ``collection.linker``. Please refer to the
-   :meth:`.AttributeEvents.init_collection` and
-   :meth:`.AttributeEvents.dispose_collection` event handlers.
-
-   Remove deprecated method ``Session.prune`` and parameter
-   ``Session.weak_identity_map``. See the recipe at
-   :ref:`session_referencing_behavior` for an event-based approach to
-   maintaining strong identity references.
-   This change also removes the class ``StrongInstanceDict``.
-
-   Remove deprecated parameter ``mapper.order_by``. Use :meth:`_query.Query.order_by`
-   to determine the ordering of a result set.
-
-   Remove deprecated parameter ``Session._enable_transaction_accounting``.
-
-   Remove deprecated parameter ``Session.is_modified.passive``.
-
-.. change::
-   :tags: removed, schema
-   :tickets: 4643
-
-   Remove deprecated class ``Binary``. Please use :class:`.LargeBinary`.
-
-.. change::
-   :tags: removed, sql
-   :tickets: 4643
-
-   Remove deprecated methods ``Compiled.compile``, ``ClauseElement.__and__`` and
-   ``ClauseElement.__or__`` and attribute ``Over.func``.
-
-   Remove deprecated ``FromClause.count`` method. Please use the
-   :class:`_functions.count` function available from the
-   :attr:`.func` namespace.
-
-.. change::
-   :tags: removed,  sql
-   :tickets: 4643
-
-   Remove deprecated parameters ``text.bindparams`` and ``text.typemap``.
-   Please refer to the :meth:`_expression.TextClause.bindparams` and
-   :meth:`_expression.TextClause.columns` methods.
-
-   Remove deprecated parameter ``Table.useexisting``. Please use
-   :paramref:`_schema.Table.extend_existing`.
diff --git a/doc/build/changelog/unreleased_14/4644.rst b/doc/build/changelog/unreleased_14/4644.rst
deleted file mode 100644 (file)
index 736bddb..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-.. change::
-    :tags: feature, engine, alchemy2
-    :tickets: 4644
-
-    Implemented the :paramref:`_sa.create_engine.future` parameter which
-    enables forwards compatibility with SQLAlchemy 2. is used for forwards
-    compatibility with SQLAlchemy 2.   This engine features
-    always-transactional behavior with autobegin.
-
-    .. seealso::
-
-        :ref:`migration_20_toplevel`
diff --git a/doc/build/changelog/unreleased_14/4645.rst b/doc/build/changelog/unreleased_14/4645.rst
deleted file mode 100644 (file)
index 17348a6..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-.. change::
-    :tags: feature, sql
-    :tickets: 4645
-
-    The "expanding IN" feature, which generates IN expressions at query
-    execution time which are based on the particular parameters associated with
-    the statement execution, is now used for all IN expressions made against
-    lists of literal values.   This allows IN expressions to be fully cacheable
-    independently of the list of values being passed, and also includes support
-    for empty lists. For any scenario where the IN expression contains
-    non-literal SQL expressions, the old behavior of pre-rendering for each
-    position in the IN is maintained. The change also completes support for
-    expanding IN with tuples, where previously type-specific bind processors
-    weren't taking effect.
-
-    .. seealso::
-
-        :ref:`change_4645`
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/4649.rst b/doc/build/changelog/unreleased_14/4649.rst
deleted file mode 100644 (file)
index 328a07c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-.. change::
-   :tags: bug, sql
-   :tickets: 4649, 4569
-
-   Registered function names based on :class:`.GenericFunction` are now
-   retrieved in a case-insensitive fashion in all cases, removing the
-   deprecation logic from 1.3 which temporarily allowed multiple
-   :class:`.GenericFunction` objects to exist with differing cases.   A
-   :class:`.GenericFunction` that replaces another on the same name whether or
-   not it's case sensitive emits a warning before replacing the object.
diff --git a/doc/build/changelog/unreleased_14/4656.rst b/doc/build/changelog/unreleased_14/4656.rst
deleted file mode 100644 (file)
index 116cdb7..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-.. change::
-   :tags: bug, general
-   :tickets: 4656, 4689
-
-   Refactored the internal conventions used to cross-import modules that have
-   mutual dependencies between them, such that the inspected arguments of
-   functions and methods are no longer modified.  This allows tools like
-   pylint, Pycharm, other code linters, as well as hypothetical pep-484
-   implementations added in the future to function correctly as they no longer
-   see missing arguments to function calls.   The new approach is also
-   simpler and more performant.
-
-   .. seealso::
-
-        :ref:`change_4656`
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/4662.rst b/doc/build/changelog/unreleased_14/4662.rst
deleted file mode 100644 (file)
index 99469e8..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-.. change::
-    :tags: change, orm
-    :tickets: 4662
-
-    The condition where a pending object being flushed with an identity that
-    already exists in the identity map has been adjusted to emit a warning,
-    rather than throw a :class:`.FlushError`. The rationale is so that the
-    flush will proceed and raise a :class:`.IntegrityError` instead, in the
-    same way as if the existing object were not present in the identity map
-    already.   This helps with schemes that are using the
-    :class:`.IntegrityError` as a means of catching whether or not a row
-    already exists in the table.
-
-    .. seealso::
-
-        :ref:`change_4662`
-
diff --git a/doc/build/changelog/unreleased_14/4696.rst b/doc/build/changelog/unreleased_14/4696.rst
deleted file mode 100644 (file)
index c4629db..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-.. change::
-    :tags: bug, orm
-    :tickets: 4696
-
-    The internal attribute symbols NO_VALUE and NEVER_SET have been unified, as
-    there was no meaningful difference between these two symbols, other than a
-    few codepaths where they were differentiated in subtle and undocumented
-    ways, these have been fixed.
-
diff --git a/doc/build/changelog/unreleased_14/4699.rst b/doc/build/changelog/unreleased_14/4699.rst
deleted file mode 100644 (file)
index e1e1442..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-.. change::
-    :tags: bug, orm
-    :tickets: 4699
-
-    Improved declarative inheritance scanning to not get tripped up when the
-    same base class appears multiple times in the base inheritance list.
-
diff --git a/doc/build/changelog/unreleased_14/4705.rst b/doc/build/changelog/unreleased_14/4705.rst
deleted file mode 100644 (file)
index f972284..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-.. change::
-    :tags: deprecated, orm
-    :tickets: 4705, 5202
-
-    Using strings to represent relationship names in ORM operations such as
-    :meth:`_orm.Query.join`, as well as strings for all ORM attribute names
-    in loader options like :func:`_orm.selectinload`
-    is deprecated and will be removed in SQLAlchemy 2.0.  The class-bound
-    attribute should be passed instead.  This provides much better specificity
-    to the given method, allows for modifiers such as ``of_type()``, and
-    reduces internal complexity.
-
-    Additionally, the ``aliased`` and ``from_joinpoint`` parameters to
-    :meth:`_orm.Query.join` are also deprecated.   The :func:`_orm.aliased`
-    construct now provides for a great deal of flexibility and capability
-    and should be used directly.
-
-    .. seealso::
-
-        :ref:`migration_20_orm_query_join_strings`
-
-        :ref:`migration_20_query_join_options`
diff --git a/doc/build/changelog/unreleased_14/4710.rst b/doc/build/changelog/unreleased_14/4710.rst
deleted file mode 100644 (file)
index 5c25ca4..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-.. change::
-    :tags: change, engine
-    :tickets: 4710
-
-    The ``RowProxy`` class is no longer a "proxy" object, and is instead
-    directly populated with the post-processed contents of the DBAPI row tuple
-    upon construction.   Now named :class:`.Row`, the mechanics of how the
-    Python-level value processors have been simplified, particularly as it impacts the
-    format of the C code, so that a DBAPI row is processed into a result tuple
-    up front.   The object returned by the :class:`_engine.ResultProxy` is now the
-    :class:`.LegacyRow` subclass, which maintains mapping/tuple hybrid behavior,
-    however the base :class:`.Row` class now behaves more fully like a named
-    tuple.
-
-    .. seealso::
-
-        :ref:`change_4710_core`
-
-
-.. change::
-    :tags: change, orm
-    :tickets: 4710
-
-    The "KeyedTuple" class returned by :class:`_query.Query` is now replaced with the
-    Core :class:`.Row` class, which behaves in the same way as KeyedTuple.
-    In SQLAlchemy 2.0, both Core and ORM will return result rows using the same
-    :class:`.Row` object.   In the interim, Core uses a backwards-compatibility
-    class :class:`.LegacyRow` that maintains the former mapping/tuple hybrid
-    behavior used by "RowProxy".
-
-    .. seealso::
-
-        :ref:`change_4710_orm`
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/4712.rst b/doc/build/changelog/unreleased_14/4712.rst
deleted file mode 100644 (file)
index aa5771a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-.. change::
-    :tags: bug, engine
-    :tickets: 4712
-
-    The :class:`_engine.Connection` object will now not clear a rolled-back
-    transaction  until the outermost transaction is explicitly rolled back.
-    This is essentially the same behavior that the ORM :class:`.Session` has
-    had for a long time, where an explicit call to ``.rollback()`` on all
-    enclosing transactions is required for the transaction to logically clear,
-    even though the DBAPI-level transaction has already been rolled back.
-    The new behavior helps with situations such as the "ORM rollback test suite"
-    pattern where the test suite rolls the transaction back within the ORM
-    scope, but the test harness which seeks to control the scope of the
-    transaction externally does not expect a new transaction to start
-    implicitly.
-
-    .. seealso::
-
-        :ref:`change_4712`
-
diff --git a/doc/build/changelog/unreleased_14/4718.rst b/doc/build/changelog/unreleased_14/4718.rst
deleted file mode 100644 (file)
index be36efb..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.. change::
-    :tags: bug, orm
-    :tickets: 4718
-
-    Fixed issue in polymorphic loading internals which would fall back to a
-    more expensive, soon-to-be-deprecated form of result column lookup within
-    certain unexpiration scenarios in conjunction with the use of
-    "with_polymorphic".
diff --git a/doc/build/changelog/unreleased_14/4719.rst b/doc/build/changelog/unreleased_14/4719.rst
deleted file mode 100644 (file)
index 4da36db..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-.. change::
-    :tags: deprecated, orm
-    :tickets: 4719
-
-    Calling the :meth:`_query.Query.instances` method without passing a
-    :class:`.QueryContext` is deprecated.   The original use case for this was
-    that a :class:`_query.Query` could yield ORM objects when given only the entities
-    to be selected as well as a DBAPI cursor object.  However, for this to work
-    correctly there is essential metadata that is passed from a SQLAlchemy
-    :class:`_engine.ResultProxy` that is derived from the mapped column expressions,
-    which comes originally from the :class:`.QueryContext`.   To retrieve ORM
-    results from arbitrary SELECT statements, the :meth:`_query.Query.from_statement`
-    method should be used.
-
diff --git a/doc/build/changelog/unreleased_14/4737.rst b/doc/build/changelog/unreleased_14/4737.rst
deleted file mode 100644 (file)
index 072788e..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-.. change::
-    :tags: feature,sql
-    :tickets: 4737
-
-    Added "from linting" as a built-in feature to the SQL compiler.  This
-    allows the compiler to maintain graph of all the FROM clauses in a
-    particular SELECT statement, linked by criteria in either the WHERE
-    or in JOIN clauses that link these FROM clauses together.  If any two
-    FROM clauses have no path between them, a warning is emitted that the
-    query may be producing a cartesian product.   As the Core expression
-    language as well as the ORM are built on an "implicit FROMs" model where
-    a particular FROM clause is automatically added if any part of the query
-    refers to it, it is easy for this to happen inadvertently and it is
-    hoped that the new feature helps with this issue.
-
-    .. seealso::
-
-        :ref:`change_4737`
diff --git a/doc/build/changelog/unreleased_14/4741.rst b/doc/build/changelog/unreleased_14/4741.rst
deleted file mode 100644 (file)
index afc94bd..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-.. change::
-    :tags: sql, reflection
-    :tickets: 4741
-
-    The "NO ACTION" keyword for foreign key "ON UPDATE" is now considered to be
-    the default cascade for a foreign key on all supporting backends (SQlite,
-    MySQL, PostgreSQL) and when detected is not included in the reflection
-    dictionary; this is already the behavior for PostgreSQL and MySQL for all
-    previous SQLAlchemy versions in any case.   The "RESTRICT" keyword is
-    positively stored when detected; PostgreSQL does report on this keyword,
-    and MySQL as of version 8.0 does as well.  On earlier MySQL versions, it is
-    not reported by the database.
diff --git a/doc/build/changelog/unreleased_14/4753.rst b/doc/build/changelog/unreleased_14/4753.rst
deleted file mode 100644 (file)
index ab3e0b6..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-.. change::
-    :tags: feature, sql
-    :tickets: 4753
-
-    The :func:`_expression.select` construct and related constructs now allow for
-    duplication of column labels and columns themselves in the columns clause,
-    mirroring exactly how column expressions were passed in.   This allows
-    the tuples returned by an executed result to match what was SELECTed
-    for in the first place, which is how the ORM :class:`_query.Query` works, so
-    this establishes better cross-compatibility between the two constructs.
-    Additionally, it allows column-positioning-sensitive structures such as
-    UNIONs (i.e. :class:`_selectable.CompoundSelect`) to be more intuitively constructed
-    in those cases where a particular column might appear in more than one
-    place.   To support this change, the :class:`_expression.ColumnCollection` has been
-    revised to support duplicate columns as well as to allow integer index
-    access.
-
-    .. seealso::
-
-        :ref:`change_4753`
-
diff --git a/doc/build/changelog/unreleased_14/4755.rst b/doc/build/changelog/unreleased_14/4755.rst
deleted file mode 100644 (file)
index d8dec25..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-.. change::
-    :tags: deprecated, engine
-    :tickets: 4755
-
-    Deprecated remaining engine-level introspection and utility methods
-    including :meth:`_engine.Engine.run_callable`, :meth:`_engine.Engine.transaction`,
-    :meth:`_engine.Engine.table_names`, :meth:`_engine.Engine.has_table`.   The utility
-    methods are superseded by modern context-manager patterns, and the table
-    introspection tasks are suited by the :class:`_reflection.Inspector` object.
-
-.. change::
-    :tags: removed, engine
-    :tickets: 4755
-
-    The internal dialect method ``Dialect.reflecttable`` has been removed.  A
-    review of third party dialects has not found any making use of this method,
-    as it was already documented as one that should not be used by external
-    dialects.  Additionally, the private ``Engine._run_visitor`` method
-    is also removed.
-
-
-.. change::
-    :tags: removed, engine
-    :tickets: 4755
-
-    The long-deprecated ``Inspector.get_table_names.order_by`` parameter has
-    been removed.
-
-.. change::
-    :tags: feature, engine
-    :tickets: 4755
-
-    The :paramref:`_schema.Table.autoload_with` parameter now accepts an :class:`_reflection.Inspector` object
-    directly, as well as any :class:`_engine.Engine` or :class:`_engine.Connection` as was the case before.
-
diff --git a/doc/build/changelog/unreleased_14/4789.rst b/doc/build/changelog/unreleased_14/4789.rst
deleted file mode 100644 (file)
index 1d7d8a8..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-.. change::
-    :tags: change, general
-    :tickets: 4789
-
-    "python setup.py test" is no longer a test runner, as this is deprecated by
-    Pypa.   Please use "tox" with no arguments for a basic test run.
-
diff --git a/doc/build/changelog/unreleased_14/4808.rst b/doc/build/changelog/unreleased_14/4808.rst
deleted file mode 100644 (file)
index 7b02420..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-.. change::
-    :tags: feature, sql, mssql, oracle
-    :tickets: 4808
-
-    Added new "post compile parameters" feature.  This feature allows a
-    :func:`.bindparam` construct to have its value rendered into the SQL string
-    before being passed to the DBAPI driver, but after the compilation step,
-    using the "literal render" feature of the compiler.  The immediate
-    rationale for this feature is to support LIMIT/OFFSET schemes that don't
-    work or perform well as bound parameters handled by the database driver,
-    while still allowing for SQLAlchemy SQL constructs to be cacheable in their
-    compiled form.     The immediate targets for the new feature are the "TOP
-    N" clause used by SQL Server (and Sybase) which does not support a bound
-    parameter, as well as the "ROWNUM" and optional "FIRST_ROWS()" schemes used
-    by the Oracle dialect, the former of which has been known to perform better
-    without bound parameters and the latter of which does not support a bound
-    parameter.   The feature builds upon the mechanisms first developed to
-    support "expanding" parameters for IN expressions.   As part of this
-    feature, the Oracle ``use_binds_for_limits`` feature is turned on
-    unconditionally and this flag is now deprecated.
-
-    .. seealso::
-
-        :ref:`change_4808`
diff --git a/doc/build/changelog/unreleased_14/4809.rst b/doc/build/changelog/unreleased_14/4809.rst
deleted file mode 100644 (file)
index bb7bc66..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-.. change::
-    :tags: mssql, engine
-    :tickets: 4809
-
-    Deprecated the ``legacy_schema_aliasing`` parameter to
-    :meth:`_sa.create_engine`.   This is a long-outdated parameter that has
-    defaulted to False since version 1.1.
diff --git a/doc/build/changelog/unreleased_14/4826.rst b/doc/build/changelog/unreleased_14/4826.rst
deleted file mode 100644 (file)
index 99535c0..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-.. change::
-    :tags: feature, orm
-    :tickets: 4826
-
-    Added "raiseload" feature for ORM mapped columns via :paramref:`.orm.defer.raiseload`
-    parameter on :func:`.defer` and :func:`.deferred`.   This provides
-    similar behavior for column-expression mapped attributes as the
-    :func:`.raiseload` option does for relationship mapped attributes.  The
-    change also includes some behavioral changes to deferred columns regarding
-    expiration; see the migration notes for details.
-
-    .. seealso::
-
-        :ref:`change_4826`
-
diff --git a/doc/build/changelog/unreleased_14/4829.rst b/doc/build/changelog/unreleased_14/4829.rst
deleted file mode 100644 (file)
index aacefdf..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-.. change::
-    :tags: bug, orm
-    :tickets: 4829
-
-    Added new entity-targeting capabilities to the ORM query context
-    help with the case where the :class:`.Session` is using a bind dictionary
-    against mapped classes, rather than a single bind, and the :class:`_query.Query`
-    is against a Core statement that was ultimately generated from a method
-    such as :meth:`_query.Query.subquery`.  First implemented using a deep
-    search, the current approach leverages the unified :func:`_sql.select`
-    construct to keep track of the first mapper that is part of
-    the construct.
-
diff --git a/doc/build/changelog/unreleased_14/4836.rst b/doc/build/changelog/unreleased_14/4836.rst
deleted file mode 100644 (file)
index 5a4d64d..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-.. change::
-    :tags: bug, orm
-    :tickets: 4836
-
-    An exception is now raised if the ORM loads a row for a polymorphic
-    instance that has a primary key but the discriminator column is NULL, as
-    discriminator columns should not be null.
-
-
diff --git a/doc/build/changelog/unreleased_14/4846.rst b/doc/build/changelog/unreleased_14/4846.rst
deleted file mode 100644 (file)
index fda25fd..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-.. change::
-    :tags: deprecated, engine
-    :tickets: 4846
-
-    "Implicit autocommit", which is the COMMIT that occurs when a DML or DDL
-    statement is emitted on a connection, is deprecated and won't be part of
-    SQLAlchemy 2.0.   A 2.0-style warning is emitted when autocommit takes
-    effect, so that the calling code may be adjusted to use an explicit
-    transaction.
-
-    As part of this change, DDL methods such as
-    :meth:`_schema.MetaData.create_all` when used against an
-    :class:`_engine.Engine` will run the operation in a BEGIN block if one is
-    not started already.
-
-    .. seealso::
-
-        :ref:`deprecation_20_mode`
-
diff --git a/doc/build/changelog/unreleased_14/4857.rst b/doc/build/changelog/unreleased_14/4857.rst
deleted file mode 100644 (file)
index 57ad8d0..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-.. change::
-    :tags: usecase, oracle
-    :tickets: 4857
-
-    The max_identifier_length for the Oracle dialect is now 128 characters by
-    default, unless compatibility version less than 12.2 upon first connect, in
-    which case the legacy length of 30 characters is used.  This is a
-    continuation of the issue as committed to the 1.3 series which adds max
-    identifier length detection upon first connect as well as warns for the
-    change in Oracle server.
-
-    .. seealso::
-
-        :ref:`oracle_max_identifier_lengths` - in the Oracle dialect documentation
-
diff --git a/doc/build/changelog/unreleased_14/4868.rst b/doc/build/changelog/unreleased_14/4868.rst
deleted file mode 100644 (file)
index 49a79b7..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-.. change::
-    :tags: change, sql
-    :tickets: 4868
-
-    Added a core :class:`Values` object that enables a VALUES construct
-    to be used in the FROM clause of an SQL statement for databases that
-    support it (mainly PostgreSQL and SQL Server).
diff --git a/doc/build/changelog/unreleased_14/4877.rst b/doc/build/changelog/unreleased_14/4877.rst
deleted file mode 100644 (file)
index 843888f..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.. change::
-    :tags: deprecated, engine
-    :tickets: 4877
-
-    Deprecated the behavior by which a :class:`_schema.Column` can be used as the key
-    in a result set row lookup, when that :class:`_schema.Column` is not part of the
-    SQL selectable that is being selected; that is, it is only matched on name.
-    A deprecation warning is now emitted for this case.   Various ORM use
-    cases, such as those involving :func:`_expression.text` constructs, have been improved
-    so that this fallback logic is avoided in most cases.
-
diff --git a/doc/build/changelog/unreleased_14/4878.rst b/doc/build/changelog/unreleased_14/4878.rst
deleted file mode 100644 (file)
index 2376475..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.. change::
-    :tags: deprecated, engine
-    :tickets: 4878
-
-    The :paramref:`.case_sensitive` flag on :func:`_sa.create_engine` is
-    deprecated; this flag was part of the transition of the result row object
-    to allow case sensitive column matching as the default, while providing
-    backwards compatibility for the former matching method.   All string access
-    for a row should be assumed to be case sensitive just like any other Python
-    mapping.
-
diff --git a/doc/build/changelog/unreleased_14/4887.rst b/doc/build/changelog/unreleased_14/4887.rst
deleted file mode 100644 (file)
index c0b410f..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-.. change::
-    :tags: bug, sql
-    :tickets: 4887
-
-    Custom functions that are created as subclasses of
-    :class:`.FunctionElement` will now generate an "anonymous label" based on
-    the "name" of the function just like any other :class:`.Function` object,
-    e.g. ``"SELECT myfunc() AS myfunc_1"``. While SELECT statements no longer
-    require labels in order for the result proxy object to function, the ORM
-    still targets columns in rows by using objects as mapping keys, which works
-    more reliably when the column expressions have distinct names.  In any
-    case, the behavior is  now made consistent between functions generated by
-    :attr:`.func` and those generated as custom :class:`.FunctionElement`
-    objects.
-
-
-.. change::
-    :tags: usecase, extensions
-    :tickets: 4887
-
-    Custom compiler constructs created using the :mod:`sqlalchemy.ext.compiled`
-    extension will automatically add contextual information to the compiler
-    when a custom construct is interpreted as an element in the columns
-    clause of a SELECT statement, such that the custom element will be
-    targetable as a key in result row mappings, which is the kind of targeting
-    that the ORM uses in order to match column elements into result tuples.
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/4895.rst b/doc/build/changelog/unreleased_14/4895.rst
deleted file mode 100644 (file)
index 873b11f..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-.. change::
-    :tags: change, sqlite
-    :tickets: 4895
-
-    Dropped support for right-nested join rewriting to support old SQLite
-    versions prior to 3.7.16, released in 2013.   It is expected that
-    all modern Python versions among those now supported should all include
-    much newer versions of SQLite.
-
-    .. seealso::
-
-        :ref:`change_4895`
-
diff --git a/doc/build/changelog/unreleased_14/4914.rst b/doc/build/changelog/unreleased_14/4914.rst
deleted file mode 100644 (file)
index 49ad919..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-.. change::
-    :tags: usecase, postgresql
-    :tickets: 4914
-
-    The maximum buffer size for the :class:`.BufferedRowResultProxy`, which
-    is used by dialects such as PostgreSQL when ``stream_results=True``, can
-    now be set to a number greater than 1000 and the buffer will grow to
-    that size.  Previously, the buffer would not go beyond 1000 even if the
-    value were set larger.   The growth of the buffer is also now based
-    on a simple multiplying factor currently set to 5.  Pull request courtesy
-    Soumaya Mauthoor.
-
diff --git a/doc/build/changelog/unreleased_14/4966.rst b/doc/build/changelog/unreleased_14/4966.rst
deleted file mode 100644 (file)
index e24ccbf..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-.. change::
-    :tags: usecase, mssql, postgresql
-    :tickets: 4966
-
-    Added support for inspection / reflection of partial indexes / filtered
-    indexes, i.e. those which use the ``mssql_where`` or ``postgresql_where``
-    parameters, with :class:`_schema.Index`.   The entry is both part of the
-    dictionary returned by :meth:`.Inspector.get_indexes` as well as part of a
-    reflected :class:`_schema.Index` construct that was reflected.  Pull
-    request courtesy Ramon Williams.
diff --git a/doc/build/changelog/unreleased_14/4971.rst b/doc/build/changelog/unreleased_14/4971.rst
deleted file mode 100644 (file)
index 13eb73c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-.. change::
-    :tags: bug, oracle
-    :tickets: 4971
-
-    The :class:`_oracle.INTERVAL` class of the Oracle dialect is now correctly
-    a subclass of the abstract version of :class:`.Interval` as well as the
-    correct "emulated" base class, which allows for correct behavior under both
-    native and non-native modes; previously it was only based on
-    :class:`.TypeEngine`.
-
diff --git a/doc/build/changelog/unreleased_14/4976.rst b/doc/build/changelog/unreleased_14/4976.rst
deleted file mode 100644 (file)
index 520e6b7..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-.. change::
-    :tags: mysql, usecase
-    :tickets: 4976
-
-    Added support for use of the :class:`.Sequence` construct with MariaDB 10.3
-    and greater, as this is now supported by this database.  The construct
-    integrates with the :class:`_schema.Table` object in the same way that it does for
-    other databases like PostgreSQL and Oracle; if is present on the integer
-    primary key "autoincrement" column, it is used to generate defaults.   For
-    backwards compatibility, to support a :class:`_schema.Table` that has a
-    :class:`.Sequence` on it to support sequence only databases like Oracle,
-    while still not having the sequence fire off for MariaDB, the optional=True
-    flag should be set, which indicates the sequence should only be used to
-    generate the primary key if the target database offers no other option.
-
-    .. seealso::
-
-        :ref:`change_4976`
-
diff --git a/doc/build/changelog/unreleased_14/4980.rst b/doc/build/changelog/unreleased_14/4980.rst
deleted file mode 100644 (file)
index 715cbd0..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.. change::
-    :tags: bug, mssql
-    :tickets: 4980
-
-    Fixed the base class of the :class:`_mssql.DATETIMEOFFSET` datatype to
-    be based on the :class:`.DateTime` class hierarchy, as this is a
-    datetime-holding datatype.
-
diff --git a/doc/build/changelog/unreleased_14/4994.rst b/doc/build/changelog/unreleased_14/4994.rst
deleted file mode 100644 (file)
index 8d19063..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-.. change::
-    :tags: bug, orm
-    :tickets: 4994
-
-    An error is raised if any persistence-related "cascade" settings are made
-    on a :func:`_orm.relationship` that also sets up viewonly=True.   The "cascade"
-    settings now default to non-persistence related settings only when viewonly
-    is also set.  This is the continuation from :ticket:`4993` where this
-    setting was changed to emit a warning in 1.3.
-
-    .. seealso::
-
-        :ref:`change_4994`
-
-
diff --git a/doc/build/changelog/unreleased_14/5001.rst b/doc/build/changelog/unreleased_14/5001.rst
deleted file mode 100644 (file)
index c4e170d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-.. change::
-    :tags: bug, sql
-    :tickets: 5001
-
-    Fixed issue where when constructing constraints from ORM-bound columns,
-    primarily :class:`_schema.ForeignKey` objects but also :class:`.UniqueConstraint`,
-    :class:`.CheckConstraint` and others, the ORM-level
-    :class:`.InstrumentedAttribute` is discarded entirely, and all ORM-level
-    annotations from the columns are removed; this is so that the constraints
-    are still fully pickleable without the ORM-level entities being pulled in.
-    These annotations are not necessary to be present at the schema/metadata
-    level.
diff --git a/doc/build/changelog/unreleased_14/5004.rst b/doc/build/changelog/unreleased_14/5004.rst
deleted file mode 100644 (file)
index a13a9a7..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-.. change::
-    :tags: bug, engine
-    :tickets: 5004
-
-    Revised the :paramref:`.Connection.execution_options.schema_translate_map`
-    feature such that the processing of the SQL statement to receive a specific
-    schema name occurs within the execution phase of the statement, rather than
-    at the compile phase.   This is to support the statement being efficiently
-    cached.   Previously, the current schema being rendered into the statement
-    for a particular run would be considered as part of the cache key itself,
-    meaning that for a run against hundreds of schemas, there would be hundreds
-    of cache keys, rendering the cache much less performant.  The new behavior
-    is that the rendering is done in a similar  manner as the "post compile"
-    rendering added in 1.4 as part of :ticket:`4645`, :ticket:`4808`.
diff --git a/doc/build/changelog/unreleased_14/5010.rst b/doc/build/changelog/unreleased_14/5010.rst
deleted file mode 100644 (file)
index 6b5c155..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.. change::
-    :tags: deprecated, sql
-    :tickets: 5010
-
-    The :meth:`_sql.Join.alias` method is deprecated and will be removed in
-    SQLAlchemy 2.0.   An explicit select + subquery, or aliasing of the inner
-    tables, should be used instead.
-
diff --git a/doc/build/changelog/unreleased_14/5018.rst b/doc/build/changelog/unreleased_14/5018.rst
deleted file mode 100644 (file)
index 355bb1c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-.. change::
-    :tags: usecase, orm
-    :tickets: 5018, 3903
-
-    The ORM bulk update and delete operations, historically available via the
-    :meth:`_orm.Query.update` and :meth:`_orm.Query.delete` methods as well as
-    via the :class:`_dml.Update` and :class:`_dml.Delete` constructs for
-    :term:`2.0 style` execution, will now automatically accommodate for the
-    additional WHERE criteria needed for a single-table inheritance
-    discriminator in order to limit the statement to rows referring to the
-    specific subtype requested.   The new :func:`_orm.with_loader_criteria`
-    construct is also supported for with bulk update/delete operations.
diff --git a/doc/build/changelog/unreleased_14/5027.rst b/doc/build/changelog/unreleased_14/5027.rst
deleted file mode 100644 (file)
index d5663b6..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-.. change::
-    :tags: feature, orm
-    :tickets: 5027
-
-    Added support for direct mapping of Python classes that are defined using
-    the Python ``dataclasses`` decorator.    Pull request courtesy Václav
-    Klusák.  The new feature integrates into new support at the Declarative
-    level for systems such as ``dataclasses`` and ``attrs``.
-
-    .. seealso::
-
-        :ref:`change_5027`
-
-        :ref:`change_5508`
-
diff --git a/doc/build/changelog/unreleased_14/5054.rst b/doc/build/changelog/unreleased_14/5054.rst
deleted file mode 100644 (file)
index cf4aafe..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-.. change::
-    :tags: bug, sql
-    :tickets: 5054
-
-    Creating an :func:`.and_` or :func:`.or_` construct with no arguments or
-    empty ``*args`` will now emit a deprecation warning, as the SQL produced is
-    a no-op (i.e. it renders as a blank string). This behavior is considered to
-    be non-intuitive, so for empty or possibly empty :func:`.and_` or
-    :func:`.or_` constructs, an appropriate default boolean should be included,
-    such as ``and_(True, *args)`` or ``or_(False, *args)``.   As has been the
-    case for many major versions of SQLAlchemy, these particular boolean
-    values will not render if the ``*args`` portion is non-empty.
diff --git a/doc/build/changelog/unreleased_14/5074.rst b/doc/build/changelog/unreleased_14/5074.rst
deleted file mode 100644 (file)
index 3159ade..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-.. change::
-    :tags: bug, orm
-    :tickets: 5074
-
-    The :class:`.Session` object no longer initiates a
-    :class:`.SessionTransaction` object immediately upon construction or after
-    the previous transaction is closed; instead, "autobegin" logic now
-    initiates the new :class:`.SessionTransaction` on demand when it is next
-    needed.  Rationale includes to remove reference cycles from a
-    :class:`.Session` that has been closed out, as well as to remove the
-    overhead incurred by the creation of :class:`.SessionTransaction` objects
-    that are often discarded immediately. This change affects the behavior of
-    the :meth:`.SessionEvents.after_transaction_create` hook in that the event
-    will be emitted when the :class:`.Session` first requires a
-    :class:`.SessionTransaction` be present, rather than whenever the
-    :class:`.Session` were created or the previous :class:`.SessionTransaction`
-    were closed.   Interactions with the :class:`_engine.Engine` and the database
-    itself remain unaffected.
-
-    .. seealso::
-
-        :ref:`change_5074`
-
diff --git a/doc/build/changelog/unreleased_14/5084.rst b/doc/build/changelog/unreleased_14/5084.rst
deleted file mode 100644 (file)
index 97b44ae..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.. change::
-    :tags: change, mssql
-    :tickets: 5084
-
-    SQL Server OFFSET and FETCH keywords are now used for limit/offset, rather
-    than using a window function, for SQL Server versions 11 and higher. TOP is
-    still used for a query that features only LIMIT.   Pull request courtesy
-    Elkin.
diff --git a/doc/build/changelog/unreleased_14/5094.rst b/doc/build/changelog/unreleased_14/5094.rst
deleted file mode 100644 (file)
index 21cd2ca..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-.. change::
-    :tags: removed, platform
-    :tickets: 5094
-
-    Removed all dialect code related to support for Jython and zxJDBC. Jython
-    has not been supported by SQLAlchemy for many years and it is not expected
-    that the current zxJDBC code is at all functional; for the moment it just
-    takes up space and adds confusion by showing up in documentation. At the
-    moment, it appears that Jython has achieved Python 2.7 support in its
-    releases but not Python 3.   If Jython were to be supported again, the form
-    it should take is against the Python 3 version of Jython, and the various
-    zxJDBC stubs for various backends should be implemented as a third party
-    dialect.
-
diff --git a/doc/build/changelog/unreleased_14/5122.rst b/doc/build/changelog/unreleased_14/5122.rst
deleted file mode 100644 (file)
index fbc7397..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-.. change::
-    :tags: bug, orm
-    :tickets: 5122
-
-    A query that is against a mapped inheritance subclass which also uses
-    :meth:`_query.Query.select_entity_from` or a similar technique in order  to
-    provide an existing subquery to SELECT from, will now raise an error if the
-    given subquery returns entities that do not correspond to the given
-    subclass, that is, they are sibling or superclasses in the same hierarchy.
-    Previously, these would be returned without error.  Additionally, if the
-    inheritance mapping is a single-inheritance mapping, the given subquery
-    must apply the appropriate filtering against the polymorphic discriminator
-    column in order to avoid this error; previously, the :class:`_query.Query` would
-    add this criteria to the outside query however this interferes with some
-    kinds of query that return other kinds of entities as well.
-
-    .. seealso::
-
-        :ref:`change_5122`
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/5127.rst b/doc/build/changelog/unreleased_14/5127.rst
deleted file mode 100644 (file)
index 94e5846..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-.. change::
-    :tags: bug, sql
-    :tickets: 5127
-
-    Improved the :func:`_sql.tuple_` construct such that it behaves predictably
-    when used in a columns-clause context.  The SQL tuple is not supported as a
-    "SELECT" columns clause element on most backends; on those that do
-    (PostgreSQL, not surprisingly), the Python DBAPI does not have a "nested
-    type" concept so there are still challenges in fetching rows for such an
-    object. Use of :func:`_sql.tuple_` in a :func:`_sql.select` or
-    :class:`_orm.Query` will now raise a :class:`_exc.CompileError` at the
-    point at which the :func:`_sql.tuple_` object is seen as presenting itself
-    for fetching rows (i.e., if the tuple is in the columns clause of a
-    subquery, no error is raised).  For ORM use,the :class:`_orm.Bundle` object
-    is an explicit directive that a series of columns should be returned as a
-    sub-tuple per row and is suggested by the error message. Additionally ,the
-    tuple will now render with parenthesis in all contexts. Previously, the
-    parenthesization would not render in a columns context leading to
-    non-defined behavior.
diff --git a/doc/build/changelog/unreleased_14/5131.rst b/doc/build/changelog/unreleased_14/5131.rst
deleted file mode 100644 (file)
index 9430437..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.. change::
-    :tags: deprecated, engine
-    :tickets: 5131
-
-    The :meth:`_engine.Connection.connect` method is deprecated as is the concept of
-    "connection branching", which copies a :class:`_engine.Connection` into a new one
-    that has a no-op ".close()" method.  This pattern is oriented around the
-    "connectionless execution" concept which is also being removed in 2.0.
diff --git a/doc/build/changelog/unreleased_14/5134.rst b/doc/build/changelog/unreleased_14/5134.rst
deleted file mode 100644 (file)
index 3376d65..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.. change::
-    :tags: orm, deprecated
-    :tickets: 5134
-
-    Deprecated logic in :meth:`_query.Query.distinct` that automatically adds
-    columns in the ORDER BY clause to the columns clause; this will be removed
-    in 2.0.
-
-    .. seealso::
-
-        :ref:`migration_20_query_distinct`
diff --git a/doc/build/changelog/unreleased_14/5150.rst b/doc/build/changelog/unreleased_14/5150.rst
deleted file mode 100644 (file)
index 1d72185..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-.. change::
-    :tags: bug, orm
-    :tickets: 5150
-
-    The behavior of the :paramref:`_orm.relationship.cascade_backrefs` flag
-    will be reversed in 2.0 and set to ``False`` unconditionally, such that
-    backrefs don't cascade save-update operations from a forwards-assignment to
-    a backwards assignment.   A 2.0 deprecation warning is emitted when the
-    parameter is left at its default of ``True`` at the point at which such a
-    cascade operation actually takes place.   The new behavior can be
-    established as always by setting the flag to ``False`` on a specific
-    :func:`_orm.relationship`, or more generally can be set up across the board
-    by setting the the :paramref:`_orm.Session.future` flag to True.
-
-    .. seealso::
-
-        :ref:`change_5150`
diff --git a/doc/build/changelog/unreleased_14/5159.rst b/doc/build/changelog/unreleased_14/5159.rst
deleted file mode 100644 (file)
index faff0e2..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-.. change::
-    :tags: feature, orm
-    :tickets: 5159
-
-    The ORM can now generate queries previously only available when using
-    :class:`_orm.Query` using the :func:`_sql.select` construct directly.
-    A new system by which ORM "plugins" may establish themselves within a
-    Core :class:`_sql.Select` allow the majority of query building logic
-    previously inside of :class:`_orm.Query` to now take place within
-    a compilation-level extension for :class:`_sql.Select`.  Similar changes
-    have been made for the :class:`_sql.Update` and :class:`_sql.Delete`
-    constructs as well.  The constructs when invoked using :meth:`_orm.Session.execute`
-    now do ORM-related work within the method. For :class:`_sql.Select`,
-    the :class:`_engine.Result` object returned now contains ORM-level
-    entities and results.
-
-    .. seealso::
-
-        :ref:`change_5159`
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/5171.rst b/doc/build/changelog/unreleased_14/5171.rst
deleted file mode 100644 (file)
index 5082e4b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-.. change::
-    :tags: usecase, orm
-    :tickets: 5171
-
-    Enhanced logic that tracks if relationships will be conflicting with each
-    other when they write to the same column to include simple cases of two
-    relationships that should have a "backref" between them.   This means that
-    if two relationships are not viewonly, are not linked with back_populates
-    and are not otherwise in an inheriting sibling/overriding arrangement, and
-    will populate the same foreign key column, a warning is emitted at mapper
-    configuration time warning that a conflict may arise.  A new parameter
-    :paramref:`_orm.relationship.overlaps` is added to suit those very rare cases
-    where such an overlapping persistence arrangement may be unavoidable.
-
diff --git a/doc/build/changelog/unreleased_14/5189.rst b/doc/build/changelog/unreleased_14/5189.rst
deleted file mode 100644 (file)
index 11dc609..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-.. change::
-    :tags: firebird, deprecated
-    :tickets: 5189
-
-    The Firebird dialect is deprecated, as there is now a 3rd party
-    dialect that supports this database.
-
-.. change::
-    :tags: misc, deprecated
-    :tickets: 5189
-
-    The Sybase dialect is deprecated.
-
-
-.. change::
-    :tags: mssql, deprecated
-    :tickets: 5189
-
-    The adodbapi and mxODBC dialects are deprecated.
-
-
-.. change::
-    :tags: mysql, deprecated
-    :tickets: 5189
-
-    The OurSQL dialect is deprecated.
-
-.. change::
-    :tags: postgresql, deprecated
-    :tickets: 5189
-
-    The pygresql and py-postgresql dialects are deprecated.
diff --git a/doc/build/changelog/unreleased_14/5191.rst b/doc/build/changelog/unreleased_14/5191.rst
deleted file mode 100644 (file)
index 7d86f53..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.. change::
-    :tags: sql, usecase
-    :tickets: 5191
-
-    Change the method ``__str`` of :class:`ColumnCollection` to avoid
-    confusing it with a python list of string.
diff --git a/doc/build/changelog/unreleased_14/5192.rst b/doc/build/changelog/unreleased_14/5192.rst
deleted file mode 100644 (file)
index f71d602..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.. change::
-    :tags: orm, deprecated
-    :tickets: 5192
-
-    The :func:`.eagerload` and :func:`.relation` were old aliases and are
-    now deprecated. Use :func:`_orm.joinedload` and :func:`_orm.relationship`
-    respectively.
-
diff --git a/doc/build/changelog/unreleased_14/5221.rst b/doc/build/changelog/unreleased_14/5221.rst
deleted file mode 100644 (file)
index 869c589..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-.. change::
-    :tags: feature, sql
-    :tickets: 5221
-
-    Enhanced the disambiguating labels feature of the
-    :func:`_expression.select` construct such that when a select statement
-    is used in a subquery, repeated column names from different tables are now
-    automatically labeled with a unique label name, without the need to use the
-    full "apply_labels()" feature that combines tablename plus column name.
-    The disambiguated labels are available as plain string keys in the .c
-    collection of the subquery, and most importantly the feature allows an ORM
-    :func:`_orm.aliased` construct against the combination of an entity and an
-    arbitrary subquery to work correctly, targeting the correct columns despite
-    same-named columns in the source tables, without the need for an "apply
-    labels" warning.
-
-
-    .. seealso::
-
-        :ref:`migration_20_query_from_self` - Illustrates the new
-        disambiguation feature as part of a strategy to migrate away from the
-        :meth:`_query.Query.from_self` method.
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/5226.rst b/doc/build/changelog/unreleased_14/5226.rst
deleted file mode 100644 (file)
index 1436d7b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-.. change::
-    :tags: bug, orm
-    :tickets: 5226
-
-    The refresh of an expired object will now trigger an autoflush if the list
-    of expired attributes include one or more attributes that were explicitly
-    expired or refreshed using the :meth:`.Session.expire` or
-    :meth:`.Session.refresh` methods.   This is an attempt to find a middle
-    ground between the normal unexpiry of attributes that can happen in many
-    cases where autoflush is not desirable, vs. the case where attributes are
-    being explicitly expired or refreshed and it is possible that these
-    attributes depend upon other pending state within the session that needs to
-    be flushed.   The two methods now also gain a new flag
-    :paramref:`.Session.expire.autoflush` and
-    :paramref:`.Session.refresh.autoflush`, defaulting to True; when set to
-    False, this will disable the autoflush that occurs on unexpire for these
-    attributes.
diff --git a/doc/build/changelog/unreleased_14/5237.rst b/doc/build/changelog/unreleased_14/5237.rst
deleted file mode 100644 (file)
index 2a1e5a3..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-.. change::
-    :tags: orm, usecase
-    :tickets: 5237
-
-    Update :paramref:`_orm.relationship.sync_backref` flag in a relationship
-    to make it implicitly ``False`` in ``viewonly=True`` relationships,
-    preventing synchronization events.
-
-
-    .. seealso::
-
-        :ref:`change_5237_14`
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/5244.rst b/doc/build/changelog/unreleased_14/5244.rst
deleted file mode 100644 (file)
index 4ffb330..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.. change::
-    :tags: renamed, engine
-    :tickets: 5244
-
-    The :meth:`_reflection.Inspector.reflecttable` was renamed to
-    :meth:`_reflection.Inspector.reflect_table`.
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/5263.rst b/doc/build/changelog/unreleased_14/5263.rst
deleted file mode 100644 (file)
index 4b8af30..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-.. change::
-    :tags: orm, performance, postgresql
-    :tickets: 5263
-
-    Implemented support for the psycopg2 ``execute_values()`` extension
-    within the ORM flush process via the enhancements to Core made
-    in :ticket:`5401`, so that this extension is used
-    both as a strategy to batch INSERT statements together as well as
-    that RETURNING may now be used among multiple parameter sets to
-    retrieve primary key values back in batch.   This allows nearly
-    all INSERT statements emitted by the ORM on behalf of PostgreSQL
-    to be submitted in batch and also via the ``execute_values()``
-    extension which benches at five times faster than plain
-    executemany() for this particular backend.
-
-    .. seealso::
-
-        :ref:`change_5263`
diff --git a/doc/build/changelog/unreleased_14/527.rst b/doc/build/changelog/unreleased_14/527.rst
deleted file mode 100644 (file)
index 22d0c63..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-.. change::
-    :tags: usecase, sql
-    :tickets: 527
-
-    The :meth:`.Index.create` and :meth:`.Index.drop` methods now have a
-    parameter :paramref:`.Index.create.checkfirst`, in the same way as that of
-    :class:`_schema.Table` and :class:`.Sequence`, which when enabled will cause the
-    operation to detect if the index exists (or not) before performing a create
-    or drop operation.
-
diff --git a/doc/build/changelog/unreleased_14/5284.rst b/doc/build/changelog/unreleased_14/5284.rst
deleted file mode 100644 (file)
index 379036e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-.. change::
-    :tags: change, sql
-    :tickets: 5284
-
-    The :func:`_expression.select` construct is moving towards a new calling
-    form that is ``select(col1, col2, col3, ..)``, with all other keyword
-    arguments removed, as these are all suited using generative methods.    The
-    single list of column or table arguments passed to ``select()`` is still
-    accepted, however is no longer necessary if expressions are passed in a
-    simple positional style.   Other keyword arguments are disallowed when this
-    form is used.
-
-
-    .. seealso::
-
-        :ref:`change_5284`
diff --git a/doc/build/changelog/unreleased_14/5315.rst b/doc/build/changelog/unreleased_14/5315.rst
deleted file mode 100644 (file)
index ff0073c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-.. change::
-    :tags: change, performance, engine, py3k
-    :tickets: 5315
-
-    Disabled the "unicode returns" check that runs on dialect startup when
-    running under Python 3, which for many years has occurred in order to test
-    the current DBAPI's behavior for whether or not it returns Python Unicode
-    or Py2K strings for the VARCHAR and NVARCHAR datatypes.  The check still
-    occurs by default under Python 2, however the mechanism to test the
-    behavior will be removed in SQLAlchemy 2.0 when Python 2 support is also
-    removed.
-
-    This logic was very effective when it was needed, however now that Python 3
-    is standard, all DBAPIs are expected to return Python 3 strings for
-    character datatypes.  In the unlikely case that a third party DBAPI does
-    not support this, the conversion logic within :class:`.String` is still
-    available and the third party dialect may specify this in its upfront
-    dialect flags by setting the dialect level flag ``returns_unicode_strings``
-    to one of :attr:`.String.RETURNS_CONDITIONAL` or
-    :attr:`.String.RETURNS_BYTES`, both of which will enable Unicode conversion
-    even under Python 3.
diff --git a/doc/build/changelog/unreleased_14/5362.rst b/doc/build/changelog/unreleased_14/5362.rst
deleted file mode 100644 (file)
index 1f9fa89..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-.. change::
-    :tags: schema, sql
-    :tickets: 5362, 5324, 5360
-
-    Added the :class:`_schema.Identity` construct that can be used to
-    configure identity columns rendered with GENERATED { ALWAYS |
-    BY DEFAULT } AS IDENTITY. Currently the supported backends are
-    PostgreSQL >= 10, Oracle >= 12 and MSSQL (with different syntax
-    and a subset of functionalities).
diff --git a/doc/build/changelog/unreleased_14/5367.rst b/doc/build/changelog/unreleased_14/5367.rst
deleted file mode 100644 (file)
index 084e22c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.. change::
-    :tags: change, schema
-    :tickets: 5367
-
-    The :paramref:`.Enum.create_constraint` and
-    :paramref:`.Boolean.create_constraint` parameters now default to False,
-    indicating when a so-called "non-native" version of these two datatypes is
-    created, a CHECK constraint will not be generated by default.   These CHECK
-    constraints present schema-management maintenance complexities that should
-    be opted in to, rather than being turned on by default.
-
diff --git a/doc/build/changelog/unreleased_14/5380.rst b/doc/build/changelog/unreleased_14/5380.rst
deleted file mode 100644 (file)
index 09eab78..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-.. change::
-    :tags: feature, sql
-    :tickets: 5380
-
-    Along with the new transparent statement caching feature introduced as part
-    of :ticket:`4369`, a new feature intended to decrease the Python overhead
-    of creating statements is added, allowing lambdas to be used when
-    indicating arguments being passed to a statement object such as select(),
-    Query(), update(), etc., as well as allowing the construction of full
-    statements within lambdas in a similar manner as that of the "baked query"
-    system.   The rationale of using lambdas is adapted from that of the "baked
-    query" approach which uses lambdas to encapsulate any amount of Python code
-    into a callable that only needs to be called when the statement is first
-    constructed into a string.  The new feature however is more sophisticated
-    in that Python literal values that would be passed as parameters are
-    automatically extracted, so that there is no longer a need to use
-    bindparam() objects with such queries.   Use of the feature is optional and
-    can be used to as small or as great a degree as is desired, while still
-    allowing statements to be fully cacheable.
-
-    .. seealso::
-
-        :ref:`engine_lambda_caching`
-
diff --git a/doc/build/changelog/unreleased_14/5400.rst b/doc/build/changelog/unreleased_14/5400.rst
deleted file mode 100644 (file)
index dbf2955..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-.. change::
-    :tags: change, platform
-    :tickets: 5400
-
-    The ``importlib_metadata`` library is used to scan for setuptools
-    entrypoints rather than pkg_resources.   as importlib_metadata is a small
-    library that is included as of Python 3.8, the compatibility library is
-    installed as a dependency for Python versions older than 3.8.
-
diff --git a/doc/build/changelog/unreleased_14/5401.rst b/doc/build/changelog/unreleased_14/5401.rst
deleted file mode 100644 (file)
index aa85511..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-.. change::
-    :tags: performance, postgresql
-    :tickets: 5401
-
-    The psycopg2 dialect now defaults to using the very performant
-    ``execute_values()`` psycopg2 extension for compiled INSERT statements,
-    and also implements RETURNING support when this extension is used.  This
-    allows INSERT statements that even include an autoincremented SERIAL
-    or IDENTITY value to run very fast while still being able to return the
-    newly generated primary key values.   The ORM will then integrate this
-    new feature in a separate change.
-
-    .. seealso::
-
-        :ref:`change_5401` - full list of changes regarding the
-        ``executemany_mode`` parameter.
-
diff --git a/doc/build/changelog/unreleased_14/5404.rst b/doc/build/changelog/unreleased_14/5404.rst
deleted file mode 100644 (file)
index cad62bc..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.. change::
-    :tags: change, platform
-    :tickets: 5404
-
-    Installation has been modernized to use setup.cfg for most package
-    metadata.
diff --git a/doc/build/changelog/unreleased_14/5413.rst b/doc/build/changelog/unreleased_14/5413.rst
deleted file mode 100644 (file)
index d980380..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-.. change::
-   :tags: renamed, schema
-   :tickets: 5413
-
-   Renamed the :meth:`_schema.Table.tometadata` method to
-   :meth:`_schema.Table.to_metadata`.  The previous name remains with a
-   deprecation warning.
diff --git a/doc/build/changelog/unreleased_14/5435.rst b/doc/build/changelog/unreleased_14/5435.rst
deleted file mode 100644 (file)
index a4950d4..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-.. change::
-    :tags: renamed, sql
-    :tickets: 5435, 5429
-
-    Several operators are renamed to achieve more consistent naming across
-    SQLAlchemy.
-
-    The operator changes are:
-
-    * ``isfalse`` is now ``is_false``
-    * ``isnot_distinct_from`` is now ``is_not_distinct_from``
-    * ``istrue`` is now ``is_true``
-    * ``notbetween`` is now ``not_between``
-    * ``notcontains`` is now ``not_contains``
-    * ``notendswith`` is now ``not_endswith``
-    * ``notilike`` is now ``not_ilike``
-    * ``notlike`` is now ``not_like``
-    * ``notmatch`` is now ``not_match``
-    * ``notstartswith`` is now ``not_startswith``
-    * ``nullsfirst`` is now ``nulls_first``
-    * ``nullslast`` is now ``nulls_last``
-    * ``isnot`` is now ``is_not``
-    * ``not_in_`` is now ``not_in``
-
-    Because these are core operators, the internal migration strategy for this
-    change is to support legacy terms for an extended period of time -- if not
-    indefinitely -- but update all documentation, tutorials, and internal usage
-    to the new terms.  The new terms are used to define the functions, and
-    the legacy terms have been deprecated into aliases of the new terms.
-
-
diff --git a/doc/build/changelog/unreleased_14/5459.rst b/doc/build/changelog/unreleased_14/5459.rst
deleted file mode 100644 (file)
index e5c22ab..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.. change::
-    :tags: mysql, feature
-    :tickets: 5459
-
-    Added support for MariaDB Connector/Python to the mysql dialect. Original
-    pull request courtesy Georg Richter.
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/5496.rst b/doc/build/changelog/unreleased_14/5496.rst
deleted file mode 100644 (file)
index 0183782..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-.. change::
-    :tags: usecase, mysql
-    :tickets: 5496
-
-    Added a new dialect token "mariadb" that may be used in place of "mysql" in
-    the :func:`_sa.create_engine` URL.  This will deliver a MariaDB dialect
-    subclass of the MySQLDialect in use that forces the "is_mariadb" flag to
-    True.  The dialect will raise an error if a server version string that does
-    not indicate MariaDB in use is received.   This is useful for
-    MariaDB-specific testing scenarios as well as to support applications that
-    are hardcoding to MariaDB-only concepts.  As MariaDB and MySQL featuresets
-    and usage patterns continue to diverge, this pattern may become more
-    prominent.
-
diff --git a/doc/build/changelog/unreleased_14/5497.rst b/doc/build/changelog/unreleased_14/5497.rst
deleted file mode 100644 (file)
index 0cc639c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.. change::
-    :tags: engine, bug
-    :tickets: 5497
-
-    Adjusted the dialect initialization process such that the
-    :meth:`_engine.Dialect.on_connect` is not called a second time
-    on the first connection.   The hook is called first, then the
-    :meth:`_engine.Dialect.initialize` is called if that connection is the
-    first for that dialect, then no more events are called.   This eliminates
-    the two calls to the "on_connect" function which can produce very
-    difficult debugging situations.
diff --git a/doc/build/changelog/unreleased_14/5498.rst b/doc/build/changelog/unreleased_14/5498.rst
deleted file mode 100644 (file)
index d3eb848..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.. change::
-    :tags: sql, postgresql
-    :tickets: 5498
-
-    Allow specifying the data type when creating a :class:`.Sequence` in
-    PostgreSQL by using the parameter :paramref:`.Sequence.data_type`.
diff --git a/doc/build/changelog/unreleased_14/5506.rst b/doc/build/changelog/unreleased_14/5506.rst
deleted file mode 100644 (file)
index 1614efe..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-.. change::
-    :tags: usecase, mssql, reflection
-    :tickets: 5506
-
-    Added support for reflection of temporary tables with the SQL Server dialect.
-    Table names that are prefixed by a pound sign "#" are now introspected from
-    the MSSQL "tempdb" system catalog.
diff --git a/doc/build/changelog/unreleased_14/5508.rst b/doc/build/changelog/unreleased_14/5508.rst
deleted file mode 100644 (file)
index 1398035..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-.. change::
-    :tags: feature, orm
-    :tickets: 5508
-
-    The ORM Declarative system is now unified into the ORM itself, with new
-    import spaces under ``sqlalchemy.orm`` and new kinds of mappings.  Support
-    for decorator-based mappings without using a base class, support for
-    classical style-mapper() calls that have access to the declarative class
-    registry for relationships, and full integration of Declarative with 3rd
-    party class attribute systems like ``dataclasses`` and ``attrs`` is now
-    supported.
-
-    .. seealso::
-
-        :ref:`change_5508`
-
-        :ref:`change_5027`
diff --git a/doc/build/changelog/unreleased_14/5526.rst b/doc/build/changelog/unreleased_14/5526.rst
deleted file mode 100644 (file)
index 0d72ac4..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-.. change::
-    :tags: deprecated, engine
-    :tickets: 5526
-
-    The :class:`_engine.URL` object is now an immutable named tuple. To modify
-    a URL object, use the :meth:`_engine.URL.set` method to produce a new URL
-    object.
-
-    .. seealso::
-
-        :ref:`change_5526` - notes on migration
-
diff --git a/doc/build/changelog/unreleased_14/5527.rst b/doc/build/changelog/unreleased_14/5527.rst
deleted file mode 100644 (file)
index e6721df..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.. change::
-    :tags: sql, reflection
-    :tickets: 5527, 5324
-
-    Added support for reflecting "identity" columns, which are now returned
-    as part of the structure returned by :meth:`_reflection.Inspector.get_columns`.
-    When reflecting full :class:`_schema.Table` objects, identity columns will
-    be represented using the :class:`_schema.Identity` construct.
-    Currently the supported backends are
-    PostgreSQL >= 10, Oracle >= 12 and MSSQL (with different syntax
-    and a subset of functionalities).
diff --git a/doc/build/changelog/unreleased_14/5549.rst b/doc/build/changelog/unreleased_14/5549.rst
deleted file mode 100644 (file)
index a555b82..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-.. change::
-    :tags: usecase, postgresql
-    :tickets: 5549
-
-    Added support for PostgreSQL "readonly" and "deferrable" flags for all of
-    psycopg2, asyncpg and pg8000 dialects.   This takes advantage of a newly
-    generalized version of the "isolation level" API to support other kinds of
-    session attributes set via execution options that are reliably reset
-    when connections are returned to the connection pool.
-
-    .. seealso::
-
-        :ref:`postgresql_readonly_deferrable`
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/5573.rst b/doc/build/changelog/unreleased_14/5573.rst
deleted file mode 100644 (file)
index 9367c55..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-.. change::
-    :tags: deprecated, orm
-    :tickets: 5573
-
-    Passing keyword arguments to methods such as :meth:`_orm.Session.execute`
-    to be passed into the :meth:`_orm.Session.get_bind` method is deprecated;
-    the new :paramref:`_orm.Session.execute.bind_arguments` dictionary should
-    be passed instead.
-
diff --git a/doc/build/changelog/unreleased_14/5576.rst b/doc/build/changelog/unreleased_14/5576.rst
deleted file mode 100644 (file)
index a4d56bd..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-.. change::
-    :tags: usecase, sql
-    :tickets: 5576
-
-    Add support to ``FETCH {FIRST | NEXT} [ count ]
-    {ROW | ROWS} {ONLY | WITH TIES}`` in the select for the supported
-    backends, currently PostgreSQL, Oracle and MSSQL.
diff --git a/doc/build/changelog/unreleased_14/5578.rst b/doc/build/changelog/unreleased_14/5578.rst
deleted file mode 100644 (file)
index eabe939..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-.. change::
-    :tags: bug, mysql
-    :tickets: 5568
-
-    The "skip_locked" keyword used with ``with_for_update()`` will render "SKIP
-    LOCKED" on all MySQL backends, meaning it will fail for MySQL less than
-    version 8 and on current MariaDB backends.  This is because those backends
-    do not support "SKIP LOCKED" or any equivalent, so this error should not be
-    silently ignored.   This is upgraded from a warning in the 1.3 series.
-
diff --git a/doc/build/changelog/unreleased_14/5597.rst b/doc/build/changelog/unreleased_14/5597.rst
deleted file mode 100644 (file)
index ee9343b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.. change::
-    :tags: mssql, bug, schema
-    :tickets: 5597
-
-    Fixed an issue where :meth:`_reflection.has_table` always returned
-    ``False`` for temporary tables.
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/5606.rst b/doc/build/changelog/unreleased_14/5606.rst
deleted file mode 100644 (file)
index da974fb..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.. change::
-    :tags: deprecated, orm
-    :tickets: 5606
-
-    The "slice index" feature used by :class:`_orm.Query` as well as by the
-    dynamic relationship loader will no longer accept negative indexes in
-    SQLAlchemy 2.0.  These operations do not work efficiently and load the
-    entire collection in, which is both surprising and undesirable.   These
-    will warn in 1.4 unless the :paramref:`_orm.Session.future` flag is set in
-    which case they will raise IndexError.
-
diff --git a/doc/build/changelog/unreleased_14/5634.rst b/doc/build/changelog/unreleased_14/5634.rst
deleted file mode 100644 (file)
index 7f4cda3..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-.. change::
-    :tags: removed, platform
-    :tickets: 5634
-
-    Dropped support for python 3.4 and 3.5 that has reached EOL. SQLAlchemy 1.4
-    series requires python 2.7 or 3.6+.
-
-    .. seealso::
-
-        :ref:`change_5634`
diff --git a/doc/build/changelog/unreleased_14/5649.rst b/doc/build/changelog/unreleased_14/5649.rst
deleted file mode 100644 (file)
index 3b5648c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.. change::
-    :tags: feature, engine, pyodbc
-    :tickets: 5649
-
-    Reworked the "setinputsizes()" set of dialect hooks to be correctly
-    extensible for any arbirary DBAPI, by allowing dialects individual hooks
-    that may invoke cursor.setinputsizes() in the appropriate style for that
-    DBAPI.   In particular this is intended to support pyodbc's style of usage
-    which is fundamentally different from that of cx_Oracle.  Added support
-    for pyodbc.
-
diff --git a/doc/build/changelog/unreleased_14/5653.rst b/doc/build/changelog/unreleased_14/5653.rst
deleted file mode 100644 (file)
index 0722843..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.. change::
-    :tags: bug, sql, postgresql
-    :tickets: 5653
-
-    Improved support for column names that contain percent signs in the string,
-    including repaired issues involving anoymous labels that also embedded a
-    column name with a percent sign in it, as well as re-established support
-    for bound parameter names with percent signs embedded on the psycopg2
-    dialect, using a late-escaping process similar to that used by the
-    cx_Oracle dialect.
-
diff --git a/doc/build/changelog/unreleased_14/asbool_join.rst b/doc/build/changelog/unreleased_14/asbool_join.rst
deleted file mode 100644 (file)
index fbad800..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.. change::
-    :tags: usecase, sql
-
-    The :func:`.true` and :func:`.false` operators may now be applied as the
-    "onclause" of a :func:`_expression.join` on a backend that does not support
-    "native boolean" expressions, e.g. Oracle or SQL Server, and the expression
-    will render as "1=1" for true and "1=0" false.  This is the behavior that
-    was introduced many years ago in :ticket:`2804` for and/or expressions.
diff --git a/doc/build/changelog/unreleased_14/bind_removed_from_compiler.rst b/doc/build/changelog/unreleased_14/bind_removed_from_compiler.rst
deleted file mode 100644 (file)
index f453a7e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-.. change::
-    :tags: removed, sql
-
-    Removed the concept of a bound engine from the :class:`.Compiler` object,
-    and removed the ``.execute()`` and ``.scalar()`` methods from
-    :class:`.Compiler`. These were essentially forgotten methods from over a
-    decade ago and had no practical use, and it's not appropriate for the
-    :class:`.Compiler` object itself to be maintaining a reference to an
-    :class:`_engine.Engine`.
diff --git a/doc/build/changelog/unreleased_14/checks_deferred_to_compile.rst b/doc/build/changelog/unreleased_14/checks_deferred_to_compile.rst
deleted file mode 100644 (file)
index bbaeac2..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-.. change::
-    :tags: change, orm, sql
-
-    A selection of Core and ORM query objects now perform much more of their
-    Python computational tasks within the compile step, rather than at
-    construction time.  This is to support an upcoming caching model that will
-    provide for caching of the compiled statement structure based on a cache
-    key that is derived from the statement construct, which itself is expected
-    to be newly constructed in Python code each time it is used.    This means
-    that the internal state of these objects may not be the same as it used to
-    be, as well as that some but not all error raise scenarios for various
-    kinds of argument validation will occur within the compilation / execution
-    phase, rather than at statement construction time.   See the migration
-    notes linked below for complete details.
-
-    .. seealso::
-
-        :ref:`change_deferred_construction`
-
diff --git a/doc/build/changelog/unreleased_14/mssql_identity_dialect_options.rst b/doc/build/changelog/unreleased_14/mssql_identity_dialect_options.rst
deleted file mode 100644 (file)
index 8676c7d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.. change::
-    :tags: mssql, reflection
-    :tickets: 5527
-
-    As part of the support for reflecting :class:`_schema.Identity` objects,
-    the method :meth:`_reflection.Inspector.get_columns` no longer returns
-    ``mssql_identity_start`` and ``mssql_identity_increment`` as part of the
-    ``dialect_options``. Use the information in the ``identity`` key instead.
diff --git a/doc/build/changelog/unreleased_14/mssql_version.rst b/doc/build/changelog/unreleased_14/mssql_version.rst
deleted file mode 100644 (file)
index 9454cc4..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.. change::
-    :tags: mssql
-
-    The mssql dialect will assume that at least MSSQL 2005 is used.
-    There is no hard exception raised if a previous version is detected,
-    but operations may fail for older versions.
diff --git a/doc/build/changelog/unreleased_14/mysql_has_table.rst b/doc/build/changelog/unreleased_14/mysql_has_table.rst
deleted file mode 100644 (file)
index 09faa63..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-.. change::
-    :tags: bug, mysql
-
-    The MySQL and MariaDB dialects now query from the information_schema.tables
-    system view in order to determine if a particular table exists or not.
-    Previously, the "DESCRIBE" command was used with an exception catch to
-    detect non-existent,  which would have the undesirable effect of emitting a
-    ROLLBACK on the connection. There appeared to be legacy encoding issues
-    which prevented the use of "SHOW TABLES", for this, but as MySQL support is
-    now at 5.0.2  or above due to :ticket:`4189`, the information_schema tables
-    are now available in all cases.
-
diff --git a/doc/build/changelog/unreleased_14/oracle_limit.rst b/doc/build/changelog/unreleased_14/oracle_limit.rst
deleted file mode 100644 (file)
index 4caf7c3..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-.. change::
-    :tags: oracle, change
-
-    The LIMIT / OFFSET scheme used in Oracle now makes use of named subqueries
-    rather than unnamed subqueries when it transparently rewrites a SELECT
-    statement to one that uses a subquery that includes ROWNUM.  The change is
-    part of a larger change where unnamed subqueries are no longer directly
-    supported by Core, as well as to modernize the internal use of the select()
-    construct within the Oracle dialect.
-
diff --git a/doc/build/changelog/unreleased_14/oracle_sequence_options.rst b/doc/build/changelog/unreleased_14/oracle_sequence_options.rst
deleted file mode 100644 (file)
index 738958d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.. change::
-    :tags: oracle, bug
-
-    Correctly render :class:`_schema.Sequence` and :class:`_schema.Identity`
-    column options ``nominvalue`` and ``nomaxvalue`` as ``NOMAXVALUE` and
-    ``NOMINVALUE`` on oracle database.
diff --git a/doc/build/changelog/unreleased_14/orm_update_delete.rst b/doc/build/changelog/unreleased_14/orm_update_delete.rst
deleted file mode 100644 (file)
index e16ab62..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-.. change::
-    :tags: orm, performance
-
-    The bulk update and delete methods :meth:`.Query.update` and
-    :meth:`.Query.delete`, as well as their 2.0-style counterparts, now make
-    use of RETURNING when the "fetch" strategy is used in order to fetch the
-    list of affected primary key identites, rather than emitting a separate
-    SELECT, when the backend in use supports RETURNING.  Additionally, the
-    "fetch" strategy will in ordinary cases not expire the attributes that have
-    been updated, and will instead apply the updated values directly in the
-    same way that the "evaluate" strategy does, to avoid having to refresh the
-    object.   The "evaluate" strategy will also fall back to expiring
-    attributes that were updated to a SQL expression that was unevaluable in
-    Python.
-
-    .. seealso::
-
-        :ref:`change_orm_update_returning_14`
\ No newline at end of file
diff --git a/doc/build/changelog/unreleased_14/pg8000.rst b/doc/build/changelog/unreleased_14/pg8000.rst
deleted file mode 100644 (file)
index 4dd2b8a..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-.. change::
-    :tags: bug, postgresql
-
-    The pg8000 dialect has been revised and modernized for the most recent
-    version of the pg8000 driver for PostgreSQL.  Changes to the dialect
-    include:
-
-    * All data types are now sent as text rather than binary.
-
-    * Using adapters, custom types can be plugged in to pg8000.
-
-    * Previously, named prepared statements were used for all statements.
-      Now unnamed prepared statements are used by default, and named
-      prepared statements can be used explicitly by calling the
-      Connection.prepare() method, which returns a PreparedStatement
-      object.
-
-    Pull request courtesy Tony Locke.
diff --git a/doc/build/changelog/unreleased_14/psycopg2_27.rst b/doc/build/changelog/unreleased_14/psycopg2_27.rst
deleted file mode 100644 (file)
index e4b62eb..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.. change::
-    :tags: change, postgresql
-
-    When using the psycopg2 dialect for PostgreSQL, psycopg2 minimum version is
-    set at 2.7. The psycopg2 dialect relies upon many features of psycopg2
-    released in the past few years, so to simplify the dialect, version 2.7,
-    released in March, 2017 is now the minimum version required.
-
diff --git a/doc/build/changelog/unreleased_14/removed_depthfirst.rst b/doc/build/changelog/unreleased_14/removed_depthfirst.rst
deleted file mode 100644 (file)
index a06f554..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.. change::
-    :tags: removed, sql
-
-    Removed the ``sqlalchemy.sql.visitors.iterate_depthfirst`` and
-    ``sqlalchemy.sql.visitors.traverse_depthfirst`` functions.  These functions
-    were unused by any part of SQLAlchemy.  The
-    :func:`_sa.sql.visitors.iterate` and :func:`_sa.sql.visitors.traverse`
-    functions are commonly used for these functions.  Also removed unused
-    options from the remaining functions including "column_collections",
-    "schema_visitor".
-
diff --git a/doc/build/changelog/unreleased_14/result.rst b/doc/build/changelog/unreleased_14/result.rst
deleted file mode 100644 (file)
index ec639fe..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-.. change::
-    :tags: feature, engine
-    :tickets: 5087, 4395, 4959
-
-    Implemented an all-new :class:`_result.Result` object that replaces the previous
-    ``ResultProxy`` object.   As implemented in Core, the subclass
-    :class:`_result.CursorResult` features a compatible calling interface with the
-    previous ``ResultProxy``, and additionally adds a great amount of new
-    functionality that can be applied to Core result sets as well as ORM result
-    sets, which are now integrated into the same model.   :class:`_result.Result`
-    includes features such as column selection and rearrangement, improved
-    fetchmany patterns, uniquing, as well as a variety of implementations that
-    can be used to create database results from in-memory structures as well.
-
-
-    .. seealso::
-
-        :ref:`change_result_14_core`
-
diff --git a/doc/build/changelog/unreleased_14/sscursor.rst b/doc/build/changelog/unreleased_14/sscursor.rst
deleted file mode 100644 (file)
index 625db8d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-.. change::
-    :tags: deprecated, engine
-
-    The ``server_side_cursors`` engine-wide parameter is deprecated and will be
-    removed in a future release.  For unbuffered cursors, the
-    :paramref:`_engine.Connection.execution_options.stream_results` execution
-    option should be used on a per-execution basis.
diff --git a/doc/build/changelog/unreleased_14/table_mustexist.rst b/doc/build/changelog/unreleased_14/table_mustexist.rst
deleted file mode 100644 (file)
index be4097a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-.. change::
-    :tags: renamed, sql
-
-    :class:`_schema.Table` parameter ``mustexist`` has been renamed
-    to :paramref:`_schema.Table.must_exist` and will now warn when used.
diff --git a/doc/build/changelog/unreleased_14/table_no_dupe_cols.rst b/doc/build/changelog/unreleased_14/table_no_dupe_cols.rst
deleted file mode 100644 (file)
index 6068bee..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.. change::
-    :tags: deprecated, sql
-
-    The :class:`_schema.Table` class now raises a deprecation warning
-    when columns with the same name are defined. To replace a column a new
-    parameter :paramref:`_schema.Table.append_column.replace_existing` was
-    added to the :meth:`_schema.Table.append_column` method.
-
-    The :meth:`_expression.ColumnCollection.contains_column` will now
-    raises an error when called with a string, suggesting the caller
-    to use ``in`` instead.
index 912fb633d93aed9795ef1f76561e8b89b490091d..de1612d6929f15eca429396bc0c5ae4c060eb5c4 100644 (file)
@@ -194,7 +194,7 @@ version = "1.4"
 # The full version, including alpha/beta/rc tags.
 release = "1.4.0b1"
 
-release_date = None
+release_date = "November 2, 2020"
 
 site_base = os.environ.get("RTD_SITE_BASE", "http://www.sqlalchemy.org")
 site_adapter_template = "docs_adapter.mako"