summaryrefslogtreecommitdiff
path: root/django/db/backends/sqlite3
diff options
context:
space:
mode:
authorMads Jensen <mje@inducks.org>2017-06-08 21:15:29 +0200
committerTim Graham <timograham@gmail.com>2017-06-08 15:15:29 -0400
commitc7f6ffbdcf9ca8df905aebf73336ef9905771f7c (patch)
tree002de0322ce05e2ead82fcf01265377f4ddf9065 /django/db/backends/sqlite3
parentf6bd00131e687aedf2719ad31e84b097562ca5f2 (diff)
Fixed #28103 -- Added quarter extract, truncation, and lookup.
Thanks Mariusz Felisiak, Tim Graham, and Adam Johnson for review.
Diffstat (limited to 'django/db/backends/sqlite3')
-rw-r--r--django/db/backends/sqlite3/base.py11
1 files changed, 11 insertions, 0 deletions
diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py
index 5892de92f8..faa8b16f1f 100644
--- a/django/db/backends/sqlite3/base.py
+++ b/django/db/backends/sqlite3/base.py
@@ -2,6 +2,7 @@
SQLite3 backend for the sqlite3 module in the standard library.
"""
import decimal
+import math
import re
import warnings
from sqlite3 import dbapi2 as Database
@@ -309,6 +310,8 @@ def _sqlite_date_extract(lookup_type, dt):
return (dt.isoweekday() % 7) + 1
elif lookup_type == 'week':
return dt.isocalendar()[1]
+ elif lookup_type == 'quarter':
+ return math.ceil(dt.month / 3)
else:
return getattr(dt, lookup_type)
@@ -320,6 +323,9 @@ def _sqlite_date_trunc(lookup_type, dt):
return None
if lookup_type == 'year':
return "%i-01-01" % dt.year
+ elif lookup_type == 'quarter':
+ month_in_quarter = dt.month - (dt.month - 1) % 3
+ return '%i-%02i-01' % (dt.year, month_in_quarter)
elif lookup_type == 'month':
return "%i-%02i-01" % (dt.year, dt.month)
elif lookup_type == 'day':
@@ -373,6 +379,8 @@ def _sqlite_datetime_extract(lookup_type, dt, tzname):
return (dt.isoweekday() % 7) + 1
elif lookup_type == 'week':
return dt.isocalendar()[1]
+ elif lookup_type == 'quarter':
+ return math.ceil(dt.month / 3)
else:
return getattr(dt, lookup_type)
@@ -383,6 +391,9 @@ def _sqlite_datetime_trunc(lookup_type, dt, tzname):
return None
if lookup_type == 'year':
return "%i-01-01 00:00:00" % dt.year
+ elif lookup_type == 'quarter':
+ month_in_quarter = dt.month - (dt.month - 1) % 3
+ return '%i-%02i-01 00:00:00' % (dt.year, month_in_quarter)
elif lookup_type == 'month':
return "%i-%02i-01 00:00:00" % (dt.year, dt.month)
elif lookup_type == 'day':