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

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


The following commit(s) were added to refs/heads/table_disk_usage_statistics by 
this push:
     new 880718f393a fix
880718f393a is described below

commit 880718f393a48c9852cf7744a32c3e5873a082f6
Author: shuwenwei <[email protected]>
AuthorDate: Wed Dec 10 18:06:14 2025 +0800

    fix
---
 .../org/apache/iotdb/db/qp/sql/IdentifierParser.g4 |  1 +
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4   |  8 +++++
 .../antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4  |  4 +++
 .../db/queryengine/plan/parser/ASTVisitor.java     | 39 ++++++++++++++++++----
 .../plan/statement/component/OrderByComponent.java | 10 ++++++
 .../plan/statement/component/OrderByKey.java       |  5 +++
 .../plan/parser/StatementGeneratorTest.java        | 33 ++++++++++++++++++
 ...NodeSerdeTest.java => SourceNodeSerdeTest.java} |  2 +-
 8 files changed, 95 insertions(+), 7 deletions(-)

diff --git 
a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4
 
b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4
index 0a003d6fb71..d335ff61f5c 100644
--- 
a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4
+++ 
b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4
@@ -220,6 +220,7 @@ keyWords
     | SGLEVEL
     | SHOW
     | SINK
+    | SIZEINBYTES
     | SLIMIT
     | SOFFSET
     | SOURCE
diff --git 
a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 
b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
index e58d78deccf..13fcd52a458 100644
--- 
a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
+++ 
b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
@@ -963,6 +963,14 @@ sortKey
     : TIME
     | TIMESERIES
     | DEVICE
+    | QUERYID
+    | DATANODEID
+    | ELAPSEDTIME
+    | STATEMENT
+    | DATABASE
+    | REGIONID
+    | TIMEPARTITION
+    | SIZEINBYTES
     ;
 
 // ---- Fill Clause
diff --git 
a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4 
b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4
index 062cb6ae082..2c2a7664f56 100644
--- a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4
+++ b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4
@@ -802,6 +802,10 @@ SINK
     : S I N K
     ;
 
+SIZEINBYTES
+    : S I Z E I N B Y T E S
+    ;
+
 SLIMIT
     : S L I M I T
     ;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
index 65540a3a3c6..24fcaff853c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
@@ -1634,7 +1634,8 @@ public class ASTVisitor extends 
IoTDBSqlParserBaseVisitor<Statement> {
       queryStatement.setOrderByComponent(
           parseOrderByClause(
               ctx.orderByClause(),
-              ImmutableSet.of(OrderByKey.TIME, OrderByKey.DEVICE, 
OrderByKey.TIMESERIES)));
+              ImmutableSet.of(OrderByKey.TIME, OrderByKey.DEVICE, 
OrderByKey.TIMESERIES),
+              true));
     }
 
     // parse FILL
@@ -1937,7 +1938,9 @@ public class ASTVisitor extends 
IoTDBSqlParserBaseVisitor<Statement> {
   // ---- Order By Clause
   // all SortKeys should be contained by limitSet
   private OrderByComponent parseOrderByClause(
-      IoTDBSqlParser.OrderByClauseContext ctx, ImmutableSet<String> limitSet) {
+      IoTDBSqlParser.OrderByClauseContext ctx,
+      ImmutableSet<String> limitSet,
+      boolean allowExpression) {
     OrderByComponent orderByComponent = new OrderByComponent();
     Set<String> sortKeySet = new HashSet<>();
     for (IoTDBSqlParser.OrderByAttributeClauseContext 
orderByAttributeClauseContext :
@@ -1946,7 +1949,8 @@ public class ASTVisitor extends 
IoTDBSqlParserBaseVisitor<Statement> {
       if (orderByComponent.isUnique()) {
         break;
       }
-      SortItem sortItem = 
parseOrderByAttributeClause(orderByAttributeClauseContext, limitSet);
+      SortItem sortItem =
+          parseOrderByAttributeClause(orderByAttributeClauseContext, limitSet, 
allowExpression);
 
       String sortKey = sortItem.getSortKey();
       if (sortKeySet.contains(sortKey)) {
@@ -1965,7 +1969,9 @@ public class ASTVisitor extends 
IoTDBSqlParserBaseVisitor<Statement> {
   }
 
   private SortItem parseOrderByAttributeClause(
-      IoTDBSqlParser.OrderByAttributeClauseContext ctx, ImmutableSet<String> 
limitSet) {
+      IoTDBSqlParser.OrderByAttributeClauseContext ctx,
+      ImmutableSet<String> limitSet,
+      boolean allowExpression) {
     if (ctx.sortKey() != null) {
       String sortKey = ctx.sortKey().getText().toUpperCase();
       if (!limitSet.contains(sortKey)) {
@@ -1974,6 +1980,11 @@ public class ASTVisitor extends 
IoTDBSqlParserBaseVisitor<Statement> {
       }
       return new SortItem(sortKey, ctx.DESC() != null ? Ordering.DESC : 
Ordering.ASC);
     } else {
+      if (!allowExpression) {
+        throw new SemanticException(
+            "ORDER BY expression is not supported for current statement, 
supported sort key: "
+                + limitSet.toString());
+      }
       Expression sortExpression = parseExpression(ctx.expression(), true);
       return new SortItem(
           sortExpression,
@@ -3712,7 +3723,15 @@ public class ASTVisitor extends 
IoTDBSqlParserBaseVisitor<Statement> {
     // parse ORDER BY
     if (ctx.orderByClause() != null) {
       showQueriesStatement.setOrderByComponent(
-          parseOrderByClause(ctx.orderByClause(), 
ImmutableSet.of(OrderByKey.TIME)));
+          parseOrderByClause(
+              ctx.orderByClause(),
+              ImmutableSet.of(
+                  OrderByKey.TIME,
+                  OrderByKey.QUERYID,
+                  OrderByKey.DATANODEID,
+                  OrderByKey.ELAPSEDTIME,
+                  OrderByKey.STATEMENT),
+              false));
     }
 
     // parse LIMIT & OFFSET
@@ -3740,7 +3759,15 @@ public class ASTVisitor extends 
IoTDBSqlParserBaseVisitor<Statement> {
     // parse ORDER BY
     if (ctx.orderByClause() != null) {
       showDiskUsageStatement.setOrderByComponent(
-          parseOrderByClause(ctx.orderByClause(), ImmutableSet.of()));
+          parseOrderByClause(
+              ctx.orderByClause(),
+              ImmutableSet.of(
+                  OrderByKey.DATABASE,
+                  OrderByKey.DATANODEID,
+                  OrderByKey.REGIONID,
+                  OrderByKey.TIMEPARTITION,
+                  OrderByKey.SIZEINBYTES),
+              false));
     }
 
     // parse LIMIT & OFFSET
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/component/OrderByComponent.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/component/OrderByComponent.java
index 8774db378f5..236a939dc9a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/component/OrderByComponent.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/component/OrderByComponent.java
@@ -63,6 +63,16 @@ public class OrderByComponent extends StatementNode {
         orderByDevice = true;
         deviceOrderPriority = sortItemList.size() - 1;
         break;
+      case OrderByKey.QUERYID:
+      case OrderByKey.DATANODEID:
+      case OrderByKey.ELAPSEDTIME:
+      case OrderByKey.STATEMENT:
+      case OrderByKey.DATABASE:
+      case OrderByKey.REGIONID:
+      case OrderByKey.TIMEPARTITION:
+      case OrderByKey.SIZEINBYTES:
+        // show queries statement or show disk usage statement
+        break;
       default:
         throw new IllegalArgumentException(
             String.format("Unknown sort key %s", sortItem.getSortKey()));
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/component/OrderByKey.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/component/OrderByKey.java
index 7ee7002495f..6cd7296fd24 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/component/OrderByKey.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/component/OrderByKey.java
@@ -27,6 +27,11 @@ public class OrderByKey {
   public static final String DATANODEID = "DATANODEID";
   public static final String ELAPSEDTIME = "ELAPSEDTIME";
   public static final String STATEMENT = "STATEMENT";
+  public static final String DATABASE = "DATABASE";
+  public static final String REGIONID = "REGIONID";
+  public static final String TIMEPARTITION = "TIMEPARTITION";
+  public static final String TIMESERIESPARTITION = "TIMESERIESPARTITION";
+  public static final String SIZEINBYTES = "SIZEINBYTES";
 
   private OrderByKey() {
     // forbidding instantiation
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGeneratorTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGeneratorTest.java
index 9da2cdcf8a4..93ebba65222 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGeneratorTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGeneratorTest.java
@@ -39,7 +39,10 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementTestUtils;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
+import org.apache.iotdb.db.queryengine.plan.statement.component.OrderByKey;
+import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering;
 import org.apache.iotdb.db.queryengine.plan.statement.component.ResultColumn;
+import org.apache.iotdb.db.queryengine.plan.statement.component.SortItem;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.DeleteDataStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.crud.InsertMultiTabletsStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowStatement;
@@ -60,6 +63,7 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.template.ShowNode
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.template.UnsetSchemaTemplateStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.view.CreateLogicalViewStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.sys.AuthorStatement;
+import 
org.apache.iotdb.db.queryengine.plan.statement.sys.ShowDiskUsageStatement;
 import org.apache.iotdb.isession.template.TemplateNode;
 import org.apache.iotdb.rpc.StatementExecutionException;
 import org.apache.iotdb.service.rpc.thrift.TSAggregationQueryReq;
@@ -116,6 +120,35 @@ import static org.junit.Assert.assertTrue;
 
 public class StatementGeneratorTest {
 
+  @Test
+  public void testShowQueries() {
+    Statement showDiskUsage =
+        StatementGenerator.createStatement(
+            "show disk_usage from root.test.** order by database, datanodeid, 
regionid, timepartition, sizeinbytes",
+            ZonedDateTime.now().getOffset());
+    Assert.assertTrue(showDiskUsage instanceof ShowDiskUsageStatement);
+    Assert.assertEquals(
+        ((ShowDiskUsageStatement) showDiskUsage).getSortItemList().get(0),
+        new SortItem(OrderByKey.DATABASE, Ordering.ASC));
+    Assert.assertEquals(
+        ((ShowDiskUsageStatement) showDiskUsage).getSortItemList().get(1),
+        new SortItem(OrderByKey.DATANODEID, Ordering.ASC));
+    Assert.assertEquals(
+        ((ShowDiskUsageStatement) showDiskUsage).getSortItemList().get(2),
+        new SortItem(OrderByKey.REGIONID, Ordering.ASC));
+    Assert.assertEquals(
+        ((ShowDiskUsageStatement) showDiskUsage).getSortItemList().get(3),
+        new SortItem(OrderByKey.TIMEPARTITION, Ordering.ASC));
+    Assert.assertEquals(
+        ((ShowDiskUsageStatement) showDiskUsage).getSortItemList().get(4),
+        new SortItem(OrderByKey.SIZEINBYTES, Ordering.ASC));
+    Assert.assertThrows(
+        SemanticException.class,
+        () ->
+            StatementGenerator.createStatement(
+                "show disk_usage from root.test.** order by a", 
ZonedDateTime.now().getOffset()));
+  }
+
   @Test
   public void testRawDataQuery() throws IllegalPathException {
     TSRawDataQueryReq req =
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/source/PlanNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/source/SourceNodeSerdeTest.java
similarity index 98%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/source/PlanNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/source/SourceNodeSerdeTest.java
index 14f751b69bf..4d0ce6e362d 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/source/PlanNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/source/SourceNodeSerdeTest.java
@@ -35,7 +35,7 @@ import java.util.Arrays;
 
 import static org.junit.Assert.assertEquals;
 
-public class PlanNodeSerdeTest {
+public class SourceNodeSerdeTest {
   @Test
   public void testLastQueryScanNode() throws IllegalPathException {
     LastQueryScanNode node =

Reply via email to