diff options
author | Simon Charette <charette.s@gmail.com> | 2016-01-19 20:43:41 -0500 |
---|---|---|
committer | Simon Charette <charette.s@gmail.com> | 2016-02-26 12:25:12 -0500 |
commit | 766afc22a1dfa7d34a08de85356b7bc9dba025e7 (patch) | |
tree | b37eb872bed24bbaeafd7a57cd5f656b54dc47b8 /django/db/backends/mysql/operations.py | |
parent | 31098e3288595c13f165935f2579f1af744e5240 (diff) | |
download | django-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.py | 18 |
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 |