Skip to content

Commit 9ee78fb

Browse files
committed
chore: address review comments p2
1 parent a72ddf6 commit 9ee78fb

17 files changed

Lines changed: 139 additions & 47 deletions

document-store/src/main/java/org/hypertrace/core/documentstore/mongo/MongoUtils.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,13 @@ public static String decodeKey(final String key) {
6565
return key.replace("\\u002e", FIELD_SEPARATOR).replace("\\u0024", PREFIX).replace("\\\\", "\\");
6666
}
6767

68+
public static String encodeVariableName(final String variableName) {
69+
if (variableName == null) {
70+
return null;
71+
}
72+
return variableName.replace(".", "_");
73+
}
74+
6875
public static String getLastField(final String fieldPath) {
6976
final String[] fields = fieldPath.split("\\" + FIELD_SEPARATOR);
7077
return fields[fields.length - 1];

document-store/src/main/java/org/hypertrace/core/documentstore/mongo/query/parser/AliasParser.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
import java.util.Optional;
44
import org.hypertrace.core.documentstore.expression.impl.AggregateExpression;
5+
import org.hypertrace.core.documentstore.expression.impl.AliasedIdentifierExpression;
56
import org.hypertrace.core.documentstore.expression.impl.ConstantExpression;
67
import org.hypertrace.core.documentstore.expression.impl.ConstantExpression.DocumentConstantExpression;
78
import org.hypertrace.core.documentstore.expression.impl.FunctionExpression;
89
import org.hypertrace.core.documentstore.expression.impl.IdentifierExpression;
910
import org.hypertrace.core.documentstore.parser.SelectTypeExpressionVisitor;
1011
import org.hypertrace.core.documentstore.parser.SortTypeExpressionVisitor;
12+
import org.hypertrace.core.documentstore.query.SelectionSpec;
1113

1214
public class AliasParser implements SelectTypeExpressionVisitor, SortTypeExpressionVisitor {
1315

@@ -40,4 +42,10 @@ public Optional<String> visit(ConstantExpression expression) {
4042
public Optional<String> visit(DocumentConstantExpression expression) {
4143
return Optional.empty();
4244
}
45+
46+
@SuppressWarnings("unchecked")
47+
@Override
48+
public Optional<SelectionSpec> visit(final AliasedIdentifierExpression expression) {
49+
throw new UnsupportedOperationException("This operation is not supported");
50+
}
4351
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.hypertrace.core.documentstore.mongo.query.parser;
2+
3+
import java.util.Collections;
4+
import java.util.Map;
5+
import org.hypertrace.core.documentstore.expression.impl.AggregateExpression;
6+
import org.hypertrace.core.documentstore.expression.impl.AliasedIdentifierExpression;
7+
import org.hypertrace.core.documentstore.expression.impl.ConstantExpression;
8+
import org.hypertrace.core.documentstore.expression.impl.FunctionExpression;
9+
import org.hypertrace.core.documentstore.expression.impl.IdentifierExpression;
10+
import org.hypertrace.core.documentstore.parser.SelectTypeExpressionVisitor;
11+
12+
class MongoEmptySelectionTypeParser implements SelectTypeExpressionVisitor {
13+
@Override
14+
public Map<String, Object> visit(AggregateExpression expression) {
15+
return Collections.emptyMap();
16+
}
17+
18+
@Override
19+
public Map<String, Object> visit(ConstantExpression expression) {
20+
return Collections.emptyMap();
21+
}
22+
23+
@Override
24+
public Map<String, Object> visit(ConstantExpression.DocumentConstantExpression expression) {
25+
return Collections.emptyMap();
26+
}
27+
28+
@Override
29+
public Map<String, Object> visit(FunctionExpression expression) {
30+
return Collections.emptyMap();
31+
}
32+
33+
@Override
34+
public Map<String, Object> visit(IdentifierExpression expression) {
35+
return Collections.emptyMap();
36+
}
37+
38+
@Override
39+
public Map<String, Object> visit(AliasedIdentifierExpression expression) {
40+
return Collections.emptyMap();
41+
}
42+
}

document-store/src/main/java/org/hypertrace/core/documentstore/mongo/query/parser/MongoIdentifierExpressionParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public String visit(final IdentifierExpression expression) {
2121
@SuppressWarnings("unchecked")
2222
@Override
2323
public String visit(final AliasedIdentifierExpression expression) {
24-
return MongoUtils.PREFIX + parse(expression);
24+
return MongoUtils.PREFIX + MongoUtils.encodeVariableName(parse(expression));
2525
}
2626

2727
String parse(final IdentifierExpression expression) {

document-store/src/main/java/org/hypertrace/core/documentstore/mongo/query/parser/MongoLetClauseBuilder.java

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,15 @@
33
import java.util.Collections;
44
import java.util.HashMap;
55
import java.util.Map;
6-
import org.hypertrace.core.documentstore.expression.impl.AggregateExpression;
76
import org.hypertrace.core.documentstore.expression.impl.AliasedIdentifierExpression;
87
import org.hypertrace.core.documentstore.expression.impl.ArrayRelationalFilterExpression;
9-
import org.hypertrace.core.documentstore.expression.impl.ConstantExpression;
108
import org.hypertrace.core.documentstore.expression.impl.DocumentArrayFilterExpression;
11-
import org.hypertrace.core.documentstore.expression.impl.FunctionExpression;
12-
import org.hypertrace.core.documentstore.expression.impl.IdentifierExpression;
139
import org.hypertrace.core.documentstore.expression.impl.KeyExpression;
1410
import org.hypertrace.core.documentstore.expression.impl.LogicalExpression;
1511
import org.hypertrace.core.documentstore.expression.impl.RelationalExpression;
1612
import org.hypertrace.core.documentstore.expression.type.FilterTypeExpression;
1713
import org.hypertrace.core.documentstore.mongo.MongoUtils;
1814
import org.hypertrace.core.documentstore.parser.FilterTypeExpressionVisitor;
19-
import org.hypertrace.core.documentstore.parser.SelectTypeExpressionVisitor;
2015

2116
// Visitor for building the let clause in lookup stage from filter expressions
2217
class MongoLetClauseBuilder implements FilterTypeExpressionVisitor {
@@ -44,42 +39,15 @@ public Map<String, Object> visit(RelationalExpression expression) {
4439
return Collections.unmodifiableMap(letClause);
4540
}
4641

47-
private class MongoLetClauseSelectTypeExpressionVisitor implements SelectTypeExpressionVisitor {
48-
@Override
49-
public Map<String, Object> visit(AggregateExpression expression) {
50-
return Collections.emptyMap();
51-
}
52-
53-
@Override
54-
public Map<String, Object> visit(ConstantExpression expression) {
55-
return Collections.emptyMap();
56-
}
57-
58-
@Override
59-
public Map<String, Object> visit(ConstantExpression.DocumentConstantExpression expression) {
60-
return Collections.emptyMap();
61-
}
42+
private class MongoLetClauseSelectTypeExpressionVisitor extends MongoEmptySelectionTypeParser {
6243

6344
@Override
64-
public Map<String, Object> visit(FunctionExpression expression) {
65-
return Collections.emptyMap();
66-
}
67-
68-
@Override
69-
public Map<String, Object> visit(IdentifierExpression expression) {
70-
return Collections.emptyMap();
71-
}
72-
73-
@Override
74-
public Map<String, Object> visit(AliasedIdentifierExpression expression) {
75-
return createLetClause(expression, subQueryAlias);
76-
}
77-
78-
private Map<String, Object> createLetClause(
79-
AliasedIdentifierExpression aliasedExpression, String subQueryAlias) {
45+
public Map<String, Object> visit(AliasedIdentifierExpression aliasedExpression) {
8046
Map<String, Object> letClause = new HashMap<>();
8147
if (aliasedExpression.getContextAlias().equals(subQueryAlias)) {
82-
letClause.put(aliasedExpression.getName(), MongoUtils.PREFIX + aliasedExpression.getName());
48+
letClause.put(
49+
MongoUtils.encodeVariableName(aliasedExpression.getName()),
50+
MongoUtils.PREFIX + aliasedExpression.getName());
8351
}
8452
return Collections.unmodifiableMap(letClause);
8553
}

document-store/src/main/java/org/hypertrace/core/documentstore/mongo/query/parser/MongoNonProjectedSortTypeExpressionParser.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.util.stream.Collectors;
1414
import org.apache.commons.collections4.CollectionUtils;
1515
import org.hypertrace.core.documentstore.expression.impl.AggregateExpression;
16+
import org.hypertrace.core.documentstore.expression.impl.AliasedIdentifierExpression;
1617
import org.hypertrace.core.documentstore.expression.impl.ConstantExpression;
1718
import org.hypertrace.core.documentstore.expression.impl.ConstantExpression.DocumentConstantExpression;
1819
import org.hypertrace.core.documentstore.expression.impl.FunctionExpression;
@@ -93,6 +94,12 @@ public Map<String, Object> visit(DocumentConstantExpression expression) {
9394
expression.getValue().toString()));
9495
}
9596

97+
@SuppressWarnings("unchecked")
98+
@Override
99+
public Map<String, Object> visit(final AliasedIdentifierExpression expression) {
100+
throw new UnsupportedOperationException("This operation is not supported");
101+
}
102+
96103
public static BasicDBObject getNonProjectedSortClause(final Query query) {
97104
BasicDBObject orders = getOrders(query);
98105
return orders.isEmpty() ? orders : new BasicDBObject(SORT_CLAUSE, orders);

document-store/src/main/java/org/hypertrace/core/documentstore/mongo/query/transformer/MongoSelectionsAddingTransformation.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.Optional;
99
import lombok.AllArgsConstructor;
1010
import org.hypertrace.core.documentstore.expression.impl.AggregateExpression;
11+
import org.hypertrace.core.documentstore.expression.impl.AliasedIdentifierExpression;
1112
import org.hypertrace.core.documentstore.expression.impl.ConstantExpression;
1213
import org.hypertrace.core.documentstore.expression.impl.ConstantExpression.DocumentConstantExpression;
1314
import org.hypertrace.core.documentstore.expression.impl.FunctionExpression;
@@ -123,4 +124,10 @@ public Optional<SelectionSpec> visit(final FunctionExpression expression) {
123124
public Optional<SelectionSpec> visit(final IdentifierExpression expression) {
124125
return Optional.empty();
125126
}
127+
128+
@SuppressWarnings("unchecked")
129+
@Override
130+
public Optional<SelectionSpec> visit(final AliasedIdentifierExpression expression) {
131+
throw new UnsupportedOperationException("This operation is not supported");
132+
}
126133
}

document-store/src/main/java/org/hypertrace/core/documentstore/mongo/query/transformer/MongoSelectionsUpdatingTransformation.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.Set;
1616
import java.util.function.Function;
1717
import org.hypertrace.core.documentstore.expression.impl.AggregateExpression;
18+
import org.hypertrace.core.documentstore.expression.impl.AliasedIdentifierExpression;
1819
import org.hypertrace.core.documentstore.expression.impl.ConstantExpression;
1920
import org.hypertrace.core.documentstore.expression.impl.ConstantExpression.DocumentConstantExpression;
2021
import org.hypertrace.core.documentstore.expression.impl.FunctionExpression;
@@ -132,6 +133,12 @@ public SelectionSpec visit(final IdentifierExpression expression) {
132133
return SelectionSpec.of(IdentifierExpression.of(identifier), alias);
133134
}
134135

136+
@SuppressWarnings("unchecked")
137+
@Override
138+
public SelectionSpec visit(final AliasedIdentifierExpression expression) {
139+
throw new UnsupportedOperationException("This operation is not supported");
140+
}
141+
135142
private SelectionSpec substitute(final AggregateExpression expression) {
136143
return Optional.ofNullable(AGGREGATION_SUBSTITUTE_MAP.get(expression.getAggregator()))
137144
.map(converter -> SelectionSpec.of(converter.apply(expression), source.getAlias()))

document-store/src/main/java/org/hypertrace/core/documentstore/parser/AggregateExpressionChecker.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.hypertrace.core.documentstore.parser;
22

33
import org.hypertrace.core.documentstore.expression.impl.AggregateExpression;
4+
import org.hypertrace.core.documentstore.expression.impl.AliasedIdentifierExpression;
45
import org.hypertrace.core.documentstore.expression.impl.ConstantExpression;
56
import org.hypertrace.core.documentstore.expression.impl.ConstantExpression.DocumentConstantExpression;
67
import org.hypertrace.core.documentstore.expression.impl.FunctionExpression;
@@ -34,4 +35,9 @@ public Boolean visit(FunctionExpression expression) {
3435
public Boolean visit(IdentifierExpression expression) {
3536
return false;
3637
}
38+
39+
@Override
40+
public Boolean visit(AliasedIdentifierExpression expression) {
41+
throw new UnsupportedOperationException("This operation is not supported");
42+
}
3743
}

document-store/src/main/java/org/hypertrace/core/documentstore/parser/FromTypeExpressionVisitor.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,5 @@
66
public interface FromTypeExpressionVisitor {
77
<T> T visit(UnnestExpression unnestExpression);
88

9-
/*
10-
* Subquery join expression is not supported by default. Override this method to support it.
11-
*/
12-
default <T> T visit(SubQueryJoinExpression subQueryJoinExpression) {
13-
throw new UnsupportedOperationException("This operation is not supported");
14-
}
9+
<T> T visit(SubQueryJoinExpression subQueryJoinExpression);
1510
}

0 commit comments

Comments
 (0)