You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by lt...@apache.org on 2019/11/22 12:30:45 UTC

[incubator-iotdb] 01/01: modify antlr grammar to support load/remove/move path

This is an automated email from the ASF dual-hosted git repository.

lta pushed a commit to branch add_load_tsfile_feature
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 50494e32aabeba0608f6376abc5bbf0c3d3b6e6d
Author: lta <li...@163.com>
AuthorDate: Fri Nov 22 20:30:09 2019 +0800

    modify antlr grammar to support load/remove/move path
---
 .../org/apache/iotdb/db/sql/parse/TqlLexer.g       | 21 +++++--
 .../org/apache/iotdb/db/sql/parse/TqlParser.g      | 42 +++++++++++++-
 .../org/apache/iotdb/db/qp/QueryProcessor.java     |  3 +
 .../apache/iotdb/db/qp/constant/SQLConstant.java   |  8 +++
 .../iotdb/db/qp/executor/QueryProcessExecutor.java | 22 ++++++++
 .../org/apache/iotdb/db/qp/logical/Operator.java   |  2 +-
 .../iotdb/db/qp/logical/sys/LoadFilesOperator.java | 38 +++++++++++++
 .../iotdb/db/qp/logical/sys/MoveFileOperator.java  | 44 +++++++++++++++
 .../db/qp/logical/sys/RemoveFileOperator.java      | 43 +++++++++++++++
 .../iotdb/db/qp/physical/sys/OperateFilePlan.java  | 64 ++++++++++++++++++++++
 .../iotdb/db/qp/strategy/LogicalGenerator.java     | 17 ++++++
 .../iotdb/db/qp/strategy/PhysicalGenerator.java    | 12 ++++
 .../apache/iotdb/db/qp/plan/PhysicalPlanTest.java  | 47 ++++++++++++++++
 13 files changed, 357 insertions(+), 6 deletions(-)

diff --git a/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlLexer.g b/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlLexer.g
index 7237522..a0212a0 100644
--- a/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlLexer.g
+++ b/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlLexer.g
@@ -261,6 +261,14 @@ K_LOAD
     : L O A D
     ;
 
+K_REMOVE
+    : R E M O V E
+    ;
+
+K_MOVE
+    : M O V E
+    ;
+
 K_WATERMARK_EMBEDDING
     : W A T E R M A R K '_' E M B E D D I N G
     ;
@@ -451,14 +459,11 @@ INT
     : NUM+
     ;
 
-fragment
-NUM
+fragment NUM
     :   '0'..'9'
     ;
 
 
-
-
 // ***************************
 fragment A
     : 'a' | 'A'
@@ -575,3 +580,11 @@ DURATION
     :
     (NUM+ (Y|M O|W|D|H|M|S|M S|U S|N S))+
     ;
+
+FILE
+    :  (('a'..'z'| 'A'..'Z')(':')?)* (('\\' | '/')+ PATH_FRAGMENT) +
+    ;
+
+fragment PATH_FRAGMENT
+    : ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'-'|'.')*
+    ;
\ No newline at end of file
diff --git a/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlParser.g b/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlParser.g
index e9cf046..f8fa04a 100644
--- a/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlParser.g
+++ b/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlParser.g
@@ -110,6 +110,9 @@ tokens{
     TOK_LOAD_CONFIGURATION;
     TOK_DYNAMIC_PARAMETER;
     TOK_FLUSH_TASK_INFO;
+    TOK_LOAD_FILES;
+    TOK_REMOVE_FILE;
+    TOK_MOVE_FILE;
 }
 
 @header{
@@ -286,6 +289,7 @@ sqlStatement
     | administrationStatement
     | configurationStatement
     | showStatement
+    | operateFileStatement
     ;
 
 dmlStatement
@@ -775,6 +779,14 @@ loadConfigurationStatement
     -> ^(TOK_LOAD_CONFIGURATION)
     ;
 
+/*
+****
+*************
+Show info
+*************
+****
+*/
+
 showStatement
     : showFlushTaskInfo
     | showDynamicParameter
@@ -793,11 +805,39 @@ showDynamicParameter
 /*
 ****
 *************
-TTL
+Operate file
 *************
 ****
 */
 
+operateFileStatement
+    : loadFiles
+    | removeFile
+    | moveFile
+    ;
+
+loadFiles
+    : K_LOAD path=FILE
+    -> ^(TOK_LOAD_FILES $path)
+    ;
+
+removeFile
+    : K_REMOVE filename=FILE
+    -> ^(TOK_REMOVE_FILE $filename)
+    ;
+
+moveFile
+    : K_MOVE filename=FILE dir=FILE
+    -> ^(TOK_MOVE_FILE $filename $dir)
+    ;
+
+/*
+****
+*************
+TTL
+*************
+****
+*/
 ttlStatement
     : setTTLStatement
     | unsetTTLStatement
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/QueryProcessor.java b/server/src/main/java/org/apache/iotdb/db/qp/QueryProcessor.java
index 746465a..6587167 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/QueryProcessor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/QueryProcessor.java
@@ -130,6 +130,9 @@ public class QueryProcessor {
       case TTL:
       case LOAD_CONFIGURATION:
       case SHOW:
+      case LOAD_FILES:
+      case REMOVE_FILE:
+      case MOVE_FILE:
         return operator;
       case QUERY:
       case UPDATE:
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java b/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
index d62ec8d..e5d3ffd 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
@@ -107,6 +107,10 @@ public class SQLConstant {
   public static final int TOK_FLUSH_TASK_INFO = 67;
   public static final int TOK_DYNAMIC_PARAMETER = 68;
 
+  public static final int TOK_LOAD_FILES = 69;
+  public static final int TOK_REMOVE_FILE = 70;
+  public static final int TOK_MOVE_FILE = 71;
+
   public static final Map<Integer, String> tokenSymbol = new HashMap<>();
   public static final Map<Integer, String> tokenNames = new HashMap<>();
   public static final Map<Integer, Integer> reverseWords = new HashMap<>();
@@ -169,6 +173,10 @@ public class SQLConstant {
     tokenNames.put(TOK_LOAD_CONFIGURATION, "TOK_LOAD_CONFIGURATION");
     tokenNames.put(TOK_FLUSH_TASK_INFO, "TOK_FLUSH_TASK_INFO");
     tokenNames.put(TOK_DYNAMIC_PARAMETER, "TOK_DYNAMIC_PARAMETER");
+
+    tokenNames.put(TOK_LOAD_FILES, "TOK_LOAD_FILES");
+    tokenNames.put(TOK_REMOVE_FILE, "TOK_REMOVE_FILE");
+    tokenNames.put(TOK_MOVE_FILE, "TOK_MOVE_FILE");
   }
 
   static {
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/QueryProcessExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/QueryProcessExecutor.java
index d3418bc..6fb4956 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/executor/QueryProcessExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/QueryProcessExecutor.java
@@ -59,6 +59,7 @@ import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
 import org.apache.iotdb.db.qp.physical.sys.DataAuthPlan;
 import org.apache.iotdb.db.qp.physical.sys.DeleteStorageGroupPlan;
 import org.apache.iotdb.db.qp.physical.sys.DeleteTimeSeriesPlan;
+import org.apache.iotdb.db.qp.physical.sys.OperateFilePlan;
 import org.apache.iotdb.db.qp.physical.sys.PropertyPlan;
 import org.apache.iotdb.db.qp.physical.sys.SetStorageGroupPlan;
 import org.apache.iotdb.db.qp.physical.sys.SetTTLPlan;
@@ -140,12 +141,33 @@ public class QueryProcessExecutor extends AbstractQueryProcessExecutor {
       case LOAD_CONFIGURATION:
         IoTDBDescriptor.getInstance().loadHotModifiedProps();
         return true;
+      case LOAD_FILES:
+        operateLoadFiles((OperateFilePlan) plan);
+        return true;
+      case REMOVE_FILE:
+        operateRemoveFile((OperateFilePlan) plan);
+        return true;
+      case MOVE_FILE:
+        operateMoveFile((OperateFilePlan) plan);
+        return true;
       default:
         throw new UnsupportedOperationException(
             String.format("operation %s is not supported", plan.getOperatorType()));
     }
   }
 
+  private void operateLoadFiles(OperateFilePlan plan){
+
+  }
+
+  private void operateRemoveFile(OperateFilePlan plan){
+
+  }
+
+  private void operateMoveFile(OperateFilePlan plan){
+
+  }
+
   private void operateTTL(SetTTLPlan plan) throws QueryProcessException {
     try {
       MManager.getInstance().setTTL(plan.getStorageGroup(), plan.getDataTTL());
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java
index 8c4eeac..50d87bc 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java
@@ -74,6 +74,6 @@ public abstract class Operator {
     DELETE_ROLE, GRANT_ROLE_PRIVILEGE, REVOKE_ROLE_PRIVILEGE, LIST_USER, LIST_ROLE,
     LIST_USER_PRIVILEGE, LIST_ROLE_PRIVILEGE, LIST_USER_ROLES, LIST_ROLE_USERS,
     GRANT_WATERMARK_EMBEDDING, REVOKE_WATERMARK_EMBEDDING,
-    TTL, DELETE_STORAGE_GROUP, LOAD_CONFIGURATION, SHOW
+    TTL, DELETE_STORAGE_GROUP, LOAD_CONFIGURATION, SHOW, LOAD_FILES, REMOVE_FILE, MOVE_FILE
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/LoadFilesOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/LoadFilesOperator.java
new file mode 100644
index 0000000..15c2ca9
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/LoadFilesOperator.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.qp.logical.sys;
+
+import java.io.File;
+import org.apache.iotdb.db.qp.constant.SQLConstant;
+import org.apache.iotdb.db.qp.logical.RootOperator;
+
+public class LoadFilesOperator extends RootOperator {
+
+  private File file;
+
+  public LoadFilesOperator(File file) {
+    super(SQLConstant.TOK_LOAD_FILES);
+    this.file = file;
+    this.operatorType = OperatorType.LOAD_FILES;
+  }
+
+  public File getFile() {
+    return file;
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/MoveFileOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/MoveFileOperator.java
new file mode 100644
index 0000000..11f88f9
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/MoveFileOperator.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.qp.logical.sys;
+
+import java.io.File;
+import org.apache.iotdb.db.qp.constant.SQLConstant;
+import org.apache.iotdb.db.qp.logical.RootOperator;
+
+public class MoveFileOperator extends RootOperator {
+
+  private File file;
+  private File targetDir;
+
+  public MoveFileOperator(File file, File targetDir) {
+    super(SQLConstant.TOK_MOVE_FILE);
+    this.file = file;
+    this.targetDir = targetDir;
+    this.operatorType = OperatorType.MOVE_FILE;
+  }
+
+  public File getFile() {
+    return file;
+  }
+
+  public File getTargetDir() {
+    return targetDir;
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/RemoveFileOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/RemoveFileOperator.java
new file mode 100644
index 0000000..845387f
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/RemoveFileOperator.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.qp.logical.sys;
+
+import java.io.File;
+import org.apache.iotdb.db.qp.constant.SQLConstant;
+import org.apache.iotdb.db.qp.logical.RootOperator;
+
+public class RemoveFileOperator extends RootOperator {
+
+  private File file;
+
+  public RemoveFileOperator(File file) {
+    super(SQLConstant.TOK_REMOVE_FILE);
+    this.file = file;
+    this.operatorType = OperatorType.REMOVE_FILE;
+  }
+
+  public RemoveFileOperator(int tokenIntType, File file) {
+    super(tokenIntType);
+    this.file = file;
+  }
+
+  public File getFile() {
+    return file;
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/OperateFilePlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/OperateFilePlan.java
new file mode 100644
index 0000000..864a432
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/OperateFilePlan.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.qp.physical.sys;
+
+import java.io.File;
+import java.util.List;
+import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
+import org.apache.iotdb.db.qp.physical.PhysicalPlan;
+import org.apache.iotdb.tsfile.read.common.Path;
+
+public class OperateFilePlan extends PhysicalPlan {
+
+  private File file;
+  private File targetDir;
+
+  public OperateFilePlan(File file, OperatorType operatorType) {
+    super(false, operatorType);
+    this.file = file;
+  }
+
+  public OperateFilePlan(File file, File targetDir, OperatorType operatorType) {
+    super(false, operatorType);
+    this.file = file;
+    this.targetDir = targetDir;
+  }
+
+  @Override
+  public List<Path> getPaths() {
+    return null;
+  }
+
+  public File getFile() {
+    return file;
+  }
+
+  public File getTargetDir() {
+    return targetDir;
+  }
+
+  @Override
+  public String toString() {
+    return "OperateFilePlan{" +
+        "file=" + file.getPath() +
+        ", targetDir=" + (targetDir == null ? " null":targetDir.getPath()) +
+        ", operatorType=" + getOperatorType() +
+        '}';
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
index a8d4ae0..6fa0805 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
@@ -53,11 +53,14 @@ import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_LINK;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_LIST;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_LOAD;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_LOAD_CONFIGURATION;
+import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_LOAD_FILES;
+import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_MOVE_FILE;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_PATH;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_PREVIOUS;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_PRIVILEGES;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_PROPERTY;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_QUERY;
+import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_REMOVE_FILE;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_REVOKE;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_REVOKE_WATERMARK_EMBEDDING;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_ROLE;
@@ -76,6 +79,7 @@ import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_UPDATE;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_USER;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_WHERE;
 
+import java.io.File;
 import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.EnumMap;
@@ -108,7 +112,10 @@ import org.apache.iotdb.db.qp.logical.sys.DeleteStorageGroupOperator;
 import org.apache.iotdb.db.qp.logical.sys.DeleteTimeSeriesOperator;
 import org.apache.iotdb.db.qp.logical.sys.LoadConfigurationOperator;
 import org.apache.iotdb.db.qp.logical.sys.LoadDataOperator;
+import org.apache.iotdb.db.qp.logical.sys.LoadFilesOperator;
+import org.apache.iotdb.db.qp.logical.sys.MoveFileOperator;
 import org.apache.iotdb.db.qp.logical.sys.PropertyOperator;
+import org.apache.iotdb.db.qp.logical.sys.RemoveFileOperator;
 import org.apache.iotdb.db.qp.logical.sys.SetStorageGroupOperator;
 import org.apache.iotdb.db.qp.logical.sys.SetTTLOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowOperator;
@@ -286,6 +293,16 @@ public class LogicalGenerator {
       case TOK_SHOW:
         analyzeShow(astNode);
         return;
+      case TOK_LOAD_FILES:
+        initializedOperator = new LoadFilesOperator(new File(astNode.getChild(0).getText()));
+        return;
+      case TOK_REMOVE_FILE:
+        initializedOperator = new RemoveFileOperator(new File(astNode.getChild(0).getText()));
+        return;
+      case TOK_MOVE_FILE:
+        initializedOperator = new MoveFileOperator(new File(astNode.getChild(0).getText()),
+            new File(astNode.getChild(1).getText()));
+        return;
       default:
         throw new QueryProcessException("Not supported TqlParser type " + token.getText());
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
index e4ed293..6ab3eda 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
@@ -34,6 +34,7 @@ import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.qp.constant.SQLConstant;
 import org.apache.iotdb.db.qp.executor.IQueryProcessExecutor;
 import org.apache.iotdb.db.qp.logical.Operator;
+import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
 import org.apache.iotdb.db.qp.logical.crud.BasicFunctionOperator;
 import org.apache.iotdb.db.qp.logical.crud.DeleteDataOperator;
 import org.apache.iotdb.db.qp.logical.crud.FilterOperator;
@@ -45,7 +46,10 @@ import org.apache.iotdb.db.qp.logical.sys.DataAuthOperator;
 import org.apache.iotdb.db.qp.logical.sys.DeleteStorageGroupOperator;
 import org.apache.iotdb.db.qp.logical.sys.DeleteTimeSeriesOperator;
 import org.apache.iotdb.db.qp.logical.sys.LoadDataOperator;
+import org.apache.iotdb.db.qp.logical.sys.LoadFilesOperator;
+import org.apache.iotdb.db.qp.logical.sys.MoveFileOperator;
 import org.apache.iotdb.db.qp.logical.sys.PropertyOperator;
+import org.apache.iotdb.db.qp.logical.sys.RemoveFileOperator;
 import org.apache.iotdb.db.qp.logical.sys.SetStorageGroupOperator;
 import org.apache.iotdb.db.qp.logical.sys.SetTTLOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowTTLOperator;
@@ -63,6 +67,7 @@ import org.apache.iotdb.db.qp.physical.sys.DeleteStorageGroupPlan;
 import org.apache.iotdb.db.qp.physical.sys.DeleteTimeSeriesPlan;
 import org.apache.iotdb.db.qp.physical.sys.LoadConfigurationPlan;
 import org.apache.iotdb.db.qp.physical.sys.LoadDataPlan;
+import org.apache.iotdb.db.qp.physical.sys.OperateFilePlan;
 import org.apache.iotdb.db.qp.physical.sys.PropertyPlan;
 import org.apache.iotdb.db.qp.physical.sys.SetStorageGroupPlan;
 import org.apache.iotdb.db.qp.physical.sys.SetTTLPlan;
@@ -167,6 +172,13 @@ public class PhysicalGenerator {
             throw new LogicalOperatorException(String
                 .format("not supported operator type %s in show operation.", operator.getType()));
         }
+      case LOAD_FILES:
+        return new OperateFilePlan(((LoadFilesOperator)operator).getFile(), OperatorType.LOAD_FILES);
+      case REMOVE_FILE:
+        return new OperateFilePlan(((RemoveFileOperator)operator).getFile(), OperatorType.REMOVE_FILE);
+      case MOVE_FILE:
+        return new OperateFilePlan(((MoveFileOperator) operator).getFile(),
+            ((MoveFileOperator) operator).getTargetDir(), OperatorType.MOVE_FILE);
       default:
         throw new LogicalOperatorException(operator.getType().toString(), "");
     }
diff --git a/server/src/test/java/org/apache/iotdb/db/qp/plan/PhysicalPlanTest.java b/server/src/test/java/org/apache/iotdb/db/qp/plan/PhysicalPlanTest.java
index 2877bef..a67dd74 100644
--- a/server/src/test/java/org/apache/iotdb/db/qp/plan/PhysicalPlanTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/qp/plan/PhysicalPlanTest.java
@@ -36,6 +36,7 @@ import org.apache.iotdb.db.qp.physical.sys.AuthorPlan;
 import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
 import org.apache.iotdb.db.qp.physical.sys.DataAuthPlan;
 import org.apache.iotdb.db.qp.physical.sys.LoadConfigurationPlan;
+import org.apache.iotdb.db.qp.physical.sys.OperateFilePlan;
 import org.apache.iotdb.db.qp.physical.sys.PropertyPlan;
 import org.apache.iotdb.db.qp.physical.sys.ShowPlan;
 import org.apache.iotdb.db.qp.utils.MemIntQpExecutor;
@@ -511,4 +512,50 @@ public class PhysicalPlanTest {
     ShowPlan plan = (ShowPlan) processor.parseSQLToPhysicalPlan(metadata);
     assertEquals("SHOW FLUSH_TASK_INFO", plan.toString());
   }
+
+  @Test
+  public void testLoadFiles() throws QueryProcessException, MetadataException {
+    String metadata = "load /user/iotdb/data/213213441243-1-2.tsfile";
+    QueryProcessor processor = new QueryProcessor(new MemIntQpExecutor());
+    OperateFilePlan plan = (OperateFilePlan) processor.parseSQLToPhysicalPlan(metadata);
+    assertEquals(
+        "OperateFilePlan{file=/user/iotdb/data/213213441243-1-2.tsfile, targetDir= null, operatorType=LOAD_FILES}",
+        plan.toString());
+    metadata = "load C:\\\\iotdb\\\\data\\\\213213441243-1-2.tsfile";
+    plan = (OperateFilePlan) processor.parseSQLToPhysicalPlan(metadata);
+    assertEquals(
+        "OperateFilePlan{file=C:\\\\iotdb\\\\data\\\\213213441243-1-2.tsfile, targetDir= null, operatorType=LOAD_FILES}",
+        plan.toString());
+  }
+
+  @Test
+  public void testRemoveFile() throws QueryProcessException, MetadataException {
+    String metadata = "remove /user/iotdb/data/213213441243-1-2.tsfile";
+    QueryProcessor processor = new QueryProcessor(new MemIntQpExecutor());
+    OperateFilePlan plan = (OperateFilePlan) processor.parseSQLToPhysicalPlan(metadata);
+    assertEquals(
+        "OperateFilePlan{file=/user/iotdb/data/213213441243-1-2.tsfile, targetDir= null, operatorType=REMOVE_FILE}",
+        plan.toString());
+    metadata = "remove C:\\\\iotdb\\\\data\\\\213213441243-1-2.tsfile";
+    plan = (OperateFilePlan) processor.parseSQLToPhysicalPlan(metadata);
+    assertEquals(
+        "OperateFilePlan{file=C:\\\\iotdb\\\\data\\\\213213441243-1-2.tsfile, targetDir= null, operatorType=REMOVE_FILE}",
+        plan.toString());
+
+  }
+
+  @Test
+  public void testMoveFile() throws QueryProcessException, MetadataException {
+    String metadata = "move /user/iotdb/data/213213441243-1-2.tsfile /user/backup";
+    QueryProcessor processor = new QueryProcessor(new MemIntQpExecutor());
+    OperateFilePlan plan = (OperateFilePlan) processor.parseSQLToPhysicalPlan(metadata);
+    assertEquals(
+        "OperateFilePlan{file=/user/iotdb/data/213213441243-1-2.tsfile, targetDir=/user/backup, operatorType=MOVE_FILE}",
+        plan.toString());
+    metadata = "move C:\\\\iotdb\\\\data\\\\213213441243-1-2.tsfile C:\\\\backup";
+    plan = (OperateFilePlan) processor.parseSQLToPhysicalPlan(metadata);
+    assertEquals(
+        "OperateFilePlan{file=C:\\\\iotdb\\\\data\\\\213213441243-1-2.tsfile, targetDir=C:\\\\backup, operatorType=MOVE_FILE}",
+        plan.toString());
+  }
 }