[1.8.x] Fixes #24169 -- More arrayfield specific lookups.
varchar()[] cannot compare itself to text[]
Thanks to joelburton for the patch.
Backport of 0ae94d0d31
from master
This commit is contained in:
parent
504cd5d3be
commit
c80b2144d2
|
@ -158,8 +158,20 @@ class ArrayContains(lookups.DataContains):
|
||||||
return sql, params
|
return sql, params
|
||||||
|
|
||||||
|
|
||||||
ArrayField.register_lookup(lookups.ContainedBy)
|
@ArrayField.register_lookup
|
||||||
ArrayField.register_lookup(lookups.Overlap)
|
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
|
@ArrayField.register_lookup
|
||||||
|
|
|
@ -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):
|
def test_index(self):
|
||||||
self.assertSequenceEqual(
|
self.assertSequenceEqual(
|
||||||
NullableIntegerArrayModel.objects.filter(field__0=2),
|
NullableIntegerArrayModel.objects.filter(field__0=2),
|
||||||
|
|
Loading…
Reference in New Issue