From 3f900e96b95c6dbd20ee6f5aa3f49dd6124ffba9 Mon Sep 17 00:00:00 2001 From: Frazer McLean Date: Wed, 13 Nov 2024 23:06:56 +0100 Subject: [PATCH] Add Range.__contains__ --- lib/sqlalchemy/dialects/postgresql/ranges.py | 2 ++ test/dialect/postgresql/test_types.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/lib/sqlalchemy/dialects/postgresql/ranges.py b/lib/sqlalchemy/dialects/postgresql/ranges.py index b793ca49f1..fa0c0c5df8 100644 --- a/lib/sqlalchemy/dialects/postgresql/ranges.py +++ b/lib/sqlalchemy/dialects/postgresql/ranges.py @@ -360,6 +360,8 @@ class Range(Generic[_T]): else: return self._contains_value(value) + __contains__ = contains + def overlaps(self, other: Range[_T]) -> bool: "Determine whether this range overlaps with `other`." diff --git a/test/dialect/postgresql/test_types.py b/test/dialect/postgresql/test_types.py index 2523765673..2c5bd98fde 100644 --- a/test/dialect/postgresql/test_types.py +++ b/test/dialect/postgresql/test_types.py @@ -4377,12 +4377,14 @@ class _RangeComparisonFixtures(_RangeTests): ) is_true(range_.contains(values["il"])) + is_true(values["il"] in range_) is_false( range_.contains(Range(lower=values["ll"], upper=values["ih"])) ) is_false(range_.contains(values["rh"])) + is_false(values["rh"] in range_) is_true(range_ == range_) is_false(range_ != range_) @@ -4430,6 +4432,7 @@ class _RangeComparisonFixtures(_RangeTests): ) r, expected = connection.execute(q).first() eq_(r.contains(v), expected) + eq_(v in r, expected) _common_ranges_to_test = ( lambda r, e: Range(empty=True), @@ -4490,6 +4493,12 @@ class _RangeComparisonFixtures(_RangeTests): f"{r1}.contains({r2}): got {py_contains}," f" expected {pg_contains}", ) + r2_in_r1 = r2 in r1 + eq_( + r2_in_r1, + pg_contains, + f"{r2} in {r1}: got {r2_in_r1}, expected {pg_contains}", + ) py_contained = r1.contained_by(r2) eq_( py_contained, @@ -4503,6 +4512,12 @@ class _RangeComparisonFixtures(_RangeTests): f"{r2}.contains({r1}: got {r2.contains(r1)}," f" expected {pg_contained})", ) + r1_in_r2 = r1 in r2 + eq_( + r1_in_r2, + pg_contained, + f"{r1} in {r2}: got {r1_in_r2}, expected {pg_contained}", + ) @testing.combinations( *_common_ranges_to_test, -- 2.47.3