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

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

commit 20d551398d89161c0769a00e0804fac49b6c103b
Author: lta <[email protected]>
AuthorDate: Wed Mar 27 23:07:29 2019 +0800

    add property plan codec
---
 .../iotdb/db/qp/logical/sys/PropertyOperator.java  | 47 ++++++++++++++++++++-
 .../iotdb/db/qp/physical/sys/PropertyPlan.java     | 20 +++++++++
 .../iotdb/db/writelog/transfer/CodecInstances.java | 44 +++++++++++++++++++-
 .../db/writelog/transfer/PhysicalPlanCodec.java    |  3 +-
 .../writelog/transfer/PhysicalPlanLogTransfer.java |  3 ++
 .../db/writelog/transfer/SystemLogOperator.java    |  1 +
 .../transfer/PhysicalPlanLogTransferTest.java      | 48 ++++------------------
 7 files changed, 123 insertions(+), 43 deletions(-)

diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/qp/logical/sys/PropertyOperator.java 
b/iotdb/src/main/java/org/apache/iotdb/db/qp/logical/sys/PropertyOperator.java
index d10cb70..6a6ae4c 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/qp/logical/sys/PropertyOperator.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/qp/logical/sys/PropertyOperator.java
@@ -56,6 +56,51 @@ public class PropertyOperator extends RootOperator {
   }
 
   public enum PropertyType {
-    ADD_TREE, ADD_PROPERTY_LABEL, DELETE_PROPERTY_LABEL, 
ADD_PROPERTY_TO_METADATA, DEL_PROPERTY_FROM_METADATA
+    ADD_TREE, ADD_PROPERTY_LABEL, DELETE_PROPERTY_LABEL, 
ADD_PROPERTY_TO_METADATA, DEL_PROPERTY_FROM_METADATA;
+
+    /**
+     * deserialize short number.
+     *
+     * @param i short number
+     * @return NamespaceType
+     */
+    public static PropertyType deserialize(short i) {
+      switch (i) {
+        case 0:
+          return ADD_TREE;
+        case 1:
+          return ADD_PROPERTY_LABEL;
+        case 2:
+          return DELETE_PROPERTY_LABEL;
+        case 3:
+          return ADD_PROPERTY_TO_METADATA;
+        case 4:
+          return DEL_PROPERTY_FROM_METADATA;
+        default:
+          return null;
+      }
+    }
+
+    /**
+     * serialize.
+     *
+     * @return short number
+     */
+    public short serialize() {
+      switch (this) {
+        case ADD_TREE:
+          return 0;
+        case ADD_PROPERTY_LABEL:
+          return 1;
+        case DELETE_PROPERTY_LABEL:
+          return 2;
+        case ADD_PROPERTY_TO_METADATA:
+          return 3;
+        case DEL_PROPERTY_FROM_METADATA:
+          return 4;
+        default:
+          return 0;
+      }
+    }
   }
 }
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/qp/physical/sys/PropertyPlan.java 
b/iotdb/src/main/java/org/apache/iotdb/db/qp/physical/sys/PropertyPlan.java
index f708e85..2f2c591 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/qp/physical/sys/PropertyPlan.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/qp/physical/sys/PropertyPlan.java
@@ -20,6 +20,7 @@ package org.apache.iotdb.db.qp.physical.sys;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import org.apache.iotdb.db.qp.logical.Operator;
 import org.apache.iotdb.db.qp.logical.sys.PropertyOperator;
 import org.apache.iotdb.db.qp.physical.PhysicalPlan;
@@ -72,4 +73,23 @@ public class PropertyPlan extends PhysicalPlan {
     }
     return ret;
   }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    PropertyPlan that = (PropertyPlan) o;
+    return propertyType == that.propertyType &&
+        Objects.equals(propertyPath, that.propertyPath) &&
+        Objects.equals(metadataPath, that.metadataPath);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(propertyType, propertyPath, metadataPath);
+  }
 }
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/CodecInstances.java 
b/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/CodecInstances.java
index 22fc9e4..6e7ebda 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/CodecInstances.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/CodecInstances.java
@@ -33,12 +33,14 @@ import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.qp.logical.sys.AuthorOperator;
 import org.apache.iotdb.db.qp.logical.sys.MetadataOperator;
+import org.apache.iotdb.db.qp.logical.sys.PropertyOperator;
 import org.apache.iotdb.db.qp.physical.crud.DeletePlan;
 import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
 import org.apache.iotdb.db.qp.physical.crud.UpdatePlan;
 import org.apache.iotdb.db.qp.physical.sys.AuthorPlan;
 import org.apache.iotdb.db.qp.physical.sys.LoadDataPlan;
 import org.apache.iotdb.db.qp.physical.sys.MetadataPlan;
+import org.apache.iotdb.db.qp.physical.sys.PropertyPlan;
 import org.apache.iotdb.db.utils.ByteBufferUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -276,7 +278,7 @@ public class CodecInstances {
       buffer.put((byte) type);
 
       int authorType = plan.getAuthorType().serialize();
-      buffer.put((byte)authorType);
+      buffer.put((byte) authorType);
 
       ByteBufferUtils.putString(buffer, plan.getUserName());
       ByteBufferUtils.putString(buffer, plan.getRoleName());
@@ -312,7 +314,7 @@ public class CodecInstances {
       int permissionListLen = buffer.getInt();
       if (permissionListLen != -1) {
         permissions = new HashSet<>(permissionListLen);
-        for(int i =0 ; i < permissionListLen; i ++) {
+        for (int i = 0; i < permissionListLen; i++) {
           permissions.add(buffer.getInt());
         }
       }
@@ -359,4 +361,42 @@ public class CodecInstances {
     }
   };
 
+  static final Codec<PropertyPlan> propertyPlanCodec = new 
Codec<PropertyPlan>() {
+    ThreadLocal<ByteBuffer> localBuffer = new ThreadLocal<>();
+
+    @Override
+    public byte[] encode(PropertyPlan plan) {
+      int type = SystemLogOperator.PROPERTY;
+      if (localBuffer.get() == null) {
+        localBuffer.set(ByteBuffer.allocate(config.getMaxLogEntrySize()));
+      }
+      ByteBuffer buffer = localBuffer.get();
+      buffer.clear();
+      buffer.put((byte) type);
+
+      int propertyType = plan.getPropertyType().serialize();
+      buffer.put((byte) propertyType);
+
+      Path metadataPath = plan.getMetadataPath();
+      Path propertyPath = plan.getPropertyPath();
+      ByteBufferUtils.putString(buffer, metadataPath == null ? null : 
metadataPath.toString());
+      ByteBufferUtils.putString(buffer, propertyPath == null ? null : 
propertyPath.toString());
+
+      return Arrays.copyOfRange(buffer.array(), 0, buffer.position());
+    }
+
+    @Override
+    public PropertyPlan decode(byte[] bytes) throws IOException {
+      ByteBuffer buffer = ByteBuffer.wrap(bytes);
+
+      buffer.get(); // read and skip an int representing "type"
+
+      PropertyOperator.PropertyType propertyType = 
PropertyOperator.PropertyType
+          .deserialize(buffer.get());
+      String metadataPath = ByteBufferUtils.readString(buffer);
+      String propertyPath = ByteBufferUtils.readString(buffer);
+      return new PropertyPlan(propertyType, propertyPath == null ? null : new 
Path(propertyPath),
+          metadataPath == null ? null : new Path(metadataPath));
+    }
+  };
 }
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/PhysicalPlanCodec.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/PhysicalPlanCodec.java
index 008dc15..b2189ba 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/PhysicalPlanCodec.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/PhysicalPlanCodec.java
@@ -40,7 +40,8 @@ public enum PhysicalPlanCodec {
   DELETEPLAN(SystemLogOperator.DELETE, CodecInstances.deletePlanCodec),
   METADATAPLAN(SystemLogOperator.METADATA, CodecInstances.metadataPlanCodec),
   AUTHORPLAN(SystemLogOperator.AUTHOR, CodecInstances.authorPlanCodec),
-  LOADDATAPLAN(SystemLogOperator.LOADDATA, CodecInstances.loadDataPlanCodec);
+  LOADDATAPLAN(SystemLogOperator.LOADDATA, CodecInstances.loadDataPlanCodec),
+  PROPERTYPLAN(SystemLogOperator.PROPERTY, CodecInstances.propertyPlanCodec);
 
   private static final HashMap<Integer, PhysicalPlanCodec> codecMap = new 
HashMap<>();
 
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/PhysicalPlanLogTransfer.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/PhysicalPlanLogTransfer.java
index 76d27ee..e4a0cc2 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/PhysicalPlanLogTransfer.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/PhysicalPlanLogTransfer.java
@@ -29,6 +29,7 @@ import org.apache.iotdb.db.qp.physical.crud.UpdatePlan;
 import org.apache.iotdb.db.qp.physical.sys.AuthorPlan;
 import org.apache.iotdb.db.qp.physical.sys.LoadDataPlan;
 import org.apache.iotdb.db.qp.physical.sys.MetadataPlan;
+import org.apache.iotdb.db.qp.physical.sys.PropertyPlan;
 
 public class PhysicalPlanLogTransfer {
 
@@ -49,6 +50,8 @@ public class PhysicalPlanLogTransfer {
       codec = (Codec<PhysicalPlan>) 
PhysicalPlanCodec.fromOpcode(SystemLogOperator.AUTHOR).codec;
     } else if (plan instanceof LoadDataPlan) {
       codec = (Codec<PhysicalPlan>) 
PhysicalPlanCodec.fromOpcode(SystemLogOperator.LOADDATA).codec;
+    } else if (plan instanceof PropertyPlan) {
+      codec = (Codec<PhysicalPlan>) 
PhysicalPlanCodec.fromOpcode(SystemLogOperator.PROPERTY).codec;
     } else{
       throw new UnsupportedOperationException(
           "SystemLogOperator given is not supported. " + 
plan.getOperatorType());
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/SystemLogOperator.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/SystemLogOperator.java
index f8e9bed..19b4d29 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/SystemLogOperator.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/writelog/transfer/SystemLogOperator.java
@@ -31,4 +31,5 @@ public class SystemLogOperator {
   public static final int METADATA = 3;
   public static final int AUTHOR = 4;
   public static final int LOADDATA = 5;
+  public static final int PROPERTY = 6;
 }
diff --git 
a/iotdb/src/test/java/org/apache/iotdb/db/writelog/transfer/PhysicalPlanLogTransferTest.java
 
b/iotdb/src/test/java/org/apache/iotdb/db/writelog/transfer/PhysicalPlanLogTransferTest.java
index bb93aa7..51a410b 100644
--- 
a/iotdb/src/test/java/org/apache/iotdb/db/writelog/transfer/PhysicalPlanLogTransferTest.java
+++ 
b/iotdb/src/test/java/org/apache/iotdb/db/writelog/transfer/PhysicalPlanLogTransferTest.java
@@ -33,6 +33,7 @@ import org.apache.iotdb.db.qp.physical.crud.UpdatePlan;
 import org.apache.iotdb.db.qp.physical.sys.AuthorPlan;
 import org.apache.iotdb.db.qp.physical.sys.LoadDataPlan;
 import org.apache.iotdb.db.qp.physical.sys.MetadataPlan;
+import org.apache.iotdb.db.qp.physical.sys.PropertyPlan;
 import org.apache.iotdb.db.qp.utils.MemIntQpExecutor;
 import org.apache.iotdb.tsfile.read.common.Path;
 import org.junit.Test;
@@ -90,51 +91,20 @@ public class PhysicalPlanLogTransferTest {
     byte[] loadDataPlanProperty = loadDataPlanCodec.encode(loadDataPlan);
     assertEquals(true, Arrays.equals(loadDataPlanProperty, 
loadDataPlanBytesTest));
 
+    /** Property Plan test **/
+    sql = "add label label1021 to property propropro";
+    PropertyPlan propertyPlan = (PropertyPlan) 
processor.parseSQLToPhysicalPlan(sql);
+    byte[] propertyPlanBytesTest = 
PhysicalPlanLogTransfer.operatorToLog(propertyPlan);
+    Codec<PropertyPlan> propertyPlanCodec = CodecInstances.propertyPlanCodec;
+    byte[] propertyPlanProperty = propertyPlanCodec.encode(propertyPlan);
+    assertEquals(true, Arrays.equals(propertyPlanProperty, 
propertyPlanBytesTest));
+
   }
 
   @Test
   public void logToOperator()
       throws IOException, ArgsErrorException, ProcessorException, 
QueryProcessorException, AuthException {
 
-    /** Insert Plan test **/
-    byte[] insertPlanBytesTest = 
PhysicalPlanLogTransfer.operatorToLog(insertPlan);
-    InsertPlan insertPlanTest = (InsertPlan) PhysicalPlanLogTransfer
-        .logToOperator(insertPlanBytesTest);
-    assertEquals(true, insertPlanTest.equals(insertPlan));
-
-    /** Delete Plan test **/
-    byte[] deletePlanBytesTest = 
PhysicalPlanLogTransfer.operatorToLog(deletePlan);
-    DeletePlan deletePlanTest = (DeletePlan) PhysicalPlanLogTransfer
-        .logToOperator(deletePlanBytesTest);
-    assertEquals(true, deletePlanTest.equals(deletePlan));
-
-    /** Update Plan test **/
-    byte[] updatePlanBytesTest = 
PhysicalPlanLogTransfer.operatorToLog(updatePlan);
-    UpdatePlan updatePlanTest = (UpdatePlan) PhysicalPlanLogTransfer
-        .logToOperator(updatePlanBytesTest);
-    assertEquals(true, updatePlanTest.equals(updatePlan));
-
-    /** Metadata Plan test **/
-    String metadataStatement = "create timeseries root.vehicle.d1.s1 with 
datatype=INT32,encoding=RLE";
-    MetadataPlan metadataPlan = (MetadataPlan) 
processor.parseSQLToPhysicalPlan(metadataStatement);
-    byte[] metadataPlanBytesTest = 
PhysicalPlanLogTransfer.operatorToLog(metadataPlan);
-    MetadataPlan metadataPlanTest = (MetadataPlan) PhysicalPlanLogTransfer
-        .logToOperator(metadataPlanBytesTest);
-    assertEquals(true, metadataPlanTest.equals(metadataPlan));
-
-    /** Author Plan test **/
-    String sql = "grant role xm privileges 
'SET_STORAGE_GROUP','DELETE_TIMESERIES' on root.vehicle.device.sensor";
-    AuthorPlan authorPlan = (AuthorPlan) processor.parseSQLToPhysicalPlan(sql);
-    byte[] authorPlanBytesTest = 
PhysicalPlanLogTransfer.operatorToLog(authorPlan);
-    AuthorPlan authorPlanTest = (AuthorPlan) PhysicalPlanLogTransfer
-        .logToOperator(authorPlanBytesTest);
-    assertEquals(true, authorPlanTest.equals(authorPlan));
-
-    /** LoadData Plan test **/
-    byte[] loadDataPlanBytesTest = 
PhysicalPlanLogTransfer.operatorToLog(loadDataPlan);
-    LoadDataPlan loadDataPlanTest = (LoadDataPlan) PhysicalPlanLogTransfer
-        .logToOperator(loadDataPlanBytesTest);
-    assertEquals(true, loadDataPlan.equals(loadDataPlanTest));
 
   }
 }
\ No newline at end of file

Reply via email to