This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch opt_statement_gen in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 36b02c3dff8041d10b1ec84571e73e4270b64bbe Author: HTHou <[email protected]> AuthorDate: Sat Nov 26 11:37:34 2022 +0800 Optimize insert statement generate --- .../iotdb/db/mpp/plan/parser/StatementGenerator.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java index bd85626786..4bfa181f63 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java @@ -232,9 +232,12 @@ public class StatementGenerator { // construct insert statement InsertMultiTabletsStatement insertStatement = new InsertMultiTabletsStatement(); List<InsertTabletStatement> insertTabletStatementList = new ArrayList<>(); + Map<String, PartialPath> devicePathMap = new HashMap<>(); for (int i = 0; i < req.prefixPaths.size(); i++) { InsertTabletStatement insertTabletStatement = new InsertTabletStatement(); - insertTabletStatement.setDevicePath(new PartialPath(req.prefixPaths.get(i))); + insertTabletStatement.setDevicePath( + devicePathMap.putIfAbsent( + req.getPrefixPaths().get(i), new PartialPath(req.getPrefixPaths().get(i)))); insertTabletStatement.setMeasurements(req.measurementsList.get(i).toArray(new String[0])); insertTabletStatement.setTimes( QueryDataSetUtils.readTimesFromBuffer(req.timestampsList.get(i), req.sizeList.get(i))); @@ -270,9 +273,12 @@ public class StatementGenerator { // construct insert statement InsertRowsStatement insertStatement = new InsertRowsStatement(); List<InsertRowStatement> insertRowStatementList = new ArrayList<>(); + Map<String, PartialPath> devicePathMap = new HashMap<>(); for (int i = 0; i < req.prefixPaths.size(); i++) { InsertRowStatement statement = new InsertRowStatement(); - statement.setDevicePath(new PartialPath(req.getPrefixPaths().get(i))); + statement.setDevicePath( + devicePathMap.putIfAbsent( + req.getPrefixPaths().get(i), new PartialPath(req.getPrefixPaths().get(i)))); statement.setMeasurements(req.getMeasurementsList().get(i).toArray(new String[0])); statement.setTime(req.getTimestamps().get(i)); statement.fillValues(req.valuesList.get(i)); @@ -292,9 +298,12 @@ public class StatementGenerator { // construct insert statement InsertRowsStatement insertStatement = new InsertRowsStatement(); List<InsertRowStatement> insertRowStatementList = new ArrayList<>(); + Map<String, PartialPath> devicePathMap = new HashMap<>(); for (int i = 0; i < req.prefixPaths.size(); i++) { InsertRowStatement statement = new InsertRowStatement(); - statement.setDevicePath(new PartialPath(req.getPrefixPaths().get(i))); + statement.setDevicePath( + devicePathMap.putIfAbsent( + req.getPrefixPaths().get(i), new PartialPath(req.getPrefixPaths().get(i)))); addMeasurementAndValue( statement, req.getMeasurementsList().get(i), req.getValuesList().get(i)); statement.setDataTypes(new TSDataType[statement.getMeasurements().length]);
