diff options
| author | Russell Keith-Magee <russell@keith-magee.com> | 2010-04-09 12:39:08 +0000 |
|---|---|---|
| committer | Russell Keith-Magee <russell@keith-magee.com> | 2010-04-09 12:39:08 +0000 |
| commit | e9bbdb39de3047761fa8d03d5241eccd571093ff (patch) | |
| tree | ea5a37276a396584f453704da648cfe8799ccf4b | |
| parent | 056c940f0d723eb66fc06b43c28a743c84d54b3b (diff) | |
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
| -rw-r--r-- | django/db/backends/mysql/compiler.py | 6 | ||||
| -rw-r--r-- | tests/regressiontests/model_fields/models.py | 1 | ||||
| -rw-r--r-- | tests/regressiontests/model_fields/tests.py | 7 |
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): """ |
