diff --git a/server/db/src/main/java/com/walmartlabs/concord/db/PgUtils.java b/server/db/src/main/java/com/walmartlabs/concord/db/PgUtils.java index cd304dd04c..56d504bb62 100644 --- a/server/db/src/main/java/com/walmartlabs/concord/db/PgUtils.java +++ b/server/db/src/main/java/com/walmartlabs/concord/db/PgUtils.java @@ -85,6 +85,10 @@ public static Condition jsonbTextNotExistsByPath(Field field, List {1} ?? {2}", field, inline(toPath(path)), DSL.value(value)); } + public static Condition jsonbTextMatch(Field field, List path, String value) { + return DSL.condition("{0} #>> {1} ~ {2}", field, inline(toPath(path)), DSL.value(value)); + } + /** * Returns a JOOQ field "now - d" where "d" is the specified duration. * The result is rounded down to seconds. diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/process/queue/FilterUtils.java b/server/impl/src/main/java/com/walmartlabs/concord/server/process/queue/FilterUtils.java index ee07411d93..924dbc1561 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/process/queue/FilterUtils.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/process/queue/FilterUtils.java @@ -55,7 +55,9 @@ public final class FilterUtils { SuffixMapping.of(".notEndsWith", ProcessFilter.FilterType.NOT_ENDS_WITH), SuffixMapping.of(".ge", ProcessFilter.FilterType.GREATER_OR_EQUALS), - SuffixMapping.of(".len", ProcessFilter.FilterType.LESS_OR_EQUALS_OR_NULL) + SuffixMapping.of(".len", ProcessFilter.FilterType.LESS_OR_EQUALS_OR_NULL), + + SuffixMapping.of(".regexp", ProcessFilter.FilterType.REGEXP_MATCH) }; public static List parseDate(String paramName, UriInfo uriInfo) { @@ -152,6 +154,10 @@ public static void applyJson(SelectQuery q, Field column, List m = new MultivaluedHashMap<>(); + m.put("test.regexp", Collections.singletonList("myValue")); + + UriInfo uriInfo = mock(UriInfo.class); + when(uriInfo.getQueryParameters()).thenReturn(m); + + List filter = FilterUtils.parseJson("test", uriInfo); + assertEquals(1, filter.size()); + assertEquals(REGEXP_MATCH, filter.get(0).type()); + assertEquals("myValue", filter.get(0).value()); + } +}