From 02d40b93f826558c5ed299e502812ac88b7ede12 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Thu, 11 Feb 2010 12:26:34 +0000 Subject: [PATCH] Fixed #11483 -- Modified db cache backend to use db backend functions for date conversion, avoiding problems under Jython. Thanks to Leo Soto for the report and patch. git-svn-id: http://code.djangoproject.com/svn/django/trunk@12411 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/core/cache/backends/db.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/django/core/cache/backends/db.py b/django/core/cache/backends/db.py index 25cbe4d236..3398e6a85b 100644 --- a/django/core/cache/backends/db.py +++ b/django/core/cache/backends/db.py @@ -60,9 +60,11 @@ class CacheClass(BaseCache): result = cursor.fetchone() if result and (mode == 'set' or (mode == 'add' and result[1] < now)): - cursor.execute("UPDATE %s SET value = %%s, expires = %%s WHERE cache_key = %%s" % self._table, [encoded, str(exp), key]) + cursor.execute("UPDATE %s SET value = %%s, expires = %%s WHERE cache_key = %%s" % self._table, + [encoded, connection.ops.value_to_db_datetime(exp), key]) else: - cursor.execute("INSERT INTO %s (cache_key, value, expires) VALUES (%%s, %%s, %%s)" % self._table, [key, encoded, str(exp)]) + cursor.execute("INSERT INTO %s (cache_key, value, expires) VALUES (%%s, %%s, %%s)" % self._table, + [key, encoded, connection.ops.value_to_db_datetime(exp)]) except DatabaseError: # To be threadsafe, updates/inserts are allowed to fail silently transaction.rollback_unless_managed() @@ -79,14 +81,16 @@ class CacheClass(BaseCache): def has_key(self, key): now = datetime.now().replace(microsecond=0) cursor = connection.cursor() - cursor.execute("SELECT cache_key FROM %s WHERE cache_key = %%s and expires > %%s" % self._table, [key, now]) + cursor.execute("SELECT cache_key FROM %s WHERE cache_key = %%s and expires > %%s" % self._table, + [key, connection.ops.value_to_db_datetime(now)]) return cursor.fetchone() is not None def _cull(self, cursor, now): if self._cull_frequency == 0: self.clear() else: - cursor.execute("DELETE FROM %s WHERE expires < %%s" % self._table, [str(now)]) + cursor.execute("DELETE FROM %s WHERE expires < %%s" % self._table, + [connection.ops.value_to_db_datetime(now)]) cursor.execute("SELECT COUNT(*) FROM %s" % self._table) num = cursor.fetchone()[0] if num > self._max_entries: