Skip to content

Commit 2f39ab1

Browse files
Fix: Updated Filter Converter to account for EXISTS and NOT_EXISTS Filters (#307)
1 parent 0a77495 commit 2f39ab1

1 file changed

Lines changed: 30 additions & 10 deletions

File tree

config-service-impl/src/main/java/org/hypertrace/config/service/store/FilterExpressionBuilder.java

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
11
package org.hypertrace.config.service.store;
22

3+
import static org.hypertrace.core.documentstore.expression.operators.RelationalOperator.EQ;
4+
import static org.hypertrace.core.documentstore.expression.operators.RelationalOperator.EXISTS;
5+
import static org.hypertrace.core.documentstore.expression.operators.RelationalOperator.GT;
6+
import static org.hypertrace.core.documentstore.expression.operators.RelationalOperator.GTE;
7+
import static org.hypertrace.core.documentstore.expression.operators.RelationalOperator.IN;
8+
import static org.hypertrace.core.documentstore.expression.operators.RelationalOperator.LT;
9+
import static org.hypertrace.core.documentstore.expression.operators.RelationalOperator.LTE;
10+
import static org.hypertrace.core.documentstore.expression.operators.RelationalOperator.NEQ;
11+
import static org.hypertrace.core.documentstore.expression.operators.RelationalOperator.NOT_EXISTS;
12+
import static org.hypertrace.core.documentstore.expression.operators.RelationalOperator.NOT_IN;
13+
314
import io.grpc.Status;
415
import java.util.List;
516
import java.util.stream.Collectors;
617
import org.hypertrace.config.service.ConfigServiceUtils;
718
import org.hypertrace.config.service.v1.Filter;
819
import org.hypertrace.config.service.v1.LogicalFilter;
920
import org.hypertrace.config.service.v1.RelationalFilter;
21+
import org.hypertrace.core.documentstore.expression.impl.ConstantExpression;
1022
import org.hypertrace.core.documentstore.expression.impl.IdentifierExpression;
1123
import org.hypertrace.core.documentstore.expression.impl.LogicalExpression;
1224
import org.hypertrace.core.documentstore.expression.impl.RelationalExpression;
@@ -15,6 +27,7 @@
1527
import org.hypertrace.core.documentstore.expression.type.FilterTypeExpression;
1628

1729
public class FilterExpressionBuilder {
30+
private static final String DEFAULT_CONSTANT_EXPRESSION_VALUE = "";
1831

1932
public FilterTypeExpression buildFilterTypeExpression(Filter filter) {
2033
switch (filter.getTypeCase()) {
@@ -55,34 +68,34 @@ private FilterTypeExpression buildRelationalExpression(RelationalFilter relation
5568
RelationalOperator operator;
5669
switch (relationalFilter.getOperator()) {
5770
case RELATIONAL_OPERATOR_EQ:
58-
operator = RelationalOperator.EQ;
71+
operator = EQ;
5972
break;
6073
case RELATIONAL_OPERATOR_NEQ:
61-
operator = RelationalOperator.NEQ;
74+
operator = NEQ;
6275
break;
6376
case RELATIONAL_OPERATOR_IN:
64-
operator = RelationalOperator.IN;
77+
operator = IN;
6578
break;
6679
case RELATIONAL_OPERATOR_NOT_IN:
67-
operator = RelationalOperator.NOT_IN;
80+
operator = NOT_IN;
6881
break;
6982
case RELATIONAL_OPERATOR_LT:
70-
operator = RelationalOperator.LT;
83+
operator = LT;
7184
break;
7285
case RELATIONAL_OPERATOR_GT:
73-
operator = RelationalOperator.GT;
86+
operator = GT;
7487
break;
7588
case RELATIONAL_OPERATOR_LTE:
76-
operator = RelationalOperator.LTE;
89+
operator = LTE;
7790
break;
7891
case RELATIONAL_OPERATOR_GTE:
79-
operator = RelationalOperator.GTE;
92+
operator = GTE;
8093
break;
8194
case RELATIONAL_OPERATOR_EXISTS:
82-
operator = RelationalOperator.EXISTS;
95+
operator = EXISTS;
8396
break;
8497
case RELATIONAL_OPERATOR_NOT_EXISTS:
85-
operator = RelationalOperator.NOT_EXISTS;
98+
operator = NOT_EXISTS;
8699
break;
87100
case UNRECOGNIZED:
88101
default:
@@ -91,6 +104,13 @@ private FilterTypeExpression buildRelationalExpression(RelationalFilter relation
91104
.asRuntimeException();
92105
}
93106

107+
if (EXISTS.equals(operator) || NOT_EXISTS.equals(operator)) {
108+
return RelationalExpression.of(
109+
IdentifierExpression.of(
110+
ConfigServiceUtils.buildConfigFieldPath(relationalFilter.getConfigJsonPath())),
111+
operator,
112+
ConstantExpression.of(DEFAULT_CONSTANT_EXPRESSION_VALUE));
113+
}
94114
return RelationalExpression.of(
95115
IdentifierExpression.of(
96116
ConfigServiceUtils.buildConfigFieldPath(relationalFilter.getConfigJsonPath())),

0 commit comments

Comments
 (0)