11package 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+
314import io .grpc .Status ;
415import java .util .List ;
516import java .util .stream .Collectors ;
617import org .hypertrace .config .service .ConfigServiceUtils ;
718import org .hypertrace .config .service .v1 .Filter ;
819import org .hypertrace .config .service .v1 .LogicalFilter ;
920import org .hypertrace .config .service .v1 .RelationalFilter ;
21+ import org .hypertrace .core .documentstore .expression .impl .ConstantExpression ;
1022import org .hypertrace .core .documentstore .expression .impl .IdentifierExpression ;
1123import org .hypertrace .core .documentstore .expression .impl .LogicalExpression ;
1224import org .hypertrace .core .documentstore .expression .impl .RelationalExpression ;
1527import org .hypertrace .core .documentstore .expression .type .FilterTypeExpression ;
1628
1729public 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