diff options
| author | Jim Bosch <jbosch@astro.princeton.edu> | 2020-07-26 16:50:14 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2020-07-26 16:57:13 -0400 |
| commit | 07e57a0330fb7b1bbe0c59f442111a34e4b7c960 (patch) | |
| tree | 9310c47b7ceb59fce44b6f4b29d2d6571fcc7a4b /test/dialect/postgresql | |
| parent | 9e1ee412b8650761af6df993e119906682604728 (diff) | |
| download | sqlalchemy-07e57a0330fb7b1bbe0c59f442111a34e4b7c960.tar.gz | |
Ensure is_comparison passed for PG RANGE op() methods
Fixed issue where the return type for the various RANGE comparison
operators would itself be the same RANGE type rather than BOOLEAN, which
would cause an undesirable result in the case that a
:class:`.TypeDecorator` that defined result-processing behavior were in
use. Pull request courtesy Jim Bosch.
Fixes: #5476
Closes: #5477
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5477
Pull-request-sha: 925b117e0c91cdd67d9ddbd9d65f5ca3e88af91f
Change-Id: I52ab4d4362d379c8253990f9d328a40990a64520
Diffstat (limited to 'test/dialect/postgresql')
| -rw-r--r-- | test/dialect/postgresql/test_types.py | 65 |
1 files changed, 51 insertions, 14 deletions
diff --git a/test/dialect/postgresql/test_types.py b/test/dialect/postgresql/test_types.py index 9331f9910..d22989291 100644 --- a/test/dialect/postgresql/test_types.py +++ b/test/dialect/postgresql/test_types.py @@ -2628,112 +2628,149 @@ class _RangeTypeCompilation(AssertsCompiledSQL, fixtures.TestBase): ) cls.col = table.c.range - def _test_clause(self, colclause, expected): + def _test_clause(self, colclause, expected, type_): self.assert_compile(colclause, expected) + is_(colclause.type._type_affinity, type_._type_affinity) def test_where_equal(self): self._test_clause( - self.col == self._data_str, "data_table.range = %(range_1)s" + self.col == self._data_str, + "data_table.range = %(range_1)s", + sqltypes.BOOLEANTYPE, ) def test_where_not_equal(self): self._test_clause( - self.col != self._data_str, "data_table.range <> %(range_1)s" + self.col != self._data_str, + "data_table.range <> %(range_1)s", + sqltypes.BOOLEANTYPE, ) def test_where_is_null(self): - self._test_clause(self.col == None, "data_table.range IS NULL") + self._test_clause( + self.col == None, "data_table.range IS NULL", sqltypes.BOOLEANTYPE + ) def test_where_is_not_null(self): - self._test_clause(self.col != None, "data_table.range IS NOT NULL") + self._test_clause( + self.col != None, + "data_table.range IS NOT NULL", + sqltypes.BOOLEANTYPE, + ) def test_where_less_than(self): self._test_clause( - self.col < self._data_str, "data_table.range < %(range_1)s" + self.col < self._data_str, + "data_table.range < %(range_1)s", + sqltypes.BOOLEANTYPE, ) def test_where_greater_than(self): self._test_clause( - self.col > self._data_str, "data_table.range > %(range_1)s" + self.col > self._data_str, + "data_table.range > %(range_1)s", + sqltypes.BOOLEANTYPE, ) def test_where_less_than_or_equal(self): self._test_clause( - self.col <= self._data_str, "data_table.range <= %(range_1)s" + self.col <= self._data_str, + "data_table.range <= %(range_1)s", + sqltypes.BOOLEANTYPE, ) def test_where_greater_than_or_equal(self): self._test_clause( - self.col >= self._data_str, "data_table.range >= %(range_1)s" + self.col >= self._data_str, + "data_table.range >= %(range_1)s", + sqltypes.BOOLEANTYPE, ) def test_contains(self): self._test_clause( self.col.contains(self._data_str), "data_table.range @> %(range_1)s", + sqltypes.BOOLEANTYPE, ) def test_contained_by(self): self._test_clause( self.col.contained_by(self._data_str), "data_table.range <@ %(range_1)s", + sqltypes.BOOLEANTYPE, ) def test_overlaps(self): self._test_clause( self.col.overlaps(self._data_str), "data_table.range && %(range_1)s", + sqltypes.BOOLEANTYPE, ) def test_strictly_left_of(self): self._test_clause( - self.col << self._data_str, "data_table.range << %(range_1)s" + self.col << self._data_str, + "data_table.range << %(range_1)s", + sqltypes.BOOLEANTYPE, ) self._test_clause( self.col.strictly_left_of(self._data_str), "data_table.range << %(range_1)s", + sqltypes.BOOLEANTYPE, ) def test_strictly_right_of(self): self._test_clause( - self.col >> self._data_str, "data_table.range >> %(range_1)s" + self.col >> self._data_str, + "data_table.range >> %(range_1)s", + sqltypes.BOOLEANTYPE, ) self._test_clause( self.col.strictly_right_of(self._data_str), "data_table.range >> %(range_1)s", + sqltypes.BOOLEANTYPE, ) def test_not_extend_right_of(self): self._test_clause( self.col.not_extend_right_of(self._data_str), "data_table.range &< %(range_1)s", + sqltypes.BOOLEANTYPE, ) def test_not_extend_left_of(self): self._test_clause( self.col.not_extend_left_of(self._data_str), "data_table.range &> %(range_1)s", + sqltypes.BOOLEANTYPE, ) def test_adjacent_to(self): self._test_clause( self.col.adjacent_to(self._data_str), "data_table.range -|- %(range_1)s", + sqltypes.BOOLEANTYPE, ) def test_union(self): self._test_clause( - self.col + self.col, "data_table.range + data_table.range" + self.col + self.col, + "data_table.range + data_table.range", + self.col.type, ) def test_intersection(self): self._test_clause( - self.col * self.col, "data_table.range * data_table.range" + self.col * self.col, + "data_table.range * data_table.range", + self.col.type, ) def test_different(self): self._test_clause( - self.col - self.col, "data_table.range - data_table.range" + self.col - self.col, + "data_table.range - data_table.range", + self.col.type, ) |
