summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Clark <amclark7@gmail.com>2013-06-26 01:07:18 -0700
committerTim Graham <timograham@gmail.com>2013-06-26 08:13:26 -0400
commit273dc550a4eccdad958541f456332312b3369504 (patch)
treed31272f7bc4e343a2e808e4961d73777d681694a
parentc6862d57c1e987f0f98a77826d19358b9040bad1 (diff)
Fixed #20462 -- null/non-string regex lookups are now consistent
Thanks to noirbizarre for the report and initial patch.
-rw-r--r--AUTHORS2
-rw-r--r--django/db/backends/postgresql_psycopg2/operations.py2
-rw-r--r--django/db/backends/sqlite3/base.py2
-rw-r--r--tests/lookup/tests.py15
4 files changed, 19 insertions, 2 deletions
diff --git a/AUTHORS b/AUTHORS
index 5fcdf833f0..ba1f4036e9 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -152,6 +152,7 @@ answer newbie questions, and generally made Django that much better:
Antonis Christofides <anthony@itia.ntua.gr>
Michal Chruszcz <troll@pld-linux.org>
Can Burak Çilingir <canburak@cs.bilgi.edu.tr>
+ Andrew Clark <amclark7@gmail.com>
Ian Clelland <clelland@gmail.com>
Travis Cline <travis.cline@gmail.com>
Russell Cloran <russell@rucus.net>
@@ -273,6 +274,7 @@ answer newbie questions, and generally made Django that much better:
Brian Harring <ferringb@gmail.com>
Brant Harris
Ronny Haryanto <http://ronny.haryan.to/>
+ Axel Haustant <noirbizarre@gmail.com>
Hawkeye
Kent Hauser <kent@khauser.net>
Joe Heck <http://www.rhonabwy.com/wp/>
diff --git a/django/db/backends/postgresql_psycopg2/operations.py b/django/db/backends/postgresql_psycopg2/operations.py
index f96757da8b..c5aab84693 100644
--- a/django/db/backends/postgresql_psycopg2/operations.py
+++ b/django/db/backends/postgresql_psycopg2/operations.py
@@ -69,7 +69,7 @@ class DatabaseOperations(BaseDatabaseOperations):
# Cast text lookups to text to allow things like filter(x__contains=4)
if lookup_type in ('iexact', 'contains', 'icontains', 'startswith',
- 'istartswith', 'endswith', 'iendswith'):
+ 'istartswith', 'endswith', 'iendswith', 'regex', 'iregex'):
lookup = "%s::text"
# Use UPPER(x) for case-insensitive lookups; it's faster.
diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py
index 18c4029649..b9caf8b99f 100644
--- a/django/db/backends/sqlite3/base.py
+++ b/django/db/backends/sqlite3/base.py
@@ -522,4 +522,4 @@ def _sqlite_format_dtdelta(dt, conn, days, secs, usecs):
return str(dt)
def _sqlite_regexp(re_pattern, re_string):
- return bool(re.search(re_pattern, re_string))
+ return bool(re.search(re_pattern, str(re_string))) if re_string is not None else False
diff --git a/tests/lookup/tests.py b/tests/lookup/tests.py
index de7105f92d..fe8a5fac64 100644
--- a/tests/lookup/tests.py
+++ b/tests/lookup/tests.py
@@ -610,6 +610,21 @@ class LookupTests(TestCase):
self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'b(.).*b\1'),
['<Article: barfoobaz>', '<Article: bazbaRFOO>', '<Article: foobarbaz>'])
+ def test_regex_null(self):
+ """
+ Ensure that a regex lookup does not fail on null/None values
+ """
+ Season.objects.create(year=2012, gt=None)
+ self.assertQuerysetEqual(Season.objects.filter(gt__regex=r'^$'), [])
+
+ def test_regex_non_string(self):
+ """
+ Ensure that a regex lookup does not fail on non-string fields
+ """
+ Season.objects.create(year=2013, gt=444)
+ self.assertQuerysetEqual(Season.objects.filter(gt__regex=r'^444$'),
+ ['<Season: 2013>'])
+
def test_nonfield_lookups(self):
"""
Ensure that a lookup query containing non-fields raises the proper