diff options
| author | Sergey Fedoseev <fedoseev.sergey@gmail.com> | 2016-12-14 15:44:23 +0500 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-12-15 14:16:09 -0500 |
| commit | 38a6df555f285cc4f1732467c4cf0617a2050124 (patch) | |
| tree | ac8351bf7c2a57d51688140fea5e14cc3ba596a2 /django | |
| parent | 5a23cc00f535a045db6d9c04c3c14594ee23fbec (diff) | |
Fixed #27602 -- Added Oracle support for BoundingCircle GIS function.
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/gis/db/backends/oracle/operations.py | 16 | ||||
| -rw-r--r-- | django/contrib/gis/db/models/functions.py | 7 |
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 |
