Skip to content

Commit

Permalink
Refactor to take-in the wrapping LHS parser
Browse files Browse the repository at this point in the history
  • Loading branch information
suresh-prakash committed Dec 30, 2023
1 parent 0960315 commit cc4347c
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.UnaryOperator;
import org.hypertrace.core.documentstore.Key;
import org.hypertrace.core.documentstore.expression.impl.ArrayRelationalFilterExpression;
import org.hypertrace.core.documentstore.expression.impl.DocumentArrayFilterExpression;
Expand All @@ -20,16 +21,27 @@ public final class MongoFilterTypeExpressionParser implements FilterTypeExpressi

private static final String FILTER_CLAUSE = "$match";

private final UnaryOperator<MongoSelectTypeExpressionParser> wrappingLhsParser;

public MongoFilterTypeExpressionParser() {
this(UnaryOperator.identity());
}

public MongoFilterTypeExpressionParser(
final UnaryOperator<MongoSelectTypeExpressionParser> wrappingLhsParser) {
this.wrappingLhsParser = wrappingLhsParser;
}

@SuppressWarnings("unchecked")
@Override
public Map<String, Object> visit(final LogicalExpression expression) {
return new MongoLogicalExpressionParser().parse(expression);
return new MongoLogicalExpressionParser(wrappingLhsParser).parse(expression);
}

@SuppressWarnings("unchecked")
@Override
public Map<String, Object> visit(final RelationalExpression expression) {
return new MongoRelationalExpressionParser().parse(expression);
return new MongoRelationalExpressionParser(wrappingLhsParser).parse(expression);
}

@SuppressWarnings("unchecked")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.function.UnaryOperator;
import java.util.stream.Collectors;
import org.hypertrace.core.documentstore.expression.impl.LogicalExpression;
import org.hypertrace.core.documentstore.expression.operators.LogicalOperator;
Expand All @@ -23,6 +24,13 @@ final class MongoLogicalExpressionParser {
}
});

private final UnaryOperator<MongoSelectTypeExpressionParser> wrappingLhsParser;

MongoLogicalExpressionParser(
final UnaryOperator<MongoSelectTypeExpressionParser> wrappingLhsParser) {
this.wrappingLhsParser = wrappingLhsParser;
}

Map<String, Object> parse(final LogicalExpression expression) {
LogicalOperator operator = expression.getOperator();
String key = KEY_MAP.get(operator);
Expand All @@ -31,7 +39,7 @@ Map<String, Object> parse(final LogicalExpression expression) {
throw getUnsupportedOperationException(operator);
}

FilterTypeExpressionVisitor parser = new MongoFilterTypeExpressionParser();
FilterTypeExpressionVisitor parser = new MongoFilterTypeExpressionParser(wrappingLhsParser);
List<Object> parsed =
expression.getOperands().stream()
.map(exp -> exp.accept(parser))
Expand Down

0 comments on commit cc4347c

Please sign in to comment.