Skip to content

Commit 6f2bbff

Browse files
committed
fix showQueries
1 parent bd813d8 commit 6f2bbff

File tree

6 files changed

+62
-9
lines changed

6 files changed

+62
-9
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1634,7 +1634,8 @@ public Statement visitSelectStatement(IoTDBSqlParser.SelectStatementContext ctx)
16341634
queryStatement.setOrderByComponent(
16351635
parseOrderByClause(
16361636
ctx.orderByClause(),
1637-
ImmutableSet.of(OrderByKey.TIME, OrderByKey.DEVICE, OrderByKey.TIMESERIES)));
1637+
ImmutableSet.of(OrderByKey.TIME, OrderByKey.DEVICE, OrderByKey.TIMESERIES),
1638+
true));
16381639
}
16391640

16401641
// parse FILL
@@ -1937,7 +1938,9 @@ private HavingCondition parseHavingClause(IoTDBSqlParser.HavingClauseContext ctx
19371938
// ---- Order By Clause
19381939
// all SortKeys should be contained by limitSet
19391940
private OrderByComponent parseOrderByClause(
1940-
IoTDBSqlParser.OrderByClauseContext ctx, ImmutableSet<String> limitSet) {
1941+
IoTDBSqlParser.OrderByClauseContext ctx,
1942+
ImmutableSet<String> limitSet,
1943+
boolean allowExpression) {
19411944
OrderByComponent orderByComponent = new OrderByComponent();
19421945
Set<String> sortKeySet = new HashSet<>();
19431946
for (IoTDBSqlParser.OrderByAttributeClauseContext orderByAttributeClauseContext :
@@ -1946,7 +1949,8 @@ private OrderByComponent parseOrderByClause(
19461949
if (orderByComponent.isUnique()) {
19471950
break;
19481951
}
1949-
SortItem sortItem = parseOrderByAttributeClause(orderByAttributeClauseContext, limitSet);
1952+
SortItem sortItem =
1953+
parseOrderByAttributeClause(orderByAttributeClauseContext, limitSet, allowExpression);
19501954

19511955
String sortKey = sortItem.getSortKey();
19521956
if (sortKeySet.contains(sortKey)) {
@@ -1965,7 +1969,9 @@ private OrderByComponent parseOrderByClause(
19651969
}
19661970

19671971
private SortItem parseOrderByAttributeClause(
1968-
IoTDBSqlParser.OrderByAttributeClauseContext ctx, ImmutableSet<String> limitSet) {
1972+
IoTDBSqlParser.OrderByAttributeClauseContext ctx,
1973+
ImmutableSet<String> limitSet,
1974+
boolean allowExpression) {
19691975
if (ctx.sortKey() != null) {
19701976
String sortKey = ctx.sortKey().getText().toUpperCase();
19711977
if (!limitSet.contains(sortKey)) {
@@ -1974,6 +1980,11 @@ private SortItem parseOrderByAttributeClause(
19741980
}
19751981
return new SortItem(sortKey, ctx.DESC() != null ? Ordering.DESC : Ordering.ASC);
19761982
} else {
1983+
if (!allowExpression) {
1984+
throw new SemanticException(
1985+
"ORDER BY expression is not supported for current statement, supported sort key: "
1986+
+ limitSet.toString());
1987+
}
19771988
Expression sortExpression = parseExpression(ctx.expression(), true);
19781989
return new SortItem(
19791990
sortExpression,
@@ -3719,7 +3730,8 @@ public Statement visitShowQueries(IoTDBSqlParser.ShowQueriesContext ctx) {
37193730
OrderByKey.QUERYID,
37203731
OrderByKey.DATANODEID,
37213732
OrderByKey.ELAPSEDTIME,
3722-
OrderByKey.STATEMENT)));
3733+
OrderByKey.STATEMENT),
3734+
false));
37233735
}
37243736

37253737
// parse LIMIT & OFFSET

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/ExchangeNodeAdder.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -567,10 +567,12 @@ private PlanNode processOneChildNode(PlanNode node, NodeGroupContext context) {
567567
PlanNode newNode = node.clone();
568568
PlanNode child = visit(node.getChildren().get(0), context);
569569
newNode.addChild(child);
570-
TRegionReplicaSet dataRegion = context.getNodeDistribution(child.getPlanNodeId()).getRegion();
570+
NodeDistribution nodeDistribution = context.getNodeDistribution(child.getPlanNodeId());
571571
context.putNodeDistribution(
572572
newNode.getPlanNodeId(),
573-
new NodeDistribution(NodeDistributionType.SAME_WITH_ALL_CHILDREN, dataRegion));
573+
new NodeDistribution(
574+
NodeDistributionType.SAME_WITH_ALL_CHILDREN,
575+
nodeDistribution == null ? null : nodeDistribution.getRegion()));
574576
return newNode;
575577
}
576578

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/ShowQueriesNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ protected void serializeAttributes(DataOutputStream stream) throws IOException {
105105
}
106106

107107
public static ShowQueriesNode deserialize(ByteBuffer byteBuffer) {
108-
PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
109108
String allowedUsername = ReadWriteIOUtils.readString(byteBuffer);
109+
PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
110110
return new ShowQueriesNode(planNodeId, null, allowedUsername);
111111
}
112112

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/component/OrderByComponent.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ public void addSortItem(SortItem sortItem) {
6363
orderByDevice = true;
6464
deviceOrderPriority = sortItemList.size() - 1;
6565
break;
66+
case OrderByKey.QUERYID:
67+
case OrderByKey.DATANODEID:
68+
case OrderByKey.ELAPSEDTIME:
69+
case OrderByKey.STATEMENT:
70+
// show queries statement
71+
break;
6672
default:
6773
throw new IllegalArgumentException(
6874
String.format("Unknown sort key %s", sortItem.getSortKey()));

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsDrawer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ private void renderOperator(
484484
addLineWithValueCheck(
485485
singleFragmentInstanceArea,
486486
indentNum + 2,
487-
"Estimated Memory Size: ",
487+
"Estimated Memory Size",
488488
operatorStatistic.getMemoryUsage());
489489

490490
if (operatorStatistic.getSpecifiedInfoSize() != 0) {

iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGeneratorTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@
3939
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
4040
import org.apache.iotdb.db.queryengine.plan.statement.StatementTestUtils;
4141
import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
42+
import org.apache.iotdb.db.queryengine.plan.statement.component.OrderByKey;
43+
import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering;
4244
import org.apache.iotdb.db.queryengine.plan.statement.component.ResultColumn;
45+
import org.apache.iotdb.db.queryengine.plan.statement.component.SortItem;
4346
import org.apache.iotdb.db.queryengine.plan.statement.crud.DeleteDataStatement;
4447
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertMultiTabletsStatement;
4548
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowStatement;
@@ -60,6 +63,7 @@
6063
import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.UnsetSchemaTemplateStatement;
6164
import org.apache.iotdb.db.queryengine.plan.statement.metadata.view.CreateLogicalViewStatement;
6265
import org.apache.iotdb.db.queryengine.plan.statement.sys.AuthorStatement;
66+
import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowQueriesStatement;
6367
import org.apache.iotdb.isession.template.TemplateNode;
6468
import org.apache.iotdb.rpc.StatementExecutionException;
6569
import org.apache.iotdb.service.rpc.thrift.TSAggregationQueryReq;
@@ -116,6 +120,35 @@
116120

117121
public class StatementGeneratorTest {
118122

123+
@Test
124+
public void testShowQueries() {
125+
Statement showQueries =
126+
StatementGenerator.createStatement(
127+
"show queries order by time, queryid, datanodeid, elapsedtime, statement",
128+
ZonedDateTime.now().getOffset());
129+
Assert.assertTrue(showQueries instanceof ShowQueriesStatement);
130+
Assert.assertEquals(
131+
((ShowQueriesStatement) showQueries).getSortItemList().get(0),
132+
new SortItem(OrderByKey.TIME, Ordering.ASC));
133+
Assert.assertEquals(
134+
((ShowQueriesStatement) showQueries).getSortItemList().get(1),
135+
new SortItem(OrderByKey.QUERYID, Ordering.ASC));
136+
Assert.assertEquals(
137+
((ShowQueriesStatement) showQueries).getSortItemList().get(2),
138+
new SortItem(OrderByKey.DATANODEID, Ordering.ASC));
139+
Assert.assertEquals(
140+
((ShowQueriesStatement) showQueries).getSortItemList().get(3),
141+
new SortItem(OrderByKey.ELAPSEDTIME, Ordering.ASC));
142+
Assert.assertEquals(
143+
((ShowQueriesStatement) showQueries).getSortItemList().get(4),
144+
new SortItem(OrderByKey.STATEMENT, Ordering.ASC));
145+
Assert.assertThrows(
146+
SemanticException.class,
147+
() ->
148+
StatementGenerator.createStatement(
149+
"show queries order by a", ZonedDateTime.now().getOffset()));
150+
}
151+
119152
@Test
120153
public void testRawDataQuery() throws IllegalPathException {
121154
TSRawDataQueryReq req =

0 commit comments

Comments
 (0)