From: Federico Caselli Date: Wed, 12 Apr 2023 21:17:38 +0000 (+0200) Subject: Remove old versionadded and versionchanged X-Git-Tag: rel_2_0_10~18^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ee7e49964fcf13ed0f5a3541b81f00302a9db29a;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Remove old versionadded and versionchanged Removed versionadded and versionchanged for version prior to 1.2 since they are no longer useful. Change-Id: I5c53d1188bc5fec3ab4be39ef761650ed8fa6d3e --- diff --git a/doc/build/core/connections.rst b/doc/build/core/connections.rst index 726b5a501d..dc81750cd3 100644 --- a/doc/build/core/connections.rst +++ b/doc/build/core/connections.rst @@ -855,9 +855,6 @@ as the schema name is passed to these methods explicitly. configurations, the :ref:`horizontal_sharding_toplevel` extension may be used. See the example at :ref:`examples_sharding`. - -.. versionadded:: 1.1 - .. _sql_caching: diff --git a/doc/build/core/constraints.rst b/doc/build/core/constraints.rst index 3b05b8c12d..1efccdce5a 100644 --- a/doc/build/core/constraints.rst +++ b/doc/build/core/constraints.rst @@ -259,18 +259,6 @@ like the following is generated: sqlalchemy.exc.CompileError: Can't emit DROP CONSTRAINT for constraint ForeignKeyConstraint(...); it has no name -.. versionchanged:: 1.0.0 - The DDL system invoked by - :meth:`_schema.MetaData.create_all` - and :meth:`_schema.MetaData.drop_all` will now automatically resolve mutually - dependent foreign keys between tables declared by - :class:`_schema.ForeignKeyConstraint` and :class:`_schema.ForeignKey` objects, without - the need to explicitly set the :paramref:`_schema.ForeignKeyConstraint.use_alter` - flag. - -.. versionchanged:: 1.0.0 - The :paramref:`_schema.ForeignKeyConstraint.use_alter` - flag can be used with an un-named constraint; only the DROP operation - will emit a specific error when actually called upon. - .. seealso:: :ref:`constraint_naming_conventions` @@ -730,9 +718,6 @@ one column present, the scan does use a deterministic search, however the structure of the expression will determine which column is noted as "column zero". -.. versionadded:: 1.0.0 The :class:`.CheckConstraint` object now supports - the ``column_0_name`` naming convention token. - .. _naming_schematypes: Configuring Naming for Boolean, Enum, and other schema types @@ -790,9 +775,6 @@ The above schema will produce: CONSTRAINT ck_foo_flag CHECK (flag IN (0, 1)) ) -.. versionchanged:: 1.0 Constraint naming conventions that don't include - ``%(constraint_name)s`` again work with :class:`.SchemaType` constraints. - Constraints API --------------- diff --git a/doc/build/core/event.rst b/doc/build/core/event.rst index 3347b1336c..427da8fb15 100644 --- a/doc/build/core/event.rst +++ b/doc/build/core/event.rst @@ -81,9 +81,6 @@ as long as the names match up:: Above, the presence of ``**kw`` tells :func:`.listens_for` that arguments should be passed to the function by name, rather than positionally. -.. versionadded:: 0.9.0 Added optional ``named`` argument dispatch to - event calling. - Targets ------- diff --git a/doc/build/orm/declarative_config.rst b/doc/build/orm/declarative_config.rst index 71acefe527..873f16aff3 100644 --- a/doc/build/orm/declarative_config.rst +++ b/doc/build/orm/declarative_config.rst @@ -338,9 +338,6 @@ configuration via the :meth:`.MapperEvents.before_configured` event:: """ """ # do something before mappings are configured -.. versionadded:: 0.9.3 - - .. _declarative_metadata: ``metadata`` diff --git a/doc/build/orm/join_conditions.rst b/doc/build/orm/join_conditions.rst index f895654450..79c3e98adf 100644 --- a/doc/build/orm/join_conditions.rst +++ b/doc/build/orm/join_conditions.rst @@ -483,11 +483,6 @@ annotating with :func:`_orm.foreign`:: "Writer.magazine_id == Article.magazine_id)", ) -.. versionchanged:: 1.0.0 the ORM will attempt to warn when a column is used - as the synchronization target from more than one relationship - simultaneously. - - Non-relational Comparisons / Materialized Path ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -527,11 +522,6 @@ we seek for a load of ``Element.descendants`` to look like: FROM element WHERE element.path LIKE ('/foo/bar2' || '/%') ORDER BY element.path -.. versionadded:: 0.9.5 Support has been added to allow a single-column - comparison to itself within a primaryjoin condition, as well as for - primaryjoin conditions that use :meth:`.ColumnOperators.like` as the comparison - operator. - .. _self_referential_many_to_many: Self-Referential Many-to-Many Relationship diff --git a/doc/build/orm/persistence_techniques.rst b/doc/build/orm/persistence_techniques.rst index 0a68befb3b..dca6cefffd 100644 --- a/doc/build/orm/persistence_techniques.rst +++ b/doc/build/orm/persistence_techniques.rst @@ -243,9 +243,6 @@ value and pass it through, rather than omitting it as a "missing" value:: signal to the ORM that we'd like ``None`` to be passed into the type whenever present, even though no special type-level behaviors are assigned to it. -.. versionadded:: 1.1 added the :meth:`.TypeEngine.evaluates_none` method - in order to indicate that a "None" value should be treated as significant. - .. _orm_server_defaults: Fetching Server-Generated Defaults diff --git a/doc/build/orm/session_events.rst b/doc/build/orm/session_events.rst index 6223b53f64..f61421ea92 100644 --- a/doc/build/orm/session_events.rst +++ b/doc/build/orm/session_events.rst @@ -410,9 +410,6 @@ Object Lifecycle Events Another use case for events is to track the lifecycle of objects. This refers to the states first introduced at :ref:`session_object_states`. -.. versionadded:: 1.1 added a system of events that intercept all possible - state transitions of an object within the :class:`.Session`. - All the states above can be tracked fully with events. Each event represents a distinct state transition, meaning, the starting state and the destination state are both part of what are tracked. With the diff --git a/doc/build/orm/session_state_management.rst b/doc/build/orm/session_state_management.rst index 26a51cfb2d..3538bdc224 100644 --- a/doc/build/orm/session_state_management.rst +++ b/doc/build/orm/session_state_management.rst @@ -30,9 +30,6 @@ It's helpful to know the states which an instance can have within a session: the session's transaction is rolled back, a deleted object moves *back* to the persistent state. - .. versionchanged:: 1.1 The 'deleted' state is a newly added session - object state distinct from the 'persistent' state. - * **Detached** - an instance which corresponds, or previously corresponded, to a record in the database, but is not currently in any session. The detached object will contain a database identity marker, however diff --git a/doc/build/orm/versioning.rst b/doc/build/orm/versioning.rst index abbe149378..87865917cd 100644 --- a/doc/build/orm/versioning.rst +++ b/doc/build/orm/versioning.rst @@ -209,9 +209,6 @@ It is *strongly recommended* that server side version counters only be used when absolutely necessary and only on backends that support :term:`RETURNING`, currently PostgreSQL, Oracle, MariaDB 10.5, SQLite 3.35, and SQL Server. -.. versionadded:: 0.9.0 - - Support for server side version identifier tracking. Programmatic or Conditional Version Counters -------------------------------------------- @@ -255,8 +252,3 @@ issues:: # will leave version_uuid unchanged u1.name = "u3" session.commit() - -.. versionadded:: 0.9.0 - - Support for programmatic and conditional version identifier tracking. - diff --git a/examples/generic_associations/generic_fk.py b/examples/generic_associations/generic_fk.py index 1cd0404e9f..5c70f93aac 100644 --- a/examples/generic_associations/generic_fk.py +++ b/examples/generic_associations/generic_fk.py @@ -16,8 +16,6 @@ high demand, so in the interests of having an easy StackOverflow answer queued up, here it is. The author recommends "table_per_related" or "table_per_association" instead of this approach. -.. versionadded:: 0.8.3 - """ from sqlalchemy import and_ from sqlalchemy import Column diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index a77cced7e0..f32665792d 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -632,8 +632,6 @@ behavior of this flag is as follows: will always remain fixed and always output exactly that type. -.. versionadded:: 1.0.0 - .. _multipart_schema_names: Multipart Schema Names @@ -726,10 +724,6 @@ no purpose; however in the case that legacy applications rely upon it, it is available using the ``legacy_schema_aliasing`` argument to :func:`_sa.create_engine` as illustrated above. -.. versionchanged:: 1.1 the ``legacy_schema_aliasing`` flag introduced - in version 1.0.5 to allow disabling of legacy mode for schemas now - defaults to False. - .. deprecated:: 1.4 The ``legacy_schema_aliasing`` flag is now @@ -784,12 +778,6 @@ which will render the table, for example, as:: CREATE TABLE my_table (x INTEGER NOT NULL, y INTEGER NOT NULL, PRIMARY KEY NONCLUSTERED (x, y)) -.. versionchanged:: 1.1 the ``mssql_clustered`` option now defaults - to None, rather than False. ``mssql_clustered=False`` now explicitly - renders the NONCLUSTERED clause, whereas None omits the CLUSTERED - clause entirely, allowing SQL Server defaults to take effect. - - MSSQL-Specific Index Options ----------------------------- @@ -1405,8 +1393,6 @@ class VARBINARY(sqltypes.VARBINARY, sqltypes.LargeBinary): either ``VARBINARY(max)`` or IMAGE is rendered, as well as the SQL Server ``FILESTREAM`` option. - .. versionadded:: 1.0.0 - .. seealso:: :ref:`mssql_large_type_deprecation` @@ -1451,8 +1437,6 @@ class XML(sqltypes.Text): additional arguments, such as "CONTENT", "DOCUMENT", "xml_schema_collection". - .. versionadded:: 1.1.11 - """ __visit_name__ = "XML" diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index 387b0141c4..b5a5b2ca4f 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -719,8 +719,6 @@ The value passed to the keyword argument will be simply passed through to the underlying CREATE INDEX, so it *must* be a valid index prefix for your MySQL storage engine. -.. versionadded:: 1.1.5 - .. seealso:: `CREATE INDEX `_ - MySQL documentation @@ -1000,11 +998,6 @@ output:: d TIMESTAMP NOT NULL ) -.. versionchanged:: 1.0.0 - SQLAlchemy now renders NULL or NOT NULL in all - cases for TIMESTAMP columns, to accommodate - ``explicit_defaults_for_timestamp``. Prior to this version, it will - not render "NOT NULL" for a TIMESTAMP column that is ``nullable=False``. - """ # noqa from array import array as _array diff --git a/lib/sqlalchemy/dialects/mysql/enumerated.py b/lib/sqlalchemy/dialects/mysql/enumerated.py index 70a2ee0025..2e1d3c3da9 100644 --- a/lib/sqlalchemy/dialects/mysql/enumerated.py +++ b/lib/sqlalchemy/dialects/mysql/enumerated.py @@ -142,8 +142,6 @@ class SET(_StringType): essential that the list of set values is expressed in the **exact same order** as exists on the MySQL database. - .. versionadded:: 1.0.0 - """ self.retrieve_as_bitwise = kw.pop("retrieve_as_bitwise", False) self.values = tuple(values) diff --git a/lib/sqlalchemy/dialects/mysql/json.py b/lib/sqlalchemy/dialects/mysql/json.py index 7ad9c95ef9..66fcb714d5 100644 --- a/lib/sqlalchemy/dialects/mysql/json.py +++ b/lib/sqlalchemy/dialects/mysql/json.py @@ -28,8 +28,6 @@ class JSON(sqltypes.JSON): datatype, by adapting the operations to render the ``JSON_EXTRACT`` function at the database level. - .. versionadded:: 1.1 - """ pass diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py index 16990c751d..08ab35bea1 100644 --- a/lib/sqlalchemy/dialects/oracle/base.py +++ b/lib/sqlalchemy/dialects/oracle/base.py @@ -453,8 +453,6 @@ the ``exclude_tablespaces`` parameter:: "oracle+cx_oracle://scott:tiger@xe", exclude_tablespaces=["SYSAUX", "SOME_TABLESPACE"]) -.. versionadded:: 1.1 - DateTime Compatibility ---------------------- @@ -466,13 +464,6 @@ present as a "marker" for this type; additionally, when a database column is reflected and the type is reported as ``DATE``, the time-supporting :class:`_oracle.DATE` type is used. -.. versionchanged:: 0.9.4 Added :class:`_oracle.DATE` to subclass - :class:`.DateTime`. This is a change as previous versions - would reflect a ``DATE`` column as :class:`_types.DATE`, which subclasses - :class:`.Date`. The only significance here is for schemes that are - examining the type of column for use in special Python translations or - for migrating schemas to other database backends. - .. _oracle_table_options: Oracle Table Options @@ -488,8 +479,6 @@ in conjunction with the :class:`_schema.Table` construct: "some_table", metadata, ..., prefixes=['GLOBAL TEMPORARY'], oracle_on_commit='PRESERVE ROWS') -.. versionadded:: 1.0.0 - * ``COMPRESS``:: Table('mytable', metadata, Column('data', String(32)), @@ -501,8 +490,6 @@ in conjunction with the :class:`_schema.Table` construct: The ``oracle_compress`` parameter accepts either an integer compression level, or ``True`` to use the default compression level. -.. versionadded:: 1.0.0 - .. _oracle_index_options: Oracle Specific Index Options @@ -519,8 +506,6 @@ instead of a B-tree index:: Bitmap indexes cannot be unique and cannot be compressed. SQLAlchemy will not check for such limitations, only the database will. -.. versionadded:: 1.0.0 - Index compression ~~~~~~~~~~~~~~~~~ @@ -537,8 +522,6 @@ The ``oracle_compress`` parameter accepts either an integer specifying the number of prefix columns to compress, or ``True`` to use the default (all columns for non-unique indexes, all but the last column for unique indexes). -.. versionadded:: 1.0.0 - """ # noqa from __future__ import annotations diff --git a/lib/sqlalchemy/dialects/oracle/types.py b/lib/sqlalchemy/dialects/oracle/types.py index db3d57228a..1c252ab897 100644 --- a/lib/sqlalchemy/dialects/oracle/types.py +++ b/lib/sqlalchemy/dialects/oracle/types.py @@ -160,8 +160,6 @@ class DATE(_OracleDateLiteralRender, sqltypes.DateTime): :class:`_types.DateTime`; this is to suit the fact that the Oracle ``DATE`` type supports a time value. - .. versionadded:: 0.9.4 - """ __visit_name__ = "DATE" diff --git a/lib/sqlalchemy/dialects/postgresql/array.py b/lib/sqlalchemy/dialects/postgresql/array.py index 5b53916c61..ba53bf665a 100644 --- a/lib/sqlalchemy/dialects/postgresql/array.py +++ b/lib/sqlalchemy/dialects/postgresql/array.py @@ -163,12 +163,8 @@ OVERLAP = operators.custom_op("&&", precedence=5, is_comparison=True) class ARRAY(sqltypes.ARRAY): - """PostgreSQL ARRAY type. - .. versionchanged:: 1.1 The :class:`_postgresql.ARRAY` type is now - a subclass of the core :class:`_types.ARRAY` type. - The :class:`_postgresql.ARRAY` type is constructed in the same way as the core :class:`_types.ARRAY` type; a member type is required, and a number of dimensions is recommended if the type is to be used for more @@ -308,9 +304,6 @@ class ARRAY(sqltypes.ARRAY): a value of one will be added to all index values before passing to the database. - .. versionadded:: 0.9.5 - - """ if isinstance(item_type, ARRAY): raise ValueError( diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py index 4d299b9183..1ce5600e1b 100644 --- a/lib/sqlalchemy/dialects/postgresql/base.py +++ b/lib/sqlalchemy/dialects/postgresql/base.py @@ -551,8 +551,6 @@ and :meth:`~.postgresql.Insert.on_conflict_do_nothing`: {printsql}INSERT INTO my_table (id, data) VALUES (%(id)s, %(data)s) ON CONFLICT ON CONSTRAINT pk_my_table DO UPDATE SET data = %(param_1)s -.. versionadded:: 1.1 - .. seealso:: `INSERT .. ON CONFLICT @@ -1021,16 +1019,12 @@ keyword argument:: Index('my_index', my_table.c.data, postgresql_with={"fillfactor": 50}) -.. versionadded:: 1.0.6 - PostgreSQL allows to define the tablespace in which to create the index. The tablespace can be specified on :class:`.Index` using the ``postgresql_tablespace`` keyword argument:: Index('my_index', my_table.c.data, postgresql_tablespace='my_tablespace') -.. versionadded:: 1.1 - Note that the same option is available on :class:`_schema.Table` as well. .. _postgresql_index_concurrently: @@ -1055,11 +1049,6 @@ a connection-less dialect, it will emit:: DROP INDEX CONCURRENTLY test_idx1 -.. versionadded:: 1.1 support for CONCURRENTLY on DROP INDEX. The - CONCURRENTLY keyword is now only emitted if a high enough version - of PostgreSQL is detected on the connection (or for a connection-less - dialect). - When using CONCURRENTLY, the PostgreSQL database requires that the statement be invoked outside of a transaction block. The Python DBAPI enforces that even for a single statement, a transaction is present, so to use this @@ -1098,14 +1087,6 @@ in :attr:`_schema.Table.indexes` when it is detected as mirroring a :class:`.UniqueConstraint` in the :attr:`_schema.Table.constraints` collection . -.. versionchanged:: 1.0.0 - :class:`_schema.Table` reflection now includes - :class:`.UniqueConstraint` objects present in the - :attr:`_schema.Table.constraints` - collection; the PostgreSQL backend will no longer include a "mirrored" - :class:`.Index` construct in :attr:`_schema.Table.indexes` - if it is detected - as corresponding to a unique constraint. - Special Reflection Options -------------------------- @@ -1155,8 +1136,6 @@ dialect in conjunction with the :class:`_schema.Table` construct: Table("some_table", metadata, ..., postgresql_inherits=("t1", "t2", ...)) - .. versionadded:: 1.0.0 - * ``PARTITION BY``:: Table("some_table", metadata, ..., @@ -2785,8 +2764,6 @@ class PGInspector(reflection.Inspector): (typically 'public') is used. May also be set to ``'*'`` to indicate load enums for all schemas. - .. versionadded:: 1.0.0 - """ with self._operation_context() as conn: return self.dialect._load_enums( @@ -2803,8 +2780,6 @@ class PGInspector(reflection.Inspector): except that the list is limited to those tables that report a ``relkind`` value of ``f``. - .. versionadded:: 1.0.0 - """ with self._operation_context() as conn: return self.dialect._get_foreign_table_names( diff --git a/lib/sqlalchemy/dialects/postgresql/dml.py b/lib/sqlalchemy/dialects/postgresql/dml.py index a1807d7b31..e17b87d1e7 100644 --- a/lib/sqlalchemy/dialects/postgresql/dml.py +++ b/lib/sqlalchemy/dialects/postgresql/dml.py @@ -51,8 +51,6 @@ class Insert(StandardInsert): The :class:`_postgresql.Insert` object is created using the :func:`sqlalchemy.dialects.postgresql.insert` function. - .. versionadded:: 1.1 - """ stringify_dialect = "postgresql" @@ -148,8 +146,6 @@ class Insert(StandardInsert): not meeting the ``WHERE`` condition will not be updated (effectively a ``DO NOTHING`` for those rows). - .. versionadded:: 1.1 - .. seealso:: @@ -188,8 +184,6 @@ class Insert(StandardInsert): Additional WHERE criterion that can be used to infer a conditional target index. - .. versionadded:: 1.1 - .. seealso:: :ref:`postgresql_insert_on_conflict` diff --git a/lib/sqlalchemy/dialects/postgresql/ext.py b/lib/sqlalchemy/dialects/postgresql/ext.py index 8c09edddac..c79e90034d 100644 --- a/lib/sqlalchemy/dialects/postgresql/ext.py +++ b/lib/sqlalchemy/dialects/postgresql/ext.py @@ -54,8 +54,6 @@ class aggregate_order_by(expression.ColumnElement): SELECT string_agg(a, ',' ORDER BY a) FROM table; - .. versionadded:: 1.1 - .. versionchanged:: 1.2.13 - the ORDER BY argument may be multiple terms .. seealso:: @@ -288,8 +286,6 @@ def array_agg(*arg, **kw): the plain :class:`_types.ARRAY`, unless an explicit ``type_`` is passed. - .. versionadded:: 1.1 - """ kw["_default_array_type"] = ARRAY return functions.func.array_agg(*arg, **kw) diff --git a/lib/sqlalchemy/dialects/postgresql/hstore.py b/lib/sqlalchemy/dialects/postgresql/hstore.py index 7f83f31136..dc7e4d40da 100644 --- a/lib/sqlalchemy/dialects/postgresql/hstore.py +++ b/lib/sqlalchemy/dialects/postgresql/hstore.py @@ -147,8 +147,6 @@ class HSTORE(sqltypes.Indexable, sqltypes.Concatenable, sqltypes.TypeEngine): :param text_type: the type that should be used for indexed values. Defaults to :class:`_types.Text`. - .. versionadded:: 1.1.0 - """ if text_type is not None: self.text_type = text_type diff --git a/lib/sqlalchemy/dialects/postgresql/json.py b/lib/sqlalchemy/dialects/postgresql/json.py index 9c29360062..232f058042 100644 --- a/lib/sqlalchemy/dialects/postgresql/json.py +++ b/lib/sqlalchemy/dialects/postgresql/json.py @@ -183,12 +183,6 @@ class JSON(sqltypes.JSON): data_table.c.data[('key_1', 'key_2', 5, ..., 'key_n')].astext == 'some value' - .. versionchanged:: 1.1 The :meth:`_expression.ColumnElement.cast` - operator on - JSON objects now requires that the :attr:`.JSON.Comparator.astext` - modifier be called explicitly, if the cast works only from a textual - string. - Index operations return an expression object whose type defaults to :class:`_types.JSON` by default, so that further JSON-oriented instructions @@ -213,9 +207,6 @@ class JSON(sqltypes.JSON): :class:`_postgresql.JSONB` - .. versionchanged:: 1.1 :class:`_postgresql.JSON` is now a PostgreSQL- - specific specialization of the new :class:`_types.JSON` type. - """ # noqa astext_type = sqltypes.Text() @@ -231,9 +222,6 @@ class JSON(sqltypes.JSON): from sqlalchemy import null conn.execute(table.insert(), data=null()) - .. versionchanged:: 0.9.8 - Added ``none_as_null``, and :func:`.null` - is now supported in order to persist a NULL value. - .. seealso:: :attr:`_types.JSON.NULL` @@ -242,8 +230,6 @@ class JSON(sqltypes.JSON): :attr:`.JSON.Comparator.astext` accessor on indexed attributes. Defaults to :class:`_types.Text`. - .. versionadded:: 1.1 - """ super().__init__(none_as_null=none_as_null) if astext_type is not None: @@ -323,8 +309,6 @@ class JSONB(JSON): in the same way that ``psycopg2.extras.register_default_json`` is used to register these handlers with the json type. - .. versionadded:: 0.9.7 - .. seealso:: :class:`_types.JSON` diff --git a/lib/sqlalchemy/dialects/postgresql/named_types.py b/lib/sqlalchemy/dialects/postgresql/named_types.py index b0427b5699..92aba6f63b 100644 --- a/lib/sqlalchemy/dialects/postgresql/named_types.py +++ b/lib/sqlalchemy/dialects/postgresql/named_types.py @@ -231,14 +231,6 @@ class ENUM(NamedType, sqltypes.NativeForEmulated, sqltypes.Enum): my_enum.create(engine) my_enum.drop(engine) - .. versionchanged:: 1.0.0 The PostgreSQL :class:`_postgresql.ENUM` type - now behaves more strictly with regards to CREATE/DROP. A metadata-level - ENUM type will only be created and dropped at the metadata level, - not the table level, with the exception of - ``table.create(checkfirst=True)``. - The ``table.drop()`` call will now emit a DROP TYPE for a table-level - enumerated type. - """ native_enum = True diff --git a/lib/sqlalchemy/dialects/postgresql/psycopg2cffi.py b/lib/sqlalchemy/dialects/postgresql/psycopg2cffi.py index 8a69e1b85f..211432c6dc 100644 --- a/lib/sqlalchemy/dialects/postgresql/psycopg2cffi.py +++ b/lib/sqlalchemy/dialects/postgresql/psycopg2cffi.py @@ -17,8 +17,6 @@ r""" layer. This makes it suitable for use in e.g. PyPy. Documentation is as per ``psycopg2``. -.. versionadded:: 1.0.0 - .. seealso:: :mod:`sqlalchemy.dialects.postgresql.psycopg2` diff --git a/lib/sqlalchemy/dialects/postgresql/types.py b/lib/sqlalchemy/dialects/postgresql/types.py index a6b82044b3..edab239357 100644 --- a/lib/sqlalchemy/dialects/postgresql/types.py +++ b/lib/sqlalchemy/dialects/postgresql/types.py @@ -102,11 +102,7 @@ class MONEY(sqltypes.TypeEngine[str]): class OID(sqltypes.TypeEngine[int]): - """Provide the PostgreSQL OID type. - - .. versionadded:: 0.9.5 - - """ + """Provide the PostgreSQL OID type.""" __visit_name__ = "OID" @@ -246,8 +242,6 @@ class TSVECTOR(sqltypes.TypeEngine[str]): It can be used to do full text queries on natural language documents. - .. versionadded:: 0.9.0 - .. seealso:: :ref:`postgresql_match` diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py index 20065d88e7..6200cee5a3 100644 --- a/lib/sqlalchemy/dialects/sqlite/base.py +++ b/lib/sqlalchemy/dialects/sqlite/base.py @@ -699,10 +699,6 @@ lookup is used instead: ``REAL``, ``FLOA`` or ``DOUB``. * Otherwise, the :class:`_types.NUMERIC` type is used. -.. versionadded:: 0.9.3 Support for SQLite type affinity rules when reflecting - columns. - - .. _sqlite_partial_index: Partial Indexes @@ -720,8 +716,6 @@ The index will be rendered at create time as:: CREATE INDEX test_idx1 ON testtbl (data) WHERE data > 5 AND data < 10 -.. versionadded:: 0.9.9 - .. _sqlite_dotted_column_names: Dotted Column Names @@ -733,12 +727,6 @@ databases in general, as the dot is a syntactically significant character, the SQLite driver up until version **3.10.0** of SQLite has a bug which requires that SQLAlchemy filter out these dots in result sets. -.. versionchanged:: 1.1 - - The following SQLite issue has been resolved as of version 3.10.0 - of SQLite. SQLAlchemy as of **1.1** automatically disables its internal - workarounds based on detection of this version. - The bug, entirely outside of SQLAlchemy, can be illustrated thusly:: import sqlite3 @@ -955,8 +943,6 @@ class _DateTimeMixin: the type will generate its DDL as DATE_CHAR, DATETIME_CHAR, TIME_CHAR. - .. versionadded:: 1.0.0 - """ spec = self._storage_format % { "year": 0, diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index def2c0b933..1d2fb7a46b 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -484,8 +484,6 @@ class Connection(ConnectionEventsTarget, inspection.Inspectable["Inspector"]): are compiled into strings; the resulting schema name will be converted based on presence in the map of the original name. - .. versionadded:: 1.1 - .. seealso:: :ref:`schema_translating` @@ -598,8 +596,6 @@ class Connection(ConnectionEventsTarget, inspection.Inspectable["Inspector"]): which returns the dialect-level setting without performing a SQL query. - .. versionadded:: 0.9.9 - .. seealso:: :attr:`_engine.Connection.default_isolation_level` @@ -636,8 +632,6 @@ class Connection(ConnectionEventsTarget, inspection.Inspectable["Inspector"]): ahead of time from the first connection procured by the dialect, so SQL query is not invoked when this accessor is called. - .. versionadded:: 0.9.9 - .. seealso:: :meth:`_engine.Connection.get_isolation_level` diff --git a/lib/sqlalchemy/engine/cursor.py b/lib/sqlalchemy/engine/cursor.py index 0eea3398d5..1f171ddb09 100644 --- a/lib/sqlalchemy/engine/cursor.py +++ b/lib/sqlalchemy/engine/cursor.py @@ -1544,8 +1544,6 @@ class CursorResult(Result[_T]): This method is **not public**, but is documented in order to clarify the "autoclose" process used. - .. versionadded:: 1.0.0 - .. seealso:: :meth:`_engine.CursorResult.close` @@ -1878,8 +1876,6 @@ class CursorResult(Result[_T]): if :meth:`.ValuesBase.return_defaults` was not used or if the backend does not support RETURNING. - .. versionadded:: 0.9.0 - .. seealso:: :meth:`.ValuesBase.return_defaults` diff --git a/lib/sqlalchemy/engine/events.py b/lib/sqlalchemy/engine/events.py index 9028c8c331..c1b182a0ae 100644 --- a/lib/sqlalchemy/engine/events.py +++ b/lib/sqlalchemy/engine/events.py @@ -498,8 +498,6 @@ class ConnectionEvents(event.Events[ConnectionEventsTarget]): can still be used for new requests in which case it re-acquires connection resources. - .. versionadded:: 1.0.5 - """ def begin(self, conn: Connection) -> None: @@ -636,9 +634,6 @@ class DialectEvents(event.Events[Dialect]): :meth:`_events.ConnectionEvents.after_execute` - - .. versionadded:: 0.9.4 - """ _target_class_doc = "SomeEngine" @@ -855,9 +850,6 @@ class DialectEvents(event.Events[Dialect]): def receive_do_connect(dialect, conn_rec, cargs, cparams): return psycopg2.connect(*cargs, **cparams) - - .. versionadded:: 1.0.3 - .. seealso:: :ref:`custom_dbapi_args` diff --git a/lib/sqlalchemy/engine/interfaces.py b/lib/sqlalchemy/engine/interfaces.py index 9952a85e3a..254aba4bc9 100644 --- a/lib/sqlalchemy/engine/interfaces.py +++ b/lib/sqlalchemy/engine/interfaces.py @@ -1043,8 +1043,6 @@ class Dialect(EventTarget): here is so that third-party dialects that haven't yet implemented this feature continue to function in the old way. - .. versionadded:: 0.9.2 - .. seealso:: :class:`.DialectKWArgs` - implementing base class which consumes @@ -1621,8 +1619,6 @@ class Dialect(EventTarget): This is an internal dialect method. Applications should use :meth:`.Inspector.get_check_constraints`. - .. versionadded:: 1.1.0 - """ raise NotImplementedError() @@ -2511,8 +2507,6 @@ class Dialect(EventTarget): By default this just returns the cls. - .. versionadded:: 1.0.3 - """ return cls @@ -2579,8 +2573,6 @@ class Dialect(EventTarget): events to the engine or its components. In particular, it allows a dialect-wrapping class to apply dialect-level events. - .. versionadded:: 1.0.3 - """ def get_driver_connection(self, connection: DBAPIConnection) -> Any: @@ -2803,8 +2795,6 @@ class CreateEnginePlugin: changes can be made to the engine, most typically involving setup of events (e.g. those defined in :ref:`core_event_toplevel`). - .. versionadded:: 1.1 - """ # noqa: E501 def __init__(self, url: URL, kwargs: Dict[str, Any]): @@ -3290,8 +3280,6 @@ class ExceptionContext: the invalidation of other connections in the pool is to be performed based on other conditions, or even on a per-connection basis. - .. versionadded:: 1.0.3 - """ is_pre_ping: bool diff --git a/lib/sqlalchemy/engine/reflection.py b/lib/sqlalchemy/engine/reflection.py index 6b44704bb4..6e1ec18f2a 100644 --- a/lib/sqlalchemy/engine/reflection.py +++ b/lib/sqlalchemy/engine/reflection.py @@ -513,8 +513,6 @@ class Inspector(inspection.Inspectable["Inspector"]): foreign key constraint names that would require a separate CREATE step after-the-fact, based on dependencies between tables. - .. versionadded:: 1.0.- - :param schema: schema name to query, if not the default schema. :param \**kw: Additional keyword argument to pass to the dialect specific implementation. See the documentation of the dialect @@ -630,8 +628,6 @@ class Inspector(inspection.Inspectable["Inspector"]): specific implementation. See the documentation of the dialect in use for more information. - .. versionadded:: 1.0.0 - """ with self._operation_context() as conn: @@ -649,8 +645,6 @@ class Inspector(inspection.Inspectable["Inspector"]): specific implementation. See the documentation of the dialect in use for more information. - .. versionadded:: 1.0.0 - """ with self._operation_context() as conn: return self.dialect.get_temp_view_names( @@ -1406,8 +1400,6 @@ class Inspector(inspection.Inspectable["Inspector"]): :return: a list of dictionaries, each representing the definition of a check constraints. - .. versionadded:: 1.1.0 - .. seealso:: :meth:`Inspector.get_multi_check_constraints` """ diff --git a/lib/sqlalchemy/event/api.py b/lib/sqlalchemy/event/api.py index 54d4e09250..bb1dbea0fc 100644 --- a/lib/sqlalchemy/event/api.py +++ b/lib/sqlalchemy/event/api.py @@ -211,11 +211,6 @@ def remove(target: Any, identifier: str, fn: Callable[..., Any]) -> None: events at high scale, use a mutable structure that is handled from inside of a single listener. - .. versionchanged:: 1.0.0 - a ``collections.deque()`` object is now - used as the container for the list of events, which explicitly - disallows collection mutation while the collection is being - iterated. - .. seealso:: :func:`.listen` diff --git a/lib/sqlalchemy/exc.py b/lib/sqlalchemy/exc.py index 82d9d31cee..45a7e280e1 100644 --- a/lib/sqlalchemy/exc.py +++ b/lib/sqlalchemy/exc.py @@ -138,8 +138,6 @@ class ObjectNotExecutableError(ArgumentError): """Raised when an object is passed to .execute() that can't be executed as SQL. - .. versionadded:: 1.1 - """ def __init__(self, target: Any): diff --git a/lib/sqlalchemy/ext/asyncio/engine.py b/lib/sqlalchemy/ext/asyncio/engine.py index 325c58bdab..b72824e3bc 100644 --- a/lib/sqlalchemy/ext/asyncio/engine.py +++ b/lib/sqlalchemy/ext/asyncio/engine.py @@ -863,8 +863,6 @@ class AsyncConnection( ahead of time from the first connection procured by the dialect, so SQL query is not invoked when this accessor is called. - .. versionadded:: 0.9.9 - .. seealso:: :meth:`_engine.Connection.get_isolation_level` diff --git a/lib/sqlalchemy/ext/automap.py b/lib/sqlalchemy/ext/automap.py index 1861791b7e..f378f729a0 100644 --- a/lib/sqlalchemy/ext/automap.py +++ b/lib/sqlalchemy/ext/automap.py @@ -379,14 +379,6 @@ follows: flag is set to ``True`` in the set of relationship keyword arguments. Note that not all backends support reflection of ON DELETE. - .. versionadded:: 1.0.0 - automap will detect non-nullable foreign key - constraints when producing a one-to-many relationship and establish - a default cascade of ``all, delete-orphan`` if so; additionally, - if the constraint specifies - :paramref:`_schema.ForeignKeyConstraint.ondelete` - of ``CASCADE`` for non-nullable or ``SET NULL`` for nullable columns, - the ``passive_deletes=True`` option is also added. - 5. The names of the relationships are determined using the :paramref:`.AutomapBase.prepare.name_for_scalar_relationship` and :paramref:`.AutomapBase.prepare.name_for_collection_relationship` diff --git a/lib/sqlalchemy/ext/baked.py b/lib/sqlalchemy/ext/baked.py index 8b6488ca33..64c9ce6ec2 100644 --- a/lib/sqlalchemy/ext/baked.py +++ b/lib/sqlalchemy/ext/baked.py @@ -430,8 +430,6 @@ class Result: Note this uses a subquery to ensure an accurate count regardless of the structure of the original statement. - .. versionadded:: 1.1.6 - """ col = func.count(literal_column("*")) @@ -445,8 +443,6 @@ class Result: Equivalent to :meth:`_query.Query.scalar`. - .. versionadded:: 1.1.6 - """ try: ret = self.one() @@ -486,8 +482,6 @@ class Result: Equivalent to :meth:`_query.Query.one_or_none`. - .. versionadded:: 1.0.9 - """ return self._iter().one_or_none() diff --git a/lib/sqlalchemy/ext/indexable.py b/lib/sqlalchemy/ext/indexable.py index 01c6f4b242..dbaad3c407 100644 --- a/lib/sqlalchemy/ext/indexable.py +++ b/lib/sqlalchemy/ext/indexable.py @@ -22,9 +22,6 @@ The :mod:`~sqlalchemy.ext.indexable` extension provides :class:`_types.Indexable` typed column. In simple cases, it can be treated as a :class:`_schema.Column` - mapped attribute. - -.. versionadded:: 1.1 - Synopsis ======== @@ -235,8 +232,6 @@ class index_property(hybrid_property): # noqa attribute that corresponds to an :class:`_types.Indexable` column. - .. versionadded:: 1.1 - .. seealso:: :mod:`sqlalchemy.ext.indexable` diff --git a/lib/sqlalchemy/ext/mutable.py b/lib/sqlalchemy/ext/mutable.py index 0dd3215595..7d23f9fda7 100644 --- a/lib/sqlalchemy/ext/mutable.py +++ b/lib/sqlalchemy/ext/mutable.py @@ -469,8 +469,6 @@ class MutableBase: of attribute names that have been refreshed; the list is compared against this set to determine if action needs to be taken. - .. versionadded:: 1.0.5 - """ return {attribute.key} @@ -880,8 +878,6 @@ class MutableList(Mutable, List[_T]): coercion to the values placed in the dictionary so that they too are "mutable", and emit events up to their parent structure. - .. versionadded:: 1.1 - .. seealso:: :class:`.MutableDict` @@ -986,8 +982,6 @@ class MutableSet(Mutable, Set[_T]): coercion to the values placed in the dictionary so that they too are "mutable", and emit events up to their parent structure. - .. versionadded:: 1.1 - .. seealso:: :class:`.MutableDict` diff --git a/lib/sqlalchemy/orm/_orm_constructors.py b/lib/sqlalchemy/orm/_orm_constructors.py index 57acc57061..7b282a377b 100644 --- a/lib/sqlalchemy/orm/_orm_constructors.py +++ b/lib/sqlalchemy/orm/_orm_constructors.py @@ -949,11 +949,6 @@ def relationship( in some cases can enable complex :func:`_orm.relationship` SQL conditions to be used. - .. versionadded:: 0.9.2 :paramref:`_orm.relationship.secondary` - works - more effectively when referring to a :class:`_expression.Join` - instance. - :param active_history=False: When ``True``, indicates that the "previous" value for a many-to-one reference should be loaded when replaced, if @@ -1088,12 +1083,6 @@ def relationship( reducing performance of the innermost subquery beyond that of what duplicate innermost rows may be causing. - .. versionchanged:: 0.9.0 - - :paramref:`_orm.relationship.distinct_target_key` now defaults to - ``None``, so that the feature enables itself automatically for - those cases where the innermost query targets a non-unique - key. - .. seealso:: :ref:`loading_toplevel` - includes an introduction to subquery @@ -1265,8 +1254,6 @@ def relationship( remain associated with the attached :class:`.Session`, however additional SELECT statements should be blocked. - .. versionadded:: 1.1 - * ``write_only`` - the attribute will be configured with a special "virtual collection" that may receive :meth:`_orm.WriteOnlyCollection.add` and @@ -1805,8 +1792,6 @@ def synonym( :param info: Optional data dictionary which will be populated into the :attr:`.InspectionAttr.info` attribute of this object. - .. versionadded:: 1.0.0 - :param comparator_factory: A subclass of :class:`.PropComparator` that will provide custom comparison behavior at the SQL expression level. diff --git a/lib/sqlalchemy/orm/base.py b/lib/sqlalchemy/orm/base.py index 5b6675365e..5d19cf20ad 100644 --- a/lib/sqlalchemy/orm/base.py +++ b/lib/sqlalchemy/orm/base.py @@ -665,11 +665,6 @@ class InspectionAttrInfo(InspectionAttr): :func:`.composite` functions. - .. versionchanged:: 1.0.0 :attr:`.MapperProperty.info` is also - available on extension types via the - :attr:`.InspectionAttrInfo.info` attribute, so that it can apply - to a wider variety of ORM and extension constructs. - .. seealso:: :attr:`.QueryableAttribute.info` diff --git a/lib/sqlalchemy/orm/events.py b/lib/sqlalchemy/orm/events.py index 413bfbfcbe..9a1fd569a3 100644 --- a/lib/sqlalchemy/orm/events.py +++ b/lib/sqlalchemy/orm/events.py @@ -566,8 +566,6 @@ class InstanceEvents(event.Events[ClassManager[Any]]): :meth:`.SessionEvents.pending_to_persistent` and :meth:`.MapperEvents.after_insert` are better choices. - .. versionadded:: 1.0.5 - :param target: the mapped instance. If the event is configured with ``raw=True``, this will instead be the :class:`.InstanceState` state-management @@ -1094,7 +1092,7 @@ class MapperEvents(event.Events[mapperlib.Mapper[Any]]): @event.listens_for(Mapper, "before_configured") def go(): - # ... + ... Contrast this event to :meth:`.MapperEvents.after_configured`, which is invoked after the series of mappers has been configured, @@ -1114,10 +1112,7 @@ class MapperEvents(event.Events[mapperlib.Mapper[Any]]): @event.listens_for(mapper, "before_configured", once=True) def go(): - # ... - - - .. versionadded:: 0.9.3 + ... .. seealso:: @@ -2205,8 +2200,6 @@ class SessionEvents(event.Events[Session]): :param instance: the ORM-mapped instance being operated upon. - .. versionadded:: 1.1 - .. seealso:: :ref:`session_lifecycle_events` @@ -2227,8 +2220,6 @@ class SessionEvents(event.Events[Session]): :param instance: the ORM-mapped instance being operated upon. - .. versionadded:: 1.1 - .. seealso:: :ref:`session_lifecycle_events` @@ -2248,8 +2239,6 @@ class SessionEvents(event.Events[Session]): :param instance: the ORM-mapped instance being operated upon. - .. versionadded:: 1.1 - .. seealso:: :ref:`session_lifecycle_events` @@ -2271,8 +2260,6 @@ class SessionEvents(event.Events[Session]): :param instance: the ORM-mapped instance being operated upon. - .. versionadded:: 1.1 - .. seealso:: :ref:`session_lifecycle_events` @@ -2308,8 +2295,6 @@ class SessionEvents(event.Events[Session]): :param instance: the ORM-mapped instance being operated upon. - .. versionadded:: 1.1 - .. seealso:: :ref:`session_lifecycle_events` @@ -2344,8 +2329,6 @@ class SessionEvents(event.Events[Session]): :param instance: the ORM-mapped instance being operated upon. - .. versionadded:: 1.1 - .. seealso:: :ref:`session_lifecycle_events` @@ -2377,8 +2360,6 @@ class SessionEvents(event.Events[Session]): the :meth:`.SessionEvents.persistent_to_deleted` event is therefore invoked at the end of a flush. - .. versionadded:: 1.1 - .. seealso:: :ref:`session_lifecycle_events` @@ -2395,8 +2376,6 @@ class SessionEvents(event.Events[Session]): :meth:`.Session.rollback`. The event is not called under any other circumstances. - .. versionadded:: 1.1 - .. seealso:: :ref:`session_lifecycle_events` @@ -2419,8 +2398,6 @@ class SessionEvents(event.Events[Session]): events are called, as well as if the object is individually expunged from its deleted state via :meth:`.Session.expunge`. - .. versionadded:: 1.1 - .. seealso:: :ref:`session_lifecycle_events` @@ -2451,8 +2428,6 @@ class SessionEvents(event.Events[Session]): to the detached state because it was marked as deleted and flushed. - .. versionadded:: 1.1 - .. seealso:: :ref:`session_lifecycle_events` @@ -2792,10 +2767,6 @@ class AttributeEvents(event.Events[QueryableAttribute[Any]]): from its original value by backref handlers in order to control chained event propagation. - .. versionchanged:: 0.9.0 the ``initiator`` argument is now - passed as a :class:`.attributes.Event` object, and may be - modified by backref handlers within a chain of backref-linked - events. :param key: When the event is established using the :paramref:`.AttributeEvents.include_key` parameter set to True, this will be the key used in the operation, such as @@ -2841,11 +2812,6 @@ class AttributeEvents(event.Events[QueryableAttribute[Any]]): from its original value by backref handlers in order to control chained event propagation. - .. versionchanged:: 0.9.0 the ``initiator`` argument is now - passed as a :class:`.attributes.Event` object, and may be - modified by backref handlers within a chain of backref-linked - events. - :return: if the event was registered with ``retval=True``, the given value, or a new effective value, should be returned. @@ -2950,8 +2916,6 @@ class AttributeEvents(event.Events[QueryableAttribute[Any]]): returned by the previous listener that specifies ``retval=True`` as the ``value`` argument of the next listener. - .. versionadded:: 1.1 - :param target: the object instance receiving the event. If the listener is registered with ``raw=True``, this will be the :class:`.InstanceState` object. @@ -3013,9 +2977,6 @@ class AttributeEvents(event.Events[QueryableAttribute[Any]]): :param collection_adapter: the :class:`.CollectionAdapter` that will mediate internal access to the collection. - .. versionadded:: 1.0.0 :meth:`.AttributeEvents.init_collection` - and :meth:`.AttributeEvents.dispose_collection` events. - .. seealso:: :class:`.AttributeEvents` - background on listener options such @@ -3048,9 +3009,6 @@ class AttributeEvents(event.Events[QueryableAttribute[Any]]): contents before the dispose intact; previously, the collection would be empty. - .. versionadded:: 1.0.0 the :meth:`.AttributeEvents.init_collection` - and :meth:`.AttributeEvents.dispose_collection` events. - .. seealso:: :class:`.AttributeEvents` - background on listener options such diff --git a/lib/sqlalchemy/orm/interfaces.py b/lib/sqlalchemy/orm/interfaces.py index 8667491398..91c5cba2da 100644 --- a/lib/sqlalchemy/orm/interfaces.py +++ b/lib/sqlalchemy/orm/interfaces.py @@ -398,10 +398,6 @@ class MapperProperty( :func:`.column_property`, :func:`_orm.relationship`, or :func:`.composite` functions. - .. versionchanged:: 1.0.0 :attr:`.InspectionAttr.info` moved - from :class:`.MapperProperty` so that it can apply to a wider - variety of ORM and extension constructs. - .. seealso:: :attr:`.QueryableAttribute.info` @@ -420,11 +416,6 @@ class MapperProperty( :func:`.composite` functions. - .. versionchanged:: 1.0.0 :attr:`.MapperProperty.info` is also - available on extension types via the - :attr:`.InspectionAttrInfo.info` attribute, so that it can apply - to a wider variety of ORM and extension constructs. - .. seealso:: :attr:`.QueryableAttribute.info` diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 2ae6dadcd8..81b66de03e 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -344,10 +344,6 @@ class Mapper( those rows automatically. The warning may be changed to an exception in a future release. - .. versionadded:: 0.9.4 - added - :paramref:`.mapper.confirm_deleted_rows` as well as conditional - matched row checking on delete. - :param eager_defaults: if True, the ORM will immediately fetch the value of server-generated default values after an INSERT or UPDATE, rather than leaving them as expired to be fetched on next access. @@ -381,9 +377,6 @@ class Mapper( :ref:`orm_server_defaults` - .. versionchanged:: 0.9.0 The ``eager_defaults`` option can now - make use of :term:`RETURNING` for backends which support it. - .. versionchanged:: 2.0.0 RETURNING now works with multiple rows INSERTed at once using the :ref:`insertmanyvalues ` feature, which @@ -478,8 +471,6 @@ class Mapper( to specify passive_deletes without this taking effect for all subclass mappers. - .. versionadded:: 1.1 - .. seealso:: :ref:`passive_deletes` - description of similar feature as @@ -694,9 +685,6 @@ class Mapper( Please see :ref:`server_side_version_counter` for a discussion of important points when using this option. - .. versionadded:: 0.9.0 ``version_id_generator`` supports - server-side version number generation. - .. seealso:: :ref:`custom_version_counter` @@ -4338,8 +4326,6 @@ def validates( :func:`.validates` usage where only one validator should emit per attribute operation. - .. versionadded:: 0.9.0 - .. seealso:: :ref:`simple_validators` - usage examples for :func:`.validates` diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 080ae27ef9..5cd7cc1170 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -2432,8 +2432,6 @@ class Query( :param full=False: render FULL OUTER JOIN; implies ``isouter``. - .. versionadded:: 1.1 - """ join_target = coercions.expect( @@ -2531,13 +2529,6 @@ class Query( :class:`.AliasedClass` objects, :class:`.Mapper` objects as well as core :class:`.FromClause` elements like subqueries. - .. versionchanged:: 0.9 - This method no longer applies the given FROM object - to be the selectable from which matching entities - select from; the :meth:`.select_entity_from` method - now accomplishes this. See that method for a description - of this behavior. - .. seealso:: :meth:`~.Query.join` @@ -2764,10 +2755,6 @@ class Query( results in an execution of the underlying query. - .. versionadded:: 1.0.9 - - Added :meth:`_query.Query.one_or_none` - .. seealso:: :meth:`_query.Query.first` diff --git a/lib/sqlalchemy/orm/scoping.py b/lib/sqlalchemy/orm/scoping.py index 787c5a4ab0..19217ec32e 100644 --- a/lib/sqlalchemy/orm/scoping.py +++ b/lib/sqlalchemy/orm/scoping.py @@ -1425,10 +1425,6 @@ class scoped_session(Generic[_S]): See :ref:`unitofwork_merging` for a detailed discussion of merging. - .. versionchanged:: 1.1 - :meth:`.Session.merge` will now reconcile - pending objects with overlapping primary keys in the same way - as persistent. See :ref:`change_3601` for discussion. - :param instance: Instance to be merged. :param load: Boolean, when False, :meth:`.merge` switches into a "high performance" mode which causes it to forego emitting history diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index 760c71afd8..e6d6251cf3 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -934,8 +934,6 @@ class SessionTransaction(_StateChange, TransactionalContext): :attr:`.SessionTransaction.nested` attribute is ``True``, then this is a SAVEPOINT, and if ``False``, indicates this a subtransaction. - .. versionadded:: 1.0.16 - use ._parent for previous versions - """ return self._parent @@ -3704,10 +3702,6 @@ class Session(_SessionClassMethods, EventTarget): See :ref:`unitofwork_merging` for a detailed discussion of merging. - .. versionchanged:: 1.1 - :meth:`.Session.merge` will now reconcile - pending objects with overlapping primary keys in the same way - as persistent. See :ref:`change_3601` for discussion. - :param instance: Instance to be merged. :param load: Boolean, when False, :meth:`.merge` switches into a "high performance" mode which causes it to forego emitting history diff --git a/lib/sqlalchemy/orm/state.py b/lib/sqlalchemy/orm/state.py index 840de6ff15..7089395313 100644 --- a/lib/sqlalchemy/orm/state.py +++ b/lib/sqlalchemy/orm/state.py @@ -278,9 +278,6 @@ class InstanceState(interfaces.InspectionAttrInfo, Generic[_O]): or via transaction commit and enters the "detached" state, this flag will continue to report True. - .. versionadded:: 1.1 - added a local method form of - :func:`.orm.util.was_deleted`. - .. seealso:: :attr:`.InstanceState.deleted` - refers to the "deleted" state @@ -300,12 +297,6 @@ class InstanceState(interfaces.InspectionAttrInfo, Generic[_O]): be within the :attr:`.Session.identity_map` of its parent :class:`.Session`. - .. versionchanged:: 1.1 The :attr:`.InstanceState.persistent` - accessor no longer returns True for an object that was - "deleted" within a flush; use the :attr:`.InstanceState.deleted` - accessor to detect this state. This allows the "persistent" - state to guarantee membership in the identity map. - .. seealso:: :ref:`session_object_states` @@ -1104,8 +1095,6 @@ class AttributeState: :func:`.attributes.get_history` - underlying function - .. versionadded:: 0.9.0 - """ return self.state.get_history(self.key, PASSIVE_OFF ^ INIT_OK) diff --git a/lib/sqlalchemy/orm/strategy_options.py b/lib/sqlalchemy/orm/strategy_options.py index ba4b12061a..48e69aef27 100644 --- a/lib/sqlalchemy/orm/strategy_options.py +++ b/lib/sqlalchemy/orm/strategy_options.py @@ -295,12 +295,6 @@ class _AbstractLoad(traversals.GenerativeOnTraversal, LoaderOption): correctness of results, these joins are always INNER and are therefore right-nested if linked to an OUTER join. - .. versionchanged:: 1.0.0 ``innerjoin=True`` now implies - ``innerjoin="nested"``, whereas in 0.9 it implied - ``innerjoin="unnested"``. In order to achieve the pre-1.0 - "unnested" inner join behavior, use the value - ``innerjoin="unnested"``. See :ref:`migration_3008`. - .. note:: The joins produced by :func:`_orm.joinedload` are **anonymously @@ -532,9 +526,6 @@ class _AbstractLoad(traversals.GenerativeOnTraversal, LoaderOption): This function is part of the :class:`_orm.Load` interface and supports both method-chained and standalone operation. - - .. versionadded:: 1.1 - .. seealso:: :ref:`loading_toplevel` diff --git a/lib/sqlalchemy/pool/base.py b/lib/sqlalchemy/pool/base.py index ac487452c4..7600c196b0 100644 --- a/lib/sqlalchemy/pool/base.py +++ b/lib/sqlalchemy/pool/base.py @@ -266,9 +266,6 @@ class Pool(log.Identified, event.EventTarget): make use of :func:`_sa.create_engine` should not use this parameter as it is handled by the engine creation strategy. - .. versionadded:: 1.1 - ``dialect`` is now a public parameter - to the :class:`_pool.Pool`. - :param pre_ping: if True, the pool will emit a "ping" (typically "SELECT 1", but is dialect-specific) on the connection upon checkout, to test if the connection is alive or not. If not, diff --git a/lib/sqlalchemy/pool/events.py b/lib/sqlalchemy/pool/events.py index 937939e53c..8366b7bd2a 100644 --- a/lib/sqlalchemy/pool/events.py +++ b/lib/sqlalchemy/pool/events.py @@ -278,9 +278,6 @@ class PoolEvents(event.Events[Pool]): :param exception: the exception object corresponding to the reason for this invalidation, if any. May be ``None``. - .. versionadded:: 0.9.2 Added support for connection invalidation - listening. - .. seealso:: :ref:`pool_connection_invalidation` @@ -304,8 +301,6 @@ class PoolEvents(event.Events[Pool]): is checked in. It does not actively close the dbapi_connection at the point at which it is called. - .. versionadded:: 1.0.3 - :param dbapi_connection: a DBAPI connection. The :attr:`.ConnectionPoolEntry.dbapi_connection` attribute. @@ -334,8 +329,6 @@ class PoolEvents(event.Events[Pool]): associated with the pool. To intercept close events for detached connections use :meth:`.close_detached`. - .. versionadded:: 1.1 - :param dbapi_connection: a DBAPI connection. The :attr:`.ConnectionPoolEntry.dbapi_connection` attribute. @@ -354,8 +347,6 @@ class PoolEvents(event.Events[Pool]): This event is emitted after the detach occurs. The connection is no longer associated with the given connection record. - .. versionadded:: 1.1 - :param dbapi_connection: a DBAPI connection. The :attr:`.ConnectionPoolEntry.dbapi_connection` attribute. @@ -373,8 +364,6 @@ class PoolEvents(event.Events[Pool]): the connection is already closed. If the close operation fails, the connection is discarded. - .. versionadded:: 1.1 - :param dbapi_connection: a DBAPI connection. The :attr:`.ConnectionPoolEntry.dbapi_connection` attribute. diff --git a/lib/sqlalchemy/sql/_elements_constructors.py b/lib/sqlalchemy/sql/_elements_constructors.py index f54fff5ce5..99a839cc90 100644 --- a/lib/sqlalchemy/sql/_elements_constructors.py +++ b/lib/sqlalchemy/sql/_elements_constructors.py @@ -411,8 +411,6 @@ def between( :param symmetric: if True, will render " BETWEEN SYMMETRIC ". Note that not all databases support this syntax. - .. versionadded:: 0.9.5 - .. seealso:: :meth:`_expression.ColumnElement.between` @@ -878,11 +876,6 @@ def cast( as well as the bound-value handling and result-row-handling behavior of the type. - .. versionchanged:: 0.9.0 :func:`.cast` now applies the given type - to the expression such that it takes effect on the bound-value, - e.g. the Python-to-database direction, in addition to the - result handling, e.g. database-to-Python, direction. - An alternative to :func:`.cast` is the :func:`.type_coerce` function. This function performs the second task of associating an expression with a specific type, but does not render the ``CAST`` expression @@ -978,10 +971,6 @@ def column( :class:`_schema.MetaData`, DDL, or events, unlike its :class:`_schema.Table` counterpart. - .. versionchanged:: 1.0.0 :func:`_expression.column` can now - be imported from the plain ``sqlalchemy`` namespace like any - other SQL element. - :param text: the text of the element. :param type: :class:`_types.TypeEngine` object which can associate @@ -1178,10 +1167,6 @@ def false() -> False_: >>> print(select(t.c.x).where(and_(t.c.x > 5, false()))) {printsql}SELECT x FROM t WHERE false{stop} - .. versionchanged:: 0.9 :func:`.true` and :func:`.false` feature - better integrated behavior within conjunctions and on dialects - that don't support true/false constants. - .. seealso:: :func:`.true` @@ -1209,8 +1194,6 @@ def funcfilter( This function is also available from the :data:`~.expression.func` construct itself via the :meth:`.FunctionElement.filter` method. - .. versionadded:: 1.0.0 - .. seealso:: :ref:`tutorial_functions_within_group` - in the @@ -1514,9 +1497,6 @@ def over( func.row_number().over(order_by='x', range_=(1, 3)) - .. versionadded:: 1.1 support for RANGE / ROWS within a window - - :param element: a :class:`.FunctionElement`, :class:`.WithinGroup`, or other compatible construct. :param partition_by: a column element or string, or a list @@ -1529,14 +1509,10 @@ def over( tuple value which can contain integer values or ``None``, and will render a RANGE BETWEEN PRECEDING / FOLLOWING clause. - .. versionadded:: 1.1 - :param rows: optional rows clause for the window. This is a tuple value which can contain integer values or None, and will render a ROWS BETWEEN PRECEDING / FOLLOWING clause. - .. versionadded:: 1.1 - This function is also available from the :data:`~.expression.func` construct itself via the :meth:`.FunctionElement.over` method. @@ -1661,10 +1637,6 @@ def true() -> True_: >>> print(select(t.c.x).where(and_(t.c.x > 5, false()))) {printsql}SELECT x FROM t WHERE false{stop} - .. versionchanged:: 0.9 :func:`.true` and :func:`.false` feature - better integrated behavior within conjunctions and on dialects - that don't support true/false constants. - .. seealso:: :func:`.false` @@ -1817,8 +1789,6 @@ def within_group( :param \*order_by: one or more column elements that will be used as the ORDER BY clause of the WITHIN GROUP construct. - .. versionadded:: 1.1 - .. seealso:: :ref:`tutorial_functions_within_group` - in the diff --git a/lib/sqlalchemy/sql/_selectable_constructors.py b/lib/sqlalchemy/sql/_selectable_constructors.py index 8081c93e46..41e8b6eb16 100644 --- a/lib/sqlalchemy/sql/_selectable_constructors.py +++ b/lib/sqlalchemy/sql/_selectable_constructors.py @@ -256,8 +256,6 @@ def join( :param full: if True, render a FULL OUTER JOIN, instead of JOIN. - .. versionadded:: 1.1 - .. seealso:: :meth:`_expression.FromClause.join` - method form, @@ -286,8 +284,6 @@ def lateral( only supported by a small number of backends, currently more recent PostgreSQL versions. - .. versionadded:: 1.1 - .. seealso:: :ref:`tutorial_lateral_correlation` - overview of usage. @@ -502,11 +498,6 @@ def table(name: str, *columns: ColumnClause[Any], **kw: Any) -> TableClause: :class:`_schema.Table` object. It may be used to construct lightweight table constructs. - .. versionchanged:: 1.0.0 :func:`_expression.table` can now - be imported from the plain ``sqlalchemy`` namespace like any - other SQL element. - - :param name: Name of the table. :param columns: A collection of :func:`_expression.column` constructs. @@ -557,8 +548,6 @@ def tablesample( people AS alias TABLESAMPLE bernoulli(:bernoulli_1) REPEATABLE (random()) - .. versionadded:: 1.1 - :param sampling: a ``float`` percentage between 0 and 100 or :class:`_functions.Function`. diff --git a/lib/sqlalchemy/sql/base.py b/lib/sqlalchemy/sql/base.py index 1752a4dc1a..19d3f8ba7a 100644 --- a/lib/sqlalchemy/sql/base.py +++ b/lib/sqlalchemy/sql/base.py @@ -468,8 +468,6 @@ class DialectKWArgs: :param default: default value of the parameter. - .. versionadded:: 0.9.4 - """ construct_arg_dictionary = DialectKWArgs._kw_registry[dialect_name] @@ -496,11 +494,6 @@ class DialectKWArgs: form ``_`` where the value will be assembled into the list of options. - .. versionadded:: 0.9.2 - - .. versionchanged:: 0.9.4 The :attr:`.DialectKWArgs.dialect_kwargs` - collection is now writable. - .. seealso:: :attr:`.DialectKWArgs.dialect_options` - nested dictionary form diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index ad0a3b6866..9c68b311ad 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -679,8 +679,6 @@ class Compiled: :param schema_translate_map: dictionary of schema names to be translated when forming the resultant SQL - .. versionadded:: 1.1 - .. seealso:: :ref:`schema_translating` diff --git a/lib/sqlalchemy/sql/ddl.py b/lib/sqlalchemy/sql/ddl.py index 75fa0ba1c4..b87049e076 100644 --- a/lib/sqlalchemy/sql/ddl.py +++ b/lib/sqlalchemy/sql/ddl.py @@ -528,8 +528,6 @@ class CreateTable(_CreateBase): inline within the CREATE construct; if omitted, all foreign key constraints that do not specify use_alter=True are included. - .. versionadded:: 1.0.0 - :param if_not_exists: if True, an IF NOT EXISTS operator will be applied to the construct. @@ -1306,8 +1304,6 @@ def sort_tables_and_constraints( :param extra_dependencies: a sequence of 2-tuples of tables which will also be considered as dependent on each other. - .. versionadded:: 1.0.0 - .. seealso:: :func:`.sort_tables` diff --git a/lib/sqlalchemy/sql/dml.py b/lib/sqlalchemy/sql/dml.py index 316392c0cd..830f845b42 100644 --- a/lib/sqlalchemy/sql/dml.py +++ b/lib/sqlalchemy/sql/dml.py @@ -1033,23 +1033,6 @@ class ValuesBase(UpdateBase): the traditional Core method of multiple parameter set invocation for INSERTs and other statements. - .. versionchanged:: 1.0.0 an INSERT that uses a multiple-VALUES - clause, even a list of length one, - implies that the :paramref:`_expression.Insert.inline` - flag is set to - True, indicating that the statement will not attempt to fetch - the "last inserted primary key" or other defaults. The - statement deals with an arbitrary number of rows, so the - :attr:`_engine.CursorResult.inserted_primary_key` - accessor does not - apply. - - .. versionchanged:: 1.0.0 A multiple-VALUES INSERT now supports - columns with Python side default values and callables in the - same way as that of an "executemany" style of invocation; the - callable is invoked for each row. See :ref:`bug_3288` - for other details. - The UPDATE construct also supports rendering the SET parameters in a specific order. For this feature refer to the :meth:`_expression.Update.ordered_values` method. @@ -1230,21 +1213,6 @@ class Insert(ValuesBase): will only be invoked **once** for the whole statement, and **not per row**. - .. versionadded:: 1.0.0 - :meth:`_expression.Insert.from_select` - now renders - Python-side and SQL expression column defaults into the - SELECT statement for columns otherwise not included in the - list of column names. - - .. versionchanged:: 1.0.0 an INSERT that uses FROM SELECT - implies that the :paramref:`_expression.insert.inline` - flag is set to - True, indicating that the statement will not attempt to fetch - the "last inserted primary key" or other defaults. The statement - deals with an arbitrary number of rows, so the - :attr:`_engine.CursorResult.inserted_primary_key` - accessor does not apply. - """ if self._values: diff --git a/lib/sqlalchemy/sql/elements.py b/lib/sqlalchemy/sql/elements.py index 8bf834d117..0f356ae27d 100644 --- a/lib/sqlalchemy/sql/elements.py +++ b/lib/sqlalchemy/sql/elements.py @@ -260,8 +260,6 @@ class CompilerElement(Visitable): print(s.compile(compile_kwargs={"literal_binds": True})) - .. versionadded:: 0.9.0 - .. seealso:: :ref:`faq_sql_expression_string` @@ -1648,8 +1646,6 @@ class ColumnElement( :func:`_expression.type_coerce` - .. versionadded:: 1.0.7 - """ return Cast(self, type_) @@ -2475,11 +2471,6 @@ class TextClause( query = session.query(User).from_statement(stmt).options( contains_eager(User.addresses)) - .. versionadded:: 1.1 the :meth:`_expression.TextClause.columns` - method now - offers positional column targeting in the result set when - the column expressions are passed purely positionally. - The :meth:`_expression.TextClause.columns` method provides a direct route to calling :meth:`_expression.FromClause.subquery` as well as :meth:`_expression.SelectBase.cte` @@ -3359,10 +3350,6 @@ class TypeCoerce(WrapsColumnExpression[_T]): :class:`.TypeCoerce` supplies the :func:`_expression.type_coerce` function; see that function for usage details. - .. versionchanged:: 1.1 The :func:`.type_coerce` function now produces - a persistent :class:`.TypeCoerce` wrapper object rather than - translating the given object in place. - .. seealso:: :func:`_expression.type_coerce` @@ -4231,8 +4218,6 @@ class FunctionFilter(ColumnElement[_T]): func.count(1).filter(True) - .. versionadded:: 1.0.0 - .. seealso:: :meth:`.FunctionElement.filter` @@ -4988,8 +4973,6 @@ class quoted_name(util.MemoizedSlots, str): passing the name exactly as ``"some_table"`` without converting to upper case. - .. versionadded:: 0.9.0 - .. versionchanged:: 1.2 The :class:`.quoted_name` construct is now importable from ``sqlalchemy.sql``, in addition to the previous location of ``sqlalchemy.sql.elements``. @@ -5178,8 +5161,6 @@ class conv(_truncated_label): name here is final, and the name will render as ``"ck_t_x5"`` and not ``"ck_t_ck_t_x5"`` - .. versionadded:: 0.9.4 - .. seealso:: :ref:`constraint_naming_conventions` diff --git a/lib/sqlalchemy/sql/functions.py b/lib/sqlalchemy/sql/functions.py index 0952ca0f1b..30ef0b7e34 100644 --- a/lib/sqlalchemy/sql/functions.py +++ b/lib/sqlalchemy/sql/functions.py @@ -440,9 +440,6 @@ class FunctionElement(Executable, ColumnElement[_T], FromClause, Generative): See :func:`_expression.within_group` for a full description. - .. versionadded:: 1.1 - - .. seealso:: :ref:`tutorial_functions_within_group` - @@ -467,8 +464,6 @@ class FunctionElement(Executable, ColumnElement[_T], FromClause, Generative): from sqlalchemy import funcfilter funcfilter(func.count(1), True) - .. versionadded:: 1.0.0 - .. seealso:: :ref:`tutorial_functions_within_group` - @@ -1587,8 +1582,6 @@ class array_agg(GenericFunction[_T]): stmt = select(func.array_agg(table.c.values)[2:5]) - .. versionadded:: 1.1 - .. seealso:: :func:`_postgresql.array_agg` - PostgreSQL-specific version that @@ -1646,8 +1639,6 @@ class mode(OrderedSetAgg[_T]): The return type of this function is the same as the sort expression. - .. versionadded:: 1.1 - """ inherit_cache = True @@ -1663,8 +1654,6 @@ class percentile_cont(OrderedSetAgg[_T]): or if the arguments are an array, an :class:`_types.ARRAY` of the sort expression's type. - .. versionadded:: 1.1 - """ array_for_multi_clause = True @@ -1681,8 +1670,6 @@ class percentile_disc(OrderedSetAgg[_T]): or if the arguments are an array, an :class:`_types.ARRAY` of the sort expression's type. - .. versionadded:: 1.1 - """ array_for_multi_clause = True @@ -1697,8 +1684,6 @@ class rank(GenericFunction[int]): The return type of this function is :class:`.Integer`. - .. versionadded:: 1.1 - """ type = sqltypes.Integer() @@ -1713,8 +1698,6 @@ class dense_rank(GenericFunction[int]): The return type of this function is :class:`.Integer`. - .. versionadded:: 1.1 - """ type = sqltypes.Integer() @@ -1729,8 +1712,6 @@ class percent_rank(GenericFunction[decimal.Decimal]): The return type of this function is :class:`.Numeric`. - .. versionadded:: 1.1 - """ type: sqltypes.Numeric[decimal.Decimal] = sqltypes.Numeric() @@ -1745,8 +1726,6 @@ class cume_dist(GenericFunction[decimal.Decimal]): The return type of this function is :class:`.Numeric`. - .. versionadded:: 1.1 - """ type: sqltypes.Numeric[decimal.Decimal] = sqltypes.Numeric() diff --git a/lib/sqlalchemy/sql/operators.py b/lib/sqlalchemy/sql/operators.py index ab9ddf85c7..352e5b62df 100644 --- a/lib/sqlalchemy/sql/operators.py +++ b/lib/sqlalchemy/sql/operators.py @@ -553,8 +553,6 @@ class ColumnOperators(Operators): Renders "a IS DISTINCT FROM b" on most platforms; on some such as SQLite may render "a IS NOT b". - .. versionadded:: 1.1 - """ return self.operate(is_distinct_from, other) @@ -568,8 +566,6 @@ class ColumnOperators(Operators): renamed from ``isnot_distinct_from()`` in previous releases. The previous name remains available for backwards compatibility. - .. versionadded:: 1.1 - """ return self.operate(is_not_distinct_from, other) @@ -1760,8 +1756,6 @@ class ColumnOperators(Operators): :meth:`_types.ARRAY.Comparator.any` method, which a different calling syntax and usage pattern. - .. versionadded:: 1.1 - """ return self.operate(any_op) @@ -1777,9 +1771,6 @@ class ColumnOperators(Operators): :meth:`_types.ARRAY.Comparator.all` method, which a different calling syntax and usage pattern. - - .. versionadded:: 1.1 - """ return self.operate(all_op) diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index ab56d2552c..c8d99cf891 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -139,8 +139,6 @@ class SchemaConst(Enum): :paramref:`.Sequence.schema` - .. versionadded:: 1.0.14 - """ NULL_UNSPECIFIED = 3 @@ -777,12 +775,6 @@ class Table( :class:`_schema.MetaData`, specify the special symbol :attr:`.BLANK_SCHEMA`. - .. versionadded:: 1.0.14 Added the :attr:`.BLANK_SCHEMA` symbol to - allow a :class:`_schema.Table` - to have a blank schema name even when the - parent :class:`_schema.MetaData` specifies - :paramref:`_schema.MetaData.schema`. - The quoting rules for the schema name are the same as those for the ``name`` parameter, in that quoting is applied for reserved words or case-sensitive names; to enable unconditional quoting for the schema @@ -1271,16 +1263,12 @@ class Table( new_table = table.to_metadata(m2, schema="alt_schema", referred_schema_fn=referred_schema_fn) - .. versionadded:: 0.9.2 - :param name: optional string name indicating the target table name. If not specified or None, the table name is retained. This allows a :class:`_schema.Table` to be copied to the same :class:`_schema.MetaData` target with a new name. - .. versionadded:: 1.0.0 - """ if name is None: name = self.name @@ -1438,12 +1426,6 @@ class Column(DialectKWArgs, SchemaItem, ColumnClause[_T]): well, at the moment that the foreign key is resolved against that remote :class:`_schema.Column` object. - .. versionchanged:: 0.9.0 - Support for propagation of type to a :class:`_schema.Column` - from its - :class:`_schema.ForeignKey` object has been improved and should be - more reliable and timely. - :param \*args: Additional positional arguments include various :class:`.SchemaItem` derived constructs which will be applied as options to the column. These include instances of @@ -1520,17 +1502,6 @@ class Column(DialectKWArgs, SchemaItem, ColumnClause[_T]): datatype of INTEGER in order to disable auto increment semantics for that column. - .. versionchanged:: 1.1 The autoincrement flag now defaults to - ``"auto"`` which indicates autoincrement semantics by default - for single-column integer primary keys only; for composite - (multi-column) primary keys, autoincrement is never implicitly - enabled; as always, ``autoincrement=True`` will allow for - at most one of those columns to be an "autoincrement" column. - ``autoincrement=True`` may also be set on a - :class:`_schema.Column` - that has an explicit client-side or server-side default, - subject to limitations of the backend database and dialect. - The setting *only* has an effect for columns which are: * Integer derived (i.e. INT, SMALLINT, BIGINT). @@ -2612,8 +2583,6 @@ class ForeignKey(DialectKWArgs, SchemaItem): :param info: Optional data dictionary which will be populated into the :attr:`.SchemaItem.info` attribute of this object. - .. versionadded:: 1.0.0 - :param comment: Optional string that will render an SQL comment on foreign key constraint creation. @@ -2627,8 +2596,6 @@ class ForeignKey(DialectKWArgs, SchemaItem): an individual dialect at :ref:`dialect_toplevel` for detail on documented arguments. - .. versionadded:: 0.9.2 - """ self._colspec = coercions.expect(roles.DDLReferredColumnRole, column) @@ -3480,8 +3447,6 @@ class Sequence(HasSchemaAttr, IdentityOptions, DefaultGenerator): minvalue of 1 and -2^63-1 for ascending and descending sequences, respectively. - .. versionadded:: 1.0.7 - :param maxvalue: the maximum value of the sequence. This value is used when the CREATE SEQUENCE command is emitted to the database as the value of the "MAXVALUE" clause. If ``None``, @@ -3489,8 +3454,6 @@ class Sequence(HasSchemaAttr, IdentityOptions, DefaultGenerator): maxvalue of 2^63-1 and -1 for ascending and descending sequences, respectively. - .. versionadded:: 1.0.7 - :param nominvalue: no minimum value of the sequence. This value is used when the CREATE SEQUENCE command is emitted to the database as the value of the "NO MINVALUE" clause. If ``None``, @@ -3498,8 +3461,6 @@ class Sequence(HasSchemaAttr, IdentityOptions, DefaultGenerator): minvalue of 1 and -2^63-1 for ascending and descending sequences, respectively. - .. versionadded:: 1.0.7 - :param nomaxvalue: no maximum value of the sequence. This value is used when the CREATE SEQUENCE command is emitted to the database as the value of the "NO MAXVALUE" clause. If ``None``, @@ -3507,8 +3468,6 @@ class Sequence(HasSchemaAttr, IdentityOptions, DefaultGenerator): maxvalue of 2^63-1 and -1 for ascending and descending sequences, respectively. - .. versionadded:: 1.0.7 - :param cycle: allows the sequence to wrap around when the maxvalue or minvalue has been reached by an ascending or descending sequence respectively. This value is used when the CREATE SEQUENCE command @@ -3518,8 +3477,6 @@ class Sequence(HasSchemaAttr, IdentityOptions, DefaultGenerator): after the sequence has reached its maximum value will return an error. - .. versionadded:: 1.0.7 - :param schema: optional schema name for the sequence, if located in a schema other than the default. The rules for selecting the schema name when a :class:`_schema.MetaData` @@ -3530,15 +3487,11 @@ class Sequence(HasSchemaAttr, IdentityOptions, DefaultGenerator): sequence which are calculated in advance. Renders the CACHE keyword understood by Oracle and PostgreSQL. - .. versionadded:: 1.1.12 - :param order: optional boolean value; if ``True``, renders the ORDER keyword, understood by Oracle, indicating the sequence is definitively ordered. May be necessary to provide deterministic ordering using Oracle RAC. - .. versionadded:: 1.1.12 - :param data_type: The type to be returned by the sequence, for dialects that allow us to choose between INTEGER, BIGINT, etc. (e.g., mssql). @@ -3836,8 +3789,6 @@ class Constraint(DialectKWArgs, HasConditionalDDL, SchemaItem): :param info: Optional data dictionary which will be populated into the :attr:`.SchemaItem.info` attribute of this object. - .. versionadded:: 1.0.0 - :param comment: Optional string that will render an SQL comment on foreign key constraint creation. @@ -4232,8 +4183,6 @@ class CheckConstraint(ColumnCollectionConstraint): :param info: Optional data dictionary which will be populated into the :attr:`.SchemaItem.info` attribute of this object. - .. versionadded:: 1.0.0 - """ self.sqltext = coercions.expect(roles.DDLExpressionRole, sqltext) @@ -4369,11 +4318,6 @@ class ForeignKeyConstraint(ColumnCollectionConstraint): methods will perform this resolution automatically, so the flag is normally not needed. - .. versionchanged:: 1.0.0 Automatic resolution of foreign key - cycles has been added, removing the need to use the - :paramref:`_schema.ForeignKeyConstraint.use_alter` in typical use - cases. - .. seealso:: :ref:`use_alter` @@ -4385,8 +4329,6 @@ class ForeignKeyConstraint(ColumnCollectionConstraint): :param info: Optional data dictionary which will be populated into the :attr:`.SchemaItem.info` attribute of this object. - .. versionadded:: 1.0.0 - :param comment: Optional string that will render an SQL comment on foreign key constraint creation. @@ -4397,8 +4339,6 @@ class ForeignKeyConstraint(ColumnCollectionConstraint): the documentation regarding an individual dialect at :ref:`dialect_toplevel` for detail on documented arguments. - .. versionadded:: 0.9.2 - """ Constraint.__init__( @@ -4502,8 +4442,6 @@ class ForeignKeyConstraint(ColumnCollectionConstraint): if the constraint and/or parent table is not yet associated with a metadata collection that contains the referred table. - .. versionadded:: 1.0.0 - """ return self.elements[0].column.table @@ -4527,8 +4465,6 @@ class ForeignKeyConstraint(ColumnCollectionConstraint): or if the constraint has been initialized with :class:`_schema.Column` objects, is the string ``.key`` of each element. - .. versionadded:: 1.0.0 - """ if hasattr(self, "parent"): return self._columns.keys() @@ -4647,13 +4583,6 @@ class PrimaryKeyConstraint(ColumnCollectionConstraint): marked as ``primary_key=True`` are ignored. This behavior is intended to be backwards compatible with previous behavior. - .. versionchanged:: 0.9.2 Using a mixture of columns within a - :class:`.PrimaryKeyConstraint` in addition to columns marked as - ``primary_key=True`` now emits a warning if the lists don't match. - The ultimate behavior of ignoring those columns marked with the flag - only is currently maintained for backwards compatibility; this warning - may raise an exception in a future release. - For the use case where specific options are to be specified on the :class:`.PrimaryKeyConstraint`, but the usual style of using ``primary_key=True`` flags is still desirable, an empty @@ -4669,13 +4598,6 @@ class PrimaryKeyConstraint(ColumnCollectionConstraint): mssql_clustered=True) ) - .. versionadded:: 0.9.2 an empty :class:`.PrimaryKeyConstraint` may now - be specified for the purposes of establishing keyword arguments with - the constraint, independently of the specification of "primary key" - columns within the :class:`_schema.Table` itself; columns marked as - ``primary_key=True`` will be gathered into the empty constraint's - column collection. - """ __visit_name__ = "primary_key_constraint" @@ -4916,12 +4838,6 @@ class Index( Index("some_index", text("lower(name)")) ) - .. versionadded:: 0.9.5 the :func:`_expression.text` - construct may be used to - specify :class:`.Index` expressions, provided the :class:`.Index` - is explicitly associated with the :class:`_schema.Table`. - - .. seealso:: :ref:`schema_indexes` - General information on :class:`.Index`. @@ -4976,8 +4892,6 @@ class Index( :param info=None: Optional data dictionary which will be populated into the :attr:`.SchemaItem.info` attribute of this object. - .. versionadded:: 1.0.0 - :param \**dialect_kw: Additional keyword arguments not mentioned above are dialect specific, and passed in the form ``_``. See the documentation regarding an @@ -5138,8 +5052,6 @@ class MetaData(HasSchemaAttr): :param info: Optional data dictionary which will be populated into the :attr:`.SchemaItem.info` attribute of this object. - .. versionadded:: 1.0.0 - :param naming_convention: a dictionary referring to values which will establish default naming conventions for :class:`.Constraint` and :class:`.Index` objects, for those objects which are not given @@ -5429,14 +5341,10 @@ class MetaData(HasSchemaAttr): :param extend_existing: Passed along to each :class:`_schema.Table` as :paramref:`_schema.Table.extend_existing`. - .. versionadded:: 0.9.1 - :param autoload_replace: Passed along to each :class:`_schema.Table` as :paramref:`_schema.Table.autoload_replace`. - .. versionadded:: 0.9.1 - :param resolve_fks: if True, reflect :class:`_schema.Table` objects linked to :class:`_schema.ForeignKey` objects located in each @@ -5468,11 +5376,6 @@ class MetaData(HasSchemaAttr): individual dialect at :ref:`dialect_toplevel` for detail on documented arguments. - .. versionadded:: 0.9.2 - Added - :paramref:`.MetaData.reflect.**dialect_kwargs` to support - dialect-level reflection options for all :class:`_schema.Table` - objects reflected. - """ with inspection.inspect(bind)._inspection_context() as insp: diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py index 56cca6f73d..5f530ba7dc 100644 --- a/lib/sqlalchemy/sql/selectable.py +++ b/lib/sqlalchemy/sql/selectable.py @@ -302,8 +302,6 @@ class Selectable(ReturnsRows): The return value is the :class:`_expression.Lateral` construct also provided by the top-level :func:`_expression.lateral` function. - .. versionadded:: 1.1 - .. seealso:: :ref:`tutorial_lateral_correlation` - overview of usage. @@ -491,8 +489,6 @@ class HasHints: directives such as isolation levels, file directives, fetch directives, etc. - .. versionadded:: 1.0.0 - .. seealso:: :meth:`_expression.Select.with_hint` @@ -671,8 +667,6 @@ class FromClause(roles.AnonymizedFromClauseRole, Selectable): :param full: if True, render a FULL OUTER JOIN, instead of LEFT OUTER JOIN. Implies :paramref:`.FromClause.join.isouter`. - .. versionadded:: 1.1 - .. seealso:: :func:`_expression.join` - standalone function @@ -722,8 +716,6 @@ class FromClause(roles.AnonymizedFromClauseRole, Selectable): :param full: if True, render a FULL OUTER JOIN, instead of LEFT OUTER JOIN. - .. versionadded:: 1.1 - .. seealso:: :meth:`_expression.FromClause.join` @@ -769,8 +761,6 @@ class FromClause(roles.AnonymizedFromClauseRole, Selectable): construct also provided by the top-level :func:`_expression.tablesample` function. - .. versionadded:: 1.1 - .. seealso:: :func:`_expression.tablesample` - usage guidelines and parameters @@ -1922,8 +1912,6 @@ class Lateral(FromClauseAlias, LateralFromClause): While LATERAL is part of the SQL standard, currently only more recent PostgreSQL versions provide support for this keyword. - .. versionadded:: 1.1 - .. seealso:: :ref:`tutorial_lateral_correlation` - overview of usage. @@ -1954,8 +1942,6 @@ class TableSample(FromClauseAlias): method available on all :class:`_expression.FromClause` subclasses. - .. versionadded:: 1.1 - .. seealso:: :func:`_expression.tablesample` @@ -2399,11 +2385,7 @@ class SelectsRows(ReturnsRows): class HasCTE(roles.HasCTERole, SelectsRows): - """Mixin that declares a class to include CTE support. - - .. versionadded:: 1.1 - - """ + """Mixin that declares a class to include CTE support.""" _has_ctes_traverse_internals: _TraverseInternalsType = [ ("_independent_ctes", InternalTraversal.dp_clauseelement_list), @@ -2539,9 +2521,6 @@ class HasCTE(roles.HasCTERole, SelectsRows): when combined with RETURNING, as well as a consumer of CTE rows. - .. versionchanged:: 1.1 Added support for UPDATE/INSERT/DELETE as - CTE, CTEs added to UPDATE/INSERT/DELETE. - SQLAlchemy detects :class:`_expression.CTE` objects, which are treated similarly to :class:`_expression.Alias` objects, as special elements to be delivered to the FROM clause of the statement as well @@ -3573,8 +3552,6 @@ class SelectBase( The return value is the :class:`_expression.Lateral` construct also provided by the top-level :func:`_expression.lateral` function. - .. versionadded:: 1.1 - .. seealso:: :ref:`tutorial_lateral_correlation` - overview of usage. @@ -4010,9 +3987,6 @@ class GenerativeSelect(SelectBase, Generative): The :meth:`_sql.GenerativeSelect.limit` method will replace any clause applied with :meth:`_sql.GenerativeSelect.fetch`. - .. versionchanged:: 1.0.0 - :meth:`_expression.Select.limit` can now - accept arbitrary SQL expressions as well as integer values. - :param limit: an integer LIMIT parameter, or a SQL expression that provides an integer result. Pass ``None`` to reset it. @@ -4095,10 +4069,6 @@ class GenerativeSelect(SelectBase, Generative): support ``OFFSET`` will attempt to provide similar functionality. - - .. versionchanged:: 1.0.0 - :meth:`_expression.Select.offset` can now - accept arbitrary SQL expressions as well as integer values. - :param offset: an integer OFFSET parameter, or a SQL expression that provides an integer result. Pass ``None`` to reset it. diff --git a/lib/sqlalchemy/sql/sqltypes.py b/lib/sqlalchemy/sql/sqltypes.py index 553b07442f..4e7514e38d 100644 --- a/lib/sqlalchemy/sql/sqltypes.py +++ b/lib/sqlalchemy/sql/sqltypes.py @@ -146,10 +146,6 @@ class Indexable(TypeEngineMixin): """A mixin that marks a type as supporting indexing operations, such as array or JSON structures. - - .. versionadded:: 1.1.0 - - """ class Comparator(TypeEngine.Comparator[_T]): @@ -692,8 +688,6 @@ class Float(Numeric[_N]): MySQL float types, which do include "scale", will use "scale" as the default for decimal_return_scale, if not otherwise specified. - .. versionadded:: 0.9.0 - """ # noqa: E501 self.precision = precision self.asdecimal = asdecimal @@ -1238,10 +1232,6 @@ class Enum(String, SchemaType, Emulated, TypeEngine[Union[str, enum.Enum]]): impacts usage of LIKE expressions with enumerated values (an unusual use case). - .. versionchanged:: 1.1 the :class:`.Enum` type now provides in-Python - validation of input values as well as on data being returned by - the database. - The source of enumerated values may be a list of string values, or alternatively a PEP-435-compliant enumerated class. For the purposes of the :class:`.Enum` datatype, this class need only provide a @@ -1279,10 +1269,6 @@ class Enum(String, SchemaType, Emulated, TypeEngine[Union[str, enum.Enum]]): values to be persisted. For a simple enumeration that uses string values, a callable such as ``lambda x: [e.value for e in x]`` is sufficient. - .. versionadded:: 1.1 - support for PEP-435-style enumerated - classes. - - .. seealso:: :ref:`orm_declarative_mapped_column_enums` - background on using @@ -1308,9 +1294,6 @@ class Enum(String, SchemaType, Emulated, TypeEngine[Union[str, enum.Enum]]): :param \*enums: either exactly one PEP-435 compliant enumerated type or one or more string labels. - .. versionadded:: 1.1 a PEP-435 style enumerated class may be - passed. - :param create_constraint: defaults to False. When creating a non-native enumerated type, also build a CHECK constraint on the database against the valid values. @@ -1406,8 +1389,6 @@ class Enum(String, SchemaType, Emulated, TypeEngine[Union[str, enum.Enum]]): for validity against the list of enumerated values. Unrecognized values will result in a ``LookupError`` being raised. - .. versionadded:: 1.1.0b2 - :param values_callable: A callable which will be passed the PEP-435 compliant enumerated type, which should then return a list of string values to be persisted. This allows for alternate usages such as @@ -2367,9 +2348,6 @@ class JSON(Indexable, TypeEngine[Any]): :class:`sqlalchemy.dialects.sqlite.JSON` - .. versionadded:: 1.1 - - """ __visit_name__ = "JSON" @@ -2856,8 +2834,6 @@ class ARRAY( Alternatively, assigning a new array value to an ORM element that replaces the old one will always trigger a change event. - .. versionadded:: 1.1.0 - .. seealso:: :class:`sqlalchemy.dialects.postgresql.ARRAY` @@ -3534,8 +3510,6 @@ class MatchType(Boolean): The type allows dialects to inject result-processing functionality if needed, and on MySQL will return floating-point values. - .. versionadded:: 1.0.0 - """ diff --git a/lib/sqlalchemy/sql/type_api.py b/lib/sqlalchemy/sql/type_api.py index 7167430f14..ddbdb49a09 100644 --- a/lib/sqlalchemy/sql/type_api.py +++ b/lib/sqlalchemy/sql/type_api.py @@ -292,9 +292,6 @@ class TypeEngine(Visitable, Generic[_T]): :meth:`.TypeEngine.evaluates_none` - .. versionadded:: 1.1 - - """ _variant_mapping: util.immutabledict[ @@ -337,8 +334,6 @@ class TypeEngine(Visitable, Generic[_T]): ``None`` still means "no default". - .. versionadded:: 1.1 - .. seealso:: :ref:`session_forcing_null` - in the ORM documentation @@ -380,8 +375,6 @@ class TypeEngine(Visitable, Generic[_T]): :param conn_type: the type object reflected from the backend. - .. versionadded:: 1.0.3 - """ return None @@ -1364,10 +1357,6 @@ class UserDefinedType( introspection is used to check for this in order to support legacy forms of this function. - .. versionadded:: 1.0.0 the owning expression is passed to - the ``get_col_spec()`` method via the keyword argument - ``type_expression``, if it receives ``**kw`` in its signature. - The :attr:`.UserDefinedType.cache_ok` class-level flag indicates if this custom :class:`.UserDefinedType` is safe to be used as part of a cache key. This flag defaults to ``None`` which will initially generate a warning