mirror of https://github.com/django/django.git
Fixed #10071 -- Changed some internal database data representations.
We now pass numbers used in data queries as actualy numbers (integers) to the database backends, rather than string forms. This is easier for some of the less flexible backeds. Based on a patch from Leo Soto and Ramiro Morales. git-svn-id: http://code.djangoproject.com/svn/django/trunk@10530 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
1aa0d1b4a6
commit
a584a6b40f
|
@ -27,9 +27,8 @@ class DatabaseOperations(BaseDatabaseOperations):
|
||||||
def date_extract_sql(self, lookup_type, field_name):
|
def date_extract_sql(self, lookup_type, field_name):
|
||||||
# http://www.postgresql.org/docs/8.0/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT
|
# http://www.postgresql.org/docs/8.0/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT
|
||||||
if lookup_type == 'week_day':
|
if lookup_type == 'week_day':
|
||||||
# Using EXTRACT(), PostgreSQL days are indexed as Sunday=0, Saturday=6.
|
# For consistency across backends, we return Sunday=1, Saturday=7.
|
||||||
# If we instead us TO_CHAR, they're indexed with Sunday=1, Saturday=7
|
return "EXTRACT('dow' FROM %s) + 1" % field_name
|
||||||
return "TO_CHAR(%s, 'D')" % field_name
|
|
||||||
else:
|
else:
|
||||||
return "EXTRACT('%s' FROM %s)" % (lookup_type, field_name)
|
return "EXTRACT('%s' FROM %s)" % (lookup_type, field_name)
|
||||||
|
|
||||||
|
|
|
@ -211,9 +211,9 @@ def _sqlite_extract(lookup_type, dt):
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
return None
|
return None
|
||||||
if lookup_type == 'week_day':
|
if lookup_type == 'week_day':
|
||||||
return unicode((dt.isoweekday() % 7) + 1)
|
return (dt.isoweekday() % 7) + 1
|
||||||
else:
|
else:
|
||||||
return unicode(getattr(dt, lookup_type))
|
return getattr(dt, lookup_type)
|
||||||
|
|
||||||
def _sqlite_date_trunc(lookup_type, dt):
|
def _sqlite_date_trunc(lookup_type, dt):
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -500,10 +500,10 @@ class DateField(Field):
|
||||||
curry(cls._get_next_or_previous_by_FIELD, field=self, is_next=False))
|
curry(cls._get_next_or_previous_by_FIELD, field=self, is_next=False))
|
||||||
|
|
||||||
def get_db_prep_lookup(self, lookup_type, value):
|
def get_db_prep_lookup(self, lookup_type, value):
|
||||||
# For "__month", "__day", and "__week_day" lookups, convert the value
|
# For "__month", "__day", and "__week_day" lookups, convert the value
|
||||||
# to a string so the database backend always sees a consistent type.
|
# to an int so the database backend always sees a consistent type.
|
||||||
if lookup_type in ('month', 'day', 'week_day'):
|
if lookup_type in ('month', 'day', 'week_day'):
|
||||||
return [force_unicode(value)]
|
return [int(value)]
|
||||||
return super(DateField, self).get_db_prep_lookup(lookup_type, value)
|
return super(DateField, self).get_db_prep_lookup(lookup_type, value)
|
||||||
|
|
||||||
def get_db_prep_value(self, value):
|
def get_db_prep_value(self, value):
|
||||||
|
|
Loading…
Reference in New Issue