Commit 0ae94d0d authored by Marc Tamlyn's avatar Marc Tamlyn
Browse files

Fixes #24169 -- More arrayfield specific lookups.

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

Thanks to joelburton for the patch.
parent 61c102d0
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -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
+12 −0
Original line number Diff line number Diff line
@@ -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),