This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch ty/TableModelGrammar
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/ty/TableModelGrammar by this
push:
new f503487d7fb Fix allocate symbol by Expression
f503487d7fb is described below
commit f503487d7fb5defc3a6f8d59715b426299ce878b
Author: Weihao Li <[email protected]>
AuthorDate: Tue Jun 25 19:24:00 2024 +0800
Fix allocate symbol by Expression
---
.../queryengine/plan/relational/planner/PlanBuilder.java | 3 +--
.../queryengine/plan/relational/planner/QueryPlanner.java | 8 +-------
.../plan/relational/planner/ir/ExpressionTreeRewriter.java | 14 ++++++++++++++
3 files changed, 16 insertions(+), 9 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanBuilder.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanBuilder.java
index fb1729480f5..7d8cfa96110 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanBuilder.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanBuilder.java
@@ -132,8 +132,7 @@ public class PlanBuilder {
// or that are duplicated in the list of exp
if (!mappings.containsKey(scopeAwareKey(expression, analysis,
translations.getScope()))
&& !alreadyHasTranslation.test(translations, expression)) {
- Symbol symbol =
- symbolAllocator.newSymbol(expression.toString(),
analysis.getType(expression));
+ Symbol symbol = symbolAllocator.newSymbol(expression,
analysis.getType(expression));
queryContext.getTypeProvider().putTableModelType(symbol,
analysis.getType(expression));
projections.put(symbol, rewriter.apply(translations, expression));
mappings.put(scopeAwareKey(expression, analysis,
translations.getScope()), symbol);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
index a44ee2f7bf6..60e2a46371d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
@@ -25,7 +25,6 @@ import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.OffsetNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.SortNode;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Delete;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Expression;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.FieldReference;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Node;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Offset;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.OrderBy;
@@ -204,12 +203,7 @@ public class QueryPlanner {
PlanBuilder builder, List<Expression> outputExpressions) {
ImmutableList.Builder<Symbol> outputSymbols = ImmutableList.builder();
for (Expression expression : outputExpressions) {
- Symbol symbol = null;
- if (expression instanceof FieldReference) {
- FieldReference reference = (FieldReference) expression;
- symbol = builder.getFieldSymbols()[reference.getFieldIndex()];
- }
- outputSymbols.add(symbol != null ? symbol : new
Symbol(expression.toString()));
+ outputSymbols.add(builder.translate(expression));
}
return outputSymbols.build();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/ExpressionTreeRewriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/ExpressionTreeRewriter.java
index 7bdfc688126..525804fd2bd 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/ExpressionTreeRewriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/ExpressionTreeRewriter.java
@@ -24,6 +24,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Cast;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CoalesceExpression;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ComparisonExpression;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Expression;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.FieldReference;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.FunctionCall;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Identifier;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.InPredicate;
@@ -476,6 +477,19 @@ public final class ExpressionTreeRewriter<C> {
return node;
}
+ @Override
+ protected Expression visitFieldReference(FieldReference node, Context<C>
context) {
+ if (!context.isDefaultRewrite()) {
+ Expression result =
+ rewriter.rewriteFieldReference(node, context.get(),
ExpressionTreeRewriter.this);
+ if (result != null) {
+ return result;
+ }
+ }
+
+ return node;
+ }
+
@Override
protected Expression visitSymbolReference(SymbolReference node, Context<C>
context) {
if (!context.isDefaultRewrite()) {