This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 27fb440 [IOTDB-545] Update checkPathValidity in Session (#886)
27fb440 is described below
commit 27fb4406368faec35e5d6ee2baf32f19124a108d
Author: Zesong Sun <[email protected]>
AuthorDate: Sat Mar 7 10:26:57 2020 +0800
[IOTDB-545] Update checkPathValidity in Session (#886)
* [IOTDB-545] Update checkPathValidity in Session
---
.../main/java/org/apache/iotdb/session/Config.java | 11 +++-
.../java/org/apache/iotdb/session/Session.java | 16 ++----
.../iotdb/session/CheckPathValidityTest.java | 49 +++++++++++++++++
.../org/apache/iotdb/session/IoTDBSessionIT.java | 64 ++++++++++++++--------
4 files changed, 102 insertions(+), 38 deletions(-)
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 e21eab6..4f3fea7 100644
--- a/session/src/main/java/org/apache/iotdb/session/Config.java
+++ b/session/src/main/java/org/apache/iotdb/session/Config.java
@@ -21,6 +21,8 @@ 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;
+import java.util.regex.Pattern;
+
public class Config {
public static final String DEFAULT_USER = "user";
@@ -28,7 +30,12 @@ public class Config {
public static final int DEFAULT_FETCH_SIZE = 10000;
public static final int DEFAULT_TIMEOUT_MS = 0;
- public static final String PATH_MATCHER =
- PATH_ROOT + "([" + PATH_SEPARATOR +
"](([a-zA-Z_][a-zA-Z0-9_-]*)|([+-]?[0-9]+)))+";
+ public static final String NODE_MATCHER = "[" + PATH_SEPARATOR + "]" +
"([a-zA-Z0-9_]+)";
+
+ // for path like: root.sg1.d1."1.2.3" or root.sg1.d1.'1.2.3', only occurs in
the end of the path and only occurs once
+ public static final String NODE_WITH_QUOTATION_MARK_MATCHER =
+ "[" + PATH_SEPARATOR + "][\"|\']([a-zA-Z0-9_]+)(" + NODE_MATCHER +
")+[\"|\']";
+ public static final Pattern PATH_PATTERN = Pattern
+ .compile(PATH_ROOT + "(" + NODE_MATCHER + ")+(" +
NODE_WITH_QUOTATION_MARK_MATCHER + ")?");
}
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 2db5923..769281f 100644
--- a/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -18,7 +18,7 @@
*/
package org.apache.iotdb.session;
-import static org.apache.iotdb.session.Config.PATH_MATCHER;
+import static org.apache.iotdb.session.Config.PATH_PATTERN;
import java.time.ZoneId;
import java.util.ArrayList;
@@ -26,8 +26,6 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
-import java.util.regex.Pattern;
-import org.apache.commons.lang.StringEscapeUtils;
import org.apache.iotdb.rpc.IoTDBRPCException;
import org.apache.iotdb.rpc.RpcUtils;
import org.apache.iotdb.rpc.TSStatusCode;
@@ -258,12 +256,7 @@ public class Session {
for (int i = 0; i < rowBatch.batchSize; i++) {
index[i] = i;
}
- Arrays.sort(index, new Comparator<Integer>() {
- @Override
- public int compare(Integer o1, Integer o2) {
- return Long.compare(rowBatch.timestamps[o1], rowBatch.timestamps[o2]);
- }
- });
+ Arrays.sort(index, Comparator.comparingLong(o -> rowBatch.timestamps[o]));
Arrays.sort(rowBatch.timestamps, 0, rowBatch.batchSize);
for (int i = 0; i < rowBatch.measurements.size(); i++) {
rowBatch.values[i] =
@@ -652,10 +645,9 @@ public class Session {
}
private void checkPathValidity(String path) throws IoTDBSessionException {
- if (!Pattern.matches(PATH_MATCHER, path)) {
+ if (!PATH_PATTERN.matcher(path).matches()) {
throw new IoTDBSessionException(
- String.format("Path [%s] is invalid",
StringEscapeUtils.escapeJava(path)));
+ String.format("Path [%s] is invalid", path));
}
}
-
}
diff --git
a/session/src/test/java/org/apache/iotdb/session/CheckPathValidityTest.java
b/session/src/test/java/org/apache/iotdb/session/CheckPathValidityTest.java
new file mode 100644
index 0000000..296bf32
--- /dev/null
+++ b/session/src/test/java/org/apache/iotdb/session/CheckPathValidityTest.java
@@ -0,0 +1,49 @@
+/*
+ * 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.session;
+
+import static org.apache.iotdb.session.Config.PATH_PATTERN;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+public class CheckPathValidityTest {
+
+ @Test
+ public void testCheckPathValidity() {
+ assertTrue(PATH_PATTERN.matcher("root.vehicle").matches());
+ assertTrue(PATH_PATTERN.matcher("root.123456").matches());
+ assertTrue(PATH_PATTERN.matcher("root._1234").matches());
+ assertTrue(PATH_PATTERN.matcher("root._vehicle").matches());
+ assertTrue(PATH_PATTERN.matcher("root.1234a4").matches());
+ assertTrue(PATH_PATTERN.matcher("root.1_2").matches());
+ assertTrue(PATH_PATTERN.matcher("root.vehicle.1245.1.2.3").matches());
+ assertTrue(PATH_PATTERN.matcher("root.vehicle.1245.\"1.2.3\"").matches());
+ assertTrue(PATH_PATTERN.matcher("root.vehicle.1245.\'1.2.3\'").matches());
+
+ assertFalse(PATH_PATTERN.matcher("vehicle").matches());
+ assertFalse(PATH_PATTERN.matcher("root.\tvehicle").matches());
+ assertFalse(PATH_PATTERN.matcher("root.\nvehicle").matches());
+ assertFalse(PATH_PATTERN.matcher("root..vehicle").matches());
+ assertFalse(PATH_PATTERN.matcher("root.%12345").matches());
+ assertFalse(PATH_PATTERN.matcher("root.a{12345}").matches());
+ }
+}
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 502e20b..0c48e5e 100644
--- a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java
+++ b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java
@@ -47,8 +47,6 @@ import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class IoTDBSessionIT {
@@ -112,7 +110,7 @@ public class IoTDBSessionIT {
try (Connection connection = DriverManager
.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
"root");
Statement statement = connection.createStatement()) {
- statement.execute("flush");
+ statement.execute("FLUSH");
}
//
insertRowBatchTest3("root.sg1.d1");
@@ -229,6 +227,19 @@ public class IoTDBSessionIT {
insertInBatch();
query4();
+
+ // special characters
+ session.createTimeseries("root.sg1.d1.1_2", TSDataType.INT64,
TSEncoding.RLE,
+ CompressionType.SNAPPY);
+ session.createTimeseries("root.sg1.d1.\"1.2.3\"", TSDataType.INT64,
TSEncoding.RLE,
+ CompressionType.SNAPPY);
+ session.createTimeseries("root.sg1.d1.\'1.2.4\'", TSDataType.INT64,
TSEncoding.RLE,
+ CompressionType.SNAPPY);
+
+ session.setStorageGroup("root.1");
+ session.createTimeseries("root.1.2.3", TSDataType.INT64, TSEncoding.RLE,
+ CompressionType.SNAPPY);
+
// Add another storage group to test the deletion of storage group
session.setStorageGroup("root.sg2");
session.createTimeseries("root.sg2.d1.s1", TSDataType.INT64,
TSEncoding.RLE,
@@ -391,6 +402,10 @@ public class IoTDBSessionIT {
private void deleteTimeseries() throws IoTDBSessionException {
session.deleteTimeseries("root.sg1.d1.s1");
+ session.deleteTimeseries("root.laptop.d1.1_2");
+ session.deleteTimeseries("root.laptop.d1.\"1.2.3\"");
+ session.deleteTimeseries("root.laptop.d1.\'1.2.4\'");
+ session.deleteTimeseries("root.1.2.3");
}
private void query() throws ClassNotFoundException, SQLException {
@@ -401,7 +416,7 @@ public class IoTDBSessionIT {
try (Connection connection = DriverManager
.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
"root");
Statement statement = connection.createStatement()) {
- ResultSet resultSet = statement.executeQuery("select * from root");
+ ResultSet resultSet = statement.executeQuery("SELECT * FROM root");
final ResultSetMetaData metaData = resultSet.getMetaData();
final int colCount = metaData.getColumnCount();
StringBuilder resultStr = new StringBuilder();
@@ -419,8 +434,9 @@ public class IoTDBSessionIT {
}
private void queryForAlignByDevice()
- throws SQLException, TException, IoTDBRPCException {
- SessionDataSet sessionDataSet = session.executeQueryStatement("select
'11', s1, '11' from root.sg1.d1 align by device");
+ throws SQLException, TException, IoTDBRPCException {
+ SessionDataSet sessionDataSet = session
+ .executeQueryStatement("select '11', s1, '11' from root.sg1.d1 align
by device");
sessionDataSet.setBatchSize(1024);
int count = 0;
while (sessionDataSet.hasNext()) {
@@ -437,8 +453,9 @@ public class IoTDBSessionIT {
}
private void queryForAlignByDevice2()
- throws SQLException, TException, IoTDBRPCException {
- SessionDataSet sessionDataSet = session.executeQueryStatement("select
'11', s1, '11', s5, s1, s5 from root.sg1.d1 align by device");
+ throws SQLException, TException, IoTDBRPCException {
+ SessionDataSet sessionDataSet = session.executeQueryStatement(
+ "select '11', s1, '11', s5, s1, s5 from root.sg1.d1 align by device");
sessionDataSet.setBatchSize(1024);
int count = 0;
while (sessionDataSet.hasNext()) {
@@ -463,7 +480,7 @@ public class IoTDBSessionIT {
try (Connection connection = DriverManager
.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
"root");
Statement statement = connection.createStatement()) {
- ResultSet resultSet = statement.executeQuery("select * from root");
+ ResultSet resultSet = statement.executeQuery("SELECT * FROM root");
final ResultSetMetaData metaData = resultSet.getMetaData();
final int colCount = metaData.getColumnCount();
StringBuilder resultStr = new StringBuilder();
@@ -495,11 +512,11 @@ public class IoTDBSessionIT {
CompressionType.SNAPPY);
// using the query result as the QueryTest to verify the deletion and the
new insertion
Class.forName(Config.JDBC_DRIVER_NAME);
- String standard = "Time\n" + "root.sg2.d1.s1\n" + "root.sg1.d1.s1\n";
+ String standard = "Time\n" + "root.1.2.3\n" + "root.sg2.d1.s1\n" +
"root.sg1.d1.s1\n";
try (Connection connection = DriverManager
.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
"root");
Statement statement = connection.createStatement()) {
- ResultSet resultSet = statement.executeQuery("select * from root");
+ ResultSet resultSet = statement.executeQuery("SELECT * FROM root");
final ResultSetMetaData metaData = resultSet.getMetaData();
final int colCount = metaData.getColumnCount();
StringBuilder resultStr = new StringBuilder();
@@ -512,7 +529,7 @@ public class IoTDBSessionIT {
}
resultStr.append("\n");
}
- Assert.assertEquals(resultStr.toString(), standard);
+ Assert.assertEquals(standard, resultStr.toString());
List<String> storageGroups = new ArrayList<>();
storageGroups.add("root.sg1.d1");
storageGroups.add("root.sg2");
@@ -572,9 +589,8 @@ public class IoTDBSessionIT {
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.1234a4", true);
+ checkSetSG(session, "root.1_2", true);
checkSetSG(session, "root.%12345", false);
checkSetSG(session, "root.a{12345}", false);
@@ -583,7 +599,8 @@ public class IoTDBSessionIT {
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.1245.\"1.2.3\"", true);
+ checkCreateTimeseries(session, "root.vehicle.1245.\'1.2.4\'", true);
checkCreateTimeseries(session, "root.vehicle./d0.s0", false);
checkCreateTimeseries(session, "root.vehicle.d\t0.s0", false);
checkCreateTimeseries(session, "root.vehicle.!d\t0.s0", false);
@@ -599,18 +616,18 @@ public class IoTDBSessionIT {
} catch (IoTDBSessionException e) {
status = false;
}
- assertEquals(status, correctStatus);
+ assertEquals(correctStatus, status);
}
- private void checkCreateTimeseries(Session session, String timeseris,
boolean correctStatus) {
+ private void checkCreateTimeseries(Session session, String timeseries,
boolean correctStatus) {
boolean status = true;
try {
- session.createTimeseries(timeseris, TSDataType.INT64, TSEncoding.RLE,
+ session.createTimeseries(timeseries, TSDataType.INT64, TSEncoding.RLE,
CompressionType.SNAPPY);
} catch (IoTDBSessionException e) {
status = false;
}
- assertEquals(status, correctStatus);
+ assertEquals(correctStatus, status);
}
private void insertRowBatchTest2(String deviceId) throws
IoTDBSessionException {
@@ -710,7 +727,6 @@ public class IoTDBSessionIT {
if (rowBatch.batchSize != 0) {
long start = System.currentTimeMillis();
session.insertBatch(rowBatch);
- countTime += System.currentTimeMillis() - start;
rowBatch.reset();
}
@@ -724,7 +740,7 @@ public class IoTDBSessionIT {
try (Connection connection = DriverManager
.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
"root");
Statement statement = connection.createStatement()) {
- ResultSet resultSet = statement.executeQuery("select * from root");
+ ResultSet resultSet = statement.executeQuery("SELECT * FROM root");
final ResultSetMetaData metaData = resultSet.getMetaData();
final int colCount = metaData.getColumnCount();
StringBuilder resultStr = new StringBuilder();
@@ -752,7 +768,7 @@ public class IoTDBSessionIT {
try (Connection connection = DriverManager
.getConnection(Config.IOTDB_URL_PREFIX + "192.168.130.18:6667/",
"root", "root");
Statement statement = connection.createStatement()) {
- ResultSet resultSet = statement.executeQuery("select s_0 from
root.group_0.d_0 limit 10000");
+ ResultSet resultSet = statement.executeQuery("SELECT s_0 FROM
root.group_0.d_0 LIMIT 10000");
final ResultSetMetaData metaData = resultSet.getMetaData();
final int colCount = metaData.getColumnCount();
StringBuilder resultStr = new StringBuilder();
@@ -792,7 +808,7 @@ public class IoTDBSessionIT {
try (Connection connection = DriverManager
.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
"root");
Statement statement = connection.createStatement()) {
- ResultSet resultSet = statement.executeQuery("select * from root");
+ ResultSet resultSet = statement.executeQuery("SELECT * FROM root");
final ResultSetMetaData metaData = resultSet.getMetaData();
final int colCount = metaData.getColumnCount();
StringBuilder resultStr = new StringBuilder();