Fixed #8597 -- Allow the use of strings containing underscores and percentage
signs in "iexact" queries on PostgreSQL again (this case was missed in [8536]). git-svn-id: http://code.djangoproject.com/svn/django/trunk@8646 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
f749b84824
commit
71dda19184
|
@ -301,6 +301,10 @@ class BaseDatabaseOperations(object):
|
||||||
from django.utils.encoding import smart_unicode
|
from django.utils.encoding import smart_unicode
|
||||||
return smart_unicode(x).replace("\\", "\\\\").replace("%", "\%").replace("_", "\_")
|
return smart_unicode(x).replace("\\", "\\\\").replace("%", "\%").replace("_", "\_")
|
||||||
|
|
||||||
|
# Same as prep_for_like_query(), but called for "iexact" matches, which
|
||||||
|
# need not necessarily be implemented using "LIKE" in the backend.
|
||||||
|
prep_for_iexact_query = prep_for_like_query
|
||||||
|
|
||||||
def value_to_db_date(self, value):
|
def value_to_db_date(self, value):
|
||||||
"""
|
"""
|
||||||
Transform a date value to an object compatible with what is expected
|
Transform a date value to an object compatible with what is expected
|
||||||
|
|
|
@ -142,3 +142,5 @@ class DatabaseOperations(BaseDatabaseOperations):
|
||||||
def savepoint_rollback_sql(self, sid):
|
def savepoint_rollback_sql(self, sid):
|
||||||
return "ROLLBACK TO SAVEPOINT %s" % sid
|
return "ROLLBACK TO SAVEPOINT %s" % sid
|
||||||
|
|
||||||
|
def prep_for_iexact_query(self, x):
|
||||||
|
return x
|
||||||
|
|
|
@ -205,7 +205,7 @@ class Field(object):
|
||||||
elif lookup_type in ('contains', 'icontains'):
|
elif lookup_type in ('contains', 'icontains'):
|
||||||
return ["%%%s%%" % connection.ops.prep_for_like_query(value)]
|
return ["%%%s%%" % connection.ops.prep_for_like_query(value)]
|
||||||
elif lookup_type == 'iexact':
|
elif lookup_type == 'iexact':
|
||||||
return [connection.ops.prep_for_like_query(value)]
|
return [connection.ops.prep_for_iexact_query(value)]
|
||||||
elif lookup_type in ('startswith', 'istartswith'):
|
elif lookup_type in ('startswith', 'istartswith'):
|
||||||
return ["%s%%" % connection.ops.prep_for_like_query(value)]
|
return ["%s%%" % connection.ops.prep_for_like_query(value)]
|
||||||
elif lookup_type in ('endswith', 'iendswith'):
|
elif lookup_type in ('endswith', 'iendswith'):
|
||||||
|
|
|
@ -901,6 +901,18 @@ Pickling of DateQuerySets used to fail
|
||||||
>>> qs = Item.objects.dates('created', 'month')
|
>>> qs = Item.objects.dates('created', 'month')
|
||||||
>>> _ = pickle.loads(pickle.dumps(qs))
|
>>> _ = pickle.loads(pickle.dumps(qs))
|
||||||
|
|
||||||
|
Bug #8597: regression tests for case-insensitive comparisons
|
||||||
|
>>> _ = Item.objects.create(name="a_b", created=datetime.datetime.now(), creator=a2, note=n1)
|
||||||
|
>>> _ = Item.objects.create(name="x%y", created=datetime.datetime.now(), creator=a2, note=n1)
|
||||||
|
>>> Item.objects.filter(name__iexact="A_b")
|
||||||
|
[<Item: a_b>]
|
||||||
|
>>> Item.objects.filter(name__iexact="x%Y")
|
||||||
|
[<Item: x%y>]
|
||||||
|
>>> Item.objects.filter(name__istartswith="A_b")
|
||||||
|
[<Item: a_b>]
|
||||||
|
>>> Item.objects.filter(name__iendswith="A_b")
|
||||||
|
[<Item: a_b>]
|
||||||
|
|
||||||
"""}
|
"""}
|
||||||
|
|
||||||
# In Python 2.3 and the Python 2.6 beta releases, exceptions raised in __len__
|
# In Python 2.3 and the Python 2.6 beta releases, exceptions raised in __len__
|
||||||
|
|
Loading…
Reference in New Issue