Skip to content

Commit e4916e3

Browse files
committed
[#89] Support array element for array_contains
1 parent 149058d commit e4916e3

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

core/impl/src/main/java/com/blazebit/query/impl/calcite/function/ArrayContainsFunction.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public class ArrayContainsFunction implements ScalarFunction, ImplementableFunct
4141
private final Method decimalMethod;
4242
private final Method comparatorMethod;
4343
private final List<FunctionParameter> parameters = ImmutableList.of(
44-
new SimpleFunctionParameter(0, "array", Object.class, false),
44+
new SimpleFunctionParameter(0, "array", List.class, false),
4545
new SimpleFunctionParameter(1, "element", Object.class, false)
4646
);
4747

@@ -108,7 +108,18 @@ public Expression implement(RexToLixTranslator translator, RexCall call, RexImpT
108108
}
109109

110110
public static Boolean arrayContains(List<?> list, Object element) {
111-
return list == null ? null : list.contains(element);
111+
if (list == null) {
112+
return null;
113+
}
114+
if (element instanceof List<?> list2) {
115+
for (Object e : list2) {
116+
if (!list.contains(e)) {
117+
return false;
118+
}
119+
}
120+
return true;
121+
}
122+
return list.contains(element);
112123
}
113124

114125
public static Boolean arrayContains(List<BigDecimal> list, BigDecimal element) {

core/impl/src/test/java/com/blazebit/query/impl/EnumArrayTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public List<JiraCloudAdminUser> fetch(DataFetchContext context) {
5050
try (QueryContext queryContext = queryContextBuilder.build()) {
5151
try (QuerySession session = queryContext.createSession()) {
5252
TypedQuery<Object[]> query = session.createQuery(
53-
"select r = 'ADMIN', array_contains(u.platformRoles, 'ADMIN'), array_contains(u.aliases, 'ADMIN'), arrays_overlap(u.aliases, ?) " +
53+
"select r = 'ADMIN', array_contains(u.platformRoles, 'ADMIN'), array_contains(u.aliases, array['ADMIN', 'admin']), arrays_overlap(u.aliases, ?) " +
5454
"from JiraCloudAdminUser u " +
5555
"cross join unnest(u.platformRoles) r"
5656
).setParameter( 1, List.of( PlatformRole.ADMIN.name(), "u1" ) );

0 commit comments

Comments
 (0)