summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gaynor <alex.gaynor@gmail.com>2010-12-03 20:25:59 +0000
committerAlex Gaynor <alex.gaynor@gmail.com>2010-12-03 20:25:59 +0000
commitd68598e0220908ca82cf98ba769e618404c010c8 (patch)
tree3f41977916224508f5961eced70e40a31ad5f5ec
parent5475da1c32efacab3d740bc599f19f2f33be6d2c (diff)
Fixed #14700 -- ensure that a raw query is only executed once per iteration.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@14785 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/models/query.py8
-rw-r--r--tests/modeltests/raw_query/tests.py5
2 files changed, 11 insertions, 2 deletions
diff --git a/django/db/models/query.py b/django/db/models/query.py
index deb138119c..2323c7d744 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -1310,9 +1310,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):
@@ -1341,7 +1345,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
diff --git a/tests/modeltests/raw_query/tests.py b/tests/modeltests/raw_query/tests.py
index a0325eff97..e7cadfae8c 100644
--- a/tests/modeltests/raw_query/tests.py
+++ b/tests/modeltests/raw_query/tests.py
@@ -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")
+ )