You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by we...@apache.org on 2026/04/17 07:36:41 UTC

(iotdb) branch master updated: Fix highestPriority of SHOW QUERIES are not set correctly (#17505)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 14c27bba99e Fix highestPriority of SHOW QUERIES are not set correctly (#17505)
14c27bba99e is described below

commit 14c27bba99ea7a67f53d62fde099b811d27e11cf
Author: Weihao Li <60...@users.noreply.github.com>
AuthorDate: Fri Apr 17 15:36:34 2026 +0800

    Fix highestPriority of SHOW QUERIES are not set correctly (#17505)
---
 .../plan/relational/analyzer/Analysis.java         | 13 +++--
 .../plan/relational/planner/RelationPlanner.java   |  1 +
 .../analyzer/NeedSetHighestPriorityTest.java       | 56 ++++++++++++++++++++++
 .../plan/relational/planner/PlanTester.java        |  4 ++
 4 files changed, 71 insertions(+), 3 deletions(-)

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 4a0fe9daa57..51499453743 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
@@ -62,7 +62,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.QuerySpecificatio
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RangeQuantifier;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Relation;
 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.Statement;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SubqueryExpression;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SubsetDefinition;
@@ -118,6 +117,7 @@ public class Analysis implements IAnalysis {
   private List<TEndPoint> redirectNodeList;
 
   @Nullable private Statement root;
+  private boolean needSetHighestPriority;
 
   private final Map<NodeRef<Parameter>, Expression> parameters;
 
@@ -268,6 +268,14 @@ public class Analysis implements IAnalysis {
     this.parameters = ImmutableMap.copyOf(requireNonNull(parameters, "parameters is null"));
   }
 
+  public void updateNeedSetHighestPriority(QualifiedObjectName tableName) {
+    if (needSetHighestPriority) {
+      return;
+    }
+    //  the database of table has been judged to be 'information_schema' in outer
+    needSetHighestPriority = InformationSchema.QUERIES.equals(tableName.getObjectName());
+  }
+
   public Map<NodeRef<Parameter>, Expression> getParameters() {
     return parameters;
   }
@@ -960,8 +968,7 @@ public class Analysis implements IAnalysis {
 
   @Override
   public boolean needSetHighestPriority() {
-    return root instanceof ShowStatement
-        && ((ShowStatement) root).getTableName().equals(InformationSchema.QUERIES);
+    return needSetHighestPriority;
   }
 
   @Override
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 47dc87499b9..457a03ab4a0 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
@@ -390,6 +390,7 @@ public class RelationPlanner extends AstVisitor<RelationPlan, Void> {
       tableScanNode =
           new InformationSchemaTableScanNode(
               idAllocator.genPlanNodeId(), qualifiedObjectName, outputSymbols, tableColumnSchema);
+      analysis.updateNeedSetHighestPriority(qualifiedObjectName);
     } else {
       tableScanNode =
           new DeviceTableScanNode(
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/NeedSetHighestPriorityTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/NeedSetHighestPriorityTest.java
new file mode 100644
index 00000000000..f3643da1f4b
--- /dev/null
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/NeedSetHighestPriorityTest.java
@@ -0,0 +1,56 @@
+/*
+ * 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.analyzer;
+
+import org.apache.iotdb.db.queryengine.plan.relational.planner.PlanTester;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertTrue;
+
+public class NeedSetHighestPriorityTest {
+
+  @Test
+  public void testShowQueriesNeedSetHighestPriority() {
+    final Analysis analysis = planAndGetAnalysis("show queries");
+    assertTrue(analysis.needSetHighestPriority());
+  }
+
+  @Test
+  public void testInformationSchemaQueriesNeedSetHighestPriority() {
+    final Analysis analysis = planAndGetAnalysis("select query_id from information_schema.queries");
+    assertTrue(analysis.needSetHighestPriority());
+  }
+
+  @Test
+  public void testNestedInformationSchemaQueriesNeedSetHighestPriority() {
+    final Analysis analysis =
+        planAndGetAnalysis(
+            "select * from (select query_id from information_schema.queries) t "
+                + "where t.query_id is not null");
+    assertTrue(analysis.needSetHighestPriority());
+  }
+
+  private Analysis planAndGetAnalysis(final String sql) {
+    PlanTester planTester = new PlanTester();
+    planTester.createPlan(sql);
+    return planTester.getAnalysis();
+  }
+}
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
index d7d4169a360..968b0d28de9 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
@@ -161,6 +161,10 @@ public class PlanTester {
     return plan;
   }
 
+  public Analysis getAnalysis() {
+    return analysis;
+  }
+
   public LogicalQueryPlan createPlan(
       SessionInfo sessionInfo,
       String sql,