Skip to content

Commit caa8971

Browse files
committed
fix: CteMaterializer single instance
1 parent 65e3254 commit caa8971

File tree

3 files changed

+32
-16
lines changed

3 files changed

+32
-16
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
import org.apache.iotdb.db.queryengine.plan.planner.plan.FragmentInstance;
4848
import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
4949
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeUtil;
50-
import org.apache.iotdb.db.queryengine.plan.relational.planner.ir.CteMaterializer;
50+
import org.apache.iotdb.db.queryengine.plan.relational.planner.CteMaterializer;
5151
import org.apache.iotdb.db.queryengine.plan.scheduler.IScheduler;
5252
import org.apache.iotdb.db.utils.SetThreadName;
5353
import org.apache.iotdb.mpp.rpc.thrift.TFragmentInstanceId;
@@ -351,7 +351,7 @@ private void releaseResource() {
351351
cleanUpResultHandle();
352352
}
353353
if (getSQLDialect().equals(IClientSession.SqlDialect.TABLE) && !context.isSubquery()) {
354-
CteMaterializer.cleanUpCTE(context);
354+
CteMaterializer.getInstance().cleanUpCTE(context);
355355
}
356356
}
357357

@@ -397,7 +397,7 @@ private void releaseResource(Throwable t) {
397397
cleanUpResultHandle();
398398
}
399399
if (getSQLDialect().equals(IClientSession.SqlDialect.TABLE) && !context.isSubquery()) {
400-
CteMaterializer.cleanUpCTE(context);
400+
CteMaterializer.getInstance().cleanUpCTE(context);
401401
}
402402
}
403403

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/CteMaterializer.java renamed to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/CteMaterializer.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
*
2020
*/
2121

22-
package org.apache.iotdb.db.queryengine.plan.relational.planner.ir;
22+
package org.apache.iotdb.db.queryengine.plan.relational.planner;
2323

2424
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
2525
import org.apache.iotdb.commons.client.IClientManager;
@@ -70,13 +70,15 @@
7070
public class CteMaterializer {
7171
private static final Logger LOGGER = LoggerFactory.getLogger(CteMaterializer.class);
7272
private static String CTE_MATERIALIZATION_FAILURE_WARNING =
73-
"***** CTE MATERIALIZATION failed! INLINE mode is adopted in main query *****";
73+
"***** Failed to materialize CTE! INLINE mode is adopted in the main query *****";
7474

7575
private static final Coordinator coordinator = Coordinator.getInstance();
7676

77-
private CteMaterializer() {}
77+
public void materializeCTE(Analysis analysis, MPPQueryContext context) {
78+
if (coordinator == null) {
79+
return;
80+
}
7881

79-
public static void materializeCTE(Analysis analysis, MPPQueryContext context) {
8082
analysis
8183
.getNamedQueries()
8284
.forEach(
@@ -104,7 +106,7 @@ public static void materializeCTE(Analysis analysis, MPPQueryContext context) {
104106
});
105107
}
106108

107-
public static void cleanUpCTE(MPPQueryContext context) {
109+
public void cleanUpCTE(MPPQueryContext context) {
108110
Map<NodeRef<Table>, CteDataStore> cteDataStores = context.getCteDataStores();
109111
cteDataStores
110112
.values()
@@ -116,8 +118,7 @@ public static void cleanUpCTE(MPPQueryContext context) {
116118
cteDataStores.clear();
117119
}
118120

119-
private static CteDataStore fetchCteQueryResult(
120-
Table table, Query query, MPPQueryContext context) {
121+
private CteDataStore fetchCteQueryResult(Table table, Query query, MPPQueryContext context) {
121122
final long queryId = SessionManager.getInstance().requestQueryId();
122123
Throwable t = null;
123124
try {
@@ -184,7 +185,7 @@ private static CteDataStore fetchCteQueryResult(
184185
return null;
185186
}
186187

187-
private static TableSchema getTableSchema(DatasetHeader datasetHeader, String cteName) {
188+
private TableSchema getTableSchema(DatasetHeader datasetHeader, String cteName) {
188189
final List<String> columnNames = datasetHeader.getRespColumns();
189190
final List<TSDataType> columnDataTypes = datasetHeader.getRespDataTypes();
190191
if (columnNames.size() != columnDataTypes.size()) {
@@ -213,7 +214,7 @@ private static TableSchema getTableSchema(DatasetHeader datasetHeader, String ct
213214
return new TableSchema(cteName, columnSchemaList);
214215
}
215216

216-
private static List<String> getCteExplainAnalyzeLines(
217+
private List<String> getCteExplainAnalyzeLines(
217218
FragmentInstanceStatisticsDrawer fragmentInstanceStatisticsDrawer,
218219
List<FragmentInstance> instances,
219220
boolean verbose)
@@ -231,7 +232,7 @@ private static List<String> getCteExplainAnalyzeLines(
231232
return statisticLines.stream().map(StatisticLine::getValue).collect(Collectors.toList());
232233
}
233234

234-
private static void handleCteExplainAnalyzeResults(
235+
private void handleCteExplainAnalyzeResults(
235236
MPPQueryContext context, long queryId, Table table, String warnMessage) {
236237
QueryExecution execution = (QueryExecution) coordinator.getQueryExecution(queryId);
237238
DistributedQueryPlan distributedQueryPlan = execution.getDistributedPlan();
@@ -265,7 +266,7 @@ private static void handleCteExplainAnalyzeResults(
265266
}
266267
}
267268

268-
private static void handleCteExplainResults(MPPQueryContext context, long queryId, Table table) {
269+
private void handleCteExplainResults(MPPQueryContext context, long queryId, Table table) {
269270
QueryExecution execution = (QueryExecution) coordinator.getQueryExecution(queryId);
270271
DistributedQueryPlan distributedQueryPlan = execution.getDistributedPlan();
271272
if (distributedQueryPlan == null) {
@@ -276,4 +277,16 @@ private static void handleCteExplainResults(MPPQueryContext context, long queryI
276277
List<String> lines = distributedQueryPlan.getPlanText();
277278
context.addCteExplainResult(table, new Pair<>(-1, lines));
278279
}
280+
281+
private static class CteMaterializerHolder {
282+
private static final CteMaterializer INSTANCE = new CteMaterializer();
283+
284+
private CteMaterializerHolder() {
285+
// Empty constructor
286+
}
287+
}
288+
289+
public static CteMaterializer getInstance() {
290+
return CteMaterializerHolder.INSTANCE;
291+
}
279292
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.apache.iotdb.commons.schema.table.TreeViewSchema;
2727
import org.apache.iotdb.commons.schema.table.TsTable;
2828
import org.apache.iotdb.commons.utils.TestOnly;
29+
import org.apache.iotdb.db.conf.IoTDBDescriptor;
2930
import org.apache.iotdb.db.exception.sql.SemanticException;
3031
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
3132
import org.apache.iotdb.db.queryengine.common.QueryId;
@@ -50,7 +51,6 @@
5051
import org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
5152
import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableMetadataImpl;
5253
import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableSchema;
53-
import org.apache.iotdb.db.queryengine.plan.relational.planner.ir.CteMaterializer;
5454
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.ExplainAnalyzeNode;
5555
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.FilterNode;
5656
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.IntoNode;
@@ -374,7 +374,10 @@ private RelationPlan createRelationPlan(Analysis analysis, PipeEnriched pipeEnri
374374

375375
private RelationPlan createRelationPlan(Analysis analysis, Query query) {
376376
// materialize cte if needed
377-
CteMaterializer.materializeCTE(analysis, queryContext);
377+
final int dataNodeId = IoTDBDescriptor.getInstance().getConfig().getDataNodeId();
378+
if (dataNodeId != -1) {
379+
CteMaterializer.getInstance().materializeCTE(analysis, queryContext);
380+
}
378381
return getRelationPlanner(analysis).process(query, null);
379382
}
380383

0 commit comments

Comments
 (0)