Loading
Issue #3508437: Fix the "is none of" and "is all of" operators on base table columns
ManyToOne expresses every operator through joins, because it is written for values kept in a separate multi-value table. The module also puts the filter on entity id columns of base and data tables, and on id columns Views exposes through a relationship. There the column sits in the row the view already selects, so getJoin() returns NULL and ManyToOneHelper dereferences it: 'Attempt to assign property "type" on null'. Only "is one of" survives, because that branch checks the join for NULL.
Guarding the NULL is not enough. On a single-value column the join strategies degenerate: "is none of" reduces to "id IS NULL", which never matches, and "is all of" builds its condition from table aliases that are never created.
- Bypass the ManyToOne helper when the filtered column lies on the base table of the view or of the filter's relationship, and build plain conditions instead: IN, NOT IN combined with IS NULL so that a row without a value keeps matching "is none of" as it does through the join, and for "is all of" either IN on a single distinct value or an always false expression.
- Keep the join logic for field table columns, where one entity spans several rows and the operators do need it.
- Leave the Search API variant untouched by testing for the SQL query plugin.
- Add a kernel test and three test views covering both kinds of column, with and without a relationship, exposed and not.
Closes #3508437