summaryrefslogtreecommitdiff
path: root/django/db/backends/mysql/operations.py
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2016-01-19 20:43:41 -0500
committerSimon Charette <charette.s@gmail.com>2016-02-26 12:25:12 -0500
commit766afc22a1dfa7d34a08de85356b7bc9dba025e7 (patch)
treeb37eb872bed24bbaeafd7a57cd5f656b54dc47b8 /django/db/backends/mysql/operations.py
parent31098e3288595c13f165935f2579f1af744e5240 (diff)
downloaddjango-766afc22a1dfa7d34a08de85356b7bc9dba025e7.tar.gz
Fixed #24793 -- Unified temporal difference support.
Diffstat (limited to 'django/db/backends/mysql/operations.py')
-rw-r--r--django/db/backends/mysql/operations.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/django/db/backends/mysql/operations.py b/django/db/backends/mysql/operations.py
index f81bf683b3..e71de6c4a2 100644
--- a/django/db/backends/mysql/operations.py
+++ b/django/db/backends/mysql/operations.py
@@ -210,3 +210,21 @@ class DatabaseOperations(BaseDatabaseOperations):
if value is not None:
value = uuid.UUID(value)
return value
+
+ def subtract_temporals(self, internal_type, lhs, rhs):
+ lhs_sql, lhs_params = lhs
+ rhs_sql, rhs_params = rhs
+ if self.connection.features.supports_microsecond_precision:
+ if internal_type == 'TimeField':
+ return (
+ "((TIME_TO_SEC(%(lhs)s) * POW(10, 6) + MICROSECOND(%(lhs)s)) -"
+ " (TIME_TO_SEC(%(rhs)s) * POW(10, 6) + MICROSECOND(%(rhs)s)))"
+ ) % {'lhs': lhs_sql, 'rhs': rhs_sql}, lhs_params * 2 + rhs_params * 2
+ else:
+ return "TIMESTAMPDIFF(MICROSECOND, %s, %s)" % (rhs_sql, lhs_sql), rhs_params + lhs_params
+ elif internal_type == 'TimeField':
+ return (
+ "(TIME_TO_SEC(%s) * POW(10, 6) - TIME_TO_SEC(%s) * POW(10, 6))"
+ ) % (lhs_sql, rhs_sql), lhs_params + rhs_params
+ else:
+ return "(TIMESTAMPDIFF(SECOND, %s, %s) * POW(10, 6))" % (rhs_sql, lhs_sql), rhs_params + lhs_params