summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/backends/mysql/compiler.py6
-rw-r--r--tests/regressiontests/model_fields/models.py1
-rw-r--r--tests/regressiontests/model_fields/tests.py7
3 files changed, 11 insertions, 3 deletions
diff --git a/django/db/backends/mysql/compiler.py b/django/db/backends/mysql/compiler.py
index 07832f27f0..bd4105ff8e 100644
--- a/django/db/backends/mysql/compiler.py
+++ b/django/db/backends/mysql/compiler.py
@@ -3,13 +3,13 @@ from django.db.models.sql import compiler
class SQLCompiler(compiler.SQLCompiler):
def resolve_columns(self, row, fields=()):
values = []
- for value, field in map(None, row, fields):
+ index_extra_select = len(self.query.extra_select.keys())
+ for value, field in map(None, row[index_extra_select:], fields):
if (field and field.get_internal_type() in ("BooleanField", "NullBooleanField") and
value in (0, 1)):
value = bool(value)
values.append(value)
- return tuple(values)
-
+ return row[:index_extra_select] + tuple(values)
class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler):
pass
diff --git a/tests/regressiontests/model_fields/models.py b/tests/regressiontests/model_fields/models.py
index 5e480aa9a5..72c7beb014 100644
--- a/tests/regressiontests/model_fields/models.py
+++ b/tests/regressiontests/model_fields/models.py
@@ -69,6 +69,7 @@ class NullBooleanModel(models.Model):
class BooleanModel(models.Model):
bfield = models.BooleanField()
+ string = models.CharField(max_length=10, default='abc')
###############################################################################
# ImageField
diff --git a/tests/regressiontests/model_fields/tests.py b/tests/regressiontests/model_fields/tests.py
index 05b710d885..f0704ff941 100644
--- a/tests/regressiontests/model_fields/tests.py
+++ b/tests/regressiontests/model_fields/tests.py
@@ -191,6 +191,13 @@ class BooleanFieldTests(unittest.TestCase):
self.assertTrue(isinstance(b4.nbfield, bool))
self.assertEqual(b4.nbfield, False)
+ # http://code.djangoproject.com/ticket/13293
+ # Verify that when an extra clause exists, the boolean
+ # conversions are applied with an offset
+ b5 = BooleanModel.objects.all().extra(
+ select={'string_length': 'LENGTH(string)'})[0]
+ self.assertFalse(isinstance(b5.pk, bool))
+
class ChoicesTests(django.test.TestCase):
def test_choices_and_field_display(self):
"""