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()) {

Reply via email to