You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by sh...@apache.org on 2026/04/16 08:53:48 UTC

(iotdb) branch calc_commons updated: refactor

This is an automated email from the ASF dual-hosted git repository.

shuwenwei pushed a commit to branch calc_commons
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/calc_commons by this push:
     new 5f1639cac34 refactor
5f1639cac34 is described below

commit 5f1639cac34d22361fc7718af79cd83eed09478e
Author: shuwenwei <we...@timecho.com>
AuthorDate: Thu Apr 16 16:53:34 2026 +0800

    refactor
---
 .../plan/relational/sql/ast/AnchorPattern.java     |   9 +-
 .../relational/sql/ast/CommonQueryAstVisitor.java  | 121 ++++++
 .../plan/relational/sql/ast/EmptyPattern.java      |   9 +-
 .../plan/relational/sql/ast/Except.java            |  10 +-
 .../plan/relational/sql/ast/ExcludedPattern.java   |   9 +-
 .../plan/relational/sql/ast/Intersect.java         |  10 +-
 .../plan/relational/sql/ast/MeasureDefinition.java |  11 +-
 .../relational/sql/ast/OneOrMoreQuantifier.java    |   8 +-
 .../relational/sql/ast/PatternAlternation.java     |   9 +-
 .../relational/sql/ast/PatternConcatenation.java   |   9 +-
 .../relational/sql/ast/PatternPermutation.java     |   9 +-
 .../plan/relational/sql/ast/PatternQuantifier.java |   8 +-
 .../sql/ast/PatternRecognitionRelation.java        |  12 +-
 .../plan/relational/sql/ast/PatternVariable.java   |  10 +-
 .../plan/relational/sql/ast/QuantifiedPattern.java |   9 +-
 .../relational/sql/ast/QuerySpecification.java     |  16 +-
 .../plan/relational/sql/ast/RangeQuantifier.java   |  10 +-
 .../plan/relational/sql/ast/RowPattern.java        |   8 +-
 .../plan/relational/sql/ast/Select.java            |  10 +-
 .../plan/relational/sql/ast/SetOperation.java      |   9 +-
 .../plan/relational/sql/ast/SkipTo.java            |  18 +-
 .../plan/relational/sql/ast/SubsetDefinition.java  |  10 +-
 .../plan/relational/sql/ast/Table.java             |  11 +-
 .../relational/sql/ast/TableFunctionArgument.java  |  11 +-
 .../sql/ast/TableFunctionInvocation.java           |  11 +-
 .../sql/ast/TableFunctionTableArgument.java        |  12 +-
 .../plan/relational/sql/ast/Union.java             |  10 +-
 .../relational/sql/ast/VariableDefinition.java     |  11 +-
 .../plan/relational/sql/ast/WindowDefinition.java  |  11 +-
 .../relational/sql/ast/ZeroOrMoreQuantifier.java   |   8 +-
 .../relational/sql/ast/ZeroOrOneQuantifier.java    |   8 +-
 .../relational/sql/util/ExpressionFormatter.java   |  10 +-
 .../visitor/PipePlanToStatementVisitor.java        |   2 +-
 .../db/queryengine/common/MPPQueryContext.java     |   2 +-
 .../execution/operator/ExplainAnalyzeOperator.java |   2 +-
 .../iotdb/db/queryengine/plan/Coordinator.java     |   2 +-
 .../TableModelStatementMemorySourceVisitor.java    |   2 +-
 .../plan/relational/analyzer/Analysis.java         |  12 +-
 .../relational/analyzer/ExpressionAnalyzer.java    |   6 +-
 .../analyzer/PatternRecognitionAnalysis.java       |   2 +-
 .../analyzer/PatternRecognitionAnalyzer.java       |  18 +-
 .../plan/relational/analyzer/Scope.java            |   2 +-
 .../relational/analyzer/StatementAnalyzer.java     |  34 +-
 .../plan/relational/planner/CteMaterializer.java   |   2 +-
 .../plan/relational/planner/QueryPlanner.java      |   6 +-
 .../plan/relational/planner/RelationPlanner.java   |  30 +-
 .../relational/planner/TableLogicalPlanner.java    |   2 +-
 .../rowpattern/RowPatternToIrRewriter.java         |  28 +-
 .../sql/ast/AbstractQueryDeviceWithCache.java      |   1 +
 .../relational/sql/ast/AbstractTraverseDevice.java |   1 +
 .../plan/relational/sql/ast/AstVisitor.java        | 121 ------
 .../plan/relational/sql/ast/CountDevice.java       |   1 +
 .../sql/ast/DefaultTraversalVisitor.java           |  10 +
 .../plan/relational/sql/ast/Delete.java            |   1 +
 .../plan/relational/sql/ast/DeleteDevice.java      |   1 +
 .../plan/relational/sql/ast/Insert.java            |   1 +
 .../plan/relational/sql/ast/ShowDevice.java        |   1 +
 .../plan/relational/sql/ast/Update.java            |   1 +
 .../plan/relational/sql/parser/AstBuilder.java     |  80 ++--
 .../plan/relational/sql/rewrite/ShowRewrite.java   |   2 +-
 .../sql/util/CommonQuerySqlFormatter.java          | 288 +++++++++++++--
 .../relational/sql/util/DataNodeSqlFormatter.java  | 410 +++------------------
 .../plan/relational/sql/util/QueryUtil.java        |   8 +-
 .../relational/sql/util/RowPatternFormatter.java   |  30 +-
 .../plan/relational/sql/util/SqlFormatter.java     |  76 ----
 65 files changed, 657 insertions(+), 965 deletions(-)

diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AnchorPattern.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/AnchorPattern.java
similarity index 84%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AnchorPattern.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/AnchorPattern.java
index 881741ee098..9af2abdd77e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AnchorPattern.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/AnchorPattern.java
@@ -17,12 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -55,7 +50,7 @@ public class AnchorPattern extends RowPattern {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitAnchorPattern(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitAnchorPattern(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/CommonQueryAstVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/CommonQueryAstVisitor.java
index b1721897f8d..c5a14b6485b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/CommonQueryAstVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/CommonQueryAstVisitor.java
@@ -343,4 +343,125 @@ public interface CommonQueryAstVisitor<R, C> extends IAstVisitor<R, C> {
   default R visitLimit(Limit node, C context) {
     return visitNode(node, context);
   }
+
+  default R visitSelect(Select node, C context) {
+    return visitNode(node, context);
+  }
+
+  default R visitTable(Table node, C context) {
+    return visitQueryBody(node, context);
+  }
+
+  default R visitQuerySpecification(QuerySpecification node, C context) {
+    return visitQueryBody(node, context);
+  }
+
+  default R visitWindowDefinition(WindowDefinition node, C context) {
+    return visitNode(node, context);
+  }
+
+  default R visitSetOperation(SetOperation node, C context) {
+    return visitQueryBody(node, context);
+  }
+
+  default R visitUnion(Union node, C context) {
+    return visitSetOperation(node, context);
+  }
+
+  default R visitIntersect(Intersect node, C context) {
+    return visitSetOperation(node, context);
+  }
+
+  default R visitExcept(Except node, C context) {
+    return visitSetOperation(node, context);
+  }
+
+  default R visitTableArgument(TableFunctionTableArgument tableFunctionTableArgument, C context) {
+    return visitNode(tableFunctionTableArgument, context);
+  }
+
+  default R visitTableFunctionArgument(TableFunctionArgument tableFunctionArgument, C context) {
+    return visitNode(tableFunctionArgument, context);
+  }
+
+  default R visitTableFunctionInvocation(
+      TableFunctionInvocation tableFunctionInvocation, C context) {
+    return visitNode(tableFunctionInvocation, context);
+  }
+
+  default R visitPatternRecognitionRelation(PatternRecognitionRelation node, C context) {
+    return visitRelation(node, context);
+  }
+
+  default R visitRowPattern(RowPattern node, C context) {
+    return visitNode(node, context);
+  }
+
+  default R visitPatternAlternation(PatternAlternation node, C context) {
+    return visitRowPattern(node, context);
+  }
+
+  default R visitPatternConcatenation(PatternConcatenation node, C context) {
+    return visitRowPattern(node, context);
+  }
+
+  default R visitQuantifiedPattern(QuantifiedPattern node, C context) {
+    return visitRowPattern(node, context);
+  }
+
+  default R visitAnchorPattern(AnchorPattern node, C context) {
+    return visitRowPattern(node, context);
+  }
+
+  default R visitEmptyPattern(EmptyPattern node, C context) {
+    return visitRowPattern(node, context);
+  }
+
+  default R visitExcludedPattern(ExcludedPattern node, C context) {
+    return visitRowPattern(node, context);
+  }
+
+  default R visitPatternPermutation(PatternPermutation node, C context) {
+    return visitRowPattern(node, context);
+  }
+
+  default R visitPatternVariable(PatternVariable node, C context) {
+    return visitRowPattern(node, context);
+  }
+
+  default R visitPatternQuantifier(PatternQuantifier node, C context) {
+    return visitNode(node, context);
+  }
+
+  default R visitZeroOrMoreQuantifier(ZeroOrMoreQuantifier node, C context) {
+    return visitPatternQuantifier(node, context);
+  }
+
+  default R visitOneOrMoreQuantifier(OneOrMoreQuantifier node, C context) {
+    return visitPatternQuantifier(node, context);
+  }
+
+  default R visitZeroOrOneQuantifier(ZeroOrOneQuantifier node, C context) {
+    return visitPatternQuantifier(node, context);
+  }
+
+  default R visitRangeQuantifier(RangeQuantifier node, C context) {
+    return visitPatternQuantifier(node, context);
+  }
+
+  default R visitMeasureDefinition(MeasureDefinition node, C context) {
+    return visitNode(node, context);
+  }
+
+  default R visitSkipTo(SkipTo node, C context) {
+    return visitNode(node, context);
+  }
+
+  default R visitSubsetDefinition(SubsetDefinition node, C context) {
+    return visitNode(node, context);
+  }
+
+  default R visitVariableDefinition(VariableDefinition node, C context) {
+    return visitNode(node, context);
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/EmptyPattern.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/EmptyPattern.java
similarity index 81%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/EmptyPattern.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/EmptyPattern.java
index 34e4fbf0f6c..ffd04baec1c 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/EmptyPattern.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/EmptyPattern.java
@@ -17,12 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -41,7 +36,7 @@ public class EmptyPattern extends RowPattern {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitEmptyPattern(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitEmptyPattern(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Except.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Except.java
similarity index 86%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Except.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Except.java
index 1e4bfb3c927..7e8275dbcb9 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Except.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Except.java
@@ -17,13 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -64,7 +58,7 @@ public final class Except extends SetOperation {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitExcept(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitExcept(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExcludedPattern.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/ExcludedPattern.java
similarity index 84%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExcludedPattern.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/ExcludedPattern.java
index 5bf356f0ed0..99301435bc1 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExcludedPattern.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/ExcludedPattern.java
@@ -17,12 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -50,7 +45,7 @@ public class ExcludedPattern extends RowPattern {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitExcludedPattern(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitExcludedPattern(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Intersect.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Intersect.java
similarity index 85%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Intersect.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Intersect.java
index a79aa412eab..03899734dac 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Intersect.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Intersect.java
@@ -17,13 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -57,7 +51,7 @@ public final class Intersect extends SetOperation {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitIntersect(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitIntersect(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/MeasureDefinition.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/MeasureDefinition.java
similarity index 82%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/MeasureDefinition.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/MeasureDefinition.java
index a8f640d575d..9293e3f154a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/MeasureDefinition.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/MeasureDefinition.java
@@ -17,14 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -58,7 +51,7 @@ public class MeasureDefinition extends Node {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitMeasureDefinition(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitMeasureDefinition(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/OneOrMoreQuantifier.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/OneOrMoreQuantifier.java
similarity index 78%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/OneOrMoreQuantifier.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/OneOrMoreQuantifier.java
index 57b3bd52ff9..2a682c6f40d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/OneOrMoreQuantifier.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/OneOrMoreQuantifier.java
@@ -17,11 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import org.apache.tsfile.utils.RamUsageEstimator;
 
@@ -35,7 +31,7 @@ public class OneOrMoreQuantifier extends PatternQuantifier {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitOneOrMoreQuantifier(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitOneOrMoreQuantifier(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternAlternation.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternAlternation.java
similarity index 85%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternAlternation.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternAlternation.java
index 237c1bf7b0e..42a324d52ba 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternAlternation.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternAlternation.java
@@ -17,12 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -52,7 +47,7 @@ public class PatternAlternation extends RowPattern {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitPatternAlternation(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitPatternAlternation(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternConcatenation.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternConcatenation.java
similarity index 85%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternConcatenation.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternConcatenation.java
index 3466e3d4254..0b83aca9fee 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternConcatenation.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternConcatenation.java
@@ -17,12 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -52,7 +47,7 @@ public class PatternConcatenation extends RowPattern {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitPatternConcatenation(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitPatternConcatenation(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternPermutation.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternPermutation.java
similarity index 85%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternPermutation.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternPermutation.java
index 90901c9f7e3..84c55c27a43 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternPermutation.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternPermutation.java
@@ -17,12 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -52,7 +47,7 @@ public class PatternPermutation extends RowPattern {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitPatternPermutation(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitPatternPermutation(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternQuantifier.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternQuantifier.java
similarity index 84%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternQuantifier.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternQuantifier.java
index 0467833ef8f..51aee17ff43 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternQuantifier.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternQuantifier.java
@@ -17,11 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 
@@ -44,7 +40,7 @@ public abstract class PatternQuantifier extends Node {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitPatternQuantifier(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitPatternQuantifier(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternRecognitionRelation.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternRecognitionRelation.java
similarity index 91%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternRecognitionRelation.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternRecognitionRelation.java
index 3ebc7d922e3..05aacbf2f71 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternRecognitionRelation.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternRecognitionRelation.java
@@ -17,15 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.OrderBy;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -115,7 +107,7 @@ public class PatternRecognitionRelation extends Relation {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitPatternRecognitionRelation(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitPatternRecognitionRelation(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternVariable.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternVariable.java
similarity index 82%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternVariable.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternVariable.java
index 16ca5a93fd3..4130de8503b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternVariable.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/PatternVariable.java
@@ -17,13 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -51,7 +45,7 @@ public class PatternVariable extends RowPattern {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitPatternVariable(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitPatternVariable(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuantifiedPattern.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/QuantifiedPattern.java
similarity index 86%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuantifiedPattern.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/QuantifiedPattern.java
index 4c863497f7d..f6e4ae23d17 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuantifiedPattern.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/QuantifiedPattern.java
@@ -17,12 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -57,7 +52,7 @@ public class QuantifiedPattern extends RowPattern {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitQuantifiedPattern(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitQuantifiedPattern(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuerySpecification.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/QuerySpecification.java
similarity index 87%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuerySpecification.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/QuerySpecification.java
index e893c3990f0..ba3e87dcfb2 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuerySpecification.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/QuerySpecification.java
@@ -17,19 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Fill;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.GroupBy;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Offset;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.OrderBy;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QueryBody;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -139,7 +127,7 @@ public class QuerySpecification extends QueryBody {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitQuerySpecification(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitQuerySpecification(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RangeQuantifier.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/RangeQuantifier.java
similarity index 85%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RangeQuantifier.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/RangeQuantifier.java
index ce73d6fdd94..c7e42e59c0b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RangeQuantifier.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/RangeQuantifier.java
@@ -17,13 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.LongLiteral;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -62,7 +56,7 @@ public class RangeQuantifier extends PatternQuantifier {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitRangeQuantifier(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitRangeQuantifier(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RowPattern.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/RowPattern.java
similarity index 73%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RowPattern.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/RowPattern.java
index 946b4a321a5..a9e54c28086 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RowPattern.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/RowPattern.java
@@ -17,11 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 public abstract class RowPattern extends Node {
   protected RowPattern(NodeLocation location) {
@@ -30,6 +26,6 @@ public abstract class RowPattern extends Node {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitRowPattern(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitRowPattern(this, context);
   }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Select.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Select.java
similarity index 85%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Select.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Select.java
index 8d643d61826..0781bac309f 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Select.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Select.java
@@ -17,13 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SelectItem;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -63,7 +57,7 @@ public class Select extends Node {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitSelect(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitSelect(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetOperation.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/SetOperation.java
similarity index 73%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetOperation.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/SetOperation.java
index 331df91492e..aa2ae381e63 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetOperation.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/SetOperation.java
@@ -17,12 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QueryBody;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import java.util.List;
 
@@ -40,7 +35,7 @@ public abstract class SetOperation extends QueryBody {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitSetOperation(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitSetOperation(this, context);
   }
 
   public abstract List<Relation> getRelations();
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SkipTo.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/SkipTo.java
similarity index 82%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SkipTo.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/SkipTo.java
index be44c5e61a8..28828eb5855 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SkipTo.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/SkipTo.java
@@ -17,13 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -35,10 +29,10 @@ import java.util.Optional;
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo.Position.FIRST;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo.Position.LAST;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo.Position.NEXT;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo.Position.PAST_LAST;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SkipTo.Position.FIRST;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SkipTo.Position.LAST;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SkipTo.Position.NEXT;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SkipTo.Position.PAST_LAST;
 
 public class SkipTo extends Node {
   private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(SkipTo.class);
@@ -96,7 +90,7 @@ public class SkipTo extends Node {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitSkipTo(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitSkipTo(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SubsetDefinition.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/SubsetDefinition.java
similarity index 85%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SubsetDefinition.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/SubsetDefinition.java
index 8a5ad1c75ac..1b3883af0bf 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SubsetDefinition.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/SubsetDefinition.java
@@ -17,13 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import org.apache.tsfile.utils.RamUsageEstimator;
 
@@ -59,7 +53,7 @@ public class SubsetDefinition extends Node {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitSubsetDefinition(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitSubsetDefinition(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Table.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Table.java
similarity index 81%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Table.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Table.java
index 0e511e67579..ade146f6e88 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Table.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Table.java
@@ -17,14 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QueryBody;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -57,7 +50,7 @@ public class Table extends QueryBody {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitTable(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitTable(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionArgument.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/TableFunctionArgument.java
similarity index 83%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionArgument.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/TableFunctionArgument.java
index 25f4b1a05b8..e68beb5c5e2 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionArgument.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/TableFunctionArgument.java
@@ -17,14 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -61,7 +54,7 @@ public class TableFunctionArgument extends Node {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitTableFunctionArgument(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitTableFunctionArgument(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionInvocation.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/TableFunctionInvocation.java
similarity index 82%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionInvocation.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/TableFunctionInvocation.java
index 5f3cac32920..5918339a405 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionInvocation.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/TableFunctionInvocation.java
@@ -17,14 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import org.apache.tsfile.utils.RamUsageEstimator;
 
@@ -58,7 +51,7 @@ public class TableFunctionInvocation extends Relation {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitTableFunctionInvocation(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitTableFunctionInvocation(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionTableArgument.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/TableFunctionTableArgument.java
similarity index 86%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionTableArgument.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/TableFunctionTableArgument.java
index 01f07c3ddb4..57d200b8f77 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionTableArgument.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/TableFunctionTableArgument.java
@@ -17,15 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.OrderBy;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -75,7 +67,7 @@ public class TableFunctionTableArgument extends Node {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitTableArgument(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitTableArgument(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Union.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Union.java
similarity index 85%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Union.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Union.java
index ee746365b97..b11b2d3b36a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Union.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/Union.java
@@ -17,13 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -57,7 +51,7 @@ public class Union extends SetOperation {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitUnion(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitUnion(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/VariableDefinition.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/VariableDefinition.java
similarity index 82%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/VariableDefinition.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/VariableDefinition.java
index 2be9e0f759f..e1324f67edd 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/VariableDefinition.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/VariableDefinition.java
@@ -17,14 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -58,7 +51,7 @@ public class VariableDefinition extends Node {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitVariableDefinition(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitVariableDefinition(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowDefinition.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/WindowDefinition.java
similarity index 82%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowDefinition.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/WindowDefinition.java
index 4adadc82afd..14909ce3bc0 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowDefinition.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/WindowDefinition.java
@@ -17,14 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowSpecification;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -58,7 +51,7 @@ public class WindowDefinition extends Node {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitWindowDefinition(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitWindowDefinition(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ZeroOrMoreQuantifier.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/ZeroOrMoreQuantifier.java
similarity index 78%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ZeroOrMoreQuantifier.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/ZeroOrMoreQuantifier.java
index 113905c8a3b..d8dc9aac340 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ZeroOrMoreQuantifier.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/ZeroOrMoreQuantifier.java
@@ -17,11 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import org.apache.tsfile.utils.RamUsageEstimator;
 
@@ -35,7 +31,7 @@ public class ZeroOrMoreQuantifier extends PatternQuantifier {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitZeroOrMoreQuantifier(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitZeroOrMoreQuantifier(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ZeroOrOneQuantifier.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/ZeroOrOneQuantifier.java
similarity index 78%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ZeroOrOneQuantifier.java
rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/ZeroOrOneQuantifier.java
index e14915b8743..e942a68c468 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ZeroOrOneQuantifier.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/ast/ZeroOrOneQuantifier.java
@@ -17,11 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+package org.apache.iotdb.db.node_commons.plan.relational.sql.ast;
 
 import org.apache.tsfile.utils.RamUsageEstimator;
 
@@ -35,7 +31,7 @@ public class ZeroOrOneQuantifier extends PatternQuantifier {
 
   @Override
   public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
-    return ((AstVisitor<R, C>) visitor).visitZeroOrOneQuantifier(this, context);
+    return ((CommonQueryAstVisitor<R, C>) visitor).visitZeroOrOneQuantifier(this, context);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/util/ExpressionFormatter.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/util/ExpressionFormatter.java
index 4da7aa0b3c7..f710a183254 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/util/ExpressionFormatter.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/node_commons/plan/relational/sql/util/ExpressionFormatter.java
@@ -82,6 +82,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Window;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowFrame;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowReference;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowSpecification;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.util.CommonQuerySqlFormatter;
 
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
@@ -99,9 +100,8 @@ import static java.util.Objects.requireNonNull;
 import static java.util.stream.Collectors.joining;
 import static java.util.stream.Collectors.toList;
 import static org.apache.iotdb.commons.udf.builtin.relational.TableBuiltinScalarFunction.DATE_BIN;
+import static org.apache.iotdb.db.queryengine.plan.relational.sql.util.CommonQuerySqlFormatter.formatName;
 import static org.apache.iotdb.db.queryengine.plan.relational.sql.util.ReservedIdentifiers.reserved;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.util.SqlFormatter.formatName;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.util.SqlFormatter.formatSql;
 
 public final class ExpressionFormatter {
 
@@ -116,6 +116,12 @@ public final class ExpressionFormatter {
     return new Formatter(Optional.empty(), Optional.empty()).process(expression, null);
   }
 
+  private static String formatSql(Node root) {
+    StringBuilder builder = new StringBuilder();
+    new CommonQuerySqlFormatter(builder).process(root, 0);
+    return builder.toString();
+  }
+
   public static class Formatter implements CommonQueryAstVisitor<String, Void> {
     private final Optional<Function<Literal, String>> literalFormatter;
     private final Optional<Function<SymbolReference, String>> symbolReferenceFormatter;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipePlanToStatementVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipePlanToStatementVisitor.java
index b2347461953..525418e5889 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipePlanToStatementVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipePlanToStatementVisitor.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.node_commons.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.ActivateTemplateNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.AlterTimeSeriesNode;
@@ -45,7 +46,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.planner.node.schema.Creat
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.schema.TableDeviceAttributeUpdateNode;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CreateOrUpdateDevice;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Delete;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Update;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.DeleteDataStatement;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
index bc18bb75375..c682644d482 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
@@ -31,13 +31,13 @@ import org.apache.iotdb.db.node_commons.common.SessionInfo;
 import org.apache.iotdb.db.node_commons.plan.relational.analyzer.NodeRef;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Query;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.plan.analyze.Analysis;
 import org.apache.iotdb.db.queryengine.plan.analyze.PredicateUtils;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.analyze.TypeProvider;
 import org.apache.iotdb.db.queryengine.plan.analyze.lock.SchemaLockType;
 import org.apache.iotdb.db.queryengine.plan.planner.memory.NotThreadSafeMemoryReservationManager;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.statistics.QueryPlanStatistics;
 import org.apache.iotdb.db.utils.cte.CteDataStore;
 
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/ExplainAnalyzeOperator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/ExplainAnalyzeOperator.java
index 01fde66d65a..ed7f3c88eb1 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/ExplainAnalyzeOperator.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/ExplainAnalyzeOperator.java
@@ -30,12 +30,12 @@ import org.apache.iotdb.db.calc_commons.execution.operator.process.ProcessOperat
 import org.apache.iotdb.db.exception.mpp.FragmentInstanceFetchException;
 import org.apache.iotdb.db.node_commons.execution.MemoryEstimationHelper;
 import org.apache.iotdb.db.node_commons.plan.relational.analyzer.NodeRef;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.common.FragmentInstanceId;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.plan.Coordinator;
 import org.apache.iotdb.db.queryengine.plan.execution.QueryExecution;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.FragmentInstance;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.statistics.FragmentInstanceStatisticsDrawer;
 import org.apache.iotdb.db.queryengine.statistics.QueryStatisticsFetcher;
 import org.apache.iotdb.db.queryengine.statistics.StatisticLine;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
index fb195f08dd9..a8b11dea77d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
@@ -43,6 +43,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Literal;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Parameter;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Query;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.node_commons.plan.relational.type.InternalTypeManager;
 import org.apache.iotdb.db.node_commons.plan.relational.type.TypeManager;
 import org.apache.iotdb.db.protocol.session.IClientSession;
@@ -142,7 +143,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StartRepairData;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StopExternalService;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StopRepairData;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SubscriptionStatement;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.UnloadModel;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Use;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WrappedInsertStatement;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/TableModelStatementMemorySourceVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/TableModelStatementMemorySourceVisitor.java
index 6f8fdb12c92..7c2535a49eb 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/TableModelStatementMemorySourceVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/TableModelStatementMemorySourceVisitor.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.commons.schema.column.ColumnHeader;
 import org.apache.iotdb.db.node_commons.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.node_commons.plan.relational.analyzer.NodeRef;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
 import org.apache.iotdb.db.queryengine.plan.Coordinator;
 import org.apache.iotdb.db.queryengine.plan.planner.LocalExecutionPlanner;
@@ -37,7 +38,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AstVisitor;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CountDevice;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Explain;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDevice;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Table;
 
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.read.common.block.TsBlock;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analysis.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analysis.java
index 2cccc1c9317..698020c3a4f 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analysis.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analysis.java
@@ -46,9 +46,15 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Parameter;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuantifiedComparisonExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Query;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuerySpecification;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RangeQuantifier;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RowPattern;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Statement;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SubqueryExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SubsetDefinition;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableFunctionInvocation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowFrame;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.With;
 import org.apache.iotdb.db.node_commons.plan.statement.component.FillPolicy;
@@ -65,13 +71,7 @@ import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableSchema;
 import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.QuerySpecification;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RangeQuantifier;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RowPattern;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowStatement;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SubsetDefinition;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Table;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.TableFunctionInvocation;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
 
 import com.google.common.collect.ArrayListMultimap;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionAnalyzer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionAnalyzer.java
index 923bf22b3fe..039fcbbf6dd 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionAnalyzer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionAnalyzer.java
@@ -72,13 +72,16 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Parameter;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ProcessingMode;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuantifiedComparisonExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RangeQuantifier;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Row;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RowPattern;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SearchedCaseExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SimpleCaseExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SortItem;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.StackableAstVisitor;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.StringLiteral;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SubqueryExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SubsetDefinition;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SymbolReference;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Trim;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WhenClause;
@@ -99,9 +102,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.OperatorNotFoundException;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
 import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RangeQuantifier;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RowPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SubsetDefinition;
 
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.ImmutableList;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/PatternRecognitionAnalysis.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/PatternRecognitionAnalysis.java
index ef0f2bbae21..28ddb808fdf 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/PatternRecognitionAnalysis.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/PatternRecognitionAnalysis.java
@@ -23,7 +23,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.analyzer.NodeRef;
 import org.apache.iotdb.db.node_commons.plan.relational.metadata.ResolvedFunction;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.FunctionCall;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RangeQuantifier;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RangeQuantifier;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/PatternRecognitionAnalyzer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/PatternRecognitionAnalyzer.java
index 846ec6b8bd0..a0af3ea3b34 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/PatternRecognitionAnalyzer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/PatternRecognitionAnalyzer.java
@@ -21,20 +21,20 @@ package org.apache.iotdb.db.queryengine.plan.relational.analyzer;
 
 import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.node_commons.plan.relational.analyzer.NodeRef;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ExcludedPattern;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.FunctionCall;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.LongLiteral;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.MeasureDefinition;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternRecognitionRelation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RangeQuantifier;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RowPattern;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SkipTo;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SubsetDefinition;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.VariableDefinition;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis.Range;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ExcludedPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.MeasureDefinition;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternRecognitionRelation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RangeQuantifier;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RowPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SubsetDefinition;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.VariableDefinition;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Scope.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Scope.java
index ce24d7246de..83e10a3530b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Scope.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Scope.java
@@ -25,8 +25,8 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AllColumns;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WithQuery;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Table;
 import org.apache.iotdb.rpc.TSStatusCode;
 
 import com.google.common.collect.ImmutableMap;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
index 05b6d98459d..258407ee5b8 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
@@ -41,6 +41,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.CoalesceExpressi
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Columns;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ComparisonExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.DereferenceExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Except;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ExistsPredicate;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Extract;
@@ -55,6 +56,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IfExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.InListExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.InPredicate;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Intersect;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IsNotNullPredicate;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IsNullPredicate;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Join;
@@ -64,32 +66,46 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Limit;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Literal;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.LogicalExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.LongLiteral;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.MeasureDefinition;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NotExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NullIfExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Offset;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.OrderBy;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Parameter;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternRecognitionRelation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuantifiedComparisonExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Query;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuerySpecification;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Row;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SearchedCaseExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Select;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SelectItem;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SetOperation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SimpleCaseExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SimpleGroupBy;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SingleColumn;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SkipTo;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SortItem;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Statement;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.StringLiteral;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SubqueryExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SubsetDefinition;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SymbolReference;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableFunctionArgument;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableFunctionInvocation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableFunctionTableArgument;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableSubquery;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Trim;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Union;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Values;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.VariableDefinition;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WhenClause;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Window;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowDefinition;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowFrame;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowReference;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowSpecification;
@@ -148,7 +164,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropPipePlugin;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropSubscription;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropTable;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropTopic;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Except;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Explain;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ExplainAnalyze;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.FetchDevice;
@@ -156,20 +171,14 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Insert;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.InsertRow;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.InsertRows;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.InsertTablet;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Intersect;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.JoinOn;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.JoinUsing;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.LoadTsFile;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.MeasureDefinition;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.NaturalJoin;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternRecognitionRelation;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PipeEnriched;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Property;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.QuerySpecification;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RenameColumn;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RenameTable;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Select;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetOperation;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetProperties;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDB;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDevice;
@@ -180,20 +189,11 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowPipes;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowSubscriptions;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowTables;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowTopics;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StartPipe;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StopPipe;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SubsetDefinition;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Table;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.TableFunctionArgument;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.TableFunctionInvocation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.TableFunctionTableArgument;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Union;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Update;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.UpdateAssignment;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Use;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.VariableDefinition;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WindowDefinition;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WrappedInsertStatement;
 import org.apache.iotdb.db.queryengine.plan.relational.type.CompatibleResolver;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertBaseStatement;
@@ -279,6 +279,7 @@ import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Join.Type
 import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Join.Type.INNER;
 import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Join.Type.LEFT;
 import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Join.Type.RIGHT;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch.ONE;
 import static org.apache.iotdb.db.queryengine.execution.warnings.StandardWarningCode.REDUNDANT_ORDER_BY;
 import static org.apache.iotdb.db.queryengine.plan.relational.analyzer.AggregationAnalyzer.verifyOrderByAggregations;
 import static org.apache.iotdb.db.queryengine.plan.relational.analyzer.AggregationAnalyzer.verifySourceAggregations;
@@ -290,7 +291,6 @@ import static org.apache.iotdb.db.queryengine.plan.relational.analyzer.Expressio
 import static org.apache.iotdb.db.queryengine.plan.relational.analyzer.Scope.BasisType.TABLE;
 import static org.apache.iotdb.db.queryengine.plan.relational.metadata.MetadataUtil.createQualifiedObjectName;
 import static org.apache.iotdb.db.queryengine.plan.relational.planner.IrExpressionInterpreter.evaluateConstantExpression;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch.ONE;
 import static org.apache.iotdb.db.queryengine.plan.relational.sql.util.AstUtil.preOrder;
 import static org.apache.iotdb.db.queryengine.plan.relational.utils.NodeUtils.getSortItemsFromOrderBy;
 import static org.apache.tsfile.read.common.type.BooleanType.BOOLEAN;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/CteMaterializer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/CteMaterializer.java
index df94bde9c81..f1c4c6ab2d5 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/CteMaterializer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/CteMaterializer.java
@@ -30,6 +30,7 @@ import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
 import org.apache.iotdb.db.exception.mpp.FragmentInstanceFetchException;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Query;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.With;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WithQuery;
 import org.apache.iotdb.db.protocol.session.SessionManager;
@@ -45,7 +46,6 @@ import org.apache.iotdb.db.queryengine.plan.planner.plan.FragmentInstance;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableSchema;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
 import org.apache.iotdb.db.queryengine.statistics.FragmentInstanceStatisticsDrawer;
 import org.apache.iotdb.db.queryengine.statistics.QueryStatisticsFetcher;
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 b7281d16b94..7d105013bff 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
@@ -50,13 +50,16 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.FrameBound;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.FunctionCall;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IfExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.LongLiteral;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.MeasureDefinition;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NullLiteral;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Offset;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.OrderBy;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Query;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QueryBody;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuerySpecification;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SortItem;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.VariableDefinition;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowFrame;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.QueryId;
@@ -67,9 +70,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.analyzer.RelationType;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.ir.GapFillStartAndEndTimeExtractVisitor;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.ir.PredicateWithUncorrelatedScalarSubqueryReconstructor;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Delete;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.MeasureDefinition;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.QuerySpecification;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.VariableDefinition;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
index 1b717e1edad..1dd87458570 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
@@ -55,19 +55,32 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AliasedRelation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.CoalesceExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ComparisonExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.DereferenceExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Except;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Intersect;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Join;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.JoinCriteria;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.LogicalExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.MeasureDefinition;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternRecognitionRelation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Query;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuerySpecification;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RowPattern;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SetOperation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SkipTo;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SortItem;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SubqueryExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SubsetDefinition;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableFunctionInvocation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableSubquery;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Union;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Values;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.VariableDefinition;
 import org.apache.iotdb.db.node_commons.plan.relational.type.InternalTypeManager;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.QueryId;
@@ -109,26 +122,13 @@ import org.apache.iotdb.db.queryengine.plan.relational.planner.rowpattern.rowpat
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AsofJoinOn;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AstVisitor;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Delete;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Except;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.InsertRow;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.InsertRows;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.InsertTablet;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Intersect;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.JoinOn;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.JoinUsing;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.LoadTsFile;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.MeasureDefinition;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternRecognitionRelation;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PipeEnriched;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.QuerySpecification;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RowPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetOperation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SubsetDefinition;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Table;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.TableFunctionInvocation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Union;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.VariableDefinition;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowsStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
@@ -169,6 +169,8 @@ import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Join.Type
 import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Join.Type.INNER;
 import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Join.Type.LEFT;
 import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Join.Type.RIGHT;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch.ONE;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SkipTo.Position.PAST_LAST;
 import static org.apache.iotdb.db.queryengine.plan.relational.analyzer.PatternRecognitionAnalysis.NavigationAnchor.LAST;
 import static org.apache.iotdb.db.queryengine.plan.relational.analyzer.PatternRecognitionAnalysis.NavigationMode.RUNNING;
 import static org.apache.iotdb.db.queryengine.plan.relational.planner.OrderingTranslator.sortItemToSortOrder;
@@ -178,8 +180,6 @@ import static org.apache.iotdb.db.queryengine.plan.relational.planner.QueryPlann
 import static org.apache.iotdb.db.queryengine.plan.relational.planner.QueryPlanner.extractPatternRecognitionExpressions;
 import static org.apache.iotdb.db.queryengine.plan.relational.planner.QueryPlanner.pruneInvisibleFields;
 import static org.apache.iotdb.db.queryengine.plan.relational.planner.ir.IrUtils.extractPredicates;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch.ONE;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo.Position.PAST_LAST;
 import static org.apache.iotdb.db.queryengine.plan.relational.utils.NodeUtils.getSortItemsFromOrderBy;
 import static org.apache.tsfile.read.common.type.LongType.INT64;
 import static org.apache.tsfile.read.common.type.StringType.STRING;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
index ccb5cad7f8c..cf63bc86cb1 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
@@ -39,6 +39,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.planner.node.OutputNode;
 import org.apache.iotdb.db.node_commons.plan.relational.planner.node.ProjectNode;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Query;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Statement;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.node_commons.plan.relational.type.InternalTypeManager;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.QueryId;
@@ -84,7 +85,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Insert;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.LoadTsFile;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PipeEnriched;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDevice;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Update;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WrappedStatement;
 import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/rowpattern/rowpattern/RowPatternToIrRewriter.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/rowpattern/rowpattern/RowPatternToIrRewriter.java
index 80e0001eb5c..41d74ae0497 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/rowpattern/rowpattern/RowPatternToIrRewriter.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/rowpattern/rowpattern/RowPatternToIrRewriter.java
@@ -30,23 +30,23 @@ import org.apache.iotdb.db.node_commons.plan.relational.planner.rowpattern.rowpa
 import org.apache.iotdb.db.node_commons.plan.relational.planner.rowpattern.rowpattern.IrQuantified;
 import org.apache.iotdb.db.node_commons.plan.relational.planner.rowpattern.rowpattern.IrQuantifier;
 import org.apache.iotdb.db.node_commons.plan.relational.planner.rowpattern.rowpattern.IrRowPattern;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AnchorPattern;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.EmptyPattern;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ExcludedPattern;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.OneOrMoreQuantifier;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternAlternation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternConcatenation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternPermutation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternQuantifier;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternVariable;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuantifiedPattern;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RangeQuantifier;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RowPattern;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ZeroOrMoreQuantifier;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ZeroOrOneQuantifier;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis.Range;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AnchorPattern;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AstVisitor;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.EmptyPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ExcludedPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.OneOrMoreQuantifier;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternAlternation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternConcatenation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternPermutation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternQuantifier;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternVariable;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.QuantifiedPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RangeQuantifier;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RowPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ZeroOrMoreQuantifier;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ZeroOrOneQuantifier;
 
 import java.util.List;
 
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractQueryDeviceWithCache.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractQueryDeviceWithCache.java
index ecd4bef96a7..8a596ddb5b4 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractQueryDeviceWithCache.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractQueryDeviceWithCache.java
@@ -26,6 +26,7 @@ import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AstMemoryEstimationHelper;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractTraverseDevice.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractTraverseDevice.java
index 3debfdd058c..313465765ca 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractTraverseDevice.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractTraverseDevice.java
@@ -29,6 +29,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.LogicalExpressio
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Statement;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.DeviceEntry;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.MetadataUtil;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java
index 2294907eb41..ea8f8b82003 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java
@@ -55,38 +55,6 @@ public interface AstVisitor<R, C> extends CommonQueryAstVisitor<R, C> {
     return visitStatement(node, context);
   }
 
-  default R visitSelect(Select node, C context) {
-    return visitNode(node, context);
-  }
-
-  default R visitQuerySpecification(QuerySpecification node, C context) {
-    return visitQueryBody(node, context);
-  }
-
-  default R visitSetOperation(SetOperation node, C context) {
-    return visitQueryBody(node, context);
-  }
-
-  default R visitUnion(Union node, C context) {
-    return visitSetOperation(node, context);
-  }
-
-  default R visitIntersect(Intersect node, C context) {
-    return visitSetOperation(node, context);
-  }
-
-  default R visitExcept(Except node, C context) {
-    return visitSetOperation(node, context);
-  }
-
-  default R visitWindowDefinition(WindowDefinition node, C context) {
-    return visitNode(node, context);
-  }
-
-  default R visitTable(Table node, C context) {
-    return visitQueryBody(node, context);
-  }
-
   default R visitColumnDefinition(ColumnDefinition node, C context) {
     return visitNode(node, context);
   }
@@ -490,93 +458,4 @@ public interface AstVisitor<R, C> extends CommonQueryAstVisitor<R, C> {
   default R visitDropModel(DropModel node, C context) {
     return visitStatement(node, context);
   }
-
-  default R visitTableArgument(TableFunctionTableArgument tableFunctionTableArgument, C context) {
-    return visitNode(tableFunctionTableArgument, context);
-  }
-
-  default R visitTableFunctionArgument(TableFunctionArgument tableFunctionArgument, C context) {
-    return visitNode(tableFunctionArgument, context);
-  }
-
-  default R visitTableFunctionInvocation(
-      TableFunctionInvocation tableFunctionInvocation, C context) {
-    return visitNode(tableFunctionInvocation, context);
-  }
-
-  default R visitMeasureDefinition(MeasureDefinition node, C context) {
-    return visitNode(node, context);
-  }
-
-  default R visitSkipTo(SkipTo node, C context) {
-    return visitNode(node, context);
-  }
-
-  default R visitSubsetDefinition(SubsetDefinition node, C context) {
-    return visitNode(node, context);
-  }
-
-  default R visitVariableDefinition(VariableDefinition node, C context) {
-    return visitNode(node, context);
-  }
-
-  default R visitPatternRecognitionRelation(PatternRecognitionRelation node, C context) {
-    return visitRelation(node, context);
-  }
-
-  default R visitRowPattern(RowPattern node, C context) {
-    return visitNode(node, context);
-  }
-
-  default R visitPatternAlternation(PatternAlternation node, C context) {
-    return visitRowPattern(node, context);
-  }
-
-  default R visitPatternConcatenation(PatternConcatenation node, C context) {
-    return visitRowPattern(node, context);
-  }
-
-  default R visitQuantifiedPattern(QuantifiedPattern node, C context) {
-    return visitRowPattern(node, context);
-  }
-
-  default R visitAnchorPattern(AnchorPattern node, C context) {
-    return visitRowPattern(node, context);
-  }
-
-  default R visitEmptyPattern(EmptyPattern node, C context) {
-    return visitRowPattern(node, context);
-  }
-
-  default R visitExcludedPattern(ExcludedPattern node, C context) {
-    return visitRowPattern(node, context);
-  }
-
-  default R visitPatternPermutation(PatternPermutation node, C context) {
-    return visitRowPattern(node, context);
-  }
-
-  default R visitPatternVariable(PatternVariable node, C context) {
-    return visitRowPattern(node, context);
-  }
-
-  default R visitPatternQuantifier(PatternQuantifier node, C context) {
-    return visitNode(node, context);
-  }
-
-  default R visitZeroOrMoreQuantifier(ZeroOrMoreQuantifier node, C context) {
-    return visitPatternQuantifier(node, context);
-  }
-
-  default R visitOneOrMoreQuantifier(OneOrMoreQuantifier node, C context) {
-    return visitPatternQuantifier(node, context);
-  }
-
-  default R visitZeroOrOneQuantifier(ZeroOrOneQuantifier node, C context) {
-    return visitPatternQuantifier(node, context);
-  }
-
-  default R visitRangeQuantifier(RangeQuantifier node, C context) {
-    return visitPatternQuantifier(node, context);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountDevice.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountDevice.java
index 4d01dfb5c64..11c480bb5f9 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountDevice.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountDevice.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.commons.schema.column.ColumnHeader;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
 
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DefaultTraversalVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DefaultTraversalVisitor.java
index 118ab56940d..8a57ff1d024 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DefaultTraversalVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DefaultTraversalVisitor.java
@@ -28,6 +28,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Cast;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.CoalesceExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ComparisonExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.DereferenceExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ExcludedPattern;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ExistsPredicate;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Extract;
@@ -50,12 +51,21 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NotExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NullIfExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Offset;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.OrderBy;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternAlternation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternConcatenation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternPermutation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternVariable;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuantifiedComparisonExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuantifiedPattern;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Query;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuerySpecification;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Row;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RowPattern;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SearchedCaseExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Select;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SelectItem;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SetOperation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SimpleCaseExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SimpleGroupBy;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SingleColumn;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Delete.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Delete.java
index a6130a857e5..3173acde25a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Delete.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Delete.java
@@ -26,6 +26,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Statement;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.storageengine.dataregion.modification.TableDeletionEntry;
 
 import com.google.common.collect.ImmutableList;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java
index c061fed4405..87657581d70 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java
@@ -33,6 +33,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.planner.Symbol;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.execution.operator.schema.source.DeviceBlackListConstructor;
 import org.apache.iotdb.db.queryengine.execution.operator.schema.source.TableDeviceQuerySource;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Insert.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Insert.java
index 55459f961a8..63041774813 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Insert.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Insert.java
@@ -27,6 +27,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Query;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Statement;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.read.common.type.LongType;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDevice.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDevice.java
index 2e46c31c7ca..120ce603e92 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDevice.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDevice.java
@@ -28,6 +28,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Offset;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
 import org.apache.iotdb.db.queryengine.execution.operator.schema.source.TableDeviceQuerySource;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Update.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Update.java
index 9fafb524371..934faf1eae5 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Update.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Update.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IAstVisitor;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
index 411439e2747..99d193f79eb 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
@@ -38,6 +38,7 @@ import org.apache.iotdb.db.node_commons.common.SqlDialect;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AliasedRelation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AllColumns;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AllRows;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AnchorPattern;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ArithmeticBinaryExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ArithmeticUnaryExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.BetweenPredicate;
@@ -54,6 +55,9 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.DataType;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.DataTypeParameter;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.DereferenceExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.DoubleLiteral;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.EmptyPattern;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Except;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ExcludedPattern;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ExistsPredicate;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Extract;
@@ -68,6 +72,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IfExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.InListExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.InPredicate;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Intersect;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IsNotNullPredicate;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.IsNullPredicate;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Join;
@@ -77,6 +82,7 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Limit;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Literal;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.LogicalExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.LongLiteral;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.MeasureDefinition;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NodeLocation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NotExpression;
@@ -84,36 +90,60 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NullIfExpression
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NullLiteral;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.NumericParameter;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Offset;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.OneOrMoreQuantifier;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.OrderBy;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Parameter;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternAlternation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternConcatenation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternPermutation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternQuantifier;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternRecognitionRelation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternVariable;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ProcessingMode;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuantifiedComparisonExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuantifiedPattern;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Query;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QueryBody;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuerySpecification;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RangeQuantifier;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Row;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RowPattern;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SearchedCaseExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Select;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SelectItem;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SimpleCaseExpression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SimpleGroupBy;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SingleColumn;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SkipTo;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SortItem;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Statement;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.StringLiteral;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SubqueryExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SubsetDefinition;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableExpressionType;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableFunctionArgument;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableFunctionInvocation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableFunctionTableArgument;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableSubquery;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Trim;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TypeParameter;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Union;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Values;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.VariableDefinition;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WhenClause;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Window;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowDefinition;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowFrame;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowReference;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowSpecification;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.With;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WithQuery;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ZeroOrMoreQuantifier;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ZeroOrOneQuantifier;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.parser.ParsingException;
 import org.apache.iotdb.db.protocol.session.IClientSession;
 import org.apache.iotdb.db.queryengine.execution.operator.process.copyto.CopyToOptions;
@@ -121,7 +151,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AddColumn;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AlterColumnDataType;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AlterDB;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AlterPipe;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AnchorPattern;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AsofJoinOn;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ClearCache;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ColumnDefinition;
@@ -152,9 +181,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropPipePlugin;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropSubscription;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropTable;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropTopic;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.EmptyPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Except;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ExcludedPattern;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Execute;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ExecuteImmediate;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Explain;
@@ -163,29 +189,16 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ExtendRegion;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Flush;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Insert;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.InsertRows;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Intersect;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.JoinOn;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.JoinUsing;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.KillQuery;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.LoadConfiguration;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.LoadModel;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.LoadTsFile;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.MeasureDefinition;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.MigrateRegion;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.NaturalJoin;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.OneOrMoreQuantifier;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternAlternation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternConcatenation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternPermutation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternQuantifier;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternRecognitionRelation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternVariable;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Prepare;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Property;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.QuantifiedPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.QuerySpecification;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RangeQuantifier;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ReconstructRegion;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RelationalAuthorStatement;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RemoveAINode;
@@ -194,8 +207,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RemoveDataNode;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RemoveRegion;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RenameColumn;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RenameTable;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RowPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Select;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetColumnComment;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetConfiguration;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetProperties;
@@ -231,26 +242,15 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowTables;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowTopics;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowVariables;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowVersion;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StartPipe;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StartRepairData;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StopPipe;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StopRepairData;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SubsetDefinition;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Table;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.TableFunctionArgument;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.TableFunctionInvocation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.TableFunctionTableArgument;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Union;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.UnloadModel;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Update;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.UpdateAssignment;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Use;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.VariableDefinition;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ViewFieldDefinition;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WindowDefinition;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ZeroOrMoreQuantifier;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ZeroOrOneQuantifier;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.util.AstUtil;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.util.QueryUtil;
 import org.apache.iotdb.db.queryengine.plan.relational.type.AuthorRType;
@@ -315,29 +315,29 @@ import static org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory
 import static org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory.TAG;
 import static org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory.TIME;
 import static org.apache.iotdb.commons.udf.builtin.relational.TableBuiltinScalarFunction.DATE_BIN;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AnchorPattern.Type.PARTITION_END;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AnchorPattern.Type.PARTITION_START;
 import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.GroupingSets.Type.CUBE;
 import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.GroupingSets.Type.EXPLICIT;
 import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.GroupingSets.Type.ROLLUP;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch.ALL_OMIT_EMPTY;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch.ALL_SHOW_EMPTY;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch.ALL_WITH_UNMATCHED;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch.ONE;
 import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ProcessingMode.Mode.FINAL;
 import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ProcessingMode.Mode.RUNNING;
 import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName.mapIdentifier;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SkipTo.skipPastLastRow;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SkipTo.skipToFirst;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SkipTo.skipToLast;
+import static org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SkipTo.skipToNextRow;
 import static org.apache.iotdb.db.queryengine.plan.execution.config.TableConfigTaskVisitor.DATABASE_NOT_SPECIFIED;
 import static org.apache.iotdb.db.queryengine.plan.parser.ASTVisitor.SERVICE_MANAGEMENT_NOT_SUPPORTED;
 import static org.apache.iotdb.db.queryengine.plan.parser.ASTVisitor.parseDateTimeFormat;
 import static org.apache.iotdb.db.queryengine.plan.parser.ASTVisitor.parseIdentifier;
 import static org.apache.iotdb.db.queryengine.plan.parser.ASTVisitor.parseNodeString;
 import static org.apache.iotdb.db.queryengine.plan.parser.ASTVisitor.parseStringLiteral;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AnchorPattern.Type.PARTITION_END;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AnchorPattern.Type.PARTITION_START;
 import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AsofJoinOn.constructAsofJoinOn;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch.ALL_OMIT_EMPTY;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch.ALL_SHOW_EMPTY;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch.ALL_WITH_UNMATCHED;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternRecognitionRelation.RowsPerMatch.ONE;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo.skipPastLastRow;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo.skipToFirst;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo.skipToLast;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo.skipToNextRow;
 import static org.apache.iotdb.db.queryengine.plan.relational.sql.util.QueryUtil.selectList;
 import static org.apache.iotdb.db.queryengine.plan.relational.sql.util.QueryUtil.table;
 import static org.apache.iotdb.db.utils.TimestampPrecisionUtils.currPrecision;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/rewrite/ShowRewrite.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/rewrite/ShowRewrite.java
index 9d4a66a1cf9..a6c933efedc 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/rewrite/ShowRewrite.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/rewrite/ShowRewrite.java
@@ -29,13 +29,13 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Parameter;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Select;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SingleColumn;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Statement;
 import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.StatementAnalyzerFactory;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AstVisitor;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CountStatement;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Select;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowExternalService;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowQueriesStatement;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowStatement;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/CommonQuerySqlFormatter.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/CommonQuerySqlFormatter.java
index 762200bf1a3..714bcdccc5c 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/CommonQuerySqlFormatter.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/CommonQuerySqlFormatter.java
@@ -22,22 +22,34 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.util;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AliasedRelation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AllColumns;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.CommonQueryAstVisitor;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Except;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Fill;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Intersect;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Join;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.JoinCriteria;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Limit;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Offset;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.OrderBy;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Query;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuerySpecification;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Row;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RowPattern;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Select;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SingleColumn;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableFunctionArgument;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableFunctionInvocation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableFunctionTableArgument;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableSubquery;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Union;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Values;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WithQuery;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.util.ExpressionFormatter;
 import org.apache.iotdb.db.node_commons.plan.statement.component.FillPolicy;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.JoinOn;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.JoinUsing;
@@ -45,6 +57,7 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.NaturalJoin;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Strings;
+import com.google.errorprone.annotations.CanIgnoreReturnValue;
 
 import java.util.Iterator;
 import java.util.List;
@@ -52,15 +65,32 @@ import java.util.List;
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.collect.ImmutableList.toImmutableList;
 import static com.google.common.collect.Iterables.getOnlyElement;
+import static java.util.Objects.requireNonNull;
 import static java.util.stream.Collectors.joining;
 import static org.apache.iotdb.db.node_commons.plan.relational.sql.util.ExpressionFormatter.formatOrderBy;
+import static org.apache.iotdb.db.queryengine.plan.relational.sql.util.RowPatternFormatter.formatPattern;
 
 public class CommonQuerySqlFormatter implements CommonQueryAstVisitor<Void, Integer> {
 
-  protected final SqlFormatter.SqlBuilder builder;
+  protected static final String INDENT = "   ";
+  protected final SqlBuilder builder;
 
   public CommonQuerySqlFormatter(StringBuilder builder) {
-    this.builder = new SqlFormatter.SqlBuilder(builder);
+    this.builder = new SqlBuilder(builder);
+  }
+
+  protected static String formatName(Identifier identifier) {
+    return ExpressionFormatter.formatExpression(identifier);
+  }
+
+  public static String formatName(QualifiedName name) {
+    return name.getOriginalParts().stream()
+        .map(CommonQuerySqlFormatter::formatName)
+        .collect(joining("."));
+  }
+
+  protected static String formatExpression(Expression expression) {
+    return ExpressionFormatter.formatExpression(expression);
   }
 
   @Override
@@ -71,7 +101,7 @@ public class CommonQuerySqlFormatter implements CommonQueryAstVisitor<Void, Inte
   @Override
   public Void visitExpression(Expression node, Integer indent) {
     checkArgument(indent == 0, "visitExpression should only be called at root");
-    builder.append(SqlFormatter.formatExpression(node));
+    builder.append(formatExpression(node));
     return null;
   }
 
@@ -88,7 +118,7 @@ public class CommonQuerySqlFormatter implements CommonQueryAstVisitor<Void, Inte
               Iterator<WithQuery> queries = with.getQueries().iterator();
               while (queries.hasNext()) {
                 WithQuery query = queries.next();
-                append(indent, SqlFormatter.formatName(query.getName()));
+                append(indent, formatName(query.getName()));
                 query
                     .getColumnNames()
                     .ifPresent(columnNames -> appendAliasColumns(builder, columnNames));
@@ -113,7 +143,7 @@ public class CommonQuerySqlFormatter implements CommonQueryAstVisitor<Void, Inte
     append(indent, "FILL METHOD ").append(node.getFillMethod().name());
 
     if (node.getFillMethod() == FillPolicy.CONSTANT) {
-      builder.append(SqlFormatter.formatExpression(node.getFillValue().get()));
+      builder.append(formatExpression(node.getFillValue().get()));
     } else if (node.getFillMethod() == FillPolicy.LINEAR) {
       node.getTimeColumnIndex()
           .ifPresent(index -> builder.append(" TIME_COLUMN ").append(String.valueOf(index)));
@@ -124,7 +154,7 @@ public class CommonQuerySqlFormatter implements CommonQueryAstVisitor<Void, Inte
                       .append(" FILL_GROUP ")
                       .append(
                           elements.stream()
-                              .map(SqlFormatter::formatExpression)
+                              .map(CommonQuerySqlFormatter::formatExpression)
                               .collect(joining(", "))));
     } else if (node.getFillMethod() == FillPolicy.PREVIOUS) {
       node.getTimeBound()
@@ -138,7 +168,7 @@ public class CommonQuerySqlFormatter implements CommonQueryAstVisitor<Void, Inte
                       .append(" FILL_GROUP ")
                       .append(
                           elements.stream()
-                              .map(SqlFormatter::formatExpression)
+                              .map(CommonQuerySqlFormatter::formatExpression)
                               .collect(joining(", "))));
     } else {
       throw new IllegalArgumentException("Unknown fill method: " + node.getFillMethod());
@@ -154,29 +184,26 @@ public class CommonQuerySqlFormatter implements CommonQueryAstVisitor<Void, Inte
 
   @Override
   public Void visitOffset(Offset node, Integer indent) {
-    append(indent, "OFFSET ")
-        .append(SqlFormatter.formatExpression(node.getRowCount()))
-        .append(" ROWS\n");
+    append(indent, "OFFSET ").append(formatExpression(node.getRowCount())).append(" ROWS\n");
     return null;
   }
 
   @Override
   public Void visitLimit(Limit node, Integer indent) {
-    append(indent, "LIMIT ").append(SqlFormatter.formatExpression(node.getRowCount())).append('\n');
+    append(indent, "LIMIT ").append(formatExpression(node.getRowCount())).append('\n');
     return null;
   }
 
   @Override
   public Void visitSingleColumn(SingleColumn node, Integer indent) {
-    builder.append(SqlFormatter.formatExpression(node.getExpression()));
-    node.getAlias().ifPresent(alias -> builder.append(' ').append(SqlFormatter.formatName(alias)));
+    builder.append(formatExpression(node.getExpression()));
+    node.getAlias().ifPresent(alias -> builder.append(' ').append(formatName(alias)));
     return null;
   }
 
   @Override
   public Void visitAllColumns(AllColumns node, Integer indent) {
-    node.getTarget()
-        .ifPresent(value -> builder.append(SqlFormatter.formatExpression(value)).append("."));
+    node.getTarget().ifPresent(value -> builder.append(formatExpression(value)).append("."));
     builder.append("*");
 
     if (!node.getAliases().isEmpty()) {
@@ -186,7 +213,7 @@ public class CommonQuerySqlFormatter implements CommonQueryAstVisitor<Void, Inte
               Joiner.on(", ")
                   .join(
                       node.getAliases().stream()
-                          .map(SqlFormatter::formatName)
+                          .map(CommonQuerySqlFormatter::formatName)
                           .collect(toImmutableList())))
           .append(")");
     }
@@ -222,7 +249,7 @@ public class CommonQuerySqlFormatter implements CommonQueryAstVisitor<Void, Inte
         builder.append(" USING (").append(Joiner.on(", ").join(using.getColumns())).append(")");
       } else if (criteria instanceof JoinOn) {
         JoinOn on = (JoinOn) criteria;
-        builder.append(" ON ").append(SqlFormatter.formatExpression(on.getExpression()));
+        builder.append(" ON ").append(formatExpression(on.getExpression()));
       } else if (!(criteria instanceof NaturalJoin)) {
         throw new UnsupportedOperationException("unknown join criteria: " + criteria);
       }
@@ -239,7 +266,7 @@ public class CommonQuerySqlFormatter implements CommonQueryAstVisitor<Void, Inte
   public Void visitAliasedRelation(AliasedRelation node, Integer indent) {
     processRelationSuffix(node.getRelation(), indent);
 
-    builder.append(' ').append(SqlFormatter.formatName(node.getAlias()));
+    builder.append(' ').append(formatName(node.getAlias()));
     appendAliasColumns(builder, node.getColumnNames());
 
     return null;
@@ -252,7 +279,7 @@ public class CommonQuerySqlFormatter implements CommonQueryAstVisitor<Void, Inte
     boolean first = true;
     for (Expression row : node.getRows()) {
       builder.append("\n").append(indentString(indent)).append(first ? "  " : ", ");
-      builder.append(SqlFormatter.formatExpression(row));
+      builder.append(formatExpression(row));
       first = false;
     }
     builder.append('\n');
@@ -316,12 +343,12 @@ public class CommonQuerySqlFormatter implements CommonQueryAstVisitor<Void, Inte
     throw new UnsupportedOperationException("unsupported relation: " + relation);
   }
 
-  protected SqlFormatter.SqlBuilder append(int indent, String value) {
+  protected SqlBuilder append(int indent, String value) {
     return builder.append(indentString(indent)).append(value);
   }
 
   protected static String indentString(int indent) {
-    return Strings.repeat(SqlFormatter.INDENT, indent);
+    return Strings.repeat(INDENT, indent);
   }
 
   protected void formatDefinitionList(List<String> elements, int indent) {
@@ -336,11 +363,226 @@ public class CommonQuerySqlFormatter implements CommonQueryAstVisitor<Void, Inte
     }
   }
 
-  protected void appendAliasColumns(SqlFormatter.SqlBuilder builder, List<Identifier> columns) {
+  protected void appendAliasColumns(SqlBuilder builder, List<Identifier> columns) {
     if ((columns != null) && !columns.isEmpty()) {
       String formattedColumns =
-          columns.stream().map(SqlFormatter::formatName).collect(joining(", "));
+          columns.stream().map(CommonQuerySqlFormatter::formatName).collect(joining(", "));
       builder.append(" (").append(formattedColumns).append(')');
     }
   }
+
+  @Override
+  public Void visitRowPattern(RowPattern node, Integer indent) {
+    checkArgument(indent == 0, "visitRowPattern should only be called at root");
+    builder.append(formatPattern(node));
+    return null;
+  }
+
+  @Override
+  public Void visitQuerySpecification(QuerySpecification node, Integer indent) {
+    process(node.getSelect(), indent);
+
+    node.getFrom()
+        .ifPresent(
+            from -> {
+              append(indent, "FROM");
+              builder.append('\n');
+              append(indent, "  ");
+              process(from, indent);
+            });
+
+    builder.append('\n');
+
+    node.getWhere()
+        .ifPresent(where -> append(indent, "WHERE " + formatExpression(where)).append('\n'));
+
+    node.getGroupBy()
+        .ifPresent(
+            groupBy ->
+                append(
+                        indent,
+                        "GROUP BY "
+                            + (groupBy.isDistinct() ? " DISTINCT " : "")
+                            + org.apache.iotdb.db.node_commons.plan.relational.sql.util
+                                .ExpressionFormatter.formatGroupBy(groupBy.getGroupingElements()))
+                    .append('\n'));
+
+    node.getHaving()
+        .ifPresent(having -> append(indent, "HAVING " + formatExpression(having)).append('\n'));
+
+    node.getOrderBy().ifPresent(orderBy -> process(orderBy, indent));
+    node.getOffset().ifPresent(offset -> process(offset, indent));
+    node.getLimit().ifPresent(limit -> process(limit, indent));
+    return null;
+  }
+
+  @Override
+  public Void visitSelect(Select node, Integer indent) {
+    append(indent, "SELECT");
+    if (node.isDistinct()) {
+      builder.append(" DISTINCT");
+    }
+
+    if (node.getSelectItems().size() > 1) {
+      boolean first = true;
+      for (org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SelectItem item :
+          node.getSelectItems()) {
+        builder.append("\n").append(indentString(indent)).append(first ? "  " : ", ");
+        process(item, indent);
+        first = false;
+      }
+    } else {
+      builder.append(' ');
+      process(com.google.common.collect.Iterables.getOnlyElement(node.getSelectItems()), indent);
+    }
+
+    builder.append('\n');
+
+    return null;
+  }
+
+  @Override
+  public Void visitTable(Table node, Integer indent) {
+    builder.append(formatName(node.getName()));
+    return null;
+  }
+
+  @Override
+  public Void visitUnion(Union node, Integer indent) {
+    Iterator<Relation> relations = node.getRelations().iterator();
+
+    while (relations.hasNext()) {
+      processRelation(relations.next(), indent);
+
+      if (relations.hasNext()) {
+        builder.append("UNION ");
+        if (!node.isDistinct()) {
+          builder.append("ALL ");
+        }
+      }
+    }
+
+    return null;
+  }
+
+  @Override
+  public Void visitExcept(Except node, Integer indent) {
+    processRelation(node.getLeft(), indent);
+
+    builder.append("EXCEPT ");
+    if (!node.isDistinct()) {
+      builder.append("ALL ");
+    }
+
+    processRelation(node.getRight(), indent);
+
+    return null;
+  }
+
+  @Override
+  public Void visitIntersect(Intersect node, Integer indent) {
+    Iterator<Relation> relations = node.getRelations().iterator();
+
+    while (relations.hasNext()) {
+      processRelation(relations.next(), indent);
+
+      if (relations.hasNext()) {
+        builder.append("INTERSECT ");
+        if (!node.isDistinct()) {
+          builder.append("ALL ");
+        }
+      }
+    }
+
+    return null;
+  }
+
+  @Override
+  public Void visitTableFunctionInvocation(TableFunctionInvocation node, Integer indent) {
+    append(indent, "TABLE(");
+    appendTableFunctionInvocation(node, indent + 1);
+    builder.append(")");
+    return null;
+  }
+
+  @Override
+  public Void visitTableArgument(TableFunctionTableArgument node, Integer indent) {
+    Relation relation = node.getTable();
+    Node unaliased =
+        relation instanceof AliasedRelation ? ((AliasedRelation) relation).getRelation() : relation;
+    if (unaliased instanceof TableSubquery) {
+      unaliased = ((TableSubquery) unaliased).getQuery();
+    }
+    builder.append("TABLE(");
+    process(unaliased, indent);
+    builder.append(")");
+    if (relation instanceof AliasedRelation) {
+      AliasedRelation aliasedRelation = (AliasedRelation) relation;
+      builder.append(" AS ").append(formatName(aliasedRelation.getAlias()));
+      appendAliasColumns(builder, aliasedRelation.getColumnNames());
+    }
+    if (node.getPartitionBy().isPresent()) {
+      builder.append("\n");
+      append(indent, "PARTITION BY ")
+          .append(
+              node.getPartitionBy().get().stream()
+                  .map(CommonQuerySqlFormatter::formatExpression)
+                  .collect(joining(", ")));
+    }
+    node.getOrderBy()
+        .ifPresent(
+            orderBy -> {
+              builder.append("\n");
+              append(indent, formatOrderBy(orderBy));
+            });
+
+    return null;
+  }
+
+  private void appendTableFunctionInvocation(TableFunctionInvocation node, Integer indent) {
+    builder.append(formatName(node.getName())).append("(\n");
+    appendTableFunctionArguments(node.getArguments(), indent + 1);
+    builder.append(")");
+  }
+
+  private void appendTableFunctionArguments(List<TableFunctionArgument> arguments, int indent) {
+    for (int i = 0; i < arguments.size(); i++) {
+      TableFunctionArgument argument = arguments.get(i);
+      if (argument.getName().isPresent()) {
+        append(indent, formatName(argument.getName().get()));
+        builder.append(" => ");
+      } else {
+        append(indent, "");
+      }
+      Node value = argument.getValue();
+      if (value instanceof Expression) {
+        builder.append(formatExpression((Expression) value));
+      } else {
+        process(value, indent + 1);
+      }
+      if (i < arguments.size() - 1) {
+        builder.append(",\n");
+      }
+    }
+  }
+
+  protected static class SqlBuilder {
+    private final StringBuilder builder;
+
+    public SqlBuilder(StringBuilder builder) {
+      this.builder = requireNonNull(builder, "builder is null");
+    }
+
+    @CanIgnoreReturnValue
+    public SqlBuilder append(CharSequence value) {
+      builder.append(value);
+      return this;
+    }
+
+    @CanIgnoreReturnValue
+    public SqlBuilder append(char c) {
+      builder.append(c);
+      return this;
+    }
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/DataNodeSqlFormatter.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/DataNodeSqlFormatter.java
index a57b5893510..0ac347699f1 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/DataNodeSqlFormatter.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/DataNodeSqlFormatter.java
@@ -19,12 +19,11 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.sql.util;
 
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AliasedRelation;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternRecognitionRelation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableSubquery;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AddColumn;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AlterDB;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AlterPipe;
@@ -47,20 +46,14 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropPipePlugin;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropSubscription;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropTable;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropTopic;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Except;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Explain;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ExplainAnalyze;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Insert;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Intersect;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.LoadTsFile;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternRecognitionRelation;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Property;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.QuerySpecification;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RelationalAuthorStatement;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RenameColumn;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RenameTable;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RowPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Select;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetColumnComment;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetProperties;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetTableComment;
@@ -80,277 +73,27 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowVariables;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowVersion;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StartPipe;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StopPipe;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Table;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.TableFunctionArgument;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.TableFunctionInvocation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.TableFunctionTableArgument;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Union;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Update;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.UpdateAssignment;
 
 import com.google.common.base.Joiner;
 
-import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
 
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkState;
 import static java.util.stream.Collectors.joining;
-import static org.apache.iotdb.db.node_commons.plan.relational.sql.util.ExpressionFormatter.formatOrderBy;
-import static org.apache.iotdb.db.queryengine.plan.relational.sql.util.RowPatternFormatter.formatPattern;
 
-public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
+public final class DataNodeSqlFormatter extends CommonQuerySqlFormatter
     implements AstVisitor<Void, Integer> {
 
-  public DataNodeSqlFormatter(StringBuilder builder) {
-    super(builder);
-  }
-
-  @Override
-  public Void visitRowPattern(RowPattern node, Integer indent) {
-    checkArgument(indent == 0, "visitRowPattern should only be called at root");
-    builder.append(formatPattern(node));
-    return null;
-  }
-
-  @Override
-  public Void visitQuerySpecification(QuerySpecification node, Integer indent) {
-    process(node.getSelect(), indent);
-
-    node.getFrom()
-        .ifPresent(
-            from -> {
-              append(indent, "FROM");
-              builder.append('\n');
-              append(indent, "  ");
-              process(from, indent);
-            });
-
-    builder.append('\n');
-
-    node.getWhere()
-        .ifPresent(
-            where -> append(indent, "WHERE " + SqlFormatter.formatExpression(where)).append('\n'));
-
-    node.getGroupBy()
-        .ifPresent(
-            groupBy ->
-                append(
-                        indent,
-                        "GROUP BY "
-                            + (groupBy.isDistinct() ? " DISTINCT " : "")
-                            + org.apache.iotdb.db.node_commons.plan.relational.sql.util
-                                .ExpressionFormatter.formatGroupBy(groupBy.getGroupingElements()))
-                    .append('\n'));
-
-    node.getHaving()
-        .ifPresent(
-            having ->
-                append(indent, "HAVING " + SqlFormatter.formatExpression(having)).append('\n'));
-
-    node.getOrderBy().ifPresent(orderBy -> process(orderBy, indent));
-    node.getOffset().ifPresent(offset -> process(offset, indent));
-    node.getLimit().ifPresent(limit -> process(limit, indent));
-    return null;
-  }
-
-  @Override
-  public Void visitSelect(Select node, Integer indent) {
-    append(indent, "SELECT");
-    if (node.isDistinct()) {
-      builder.append(" DISTINCT");
-    }
-
-    if (node.getSelectItems().size() > 1) {
-      boolean first = true;
-      for (org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SelectItem item :
-          node.getSelectItems()) {
-        builder.append("\n").append(indentString(indent)).append(first ? "  " : ", ");
-        process(item, indent);
-        first = false;
-      }
-    } else {
-      builder.append(' ');
-      process(com.google.common.collect.Iterables.getOnlyElement(node.getSelectItems()), indent);
-    }
-
-    builder.append('\n');
-
-    return null;
-  }
-
-  @Override
-  public Void visitTable(Table node, Integer indent) {
-    builder.append(SqlFormatter.formatName(node.getName()));
-    return null;
-  }
-
-  @Override
-  public Void visitPatternRecognitionRelation(PatternRecognitionRelation node, Integer indent) {
-    processRelationSuffix(node.getInput(), indent);
-
-    builder.append(" MATCH_RECOGNIZE (\n");
-    if (!node.getPartitionBy().isEmpty()) {
-      append(indent + 1, "PARTITION BY ")
-          .append(
-              node.getPartitionBy().stream()
-                  .map(
-                      org.apache.iotdb.db.node_commons.plan.relational.sql.util.ExpressionFormatter
-                          ::formatExpression)
-                  .collect(joining(", ")))
-          .append("\n");
-    }
-    if (node.getOrderBy().isPresent()) {
-      process(node.getOrderBy().get(), indent + 1);
-    }
-    if (!node.getMeasures().isEmpty()) {
-      append(indent + 1, "MEASURES");
-      formatDefinitionList(
-          node.getMeasures().stream()
-              .map(
-                  measure ->
-                      SqlFormatter.formatExpression(measure.getExpression())
-                          + " AS "
-                          + SqlFormatter.formatExpression(measure.getName()))
-              .collect(com.google.common.collect.ImmutableList.toImmutableList()),
-          indent + 2);
-    }
-    if (node.getRowsPerMatch().isPresent()) {
-      String rowsPerMatch;
-      switch (node.getRowsPerMatch().get()) {
-        case ONE:
-          rowsPerMatch = "ONE ROW PER MATCH";
-          break;
-        case ALL_SHOW_EMPTY:
-          rowsPerMatch = "ALL ROWS PER MATCH SHOW EMPTY MATCHES";
-          break;
-        case ALL_OMIT_EMPTY:
-          rowsPerMatch = "ALL ROWS PER MATCH OMIT EMPTY MATCHES";
-          break;
-        case ALL_WITH_UNMATCHED:
-          rowsPerMatch = "ALL ROWS PER MATCH WITH UNMATCHED ROWS";
-          break;
-        default:
-          throw new IllegalStateException(
-              "unexpected rowsPerMatch: " + node.getRowsPerMatch().get());
-      }
-      append(indent + 1, rowsPerMatch).append("\n");
-    }
-    if (node.getAfterMatchSkipTo().isPresent()) {
-      String skipTo;
-      switch (node.getAfterMatchSkipTo().get().getPosition()) {
-        case PAST_LAST:
-          skipTo = "AFTER MATCH SKIP PAST LAST ROW";
-          break;
-        case NEXT:
-          skipTo = "AFTER MATCH SKIP TO NEXT ROW";
-          break;
-        case LAST:
-          checkState(
-              node.getAfterMatchSkipTo().get().getIdentifier().isPresent(),
-              "missing identifier in AFTER MATCH SKIP TO LAST");
-          skipTo =
-              "AFTER MATCH SKIP TO LAST "
-                  + SqlFormatter.formatExpression(
-                      node.getAfterMatchSkipTo().get().getIdentifier().get());
-          break;
-        case FIRST:
-          checkState(
-              node.getAfterMatchSkipTo().get().getIdentifier().isPresent(),
-              "missing identifier in AFTER MATCH SKIP TO FIRST");
-          skipTo =
-              "AFTER MATCH SKIP TO FIRST "
-                  + SqlFormatter.formatExpression(
-                      node.getAfterMatchSkipTo().get().getIdentifier().get());
-          break;
-        default:
-          throw new IllegalStateException("unexpected skipTo: " + node.getAfterMatchSkipTo().get());
-      }
-      append(indent + 1, skipTo).append("\n");
-    }
-    append(indent + 1, "PATTERN (").append(formatPattern(node.getPattern())).append(")\n");
-    if (!node.getSubsets().isEmpty()) {
-      append(indent + 1, "SUBSET");
-      formatDefinitionList(
-          node.getSubsets().stream()
-              .map(
-                  subset ->
-                      SqlFormatter.formatExpression(subset.getName())
-                          + " = "
-                          + subset.getIdentifiers().stream()
-                              .map(
-                                  org.apache.iotdb.db.node_commons.plan.relational.sql.util
-                                          .ExpressionFormatter
-                                      ::formatExpression)
-                              .collect(joining(", ", "(", ")")))
-              .collect(com.google.common.collect.ImmutableList.toImmutableList()),
-          indent + 2);
-    }
-    append(indent + 1, "DEFINE");
-    formatDefinitionList(
-        node.getVariableDefinitions().stream()
-            .map(
-                variable ->
-                    SqlFormatter.formatExpression(variable.getName())
-                        + " AS "
-                        + SqlFormatter.formatExpression(variable.getExpression()))
-            .collect(com.google.common.collect.ImmutableList.toImmutableList()),
-        indent + 2);
-
-    builder.append(")");
-
-    return null;
-  }
-
-  @Override
-  public Void visitUnion(Union node, Integer indent) {
-    Iterator<Relation> relations = node.getRelations().iterator();
-
-    while (relations.hasNext()) {
-      processRelation(relations.next(), indent);
-
-      if (relations.hasNext()) {
-        builder.append("UNION ");
-        if (!node.isDistinct()) {
-          builder.append("ALL ");
-        }
-      }
-    }
-
-    return null;
-  }
-
-  @Override
-  public Void visitExcept(Except node, Integer indent) {
-    processRelation(node.getLeft(), indent);
-
-    builder.append("EXCEPT ");
-    if (!node.isDistinct()) {
-      builder.append("ALL ");
-    }
-
-    processRelation(node.getRight(), indent);
-
-    return null;
+  public static String formatDataNodeSql(Node root) {
+    StringBuilder builder = new StringBuilder();
+    new DataNodeSqlFormatter(builder).process(root, 0);
+    return builder.toString();
   }
 
-  @Override
-  public Void visitIntersect(Intersect node, Integer indent) {
-    Iterator<Relation> relations = node.getRelations().iterator();
-
-    while (relations.hasNext()) {
-      processRelation(relations.next(), indent);
-
-      if (relations.hasNext()) {
-        builder.append("INTERSECT ");
-        if (!node.isDistinct()) {
-          builder.append("ALL ");
-        }
-      }
-    }
-
-    return null;
+  private DataNodeSqlFormatter(StringBuilder builder) {
+    super(builder);
   }
 
   @Override
@@ -401,7 +144,8 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
       builder.append(" DETAILS");
     }
 
-    node.getDbName().ifPresent(db -> builder.append(" FROM ").append(SqlFormatter.formatName(db)));
+    node.getDbName()
+        .ifPresent(db -> builder.append(" FROM ").append(CommonQuerySqlFormatter.formatName(db)));
 
     return null;
   }
@@ -456,9 +200,13 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
 
   @Override
   public Void visitDelete(Delete node, Integer indent) {
-    builder.append("DELETE FROM ").append(SqlFormatter.formatName(node.getTable().getName()));
+    builder
+        .append("DELETE FROM ")
+        .append(CommonQuerySqlFormatter.formatName(node.getTable().getName()));
     node.getWhere()
-        .ifPresent(where -> builder.append(" WHERE ").append(SqlFormatter.formatExpression(where)));
+        .ifPresent(
+            where ->
+                builder.append(" WHERE ").append(CommonQuerySqlFormatter.formatExpression(where)));
     return null;
   }
 
@@ -490,7 +238,7 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
     if (node.isExists()) {
       builder.append("IF EXISTS ");
     }
-    builder.append(SqlFormatter.formatName(node.getDbName()));
+    builder.append(CommonQuerySqlFormatter.formatName(node.getDbName()));
     return null;
   }
 
@@ -500,7 +248,7 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
     if (node.isIfNotExists()) {
       builder.append("IF NOT EXISTS ");
     }
-    String tableName = SqlFormatter.formatName(node.getName());
+    String tableName = CommonQuerySqlFormatter.formatName(node.getName());
     builder.append(tableName).append(" (\n");
 
     String elementIndent = indentString(indent + 1);
@@ -534,7 +282,7 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
       builder.append("OR REPLACE ");
     }
     builder.append("VIEW ");
-    String tableName = SqlFormatter.formatName(node.getName());
+    String tableName = CommonQuerySqlFormatter.formatName(node.getName());
     builder.append(tableName).append(" (\n");
 
     String elementIndent = indentString(indent + 1);
@@ -572,7 +320,7 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
     if (node.isExists()) {
       builder.append("IF EXISTS ");
     }
-    builder.append(SqlFormatter.formatName(node.getTableName()));
+    builder.append(CommonQuerySqlFormatter.formatName(node.getTableName()));
 
     return null;
   }
@@ -586,9 +334,9 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
     }
 
     builder
-        .append(SqlFormatter.formatName(node.getSource()))
+        .append(CommonQuerySqlFormatter.formatName(node.getSource()))
         .append(" RENAME TO ")
-        .append(SqlFormatter.formatName(node.getTarget()));
+        .append(CommonQuerySqlFormatter.formatName(node.getTarget()));
 
     return null;
   }
@@ -610,7 +358,7 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
     }
 
     builder
-        .append(SqlFormatter.formatName(node.getName()))
+        .append(CommonQuerySqlFormatter.formatName(node.getName()))
         .append(" SET PROPERTIES ")
         .append(joinProperties(node.getProperties()));
 
@@ -625,15 +373,15 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
       builder.append("IF EXISTS ");
     }
 
-    builder.append(SqlFormatter.formatName(node.getTable())).append("RENAME COLUMN ");
+    builder.append(CommonQuerySqlFormatter.formatName(node.getTable())).append("RENAME COLUMN ");
     if (node.columnIfExists()) {
       builder.append("IF EXISTS ");
     }
 
     builder
-        .append(SqlFormatter.formatName(node.getSource()))
+        .append(CommonQuerySqlFormatter.formatName(node.getSource()))
         .append(" TO ")
-        .append(SqlFormatter.formatName(node.getTarget()));
+        .append(CommonQuerySqlFormatter.formatName(node.getTarget()));
 
     return null;
   }
@@ -646,12 +394,12 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
       builder.append("IF EXISTS ");
     }
 
-    builder.append(SqlFormatter.formatName(node.getTable())).append("DROP COLUMN ");
+    builder.append(CommonQuerySqlFormatter.formatName(node.getTable())).append("DROP COLUMN ");
     if (node.columnIfExists()) {
       builder.append("IF EXISTS ");
     }
 
-    builder.append(SqlFormatter.formatName(node.getField()));
+    builder.append(CommonQuerySqlFormatter.formatName(node.getField()));
 
     return null;
   }
@@ -664,7 +412,7 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
       builder.append("IF EXISTS ");
     }
 
-    builder.append(SqlFormatter.formatName(node.getTableName())).append("ADD COLUMN ");
+    builder.append(CommonQuerySqlFormatter.formatName(node.getTableName())).append("ADD COLUMN ");
     if (node.columnIfNotExists()) {
       builder.append("IF NOT EXISTS ");
     }
@@ -679,7 +427,7 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
     builder
         .append("COMMENT ON")
         .append(node.isView() ? " VIEW " : " TABLE ")
-        .append(SqlFormatter.formatName(node.getTableName()))
+        .append(CommonQuerySqlFormatter.formatName(node.getTableName()))
         .append(" IS ")
         .append(node.getComment());
 
@@ -690,9 +438,9 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
   public Void visitSetColumnComment(SetColumnComment node, Integer indent) {
     builder
         .append("COMMENT ON COLUMN ")
-        .append(SqlFormatter.formatName(node.getTable()))
+        .append(CommonQuerySqlFormatter.formatName(node.getTable()))
         .append(".")
-        .append(SqlFormatter.formatName(node.getField()))
+        .append(CommonQuerySqlFormatter.formatName(node.getField()))
         .append(" IS ")
         .append(node.getComment());
     return null;
@@ -700,7 +448,7 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
 
   @Override
   public Void visitInsert(Insert node, Integer indent) {
-    builder.append("INSERT INTO ").append(SqlFormatter.formatName(node.getTarget()));
+    builder.append("INSERT INTO ").append(CommonQuerySqlFormatter.formatName(node.getTarget()));
 
     node.getColumns()
         .ifPresent(
@@ -717,7 +465,7 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
   public Void visitUpdate(Update node, Integer indent) {
     builder
         .append("UPDATE ")
-        .append(SqlFormatter.formatName(node.getTable().getName()))
+        .append(CommonQuerySqlFormatter.formatName(node.getTable().getName()))
         .append(" SET");
     int setCounter = node.getAssignments().size() - 1;
     for (UpdateAssignment assignment : node.getAssignments()) {
@@ -726,7 +474,7 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
           .append(indentString(indent + 1))
           .append(((Identifier) assignment.getName()).getValue())
           .append(" = ")
-          .append(SqlFormatter.formatExpression(assignment.getValue()));
+          .append(CommonQuerySqlFormatter.formatExpression(assignment.getValue()));
       if (setCounter > 0) {
         builder.append(",");
       }
@@ -739,7 +487,7 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
                     .append("\n")
                     .append(indentString(indent))
                     .append("WHERE ")
-                    .append(SqlFormatter.formatExpression(where)));
+                    .append(CommonQuerySqlFormatter.formatExpression(where)));
     return null;
   }
 
@@ -1278,48 +1026,6 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
     return null;
   }
 
-  @Override
-  public Void visitTableFunctionInvocation(TableFunctionInvocation node, Integer indent) {
-    append(indent, "TABLE(");
-    appendTableFunctionInvocation(node, indent + 1);
-    builder.append(")");
-    return null;
-  }
-
-  @Override
-  public Void visitTableArgument(TableFunctionTableArgument node, Integer indent) {
-    Relation relation = node.getTable();
-    Node unaliased =
-        relation instanceof AliasedRelation ? ((AliasedRelation) relation).getRelation() : relation;
-    if (unaliased instanceof TableSubquery) {
-      unaliased = ((TableSubquery) unaliased).getQuery();
-    }
-    builder.append("TABLE(");
-    process(unaliased, indent);
-    builder.append(")");
-    if (relation instanceof AliasedRelation) {
-      AliasedRelation aliasedRelation = (AliasedRelation) relation;
-      builder.append(" AS ").append(SqlFormatter.formatName(aliasedRelation.getAlias()));
-      appendAliasColumns(builder, aliasedRelation.getColumnNames());
-    }
-    if (node.getPartitionBy().isPresent()) {
-      builder.append("\n");
-      append(indent, "PARTITION BY ")
-          .append(
-              node.getPartitionBy().get().stream()
-                  .map(SqlFormatter::formatExpression)
-                  .collect(joining(", ")));
-    }
-    node.getOrderBy()
-        .ifPresent(
-            orderBy -> {
-              builder.append("\n");
-              append(indent, formatOrderBy(orderBy));
-            });
-
-    return null;
-  }
-
   @Override
   protected boolean needsParenthesesForRelationSuffix(Relation relation) {
     return super.needsParenthesesForRelationSuffix(relation)
@@ -1333,7 +1039,7 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
 
   @Override
   protected String formatSimpleTableRelationName(Relation relation) {
-    return SqlFormatter.formatName(((Table) relation).getName());
+    return CommonQuerySqlFormatter.formatName(((Table) relation).getName());
   }
 
   private String formatPropertiesMultiLine(List<Property> properties) {
@@ -1345,12 +1051,13 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
         properties.stream()
             .map(
                 element ->
-                    SqlFormatter.INDENT
-                        + SqlFormatter.formatName(element.getName())
+                    CommonQuerySqlFormatter.INDENT
+                        + CommonQuerySqlFormatter.formatName(element.getName())
                         + " = "
                         + (element.isSetToDefault()
                             ? "DEFAULT"
-                            : SqlFormatter.formatExpression(element.getNonDefaultValue())))
+                            : CommonQuerySqlFormatter.formatExpression(
+                                element.getNonDefaultValue())))
             .collect(joining(",\n"));
 
     return "\nWITH (\n" + propertyList + "\n)";
@@ -1359,7 +1066,7 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
   private String formatColumnDefinition(ColumnDefinition column) {
     StringBuilder stringBuilder =
         new StringBuilder()
-            .append(SqlFormatter.formatName(column.getName()))
+            .append(CommonQuerySqlFormatter.formatName(column.getName()))
             .append(" ")
             .append(column.getType())
             .append(" ")
@@ -1377,38 +1084,11 @@ public class DataNodeSqlFormatter extends CommonQuerySqlFormatter
     return properties.stream()
         .map(
             element ->
-                SqlFormatter.formatName(element.getName())
+                CommonQuerySqlFormatter.formatName(element.getName())
                     + " = "
                     + (element.isSetToDefault()
                         ? "DEFAULT"
-                        : SqlFormatter.formatExpression(element.getNonDefaultValue())))
+                        : CommonQuerySqlFormatter.formatExpression(element.getNonDefaultValue())))
         .collect(joining(", "));
   }
-
-  private void appendTableFunctionInvocation(TableFunctionInvocation node, Integer indent) {
-    builder.append(SqlFormatter.formatName(node.getName())).append("(\n");
-    appendTableFunctionArguments(node.getArguments(), indent + 1);
-    builder.append(")");
-  }
-
-  private void appendTableFunctionArguments(List<TableFunctionArgument> arguments, int indent) {
-    for (int i = 0; i < arguments.size(); i++) {
-      TableFunctionArgument argument = arguments.get(i);
-      if (argument.getName().isPresent()) {
-        append(indent, SqlFormatter.formatName(argument.getName().get()));
-        builder.append(" => ");
-      } else {
-        append(indent, "");
-      }
-      Node value = argument.getValue();
-      if (value instanceof Expression) {
-        builder.append(SqlFormatter.formatExpression((Expression) value));
-      } else {
-        process(value, indent + 1);
-      }
-      if (i < arguments.size() - 1) {
-        builder.append(",\n");
-      }
-    }
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/QueryUtil.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/QueryUtil.java
index fd65156ff1e..14edc4027ba 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/QueryUtil.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/QueryUtil.java
@@ -35,18 +35,18 @@ import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.OrderBy;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Query;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QueryBody;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuerySpecification;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Relation;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SearchedCaseExpression;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Select;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SelectItem;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SingleColumn;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.SortItem;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.StringLiteral;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Table;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.TableSubquery;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WhenClause;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.QuerySpecification;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Select;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Table;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WindowDefinition;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.WindowDefinition;
 
 import com.google.common.collect.ImmutableList;
 
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/RowPatternFormatter.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/RowPatternFormatter.java
index 52580801438..c25057d15a0 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/RowPatternFormatter.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/RowPatternFormatter.java
@@ -19,22 +19,22 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.sql.util;
 
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.AnchorPattern;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.CommonQueryAstVisitor;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.EmptyPattern;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ExcludedPattern;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.OneOrMoreQuantifier;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternAlternation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternConcatenation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternPermutation;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.PatternVariable;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QuantifiedPattern;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RangeQuantifier;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.RowPattern;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ZeroOrMoreQuantifier;
+import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.ZeroOrOneQuantifier;
 import org.apache.iotdb.db.node_commons.plan.relational.sql.util.ExpressionFormatter;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AnchorPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AstVisitor;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.EmptyPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ExcludedPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.OneOrMoreQuantifier;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternAlternation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternConcatenation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternPermutation;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.PatternVariable;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.QuantifiedPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RangeQuantifier;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RowPattern;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ZeroOrMoreQuantifier;
-import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ZeroOrOneQuantifier;
 
 import static java.util.stream.Collectors.joining;
 
@@ -45,7 +45,7 @@ public final class RowPatternFormatter {
     return new Formatter().process(pattern, null);
   }
 
-  public static class Formatter implements AstVisitor<String, Void> {
+  public static class Formatter implements CommonQueryAstVisitor<String, Void> {
     @Override
     public String visitNode(Node node, Void context) {
       throw new UnsupportedOperationException();
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/SqlFormatter.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/SqlFormatter.java
deleted file mode 100644
index 69bfe239750..00000000000
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/SqlFormatter.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.db.queryengine.plan.relational.sql.util;
-
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Expression;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Identifier;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.Node;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.ast.QualifiedName;
-import org.apache.iotdb.db.node_commons.plan.relational.sql.util.ExpressionFormatter;
-
-import com.google.errorprone.annotations.CanIgnoreReturnValue;
-
-import static java.util.Objects.requireNonNull;
-import static java.util.stream.Collectors.joining;
-
-public final class SqlFormatter {
-
-  protected static final String INDENT = "   ";
-
-  private SqlFormatter() {}
-
-  public static String formatSql(Node root) {
-    StringBuilder builder = new StringBuilder();
-    new DataNodeSqlFormatter(builder).process(root, 0);
-    return builder.toString();
-  }
-
-  static String formatName(Identifier identifier) {
-    return ExpressionFormatter.formatExpression(identifier);
-  }
-
-  public static String formatName(QualifiedName name) {
-    return name.getOriginalParts().stream().map(SqlFormatter::formatName).collect(joining("."));
-  }
-
-  static String formatExpression(Expression expression) {
-    return ExpressionFormatter.formatExpression(expression);
-  }
-
-  protected static class SqlBuilder {
-    private final StringBuilder builder;
-
-    public SqlBuilder(StringBuilder builder) {
-      this.builder = requireNonNull(builder, "builder is null");
-    }
-
-    @CanIgnoreReturnValue
-    public SqlBuilder append(CharSequence value) {
-      builder.append(value);
-      return this;
-    }
-
-    @CanIgnoreReturnValue
-    public SqlBuilder append(char c) {
-      builder.append(c);
-      return this;
-    }
-  }
-}