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 75dbdb0 Some basic operators should not be applied to text time
series (#3723)
75dbdb0 is described below
commit 75dbdb0417b9bde8d3621e7292103cf81df994c9
Author: Hang Ji <[email protected]>
AuthorDate: Wed Aug 11 19:38:02 2021 +0800
Some basic operators should not be applied to text time series (#3723)
---
.../db/qp/logical/crud/BasicFunctionOperator.java | 21 +++++---
.../iotdb/db/integration/IoTDBQueryDemoIT.java | 62 ++++++++++++++++++++++
.../dataset/groupby/GroupByFillDataSetTest.java | 2 +-
3 files changed, 76 insertions(+), 9 deletions(-)
diff --git
a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/BasicFunctionOperator.java
b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/BasicFunctionOperator.java
index 41fc1cd..c0f73b5 100644
---
a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/BasicFunctionOperator.java
+++
b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/BasicFunctionOperator.java
@@ -36,7 +36,7 @@ import org.slf4j.LoggerFactory;
import java.util.Map;
import java.util.Objects;
-/** basic operator includes < > >= <= !=. */
+/** basic operator includes = < > >= <= !=. */
public class BasicFunctionOperator extends FunctionOperator {
protected String value;
@@ -101,13 +101,18 @@ public class BasicFunctionOperator extends
FunctionOperator {
ret = funcToken.getUnaryExpression(singlePath, Double.valueOf(value));
break;
case TEXT:
- ret =
- funcToken.getUnaryExpression(
- singlePath,
- (value.startsWith("'") && value.endsWith("'"))
- || (value.startsWith("\"") && value.endsWith("\""))
- ? new Binary(value.substring(1, value.length() - 1))
- : new Binary(value));
+ if (funcToken.name().equals("EQ") ||
funcToken.name().equals("NOTEQUAL")) {
+ ret =
+ funcToken.getUnaryExpression(
+ singlePath,
+ (value.startsWith("'") && value.endsWith("'"))
+ || (value.startsWith("\"") && value.endsWith("\""))
+ ? new Binary(value.substring(1, value.length() - 1))
+ : new Binary(value));
+ } else {
+ throw new LogicalOperatorException(
+ "For Basic operator,TEXT type only support EQUAL or NOTEQUAL
operator");
+ }
break;
default:
throw new LogicalOperatorException(type.toString(), "");
diff --git
a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryDemoIT.java
b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryDemoIT.java
index ba247fc..b041b3e 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryDemoIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryDemoIT.java
@@ -483,4 +483,66 @@ public class IoTDBQueryDemoIT {
}
return actualIndexToExpectedIndexList;
}
+
+ @Test
+ public void testWrongTextQuery() throws ClassNotFoundException {
+ Class.forName(Config.JDBC_DRIVER_NAME);
+ try (Connection connection =
+ DriverManager.getConnection(
+ Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+ Statement statement = connection.createStatement()) {
+ statement.execute("select * from root.ln.wf02.wt02 where hardware >
'v1'");
+ } catch (Exception e) {
+ Assert.assertEquals(
+ e.getMessage(),
+ "411: Error occurred in query process: For Basic operator,TEXT type
only support EQUAL or NOTEQUAL operator");
+ }
+ }
+
+ @Test
+ public void testRightTextQuery() throws ClassNotFoundException {
+ // Text type uses the equal operator to query the correct result
+ String[] retArray =
+ new String[] {
+ "1509465600000,v2,", "1509465660000,v2,",
+ };
+ Class.forName(Config.JDBC_DRIVER_NAME);
+ try (Connection connection =
+ DriverManager.getConnection(
+ Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+ Statement statement = connection.createStatement()) {
+ boolean hasResultSet =
+ statement.execute("select hardware from root.ln.wf02.wt02 where
hardware = 'v2'");
+ Assert.assertTrue(hasResultSet);
+ try (ResultSet resultSet = statement.getResultSet()) {
+ ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+ List<Integer> actualIndexToExpectedIndexList =
+ checkHeader(
+ resultSetMetaData,
+ "Time,root.ln.wf02.wt02.hardware,",
+ new int[] {
+ Types.TIMESTAMP, Types.VARCHAR,
+ });
+
+ int cnt = 0;
+ while (resultSet.next()) {
+ String[] expectedStrings = retArray[cnt].split(",");
+ StringBuilder expectedBuilder = new StringBuilder();
+ StringBuilder actualBuilder = new StringBuilder();
+ for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+ actualBuilder.append(resultSet.getString(i)).append(",");
+ expectedBuilder
+ .append(expectedStrings[actualIndexToExpectedIndexList.get(i -
1)])
+ .append(",");
+ }
+ Assert.assertEquals(expectedBuilder.toString(),
actualBuilder.toString());
+ cnt++;
+ }
+ Assert.assertEquals(2, cnt);
+ }
+
+ } catch (Exception e) {
+ Assert.assertNull(e.getMessage());
+ }
+ }
}
diff --git
a/server/src/test/java/org/apache/iotdb/db/query/dataset/groupby/GroupByFillDataSetTest.java
b/server/src/test/java/org/apache/iotdb/db/query/dataset/groupby/GroupByFillDataSetTest.java
index 341b56c..9e658e6 100644
---
a/server/src/test/java/org/apache/iotdb/db/query/dataset/groupby/GroupByFillDataSetTest.java
+++
b/server/src/test/java/org/apache/iotdb/db/query/dataset/groupby/GroupByFillDataSetTest.java
@@ -42,7 +42,7 @@ public class GroupByFillDataSetTest {
private String[] sqls = {
"SET STORAGE GROUP TO root.vehicle",
"CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
- "CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
+ "CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=INT32, ENCODING=RLE",
"CREATE TIMESERIES root.vehicle.d0.s2 WITH DATATYPE=INT32, ENCODING=RLE",
"insert into root.vehicle.d0(timestamp,s0) values(1,1)",
"insert into root.vehicle.d0(timestamp,s1) values(1,1)",