From: Mike Bayer Date: Tue, 25 Nov 2025 00:33:18 +0000 (-0500) Subject: test oracle 23c, mariadb12; reduce backend use X-Git-Tag: rel_2_0_45~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e1bbd73f3e22992c4c0fbe50c40ffc92ef425a44;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git 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 (cherry picked from commit 8ce47663c238b230400d3603fa403eb5fed227dc) --- 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..5646b029b6 100644 --- a/lib/sqlalchemy/dialects/oracle/vector.py +++ b/lib/sqlalchemy/dialects/oracle/vector.py @@ -15,8 +15,8 @@ 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 ...types import Float class VectorIndexType(Enum): @@ -242,6 +242,7 @@ class VECTOR(types.TypeEngine): """ cache_ok = True + __visit_name__ = "VECTOR" _typecode_map = { 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 b6acd85eb7..a28cb62a46 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 3afcf119b2..5d60eea32e 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__) @@ -500,3 +502,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 29a526d337..2e05c0bef8 100644 --- a/noxfile.py +++ b/noxfile.py @@ -308,7 +308,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 f39be61a51..fa6880caa2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -191,7 +191,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 8604d7e0df..afeec927f2 100644 --- a/setup.cfg +++ b/setup.cfg @@ -151,8 +151,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 3573588948..e7b71c2ace 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 @@ -1419,7 +1419,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 b470ddffe4..151aee5583 100644 --- a/test/dialect/oracle/test_types.py +++ b/test/dialect/oracle/test_types.py @@ -961,7 +961,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", @@ -974,7 +974,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", @@ -999,7 +999,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", @@ -1028,7 +1028,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", @@ -1053,7 +1053,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", @@ -1066,7 +1066,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", @@ -1091,7 +1096,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", @@ -1122,7 +1127,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", @@ -1149,7 +1154,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", @@ -1167,7 +1172,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 fc9f7f7918..585630b814 100644 --- a/test/dialect/postgresql/test_query.py +++ b/test/dialect/postgresql/test_query.py @@ -45,7 +45,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 2f2240bed2..128dfb870e 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 @@ -2807,7 +2807,7 @@ class CustomTypeReflectionTest(fixtures.TestBase): class IntervalReflectionTest(fixtures.TestBase): __only_on__ = "postgresql" - __backend__ = True + __sparse_driver_backend__ = True @testing.combinations( ("YEAR",), @@ -2862,7 +2862,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!") @@ -2937,7 +2937,7 @@ class IdentityReflectionTest(fixtures.TablesTest): class TestReflectDifficultColTypes(fixtures.TablesTest): __only_on__ = "postgresql" - __backend__ = True + __sparse_driver_backend__ = True def define_tables(metadata): Table( diff --git a/test/dialect/postgresql/test_types.py b/test/dialect/postgresql/test_types.py index 6d14639e59..6ebfa5f63f 100644 --- a/test/dialect/postgresql/test_types.py +++ b/test/dialect/postgresql/test_types.py @@ -239,7 +239,7 @@ class FloatCoercionTest(fixtures.TablesTest, AssertsExecutionResults): class NamedTypeTest( AssertsCompiledSQL, fixtures.TestBase, AssertsExecutionResults ): - __backend__ = True + __sparse_driver_backend__ = True __only_on__ = "postgresql > 8.3" @@ -1245,7 +1245,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 @@ -1450,7 +1450,7 @@ class DomainTest( class DomainDDLEventTest(DDLEventWCreateHarness, fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True __only_on__ = "postgresql > 8.3" @@ -1477,7 +1477,7 @@ class DomainDDLEventTest(DDLEventWCreateHarness, fixtures.TestBase): class EnumDDLEventTest(DDLEventWCreateHarness, fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True __only_on__ = "postgresql > 8.3" @@ -1525,7 +1525,7 @@ class NativeEnumDDLEventTest(EnumDDLEventTest): class OIDTest(fixtures.TestBase): __only_on__ = "postgresql" - __backend__ = True + __sparse_driver_backend__ = True def test_reflection(self, connection, metadata): Table( @@ -1546,7 +1546,7 @@ class OIDTest(fixtures.TestBase): class RegClassTest(fixtures.TestBase): __only_on__ = "postgresql" - __backend__ = True + __sparse_driver_backend__ = True @testing.fixture() def scalar(self, connection): @@ -3593,7 +3593,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): @@ -5056,7 +5056,7 @@ class _RangeComparisonFixtures(_RangeTests): class _RangeTypeRoundTrip(_RangeComparisonFixtures, fixtures.TablesTest): __requires__ = ("range_types",) - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -5598,7 +5598,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 28541ca33a..72a9218d08 100644 --- a/test/engine/test_execute.py +++ b/test/engine/test_execute.py @@ -904,7 +904,7 @@ class ExecuteTest(fixtures.TablesTest): class ConvenienceExecuteTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1032,7 +1032,7 @@ class ConvenienceExecuteTest(fixtures.TablesTest): class CompiledCacheTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True def test_cache(self, connection, metadata): users = Table( @@ -1237,7 +1237,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): @@ -1694,7 +1694,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() @@ -2817,7 +2817,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 fb67c7434f..847739ba46 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"] @@ -1664,7 +1670,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 b62a4667d7..6ad125eaa4 100644 --- a/test/orm/declarative/test_tm_future_annotations_sync.py +++ b/test/orm/declarative/test_tm_future_annotations_sync.py @@ -4670,7 +4670,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 d9c657a8b1..da06972701 100644 --- a/test/orm/declarative/test_typed_mapping.py +++ b/test/orm/declarative/test_typed_mapping.py @@ -4661,7 +4661,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 fcc908377b..b97903a5f4 100644 --- a/test/orm/dml/test_bulk_statements.py +++ b/test/orm/dml/test_bulk_statements.py @@ -59,7 +59,7 @@ from sqlalchemy.types import NullType class InsertStmtTest(testing.AssertsExecutionResults, fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True @testing.variation( "style", @@ -687,7 +687,7 @@ class InsertStmtTest(testing.AssertsExecutionResults, fixtures.TestBase): class UpdateStmtTest(testing.AssertsExecutionResults, fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True @testing.variation( "use_onupdate", @@ -2222,7 +2222,7 @@ class BulkDMLReturningJoinedInhTest( BulkDMLReturningInhTest, fixtures.DeclarativeMappedTest ): __requires__ = ("insert_returning", "insert_executemany_returning") - __backend__ = True + __sparse_driver_backend__ = True use_sentinel = False randomize_returning = False @@ -2339,7 +2339,7 @@ class BulkDMLReturningSingleInhTest( BulkDMLReturningInhTest, fixtures.DeclarativeMappedTest ): __requires__ = ("insert_returning", "insert_executemany_returning") - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_classes(cls): @@ -2382,7 +2382,7 @@ class BulkDMLReturningConcreteInhTest( BulkDMLReturningInhTest, fixtures.DeclarativeMappedTest ): __requires__ = ("insert_returning", "insert_executemany_returning") - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_classes(cls): @@ -2422,7 +2422,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 ad7777398d..2df58468d0 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): @@ -2316,7 +2316,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 9028fd25a4..20d9ee069c 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): @@ -2797,7 +2797,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 a961962d91..64acc11fbf 100644 --- a/test/orm/test_core_compilation.py +++ b/test/orm/test_core_compilation.py @@ -365,6 +365,8 @@ class SelectableTest(QueryTest, AssertsCompiledSQL): class PropagateAttrsTest(QueryTest): + __sparse_driver_backend__ = True + def propagate_cases(): return testing.combinations( (lambda: select(1), False), diff --git a/test/orm/test_defaults.py b/test/orm/test_defaults.py index d230d4aafc..f5c23013d4 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 @@ -425,7 +425,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 465e29929e..214a011876 100644 --- a/test/orm/test_dynamic.py +++ b/test/orm/test_dynamic.py @@ -1529,7 +1529,7 @@ class WriteOnlyUOWTest( _fixtures.FixtureTest, testing.AssertsExecutionResults, ): - __backend__ = True + __sparse_driver_backend__ = True @testing.fixture def passive_deletes_fixture(self, decl_base, connection): @@ -1703,7 +1703,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 7e0eca62c6..0bb2e51a49 100644 --- a/test/orm/test_eager_relations.py +++ b/test/orm/test_eager_relations.py @@ -3241,7 +3241,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): @@ -3575,7 +3575,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): @@ -3705,7 +3705,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): @@ -7047,7 +7047,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 2b24e47469..8f71e4e92d 100644 --- a/test/orm/test_events.py +++ b/test/orm/test_events.py @@ -3645,7 +3645,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 9bb8071984..8dcec9476c 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 0e30f58ca1..412d89340e 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 @@ -5226,7 +5226,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 e08ab19c6e..fb0403ac60 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" @@ -1543,7 +1543,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 faa311cc8a..18360c4d7d 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 @@ -1108,7 +1108,7 @@ def subtransaction_recipe_three(self): ) class SubtransactionRecipeTest(FixtureTest): run_inserts = None - __backend__ = True + __sparse_driver_backend__ = True @testing.fixture def subtransaction_recipe(self): @@ -1286,7 +1286,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 @@ -1328,7 +1328,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 @@ -1385,7 +1385,7 @@ class CleanSavepointTest(FixtureTest): class AutoExpireTest(_LocalFixture): - __backend__ = True + __sparse_driver_backend__ = True def test_expunge_pending_on_rollback(self): User = self.classes.User @@ -1497,7 +1497,7 @@ class AutoExpireTest(_LocalFixture): class TwoPhaseTest(_LocalFixture): - __backend__ = True + __sparse_driver_backend__ = True @testing.requires.two_phase_transactions def test_rollback_on_prepare(self): @@ -1513,7 +1513,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 @@ -1596,7 +1596,7 @@ class RollbackRecoverTest(_LocalFixture): class SavepointTest(_LocalFixture): - __backend__ = True + __sparse_driver_backend__ = True @testing.requires.savepoints def test_savepoint_rollback(self): @@ -1845,7 +1845,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 @@ -1866,7 +1866,7 @@ class AccountingFlagsTest(_LocalFixture): class ContextManagerPlusFutureTest(FixtureTest): run_inserts = None - __backend__ = True + __sparse_driver_backend__ = True @testing.requires.savepoints @engines.close_open_connections @@ -2304,7 +2304,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 7b29b4362a..85b71e6885 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): @@ -3521,7 +3521,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 90ea0eaa03..f548538893 100644 --- a/test/orm/test_unitofworkv2.py +++ b/test/orm/test_unitofworkv2.py @@ -1769,7 +1769,7 @@ class RowswitchM2OTest(fixtures.MappedTest): class BasicStaleChecksTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -2315,7 +2315,7 @@ class NoAttrEventInFlushTest(fixtures.MappedTest): """ - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -2360,7 +2360,7 @@ class NoAttrEventInFlushTest(fixtures.MappedTest): class EagerDefaultsTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -3139,7 +3139,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): @@ -3949,7 +3949,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 8b4f6e58d3..39b4b2fcb4 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 @@ -584,7 +587,7 @@ class VersioningTest(fixtures.MappedTest): class VersionOnPostUpdateTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -797,7 +800,7 @@ class PostUpdatePrefetchTest(fixtures.DeclarativeMappedTest): class NoBumpOnRelationshipTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -890,7 +893,7 @@ class NoBumpOnRelationshipTest(fixtures.MappedTest): class ColumnTypeTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("sane_rowcount",) @classmethod @@ -940,7 +943,7 @@ class ColumnTypeTest(fixtures.MappedTest): class RowSwitchTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1020,7 +1023,7 @@ class RowSwitchTest(fixtures.MappedTest): class AlternateGeneratorTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("sane_rowcount",) @classmethod @@ -1140,7 +1143,7 @@ class AlternateGeneratorTest(fixtures.MappedTest): class PlainInheritanceTest(fixtures.MappedTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1199,7 +1202,7 @@ class InheritanceTwoVersionIdsTest(fixtures.MappedTest): """ - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1327,7 +1330,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 83c3c17f39..0d36a7ef11 100644 --- a/test/requirements.py +++ b/test/requirements.py @@ -429,7 +429,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(), ] @@ -1643,6 +1645,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 bcfdfcdb9c..140018f662 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): @@ -1241,7 +1241,7 @@ class SpecialTypePKTest(fixtures.TestBase): """ - __backend__ = True + __sparse_driver_backend__ = True @classmethod def setup_test_class(cls): @@ -1349,7 +1349,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): @@ -1474,7 +1474,7 @@ class ServerDefaultsOnPKTest(fixtures.TestBase): class InsertFromSelectTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1544,7 +1544,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 96b636bd05..6778ac110f 100644 --- a/test/sql/test_deprecations.py +++ b/test/sql/test_deprecations.py @@ -55,7 +55,7 @@ class ToMetaDataTest(fixtures.TestBase): class DeprecationWarningsTest(fixtures.TestBase, AssertsCompiledSQL): - __backend__ = True + __sparse_driver_backend__ = True def test_ident_preparer_force(self): preparer = testing.db.dialect.identifier_preparer @@ -550,7 +550,7 @@ class TextualSelectTest(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): @@ -593,7 +593,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 28cdb03a96..8d60bac02e 100644 --- a/test/sql/test_functions.py +++ b/test/sql/test_functions.py @@ -1138,7 +1138,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 2603a9e101..639218f264 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 f80b4c447e..27f52b94d1 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 fa55923ca8..b30f37cffc 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -2232,7 +2232,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 5d7788fcf1..fedda753b6 100644 --- a/test/sql/test_query.py +++ b/test/sql/test_query.py @@ -38,7 +38,7 @@ from sqlalchemy.testing.util import resolve_lambda class QueryTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -949,7 +949,7 @@ class RequiredBindTest(fixtures.TablesTest): class LimitTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1079,7 +1079,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" @@ -1471,7 +1471,7 @@ class JoinTest(fixtures.TablesTest): database seems to be sensitive to this. """ - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1822,7 +1822,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 93c5c89296..f81e3988c6 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): @@ -2254,7 +2254,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): @@ -2867,7 +2867,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): @@ -3591,7 +3591,7 @@ class AlternateCursorResultTest(fixtures.TablesTest): class MergeCursorResultTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True __requires__ = ("independent_cursors",) @@ -3713,7 +3713,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 0781ff294c..8b633e22cc 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"), ""), @@ -145,7 +145,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): @@ -405,7 +405,7 @@ class SequenceExecTest(fixtures.TestBase): class SequenceTest(fixtures.TestBase, testing.AssertsCompiledSQL): __requires__ = ("sequences",) - __backend__ = True + __sparse_driver_backend__ = True @testing.combinations( (Sequence("foo_seq"),), @@ -569,7 +569,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): @@ -693,7 +693,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_types.py b/test/sql/test_types.py index 3ac7d43274..86f15c4069 100644 --- a/test/sql/test_types.py +++ b/test/sql/test_types.py @@ -777,7 +777,7 @@ class _UserDefinedTypeFixture: class UserDefinedRoundTripTest(_UserDefinedTypeFixture, fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True def _data_fixture(self, connection): users = self.tables.users @@ -966,7 +966,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): @@ -1099,7 +1099,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 @@ -1339,7 +1339,7 @@ class UserDefinedTest( class TypeCoerceCastTest(fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -1620,7 +1620,7 @@ class TypeCoerceCastTest(fixtures.TablesTest): class VariantBackendTest(fixtures.TestBase, AssertsCompiledSQL): - __backend__ = True + __sparse_driver_backend__ = True @testing.fixture def variant_roundtrip(self, metadata, connection): @@ -2005,7 +2005,7 @@ class VariantTest(fixtures.TestBase, AssertsCompiledSQL): class EnumTest(AssertsCompiledSQL, fixtures.TablesTest): - __backend__ = True + __sparse_driver_backend__ = True SomeEnum = pep435_enum("SomeEnum") @@ -2974,7 +2974,7 @@ MyPickleType = None class BinaryTest(fixtures.TablesTest, AssertsExecutionResults): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -4103,7 +4103,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.""" @@ -4123,7 +4123,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_)) @@ -4171,7 +4171,7 @@ class NumericRawSQLTest(fixtures.TestBase): class IntervalTest(fixtures.TablesTest, AssertsExecutionResults): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -4232,7 +4232,7 @@ class IntervalTest(fixtures.TablesTest, AssertsExecutionResults): class IntegerTest(fixtures.TestBase): - __backend__ = True + __sparse_driver_backend__ = True def test_integer_literal_processor(self): typ = Integer() @@ -4256,7 +4256,7 @@ class BooleanTest( """ - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata): @@ -4583,7 +4583,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 08b9ce8fca..274761ed8e 100644 --- a/test/sql/test_update.py +++ b/test/sql/test_update.py @@ -1510,7 +1510,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): @@ -1664,7 +1664,7 @@ class UpdateFromRoundTripTest(_UpdateFromTestBase, fixtures.TablesTest): class UpdateFromMultiTableUpdateDefaultsTest( _UpdateFromTestBase, fixtures.TablesTest ): - __backend__ = True + __sparse_driver_backend__ = True @classmethod def define_tables(cls, metadata):