summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2020-11-30 01:29:00 -0500
committerGitHub <noreply@github.com>2020-11-30 07:29:00 +0100
commit371022a20dba6ca12297e6f8bae4effe00bd5c50 (patch)
tree5e39e017657f70020e76f8091d3d2cf81c2d6ca2
parent3828427f634e1880467689e4cf0f8ffee95f0d05 (diff)
Added SpatialFeatures.supports_tolerance_parameter.
-rw-r--r--django/contrib/gis/db/backends/base/features.py3
-rw-r--r--django/contrib/gis/db/backends/oracle/features.py1
-rw-r--r--tests/gis_tests/distapp/tests.py10
-rw-r--r--tests/gis_tests/geoapp/tests.py10
4 files changed, 8 insertions, 16 deletions
diff --git a/django/contrib/gis/db/backends/base/features.py b/django/contrib/gis/db/backends/base/features.py
index a88ad03684..9d1c1b04da 100644
--- a/django/contrib/gis/db/backends/base/features.py
+++ b/django/contrib/gis/db/backends/base/features.py
@@ -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 = {}
diff --git a/django/contrib/gis/db/backends/oracle/features.py b/django/contrib/gis/db/backends/oracle/features.py
index 80c71e0dcb..c458eb33c6 100644
--- a/django/contrib/gis/db/backends/oracle/features.py
+++ b/django/contrib/gis/db/backends/oracle/features.py
@@ -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'}
diff --git a/tests/gis_tests/distapp/tests.py b/tests/gis_tests/distapp/tests.py
index dbf8c4b6fd..10a0f99efc 100644
--- a/tests/gis_tests/distapp/tests.py
+++ b/tests/gis_tests/distapp/tests.py
@@ -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(
diff --git a/tests/gis_tests/geoapp/tests.py b/tests/gis_tests/geoapp/tests.py
index 607db43d4a..350bd04629 100644
--- a/tests/gis_tests/geoapp/tests.py
+++ b/tests/gis_tests/geoapp/tests.py
@@ -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):