]> 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:50:56 +0000 (14:50 -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

62 files changed:
lib/sqlalchemy/dialects/mssql/provision.py
lib/sqlalchemy/dialects/mysql/provision.py
lib/sqlalchemy/dialects/oracle/vector.py
lib/sqlalchemy/testing/config.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_statement_params.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..3df2f11e7f85b01b9d6f3aae9160bb58f95c70ab 100644 (file)
@@ -15,8 +15,9 @@ from enum import Enum
 from typing import Optional
 from typing import Union
 
-import sqlalchemy.types as types
-from sqlalchemy.types import Float
+from ... import types
+from ...sql.operators import OperatorClass
+from ...types import Float
 
 
 class VectorIndexType(Enum):
@@ -242,6 +243,9 @@ class VECTOR(types.TypeEngine):
     """
 
     cache_ok = True
+
+    operator_classes = OperatorClass.BASE | OperatorClass.MATH
+
     __visit_name__ = "VECTOR"
 
     _typecode_map = {
index 93fece50d1d4294b9a0335791a1f71d19f2e08ce..69bbe25ecd4231a6b26efccf6e034d3431dc43d2 100644 (file)
@@ -337,13 +337,14 @@ class Config:
         self.test_schema = "test_schema"
         self.test_schema_2 = "test_schema_2"
 
+        self.is_async = db.dialect.is_async
+
         self.is_default_dialect = (
             db.url._get_entrypoint()
             is db.url.set(
                 drivername=db.url.get_backend_name()
             )._get_entrypoint()
         )
-        self.is_async = db.dialect.is_async
 
     _stack = collections.deque()
     _configs = set()
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 2071e6c3b0bd41d9c8506f42588f20e944d4f43f..664411babc3de016ac5213b4cb500efd4eb1cf1b 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 8453aef47e54053183cdbbc9cbb3e70a49cfa488..17992a0ff890213e9f31a1493374b5a09f784336 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__)
@@ -499,3 +501,23 @@ def normalize_sequence(cfg, sequence):
     The default implementation does nothing
     """
     return sequence
+
+
+@register.init
+def allow_stale_update_impl(cfg):
+    return contextlib.nullcontext()
+
+
+@decorator
+def allow_stale_updates(fn, *arg, **kw):
+    """decorator around a test function that indicates the test will
+    be UPDATING rows that have been read and are now stale.
+
+    This normally doesn't require intervention except for mariadb 12
+    which now raises its own error for that, and we want to turn off
+    that setting just within the scope of the test that needs it
+    to be turned off (i.e. ORM stale version tests)
+
+    """
+    with allow_stale_update_impl(config._current):
+        return fn(*arg, **kw)
index b025d0852051bf1d6f47aead370dbe24237a1fbf..ed388b49d67c180e796841b5bdfe6edc98112e93 100644 (file)
@@ -297,7 +297,7 @@ def _tests(
     if database in ["oracle", "mssql", "sqlite_file"]:
         # use equals sign so that we avoid
         # https://github.com/pytest-dev/pytest/issues/13913
-        cmd.extend(["--write-idents=db_idents.txt"])
+        cmd.extend(["--write-idents=db_idents.txt", "--low-connections"])
 
     cmd.extend(posargs)
 
index 9a8cfb3b8436525f391553982a901f383d3b047f..16ce68e5140639768793d26ffac1588cdcbe3ab0 100644 (file)
@@ -311,7 +311,8 @@ markers = [
     "mypy: mypy integration / plugin tests",
     "timing_intensive: time-oriented tests that are sensitive to race conditions",
     "backend: tests that should run on all backends; typically dialect-sensitive",
-    "sparse_backend: tests that should run on multiple backends, not necessarily all",
+    "sparse_backend: tests that should run on just one backend for each kind of db",
+    "sparse_driver_backend: tests that should run on just one kind of driver for each kind of db",
     "gc_intensive: needs extremely predictable GC behavior",
 ]
 
index 4bbe7d0aab0c0f431280519fcae769d0b0776598..a1430656851f612ced8e4fd0168c98d8046da9a2 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -47,8 +47,8 @@ mssql = mssql+pyodbc://scott:tiger^5HHH@mssql2022:1433/test?driver=ODBC+Driver+1
 mssql_async = mssql+aioodbc://scott:tiger^5HHH@mssql2022:1433/test?driver=ODBC+Driver+18+for+SQL+Server&TrustServerCertificate=yes&Encrypt=Optional
 pymssql = mssql+pymssql://scott:tiger^5HHH@mssql2022:1433/test
 docker_mssql = mssql+pyodbc://scott:tiger^5HHH@127.0.0.1:1433/test?driver=ODBC+Driver+18+for+SQL+Server&TrustServerCertificate=yes&Encrypt=Optional
-oracle = oracle+cx_oracle://scott:tiger@oracle18c/xe
-cxoracle = oracle+cx_oracle://scott:tiger@oracle18c/xe
-oracledb = oracle+oracledb://scott:tiger@oracle18c/xe
-oracledb_async = oracle+oracledb_async://scott:tiger@oracle18c/xe
+oracle = oracle+cx_oracle://scott:tiger@oracle23c/freepdb1
+cxoracle = oracle+cx_oracle://scott:tiger@oracle23c/freepdb1
+oracledb = oracle+oracledb://scott:tiger@oracle23c/freepdb1
+oracledb_async = oracle+oracledb_async://scott:tiger@oracle23c/freepdb1
 docker_oracle = oracle+cx_oracle://scott:tiger@127.0.0.1:1521/?service_name=FREEPDB1
index 93f89cf5d56c8a606270751c4dab816806148dc3..0dd61da03a2f257afba254e5439a4355ea927814 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
@@ -1425,7 +1425,7 @@ class IdentityReflectionTest(fixtures.TablesTest):
 
 class AdditionalReflectionTests(fixtures.TestBase):
     __only_on__ = "oracle"
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def setup_test_class(cls):
index c905b921b90247ee4c03b08f33ae9de734a92816..0eac7d5c2b8ce5bfd194d47e1308a019cf264c06 100644 (file)
@@ -960,7 +960,7 @@ class TypesTest(fixtures.TestBase):
         finally:
             exec_sql(connection, "DROP TABLE Z_TEST")
 
-    @testing.only_on("oracle>=23.4")
+    @testing.requires.oracle_vector
     def test_vector_dim(self, metadata, connection):
         t1 = Table(
             "t1",
@@ -973,7 +973,7 @@ class TypesTest(fixtures.TestBase):
         t1.create(connection)
         eq_(t1.c.c1.type.dim, 3)
 
-    @testing.only_on("oracle>=23.4")
+    @testing.requires.oracle_vector
     def test_vector_insert(self, metadata, connection):
         t1 = Table(
             "t1",
@@ -998,7 +998,7 @@ class TypesTest(fixtures.TestBase):
             (1, [6, 7]),
         )
 
-    @testing.only_on("oracle>=23.4")
+    @testing.requires.oracle_vector
     def test_vector_insert_array(self, metadata, connection):
         t1 = Table(
             "t1",
@@ -1027,7 +1027,7 @@ class TypesTest(fixtures.TestBase):
             (1, [6, 7]),
         )
 
-    @testing.only_on("oracle>=23.4")
+    @testing.requires.oracle_vector
     def test_vector_multiformat_insert(self, metadata, connection):
         t1 = Table(
             "t1",
@@ -1052,7 +1052,7 @@ class TypesTest(fixtures.TestBase):
             (1, [6, 7]),
         )
 
-    @testing.only_on("oracle>=23.4")
+    @testing.requires.oracle_vector
     def test_vector_format(self, metadata, connection):
         t1 = Table(
             "t1",
@@ -1065,7 +1065,12 @@ class TypesTest(fixtures.TestBase):
         t1.create(connection)
         eq_(t1.c.c1.type.storage_format, VectorStorageFormat.FLOAT32)
 
-    @testing.only_on("oracle>=23.4")
+    @testing.requires.oracle_vector
+    @testing.skip_if(
+        lambda: True,
+        "Does not work on free versions of Oracle 23.  "
+        "No testing platform available",
+    )
     def test_vector_hnsw_index(self, metadata, connection):
         t1 = Table(
             "t1",
@@ -1090,7 +1095,7 @@ class TypesTest(fixtures.TestBase):
             (1, [6.0, 7.0, 8.0]),
         )
 
-    @testing.only_on("oracle>=23.4")
+    @testing.requires.oracle_vector
     def test_vector_ivf_index(self, metadata, connection):
         t1 = Table(
             "t1",
@@ -1121,7 +1126,7 @@ class TypesTest(fixtures.TestBase):
             (1, [6.0, 7.0, 8.0]),
         )
 
-    @testing.only_on("oracle>=23.4")
+    @testing.requires.oracle_vector
     def test_vector_l2_distance(self, metadata, connection):
         t1 = Table(
             "t1",
@@ -1148,7 +1153,7 @@ class TypesTest(fixtures.TestBase):
         ).first()
         eq_(res.embedding, [1, 2, 3])
 
-    @testing.only_on("oracle>=23.7")
+    @testing.requires.oracle_sparse_vector
     def test_sparse_vector(self, metadata, connection):
         t1 = Table(
             "t1",
@@ -1166,7 +1171,7 @@ class TypesTest(fixtures.TestBase):
         t1.create(connection)
         eq_(t1.c.embedding.type.storage_type, VectorStorageType.SPARSE)
 
-    @testing.only_on("oracle>=23.7")
+    @testing.requires.oracle_sparse_vector
     def test_sparse_vector_insert(self, metadata, connection):
         t1 = Table(
             "t1",
index 3e392e8fd239bf132353df1dac562011cf47a919..12383a5a04ea3034b3b389f02a0b0fbe17d58f40 100644 (file)
@@ -46,7 +46,7 @@ from sqlalchemy.testing.assertsql import DialectSQL
 
 class FunctionTypingTest(fixtures.TestBase, AssertsExecutionResults):
     __only_on__ = "postgresql"
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def test_count_star(self, connection):
         eq_(connection.scalar(func.count("*")), 1)
index 4dfd0e4fd0d2c126f228b1c32fe813c218cc88f4..d5bf5ab26612f81873a06aa48a5d4f2eb7d2f593 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
@@ -2812,7 +2812,7 @@ class CustomTypeReflectionTest(fixtures.TestBase):
 
 class IntervalReflectionTest(fixtures.TestBase):
     __only_on__ = "postgresql"
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.combinations(
         ("YEAR",),
@@ -2867,7 +2867,7 @@ class IntervalReflectionTest(fixtures.TestBase):
 
 class IdentityReflectionTest(fixtures.TablesTest):
     __only_on__ = "postgresql"
-    __backend__ = True
+    __sparse_driver_backend__ = True
     __requires__ = ("identity_columns",)
 
     _names = ("t1", "T2", "MiXeDCaSe!")
@@ -2942,7 +2942,7 @@ class IdentityReflectionTest(fixtures.TablesTest):
 
 class TestReflectDifficultColTypes(fixtures.TablesTest):
     __only_on__ = "postgresql"
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def define_tables(metadata):
         Table(
@@ -3003,7 +3003,7 @@ class TestReflectDifficultColTypes(fixtures.TablesTest):
 
 class TestTableOptionsReflection(fixtures.TestBase):
     __only_on__ = "postgresql"
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def test_table_inherits(self, metadata, connection):
         def assert_inherits_from(table_name, expect_base_tables):
index 6ef25fe363355e10ab9bcc001b196d0f78ccd8db..e01c777428c38176099900eef48e0ff7b6c3331a 100644 (file)
@@ -252,7 +252,7 @@ class FloatCoercionTest(fixtures.TablesTest, AssertsExecutionResults):
 class NamedTypeTest(
     AssertsCompiledSQL, fixtures.TestBase, AssertsExecutionResults
 ):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     __only_on__ = "postgresql > 8.3"
 
@@ -1482,7 +1482,7 @@ class NamedTypeTest(
 class DomainTest(
     AssertsCompiledSQL, fixtures.TestBase, AssertsExecutionResults
 ):
-    __backend__ = True
+    __sparse_driver_backend__ = True
     __only_on__ = "postgresql > 8.3"
 
     @testing.requires.postgresql_working_nullable_domains
@@ -1640,7 +1640,7 @@ class DomainTest(
 
 
 class DomainDDLEventTest(DDLEventWCreateHarness, fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     __only_on__ = "postgresql > 8.3"
 
@@ -1667,7 +1667,7 @@ class DomainDDLEventTest(DDLEventWCreateHarness, fixtures.TestBase):
 
 
 class EnumDDLEventTest(DDLEventWCreateHarness, fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     __only_on__ = "postgresql > 8.3"
 
@@ -1715,7 +1715,7 @@ class NativeEnumDDLEventTest(EnumDDLEventTest):
 
 class OIDTest(fixtures.TestBase):
     __only_on__ = "postgresql"
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def test_reflection(self, connection, metadata):
         Table(
@@ -1736,7 +1736,7 @@ class OIDTest(fixtures.TestBase):
 
 class RegClassTest(fixtures.TestBase):
     __only_on__ = "postgresql"
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.fixture()
     def scalar(self, connection):
@@ -3824,7 +3824,7 @@ class SpecialTypesTest(fixtures.TablesTest, ComparesTables):
     """test DDL and reflection of PG-specific types"""
 
     __only_on__ = ("postgresql >= 8.3.0",)
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.metadata_fixture()
     def special_types_table(self, metadata):
@@ -5444,7 +5444,7 @@ class _RangeComparisonFixtures(_RangeTests):
 
 class _RangeTypeRoundTrip(_RangeComparisonFixtures, fixtures.TablesTest):
     __requires__ = ("range_types",)
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -5986,7 +5986,7 @@ class _MultiRangeTypeCompilation(AssertsCompiledSQL, fixtures.TestBase):
 
 class _MultiRangeTypeRoundTrip(fixtures.TablesTest, _RangeTests):
     __requires__ = ("multirange_types",)
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.fixture(params=(True, False), ids=["multirange", "plain_list"])
     def data_obj(self, request):
index 17a51ad76f1e2b06364ed214e3bb8df547dacff3..9c76c160b6923d3b9c6f86dd9da05bef22d837d2 100644 (file)
@@ -927,7 +927,7 @@ class ExecuteTest(fixtures.TablesTest):
 
 
 class ConvenienceExecuteTest(fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -1058,7 +1058,7 @@ class ConvenienceExecuteTest(fixtures.TablesTest):
 
 
 class CompiledCacheTest(fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def test_cache(self, connection, metadata):
         users = Table(
@@ -1263,7 +1263,7 @@ class MockStrategyTest(fixtures.TestBase):
 
 class SchemaTranslateTest(fixtures.TestBase, testing.AssertsExecutionResults):
     __requires__ = ("schemas",)
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.fixture
     def plain_tables(self, metadata):
@@ -1720,7 +1720,7 @@ class ExecutionOptionsTest(fixtures.TestBase):
 
 class EngineEventsTest(fixtures.TestBase):
     __requires__ = ("ad_hoc_engines",)
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def teardown_test(self):
         Engine.dispatch._clear()
@@ -2842,7 +2842,7 @@ class EngineEventsTest(fixtures.TestBase):
 
 class HandleErrorTest(fixtures.TestBase):
     __requires__ = ("ad_hoc_engines",)
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def teardown_test(self):
         Engine.dispatch._clear()
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 182d680f0c92875ea1c39d400c8f2df3bd6416cc..c93ab149d481e09806ba0d17bbebc35364c3f4a5 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"]
@@ -1669,7 +1675,7 @@ class ResetAgentTest(ResetFixture, fixtures.TestBase):
     # the state is cleared.    options to optimize this with clear
     # docs etc. should be added.
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def test_begin_close(self, reset_agent):
         with reset_agent.engine.connect() as connection:
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 5f193693e306b17bcd84c1b5cf201368bae122c5..87f785816910c04b56f801e2834f21068c48b989 100644 (file)
@@ -4609,7 +4609,7 @@ class GenericMappingQueryTest(AssertsCompiledSQL, fixtures.TestBase):
 
 
 class BackendTests(fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.variation("native_enum", [True, False])
     @testing.variation("include_column", [True, False])
index eb8ac576f7e6d685475ef568dd856317c8980da3..9f67bf9474dec75380ddd960bea4abcfb72aa42a 100644 (file)
@@ -4600,7 +4600,7 @@ class GenericMappingQueryTest(AssertsCompiledSQL, fixtures.TestBase):
 
 
 class BackendTests(fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.variation("native_enum", [True, False])
     @testing.variation("include_column", [True, False])
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 430c0bc992d3a71c0c06be99d8a983f2df475cf1..d9dbda2399500c6967c533d291b8cddefb616c6e 100644 (file)
@@ -60,7 +60,7 @@ from sqlalchemy.types import NullType
 
 
 class InsertStmtTest(testing.AssertsExecutionResults, fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.variation(
         "style",
@@ -696,7 +696,7 @@ class InsertStmtTest(testing.AssertsExecutionResults, fixtures.TestBase):
 
 
 class UpdateStmtTest(testing.AssertsExecutionResults, fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.variation(
         "use_onupdate",
@@ -2227,7 +2227,7 @@ class BulkDMLReturningJoinedInhTest(
     BulkDMLReturningInhTest, fixtures.DeclarativeMappedTest
 ):
     __requires__ = ("insert_returning", "insert_executemany_returning")
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     use_sentinel = False
     randomize_returning = False
@@ -2344,7 +2344,7 @@ class BulkDMLReturningSingleInhTest(
     BulkDMLReturningInhTest, fixtures.DeclarativeMappedTest
 ):
     __requires__ = ("insert_returning", "insert_executemany_returning")
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def setup_classes(cls):
@@ -2387,7 +2387,7 @@ class BulkDMLReturningConcreteInhTest(
     BulkDMLReturningInhTest, fixtures.DeclarativeMappedTest
 ):
     __requires__ = ("insert_returning", "insert_executemany_returning")
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def setup_classes(cls):
@@ -2427,7 +2427,7 @@ class BulkDMLReturningConcreteInhTest(
 
 class CTETest(fixtures.DeclarativeMappedTest):
     __requires__ = ("insert_returning", "ctes_on_dml")
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def setup_classes(cls):
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 4df674facddf1b8e69d0636452d0a67e99f8e9fa..09b499eda0a8bb08239b09aebfc83907f9625412 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):
@@ -2312,7 +2312,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 f84807fa9286dd259d6fdc4e8cc3f87d5520dd12..d5455b2c9d2f6d5fba2fd2497f5c0d4999789bde 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):
@@ -2794,7 +2794,7 @@ class OverrideColKeyTest(fixtures.MappedTest):
 class OptimizedLoadTest(fixtures.MappedTest):
     """tests for the "optimized load" routine."""
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
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 b2fb34ad5c90c1a476c3fe527136c2b139badb78..3f6ddb28feb814dd5bd610a287df912b2a85d667 100644 (file)
@@ -424,7 +424,7 @@ class SelectableTest(QueryTest, AssertsCompiledSQL):
 
 
 class PropagateAttrsTest(QueryTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def propagate_cases():
         def distinct_deprecated(User, user_table):
index 0b0ad90943a1db638a86f621d7263b2b55ad2d82..c720e091526642e58c09d21742aa718a5547d11c 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
@@ -419,7 +419,7 @@ class IdentityDefaultsOnUpdateTest(fixtures.MappedTest):
     """test that computed columns are recognized as server
     oninsert/onupdate defaults."""
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
     __requires__ = ("identity_columns",)
     run_create_tables = "each"
 
index 9c69c10db29858b0eb909df888dacdeb95b57326..f35e5f04719ae203fceca29dc6e54b7d875f88c5 100644 (file)
@@ -1477,7 +1477,7 @@ class WriteOnlyUOWTest(
     _fixtures.FixtureTest,
     testing.AssertsExecutionResults,
 ):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.fixture
     def passive_deletes_fixture(self, decl_base, connection):
@@ -1651,7 +1651,7 @@ class WriteOnlyBulkTest(
     testing.AssertsExecutionResults,
 ):
     run_inserts = None
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.requires.insert_executemany_returning
     @testing.combinations(True, False, argnames="flush_user_first")
index 18c443a6b7c3577f284061410995fc662d102f52..c64464563128b31cf999b08c42e5765f9d7b7acc 100644 (file)
@@ -3324,7 +3324,7 @@ class SelectUniqueTest(_fixtures.FixtureTest):
 
 class InnerJoinSplicingTest(fixtures.MappedTest, testing.AssertsCompiledSQL):
     __dialect__ = "default"
-    __backend__ = True  # exercise hardcore join nesting on backends
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -3658,7 +3658,7 @@ class InnerJoinSplicingWSecondaryTest(
     fixtures.MappedTest, testing.AssertsCompiledSQL
 ):
     __dialect__ = "default"
-    __backend__ = True  # exercise hardcore join nesting on backends
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -3788,7 +3788,7 @@ class InnerJoinSplicingWSecondarySelfRefTest(
     """test for issue 11449"""
 
     __dialect__ = "default"
-    __backend__ = True  # exercise hardcore join nesting on backends
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -7130,7 +7130,7 @@ class SingletonConstantSubqTest(_fixtures.FixtureTest):
     run_inserts = "once"
     run_deletes = None
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def setup_mappers(cls):
index 437f7e8c58a44adc38793d161274e262e9557c67..e08987eb80b23ee3a356e386b390dbbc0f93f4cd 100644 (file)
@@ -3870,7 +3870,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 ff8063cc3a2fd929b546d2ec3392fe0d0d62fe25..7feb9d4ec8358bc7cd99d99fa4b9e3c50093a475 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 b201e4343cf93652fcc41382b525c2bb32b2f678..c2ce24d278ff6f6805483cd33c84ed4fb809f909 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
@@ -5296,7 +5296,7 @@ class YieldTest(_fixtures.FixtureTest):
     run_setup_mappers = "each"
     run_inserts = "each"
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def _eagerload_mappings(self, addresses_lazy=True, user_lazy=True):
         User, Address = self.classes("User", "Address")
index 5d1875bd80dd3637e4c50ef8597c187869537566..349768c21b2e8bd71852369d0854307da883fb47 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"
@@ -1674,7 +1674,7 @@ class DeferredRelationshipExpressionTest(_fixtures.FixtureTest):
 
 
 class SessionStateWFixtureTest(_fixtures.FixtureTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def test_autoflush_rollback(self):
         Address, addresses, users, User = (
index 2f7a2f1980ab86ba2c42a273ac034feb31064682..2443bb784b3ff2bb4a7b5e992862cc798dfd5338 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
@@ -1132,7 +1132,7 @@ def subtransaction_recipe_three(self):
 )
 class SubtransactionRecipeTest(FixtureTest):
     run_inserts = None
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.fixture
     def subtransaction_recipe(self):
@@ -1310,7 +1310,7 @@ class SubtransactionRecipeTest(FixtureTest):
 
 class FixtureDataTest(_LocalFixture):
     run_inserts = "each"
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def test_attrs_on_rollback(self):
         User = self.classes.User
@@ -1352,7 +1352,7 @@ class CleanSavepointTest(FixtureTest):
     """
 
     run_inserts = None
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def _run_test(self, update_fn):
         User, users = self.classes.User, self.tables.users
@@ -1409,7 +1409,7 @@ class CleanSavepointTest(FixtureTest):
 
 
 class AutoExpireTest(_LocalFixture):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def test_expunge_pending_on_rollback(self):
         User = self.classes.User
@@ -1521,7 +1521,7 @@ class AutoExpireTest(_LocalFixture):
 
 
 class TwoPhaseTest(_LocalFixture):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.requires.two_phase_transactions
     def test_rollback_on_prepare(self):
@@ -1537,7 +1537,7 @@ class TwoPhaseTest(_LocalFixture):
 
 
 class RollbackRecoverTest(_LocalFixture):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def test_pk_violation(self):
         User, Address = self.classes.User, self.classes.Address
@@ -1620,7 +1620,7 @@ class RollbackRecoverTest(_LocalFixture):
 
 
 class SavepointTest(_LocalFixture):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.requires.savepoints
     def test_savepoint_rollback(self):
@@ -1869,7 +1869,7 @@ class SavepointTest(_LocalFixture):
 
 
 class AccountingFlagsTest(_LocalFixture):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def test_no_expire_on_commit(self):
         User, users = self.classes.User, self.tables.users
@@ -1890,7 +1890,7 @@ class AccountingFlagsTest(_LocalFixture):
 
 class ContextManagerPlusFutureTest(FixtureTest):
     run_inserts = None
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.requires.savepoints
     @engines.close_open_connections
@@ -2328,7 +2328,7 @@ class TransactionFlagsTest(fixtures.TestBase):
 
 
 class NaturalPKRollbackTest(fixtures.MappedTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
index eb290156b816b7f93daa51b227c129c85b3343d0..f8873f9154e03dbc53f830443726a7b4f9c8ae3f 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):
@@ -3484,7 +3484,7 @@ class NoRowInsertedTest(fixtures.TestBase):
     # the test manipulates INSERTS to become UPDATES to simulate
     # "INSERT that returns no row" so both are needed; the manipulations
     # are currently postgresql or SQLite specific
-    __backend__ = True
+    __sparse_driver_backend__ = True
     __only_on__ = ("postgresql", "sqlite")
 
     @testing.fixture
index af6f0c2ce7b10822c728f7846a4b840e791c4ebb..9f6610f08c209460326734296ca59e02c5a62d00 100644 (file)
@@ -1759,7 +1759,7 @@ class RowswitchM2OTest(fixtures.MappedTest):
 
 
 class BasicStaleChecksTest(fixtures.MappedTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -2305,7 +2305,7 @@ class NoAttrEventInFlushTest(fixtures.MappedTest):
 
     """
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -2350,7 +2350,7 @@ class NoAttrEventInFlushTest(fixtures.MappedTest):
 
 
 class EagerDefaultsTest(fixtures.MappedTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -3122,7 +3122,7 @@ class EagerDefaultsTest(fixtures.MappedTest):
 class EagerDefaultsSettingTest(
     testing.AssertsExecutionResults, fixtures.TestBase
 ):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @variation_fixture("eager_defaults", ["unspecified", "auto", True, False])
     def eager_defaults_variations(self, request):
@@ -3932,7 +3932,7 @@ class ORMOnlyPrimaryKeyTest(fixtures.TestBase):
 
 
 class TryToFoolInsertManyValuesTest(fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.variation(
         "pk_type",
index d239869a4e0c2434ebca2ebd6626a2426f7d1ef8..9a06de72dd7a1e3fff93d4217ba3452d1f49f703 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
@@ -588,7 +591,7 @@ class VersioningTest(fixtures.MappedTest):
 
 
 class VersionOnPostUpdateTest(fixtures.MappedTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -802,7 +805,7 @@ class PostUpdatePrefetchTest(fixtures.DeclarativeMappedTest):
 
 
 class NoBumpOnRelationshipTest(fixtures.MappedTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -895,7 +898,7 @@ class NoBumpOnRelationshipTest(fixtures.MappedTest):
 
 
 class ColumnTypeTest(fixtures.MappedTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
     __requires__ = ("sane_rowcount",)
 
     @classmethod
@@ -945,7 +948,7 @@ class ColumnTypeTest(fixtures.MappedTest):
 
 
 class RowSwitchTest(fixtures.MappedTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -1025,7 +1028,7 @@ class RowSwitchTest(fixtures.MappedTest):
 
 
 class AlternateGeneratorTest(fixtures.MappedTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
     __requires__ = ("sane_rowcount",)
 
     @classmethod
@@ -1145,7 +1148,7 @@ class AlternateGeneratorTest(fixtures.MappedTest):
 
 
 class PlainInheritanceTest(fixtures.MappedTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -1204,7 +1207,7 @@ class InheritanceTwoVersionIdsTest(fixtures.MappedTest):
 
     """
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -1332,7 +1335,7 @@ class InheritanceTwoVersionIdsTest(fixtures.MappedTest):
 class ServerVersioningTest(fixtures.MappedTest):
     run_define_tables = "each"
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -1725,7 +1728,7 @@ class ServerVersioningTest(fixtures.MappedTest):
 
 class ManualVersionTest(fixtures.MappedTest):
     run_define_tables = "each"
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -1822,7 +1825,7 @@ class ManualVersionTest(fixtures.MappedTest):
 
 class ManualInheritanceVersionTest(fixtures.MappedTest):
     run_define_tables = "each"
-    __backend__ = True
+    __sparse_driver_backend__ = True
     __requires__ = ("sane_rowcount",)
 
     @classmethod
@@ -1893,7 +1896,7 @@ class ManualInheritanceVersionTest(fixtures.MappedTest):
 class VersioningMappedSelectTest(fixtures.MappedTest):
     # test for #4193, see also #4194 for related notes
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -2028,7 +2031,7 @@ class VersioningMappedSelectTest(fixtures.MappedTest):
 class QuotedBindVersioningTest(fixtures.MappedTest):
     """test for #8056"""
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
index 76297775a5e43507c2259503e85b3a80d7009e23..556ab550ceadc448fd5c34705a1cf4bce85e0a4f 100644 (file)
@@ -444,7 +444,9 @@ class DefaultRequirements(SuiteRequirements):
         return skip_if(
             [
                 no_support("oracle", "Oracle XE usually can't handle these"),
-                no_support("mssql+pyodbc", "MS ODBC drivers struggle"),
+                no_support(
+                    "mssql", "MS drivers struggle plus the DB does too"
+                ),
                 no_support("+aiosqlite", "very unreliable driver"),
                 self._running_on_windows(),
             ]
@@ -1696,6 +1698,16 @@ class DefaultRequirements(SuiteRequirements):
     def oracle_test_dblink2(self):
         return self._has_oracle_test_dblink("oracle_db_link2")
 
+    @property
+    def oracle_vector(self):
+        """oracle vector support"""
+        return only_on("oracle>=23.4") + only_on("oracle+oracledb")
+
+    @property
+    def oracle_sparse_vector(self):
+        """oracle vector support"""
+        return only_on("oracle>=23.7") + only_on("oracle+oracledb")
+
     @property
     def postgresql_test_dblink(self):
         return skip_if(
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 5ebc86608b551c12f3dbe9899d81bf450da7da2b..2172b95d3024bbce2fb1c4091c83ddf22984270f 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):
@@ -1253,7 +1253,7 @@ class SpecialTypePKTest(fixtures.TestBase):
 
     """
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def setup_test_class(cls):
@@ -1361,7 +1361,7 @@ class SpecialTypePKTest(fixtures.TestBase):
 
 
 class ServerDefaultsOnPKTest(fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.provide_metadata
     def test_string_default_none_on_insert(self, connection):
@@ -1486,7 +1486,7 @@ class ServerDefaultsOnPKTest(fixtures.TestBase):
 
 
 class InsertFromSelectTest(fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -1556,7 +1556,7 @@ class InsertFromSelectTest(fixtures.TablesTest):
 
 
 class CurrentParametersTest(fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
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 7f95e7ab0bed9dd7caa32d6a6ed56ff8d7747085..4625e5b955afa233e8c68eacbe8778b6626a5e97 100644 (file)
@@ -43,7 +43,7 @@ class ToMetaDataTest(fixtures.TestBase):
 
 
 class DeprecationWarningsTest(fixtures.TestBase, AssertsCompiledSQL):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def test_empty_and_or(self):
         with testing.expect_deprecated(
@@ -223,7 +223,7 @@ class SelectableTest(fixtures.TestBase, AssertsCompiledSQL):
 class KeyTargetingTest(fixtures.TablesTest):
     run_inserts = "once"
     run_deletes = None
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -266,7 +266,7 @@ class KeyTargetingTest(fixtures.TablesTest):
 
 class PKIncrementTest(fixtures.TablesTest):
     run_define_tables = "each"
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
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 1aee4300ab7f9f17e8e9518d0ef0720c935d6a14..6766271d8af5aa9d673b9cd697c3a7a55ec1072b 100644 (file)
@@ -1331,7 +1331,7 @@ class ReturnTypeTest(AssertsCompiledSQL, fixtures.TestBase):
 
 
 class ExecuteTest(fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def teardown_test(self):
         pass
index 2eef36829d03099fcab984ca3a18596ca04f2ea1..893df0b9da04c4bf48a20da3a4d3aea34a57d03e 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 a865bc1bb039ccd88cb096d76a18766a17b96a04..d68e2ce357044e6cfe09031181e007719c1b81e4 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 f9cc8662a9e9e6f564c5ba62b3132d7e971dd7e8..43cbc08ba92c194ea21543ad44caeb699440ccb6 100644 (file)
@@ -2487,7 +2487,7 @@ class PKAutoIncrementTest(fixtures.TestBase):
 
 
 class SchemaTypeTest(fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     class TrackEvents:
         column = None
index 72b6bff738be29dc98b5c3c949c483b3f8be6b92..7762ab8637af81bae6208782f666d77ee4a87f00 100644 (file)
@@ -37,7 +37,7 @@ from sqlalchemy.testing.util import resolve_lambda
 
 
 class QueryTest(fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -881,7 +881,7 @@ class RequiredBindTest(fixtures.TablesTest):
 
 
 class LimitTest(fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -1011,7 +1011,7 @@ class CompoundTest(fixtures.TablesTest):
     """test compound statements like UNION, INTERSECT, particularly their
     ability to nest on different databases."""
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     run_inserts = "each"
 
@@ -1403,7 +1403,7 @@ class JoinTest(fixtures.TablesTest):
     database seems to be sensitive to this.
     """
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -1754,7 +1754,7 @@ class JoinTest(fixtures.TablesTest):
 
 
 class OperatorTest(fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
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 1acf10c615476f4e1f44f6f392580b3261dddcd9..189850c7ae0bc23dfc48b891909fdfbb24dc0040 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):
@@ -2323,7 +2323,7 @@ class CursorResultTest(fixtures.TablesTest):
 class KeyTargetingTest(fixtures.TablesTest):
     run_inserts = "once"
     run_deletes = None
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -2936,7 +2936,7 @@ class KeyTargetingTest(fixtures.TablesTest):
 class PositionalTextTest(fixtures.TablesTest):
     run_inserts = "once"
     run_deletes = None
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -3661,7 +3661,7 @@ class AlternateCursorResultTest(fixtures.TablesTest):
 
 
 class MergeCursorResultTest(fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     __requires__ = ("independent_cursors",)
 
@@ -3783,7 +3783,7 @@ class MergeCursorResultTest(fixtures.TablesTest):
 
 
 class GenerativeResultTest(fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
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 10785464180c7bac1116d7f0c4e97381cc84fa62..996df0a691851130c35c781e67f85e8de01e6228 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"), ""),
@@ -139,7 +139,7 @@ class SequenceDDLTest(fixtures.TestBase, testing.AssertsCompiledSQL):
 
 class SequenceExecTest(fixtures.TestBase):
     __requires__ = ("sequences",)
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def setup_test_class(cls):
@@ -399,7 +399,7 @@ class SequenceExecTest(fixtures.TestBase):
 
 class SequenceTest(fixtures.TestBase, testing.AssertsCompiledSQL):
     __requires__ = ("sequences",)
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.combinations(
         (Sequence("foo_seq"),),
@@ -563,7 +563,7 @@ class SequenceTest(fixtures.TestBase, testing.AssertsCompiledSQL):
 
 class TableBoundSequenceTest(fixtures.TablesTest):
     __requires__ = ("sequences",)
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.fixture
     def table_fixture(self, metadata, connection, implicit_returning):
@@ -687,7 +687,7 @@ class SequenceAsServerDefaultTest(
     testing.AssertsExecutionResults, fixtures.TablesTest
 ):
     __requires__ = ("sequences_as_server_defaults",)
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     run_create_tables = "each"
 
index d4f2bf4a18f16b9574d0569d36791cd40bf2619f..4c648d20bf630f2feed6de9f3cc38365cc90ddbc 100644 (file)
@@ -74,7 +74,7 @@ class BasicTests(fixtures.TestBase):
 
 
 class CacheTests(fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
index c366059b6420d2a31fc7b35af34f6e4f0cdce2fb..fc0f14817c035d477a68865e480a1b417c665f26 100644 (file)
@@ -784,7 +784,7 @@ class _UserDefinedTypeFixture:
 
 
 class UserDefinedRoundTripTest(_UserDefinedTypeFixture, fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def _data_fixture(self, connection):
         users = self.tables.users
@@ -980,7 +980,7 @@ class UserDefinedRoundTripTest(_UserDefinedTypeFixture, fixtures.TablesTest):
 
 
 class TypeDecoratorSpecialCasesTest(AssertsCompiledSQL, fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.requires.array_type
     def test_typedec_of_array_modified(self, metadata, connection):
@@ -1113,7 +1113,7 @@ class BindProcessorInsertValuesTest(UserDefinedRoundTripTest):
     """related to #6770, test that insert().values() applies to
     bound parameter handlers including the None value."""
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def _data_fixture(self, connection):
         users = self.tables.users
@@ -1353,7 +1353,7 @@ class UserDefinedTest(
 
 
 class TypeCoerceCastTest(fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -1634,7 +1634,7 @@ class TypeCoerceCastTest(fixtures.TablesTest):
 
 
 class VariantBackendTest(fixtures.TestBase, AssertsCompiledSQL):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.fixture
     def variant_roundtrip(self, metadata, connection):
@@ -2019,7 +2019,7 @@ class VariantTest(fixtures.TestBase, AssertsCompiledSQL):
 
 
 class EnumTest(AssertsCompiledSQL, fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     SomeEnum = pep435_enum("SomeEnum")
 
@@ -2989,7 +2989,7 @@ MyPickleType = None
 
 
 class BinaryTest(fixtures.TablesTest, AssertsExecutionResults):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -4117,7 +4117,7 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL):
 
 
 class TestKWArgPassThru(AssertsCompiledSQL, fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def test_user_defined(self):
         """test that dialects pass the column through on DDL."""
@@ -4137,7 +4137,7 @@ class NumericRawSQLTest(fixtures.TestBase):
 
     """
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def _fixture(self, connection, metadata, type_, data):
         t = Table("t", metadata, Column("val", type_))
@@ -4185,7 +4185,7 @@ class NumericRawSQLTest(fixtures.TestBase):
 
 
 class IntervalTest(fixtures.TablesTest, AssertsExecutionResults):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -4246,7 +4246,7 @@ class IntervalTest(fixtures.TablesTest, AssertsExecutionResults):
 
 
 class IntegerTest(fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     def test_integer_literal_processor(self):
         typ = Integer()
@@ -4270,7 +4270,7 @@ class BooleanTest(
 
     """
 
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):
@@ -4597,7 +4597,7 @@ class CallableTest(fixtures.TestBase):
 
 
 class LiteralTest(fixtures.TestBase):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.combinations(
         ("datetime", datetime.datetime.now()),
index 5a6133e41cd0e82ddd098abe578afb1315f081da..e5991663dcb3ff44a57f4f4eee906ed325b9fb05 100644 (file)
@@ -1639,7 +1639,7 @@ class UpdateFromCompileTest(
 
 
 class UpdateFromRoundTripTest(_UpdateFromTestBase, fixtures.TablesTest):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @testing.requires.update_from
     def test_exec_two_table(self, connection):
@@ -1793,7 +1793,7 @@ class UpdateFromRoundTripTest(_UpdateFromTestBase, fixtures.TablesTest):
 class UpdateFromMultiTableUpdateDefaultsTest(
     _UpdateFromTestBase, fixtures.TablesTest
 ):
-    __backend__ = True
+    __sparse_driver_backend__ = True
 
     @classmethod
     def define_tables(cls, metadata):