]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
test oracle 23c, mariadb12; reduce backend use
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 25 Nov 2025 00:33:18 +0000 (19:33 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 25 Nov 2025 19:52:00 +0000 (14:52 -0500)
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)

60 files changed:
lib/sqlalchemy/dialects/mssql/provision.py
lib/sqlalchemy/dialects/mysql/provision.py
lib/sqlalchemy/dialects/oracle/vector.py
lib/sqlalchemy/testing/plugin/plugin_base.py
lib/sqlalchemy/testing/plugin/pytestplugin.py
lib/sqlalchemy/testing/provision.py
noxfile.py
pyproject.toml
setup.cfg
test/dialect/oracle/test_reflection.py
test/dialect/oracle/test_types.py
test/dialect/postgresql/test_query.py
test/dialect/postgresql/test_reflection.py
test/dialect/postgresql/test_types.py
test/engine/test_execute.py
test/engine/test_reflection.py
test/engine/test_transaction.py
test/ext/test_indexable.py
test/orm/declarative/test_tm_future_annotations_sync.py
test/orm/declarative/test_typed_mapping.py
test/orm/dml/test_bulk.py
test/orm/dml/test_bulk_statements.py
test/orm/dml/test_orm_upd_del_assorted.py
test/orm/dml/test_orm_upd_del_basic.py
test/orm/dml/test_orm_upd_del_inheritance.py
test/orm/inheritance/test_basic.py
test/orm/inheritance/test_polymorphic_rel.py
test/orm/test_core_compilation.py
test/orm/test_defaults.py
test/orm/test_dynamic.py
test/orm/test_eager_relations.py
test/orm/test_events.py
test/orm/test_lambdas.py
test/orm/test_lazy_relations.py
test/orm/test_lockmode.py
test/orm/test_naturalpks.py
test/orm/test_query.py
test/orm/test_session.py
test/orm/test_transaction.py
test/orm/test_unitofwork.py
test/orm/test_unitofworkv2.py
test/orm/test_versioning.py
test/requirements.py
test/sql/test_constraints.py
test/sql/test_defaults.py
test/sql/test_delete.py
test/sql/test_deprecations.py
test/sql/test_from_linter.py
test/sql/test_functions.py
test/sql/test_identity_column.py
test/sql/test_insert_exec.py
test/sql/test_labels.py
test/sql/test_metadata.py
test/sql/test_query.py
test/sql/test_quote.py
test/sql/test_resultset.py
test/sql/test_returning.py
test/sql/test_sequences.py
test/sql/test_types.py
test/sql/test_update.py

index 10165856e1aac02dff49ce7628637d5d5a2be98a..7d02b47a888508dfd3e3d9c7cfc16ff1e3fff3ef 100644 (file)
@@ -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(
index fe97672ad85791ffeb88d35dc9fe7fa53623fd7e..242adbf82fba5f2bc9aaf566344334514ec98c10 100644 (file)
@@ -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()
index 88d47ea1d1017037b589b8f43743beb30b35b40f..5646b029b6236d7790ee4e5da38000a2dd713c35 100644 (file)
@@ -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 = {
index 1b7a042d177f1fff14be6470dfb566083b18d89b..4f35b1029431d26772955f8f4ee3a95b19ddc441 100644 (file)
@@ -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
 
index b6acd85eb743e79e6d781ebef63b3156f35ea9d3..a28cb62a46df27fb7bdb560944290f4691147765 100644 (file)
@@ -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()
 
index 3afcf119b271524b5f6334d93223177a3cd9b4d4..5d60eea32e37a2e7d20b1c7a698c36201c16afd1 100644 (file)
@@ -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)
index 29a526d3376ef0d11e00afe11a3b9f6fd41e2b6d..2e05c0bef852abb8ce31c181dd2fe55f51de3eb4 100644 (file)
@@ -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)
 
index f39be61a5163dd6cb6c5bb542a3ea0e35c9bafd8..fa6880caa2207d87141a3f21b65cfb7bc1c9f997 100644 (file)
@@ -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",
 ]
 
index 8604d7e0df90d6536309c303b3492d409168c44e..afeec927f203f95f0750506746fc59e88cb8bab8 100644 (file)
--- 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
index 35735889488b21e369bc5f138791b0bc91ec2e32..e7b71c2acedf25d032d41c52a5df90460d4ab88e 100644 (file)
@@ -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):
index b470ddffe48b2e3f576a394f78f6a3effe75d0b4..151aee558359a3e60fe622dfcfce77f4aea02381 100644 (file)
@@ -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",
index fc9f7f79188f8111864106c0ecface23b66d76f2..585630b81417360b3d1e10e40be89e66acfbbc1f 100644 (file)
@@ -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)
index 2f2240bed216d2eace1443b61c39bb45c21f524e..128dfb870ee1c36f750c61194e5fc398c22a7397 100644 (file)
@@ -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(
index 6d14639e5984c8fc1f01b2ed90bc7defc2e541d5..6ebfa5f63f57fcb7d36dfa9955facb9a2e8250d6 100644 (file)
@@ -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):
index 28541ca33a197fb04e37f06bbf8af083fad954f8..72a9218d08c875745100b819a5dda327fe7e2b76 100644 (file)
@@ -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()
index e5e8ddde4fa0a904654b77312d69a9bbf0da169e..65857eaec44d7ff0f7ce055733807c4058ea9264 100644 (file)
@@ -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
index fb67c7434fed8320496d7a4533a616d2e08f20bc..847739ba46b0fa2bc6fa5557877a5014c9e643ba 100644 (file)
@@ -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:
index 4421c3a6edef5e4a8489d01b3505910c071a3206..7e1f309b06e606a14f4955d09f876163c0650de8 100644 (file)
@@ -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):
index b62a4667d7d971136dcc15775425169aa10d5311..6ad125eaa4542a3d56d3bc5322a82778aef7f7b3 100644 (file)
@@ -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])
index d9c657a8b1d70830c9699fe0249fab61e4c91476..da06972701ee1a2c1f589db37564792046406fb9 100644 (file)
@@ -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])
index 3159c139da2bb8446a580c4a397a46090aff415f..117e365713c21bb4d7fa449c1955ee6947096e85 100644 (file)
@@ -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):
index fcc908377b98506d699f07d0e0c8831d88cc57b2..b97903a5f4fd755968ea6f49ee94e82af6b73cbb 100644 (file)
@@ -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):
index 53fe0acc550f2c71b9c8e6b2b53d83edde39c383..28d729a3c87975662dd0aceda997068c3bf7bead 100644 (file)
@@ -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
index ad7777398d63fbb0c2e42fc169577772c5d82fe0..2df58468d0db11c28a1a01a5df6117106525d491 100644 (file)
@@ -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):
index 8d2c1e4bb00a1739436450efecb9d12d3d4ca83a..ffce962be5f20d6791a387d88d5afb3c8b91c24b 100644 (file)
@@ -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):
index 9028fd25a43012397fe1e6afb7315f48f94f9a7a..20d9ee069cf5d2c54572e848b1e87225bf0ca01b 100644 (file)
@@ -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):
index 1216aa0106f81e4b7fc98f5a39f87c95c90161a1..42581c4985372319804846770a204c3fb8251f7e 100644 (file)
@@ -32,7 +32,7 @@ from ._poly_fixtures import Person
 
 
 class _PolymorphicTestBase:
-    __backend__ = True
+    __sparse_driver_backend__ = True
     __dialect__ = "default_enhanced"
 
     @classmethod
index a961962d916373644393f02e5897e33c4d370ccb..64acc11fbff6927161c78d01e85357895138173b 100644 (file)
@@ -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),
index d230d4aafc0658af77ff826f8d0071d9f5888ced..f5c23013d4106501fde592618bba98ed271ecda7 100644 (file)
@@ -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"
 
index 465e29929e9e8c8b24a313dc0d1a8e95b3295f1d..214a011876e01779e0102881dce590ce10422d41 100644 (file)
@@ -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")
index 7e0eca62c6532f141f2942e48e09d2cb8152aa4f..0bb2e51a49ea50c1712dabbd8facc225b12f27ef 100644 (file)
@@ -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):
index 2b24e47469d0424ccf2f4c7b380cf38ef16658c3..8f71e4e92defb6f686710ce28377a3809070792a 100644 (file)
@@ -3645,7 +3645,7 @@ class RefreshFlushInReturningTest(fixtures.MappedTest):
 
     """
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
index 7373093ee3cd1ee92c5237f16d4302d633a615cf..de2489c3b7bc69a1f4d1ccdafd90bca04b3bc3d0 100644 (file)
@@ -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"
 
index 9bb8071984dbefc02118ffe3fd1ec7e4a8c1f579..8dcec9476ca50849a797cd5ed69ae34713eb73b4 100644 (file)
@@ -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)
index 2e03c3e87c471c5d9d21b86a5fb72967ad4e628d..5ebbde81386cd3781c9228b8d73308c1386d0e04 100644 (file)
@@ -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
index 64c033ec47d3259a6886cc50779fe54600e30a23..7403715492e932ff0da0356cf0949089bfe9ca94 100644 (file)
@@ -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):
index 0e30f58ca163cbc034a8a3f3f79194a4c31dc7f8..412d89340e4c88cd5e3e4c8c3c77bb8652cb9ecd 100644 (file)
@@ -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")
index e08ab19c6e2d07a5c5b12fea894f9e94e858f8db..fb0403ac6018209704cf0695977ef3cc40e8563f 100644 (file)
@@ -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 = (
index faa311cc8a202d73931a09ccde44e4839465fb34..18360c4d7da22a9badb8317ac2c4f9ad5eb7721c 100644 (file)
@@ -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):
index 7b29b4362a092ea86b0d76755c7bddf989d63851..85b71e68852186e754884fa117a3997604d48842 100644 (file)
@@ -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
index 90ea0eaa039ec86680174e71fbaaf98fc1edc4ef..f548538893819320d871fc740b9da47e8de71a53 100644 (file)
@@ -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",
index 8b4f6e58d356030f170ef16dd820451759d751f6..39b4b2fcb43c1df399fb0511c3ae85a502b8443b 100644 (file)
@@ -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):
index 83c3c17f39296486a8e44158f9fdd88a963e648b..0d36a7ef115741fcb0b6f9aca67927162d93853f 100644 (file)
@@ -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(
index ebd44cdcb576daadd2580f8a12c20365c0c644ad..6c47edd9c8faf2e4d1ff654414a3d7b8f08cfdad 100644 (file)
@@ -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):
index bcfdfcdb9c946d366087818f7e080f48281bc3b6..140018f662fd61e0e429f64f193130f841cad863 100644 (file)
@@ -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):
index 9f9e104b6a16ff79d39e86f2a8f67e2920bf68e1..2c3187fd2d572e7848214e3355ce2ddeb5d40669 100644 (file)
@@ -231,7 +231,7 @@ class DeleteFromCompileTest(
 
 
 class DeleteFromRoundTripTest(fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
index 96b636bd058fc12be97d29f9557d71257bf142a6..6778ac110f8c8c83c8bbd50022acb7bc84eb154a 100644 (file)
@@ -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):
index 6608c51073bb2c67902bda7c7a8a20a13788e8c7..3e7700549fe97c101f0b6c06d18ec4a835e45f6a 100644 (file)
@@ -440,7 +440,7 @@ class TestFindUnmatchingFroms(fixtures.TablesTest):
 
 
 class TestLinterRoundTrip(fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
index 28cdb03a9657136af7a004de4052617d0c816a63..8d60bac02eb00c6df6fa411611ca05d78b3d5e2f 100644 (file)
@@ -1138,7 +1138,7 @@ class ReturnTypeTest(AssertsCompiledSQL, fixtures.TestBase):
 
 
 class ExecuteTest(fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def teardown_test(self):
         pass
index 2603a9e1012f7d43a8b3476c8e0cb7d52e7db7e6..639218f264e4ecd2c27317f57c6c5e59223ba2dd 100644 (file)
@@ -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"),
index f80b4c447ea1f309717528c2740d360c655c75b4..27f52b94d1ef0f1af9a3f1c909ed2a8221af0c72 100644 (file)
@@ -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",)
 
index b4a857771a00aca12a2b63c8c07c0fb1b52e00af..d3eb6073041e37bde89ee1b4560452ab1686ae16 100644 (file)
@@ -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",
index fa55923ca838b47f9706d2de1e5cbc37ca769b84..b30f37cffc1803a81c46acc90eb9ddcfa1922729 100644 (file)
@@ -2232,7 +2232,7 @@ class PKAutoIncrementTest(fixtures.TestBase):
 
 
 class SchemaTypeTest(fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     class TrackEvents:
         column = None
index 5d7788fcf1cff68c9c8667e8d82e662502d44905..fedda753b6ee022927efef52e5db212e3e567d37 100644 (file)
@@ -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):
index 58a64e5c3815e4f9eae06be92331ad4adb475d92..f099ead2f466919604e0a86d11284b39431c72a0 100644 (file)
@@ -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):
index 93c5c892969399bf654dd1f7b14eacfde2ff9408..f81e3988c6e22012b27ceabce86a2c3e191ae25b 100644 (file)
@@ -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):
index 5d5a21dacd65efb07c71ec281a124d2e62a3c09f..eaea657eac7b97b7c528074dac4bf76513c8f36c 100644 (file)
@@ -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):
index 0781ff294c8599639739307062c6cc4337467c81..8b633e22cc6dbb193cb5162eddcf090c04f19913 100644 (file)
@@ -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"
 
index 3ac7d43274cb48ec07c5061592b3ac0be0d96613..86f15c40697291c45d3f834e5fd1b9471b2ccb67 100644 (file)
@@ -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()),
index 08b9ce8fca1527631ec52972cb5f192d06e312ea..274761ed8ec359cb11be813511f0b76d5f27b82e 100644 (file)
@@ -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):