diff options
| author | Tim Graham <timograham@gmail.com> | 2016-05-31 11:31:51 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-05-31 11:31:51 -0400 |
| commit | 47f22e828618581ecd4203d369a939fdfcff3a8b (patch) | |
| tree | cb333cad44548b7d28db6f35180442ee067104b0 /django | |
| parent | 62e4f8ec435a4b600c8efb071201070a2443477e (diff) | |
Fixed #25645 -- Dropped support for SpatiaLite < 4.0.
Diffstat (limited to 'django')
3 files changed, 9 insertions, 30 deletions
diff --git a/django/contrib/gis/db/backends/spatialite/introspection.py b/django/contrib/gis/db/backends/spatialite/introspection.py index 4222c04f8b..6847b28ff3 100644 --- a/django/contrib/gis/db/backends/spatialite/introspection.py +++ b/django/contrib/gis/db/backends/spatialite/introspection.py @@ -29,10 +29,9 @@ class SpatiaLiteIntrospection(DatabaseIntrospection): cursor = self.connection.cursor() try: # Querying the `geometry_columns` table to get additional metadata. - type_col = 'type' if self.connection.ops.spatial_version < (4, 0, 0) else 'geometry_type' - cursor.execute('SELECT coord_dimension, srid, %s ' + cursor.execute('SELECT coord_dimension, srid, geometry_type ' 'FROM geometry_columns ' - 'WHERE f_table_name=%%s AND f_geometry_column=%%s' % type_col, + 'WHERE f_table_name=%s AND f_geometry_column=%s', (table_name, geo_col)) row = cursor.fetchone() if not row: diff --git a/django/contrib/gis/db/backends/spatialite/models.py b/django/contrib/gis/db/backends/spatialite/models.py index d1b58b7582..9f60add880 100644 --- a/django/contrib/gis/db/backends/spatialite/models.py +++ b/django/contrib/gis/db/backends/spatialite/models.py @@ -2,9 +2,7 @@ The GeometryColumns and SpatialRefSys models for the SpatiaLite backend. """ from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin -from django.contrib.gis.db.backends.spatialite.base import DatabaseWrapper -from django.db import connection, models -from django.db.backends.signals import connection_created +from django.db import models from django.utils.encoding import python_2_unicode_compatible @@ -18,6 +16,7 @@ class SpatialiteGeometryColumns(models.Model): coord_dimension = models.IntegerField() srid = models.IntegerField(primary_key=True) spatial_index_enabled = models.IntegerField() + type = models.IntegerField(db_column='geometry_type') class Meta: app_label = 'gis' @@ -55,6 +54,7 @@ class SpatialiteSpatialRefSys(models.Model, SpatialRefSysMixin): auth_srid = models.IntegerField() ref_sys_name = models.CharField(max_length=256) proj4text = models.CharField(max_length=2048) + srtext = models.CharField(max_length=2048) @property def wkt(self): @@ -67,18 +67,3 @@ class SpatialiteSpatialRefSys(models.Model, SpatialRefSysMixin): app_label = 'gis' db_table = 'spatial_ref_sys' managed = False - - -def add_spatial_version_related_fields(sender, **kwargs): - """ - Adds fields after establishing a database connection to prevent database - operations at compile time. - """ - if connection_created.disconnect(add_spatial_version_related_fields, sender=DatabaseWrapper): - spatial_version = connection.ops.spatial_version[0] - if spatial_version >= 4: - SpatialiteSpatialRefSys.add_to_class('srtext', models.CharField(max_length=2048)) - SpatialiteGeometryColumns.add_to_class('type', models.IntegerField(db_column='geometry_type')) - else: - SpatialiteGeometryColumns.add_to_class('type', models.CharField(max_length=30)) -connection_created.connect(add_spatial_version_related_fields, sender=DatabaseWrapper) diff --git a/django/contrib/gis/db/backends/spatialite/operations.py b/django/contrib/gis/db/backends/spatialite/operations.py index f2f516109a..173b1ca590 100644 --- a/django/contrib/gis/db/backends/spatialite/operations.py +++ b/django/contrib/gis/db/backends/spatialite/operations.py @@ -1,6 +1,5 @@ """ SQL functions reference lists: -http://www.gaia-gis.it/spatialite-3.0.0-BETA/spatialite-sql-3.0.0.html https://web.archive.org/web/20130407175746/http://www.gaia-gis.it/gaia-sins/spatialite-sql-4.0.0.html http://www.gaia-gis.it/gaia-sins/spatialite-sql-4.2.1.html """ @@ -90,18 +89,14 @@ class SpatiaLiteOperations(BaseSpatialOperations, DatabaseOperations): 'Length': 'ST_Length', 'Reverse': 'ST_Reverse', 'Scale': 'ScaleCoords', - 'Translate': 'ST_Translate' if self.spatial_version >= (3, 1, 0) else 'ShiftCoords', + 'Translate': 'ST_Translate', 'Union': 'ST_Union', } @cached_property def unsupported_functions(self): unsupported = {'BoundingCircle', 'ForceRHR', 'IsValid', 'MakeValid', 'MemSize'} - if self.spatial_version < (3, 1, 0): - unsupported.add('SnapToGrid') - if self.spatial_version < (4, 0, 0): - unsupported.update({'Perimeter', 'Reverse'}) - elif not self.lwgeom_version(): + if not self.lwgeom_version(): unsupported.add('GeoHash') return unsupported @@ -116,8 +111,8 @@ class SpatiaLiteOperations(BaseSpatialOperations, DatabaseOperations): 'database (error was "%s"). Was the SpatiaLite initialization ' 'SQL loaded on this database?') % (self.connection.settings_dict['NAME'], msg) six.reraise(ImproperlyConfigured, ImproperlyConfigured(new_msg), sys.exc_info()[2]) - if version < (3, 0, 0): - raise ImproperlyConfigured('GeoDjango only supports SpatiaLite versions 3.0.0 and above.') + if version < (4, 0, 0): + raise ImproperlyConfigured('GeoDjango only supports SpatiaLite versions 4.0.0 and above.') return version def convert_extent(self, box, srid): |
