From cf6200563953df3ba6061676214d25dc7ac066a9 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Mon, 24 Nov 2025 19:33:18 -0500 Subject: [PATCH] test oracle 23c, mariadb12; reduce backend use one particular vector test wont run on oracle 23c free, so just disable it. added better skips for the rest of the vector tests and fixed a deprecation issue. this will be the first run on the new oracle23 on CI so we'll have to see how this goes. Also adjust for mariabdb12 being overly helpful with regards to stale row updates. as we are having trouble getting 23c to pass throug transaction tests, i noted we have an explosion of tests due to the multiple drivers, so this patch introduces __sparse_driver_backend__ for all tests where we want variety of database server but there's no need to test every driver. This should dramatically reduce the size of the test suite run Change-Id: Ic8d3eb0a60e76b4c54c6bb4a721f90c81ede782b --- lib/sqlalchemy/dialects/mssql/provision.py | 6 +++ lib/sqlalchemy/dialects/mysql/provision.py | 24 ++++++++++ lib/sqlalchemy/dialects/oracle/vector.py | 8 +++- lib/sqlalchemy/testing/config.py | 3 +- lib/sqlalchemy/testing/plugin/plugin_base.py | 46 +++++++++++++++++-- lib/sqlalchemy/testing/plugin/pytestplugin.py | 4 +- lib/sqlalchemy/testing/provision.py | 22 +++++++++ noxfile.py | 2 +- pyproject.toml | 3 +- setup.cfg | 8 ++-- test/dialect/oracle/test_reflection.py | 22 ++++----- test/dialect/oracle/test_types.py | 25 ++++++---- test/dialect/postgresql/test_query.py | 2 +- test/dialect/postgresql/test_reflection.py | 20 ++++---- test/dialect/postgresql/test_types.py | 18 ++++---- test/engine/test_execute.py | 10 ++-- test/engine/test_reflection.py | 18 ++++---- test/engine/test_transaction.py | 16 +++++-- test/ext/test_indexable.py | 4 +- .../test_tm_future_annotations_sync.py | 2 +- test/orm/declarative/test_typed_mapping.py | 2 +- test/orm/dml/test_bulk.py | 12 ++--- test/orm/dml/test_bulk_statements.py | 12 ++--- test/orm/dml/test_orm_upd_del_assorted.py | 6 +-- test/orm/dml/test_orm_upd_del_basic.py | 4 +- test/orm/dml/test_orm_upd_del_inheritance.py | 4 +- test/orm/inheritance/test_basic.py | 4 +- test/orm/inheritance/test_polymorphic_rel.py | 2 +- test/orm/test_core_compilation.py | 2 +- test/orm/test_defaults.py | 6 +-- test/orm/test_dynamic.py | 4 +- test/orm/test_eager_relations.py | 8 ++-- test/orm/test_events.py | 2 +- test/orm/test_lambdas.py | 4 +- test/orm/test_lazy_relations.py | 2 +- test/orm/test_lockmode.py | 2 +- test/orm/test_naturalpks.py | 16 +++---- test/orm/test_query.py | 4 +- test/orm/test_session.py | 4 +- test/orm/test_transaction.py | 22 ++++----- test/orm/test_unitofwork.py | 4 +- test/orm/test_unitofworkv2.py | 10 ++-- test/orm/test_versioning.py | 31 +++++++------ test/requirements.py | 14 +++++- test/sql/test_constraints.py | 2 +- test/sql/test_defaults.py | 18 ++++---- test/sql/test_delete.py | 2 +- test/sql/test_deprecations.py | 6 +-- test/sql/test_from_linter.py | 2 +- test/sql/test_functions.py | 2 +- test/sql/test_identity_column.py | 2 +- test/sql/test_insert_exec.py | 8 ++-- test/sql/test_labels.py | 2 +- test/sql/test_metadata.py | 2 +- test/sql/test_query.py | 10 ++-- test/sql/test_quote.py | 2 +- test/sql/test_resultset.py | 10 ++-- test/sql/test_returning.py | 22 ++++----- test/sql/test_sequences.py | 10 ++-- test/sql/test_statement_params.py | 2 +- test/sql/test_types.py | 26 +++++------ test/sql/test_update.py | 4 +- 62 files changed, 351 insertions(+), 225 deletions(-) diff --git a/lib/sqlalchemy/dialects/mssql/provision.py b/lib/sqlalchemy/dialects/mssql/provision.py index 10165856e1..7d02b47a88 100644 --- a/lib/sqlalchemy/dialects/mssql/provision.py +++ b/lib/sqlalchemy/dialects/mssql/provision.py @@ -136,6 +136,12 @@ def _mssql_get_temp_table_name(cfg, eng, base_name): def drop_all_schema_objects_pre_tables(cfg, eng): with eng.connect().execution_options(isolation_level="AUTOCOMMIT") as conn: inspector = inspect(conn) + + conn.exec_driver_sql( + "IF EXISTS (SELECT 1 FROM sys.fulltext_catalogs " + "WHERE name = 'Catalog') " + "DROP FULLTEXT CATALOG Catalog" + ) for schema in (None, "dbo", cfg.test_schema, cfg.test_schema_2): for tname in inspector.get_table_names(schema=schema): tb = Table( diff --git a/lib/sqlalchemy/dialects/mysql/provision.py b/lib/sqlalchemy/dialects/mysql/provision.py index fe97672ad8..242adbf82f 100644 --- a/lib/sqlalchemy/dialects/mysql/provision.py +++ b/lib/sqlalchemy/dialects/mysql/provision.py @@ -5,7 +5,11 @@ # This module is part of SQLAlchemy and is released under # the MIT License: https://www.opensource.org/licenses/mit-license.php # mypy: ignore-errors +import contextlib + +from ... import event from ... import exc +from ...testing.provision import allow_stale_update_impl from ...testing.provision import configure_follower from ...testing.provision import create_db from ...testing.provision import drop_db @@ -111,3 +115,23 @@ def _upsert( *returning, sort_by_parameter_order=sort_by_parameter_order ) return stmt + + +@allow_stale_update_impl.for_db("mariadb") +def _allow_stale_update_impl(cfg): + @contextlib.contextmanager + def go(): + @event.listens_for(cfg.db, "engine_connect") + def turn_off_snapshot_isolation(conn): + conn.exec_driver_sql("SET innodb_snapshot_isolation = 'OFF'") + conn.rollback() + + try: + yield + finally: + event.remove(cfg.db, "engine_connect", turn_off_snapshot_isolation) + + # dispose the pool; quick way to just have those reset + cfg.db.dispose() + + return go() diff --git a/lib/sqlalchemy/dialects/oracle/vector.py b/lib/sqlalchemy/dialects/oracle/vector.py index 88d47ea1d1..3df2f11e7f 100644 --- a/lib/sqlalchemy/dialects/oracle/vector.py +++ b/lib/sqlalchemy/dialects/oracle/vector.py @@ -15,8 +15,9 @@ from enum import Enum from typing import Optional from typing import Union -import sqlalchemy.types as types -from sqlalchemy.types import Float +from ... import types +from ...sql.operators import OperatorClass +from ...types import Float class VectorIndexType(Enum): @@ -242,6 +243,9 @@ class VECTOR(types.TypeEngine): """ cache_ok = True + + operator_classes = OperatorClass.BASE | OperatorClass.MATH + __visit_name__ = "VECTOR" _typecode_map = { diff --git a/lib/sqlalchemy/testing/config.py b/lib/sqlalchemy/testing/config.py index 93fece50d1..69bbe25ecd 100644 --- a/lib/sqlalchemy/testing/config.py +++ b/lib/sqlalchemy/testing/config.py @@ -337,13 +337,14 @@ class Config: self.test_schema = "test_schema" self.test_schema_2 = "test_schema_2" + self.is_async = db.dialect.is_async + self.is_default_dialect = ( db.url._get_entrypoint() is db.url.set( drivername=db.url.get_backend_name() )._get_entrypoint() ) - self.is_async = db.dialect.is_async _stack = collections.deque() _configs = set() diff --git a/lib/sqlalchemy/testing/plugin/plugin_base.py b/lib/sqlalchemy/testing/plugin/plugin_base.py index 1b7a042d17..4f35b10294 100644 --- a/lib/sqlalchemy/testing/plugin/plugin_base.py +++ b/lib/sqlalchemy/testing/plugin/plugin_base.py @@ -543,9 +543,16 @@ def want_method(cls, fn): def generate_sub_tests(cls, module, markers): - if "backend" in markers or "sparse_backend" in markers: + if ( + "backend" in markers + or "sparse_backend" in markers + or "sparse_driver_backend" in markers + ): sparse = "sparse_backend" in markers - for cfg in _possible_configs_for_cls(cls, sparse=sparse): + sparse_driver = "sparse_driver_backend" in markers + for cfg in _possible_configs_for_cls( + cls, sparse=sparse, sparse_driver=sparse_driver + ): orig_name = cls.__name__ # we can have special chars in these names except for the @@ -629,7 +636,9 @@ def after_test_fixtures(test): engines.testing_reaper.after_test_outside_fixtures(test) -def _possible_configs_for_cls(cls, reasons=None, sparse=False): +def _possible_configs_for_cls( + cls, reasons=None, sparse=False, sparse_driver=False +): all_configs = set(config.Config.all_configs()) if cls.__unsupported_on__: @@ -692,14 +701,45 @@ def _possible_configs_for_cls(cls, reasons=None, sparse=False): cfg.db.name, cfg.db.driver, cfg.db.dialect.server_version_info, + cfg.db.dialect.is_async, ), ) ) + for cfg in sorted_all_configs: db = cfg.db.name if db not in per_dialect: per_dialect[db] = cfg return per_dialect.values() + elif sparse_driver: + # a more liberal form of "sparse" that will select for one driver, + # but still return for multiple database servers + + dbs = {} + + sorted_all_configs = list( + reversed( + sorted( + all_configs, + key=lambda cfg: ( + cfg.db.name, + cfg.db.driver, + cfg.db.dialect.server_version_info, + cfg.db.dialect.is_async, + ), + ) + ) + ) + + for cfg in sorted_all_configs: + key = (cfg.db.name, cfg.db.dialect.server_version_info) + if key in dbs and dbs[key].is_default_dialect: + continue + else: + dbs[key] = cfg + + chosen_cfgs = set(dbs.values()) + return [cfg for cfg in sorted_all_configs if cfg in chosen_cfgs] return all_configs diff --git a/lib/sqlalchemy/testing/plugin/pytestplugin.py b/lib/sqlalchemy/testing/plugin/pytestplugin.py index 2071e6c3b0..664411babc 100644 --- a/lib/sqlalchemy/testing/plugin/pytestplugin.py +++ b/lib/sqlalchemy/testing/plugin/pytestplugin.py @@ -275,7 +275,9 @@ def pytest_collection_modifyitems(session, config, items): ): add_markers = {"backend"} elif getattr(test_class.cls, "__sparse_backend__", False): - add_markers = {"sparse_backend"} + add_markers = {"sparse_backend", "backend"} + elif getattr(test_class.cls, "__sparse_driver_backend__", False): + add_markers = {"sparse_driver_backend", "backend"} else: add_markers = frozenset() diff --git a/lib/sqlalchemy/testing/provision.py b/lib/sqlalchemy/testing/provision.py index 8453aef47e..17992a0ff8 100644 --- a/lib/sqlalchemy/testing/provision.py +++ b/lib/sqlalchemy/testing/provision.py @@ -9,6 +9,7 @@ from __future__ import annotations import collections +import contextlib import logging from . import config @@ -19,6 +20,7 @@ from .. import inspect from ..engine import url as sa_url from ..sql import ddl from ..sql import schema +from ..util import decorator log = logging.getLogger(__name__) @@ -499,3 +501,23 @@ def normalize_sequence(cfg, sequence): The default implementation does nothing """ return sequence + + +@register.init +def allow_stale_update_impl(cfg): + return contextlib.nullcontext() + + +@decorator +def allow_stale_updates(fn, *arg, **kw): + """decorator around a test function that indicates the test will + be UPDATING rows that have been read and are now stale. + + This normally doesn't require intervention except for mariadb 12 + which now raises its own error for that, and we want to turn off + that setting just within the scope of the test that needs it + to be turned off (i.e. ORM stale version tests) + + """ + with allow_stale_update_impl(config._current): + return fn(*arg, **kw) diff --git a/noxfile.py b/noxfile.py index b025d08520..ed388b49d6 100644 --- a/noxfile.py +++ b/noxfile.py @@ -297,7 +297,7 @@ def _tests( if database in ["oracle", "mssql", "sqlite_file"]: # use equals sign so that we avoid # https://github.com/pytest-dev/pytest/issues/13913 - cmd.extend(["--write-idents=db_idents.txt"]) + cmd.extend(["--write-idents=db_idents.txt", "--low-connections"]) cmd.extend(posargs) diff --git a/pyproject.toml b/pyproject.toml index 9a8cfb3b84..16ce68e514 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -311,7 +311,8 @@ markers = [ "mypy: mypy integration / plugin tests", "timing_intensive: time-oriented tests that are sensitive to race conditions", "backend: tests that should run on all backends; typically dialect-sensitive", - "sparse_backend: tests that should run on multiple backends, not necessarily all", + "sparse_backend: tests that should run on just one backend for each kind of db", + "sparse_driver_backend: tests that should run on just one kind of driver for each kind of db", "gc_intensive: needs extremely predictable GC behavior", ] diff --git a/setup.cfg b/setup.cfg index 4bbe7d0aab..a143065685 100644 --- a/setup.cfg +++ b/setup.cfg @@ -47,8 +47,8 @@ mssql = mssql+pyodbc://scott:tiger^5HHH@mssql2022:1433/test?driver=ODBC+Driver+1 mssql_async = mssql+aioodbc://scott:tiger^5HHH@mssql2022:1433/test?driver=ODBC+Driver+18+for+SQL+Server&TrustServerCertificate=yes&Encrypt=Optional pymssql = mssql+pymssql://scott:tiger^5HHH@mssql2022:1433/test docker_mssql = mssql+pyodbc://scott:tiger^5HHH@127.0.0.1:1433/test?driver=ODBC+Driver+18+for+SQL+Server&TrustServerCertificate=yes&Encrypt=Optional -oracle = oracle+cx_oracle://scott:tiger@oracle18c/xe -cxoracle = oracle+cx_oracle://scott:tiger@oracle18c/xe -oracledb = oracle+oracledb://scott:tiger@oracle18c/xe -oracledb_async = oracle+oracledb_async://scott:tiger@oracle18c/xe +oracle = oracle+cx_oracle://scott:tiger@oracle23c/freepdb1 +cxoracle = oracle+cx_oracle://scott:tiger@oracle23c/freepdb1 +oracledb = oracle+oracledb://scott:tiger@oracle23c/freepdb1 +oracledb_async = oracle+oracledb_async://scott:tiger@oracle23c/freepdb1 docker_oracle = oracle+cx_oracle://scott:tiger@127.0.0.1:1521/?service_name=FREEPDB1 diff --git a/test/dialect/oracle/test_reflection.py b/test/dialect/oracle/test_reflection.py index 93f89cf5d5..0dd61da03a 100644 --- a/test/dialect/oracle/test_reflection.py +++ b/test/dialect/oracle/test_reflection.py @@ -55,7 +55,7 @@ from sqlalchemy.testing.schema import Table class MultiSchemaTest(fixtures.TestBase, AssertsCompiledSQL): __only_on__ = "oracle" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_test_class(cls): @@ -354,7 +354,7 @@ class MultiSchemaTest(fixtures.TestBase, AssertsCompiledSQL): class ConstraintTest(AssertsCompiledSQL, fixtures.TestBase): __only_on__ = "oracle" - __backend__ = True + __sparse_driver_backend__ = True @testing.fixture def plain_foo_table(self, metadata, connection): @@ -544,7 +544,7 @@ class ConstraintTest(AssertsCompiledSQL, fixtures.TestBase): class SystemTableTablenamesTest(fixtures.TestBase): __only_on__ = "oracle" - __backend__ = True + __sparse_driver_backend__ = True def setup_test(self): with testing.db.begin() as conn: @@ -594,7 +594,7 @@ class DontReflectIOTTest(fixtures.TestBase): table_names.""" __only_on__ = "oracle" - __backend__ = True + __sparse_driver_backend__ = True def setup_test(self): with testing.db.begin() as conn: @@ -639,7 +639,7 @@ def enterprise_edition_or_version(version): class TableReflectionTest(fixtures.TestBase): __only_on__ = "oracle" - __backend__ = True + __sparse_driver_backend__ = True @testing.only_on(enterprise_edition_or_version(18)) def test_reflect_basic_compression(self, metadata, connection): @@ -725,7 +725,7 @@ class TableReflectionTest(fixtures.TestBase): class ViewReflectionTest(fixtures.TestBase): __only_on__ = "oracle" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_test_class(cls): @@ -933,7 +933,7 @@ class ViewReflectionTest(fixtures.TestBase): class RoundTripIndexTest(fixtures.TestBase): __only_on__ = "oracle" - __backend__ = True + __sparse_driver_backend__ = True def test_no_pk(self, metadata, connection): Table( @@ -1244,7 +1244,7 @@ class RoundTripIndexTest(fixtures.TestBase): class DBLinkReflectionTest(fixtures.TestBase): __requires__ = ("oracle_test_dblink",) __only_on__ = "oracle" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_test_class(cls): @@ -1285,7 +1285,7 @@ class DBLinkReflectionTest(fixtures.TestBase): class TypeReflectionTest(fixtures.TestBase): __only_on__ = "oracle" - __backend__ = True + __sparse_driver_backend__ = True def _run_test(self, metadata, connection, specs, attributes): columns = [Column("c%i" % (i + 1), t[0]) for i, t in enumerate(specs)] @@ -1383,7 +1383,7 @@ class TypeReflectionTest(fixtures.TestBase): class IdentityReflectionTest(fixtures.TablesTest): __only_on__ = "oracle" - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("identity_columns",) @classmethod @@ -1425,7 +1425,7 @@ class IdentityReflectionTest(fixtures.TablesTest): class AdditionalReflectionTests(fixtures.TestBase): __only_on__ = "oracle" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_test_class(cls): diff --git a/test/dialect/oracle/test_types.py b/test/dialect/oracle/test_types.py index c905b921b9..0eac7d5c2b 100644 --- a/test/dialect/oracle/test_types.py +++ b/test/dialect/oracle/test_types.py @@ -960,7 +960,7 @@ class TypesTest(fixtures.TestBase): finally: exec_sql(connection, "DROP TABLE Z_TEST") - @testing.only_on("oracle>=23.4") + @testing.requires.oracle_vector def test_vector_dim(self, metadata, connection): t1 = Table( "t1", @@ -973,7 +973,7 @@ class TypesTest(fixtures.TestBase): t1.create(connection) eq_(t1.c.c1.type.dim, 3) - @testing.only_on("oracle>=23.4") + @testing.requires.oracle_vector def test_vector_insert(self, metadata, connection): t1 = Table( "t1", @@ -998,7 +998,7 @@ class TypesTest(fixtures.TestBase): (1, [6, 7]), ) - @testing.only_on("oracle>=23.4") + @testing.requires.oracle_vector def test_vector_insert_array(self, metadata, connection): t1 = Table( "t1", @@ -1027,7 +1027,7 @@ class TypesTest(fixtures.TestBase): (1, [6, 7]), ) - @testing.only_on("oracle>=23.4") + @testing.requires.oracle_vector def test_vector_multiformat_insert(self, metadata, connection): t1 = Table( "t1", @@ -1052,7 +1052,7 @@ class TypesTest(fixtures.TestBase): (1, [6, 7]), ) - @testing.only_on("oracle>=23.4") + @testing.requires.oracle_vector def test_vector_format(self, metadata, connection): t1 = Table( "t1", @@ -1065,7 +1065,12 @@ class TypesTest(fixtures.TestBase): t1.create(connection) eq_(t1.c.c1.type.storage_format, VectorStorageFormat.FLOAT32) - @testing.only_on("oracle>=23.4") + @testing.requires.oracle_vector + @testing.skip_if( + lambda: True, + "Does not work on free versions of Oracle 23. " + "No testing platform available", + ) def test_vector_hnsw_index(self, metadata, connection): t1 = Table( "t1", @@ -1090,7 +1095,7 @@ class TypesTest(fixtures.TestBase): (1, [6.0, 7.0, 8.0]), ) - @testing.only_on("oracle>=23.4") + @testing.requires.oracle_vector def test_vector_ivf_index(self, metadata, connection): t1 = Table( "t1", @@ -1121,7 +1126,7 @@ class TypesTest(fixtures.TestBase): (1, [6.0, 7.0, 8.0]), ) - @testing.only_on("oracle>=23.4") + @testing.requires.oracle_vector def test_vector_l2_distance(self, metadata, connection): t1 = Table( "t1", @@ -1148,7 +1153,7 @@ class TypesTest(fixtures.TestBase): ).first() eq_(res.embedding, [1, 2, 3]) - @testing.only_on("oracle>=23.7") + @testing.requires.oracle_sparse_vector def test_sparse_vector(self, metadata, connection): t1 = Table( "t1", @@ -1166,7 +1171,7 @@ class TypesTest(fixtures.TestBase): t1.create(connection) eq_(t1.c.embedding.type.storage_type, VectorStorageType.SPARSE) - @testing.only_on("oracle>=23.7") + @testing.requires.oracle_sparse_vector def test_sparse_vector_insert(self, metadata, connection): t1 = Table( "t1", diff --git a/test/dialect/postgresql/test_query.py b/test/dialect/postgresql/test_query.py index 3e392e8fd2..12383a5a04 100644 --- a/test/dialect/postgresql/test_query.py +++ b/test/dialect/postgresql/test_query.py @@ -46,7 +46,7 @@ from sqlalchemy.testing.assertsql import DialectSQL class FunctionTypingTest(fixtures.TestBase, AssertsExecutionResults): __only_on__ = "postgresql" - __backend__ = True + __sparse_driver_backend__ = True def test_count_star(self, connection): eq_(connection.scalar(func.count("*")), 1) diff --git a/test/dialect/postgresql/test_reflection.py b/test/dialect/postgresql/test_reflection.py index 4dfd0e4fd0..d5bf5ab266 100644 --- a/test/dialect/postgresql/test_reflection.py +++ b/test/dialect/postgresql/test_reflection.py @@ -84,7 +84,7 @@ class ForeignTableReflectionTest( __requires__ = ("postgresql_test_dblink",) __only_on__ = "postgresql >= 9.3" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -145,7 +145,7 @@ class PartitionedReflectionTest(fixtures.TablesTest, AssertsExecutionResults): # partitioned table reflection, issue #4237 __only_on__ = "postgresql >= 10" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -226,7 +226,7 @@ class MaterializedViewReflectionTest( """Test reflection on materialized views""" __only_on__ = "postgresql >= 9.3" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -407,7 +407,7 @@ class DomainReflectionTest(fixtures.TestBase, AssertsExecutionResults): """Test PostgreSQL domains""" __only_on__ = "postgresql > 8.3" - __backend__ = True + __sparse_driver_backend__ = True # these fixtures are all currently using individual test scope, # on a connection that's in a transaction that's rolled back. @@ -864,7 +864,7 @@ class DomainReflectionTest(fixtures.TestBase, AssertsExecutionResults): class ArrayReflectionTest(fixtures.TablesTest): __only_on__ = "postgresql >= 10" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -895,7 +895,7 @@ class ReflectionTest( ReflectionFixtures, AssertsCompiledSQL, ComparesIndexes, fixtures.TestBase ): __only_on__ = "postgresql" - __backend__ = True + __sparse_driver_backend__ = True def test_reflected_primary_key_order(self, metadata, connection): meta1 = metadata @@ -2812,7 +2812,7 @@ class CustomTypeReflectionTest(fixtures.TestBase): class IntervalReflectionTest(fixtures.TestBase): __only_on__ = "postgresql" - __backend__ = True + __sparse_driver_backend__ = True @testing.combinations( ("YEAR",), @@ -2867,7 +2867,7 @@ class IntervalReflectionTest(fixtures.TestBase): class IdentityReflectionTest(fixtures.TablesTest): __only_on__ = "postgresql" - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("identity_columns",) _names = ("t1", "T2", "MiXeDCaSe!") @@ -2942,7 +2942,7 @@ class IdentityReflectionTest(fixtures.TablesTest): class TestReflectDifficultColTypes(fixtures.TablesTest): __only_on__ = "postgresql" - __backend__ = True + __sparse_driver_backend__ = True def define_tables(metadata): Table( @@ -3003,7 +3003,7 @@ class TestReflectDifficultColTypes(fixtures.TablesTest): class TestTableOptionsReflection(fixtures.TestBase): __only_on__ = "postgresql" - __backend__ = True + __sparse_driver_backend__ = True def test_table_inherits(self, metadata, connection): def assert_inherits_from(table_name, expect_base_tables): diff --git a/test/dialect/postgresql/test_types.py b/test/dialect/postgresql/test_types.py index 6ef25fe363..e01c777428 100644 --- a/test/dialect/postgresql/test_types.py +++ b/test/dialect/postgresql/test_types.py @@ -252,7 +252,7 @@ class FloatCoercionTest(fixtures.TablesTest, AssertsExecutionResults): class NamedTypeTest( AssertsCompiledSQL, fixtures.TestBase, AssertsExecutionResults ): - __backend__ = True + __sparse_driver_backend__ = True __only_on__ = "postgresql > 8.3" @@ -1482,7 +1482,7 @@ class NamedTypeTest( class DomainTest( AssertsCompiledSQL, fixtures.TestBase, AssertsExecutionResults ): - __backend__ = True + __sparse_driver_backend__ = True __only_on__ = "postgresql > 8.3" @testing.requires.postgresql_working_nullable_domains @@ -1640,7 +1640,7 @@ class DomainTest( class DomainDDLEventTest(DDLEventWCreateHarness, fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True __only_on__ = "postgresql > 8.3" @@ -1667,7 +1667,7 @@ class DomainDDLEventTest(DDLEventWCreateHarness, fixtures.TestBase): class EnumDDLEventTest(DDLEventWCreateHarness, fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True __only_on__ = "postgresql > 8.3" @@ -1715,7 +1715,7 @@ class NativeEnumDDLEventTest(EnumDDLEventTest): class OIDTest(fixtures.TestBase): __only_on__ = "postgresql" - __backend__ = True + __sparse_driver_backend__ = True def test_reflection(self, connection, metadata): Table( @@ -1736,7 +1736,7 @@ class OIDTest(fixtures.TestBase): class RegClassTest(fixtures.TestBase): __only_on__ = "postgresql" - __backend__ = True + __sparse_driver_backend__ = True @testing.fixture() def scalar(self, connection): @@ -3824,7 +3824,7 @@ class SpecialTypesTest(fixtures.TablesTest, ComparesTables): """test DDL and reflection of PG-specific types""" __only_on__ = ("postgresql >= 8.3.0",) - __backend__ = True + __sparse_driver_backend__ = True @testing.metadata_fixture() def special_types_table(self, metadata): @@ -5444,7 +5444,7 @@ class _RangeComparisonFixtures(_RangeTests): class _RangeTypeRoundTrip(_RangeComparisonFixtures, fixtures.TablesTest): __requires__ = ("range_types",) - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -5986,7 +5986,7 @@ class _MultiRangeTypeCompilation(AssertsCompiledSQL, fixtures.TestBase): class _MultiRangeTypeRoundTrip(fixtures.TablesTest, _RangeTests): __requires__ = ("multirange_types",) - __backend__ = True + __sparse_driver_backend__ = True @testing.fixture(params=(True, False), ids=["multirange", "plain_list"]) def data_obj(self, request): diff --git a/test/engine/test_execute.py b/test/engine/test_execute.py index 17a51ad76f..9c76c160b6 100644 --- a/test/engine/test_execute.py +++ b/test/engine/test_execute.py @@ -927,7 +927,7 @@ class ExecuteTest(fixtures.TablesTest): class ConvenienceExecuteTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1058,7 +1058,7 @@ class ConvenienceExecuteTest(fixtures.TablesTest): class CompiledCacheTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True def test_cache(self, connection, metadata): users = Table( @@ -1263,7 +1263,7 @@ class MockStrategyTest(fixtures.TestBase): class SchemaTranslateTest(fixtures.TestBase, testing.AssertsExecutionResults): __requires__ = ("schemas",) - __backend__ = True + __sparse_driver_backend__ = True @testing.fixture def plain_tables(self, metadata): @@ -1720,7 +1720,7 @@ class ExecutionOptionsTest(fixtures.TestBase): class EngineEventsTest(fixtures.TestBase): __requires__ = ("ad_hoc_engines",) - __backend__ = True + __sparse_driver_backend__ = True def teardown_test(self): Engine.dispatch._clear() @@ -2842,7 +2842,7 @@ class EngineEventsTest(fixtures.TestBase): class HandleErrorTest(fixtures.TestBase): __requires__ = ("ad_hoc_engines",) - __backend__ = True + __sparse_driver_backend__ = True def teardown_test(self): Engine.dispatch._clear() diff --git a/test/engine/test_reflection.py b/test/engine/test_reflection.py index e5e8ddde4f..65857eaec4 100644 --- a/test/engine/test_reflection.py +++ b/test/engine/test_reflection.py @@ -47,7 +47,7 @@ from sqlalchemy.testing.schema import Table class ReflectionTest(fixtures.TestBase, ComparesTables): - __backend__ = True + __sparse_driver_backend__ = True def test_basic_reflection(self, connection, metadata): meta = metadata @@ -1483,7 +1483,7 @@ class ReflectionTest(fixtures.TestBase, ComparesTables): class CreateDropTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True run_create_tables = None @@ -1629,7 +1629,7 @@ class CreateDropTest(fixtures.TablesTest): class SchemaManipulationTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True def test_append_constraint_unique(self): meta = MetaData() @@ -1651,7 +1651,7 @@ class SchemaManipulationTest(fixtures.TestBase): class UnicodeReflectionTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1774,7 +1774,7 @@ class UnicodeReflectionTest(fixtures.TablesTest): class SchemaTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True @testing.requires.schemas def test_has_schema(self): @@ -2037,7 +2037,7 @@ def _drop_views(conn, schema=None): class ReverseCasingReflectTest(fixtures.TestBase, AssertsCompiledSQL): __dialect__ = "default" - __backend__ = True + __sparse_driver_backend__ = True @testing.requires.denormalized_names def setup_test(self): @@ -2072,7 +2072,7 @@ class ReverseCasingReflectTest(fixtures.TestBase, AssertsCompiledSQL): class CaseSensitiveTest(fixtures.TablesTest): """Nail down case sensitive behaviors, mostly on MySQL.""" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -2120,7 +2120,7 @@ class CaseSensitiveTest(fixtures.TablesTest): class ColumnEventsTest(fixtures.RemovesEvents, fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -2343,7 +2343,7 @@ class ComputedColumnTest(fixtures.ComputedReflectionFixtureTest): class IdentityColumnTest(fixtures.TablesTest): run_inserts = run_deletes = None - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("identity_columns", "table_reflection") @classmethod diff --git a/test/engine/test_transaction.py b/test/engine/test_transaction.py index 182d680f0c..c93ab149d4 100644 --- a/test/engine/test_transaction.py +++ b/test/engine/test_transaction.py @@ -27,7 +27,7 @@ from sqlalchemy.testing.schema import Table class TransactionTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1105,7 +1105,7 @@ class TransactionTest(fixtures.TablesTest): class AutoRollbackTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_test_class(cls): @@ -1145,13 +1145,19 @@ class AutoRollbackTest(fixtures.TestBase): class IsolationLevelTest(fixtures.TestBase): - """see also sqlalchemy/testing/suite/test_dialect.py::IsolationLevelTest""" + """see also sqlalchemy/testing/suite/test_dialect.py::IsolationLevelTest + + this suite has sparse_backend / ad_hoc_engines so wont take place + for every dbdriver under a nox run. the suite test should cover + that end of it + + """ __requires__ = ( "isolation_level", "ad_hoc_engines", ) - __backend__ = True + __sparse_driver_backend__ = True def _default_isolation_level(self): return testing.requires.get_isolation_levels(testing.config)["default"] @@ -1669,7 +1675,7 @@ class ResetAgentTest(ResetFixture, fixtures.TestBase): # the state is cleared. options to optimize this with clear # docs etc. should be added. - __backend__ = True + __sparse_driver_backend__ = True def test_begin_close(self, reset_agent): with reset_agent.engine.connect() as connection: diff --git a/test/ext/test_indexable.py b/test/ext/test_indexable.py index 4421c3a6ed..7e1f309b06 100644 --- a/test/ext/test_indexable.py +++ b/test/ext/test_indexable.py @@ -171,7 +171,7 @@ class IndexPropertyTest(fixtures.TestBase): class IndexPropertyArrayTest(fixtures.DeclarativeMappedTest): __requires__ = ("array_type",) - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_classes(cls): @@ -254,7 +254,7 @@ class IndexPropertyJsonTest(fixtures.DeclarativeMappedTest): __requires__ = ("json_type",) __only_on__ = "postgresql" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_classes(cls): diff --git a/test/orm/declarative/test_tm_future_annotations_sync.py b/test/orm/declarative/test_tm_future_annotations_sync.py index 5f193693e3..87f7858169 100644 --- a/test/orm/declarative/test_tm_future_annotations_sync.py +++ b/test/orm/declarative/test_tm_future_annotations_sync.py @@ -4609,7 +4609,7 @@ class GenericMappingQueryTest(AssertsCompiledSQL, fixtures.TestBase): class BackendTests(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True @testing.variation("native_enum", [True, False]) @testing.variation("include_column", [True, False]) diff --git a/test/orm/declarative/test_typed_mapping.py b/test/orm/declarative/test_typed_mapping.py index eb8ac576f7..9f67bf9474 100644 --- a/test/orm/declarative/test_typed_mapping.py +++ b/test/orm/declarative/test_typed_mapping.py @@ -4600,7 +4600,7 @@ class GenericMappingQueryTest(AssertsCompiledSQL, fixtures.TestBase): class BackendTests(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True @testing.variation("native_enum", [True, False]) @testing.variation("include_column", [True, False]) diff --git a/test/orm/dml/test_bulk.py b/test/orm/dml/test_bulk.py index 3159c139da..117e365713 100644 --- a/test/orm/dml/test_bulk.py +++ b/test/orm/dml/test_bulk.py @@ -24,7 +24,7 @@ class BulkTest(testing.AssertsExecutionResults): class BulkInsertUpdateVersionId(BulkTest, fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -79,7 +79,7 @@ class BulkInsertUpdateVersionId(BulkTest, fixtures.MappedTest): class BulkInsertUpdateTest(BulkTest, _fixtures.FixtureTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_mappers(cls): @@ -385,7 +385,7 @@ class BulkInsertUpdateTest(BulkTest, _fixtures.FixtureTest): class BulkUDPostfetchTest(BulkTest, fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -444,7 +444,7 @@ class BulkUDPostfetchTest(BulkTest, fixtures.MappedTest): class BulkUDTestAltColKeys(BulkTest, fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -633,7 +633,7 @@ class BulkUDTestAltColKeys(BulkTest, fixtures.MappedTest): class BulkInheritanceTest(BulkTest, fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1042,7 +1042,7 @@ class BulkInheritanceTest(BulkTest, fixtures.MappedTest): class BulkIssue6793Test(BulkTest, fixtures.DeclarativeMappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_classes(cls): diff --git a/test/orm/dml/test_bulk_statements.py b/test/orm/dml/test_bulk_statements.py index 430c0bc992..d9dbda2399 100644 --- a/test/orm/dml/test_bulk_statements.py +++ b/test/orm/dml/test_bulk_statements.py @@ -60,7 +60,7 @@ from sqlalchemy.types import NullType class InsertStmtTest(testing.AssertsExecutionResults, fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True @testing.variation( "style", @@ -696,7 +696,7 @@ class InsertStmtTest(testing.AssertsExecutionResults, fixtures.TestBase): class UpdateStmtTest(testing.AssertsExecutionResults, fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True @testing.variation( "use_onupdate", @@ -2227,7 +2227,7 @@ class BulkDMLReturningJoinedInhTest( BulkDMLReturningInhTest, fixtures.DeclarativeMappedTest ): __requires__ = ("insert_returning", "insert_executemany_returning") - __backend__ = True + __sparse_driver_backend__ = True use_sentinel = False randomize_returning = False @@ -2344,7 +2344,7 @@ class BulkDMLReturningSingleInhTest( BulkDMLReturningInhTest, fixtures.DeclarativeMappedTest ): __requires__ = ("insert_returning", "insert_executemany_returning") - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_classes(cls): @@ -2387,7 +2387,7 @@ class BulkDMLReturningConcreteInhTest( BulkDMLReturningInhTest, fixtures.DeclarativeMappedTest ): __requires__ = ("insert_returning", "insert_executemany_returning") - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_classes(cls): @@ -2427,7 +2427,7 @@ class BulkDMLReturningConcreteInhTest( class CTETest(fixtures.DeclarativeMappedTest): __requires__ = ("insert_returning", "ctes_on_dml") - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_classes(cls): diff --git a/test/orm/dml/test_orm_upd_del_assorted.py b/test/orm/dml/test_orm_upd_del_assorted.py index 53fe0acc55..28d729a3c8 100644 --- a/test/orm/dml/test_orm_upd_del_assorted.py +++ b/test/orm/dml/test_orm_upd_del_assorted.py @@ -24,7 +24,7 @@ from sqlalchemy.testing.schema import Table class LoadFromReturningTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("insert_returning",) @classmethod @@ -174,7 +174,7 @@ class LoadFromReturningTest(fixtures.MappedTest): class OnUpdatePopulationTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True @testing.variation("populate_existing", [True, False]) @testing.variation( @@ -393,7 +393,7 @@ class OnUpdatePopulationTest(fixtures.TestBase): class PGIssue11849Test(fixtures.DeclarativeMappedTest): - __backend__ = True + __sparse_driver_backend__ = True __only_on__ = ("postgresql",) @classmethod diff --git a/test/orm/dml/test_orm_upd_del_basic.py b/test/orm/dml/test_orm_upd_del_basic.py index 4df674facd..09b499eda0 100644 --- a/test/orm/dml/test_orm_upd_del_basic.py +++ b/test/orm/dml/test_orm_upd_del_basic.py @@ -50,7 +50,7 @@ from sqlalchemy.testing.schema import Table class UpdateDeleteTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -2312,7 +2312,7 @@ class UpdateDeleteIgnoresLoadersTest(fixtures.MappedTest): class UpdateDeleteFromTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/orm/dml/test_orm_upd_del_inheritance.py b/test/orm/dml/test_orm_upd_del_inheritance.py index 8d2c1e4bb0..ffce962be5 100644 --- a/test/orm/dml/test_orm_upd_del_inheritance.py +++ b/test/orm/dml/test_orm_upd_del_inheritance.py @@ -23,7 +23,7 @@ class InheritTest(fixtures.DeclarativeMappedTest): run_inserts = "each" run_deletes = "each" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_classes(cls): @@ -390,7 +390,7 @@ class InheritWPolyTest(fixtures.TestBase, AssertsCompiledSQL): class SingleTablePolymorphicTest(fixtures.DeclarativeMappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_classes(cls): diff --git a/test/orm/inheritance/test_basic.py b/test/orm/inheritance/test_basic.py index f84807fa92..d5455b2c9d 100644 --- a/test/orm/inheritance/test_basic.py +++ b/test/orm/inheritance/test_basic.py @@ -139,7 +139,7 @@ class O2MTest(fixtures.MappedTest): class ColExpressionsTest(fixtures.DeclarativeMappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_classes(cls): @@ -2794,7 +2794,7 @@ class OverrideColKeyTest(fixtures.MappedTest): class OptimizedLoadTest(fixtures.MappedTest): """tests for the "optimized load" routine.""" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/orm/inheritance/test_polymorphic_rel.py b/test/orm/inheritance/test_polymorphic_rel.py index 1216aa0106..42581c4985 100644 --- a/test/orm/inheritance/test_polymorphic_rel.py +++ b/test/orm/inheritance/test_polymorphic_rel.py @@ -32,7 +32,7 @@ from ._poly_fixtures import Person class _PolymorphicTestBase: - __backend__ = True + __sparse_driver_backend__ = True __dialect__ = "default_enhanced" @classmethod diff --git a/test/orm/test_core_compilation.py b/test/orm/test_core_compilation.py index b2fb34ad5c..3f6ddb28fe 100644 --- a/test/orm/test_core_compilation.py +++ b/test/orm/test_core_compilation.py @@ -424,7 +424,7 @@ class SelectableTest(QueryTest, AssertsCompiledSQL): class PropagateAttrsTest(QueryTest): - __backend__ = True + __sparse_driver_backend__ = True def propagate_cases(): def distinct_deprecated(User, user_table): diff --git a/test/orm/test_defaults.py b/test/orm/test_defaults.py index 0b0ad90943..c720e09152 100644 --- a/test/orm/test_defaults.py +++ b/test/orm/test_defaults.py @@ -19,7 +19,7 @@ from sqlalchemy.testing.schema import Table class TriggerDefaultsTest(fixtures.MappedTest): __requires__ = ("row_triggers",) - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -228,7 +228,7 @@ class ComputedDefaultsOnUpdateTest(fixtures.MappedTest): """test that computed columns are recognized as server oninsert/onupdate defaults.""" - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("computed_columns",) @classmethod @@ -419,7 +419,7 @@ class IdentityDefaultsOnUpdateTest(fixtures.MappedTest): """test that computed columns are recognized as server oninsert/onupdate defaults.""" - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("identity_columns",) run_create_tables = "each" diff --git a/test/orm/test_dynamic.py b/test/orm/test_dynamic.py index 9c69c10db2..f35e5f0471 100644 --- a/test/orm/test_dynamic.py +++ b/test/orm/test_dynamic.py @@ -1477,7 +1477,7 @@ class WriteOnlyUOWTest( _fixtures.FixtureTest, testing.AssertsExecutionResults, ): - __backend__ = True + __sparse_driver_backend__ = True @testing.fixture def passive_deletes_fixture(self, decl_base, connection): @@ -1651,7 +1651,7 @@ class WriteOnlyBulkTest( testing.AssertsExecutionResults, ): run_inserts = None - __backend__ = True + __sparse_driver_backend__ = True @testing.requires.insert_executemany_returning @testing.combinations(True, False, argnames="flush_user_first") diff --git a/test/orm/test_eager_relations.py b/test/orm/test_eager_relations.py index 18c443a6b7..c644645631 100644 --- a/test/orm/test_eager_relations.py +++ b/test/orm/test_eager_relations.py @@ -3324,7 +3324,7 @@ class SelectUniqueTest(_fixtures.FixtureTest): class InnerJoinSplicingTest(fixtures.MappedTest, testing.AssertsCompiledSQL): __dialect__ = "default" - __backend__ = True # exercise hardcore join nesting on backends + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -3658,7 +3658,7 @@ class InnerJoinSplicingWSecondaryTest( fixtures.MappedTest, testing.AssertsCompiledSQL ): __dialect__ = "default" - __backend__ = True # exercise hardcore join nesting on backends + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -3788,7 +3788,7 @@ class InnerJoinSplicingWSecondarySelfRefTest( """test for issue 11449""" __dialect__ = "default" - __backend__ = True # exercise hardcore join nesting on backends + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -7130,7 +7130,7 @@ class SingletonConstantSubqTest(_fixtures.FixtureTest): run_inserts = "once" run_deletes = None - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_mappers(cls): diff --git a/test/orm/test_events.py b/test/orm/test_events.py index 437f7e8c58..e08987eb80 100644 --- a/test/orm/test_events.py +++ b/test/orm/test_events.py @@ -3870,7 +3870,7 @@ class RefreshFlushInReturningTest(fixtures.MappedTest): """ - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/orm/test_lambdas.py b/test/orm/test_lambdas.py index 7373093ee3..de2489c3b7 100644 --- a/test/orm/test_lambdas.py +++ b/test/orm/test_lambdas.py @@ -31,7 +31,7 @@ class LambdaTest(QueryTest, AssertsCompiledSQL): # we want to test the lambda expiration logic so use backend # to exercise that - __backend__ = True + __sparse_driver_backend__ = True run_setup_mappers = None @testing.fixture @@ -371,7 +371,7 @@ class PolymorphicTest(_poly_fixtures._Polymorphic): class UpdateDeleteTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True run_setup_mappers = "once" diff --git a/test/orm/test_lazy_relations.py b/test/orm/test_lazy_relations.py index ff8063cc3a..7feb9d4ec8 100644 --- a/test/orm/test_lazy_relations.py +++ b/test/orm/test_lazy_relations.py @@ -1619,7 +1619,7 @@ class RefersToSelfLazyLoadInterferenceTest(fixtures.MappedTest): class TypeCoerceTest(fixtures.MappedTest, testing.AssertsExecutionResults): """ORM-level test for [ticket:3531]""" - __backend__ = True + __sparse_driver_backend__ = True class StringAsInt(TypeDecorator): impl = String(50) diff --git a/test/orm/test_lockmode.py b/test/orm/test_lockmode.py index 2e03c3e87c..5ebbde8138 100644 --- a/test/orm/test_lockmode.py +++ b/test/orm/test_lockmode.py @@ -64,7 +64,7 @@ class ForUpdateTest(_fixtures.FixtureTest): class BackendTest(_fixtures.FixtureTest): - __backend__ = True + __sparse_driver_backend__ = True # test against the major backends. We are naming specific databases # here rather than using requirements rules since the behavior of diff --git a/test/orm/test_naturalpks.py b/test/orm/test_naturalpks.py index 64c033ec47..7403715492 100644 --- a/test/orm/test_naturalpks.py +++ b/test/orm/test_naturalpks.py @@ -44,7 +44,7 @@ class NaturalPKTest(fixtures.MappedTest): # MySQL 5.5 on Windows crashes (the entire server, not the client) # if you screw around with ON UPDATE CASCADE type of stuff. __requires__ = ("skip_mysql_on_windows",) - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -745,7 +745,7 @@ class NaturalPKTest(fixtures.MappedTest): class TransientExceptionTesst(_fixtures.FixtureTest): run_inserts = None - __backend__ = True + __sparse_driver_backend__ = True def test_transient_exception(self): """An object that goes from a pk value to transient/pending @@ -790,7 +790,7 @@ class ReversePKsTest(fixtures.MappedTest): """reverse the primary keys of two entities and ensure bookkeeping succeeds.""" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -888,7 +888,7 @@ class SelfReferentialTest(fixtures.MappedTest): __unsupported_on__ = ("mssql", "mysql", "mariadb") __requires__ = ("on_update_or_deferrable_fks",) - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1027,7 +1027,7 @@ class SelfReferentialTest(fixtures.MappedTest): class NonPKCascadeTest(fixtures.MappedTest): __requires__ = "skip_mysql_on_windows", "on_update_or_deferrable_fks" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1161,7 +1161,7 @@ class CascadeToFKPKTest(fixtures.MappedTest, testing.AssertsCompiledSQL): """A primary key mutation cascades onto a foreign key that is itself a primary key.""" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1485,7 +1485,7 @@ class JoinedInheritanceTest(fixtures.MappedTest): __unsupported_on__ = ("mssql",) __requires__ = ("skip_mysql_on_windows",) - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1853,7 +1853,7 @@ class JoinedInheritancePKOnFKTest(fixtures.MappedTest): __unsupported_on__ = ("mssql",) __requires__ = ("skip_mysql_on_windows",) - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/orm/test_query.py b/test/orm/test_query.py index b201e4343c..c2ce24d278 100644 --- a/test/orm/test_query.py +++ b/test/orm/test_query.py @@ -2797,7 +2797,7 @@ class ComparatorTest(QueryTest): # more slice tests are available in test/orm/generative.py class SliceTest(QueryTest): __dialect__ = "default" - __backend__ = True + __sparse_driver_backend__ = True def test_first(self): User = self.classes.User @@ -5296,7 +5296,7 @@ class YieldTest(_fixtures.FixtureTest): run_setup_mappers = "each" run_inserts = "each" - __backend__ = True + __sparse_driver_backend__ = True def _eagerload_mappings(self, addresses_lazy=True, user_lazy=True): User, Address = self.classes("User", "Address") diff --git a/test/orm/test_session.py b/test/orm/test_session.py index 5d1875bd80..349768c21b 100644 --- a/test/orm/test_session.py +++ b/test/orm/test_session.py @@ -63,7 +63,7 @@ if TYPE_CHECKING: class ExecutionTest(_fixtures.FixtureTest): run_inserts = None - __backend__ = True + __sparse_driver_backend__ = True @testing.combinations( (True,), (False,), argnames="add_do_orm_execute_event" @@ -1674,7 +1674,7 @@ class DeferredRelationshipExpressionTest(_fixtures.FixtureTest): class SessionStateWFixtureTest(_fixtures.FixtureTest): - __backend__ = True + __sparse_driver_backend__ = True def test_autoflush_rollback(self): Address, addresses, users, User = ( diff --git a/test/orm/test_transaction.py b/test/orm/test_transaction.py index 2f7a2f1980..2443bb784b 100644 --- a/test/orm/test_transaction.py +++ b/test/orm/test_transaction.py @@ -49,7 +49,7 @@ if TYPE_CHECKING: class SessionTransactionTest(fixtures.RemovesEvents, FixtureTest): run_inserts = None - __backend__ = True + __sparse_driver_backend__ = True def test_no_close_transaction_on_flush(self, connection): User, users = self.classes.User, self.tables.users @@ -1132,7 +1132,7 @@ def subtransaction_recipe_three(self): ) class SubtransactionRecipeTest(FixtureTest): run_inserts = None - __backend__ = True + __sparse_driver_backend__ = True @testing.fixture def subtransaction_recipe(self): @@ -1310,7 +1310,7 @@ class SubtransactionRecipeTest(FixtureTest): class FixtureDataTest(_LocalFixture): run_inserts = "each" - __backend__ = True + __sparse_driver_backend__ = True def test_attrs_on_rollback(self): User = self.classes.User @@ -1352,7 +1352,7 @@ class CleanSavepointTest(FixtureTest): """ run_inserts = None - __backend__ = True + __sparse_driver_backend__ = True def _run_test(self, update_fn): User, users = self.classes.User, self.tables.users @@ -1409,7 +1409,7 @@ class CleanSavepointTest(FixtureTest): class AutoExpireTest(_LocalFixture): - __backend__ = True + __sparse_driver_backend__ = True def test_expunge_pending_on_rollback(self): User = self.classes.User @@ -1521,7 +1521,7 @@ class AutoExpireTest(_LocalFixture): class TwoPhaseTest(_LocalFixture): - __backend__ = True + __sparse_driver_backend__ = True @testing.requires.two_phase_transactions def test_rollback_on_prepare(self): @@ -1537,7 +1537,7 @@ class TwoPhaseTest(_LocalFixture): class RollbackRecoverTest(_LocalFixture): - __backend__ = True + __sparse_driver_backend__ = True def test_pk_violation(self): User, Address = self.classes.User, self.classes.Address @@ -1620,7 +1620,7 @@ class RollbackRecoverTest(_LocalFixture): class SavepointTest(_LocalFixture): - __backend__ = True + __sparse_driver_backend__ = True @testing.requires.savepoints def test_savepoint_rollback(self): @@ -1869,7 +1869,7 @@ class SavepointTest(_LocalFixture): class AccountingFlagsTest(_LocalFixture): - __backend__ = True + __sparse_driver_backend__ = True def test_no_expire_on_commit(self): User, users = self.classes.User, self.tables.users @@ -1890,7 +1890,7 @@ class AccountingFlagsTest(_LocalFixture): class ContextManagerPlusFutureTest(FixtureTest): run_inserts = None - __backend__ = True + __sparse_driver_backend__ = True @testing.requires.savepoints @engines.close_open_connections @@ -2328,7 +2328,7 @@ class TransactionFlagsTest(fixtures.TestBase): class NaturalPKRollbackTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/orm/test_unitofwork.py b/test/orm/test_unitofwork.py index eb290156b8..f8873f9154 100644 --- a/test/orm/test_unitofwork.py +++ b/test/orm/test_unitofwork.py @@ -486,7 +486,7 @@ class ForeignPKTest(fixtures.MappedTest): class ClauseAttributesTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -3484,7 +3484,7 @@ class NoRowInsertedTest(fixtures.TestBase): # the test manipulates INSERTS to become UPDATES to simulate # "INSERT that returns no row" so both are needed; the manipulations # are currently postgresql or SQLite specific - __backend__ = True + __sparse_driver_backend__ = True __only_on__ = ("postgresql", "sqlite") @testing.fixture diff --git a/test/orm/test_unitofworkv2.py b/test/orm/test_unitofworkv2.py index af6f0c2ce7..9f6610f08c 100644 --- a/test/orm/test_unitofworkv2.py +++ b/test/orm/test_unitofworkv2.py @@ -1759,7 +1759,7 @@ class RowswitchM2OTest(fixtures.MappedTest): class BasicStaleChecksTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -2305,7 +2305,7 @@ class NoAttrEventInFlushTest(fixtures.MappedTest): """ - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -2350,7 +2350,7 @@ class NoAttrEventInFlushTest(fixtures.MappedTest): class EagerDefaultsTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -3122,7 +3122,7 @@ class EagerDefaultsTest(fixtures.MappedTest): class EagerDefaultsSettingTest( testing.AssertsExecutionResults, fixtures.TestBase ): - __backend__ = True + __sparse_driver_backend__ = True @variation_fixture("eager_defaults", ["unspecified", "auto", True, False]) def eager_defaults_variations(self, request): @@ -3932,7 +3932,7 @@ class ORMOnlyPrimaryKeyTest(fixtures.TestBase): class TryToFoolInsertManyValuesTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True @testing.variation( "pk_type", diff --git a/test/orm/test_versioning.py b/test/orm/test_versioning.py index d239869a4e..9a06de72dd 100644 --- a/test/orm/test_versioning.py +++ b/test/orm/test_versioning.py @@ -32,6 +32,7 @@ from sqlalchemy.testing import expect_warnings from sqlalchemy.testing import fixtures from sqlalchemy.testing import is_false from sqlalchemy.testing import is_true +from sqlalchemy.testing import provision from sqlalchemy.testing.assertsql import CompiledSQL from sqlalchemy.testing.fixtures import fixture_session from sqlalchemy.testing.schema import Column @@ -66,7 +67,7 @@ def conditional_sane_rowcount_warnings( class NullVersionIdTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -147,7 +148,7 @@ class NullVersionIdTest(fixtures.MappedTest): class VersioningTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -194,6 +195,7 @@ class VersioningTest(fixtures.MappedTest): finally: testing.db.dialect.supports_sane_rowcount = save + @provision.allow_stale_updates def test_basic(self): Foo = self.classes.Foo @@ -341,6 +343,7 @@ class VersioningTest(fixtures.MappedTest): s1.commit() eq_(s1.query(Foo).count(), 0) + @provision.allow_stale_updates @engines.close_open_connections def test_versioncheck(self): """query.with_lockmode performs a 'version check' on an already loaded @@ -588,7 +591,7 @@ class VersioningTest(fixtures.MappedTest): class VersionOnPostUpdateTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -802,7 +805,7 @@ class PostUpdatePrefetchTest(fixtures.DeclarativeMappedTest): class NoBumpOnRelationshipTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -895,7 +898,7 @@ class NoBumpOnRelationshipTest(fixtures.MappedTest): class ColumnTypeTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("sane_rowcount",) @classmethod @@ -945,7 +948,7 @@ class ColumnTypeTest(fixtures.MappedTest): class RowSwitchTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1025,7 +1028,7 @@ class RowSwitchTest(fixtures.MappedTest): class AlternateGeneratorTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("sane_rowcount",) @classmethod @@ -1145,7 +1148,7 @@ class AlternateGeneratorTest(fixtures.MappedTest): class PlainInheritanceTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1204,7 +1207,7 @@ class InheritanceTwoVersionIdsTest(fixtures.MappedTest): """ - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1332,7 +1335,7 @@ class InheritanceTwoVersionIdsTest(fixtures.MappedTest): class ServerVersioningTest(fixtures.MappedTest): run_define_tables = "each" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1725,7 +1728,7 @@ class ServerVersioningTest(fixtures.MappedTest): class ManualVersionTest(fixtures.MappedTest): run_define_tables = "each" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1822,7 +1825,7 @@ class ManualVersionTest(fixtures.MappedTest): class ManualInheritanceVersionTest(fixtures.MappedTest): run_define_tables = "each" - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("sane_rowcount",) @classmethod @@ -1893,7 +1896,7 @@ class ManualInheritanceVersionTest(fixtures.MappedTest): class VersioningMappedSelectTest(fixtures.MappedTest): # test for #4193, see also #4194 for related notes - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -2028,7 +2031,7 @@ class VersioningMappedSelectTest(fixtures.MappedTest): class QuotedBindVersioningTest(fixtures.MappedTest): """test for #8056""" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/requirements.py b/test/requirements.py index 76297775a5..556ab550ce 100644 --- a/test/requirements.py +++ b/test/requirements.py @@ -444,7 +444,9 @@ class DefaultRequirements(SuiteRequirements): return skip_if( [ no_support("oracle", "Oracle XE usually can't handle these"), - no_support("mssql+pyodbc", "MS ODBC drivers struggle"), + no_support( + "mssql", "MS drivers struggle plus the DB does too" + ), no_support("+aiosqlite", "very unreliable driver"), self._running_on_windows(), ] @@ -1696,6 +1698,16 @@ class DefaultRequirements(SuiteRequirements): def oracle_test_dblink2(self): return self._has_oracle_test_dblink("oracle_db_link2") + @property + def oracle_vector(self): + """oracle vector support""" + return only_on("oracle>=23.4") + only_on("oracle+oracledb") + + @property + def oracle_sparse_vector(self): + """oracle vector support""" + return only_on("oracle>=23.7") + only_on("oracle+oracledb") + @property def postgresql_test_dblink(self): return skip_if( diff --git a/test/sql/test_constraints.py b/test/sql/test_constraints.py index ebd44cdcb5..6c47edd9c8 100644 --- a/test/sql/test_constraints.py +++ b/test/sql/test_constraints.py @@ -31,7 +31,7 @@ from sqlalchemy.testing.assertsql import RegexSQL class ConstraintGenTest(fixtures.TestBase, AssertsExecutionResults): __dialect__ = "default" - __backend__ = True + __sparse_driver_backend__ = True @testing.provide_metadata def test_pk_fk_constraint_create(self): diff --git a/test/sql/test_defaults.py b/test/sql/test_defaults.py index 5ebc86608b..2172b95d30 100644 --- a/test/sql/test_defaults.py +++ b/test/sql/test_defaults.py @@ -379,7 +379,7 @@ class DefaultObjectTest(fixtures.TestBase): class DefaultRoundTripTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -873,7 +873,7 @@ class DefaultRoundTripTest(fixtures.TablesTest): class CTEDefaultTest(fixtures.TablesTest): __requires__ = ("ctes", "insert_returning", "ctes_on_dml") - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -953,7 +953,7 @@ class CTEDefaultTest(fixtures.TablesTest): class PKDefaultTest(fixtures.TestBase): __requires__ = ("subqueries",) - __backend__ = True + __sparse_driver_backend__ = True @testing.fixture def table_fixture(self, metadata, connection): @@ -1026,7 +1026,7 @@ class PKDefaultTest(fixtures.TestBase): class PKIncrementTest(fixtures.TablesTest): run_define_tables = "each" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1097,7 +1097,7 @@ class PKIncrementTest(fixtures.TablesTest): class AutoIncrementTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True @testing.requires.empty_inserts def test_autoincrement_single_col(self, metadata, connection): @@ -1253,7 +1253,7 @@ class SpecialTypePKTest(fixtures.TestBase): """ - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_test_class(cls): @@ -1361,7 +1361,7 @@ class SpecialTypePKTest(fixtures.TestBase): class ServerDefaultsOnPKTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True @testing.provide_metadata def test_string_default_none_on_insert(self, connection): @@ -1486,7 +1486,7 @@ class ServerDefaultsOnPKTest(fixtures.TestBase): class InsertFromSelectTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1556,7 +1556,7 @@ class InsertFromSelectTest(fixtures.TablesTest): class CurrentParametersTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/sql/test_delete.py b/test/sql/test_delete.py index 9f9e104b6a..2c3187fd2d 100644 --- a/test/sql/test_delete.py +++ b/test/sql/test_delete.py @@ -231,7 +231,7 @@ class DeleteFromCompileTest( class DeleteFromRoundTripTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/sql/test_deprecations.py b/test/sql/test_deprecations.py index 7f95e7ab0b..4625e5b955 100644 --- a/test/sql/test_deprecations.py +++ b/test/sql/test_deprecations.py @@ -43,7 +43,7 @@ class ToMetaDataTest(fixtures.TestBase): class DeprecationWarningsTest(fixtures.TestBase, AssertsCompiledSQL): - __backend__ = True + __sparse_driver_backend__ = True def test_empty_and_or(self): with testing.expect_deprecated( @@ -223,7 +223,7 @@ class SelectableTest(fixtures.TestBase, AssertsCompiledSQL): class KeyTargetingTest(fixtures.TablesTest): run_inserts = "once" run_deletes = None - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -266,7 +266,7 @@ class KeyTargetingTest(fixtures.TablesTest): class PKIncrementTest(fixtures.TablesTest): run_define_tables = "each" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/sql/test_from_linter.py b/test/sql/test_from_linter.py index 6608c51073..3e7700549f 100644 --- a/test/sql/test_from_linter.py +++ b/test/sql/test_from_linter.py @@ -440,7 +440,7 @@ class TestFindUnmatchingFroms(fixtures.TablesTest): class TestLinterRoundTrip(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/sql/test_functions.py b/test/sql/test_functions.py index 1aee4300ab..6766271d8a 100644 --- a/test/sql/test_functions.py +++ b/test/sql/test_functions.py @@ -1331,7 +1331,7 @@ class ReturnTypeTest(AssertsCompiledSQL, fixtures.TestBase): class ExecuteTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True def teardown_test(self): pass diff --git a/test/sql/test_identity_column.py b/test/sql/test_identity_column.py index 2eef36829d..893df0b9da 100644 --- a/test/sql/test_identity_column.py +++ b/test/sql/test_identity_column.py @@ -17,7 +17,7 @@ from sqlalchemy.testing import is_not_ class _IdentityDDLFixture(testing.AssertsCompiledSQL): - __backend__ = True + __sparse_driver_backend__ = True @testing.combinations( (dict(always=True), "ALWAYS AS IDENTITY"), diff --git a/test/sql/test_insert_exec.py b/test/sql/test_insert_exec.py index a865bc1bb0..d68e2ce357 100644 --- a/test/sql/test_insert_exec.py +++ b/test/sql/test_insert_exec.py @@ -53,7 +53,7 @@ class ExpectExpr: class InsertExecTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -479,7 +479,7 @@ class TableInsertTest(fixtures.TablesTest): """ run_create_tables = "each" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -743,7 +743,7 @@ class TableInsertTest(fixtures.TablesTest): class InsertManyValuesTest(fixtures.RemovesEvents, fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("insertmanyvalues",) @classmethod @@ -1221,7 +1221,7 @@ class InsertManyValuesTest(fixtures.RemovesEvents, fixtures.TablesTest): class IMVSentinelTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("insert_returning",) diff --git a/test/sql/test_labels.py b/test/sql/test_labels.py index b4a857771a..d3eb607304 100644 --- a/test/sql/test_labels.py +++ b/test/sql/test_labels.py @@ -41,7 +41,7 @@ IDENT_LENGTH = 29 class MaxIdentTest(fixtures.TestBase, AssertsCompiledSQL): __dialect__ = "DefaultDialect" - __backend__ = True + __sparse_driver_backend__ = True table1 = table( "some_large_named_table", diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index f9cc8662a9..43cbc08ba9 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -2487,7 +2487,7 @@ class PKAutoIncrementTest(fixtures.TestBase): class SchemaTypeTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True class TrackEvents: column = None diff --git a/test/sql/test_query.py b/test/sql/test_query.py index 72b6bff738..7762ab8637 100644 --- a/test/sql/test_query.py +++ b/test/sql/test_query.py @@ -37,7 +37,7 @@ from sqlalchemy.testing.util import resolve_lambda class QueryTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -881,7 +881,7 @@ class RequiredBindTest(fixtures.TablesTest): class LimitTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1011,7 +1011,7 @@ class CompoundTest(fixtures.TablesTest): """test compound statements like UNION, INTERSECT, particularly their ability to nest on different databases.""" - __backend__ = True + __sparse_driver_backend__ = True run_inserts = "each" @@ -1403,7 +1403,7 @@ class JoinTest(fixtures.TablesTest): database seems to be sensitive to this. """ - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1754,7 +1754,7 @@ class JoinTest(fixtures.TablesTest): class OperatorTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/sql/test_quote.py b/test/sql/test_quote.py index 58a64e5c38..f099ead2f4 100644 --- a/test/sql/test_quote.py +++ b/test/sql/test_quote.py @@ -24,7 +24,7 @@ from sqlalchemy.testing.util import picklers class QuoteExecTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/sql/test_resultset.py b/test/sql/test_resultset.py index 1acf10c615..189850c7ae 100644 --- a/test/sql/test_resultset.py +++ b/test/sql/test_resultset.py @@ -68,7 +68,7 @@ from sqlalchemy.testing.schema import Table class CursorResultTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -2323,7 +2323,7 @@ class CursorResultTest(fixtures.TablesTest): class KeyTargetingTest(fixtures.TablesTest): run_inserts = "once" run_deletes = None - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -2936,7 +2936,7 @@ class KeyTargetingTest(fixtures.TablesTest): class PositionalTextTest(fixtures.TablesTest): run_inserts = "once" run_deletes = None - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -3661,7 +3661,7 @@ class AlternateCursorResultTest(fixtures.TablesTest): class MergeCursorResultTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("independent_cursors",) @@ -3783,7 +3783,7 @@ class MergeCursorResultTest(fixtures.TablesTest): class GenerativeResultTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/sql/test_returning.py b/test/sql/test_returning.py index 5d5a21dacd..eaea657eac 100644 --- a/test/sql/test_returning.py +++ b/test/sql/test_returning.py @@ -311,7 +311,7 @@ class ReturnCombinationTests(fixtures.TestBase, AssertsCompiledSQL): class InsertReturningTest(fixtures.TablesTest, AssertsExecutionResults): __requires__ = ("insert_returning",) - __backend__ = True + __sparse_driver_backend__ = True run_create_tables = "each" @@ -584,7 +584,7 @@ class InsertReturningTest(fixtures.TablesTest, AssertsExecutionResults): class UpdateReturningTest(fixtures.TablesTest, AssertsExecutionResults): __requires__ = ("update_returning",) - __backend__ = True + __sparse_driver_backend__ = True run_create_tables = "each" @@ -677,7 +677,7 @@ class UpdateReturningTest(fixtures.TablesTest, AssertsExecutionResults): class DeleteReturningTest(fixtures.TablesTest, AssertsExecutionResults): __requires__ = ("delete_returning",) - __backend__ = True + __sparse_driver_backend__ = True run_create_tables = "each" @@ -703,7 +703,7 @@ class DeleteReturningTest(fixtures.TablesTest, AssertsExecutionResults): class CompositeStatementTest(fixtures.TestBase): __requires__ = ("insert_returning",) - __backend__ = True + __sparse_driver_backend__ = True @testing.provide_metadata def test_select_doesnt_pollute_result(self, connection): @@ -733,7 +733,7 @@ class CompositeStatementTest(fixtures.TestBase): class SequenceReturningTest(fixtures.TablesTest): __requires__ = "insert_returning", "sequences" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -767,7 +767,7 @@ class KeyReturningTest(fixtures.TablesTest, AssertsExecutionResults): """test returning() works with columns that define 'key'.""" __requires__ = ("insert_returning",) - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -800,7 +800,7 @@ class KeyReturningTest(fixtures.TablesTest, AssertsExecutionResults): class InsertReturnDefaultsTest(fixtures.TablesTest): __requires__ = ("insert_returning",) run_define_tables = "each" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -966,7 +966,7 @@ class InsertReturnDefaultsTest(fixtures.TablesTest): class UpdatedReturnDefaultsTest(fixtures.TablesTest): __requires__ = ("update_returning",) run_define_tables = "each" - __backend__ = True + __sparse_driver_backend__ = True define_tables = InsertReturnDefaultsTest.define_tables @@ -1107,7 +1107,7 @@ class UpdatedReturnDefaultsTest(fixtures.TablesTest): class DeleteReturnDefaultsTest(fixtures.TablesTest): __requires__ = ("delete_returning",) run_define_tables = "each" - __backend__ = True + __sparse_driver_backend__ = True define_tables = InsertReturnDefaultsTest.define_tables @@ -1176,7 +1176,7 @@ class DeleteReturnDefaultsTest(fixtures.TablesTest): class InsertManyReturnDefaultsTest(fixtures.TablesTest): __requires__ = ("insert_executemany_returning",) run_define_tables = "each" - __backend__ = True + __sparse_driver_backend__ = True define_tables = InsertReturnDefaultsTest.define_tables @@ -1313,7 +1313,7 @@ class InsertManyReturnDefaultsTest(fixtures.TablesTest): class InsertManyReturningTest(fixtures.TablesTest): __requires__ = ("insert_executemany_returning",) run_define_tables = "each" - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/sql/test_sequences.py b/test/sql/test_sequences.py index 1078546418..996df0a691 100644 --- a/test/sql/test_sequences.py +++ b/test/sql/test_sequences.py @@ -26,7 +26,7 @@ from sqlalchemy.testing.schema import Table class SequenceDDLTest(fixtures.TestBase, testing.AssertsCompiledSQL): __dialect__ = "default" - __backend__ = True + __sparse_driver_backend__ = True @testing.combinations( (Sequence("foo_seq"), ""), @@ -139,7 +139,7 @@ class SequenceDDLTest(fixtures.TestBase, testing.AssertsCompiledSQL): class SequenceExecTest(fixtures.TestBase): __requires__ = ("sequences",) - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_test_class(cls): @@ -399,7 +399,7 @@ class SequenceExecTest(fixtures.TestBase): class SequenceTest(fixtures.TestBase, testing.AssertsCompiledSQL): __requires__ = ("sequences",) - __backend__ = True + __sparse_driver_backend__ = True @testing.combinations( (Sequence("foo_seq"),), @@ -563,7 +563,7 @@ class SequenceTest(fixtures.TestBase, testing.AssertsCompiledSQL): class TableBoundSequenceTest(fixtures.TablesTest): __requires__ = ("sequences",) - __backend__ = True + __sparse_driver_backend__ = True @testing.fixture def table_fixture(self, metadata, connection, implicit_returning): @@ -687,7 +687,7 @@ class SequenceAsServerDefaultTest( testing.AssertsExecutionResults, fixtures.TablesTest ): __requires__ = ("sequences_as_server_defaults",) - __backend__ = True + __sparse_driver_backend__ = True run_create_tables = "each" diff --git a/test/sql/test_statement_params.py b/test/sql/test_statement_params.py index d4f2bf4a18..4c648d20bf 100644 --- a/test/sql/test_statement_params.py +++ b/test/sql/test_statement_params.py @@ -74,7 +74,7 @@ class BasicTests(fixtures.TestBase): class CacheTests(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): diff --git a/test/sql/test_types.py b/test/sql/test_types.py index c366059b64..fc0f14817c 100644 --- a/test/sql/test_types.py +++ b/test/sql/test_types.py @@ -784,7 +784,7 @@ class _UserDefinedTypeFixture: class UserDefinedRoundTripTest(_UserDefinedTypeFixture, fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True def _data_fixture(self, connection): users = self.tables.users @@ -980,7 +980,7 @@ class UserDefinedRoundTripTest(_UserDefinedTypeFixture, fixtures.TablesTest): class TypeDecoratorSpecialCasesTest(AssertsCompiledSQL, fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True @testing.requires.array_type def test_typedec_of_array_modified(self, metadata, connection): @@ -1113,7 +1113,7 @@ class BindProcessorInsertValuesTest(UserDefinedRoundTripTest): """related to #6770, test that insert().values() applies to bound parameter handlers including the None value.""" - __backend__ = True + __sparse_driver_backend__ = True def _data_fixture(self, connection): users = self.tables.users @@ -1353,7 +1353,7 @@ class UserDefinedTest( class TypeCoerceCastTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1634,7 +1634,7 @@ class TypeCoerceCastTest(fixtures.TablesTest): class VariantBackendTest(fixtures.TestBase, AssertsCompiledSQL): - __backend__ = True + __sparse_driver_backend__ = True @testing.fixture def variant_roundtrip(self, metadata, connection): @@ -2019,7 +2019,7 @@ class VariantTest(fixtures.TestBase, AssertsCompiledSQL): class EnumTest(AssertsCompiledSQL, fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True SomeEnum = pep435_enum("SomeEnum") @@ -2989,7 +2989,7 @@ MyPickleType = None class BinaryTest(fixtures.TablesTest, AssertsExecutionResults): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -4117,7 +4117,7 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL): class TestKWArgPassThru(AssertsCompiledSQL, fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True def test_user_defined(self): """test that dialects pass the column through on DDL.""" @@ -4137,7 +4137,7 @@ class NumericRawSQLTest(fixtures.TestBase): """ - __backend__ = True + __sparse_driver_backend__ = True def _fixture(self, connection, metadata, type_, data): t = Table("t", metadata, Column("val", type_)) @@ -4185,7 +4185,7 @@ class NumericRawSQLTest(fixtures.TestBase): class IntervalTest(fixtures.TablesTest, AssertsExecutionResults): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -4246,7 +4246,7 @@ class IntervalTest(fixtures.TablesTest, AssertsExecutionResults): class IntegerTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True def test_integer_literal_processor(self): typ = Integer() @@ -4270,7 +4270,7 @@ class BooleanTest( """ - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -4597,7 +4597,7 @@ class CallableTest(fixtures.TestBase): class LiteralTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True @testing.combinations( ("datetime", datetime.datetime.now()), diff --git a/test/sql/test_update.py b/test/sql/test_update.py index 5a6133e41c..e5991663dc 100644 --- a/test/sql/test_update.py +++ b/test/sql/test_update.py @@ -1639,7 +1639,7 @@ class UpdateFromCompileTest( class UpdateFromRoundTripTest(_UpdateFromTestBase, fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @testing.requires.update_from def test_exec_two_table(self, connection): @@ -1793,7 +1793,7 @@ class UpdateFromRoundTripTest(_UpdateFromTestBase, fixtures.TablesTest): class UpdateFromMultiTableUpdateDefaultsTest( _UpdateFromTestBase, fixtures.TablesTest ): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): -- 2.47.3