Fixes #24169 -- More arrayfield specific lookups.

varchar()[] cannot compare itself to text[]

Thanks to joelburton for the patch.
This commit is contained in:
Marc Tamlyn 2015-01-20 09:52:23 +00:00
parent 61c102d010
commit 0ae94d0d31
2 changed files with 26 additions and 2 deletions

View File

@ -158,8 +158,20 @@ class ArrayContains(lookups.DataContains):
return sql, params
ArrayField.register_lookup(lookups.ContainedBy)
ArrayField.register_lookup(lookups.Overlap)
@ArrayField.register_lookup
class ArrayContainedBy(lookups.ContainedBy):
def as_sql(self, qn, connection):
sql, params = super(ArrayContainedBy, self).as_sql(qn, connection)
sql += '::%s' % self.lhs.output_field.db_type(connection)
return sql, params
@ArrayField.register_lookup
class ArrayOverlap(lookups.Overlap):
def as_sql(self, qn, connection):
sql, params = super(ArrayOverlap, self).as_sql(qn, connection)
sql += '::%s' % self.lhs.output_field.db_type(connection)
return sql, params
@ArrayField.register_lookup

View File

@ -156,6 +156,18 @@ class TestQuerying(TestCase):
[]
)
def test_contained_by_charfield(self):
self.assertSequenceEqual(
CharArrayModel.objects.filter(field__contained_by=['text']),
[]
)
def test_overlap_charfield(self):
self.assertSequenceEqual(
CharArrayModel.objects.filter(field__overlap=['text']),
[]
)
def test_index(self):
self.assertSequenceEqual(
NullableIntegerArrayModel.objects.filter(field__0=2),