Skip to content

Add the ARRAYS_OVERLAP() DQL function - #12713

Open
seb-jean wants to merge 2 commits into
doctrine:3.8.xfrom
seb-jean:arrays-overlap
Open

seb-jean wants to merge 2 commits into
doctrine:3.8.xfrom
seb-jean:arrays-overlap

Conversation

@seb-jean

Copy link
Copy Markdown
Contributor
Q A
Type feature
Fixed issues -

Summary

Adds the ARRAYS_OVERLAP() DQL function, like PostgreSQL's && operator, and Expr::arraysOverlap() for the query builder. The arrays are PostgreSQL arrays, or JSON arrays on the other platforms. Requires doctrine/dbal#7552.

$em->createQuery('SELECT a FROM Article a WHERE ARRAYS_OVERLAP(a.tags, :tags) = true');

The result is hydrated as a boolean.

DQL supports ARRAYS_OVERLAP(), which tests whether two arrays have an
element in common, like the && operator of PostgreSQL, whose SQL DBAL
generates for every platform: the arrays are PostgreSQL arrays, or JSON
arrays on the other platforms, as stored by the json type.

    SELECT a FROM Article a WHERE ARRAYS_OVERLAP(a.tags, :tags) = true

The function declares its return type, so that its result is hydrated
as a boolean, or NULL if an array is NULL. A custom function with the
same name keeps taking precedence, and the function fails with a
semantical error if the installed version of DBAL does not generate its
SQL.

The tests store the arrays with a type mapping them to TEXT[] on
PostgreSQL and to JSON on the other platforms.
It builds the ARRAYS_OVERLAP() function in the query builder.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant