diff options
| author | Axel Haustant <noirbizarre@gmail.com> | 2013-05-05 16:44:19 +0200 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2013-06-11 14:13:40 -0400 |
| commit | 64041f0e6e7a773574d7cde978d16305200004ea (patch) | |
| tree | d33478aca7876acc62b6df0995b3115f7f5b6797 | |
| parent | 536703abf029ac1b9c2ebcf6f82fb16da524bebe (diff) | |
Fixed #20462 - Fixed sqlite regex lookups for null values and non-string fields.
| -rw-r--r-- | AUTHORS | 1 | ||||
| -rw-r--r-- | django/db/backends/sqlite3/base.py | 2 | ||||
| -rw-r--r-- | tests/lookup/models.py | 9 | ||||
| -rw-r--r-- | tests/lookup/tests.py | 17 |
4 files changed, 27 insertions, 2 deletions
@@ -270,6 +270,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/sqlite3/base.py b/django/db/backends/sqlite3/base.py index a2d925ac3f..3808170f9e 100644 --- a/django/db/backends/sqlite3/base.py +++ b/django/db/backends/sqlite3/base.py @@ -519,4 +519,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/models.py b/tests/lookup/models.py index f388ddf403..af236cf56f 100644 --- a/tests/lookup/models.py +++ b/tests/lookup/models.py @@ -57,3 +57,12 @@ class Player(models.Model): def __str__(self): return self.name + + +@python_2_unicode_compatible +class RegexTestModel(models.Model): + name = models.CharField(max_length=100, null=True) + integer = models.IntegerField(null=True) + + def __str__(self): + return self.name diff --git a/tests/lookup/tests.py b/tests/lookup/tests.py index de7105f92d..5affac6b00 100644 --- a/tests/lookup/tests.py +++ b/tests/lookup/tests.py @@ -6,7 +6,7 @@ from operator import attrgetter from django.core.exceptions import FieldError from django.test import TestCase, skipUnlessDBFeature -from .models import Author, Article, Tag, Game, Season, Player +from .models import Author, Article, Tag, Game, Season, Player, RegexTestModel class LookupTests(TestCase): @@ -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 + """ + RegexTestModel.objects.create(name=None) + self.assertQuerysetEqual(RegexTestModel.objects.filter(name__regex=r'^$'), []) + + def test_regex_non_string(self): + """ + Ensure that a regex lookup does not fail on non-string fields + """ + RegexTestModel.objects.create(name='test', integer=5) + self.assertQuerysetEqual(RegexTestModel.objects.filter(integer__regex=r'^5$'), + ['<RegexTestModel: test>']) + def test_nonfield_lookups(self): """ Ensure that a lookup query containing non-fields raises the proper |
