summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorSergey Fedoseev <fedoseev.sergey@gmail.com>2016-12-14 15:44:23 +0500
committerTim Graham <timograham@gmail.com>2016-12-15 14:16:09 -0500
commit38a6df555f285cc4f1732467c4cf0617a2050124 (patch)
treeac8351bf7c2a57d51688140fea5e14cc3ba596a2 /django
parent5a23cc00f535a045db6d9c04c3c14594ee23fbec (diff)
Fixed #27602 -- Added Oracle support for BoundingCircle GIS function.
Diffstat (limited to 'django')
-rw-r--r--django/contrib/gis/db/backends/oracle/operations.py16
-rw-r--r--django/contrib/gis/db/models/functions.py7
2 files changed, 17 insertions, 6 deletions
diff --git a/django/contrib/gis/db/backends/oracle/operations.py b/django/contrib/gis/db/backends/oracle/operations.py
index 0680a8d0af..013ffa74f6 100644
--- a/django/contrib/gis/db/backends/oracle/operations.py
+++ b/django/contrib/gis/db/backends/oracle/operations.py
@@ -18,6 +18,7 @@ from django.contrib.gis.geometry.backend import Geometry
from django.contrib.gis.measure import Distance
from django.db.backends.oracle.operations import DatabaseOperations
from django.utils import six
+from django.utils.functional import cached_property
DEFAULT_TOLERANCE = '0.05'
@@ -85,6 +86,7 @@ class OracleOperations(BaseSpatialOperations, DatabaseOperations):
function_names = {
'Area': 'SDO_GEOM.SDO_AREA',
+ 'BoundingCircle': 'SDO_GEOM.SDO_MBC',
'Centroid': 'SDO_GEOM.SDO_CENTROID',
'Difference': 'SDO_GEOM.SDO_DIFFERENCE',
'Distance': 'SDO_GEOM.SDO_DISTANCE',
@@ -131,11 +133,15 @@ class OracleOperations(BaseSpatialOperations, DatabaseOperations):
truncate_params = {'relate': None}
- unsupported_functions = {
- 'AsGeoJSON', 'AsKML', 'AsSVG', 'BoundingCircle', 'Envelope',
- 'ForceRHR', 'GeoHash', 'MakeValid', 'MemSize', 'Scale',
- 'SnapToGrid', 'Translate',
- }
+ @cached_property
+ def unsupported_functions(self):
+ unsupported = {
+ 'AsGeoJSON', 'AsKML', 'AsSVG', 'Envelope', 'ForceRHR', 'GeoHash',
+ 'MakeValid', 'MemSize', 'Scale', 'SnapToGrid', 'Translate',
+ }
+ if self.connection.oracle_full_version < '12.1.0.2':
+ unsupported.add('BoundingCircle')
+ return unsupported
def geo_quote_name(self, name):
return super(OracleOperations, self).geo_quote_name(name).upper()
diff --git a/django/contrib/gis/db/models/functions.py b/django/contrib/gis/db/models/functions.py
index b404397f95..dea042493a 100644
--- a/django/contrib/gis/db/models/functions.py
+++ b/django/contrib/gis/db/models/functions.py
@@ -201,10 +201,15 @@ class AsSVG(GeoFunc):
super(AsSVG, self).__init__(*expressions, **extra)
-class BoundingCircle(GeoFunc):
+class BoundingCircle(OracleToleranceMixin, GeoFunc):
def __init__(self, expression, num_seg=48, **extra):
super(BoundingCircle, self).__init__(*[expression, num_seg], **extra)
+ def as_oracle(self, compiler, connection):
+ clone = self.copy()
+ clone.set_source_expressions([self.get_source_expressions()[0]])
+ return super(BoundingCircle, clone).as_oracle(compiler, connection)
+
class Centroid(OracleToleranceMixin, GeoFunc):
arity = 1