mirror of
https://github.com/django/django.git
synced 2024-12-27 11:35:53 +00:00
Fixed #16481 -- Adapted one raw SQL query in cull immplementation of the database-based cache backend so it works with Oracle. Thanks Aymeric Augustin for the report and patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16635 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
cdd44dca45
commit
2d51abfeb5
8
django/core/cache/backends/db.py
vendored
8
django/core/cache/backends/db.py
vendored
@ -135,7 +135,13 @@ class DatabaseCache(BaseDatabaseCache):
|
|||||||
cursor.execute("SELECT COUNT(*) FROM %s" % table)
|
cursor.execute("SELECT COUNT(*) FROM %s" % table)
|
||||||
num = cursor.fetchone()[0]
|
num = cursor.fetchone()[0]
|
||||||
if num > self._max_entries:
|
if num > self._max_entries:
|
||||||
cursor.execute("SELECT cache_key FROM %s ORDER BY cache_key LIMIT 1 OFFSET %%s" % table, [num / self._cull_frequency])
|
cull_num = num / self._cull_frequency
|
||||||
|
if connections[db].vendor == 'oracle':
|
||||||
|
# Special case for Oracle because it doesn't support LIMIT + OFFSET
|
||||||
|
cursor.execute("SELECT cache_key FROM (SELECT ROW_NUMBER() OVER (ORDER BY cache_key) AS counter, cache_key FROM %s) WHERE counter > %%s AND COUNTER <= %%s" % table, [cull_num, cull_num + 1])
|
||||||
|
else:
|
||||||
|
# This isn't standard SQL, it's likely to break with some non officially supported databases
|
||||||
|
cursor.execute("SELECT cache_key FROM %s ORDER BY cache_key LIMIT 1 OFFSET %%s" % table, [cull_num])
|
||||||
cursor.execute("DELETE FROM %s WHERE cache_key < %%s" % table, [cursor.fetchone()[0]])
|
cursor.execute("DELETE FROM %s WHERE cache_key < %%s" % table, [cursor.fetchone()[0]])
|
||||||
|
|
||||||
def clear(self):
|
def clear(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user