Permalink
Browse files

Fixed #8597 -- Allow the use of strings containing underscores and pe…

…rcentage

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
  • Loading branch information...
1 parent f749b84 commit 71dda1918408a5b15d27c5b2cd28fddcd747449d @malcolmt malcolmt committed Aug 28, 2008
@@ -301,6 +301,10 @@ def prep_for_like_query(self, x):
from django.utils.encoding import smart_unicode
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):
"""
Transform a date value to an object compatible with what is expected
@@ -142,3 +142,5 @@ def savepoint_commit_sql(self, sid):
def savepoint_rollback_sql(self, sid):
return "ROLLBACK TO SAVEPOINT %s" % sid
+ def prep_for_iexact_query(self, x):
+ return x
@@ -205,7 +205,7 @@ def get_db_prep_lookup(self, lookup_type, value):
elif lookup_type in ('contains', 'icontains'):
return ["%%%s%%" % connection.ops.prep_for_like_query(value)]
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'):
return ["%s%%" % connection.ops.prep_for_like_query(value)]
elif lookup_type in ('endswith', 'iendswith'):
@@ -901,6 +901,18 @@ class Join(models.Model):
>>> qs = Item.objects.dates('created', 'month')
>>> _ = 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__

0 comments on commit 71dda19

Please sign in to comment.