Added SpatialFeatures.supports_tolerance_parameter.

This commit is contained in:
Tim Graham 2020-11-30 01:29:00 -05:00 committed by GitHub
parent 3828427f63
commit 371022a20d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 8 additions and 16 deletions

View File

@ -51,6 +51,9 @@ class BaseSpatialFeatures:
# Can SchemaEditor alter geometry fields?
can_alter_geometry_field = True
# Do the database functions/aggregates support the tolerance parameter?
supports_tolerance_parameter = False
# Set of options that AsGeoJSON() doesn't support.
unsupported_geojson_options = {}

View File

@ -10,4 +10,5 @@ class DatabaseFeatures(BaseSpatialFeatures, OracleDatabaseFeatures):
supports_geometry_field_unique_index = False
supports_perimeter_geodetic = True
supports_dwithin_distance_expr = False
supports_tolerance_parameter = True
unsupported_geojson_options = {'bbox', 'crs', 'precision'}

View File

@ -432,10 +432,7 @@ class DistanceFunctionsTests(FuncTestMixin, TestCase):
).filter(d=D(m=1))
self.assertTrue(qs.exists())
@unittest.skipUnless(
connection.vendor == 'oracle',
'Oracle supports tolerance parameter.',
)
@skipUnlessDBFeature('supports_tolerance_parameter')
def test_distance_function_tolerance_escaping(self):
qs = Interstate.objects.annotate(
d=Distance(
@ -448,10 +445,7 @@ class DistanceFunctionsTests(FuncTestMixin, TestCase):
with self.assertRaisesMessage(TypeError, msg):
qs.exists()
@unittest.skipUnless(
connection.vendor == 'oracle',
'Oracle supports tolerance parameter.',
)
@skipUnlessDBFeature('supports_tolerance_parameter')
def test_distance_function_tolerance(self):
# Tolerance is greater than distance.
qs = Interstate.objects.annotate(

View File

@ -607,10 +607,7 @@ class GeoQuerySetTest(TestCase):
), True)
self.assertIn('subquery', ctx.captured_queries[0]['sql'])
@unittest.skipUnless(
connection.vendor == 'oracle',
'Oracle supports tolerance parameter.',
)
@skipUnlessDBFeature('supports_tolerance_parameter')
def test_unionagg_tolerance(self):
City.objects.create(
point=fromstr('POINT(-96.467222 32.751389)', srid=4326),
@ -633,10 +630,7 @@ class GeoQuerySetTest(TestCase):
True,
)
@unittest.skipUnless(
connection.vendor == 'oracle',
'Oracle supports tolerance parameter.',
)
@skipUnlessDBFeature('supports_tolerance_parameter')
def test_unionagg_tolerance_escaping(self):
tx = Country.objects.get(name='Texas').mpoly
with self.assertRaises(DatabaseError):