From 39c9372e525a270c7e572d4ad2f9cec0e7e45b60 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Fri, 10 Nov 2017 19:49:11 +0000 Subject: [PATCH] Iterate over the full resultset of execute_sql(result_type=MULTI) when filtering by __in with a subquery This ensures that it will work equivalently for lists (as returned when connection.features.can_use_chunked_reads is False) as for iterators, and means we don't need to worry about missing results if we ever receive a chunked resultset. --- wagtail/search/backends/elasticsearch2.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/wagtail/search/backends/elasticsearch2.py b/wagtail/search/backends/elasticsearch2.py index 67da9cc8d..2b9f688db 100644 --- a/wagtail/search/backends/elasticsearch2.py +++ b/wagtail/search/backends/elasticsearch2.py @@ -340,10 +340,8 @@ class Elasticsearch2SearchQuery(BaseSearchQuery): if lookup == 'in': if isinstance(value, Query): db_alias = self.queryset._db or DEFAULT_DB_ALIAS - value = next(value.get_compiler(db_alias) - .execute_sql(result_type=MULTI)) - - value = [r[0] for r in value] + resultset = value.get_compiler(db_alias).execute_sql(result_type=MULTI) + value = [row[0] for chunk in resultset for row in chunk] elif not isinstance(value, list): value = list(value)