summaryrefslogtreecommitdiff
path: root/django/db/backends/sqlite3/operations.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/db/backends/sqlite3/operations.py')
-rw-r--r--django/db/backends/sqlite3/operations.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/django/db/backends/sqlite3/operations.py b/django/db/backends/sqlite3/operations.py
index 91d1a27f8a..1a4f4baa6c 100644
--- a/django/db/backends/sqlite3/operations.py
+++ b/django/db/backends/sqlite3/operations.py
@@ -107,6 +107,19 @@ class DatabaseOperations(BaseDatabaseOperations):
"""
Only for last_executed_query! Don't use this to execute SQL queries!
"""
+ # This function is limited both by SQLITE_LIMIT_VARIABLE_NUMBER (the
+ # number of paramters, default = 999) and SQLITE_MAX_COLUMN (the
+ # number of return values, default = 2000). Since Python's sqlite3
+ # module doesn't expose the get_limit() C API, assume the default
+ # limits are in effect and split the work in batches if needed.
+ BATCH_SIZE = 999
+ if len(params) > BATCH_SIZE:
+ results = ()
+ for index in range(0, len(params), BATCH_SIZE):
+ chunk = params[index:index + BATCH_SIZE]
+ results += self._quote_params_for_last_executed_query(chunk)
+ return results
+
sql = 'SELECT ' + ', '.join(['QUOTE(?)'] * len(params))
# Bypass Django's wrappers and use the underlying sqlite3 connection
# to avoid logging this query - it would trigger infinite recursion.