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]);

Reply via email to