diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2022-09-26 02:33:19 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@ci3.zzzcomputing.com> | 2022-09-26 02:33:19 +0000 |
| commit | 1657cea73d5ec9aeedd541001e125e03e581a34b (patch) | |
| tree | b1d8527435fa51f7cec399972ea5af29d4f74a67 /test/sql | |
| parent | e708cfea0bdaae82ac30dd7d33f9442115b9af6d (diff) | |
| parent | c86ec8f8c98b756ef06933174a3f4a0f3cfbed41 (diff) | |
| download | sqlalchemy-1657cea73d5ec9aeedd541001e125e03e581a34b.tar.gz | |
Merge "`aggregate_order_by` now supports cache generation." into main
Diffstat (limited to 'test/sql')
| -rw-r--r-- | test/sql/test_compare.py | 106 |
1 files changed, 1 insertions, 105 deletions
diff --git a/test/sql/test_compare.py b/test/sql/test_compare.py index 18f26887a..30ca5c569 100644 --- a/test/sql/test_compare.py +++ b/test/sql/test_compare.py @@ -27,7 +27,6 @@ from sqlalchemy import tuple_ from sqlalchemy import TypeDecorator from sqlalchemy import union from sqlalchemy import union_all -from sqlalchemy import util from sqlalchemy import values from sqlalchemy.dialects import mysql from sqlalchemy.dialects import postgresql @@ -1054,110 +1053,7 @@ class CoreFixtures: ] -class CacheKeyFixture: - def _compare_equal(self, a, b, compare_values): - a_key = a._generate_cache_key() - b_key = b._generate_cache_key() - - if a_key is None: - assert a._annotations.get("nocache") - - assert b_key is None - else: - - eq_(a_key.key, b_key.key) - eq_(hash(a_key.key), hash(b_key.key)) - - for a_param, b_param in zip(a_key.bindparams, b_key.bindparams): - assert a_param.compare(b_param, compare_values=compare_values) - return a_key, b_key - - def _run_cache_key_fixture(self, fixture, compare_values): - case_a = fixture() - case_b = fixture() - - for a, b in itertools.combinations_with_replacement( - range(len(case_a)), 2 - ): - if a == b: - a_key, b_key = self._compare_equal( - case_a[a], case_b[b], compare_values - ) - if a_key is None: - continue - else: - a_key = case_a[a]._generate_cache_key() - b_key = case_b[b]._generate_cache_key() - - if a_key is None or b_key is None: - if a_key is None: - assert case_a[a]._annotations.get("nocache") - if b_key is None: - assert case_b[b]._annotations.get("nocache") - continue - - if a_key.key == b_key.key: - for a_param, b_param in zip( - a_key.bindparams, b_key.bindparams - ): - if not a_param.compare( - b_param, compare_values=compare_values - ): - break - else: - # this fails unconditionally since we could not - # find bound parameter values that differed. - # Usually we intended to get two distinct keys here - # so the failure will be more descriptive using the - # ne_() assertion. - ne_(a_key.key, b_key.key) - else: - ne_(a_key.key, b_key.key) - - # ClauseElement-specific test to ensure the cache key - # collected all the bound parameters that aren't marked - # as "literal execute" - if isinstance(case_a[a], ClauseElement) and isinstance( - case_b[b], ClauseElement - ): - assert_a_params = [] - assert_b_params = [] - - for elem in visitors.iterate(case_a[a]): - if elem.__visit_name__ == "bindparam": - assert_a_params.append(elem) - - for elem in visitors.iterate(case_b[b]): - if elem.__visit_name__ == "bindparam": - assert_b_params.append(elem) - - # note we're asserting the order of the params as well as - # if there are dupes or not. ordering has to be - # deterministic and matches what a traversal would provide. - eq_( - sorted(a_key.bindparams, key=lambda b: b.key), - sorted( - util.unique_list(assert_a_params), key=lambda b: b.key - ), - ) - eq_( - sorted(b_key.bindparams, key=lambda b: b.key), - sorted( - util.unique_list(assert_b_params), key=lambda b: b.key - ), - ) - - def _run_cache_key_equal_fixture(self, fixture, compare_values): - case_a = fixture() - case_b = fixture() - - for a, b in itertools.combinations_with_replacement( - range(len(case_a)), 2 - ): - self._compare_equal(case_a[a], case_b[b], compare_values) - - -class CacheKeyTest(CacheKeyFixture, CoreFixtures, fixtures.TestBase): +class CacheKeyTest(fixtures.CacheKeyFixture, CoreFixtures, fixtures.TestBase): # we are slightly breaking the policy of not having external dialect # stuff in here, but use pg/mysql as test cases to ensure that these # objects don't report an inaccurate cache key, which is dependent |
