diff --git a/core/src/main/java/io/kestra/core/models/QueryFilter.java b/core/src/main/java/io/kestra/core/models/QueryFilter.java index f021a7f5cd5..04e25d22830 100644 --- a/core/src/main/java/io/kestra/core/models/QueryFilter.java +++ b/core/src/main/java/io/kestra/core/models/QueryFilter.java @@ -359,6 +359,12 @@ public List supportedField() { return List.of(Field.QUERY, Field.USERNAME, Field.GROUP, Field.NAME); } }, + ROLE { + @Override + public List supportedField() { + return List.of(Field.QUERY, Field.NAME); + } + }, SECRET_METADATA { @Override public List supportedField() { diff --git a/core/src/test/java/io/kestra/core/models/QueryFilterTest.java b/core/src/test/java/io/kestra/core/models/QueryFilterTest.java index 693cd9b3e4f..602feee0660 100644 --- a/core/src/test/java/io/kestra/core/models/QueryFilterTest.java +++ b/core/src/test/java/io/kestra/core/models/QueryFilterTest.java @@ -302,6 +302,12 @@ static Stream validOperationFilters() { Op.EQUALS, Op.IN ) + ), + + buildQueryFiltersForOperations(Field.NAME, Resource.ROLE, + Set.of( + Op.EQUALS + ) ) ).flatMap(s -> s); } @@ -637,6 +643,23 @@ static Stream invalidOperationFilters() { Op.PREFIX, Op.NOT_EQUALS ) + ), + + buildQueryFiltersForOperations(Field.NAME, Resource.ROLE, + Set.of( + Op.GREATER_THAN, + Op.LESS_THAN, + Op.GREATER_THAN_OR_EQUAL_TO, + Op.LESS_THAN_OR_EQUAL_TO, + Op.CONTAINS, + Op.NOT_IN, + Op.STARTS_WITH, + Op.ENDS_WITH, + Op.REGEX, + Op.PREFIX, + Op.NOT_EQUALS, + Op.IN + ) ) ).flatMap(s -> s); } diff --git a/jdbc/src/main/java/io/kestra/jdbc/repository/AbstractJdbcRepository.java b/jdbc/src/main/java/io/kestra/jdbc/repository/AbstractJdbcRepository.java index 32ca9f333e1..ccdef2efda6 100644 --- a/jdbc/src/main/java/io/kestra/jdbc/repository/AbstractJdbcRepository.java +++ b/jdbc/src/main/java/io/kestra/jdbc/repository/AbstractJdbcRepository.java @@ -338,6 +338,14 @@ protected Condition getConditionOnField( return findMetadataCondition((Map) value, operation); } + return defaultHandlers(field, value, operation); + } + + private Condition defaultHandlers( + QueryFilter.Field field, + Object value, + QueryFilter.Op operation + ) { // Convert the field name to lowercase and quote it Name columnName = getColumnName(field); @@ -419,7 +427,7 @@ protected Condition groupCondition(Object value, QueryFilter.Op operation) { } protected Condition nameCondition(Object value, QueryFilter.Op operation) { - throw new InvalidQueryFiltersException("Unsupported operation: " + operation); + return defaultHandlers(QueryFilter.Field.NAME, value, operation); } protected Condition statesFilter(List state) {