This is an automated email from the ASF dual-hosted git repository.
chaow pushed a commit to branch rel/0.12
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/0.12 by this push:
new ec526ea [IOTDB-1417] [To rel/0.12]UDF meta plans for cluster (#3571)
ec526ea is described below
commit ec526ea3550012d1b22ba8f7a68d68193767ad79
Author: Hang Ji <[email protected]>
AuthorDate: Thu Jul 15 08:59:02 2021 +0800
[IOTDB-1417] [To rel/0.12]UDF meta plans for cluster (#3571)
* (cherry picked from commit 922075b18e1fd62591c332cc9eb3f3267e633161)
---
.../apache/iotdb/cluster/utils/PartitionUtils.java | 6 ++-
.../apache/iotdb/db/qp/physical/PhysicalPlan.java | 10 +++++
.../db/qp/physical/sys/CreateFunctionPlan.java | 45 ++++++++++++++++++++--
.../iotdb/db/qp/physical/sys/DropFunctionPlan.java | 25 +++++++++++-
.../iotdb/db/qp/physical/PhysicalPlanTest.java | 10 +++++
5 files changed, 91 insertions(+), 5 deletions(-)
diff --git
a/cluster/src/main/java/org/apache/iotdb/cluster/utils/PartitionUtils.java
b/cluster/src/main/java/org/apache/iotdb/cluster/utils/PartitionUtils.java
index 9bcd9ec..0112111 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/utils/PartitionUtils.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/utils/PartitionUtils.java
@@ -28,9 +28,11 @@ import org.apache.iotdb.db.qp.physical.crud.DeletePlan;
import org.apache.iotdb.db.qp.physical.crud.InsertTabletPlan;
import org.apache.iotdb.db.qp.physical.crud.SetDeviceTemplatePlan;
import org.apache.iotdb.db.qp.physical.sys.AuthorPlan;
+import org.apache.iotdb.db.qp.physical.sys.CreateFunctionPlan;
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.DropFunctionPlan;
import org.apache.iotdb.db.qp.physical.sys.FlushPlan;
import org.apache.iotdb.db.qp.physical.sys.LoadConfigurationPlan;
import
org.apache.iotdb.db.qp.physical.sys.LoadConfigurationPlan.LoadConfigurationPlanType;
@@ -100,7 +102,9 @@ public class PartitionUtils {
|| plan instanceof DeleteStorageGroupPlan
// DataAuthPlan is global because all nodes must have all user info
|| plan instanceof DataAuthPlan
- || plan instanceof CreateTemplatePlan;
+ || plan instanceof CreateTemplatePlan
+ || plan instanceof CreateFunctionPlan
+ || plan instanceof DropFunctionPlan;
}
/**
diff --git
a/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
b/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
index fd73dba..58db8ab 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
@@ -35,12 +35,14 @@ import org.apache.iotdb.db.qp.physical.sys.AuthorPlan;
import org.apache.iotdb.db.qp.physical.sys.AutoCreateDeviceMNodePlan;
import org.apache.iotdb.db.qp.physical.sys.ChangeAliasPlan;
import org.apache.iotdb.db.qp.physical.sys.ChangeTagOffsetPlan;
+import org.apache.iotdb.db.qp.physical.sys.CreateFunctionPlan;
import org.apache.iotdb.db.qp.physical.sys.CreateIndexPlan;
import org.apache.iotdb.db.qp.physical.sys.CreateMultiTimeSeriesPlan;
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.DropFunctionPlan;
import org.apache.iotdb.db.qp.physical.sys.DropIndexPlan;
import org.apache.iotdb.db.qp.physical.sys.FlushPlan;
import org.apache.iotdb.db.qp.physical.sys.LoadConfigurationPlan;
@@ -348,6 +350,12 @@ public abstract class PhysicalPlan {
case AUTO_CREATE_DEVICE_MNODE:
plan = new AutoCreateDeviceMNodePlan();
break;
+ case CREATE_FUNCTION:
+ plan = new CreateFunctionPlan();
+ break;
+ case DROP_FUNCTION:
+ plan = new DropFunctionPlan();
+ break;
default:
throw new IOException("unrecognized log type " + type);
}
@@ -398,6 +406,8 @@ public abstract class PhysicalPlan {
SET_DEVICE_TEMPLATE,
SET_USING_DEVICE_TEMPLATE,
AUTO_CREATE_DEVICE_MNODE,
+ CREATE_FUNCTION,
+ DROP_FUNCTION
}
public long getIndex() {
diff --git
a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateFunctionPlan.java
b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateFunctionPlan.java
index be2e0de..12f9c39 100644
---
a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateFunctionPlan.java
+++
b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateFunctionPlan.java
@@ -19,18 +19,26 @@
package org.apache.iotdb.db.qp.physical.sys;
+import org.apache.iotdb.db.exception.metadata.IllegalPathException;
import org.apache.iotdb.db.metadata.PartialPath;
import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
import org.apache.iotdb.db.qp.physical.PhysicalPlan;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
public class CreateFunctionPlan extends PhysicalPlan {
- private final boolean isTemporary;
- private final String udfName;
- private final String className;
+ private boolean isTemporary;
+ private String udfName;
+ private String className;
+
+ public CreateFunctionPlan() {
+ super(false, OperatorType.CREATE_FUNCTION);
+ }
public CreateFunctionPlan(boolean isTemporary, String udfName, String
className) {
super(false, OperatorType.CREATE_FUNCTION);
@@ -51,8 +59,39 @@ public class CreateFunctionPlan extends PhysicalPlan {
return className;
}
+ public void setTemporary(boolean temporary) {
+ isTemporary = temporary;
+ }
+
+ public void setUdfName(String udfName) {
+ this.udfName = udfName;
+ }
+
+ public void setClassName(String className) {
+ this.className = className;
+ }
+
@Override
public List<PartialPath> getPaths() {
return new ArrayList<>();
}
+
+ @Override
+ public void serialize(DataOutputStream outputStream) throws IOException {
+ outputStream.writeByte((byte) PhysicalPlanType.CREATE_FUNCTION.ordinal());
+
+ outputStream.writeBoolean(isTemporary);
+ putString(outputStream, udfName);
+ putString(outputStream, className);
+ outputStream.writeLong(index);
+ }
+
+ @Override
+ public void deserialize(ByteBuffer buffer) throws IllegalPathException {
+
+ isTemporary = buffer.get() == 1;
+ udfName = readString(buffer);
+ className = readString(buffer);
+ this.index = buffer.getLong();
+ }
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/DropFunctionPlan.java
b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/DropFunctionPlan.java
index bbc6171..9114ddc 100644
---
a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/DropFunctionPlan.java
+++
b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/DropFunctionPlan.java
@@ -19,16 +19,24 @@
package org.apache.iotdb.db.qp.physical.sys;
+import org.apache.iotdb.db.exception.metadata.IllegalPathException;
import org.apache.iotdb.db.metadata.PartialPath;
import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
import org.apache.iotdb.db.qp.physical.PhysicalPlan;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
public class DropFunctionPlan extends PhysicalPlan {
- private final String udfName;
+ private String udfName;
+
+ public DropFunctionPlan() {
+ super(false, OperatorType.DROP_FUNCTION);
+ }
public DropFunctionPlan(String udfName) {
super(false, OperatorType.DROP_FUNCTION);
@@ -43,4 +51,19 @@ public class DropFunctionPlan extends PhysicalPlan {
public List<PartialPath> getPaths() {
return new ArrayList<>();
}
+
+ @Override
+ public void serialize(DataOutputStream outputStream) throws IOException {
+ outputStream.writeByte((byte) PhysicalPlanType.DROP_FUNCTION.ordinal());
+
+ putString(outputStream, udfName);
+ outputStream.writeLong(index);
+ }
+
+ @Override
+ public void deserialize(ByteBuffer buffer) throws IllegalPathException {
+
+ udfName = readString(buffer);
+ this.index = buffer.getLong();
+ }
}
diff --git
a/server/src/test/java/org/apache/iotdb/db/qp/physical/PhysicalPlanTest.java
b/server/src/test/java/org/apache/iotdb/db/qp/physical/PhysicalPlanTest.java
index e6aaa95..bd2abe8 100644
--- a/server/src/test/java/org/apache/iotdb/db/qp/physical/PhysicalPlanTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/qp/physical/PhysicalPlanTest.java
@@ -46,6 +46,7 @@ import org.apache.iotdb.db.qp.physical.sys.DropFunctionPlan;
import org.apache.iotdb.db.qp.physical.sys.DropTriggerPlan;
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.ShowFunctionsPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowTriggersPlan;
import org.apache.iotdb.db.qp.physical.sys.StartTriggerPlan;
@@ -1215,4 +1216,13 @@ public class PhysicalPlanTest {
Assert.assertTrue(plan.isQuery());
Assert.assertEquals("root.sg1.d1.s1", plan.getPath().getFullPath());
}
+
+ @Test
+ public void testShowFunction() throws QueryProcessException {
+ String sql = "SHOW FUNCTIONS";
+
+ ShowFunctionsPlan plan = (ShowFunctionsPlan)
processor.parseSQLToPhysicalPlan(sql);
+ Assert.assertTrue(plan.isQuery());
+ Assert.assertEquals(ShowPlan.ShowContentType.FUNCTIONS,
plan.getShowContentType());
+ }
}