Fixed #20462 - Fixed sqlite regex lookups for null values and non-string fields.

This commit is contained in:
Axel Haustant 2013-05-05 16:44:19 +02:00 committed by Tim Graham
parent 536703abf0
commit 64041f0e6e
4 changed files with 27 additions and 2 deletions

View File

@ -270,6 +270,7 @@ answer newbie questions, and generally made Django that much better:
Brian Harring <ferringb@gmail.com> Brian Harring <ferringb@gmail.com>
Brant Harris Brant Harris
Ronny Haryanto <http://ronny.haryan.to/> Ronny Haryanto <http://ronny.haryan.to/>
Axel Haustant <noirbizarre@gmail.com>
Hawkeye Hawkeye
Kent Hauser <kent@khauser.net> Kent Hauser <kent@khauser.net>
Joe Heck <http://www.rhonabwy.com/wp/> Joe Heck <http://www.rhonabwy.com/wp/>

View File

@ -519,4 +519,4 @@ def _sqlite_format_dtdelta(dt, conn, days, secs, usecs):
return str(dt) return str(dt)
def _sqlite_regexp(re_pattern, re_string): 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

View File

@ -57,3 +57,12 @@ class Player(models.Model):
def __str__(self): def __str__(self):
return self.name 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

View File

@ -6,7 +6,7 @@ from operator import attrgetter
from django.core.exceptions import FieldError from django.core.exceptions import FieldError
from django.test import TestCase, skipUnlessDBFeature 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): class LookupTests(TestCase):
@ -610,6 +610,21 @@ class LookupTests(TestCase):
self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'b(.).*b\1'), self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'b(.).*b\1'),
['<Article: barfoobaz>', '<Article: bazbaRFOO>', '<Article: foobarbaz>']) ['<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): def test_nonfield_lookups(self):
""" """
Ensure that a lookup query containing non-fields raises the proper Ensure that a lookup query containing non-fields raises the proper