diff --git a/core/src/main/java/org/opensearch/sql/analysis/ExpressionReferenceOptimizer.java b/core/src/main/java/org/opensearch/sql/analysis/ExpressionReferenceOptimizer.java
index 8ffe315c12..398f848f16 100644
--- a/core/src/main/java/org/opensearch/sql/analysis/ExpressionReferenceOptimizer.java
+++ b/core/src/main/java/org/opensearch/sql/analysis/ExpressionReferenceOptimizer.java
@@ -3,7 +3,6 @@
* SPDX-License-Identifier: Apache-2.0
*/
-
package org.opensearch.sql.analysis;
import java.util.HashMap;
@@ -26,8 +25,8 @@
import org.opensearch.sql.planner.logical.LogicalWindow;
/**
- * The optimizer used to replace the expression referred in the SelectClause
- * e.g. The query SELECT abs(name), sum(age)-avg(age) FROM test GROUP BY abs(name).
+ * The optimizer used to replace the expression referred in the SelectClause e.g. The query
+ * SELECT abs(name), sum(age)-avg(age) FROM test GROUP BY abs(name).
* will be translated the AST
* Project[abs(age), sub(sum(age), avg(age))
* &ensp Agg(agg=[sum(age), avg(age)], group=[abs(age)]]
@@ -43,8 +42,8 @@ public class ExpressionReferenceOptimizer
private final BuiltinFunctionRepository repository;
/**
- * The map of expression and it's reference.
- * For example, The NamedAggregator should produce the map of Aggregator to Ref(name)
+ * The map of expression and it's reference. For example, The NamedAggregator should produce the
+ * map of Aggregator to Ref(name)
*/
private final Map expressionMap = new HashMap<>();
@@ -69,17 +68,16 @@ public Expression visitFunction(FunctionExpression node, AnalysisContext context
return expressionMap.get(node);
} else {
final List args =
- node.getArguments().stream().map(expr -> expr.accept(this, context))
+ node.getArguments().stream()
+ .map(expr -> expr.accept(this, context))
.collect(Collectors.toList());
- Expression optimizedFunctionExpression = (Expression) repository.compile(
- context.getFunctionProperties(),
- node.getFunctionName(),
- args
- );
+ Expression optimizedFunctionExpression =
+ (Expression)
+ repository.compile(context.getFunctionProperties(), node.getFunctionName(), args);
// Propagate scoreTracked for OpenSearch functions
if (optimizedFunctionExpression instanceof OpenSearchFunctions.OpenSearchFunction) {
- ((OpenSearchFunctions.OpenSearchFunction) optimizedFunctionExpression).setScoreTracked(
- ((OpenSearchFunctions.OpenSearchFunction)node).isScoreTracked());
+ ((OpenSearchFunctions.OpenSearchFunction) optimizedFunctionExpression)
+ .setScoreTracked(((OpenSearchFunctions.OpenSearchFunction) node).isScoreTracked());
}
return optimizedFunctionExpression;
}
@@ -98,19 +96,17 @@ public Expression visitNamed(NamedExpression node, AnalysisContext context) {
return node.getDelegated().accept(this, context);
}
- /**
- * Implement this because Case/When is not registered in function repository.
- */
+ /** Implement this because Case/When is not registered in function repository. */
@Override
public Expression visitCase(CaseClause node, AnalysisContext context) {
if (expressionMap.containsKey(node)) {
return expressionMap.get(node);
}
- List whenClauses = node.getWhenClauses()
- .stream()
- .map(expr -> (WhenClause) expr.accept(this, context))
- .collect(Collectors.toList());
+ List whenClauses =
+ node.getWhenClauses().stream()
+ .map(expr -> (WhenClause) expr.accept(this, context))
+ .collect(Collectors.toList());
Expression defaultResult = null;
if (node.getDefaultResult() != null) {
defaultResult = node.getDefaultResult().accept(this, context);
@@ -121,14 +117,10 @@ public Expression visitCase(CaseClause node, AnalysisContext context) {
@Override
public Expression visitWhen(WhenClause node, AnalysisContext context) {
return new WhenClause(
- node.getCondition().accept(this, context),
- node.getResult().accept(this, context));
+ node.getCondition().accept(this, context), node.getResult().accept(this, context));
}
-
- /**
- * Expression Map Builder.
- */
+ /** Expression Map Builder. */
class ExpressionMapBuilder extends LogicalPlanNodeVisitor {
@Override
@@ -140,20 +132,27 @@ public Void visitNode(LogicalPlan plan, Void context) {
@Override
public Void visitAggregation(LogicalAggregation plan, Void context) {
// Create the mapping for all the aggregator.
- plan.getAggregatorList().forEach(namedAggregator -> expressionMap
- .put(namedAggregator.getDelegated(),
- new ReferenceExpression(namedAggregator.getName(), namedAggregator.type())));
+ plan.getAggregatorList()
+ .forEach(
+ namedAggregator ->
+ expressionMap.put(
+ namedAggregator.getDelegated(),
+ new ReferenceExpression(namedAggregator.getName(), namedAggregator.type())));
// Create the mapping for all the group by.
- plan.getGroupByList().forEach(groupBy -> expressionMap
- .put(groupBy.getDelegated(),
- new ReferenceExpression(groupBy.getNameOrAlias(), groupBy.type())));
+ plan.getGroupByList()
+ .forEach(
+ groupBy ->
+ expressionMap.put(
+ groupBy.getDelegated(),
+ new ReferenceExpression(groupBy.getNameOrAlias(), groupBy.type())));
return null;
}
@Override
public Void visitWindow(LogicalWindow plan, Void context) {
Expression windowFunc = plan.getWindowFunction();
- expressionMap.put(windowFunc,
+ expressionMap.put(
+ windowFunc,
new ReferenceExpression(((NamedExpression) windowFunc).getName(), windowFunc.type()));
return visitNode(plan, context);
}
diff --git a/core/src/main/java/org/opensearch/sql/analysis/SelectExpressionAnalyzer.java b/core/src/main/java/org/opensearch/sql/analysis/SelectExpressionAnalyzer.java
index 44c1949c48..0873048148 100644
--- a/core/src/main/java/org/opensearch/sql/analysis/SelectExpressionAnalyzer.java
+++ b/core/src/main/java/org/opensearch/sql/analysis/SelectExpressionAnalyzer.java
@@ -3,7 +3,6 @@
* SPDX-License-Identifier: Apache-2.0
*/
-
package org.opensearch.sql.analysis;
import com.google.common.collect.ImmutableList;
@@ -30,23 +29,21 @@
import org.opensearch.sql.expression.ReferenceExpression;
/**
- * Analyze the select list in the {@link AnalysisContext} to construct the list of
- * {@link NamedExpression}.
+ * Analyze the select list in the {@link AnalysisContext} to construct the list of {@link
+ * NamedExpression}.
*/
@RequiredArgsConstructor
public class SelectExpressionAnalyzer
- extends
- AbstractNodeVisitor, AnalysisContext> {
+ extends AbstractNodeVisitor, AnalysisContext> {
private final ExpressionAnalyzer expressionAnalyzer;
private ExpressionReferenceOptimizer optimizer;
- /**
- * Analyze Select fields.
- */
- public List analyze(List selectList,
- AnalysisContext analysisContext,
- ExpressionReferenceOptimizer optimizer) {
+ /** Analyze Select fields. */
+ public List analyze(
+ List selectList,
+ AnalysisContext analysisContext,
+ ExpressionReferenceOptimizer optimizer) {
this.optimizer = optimizer;
ImmutableList.Builder builder = new ImmutableList.Builder<>();
for (UnresolvedExpression unresolvedExpression : selectList) {
@@ -68,10 +65,8 @@ public List visitAlias(Alias node, AnalysisContext context) {
}
Expression expr = referenceIfSymbolDefined(node, context);
- return Collections.singletonList(DSL.named(
- unqualifiedNameIfFieldOnly(node, context),
- expr,
- node.getAlias()));
+ return Collections.singletonList(
+ DSL.named(unqualifiedNameIfFieldOnly(node, context), expr, node.getAlias()));
}
/**
@@ -86,32 +81,32 @@ public List visitAlias(Alias node, AnalysisContext context) {
* Project(Alias("name", expr, l), Alias("AVG(age)", aggExpr))
* Agg(Alias("AVG(age)", aggExpr), Alias("length(name)", groupExpr))
*/
- private Expression referenceIfSymbolDefined(Alias expr,
- AnalysisContext context) {
+ private Expression referenceIfSymbolDefined(Alias expr, AnalysisContext context) {
UnresolvedExpression delegatedExpr = expr.getDelegated();
// Pass named expression because expression like window function loses full name
// (OVER clause) and thus depends on name in alias to be replaced correctly
return optimizer.optimize(
DSL.named(
- expr.getName(),
- delegatedExpr.accept(expressionAnalyzer, context),
- expr.getAlias()),
+ expr.getName(), delegatedExpr.accept(expressionAnalyzer, context), expr.getAlias()),
context);
}
@Override
- public List visitAllFields(AllFields node,
- AnalysisContext context) {
+ public List visitAllFields(AllFields node, AnalysisContext context) {
TypeEnvironment environment = context.peek();
Map lookupAllFields = environment.lookupAllFields(Namespace.FIELD_NAME);
- return lookupAllFields.entrySet().stream().map(entry -> DSL.named(entry.getKey(),
- new ReferenceExpression(entry.getKey(), entry.getValue()))).collect(Collectors.toList());
+ return lookupAllFields.entrySet().stream()
+ .map(
+ entry ->
+ DSL.named(
+ entry.getKey(), new ReferenceExpression(entry.getKey(), entry.getValue())))
+ .collect(Collectors.toList());
}
@Override
- public List visitNestedAllTupleFields(NestedAllTupleFields node,
- AnalysisContext context) {
+ public List visitNestedAllTupleFields(
+ NestedAllTupleFields node, AnalysisContext context) {
TypeEnvironment environment = context.peek();
Map lookupAllTupleFields =
environment.lookupAllTupleFields(Namespace.FIELD_NAME);
@@ -121,14 +116,15 @@ public List visitNestedAllTupleFields(NestedAllTupleFields node
Pattern p = Pattern.compile(node.getPath() + "\\.[^\\.]+$");
return lookupAllTupleFields.entrySet().stream()
.filter(field -> p.matcher(field.getKey()).find())
- .map(entry -> {
- Expression nestedFunc = new Function(
- "nested",
- List.of(
- new QualifiedName(List.of(entry.getKey().split("\\."))))
- ).accept(expressionAnalyzer, context);
- return DSL.named("nested(" + entry.getKey() + ")", nestedFunc);
- })
+ .map(
+ entry -> {
+ Expression nestedFunc =
+ new Function(
+ "nested",
+ List.of(new QualifiedName(List.of(entry.getKey().split("\\.")))))
+ .accept(expressionAnalyzer, context);
+ return DSL.named("nested(" + entry.getKey() + ")", nestedFunc);
+ })
.collect(Collectors.toList());
}
@@ -149,5 +145,4 @@ private String unqualifiedNameIfFieldOnly(Alias node, AnalysisContext context) {
}
return node.getName();
}
-
}