This is an automated email from the ASF dual-hosted git repository. geniuspig pushed a commit to branch measurement_with_quote in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit 847200ab58ffd65e4a97a0a9b842ea825daddd1c Author: zhutianci <[email protected]> AuthorDate: Wed Jun 24 10:53:55 2020 +0800 measurement_with_quote --- .../src/main/java/org/apache/iotdb/db/metadata/MTree.java | 8 +------- .../main/java/org/apache/iotdb/db/metadata/MetaUtils.java | 15 +++++++++++---- .../org/apache/iotdb/db/qp/strategy/LogicalGenerator.java | 3 ++- .../java/org/apache/iotdb/session/IoTDBSessionIT.java | 2 +- .../iotdb/tsfile/common/constant/TsFileConstant.java | 2 ++ .../java/org/apache/iotdb/tsfile/read/common/Path.java | 9 ++++----- .../org/apache/iotdb/tsfile/read/common/PathTest.java | 8 ++++---- 7 files changed, 25 insertions(+), 22 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java index b4eb3e0..1a48b60 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java @@ -720,13 +720,7 @@ public class MTree implements Serializable { return; } } - String nodeName; - if (node.getName().contains(TsFileConstant.PATH_SEPARATOR)) { - nodeName = "\"" + node + "\""; - } else { - nodeName = node.getName(); - } - String nodePath = parent + nodeName; + String nodePath = parent + node; String[] tsRow = new String[8]; tsRow[0] = nodePath; tsRow[1] = ((MeasurementMNode) node).getAlias(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MetaUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/MetaUtils.java index 0e1d953..06de18c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/MetaUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/MetaUtils.java @@ -21,6 +21,7 @@ package org.apache.iotdb.db.metadata; import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.exception.metadata.IllegalPathException; import org.apache.iotdb.db.exception.metadata.MetadataException; +import org.apache.iotdb.tsfile.common.constant.TsFileConstant; import static org.apache.iotdb.db.conf.IoTDBConstant.PATH_WILDCARD; @@ -29,16 +30,22 @@ public class MetaUtils { public static final String PATH_SEPARATOR = "\\."; private MetaUtils() { - + throw new IllegalStateException("Utility class"); } public static String[] getNodeNames(String path) { String[] nodeNames; if (path.contains("\"") || path.contains("'")) { // e.g., root.sg.d1."s1.int" -> root.sg.d1, s1.int - String[] measurementDeviceNode = path.trim().replace("'", "\"").split("\""); - // s1.int - String measurement = measurementDeviceNode[1]; + String measurement; + String[] measurementDeviceNode; + if (path.contains("\"")) { + measurementDeviceNode = path.split("\""); + } else { + measurementDeviceNode = path.split("\'"); + } + // "s1.int" + measurement = TsFileConstant.DOUBLE_QUOTATION + measurementDeviceNode[1] + TsFileConstant.DOUBLE_QUOTATION; // root.sg.d1 -> root, sg, d1 String[] deviceNodeName = measurementDeviceNode[0].split(PATH_SEPARATOR); int nodeNumber = deviceNodeName.length + 1; 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 ebd41f0..70b7a2e 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 @@ -1062,8 +1062,9 @@ public class LogicalGenerator extends SqlBaseBaseListener { List<String> measurementList = new ArrayList<>(); for (NodeNameWithoutStarContext nodeNameWithoutStar : nodeNamesWithoutStar) { String measurement = nodeNameWithoutStar.getText(); - if (measurement.contains("\"") || measurement.contains("'")) { + if (measurement.contains("'")) { measurement = measurement.substring(1, measurement.length() - 1); + measurement = TsFileConstant.DOUBLE_QUOTATION + measurement + TsFileConstant.DOUBLE_QUOTATION; } measurementList.add(measurement); } 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 7bc3a11..723eb86 100644 --- a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java +++ b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java @@ -883,7 +883,7 @@ public class IoTDBSessionIT { for (Field f : fields) { sb.append(f.getStringValue()).append(","); } - Assert.assertEquals("root.sg1.d1,11,0,11,", sb.toString()); + Assert.assertEquals("root.sg1.d1,\"11\",0,\"11\",", sb.toString()); } Assert.assertEquals(1000, count); sessionDataSet.closeOperationHandle(); 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 a0001c0..267fa29 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 @@ -27,6 +27,8 @@ public class TsFileConstant { public static final String PATH_UPGRADE = "tmp"; public static final String PATH_SEPARATOR = "."; public static final String PATH_SEPARATER_NO_REGEX = "\\."; + public static final String DOUBLE_QUOTATION = "\""; + public static final String SINGLE_QUOTATION = "\'"; private TsFileConstant() { } diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/Path.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/Path.java index c7f74dd..74933f9 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/Path.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/Path.java @@ -72,8 +72,7 @@ public class Path implements Serializable, Comparable<Path> { } this.device = device; this.measurement = measurement; - this.fullPath = device + TsFileConstant.PATH_SEPARATOR - + (measurement.contains(TsFileConstant.PATH_SEPARATOR) ? "\"" + measurement + "\"" : measurement); + this.fullPath = device + TsFileConstant.PATH_SEPARATOR + measurement; } /** @@ -94,8 +93,8 @@ public class Path implements Serializable, Comparable<Path> { if ((i != 2 && i != 0) || (j != 2 && j != 0)) { throw new IllegalArgumentException("input pathSc single/double quotes error, not in pair or more than one pair!"); } - if ((i == 2 && pathSc.length() - 1 != pathSc.lastIndexOf("\"")) - || (j == 2 && pathSc.length() - 1 != pathSc.lastIndexOf("\'"))) { + if ((i == 2 && pathSc.length() - 1 != pathSc.lastIndexOf('\"')) + || (j == 2 && pathSc.length() - 1 != pathSc.lastIndexOf('\''))) { throw new IllegalArgumentException("input pathSc contains quoted string in the middle!"); } String[] subStrs; @@ -105,11 +104,11 @@ public class Path implements Serializable, Comparable<Path> { } else { subStrs = pathSc.split("\'"); } + measurement = TsFileConstant.DOUBLE_QUOTATION + subStrs[1] + TsFileConstant.DOUBLE_QUOTATION; device = subStrs[0]; if (!device.equals("")) { device = device.substring(0, subStrs[0].length() - 1); } - measurement = subStrs[1]; fullPath = pathSc; } else { StringContainer sc = new StringContainer(pathSc.split(TsFileConstant.PATH_SEPARATER_NO_REGEX), diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/common/PathTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/common/PathTest.java index 6205582..626056d 100644 --- a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/common/PathTest.java +++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/common/PathTest.java @@ -41,7 +41,7 @@ public class PathTest { testPath(path, "", "", ""); // with quote; path = new Path("root.d1.r1.\"x1.x2.x3\""); - testPath(path, "root.d1.r1", "x1.x2.x3", "root.d1.r1.\"x1.x2.x3\""); + testPath(path, "root.d1.r1", "\"x1.x2.x3\"", "root.d1.r1.\"x1.x2.x3\""); } @Test @@ -64,7 +64,7 @@ public class PathTest { Path suffix2 = new Path("d.\"e.f\""); testPath(Path.mergePath(prefix, suffix), "a.b.c.d", "e", "a.b.c.d.e"); testPath(Path.mergePath(prefix, suffix1), "a.b", "c", "a.b.c"); - testPath(Path.mergePath(prefix, suffix2), "a.b.c.d", "e.f", "a.b.c.d.\"e.f\""); + testPath(Path.mergePath(prefix, suffix2), "a.b.c.d", "\"e.f\"", "a.b.c.d.\"e.f\""); } @Test @@ -81,7 +81,7 @@ public class PathTest { Path desc = new Path("a.b.\"c\""); Path head = new Path("d.e"); Path head1 = new Path(""); - testPath(Path.addPrefixPath(desc, head), "d.e.a.b", "c", "d.e.a.b.\"c\""); - testPath(Path.mergePath(desc, head1), "a.b", "c", "a.b.\"c\""); + testPath(Path.addPrefixPath(desc, head), "d.e.a.b", "\"c\"", "d.e.a.b.\"c\""); + testPath(Path.mergePath(desc, head1), "a.b", "\"c\"", "a.b.\"c\""); } } \ No newline at end of file
