Skip to content

Commit b71401a

Browse files
authored
fix showQueries (#16855)
1 parent 4440993 commit b71401a

File tree

7 files changed

+80
-11
lines changed

7 files changed

+80
-11
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 =

iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/source/LastQueryScanNodeSerdeTest.java renamed to iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/source/SourceNodeSerdeTest.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
2525
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
2626
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.LastQueryScanNode;
27+
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.ShowQueriesNode;
2728

2829
import org.apache.tsfile.enums.TSDataType;
2930
import org.apache.tsfile.write.schema.MeasurementSchema;
@@ -34,9 +35,9 @@
3435

3536
import static org.junit.Assert.assertEquals;
3637

37-
public class LastQueryScanNodeSerdeTest {
38+
public class SourceNodeSerdeTest {
3839
@Test
39-
public void test() throws IllegalPathException {
40+
public void testLastQueryScanNode() throws IllegalPathException {
4041
LastQueryScanNode node =
4142
new LastQueryScanNode(
4243
new PlanNodeId("test"),
@@ -69,4 +70,19 @@ public void test() throws IllegalPathException {
6970
byteBuffer.flip();
7071
assertEquals(PlanNodeDeserializeHelper.deserialize(byteBuffer), node);
7172
}
73+
74+
@Test
75+
public void testShowQueriesNode() throws IllegalPathException {
76+
ShowQueriesNode node = new ShowQueriesNode(new PlanNodeId("test"), null, "root");
77+
78+
ByteBuffer byteBuffer = ByteBuffer.allocate(2048);
79+
node.serialize(byteBuffer);
80+
byteBuffer.flip();
81+
assertEquals(PlanNodeDeserializeHelper.deserialize(byteBuffer), node);
82+
node = new ShowQueriesNode(new PlanNodeId("test"), null, "root");
83+
byteBuffer = ByteBuffer.allocate(2048);
84+
node.serialize(byteBuffer);
85+
byteBuffer.flip();
86+
assertEquals(PlanNodeDeserializeHelper.deserialize(byteBuffer), node);
87+
}
7288
}

0 commit comments

Comments
 (0)