Fixed #13293 -- Corrected a problem with the MySQL handling of boolean return values when a query has an extra() clause. Thanks to mk for the report and draft patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12939 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
056c940f0d
commit
e9bbdb39de
|
@ -3,13 +3,13 @@ from django.db.models.sql import compiler
|
||||||
class SQLCompiler(compiler.SQLCompiler):
|
class SQLCompiler(compiler.SQLCompiler):
|
||||||
def resolve_columns(self, row, fields=()):
|
def resolve_columns(self, row, fields=()):
|
||||||
values = []
|
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
|
if (field and field.get_internal_type() in ("BooleanField", "NullBooleanField") and
|
||||||
value in (0, 1)):
|
value in (0, 1)):
|
||||||
value = bool(value)
|
value = bool(value)
|
||||||
values.append(value)
|
values.append(value)
|
||||||
return tuple(values)
|
return row[:index_extra_select] + tuple(values)
|
||||||
|
|
||||||
|
|
||||||
class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler):
|
class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler):
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -69,6 +69,7 @@ class NullBooleanModel(models.Model):
|
||||||
|
|
||||||
class BooleanModel(models.Model):
|
class BooleanModel(models.Model):
|
||||||
bfield = models.BooleanField()
|
bfield = models.BooleanField()
|
||||||
|
string = models.CharField(max_length=10, default='abc')
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# ImageField
|
# ImageField
|
||||||
|
|
|
@ -191,6 +191,13 @@ class BooleanFieldTests(unittest.TestCase):
|
||||||
self.assertTrue(isinstance(b4.nbfield, bool))
|
self.assertTrue(isinstance(b4.nbfield, bool))
|
||||||
self.assertEqual(b4.nbfield, False)
|
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):
|
class ChoicesTests(django.test.TestCase):
|
||||||
def test_choices_and_field_display(self):
|
def test_choices_and_field_display(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue