Commit e0d68084 authored by Alex Gaynor's avatar Alex Gaynor
Browse files

[1.2.X] Fixed #14700 -- ensure that a raw query is only executed once per...

[1.2.X] Fixed #14700 -- ensure that a raw query is only executed once per iteration.  Backport of [14785].

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14786 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 99b5526c
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -1398,9 +1398,13 @@ class RawQuerySet(object):

        # Cache some things for performance reasons outside the loop.
        db = self.db
        compiler = connections[db].ops.compiler('SQLCompiler')(self.query, connections[db], db)
        compiler = connections[db].ops.compiler('SQLCompiler')(
            self.query, connections[db], db
        )
        need_resolv_columns = hasattr(compiler, 'resolve_columns')

        query = iter(self.query)

        # Find out which columns are model's fields, and which ones should be
        # annotated to the model.
        for pos, column in enumerate(self.columns):
@@ -1429,7 +1433,7 @@ class RawQuerySet(object):
        if need_resolv_columns:
            fields = [self.model_fields.get(c, None) for c in self.columns]
        # Begin looping through the query values.
        for values in self.query:
        for values in query:
            if need_resolv_columns:
                values = compiler.resolve_columns(values, fields)
            # Associate fields to values
+5 −0
Original line number Diff line number Diff line
@@ -217,3 +217,8 @@ class RawQueryTests(TestCase):
        self.assertEqual(
            [o.pk for o in FriendlyAuthor.objects.raw(query)], [f.pk]
        )

    def test_query_count(self):
        self.assertNumQueries(1,
            list, Author.objects.raw("SELECT * FROM raw_query_author")
        )