4848import org .apache .iotdb .db .queryengine .plan .statement .crud .InsertBaseStatement ;
4949import org .apache .iotdb .db .queryengine .plan .statement .crud .InsertMultiTabletsStatement ;
5050import org .apache .iotdb .db .queryengine .plan .statement .crud .InsertRowStatement ;
51+ import org .apache .iotdb .db .queryengine .plan .statement .crud .InsertRowsOfOneDeviceStatement ;
5152import org .apache .iotdb .db .queryengine .plan .statement .crud .InsertRowsStatement ;
5253import org .apache .iotdb .db .queryengine .plan .statement .crud .InsertTabletStatement ;
5354import org .apache .iotdb .db .schemaengine .table .DataNodeTableCache ;
@@ -174,50 +175,120 @@ public static List<DataPartitionQueryParam> computeTableDataPartitionParams(
174175
175176 public static List <DataPartitionQueryParam > computeTreeDataPartitionParams (
176177 InsertBaseStatement statement , MPPQueryContext context ) {
178+ final String database = getDatabaseName (statement , context );
177179 if (statement instanceof InsertTabletStatement ) {
178180 DataPartitionQueryParam dataPartitionQueryParam =
179- getTreeDataPartitionQueryParam ((InsertTabletStatement ) statement , context );
181+ getTreeDataPartitionQueryParam ((InsertTabletStatement ) statement , database );
180182 return Collections .singletonList (dataPartitionQueryParam );
183+ } else if (statement instanceof InsertRowStatement ) {
184+ InsertRowStatement insertRowStatement = (InsertRowStatement ) statement ;
185+ if (database == null ) {
186+ DataPartitionQueryParam dataPartitionQueryParam = new DataPartitionQueryParam ();
187+ dataPartitionQueryParam .setDeviceID (
188+ insertRowStatement .getDevicePath ().getIDeviceIDAsFullDevice ());
189+ dataPartitionQueryParam .setTimeList (
190+ Collections .singletonList (insertRowStatement .getTime ()));
191+ return Collections .singletonList (dataPartitionQueryParam );
192+ }
193+ return computeDataPartitionParams (
194+ Collections .singletonMap (
195+ insertRowStatement .getDevicePath ().getIDeviceIDAsFullDevice (),
196+ Collections .singleton (insertRowStatement .getTimePartitionSlot (database ))),
197+ database );
181198 } else if (statement instanceof InsertMultiTabletsStatement ) {
182199 InsertMultiTabletsStatement insertMultiTabletsStatement =
183200 (InsertMultiTabletsStatement ) statement ;
201+ if (database == null ) {
202+ Map <IDeviceID , List <Long >> dataPartitionQueryParamMap = new HashMap <>();
203+ for (InsertTabletStatement insertTabletStatement :
204+ insertMultiTabletsStatement .getInsertTabletStatementList ()) {
205+ List <Long > timeList =
206+ dataPartitionQueryParamMap .computeIfAbsent (
207+ insertTabletStatement .getDevicePath ().getIDeviceIDAsFullDevice (),
208+ k -> new ArrayList <>());
209+ for (int i = 0 ; i < insertTabletStatement .getRowCount (); i ++) {
210+ timeList .add (insertTabletStatement .getTimes ()[i ]);
211+ }
212+ }
213+ return computeDataPartitionParamsByTime (dataPartitionQueryParamMap );
214+ }
184215 Map <IDeviceID , Set <TTimePartitionSlot >> dataPartitionQueryParamMap = new HashMap <>();
185216 for (InsertTabletStatement insertTabletStatement :
186217 insertMultiTabletsStatement .getInsertTabletStatementList ()) {
187218 Set <TTimePartitionSlot > timePartitionSlotSet =
188219 dataPartitionQueryParamMap .computeIfAbsent (
189220 insertTabletStatement .getDevicePath ().getIDeviceIDAsFullDevice (),
190221 k -> new HashSet <>());
191- timePartitionSlotSet .addAll (
192- insertTabletStatement .getTimePartitionSlots (getDatabaseName (statement , context )));
222+ timePartitionSlotSet .addAll (insertTabletStatement .getTimePartitionSlots (database ));
193223 }
194- return computeDataPartitionParams (
195- dataPartitionQueryParamMap , getDatabaseName (statement , context ));
224+ return computeDataPartitionParams (dataPartitionQueryParamMap , database );
225+ } else if (statement instanceof InsertRowsOfOneDeviceStatement ) {
226+ final InsertRowsOfOneDeviceStatement insertRowsOfOneDeviceStatement =
227+ (InsertRowsOfOneDeviceStatement ) statement ;
228+ if (database == null ) {
229+ Map <IDeviceID , List <Long >> dataPartitionQueryParamMap = new HashMap <>();
230+ List <Long > timeList =
231+ dataPartitionQueryParamMap .computeIfAbsent (
232+ insertRowsOfOneDeviceStatement .getDevicePath ().getIDeviceIDAsFullDevice (),
233+ k -> new ArrayList <>());
234+ for (InsertRowStatement insertRowStatement :
235+ insertRowsOfOneDeviceStatement .getInsertRowStatementList ()) {
236+ timeList .add (insertRowStatement .getTime ());
237+ }
238+ return computeDataPartitionParamsByTime (dataPartitionQueryParamMap );
239+ }
240+ Map <IDeviceID , Set <TTimePartitionSlot >> dataPartitionQueryParamMap = new HashMap <>();
241+ Set <TTimePartitionSlot > timePartitionSlotSet =
242+ dataPartitionQueryParamMap .computeIfAbsent (
243+ insertRowsOfOneDeviceStatement .getDevicePath ().getIDeviceIDAsFullDevice (),
244+ k -> new HashSet <>());
245+ for (InsertRowStatement insertRowStatement :
246+ insertRowsOfOneDeviceStatement .getInsertRowStatementList ()) {
247+ timePartitionSlotSet .add (insertRowStatement .getTimePartitionSlot (database ));
248+ }
249+ return computeDataPartitionParams (dataPartitionQueryParamMap , database );
196250 } else if (statement instanceof InsertRowsStatement ) {
197251 final InsertRowsStatement insertRowsStatement = (InsertRowsStatement ) statement ;
252+ if (database == null ) {
253+ Map <IDeviceID , List <Long >> dataPartitionQueryParamMap = new HashMap <>();
254+ for (InsertRowStatement insertRowStatement :
255+ insertRowsStatement .getInsertRowStatementList ()) {
256+ dataPartitionQueryParamMap
257+ .computeIfAbsent (
258+ insertRowStatement .getDevicePath ().getIDeviceIDAsFullDevice (),
259+ k -> new ArrayList <>())
260+ .add (insertRowStatement .getTime ());
261+ }
262+ return computeDataPartitionParamsByTime (dataPartitionQueryParamMap );
263+ }
198264 Map <IDeviceID , Set <TTimePartitionSlot >> dataPartitionQueryParamMap = new HashMap <>();
199265 for (InsertRowStatement insertRowStatement :
200266 insertRowsStatement .getInsertRowStatementList ()) {
201267 Set <TTimePartitionSlot > timePartitionSlotSet =
202268 dataPartitionQueryParamMap .computeIfAbsent (
203269 insertRowStatement .getDevicePath ().getIDeviceIDAsFullDevice (),
204270 k -> new HashSet <>());
205- timePartitionSlotSet .add (
206- insertRowStatement .getTimePartitionSlot (getDatabaseName (statement , context )));
271+ timePartitionSlotSet .add (insertRowStatement .getTimePartitionSlot (database ));
207272 }
208- return computeDataPartitionParams (
209- dataPartitionQueryParamMap , getDatabaseName (statement , context ));
273+ return computeDataPartitionParams (dataPartitionQueryParamMap , database );
210274 }
211275 throw new UnsupportedOperationException ("computeDataPartitionParams for " + statement );
212276 }
213277
214278 private static DataPartitionQueryParam getTreeDataPartitionQueryParam (
215- InsertTabletStatement statement , MPPQueryContext context ) {
279+ InsertTabletStatement statement , String database ) {
216280 DataPartitionQueryParam dataPartitionQueryParam = new DataPartitionQueryParam ();
217281 dataPartitionQueryParam .setDeviceID (statement .getDevicePath ().getIDeviceIDAsFullDevice ());
218- dataPartitionQueryParam .setTimePartitionSlotList (
219- statement .getTimePartitionSlots (getDatabaseName (statement , context )));
220- dataPartitionQueryParam .setDatabaseName (getDatabaseName (statement , context ));
282+ if (database == null ) {
283+ List <Long > timeList = new ArrayList <>();
284+ for (int i = 0 ; i < statement .getRowCount (); i ++) {
285+ timeList .add (statement .getTimes ()[i ]);
286+ }
287+ dataPartitionQueryParam .setTimeList (timeList );
288+ } else {
289+ dataPartitionQueryParam .setTimePartitionSlotList (statement .getTimePartitionSlots (database ));
290+ dataPartitionQueryParam .setDatabaseName (database );
291+ }
221292 return dataPartitionQueryParam ;
222293 }
223294
@@ -240,6 +311,18 @@ public static List<DataPartitionQueryParam> computeDataPartitionParams(
240311 return dataPartitionQueryParams ;
241312 }
242313
314+ private static List <DataPartitionQueryParam > computeDataPartitionParamsByTime (
315+ Map <IDeviceID , List <Long >> dataPartitionQueryParamMap ) {
316+ List <DataPartitionQueryParam > dataPartitionQueryParams = new ArrayList <>();
317+ for (Map .Entry <IDeviceID , List <Long >> entry : dataPartitionQueryParamMap .entrySet ()) {
318+ DataPartitionQueryParam dataPartitionQueryParam = new DataPartitionQueryParam ();
319+ dataPartitionQueryParam .setDeviceID (entry .getKey ());
320+ dataPartitionQueryParam .setTimeList (entry .getValue ());
321+ dataPartitionQueryParams .add (dataPartitionQueryParam );
322+ }
323+ return dataPartitionQueryParams ;
324+ }
325+
243326 public static void validateSchema (
244327 IAnalysis analysis , InsertBaseStatement insertStatement , Runnable schemaValidation ) {
245328 final long startTime = System .nanoTime ();
0 commit comments