summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRamiro Morales <cramm0@gmail.com>2012-02-29 17:46:23 +0000
committerRamiro Morales <cramm0@gmail.com>2012-02-29 17:46:23 +0000
commitae640e5ea08809f56be20957895a61168dbfaeca (patch)
tree074a9f347cea72aa6b8a8cbae8c7e29b1f375ba1
parentc471cfd67425a6394a6f91bf6e71573e8f482850 (diff)
Fixed #17796 -- Rolled back [17588] because the fix for the original relatively
corner case (boolean fields under MySQL spatial backend) had a wider scope with potentially unintended consequences affecting the main MySQL backend and the required changes wouldn't be appropiate at this point of the 1.4 development cycle. Refs #15169. git-svn-id: http://code.djangoproject.com/svn/django/trunk@17603 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/gis/db/backends/mysql/compiler.py22
-rw-r--r--django/contrib/gis/db/backends/mysql/operations.py2
-rw-r--r--django/contrib/gis/db/models/sql/compiler.py7
-rw-r--r--django/contrib/gis/db/models/sql/query.py4
-rw-r--r--django/contrib/gis/tests/geoapp/models.py4
-rw-r--r--django/contrib/gis/tests/geoapp/test_regress.py10
-rw-r--r--django/db/backends/mysql/base.py6
-rw-r--r--django/db/backends/mysql/compiler.py5
8 files changed, 11 insertions, 49 deletions
diff --git a/django/contrib/gis/db/backends/mysql/compiler.py b/django/contrib/gis/db/backends/mysql/compiler.py
deleted file mode 100644
index 4d2d78a81d..0000000000
--- a/django/contrib/gis/db/backends/mysql/compiler.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from django.contrib.gis.db.models.sql.compiler import GeoSQLCompiler as BaseGeoSQLCompiler
-from django.db.backends.mysql import compiler
-
-SQLCompiler = compiler.SQLCompiler
-
-class GeoSQLCompiler(BaseGeoSQLCompiler, SQLCompiler):
- pass
-
-class SQLInsertCompiler(compiler.SQLInsertCompiler, GeoSQLCompiler):
- pass
-
-class SQLDeleteCompiler(compiler.SQLDeleteCompiler, GeoSQLCompiler):
- pass
-
-class SQLUpdateCompiler(compiler.SQLUpdateCompiler, GeoSQLCompiler):
- pass
-
-class SQLAggregateCompiler(compiler.SQLAggregateCompiler, GeoSQLCompiler):
- pass
-
-class SQLDateCompiler(compiler.SQLDateCompiler, GeoSQLCompiler):
- pass
diff --git a/django/contrib/gis/db/backends/mysql/operations.py b/django/contrib/gis/db/backends/mysql/operations.py
index c0e5aa6691..1653636dd4 100644
--- a/django/contrib/gis/db/backends/mysql/operations.py
+++ b/django/contrib/gis/db/backends/mysql/operations.py
@@ -5,7 +5,7 @@ from django.contrib.gis.db.backends.base import BaseSpatialOperations
class MySQLOperations(DatabaseOperations, BaseSpatialOperations):
- compiler_module = 'django.contrib.gis.db.backends.mysql.compiler'
+ compiler_module = 'django.contrib.gis.db.models.sql.compiler'
mysql = True
name = 'mysql'
select = 'AsText(%s)'
diff --git a/django/contrib/gis/db/models/sql/compiler.py b/django/contrib/gis/db/models/sql/compiler.py
index 93590256b4..07eea32b69 100644
--- a/django/contrib/gis/db/models/sql/compiler.py
+++ b/django/contrib/gis/db/models/sql/compiler.py
@@ -185,10 +185,9 @@ class GeoSQLCompiler(compiler.SQLCompiler):
self.query.extra_select_fields.get(a, None),
self.connection)
for v, a in izip(row[rn_offset:index_start], aliases)]
-
- if self.connection.ops.oracle or self.connection.ops.mysql or getattr(self.query, 'geo_values', False):
- # We resolve the rest of the columns if we're on MySQL, Oracle or
- # if the `geo_values` attribute is defined.
+ if self.connection.ops.oracle or getattr(self.query, 'geo_values', False):
+ # We resolve the rest of the columns if we're on Oracle or if
+ # the `geo_values` attribute is defined.
for value, field in map(None, row[index_start:], fields):
values.append(self.query.convert_values(value, field, self.connection))
else:
diff --git a/django/contrib/gis/db/models/sql/query.py b/django/contrib/gis/db/models/sql/query.py
index 25c0376996..c300dcd527 100644
--- a/django/contrib/gis/db/models/sql/query.py
+++ b/django/contrib/gis/db/models/sql/query.py
@@ -56,8 +56,8 @@ class GeoQuery(sql.Query):
extra selection objects into Geometry and Distance objects.
TODO: Make converted objects 'lazy' for less overhead.
"""
- if connection.ops.oracle or connection.ops.mysql:
- # On MySQL and Oracle, call their version of `convert_values` first.
+ if connection.ops.oracle:
+ # Running through Oracle's first.
value = super(GeoQuery, self).convert_values(value, field or GeomField(), connection)
if value is None:
diff --git a/django/contrib/gis/tests/geoapp/models.py b/django/contrib/gis/tests/geoapp/models.py
index 79061e1cfc..1ac830953a 100644
--- a/django/contrib/gis/tests/geoapp/models.py
+++ b/django/contrib/gis/tests/geoapp/models.py
@@ -34,10 +34,6 @@ class Track(models.Model):
objects = models.GeoManager()
def __unicode__(self): return self.name
-class Truth(models.Model):
- val = models.BooleanField()
- objects = models.GeoManager()
-
if not spatialite:
class Feature(models.Model):
name = models.CharField(max_length=20)
diff --git a/django/contrib/gis/tests/geoapp/test_regress.py b/django/contrib/gis/tests/geoapp/test_regress.py
index c9a2d83625..1e68440286 100644
--- a/django/contrib/gis/tests/geoapp/test_regress.py
+++ b/django/contrib/gis/tests/geoapp/test_regress.py
@@ -7,7 +7,7 @@ from django.contrib.gis.shortcuts import render_to_kmz
from django.db.models import Count
from django.test import TestCase
-from .models import City, PennsylvaniaCity, State, Truth
+from .models import City, PennsylvaniaCity, State
class GeoRegressionTests(TestCase):
@@ -64,11 +64,3 @@ class GeoRegressionTests(TestCase):
"Regression for #16409 - make sure defer() and only() work with annotate()"
self.assertIsInstance(list(City.objects.annotate(Count('point')).defer('name')), list)
self.assertIsInstance(list(City.objects.annotate(Count('point')).only('name')), list)
-
- def test04_boolean_conversion(self):
- "Testing Boolean value conversion with the spatial backend, see #15169."
- t1 = Truth.objects.create(val=True)
- t2 = Truth.objects.create(val=False)
-
- self.assertTrue(Truth.objects.get(pk=1).val is True)
- self.assertTrue(Truth.objects.get(pk=2).val is False)
diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py
index 5ad7b893e8..e30cb90a93 100644
--- a/django/db/backends/mysql/base.py
+++ b/django/db/backends/mysql/base.py
@@ -190,12 +190,6 @@ class DatabaseFeatures(BaseDatabaseFeatures):
class DatabaseOperations(BaseDatabaseOperations):
compiler_module = "django.db.backends.mysql.compiler"
- def convert_values(self, value, field):
- if (field and field.get_internal_type() in ("BooleanField", "NullBooleanField") and
- value in (0, 1)):
- value = bool(value)
- return value
-
def date_extract_sql(self, lookup_type, field_name):
# http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html
if lookup_type == 'week_day':
diff --git a/django/db/backends/mysql/compiler.py b/django/db/backends/mysql/compiler.py
index 3fd536c0c6..bd4105ff8e 100644
--- a/django/db/backends/mysql/compiler.py
+++ b/django/db/backends/mysql/compiler.py
@@ -5,7 +5,10 @@ class SQLCompiler(compiler.SQLCompiler):
values = []
index_extra_select = len(self.query.extra_select.keys())
for value, field in map(None, row[index_extra_select:], fields):
- values.append(self.query.convert_values(value, field, connection=self.connection))
+ if (field and field.get_internal_type() in ("BooleanField", "NullBooleanField") and
+ value in (0, 1)):
+ value = bool(value)
+ values.append(value)
return row[:index_extra_select] + tuple(values)
class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler):