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/10/21 13:36:49 UTC
[incubator-iotdb] 01/01: add check path validity
This is an automated email from the ASF dual-hosted git repository.
lta pushed a commit to branch check_path_in_session
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit 6932147a9d7c1a1a60d61d64d73240dc02777585
Author: lta <li...@163.com>
AuthorDate: Mon Oct 21 21:36:17 2019 +0800
add check path validity
---
.../main/java/org/apache/iotdb/session/Config.java | 6 +++
.../java/org/apache/iotdb/session/Session.java | 19 ++++++++
.../org/apache/iotdb/session/IoTDBSessionIT.java | 55 ++++++++++++++++++++++
.../tsfile/common/constant/TsFileConstant.java | 1 +
4 files changed, 81 insertions(+)
diff --git a/session/src/main/java/org/apache/iotdb/session/Config.java b/session/src/main/java/org/apache/iotdb/session/Config.java
index 3bc2344..147dea6 100644
--- a/session/src/main/java/org/apache/iotdb/session/Config.java
+++ b/session/src/main/java/org/apache/iotdb/session/Config.java
@@ -18,9 +18,15 @@
*/
package org.apache.iotdb.session;
+import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.PATH_ROOT;
+import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.PATH_SEPARATOR;
+
public class Config {
public static final String DEFAULT_USER = "user";
public static final String DEFAULT_PASSWORD = "password";
+ public static final String PATH_MATCHER =
+ PATH_ROOT + "([" + PATH_SEPARATOR + "](([a-zA-Z_][a-zA-Z0-9_-]*)|([+-]?[0-9]+)))+";
+
}
diff --git a/session/src/main/java/org/apache/iotdb/session/Session.java b/session/src/main/java/org/apache/iotdb/session/Session.java
index 4817c67..32d7fa0 100644
--- a/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -18,11 +18,14 @@
*/
package org.apache.iotdb.session;
+import static org.apache.iotdb.session.Config.PATH_MATCHER;
+
import java.sql.SQLException;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
+import java.util.regex.Pattern;
import org.apache.iotdb.rpc.IoTDBRPCException;
import org.apache.iotdb.rpc.RpcUtils;
import org.apache.iotdb.rpc.TSStatusCode;
@@ -257,6 +260,7 @@ public class Session {
}
public synchronized TSStatus setStorageGroup(String storageGroupId) throws IoTDBSessionException {
+ checkPathValidity(storageGroupId);
try {
return checkAndReturn(client.setStorageGroup(storageGroupId));
} catch (TException e) {
@@ -283,6 +287,7 @@ public class Session {
public synchronized TSStatus createTimeseries(String path, TSDataType dataType,
TSEncoding encoding, CompressionType compressor) throws IoTDBSessionException {
+ checkPathValidity(path);
TSCreateTimeseriesReq request = new TSCreateTimeseriesReq();
request.setPath(path);
request.setDataType(dataType.ordinal());
@@ -376,4 +381,18 @@ public class Session {
RpcUtils.verifySuccess(execResp.getStatus());
}
+
+ private void checkPathValidity(String path) throws IoTDBSessionException {
+ if (!Pattern.matches(PATH_MATCHER, path)) {
+ throw new IoTDBSessionException(String.format("Path %s is invalid", path));
+ }
+ }
+
+
+ public static void main(String[] args) {
+ System.out.println(
+ Pattern.matches("root([.](([a-zA-Z_][a-zA-Z0-9_-]*)|([+-]?[0-9]+)))+", "root.\tvehicle"));
+ }
+
+
}
diff --git a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java
index 435ffa7..d460369 100644
--- a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java
+++ b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java
@@ -280,4 +280,59 @@ public class IoTDBSessionIT {
session.executeNonQueryStatement(
"insert into root.sg1.d1(timestamp,s1, s2, s3) values(100, 1,2,3)");
}
+
+ @Test
+ public void checkPathTest()
+ throws ClassNotFoundException, SQLException, IoTDBSessionException, TException, IoTDBRPCException {
+ session = new Session("127.0.0.1", 6667, "root", "root");
+ session.open();
+
+ //test set sg
+ checkSetSG(session, "root.vehicle", true);
+ checkSetSG(session, "root.123456", true);
+ checkSetSG(session, "root._1234", true);
+ checkSetSG(session, "root._vehicle", true);
+ checkSetSG(session, "root.\tvehicle", false);
+ checkSetSG(session, "root.\nvehicle", false);
+ checkSetSG(session, "root..vehicle", false);
+ checkSetSG(session, "root.1234a4", false);
+ checkSetSG(session, "root.+12345", true);
+ checkSetSG(session, "root.-12345", true);
+ checkSetSG(session, "root.%12345", false);
+ checkSetSG(session, "root.a{12345}", false);
+
+ //test create timeseries
+ checkCreateTimeseries(session, "root.vehicle.d0.s0", true);
+ checkCreateTimeseries(session, "root.vehicle.1110.s0", true);
+ checkCreateTimeseries(session, "root.vehicle.d0.1220", true);
+ checkCreateTimeseries(session, "root.vehicle._1234.s0", true);
+ checkCreateTimeseries(session, "root.vehicle.+1245.-1256", true);
+ checkCreateTimeseries(session, "root.vehicle./d0.s0", false);
+ checkCreateTimeseries(session, "root.vehicle.d\t0.s0", false);
+ checkCreateTimeseries(session, "root.vehicle.!d\t0.s0", false);
+ checkCreateTimeseries(session, "root.vehicle.d{dfewrew0}.s0", false);
+
+ session.close();
+ }
+
+ private void checkSetSG(Session session, String sg, boolean correctStatus){
+ boolean status = true;
+ try {
+ session.setStorageGroup(sg);
+ } catch (IoTDBSessionException e) {
+ status = false;
+ }
+ assertEquals(status, correctStatus);
+ }
+
+ private void checkCreateTimeseries(Session session, String timeseris, boolean correctStatus){
+ boolean status = true;
+ try {
+ session.createTimeseries(timeseris, TSDataType.INT64, TSEncoding.RLE,
+ CompressionType.SNAPPY);
+ } catch (IoTDBSessionException e) {
+ status = false;
+ }
+ assertEquals(status, correctStatus);
+ }
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/common/constant/TsFileConstant.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/common/constant/TsFileConstant.java
index 594a613..479bd8e 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/common/constant/TsFileConstant.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/common/constant/TsFileConstant.java
@@ -23,6 +23,7 @@ public class TsFileConstant {
public static final String TSFILE_SUFFIX = ".tsfile";
public static final String TSFILE_HOME = "TSFILE_HOME";
public static final String TSFILE_CONF = "TSFILE_CONF";
+ public static final String PATH_ROOT = "root";
public static final String PATH_SEPARATOR = ".";
public static final String PATH_SEPARATER_NO_REGEX = "\\.";
public static final String DEFAULT_DELTA_TYPE = "default_delta_type";