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/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 914cc9a354 [IOTDB-3401] Fix some operators in filter condition query
are currently not returning BOOLEAN (#6169)
914cc9a354 is described below
commit 914cc9a354391938a64e1c981e1d446649b6a688
Author: Weihao Li <[email protected]>
AuthorDate: Tue Jun 14 20:25:35 2022 +0800
[IOTDB-3401] Fix some operators in filter condition query are currently not
returning BOOLEAN (#6169)
---
.../apache/iotdb/db/integration/IoTDBNestedQueryIT.java | 14 +++++++++-----
.../iotdb/db/mpp/plan/analyze/ExpressionAnalyzer.java | 4 ++++
.../iotdb/db/mpp/plan/expression/unary/InExpression.java | 6 +-----
.../iotdb/db/mpp/plan/expression/unary/LikeExpression.java | 8 +-------
.../db/mpp/plan/expression/unary/RegularExpression.java | 8 +-------
.../dag/transformer/unary/InTransformer.java | 14 +++++++-------
.../dag/transformer/unary/RegularTransformer.java | 4 ++--
7 files changed, 25 insertions(+), 33 deletions(-)
diff --git
a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBNestedQueryIT.java
b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBNestedQueryIT.java
index e283dfd619..d56ad09184 100644
---
a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBNestedQueryIT.java
+++
b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBNestedQueryIT.java
@@ -79,6 +79,12 @@ public class IoTDBNestedQueryIT {
TSEncoding.PLAIN,
CompressionType.UNCOMPRESSED,
null);
+ IoTDB.schemaProcessor.createTimeseries(
+ new PartialPath("root.vehicle.d1.s3"),
+ TSDataType.TEXT,
+ TSEncoding.PLAIN,
+ CompressionType.UNCOMPRESSED,
+ null);
IoTDB.schemaProcessor.createTimeseries(
new PartialPath("root.vehicle.d2.s1"),
TSDataType.FLOAT,
@@ -107,10 +113,10 @@ public class IoTDBNestedQueryIT {
for (int i = 1; i <= ITERATION_TIMES; ++i) {
statement.execute(
String.format(
- "insert into root.vehicle.d1(timestamp,s1,s2)
values(%d,%d,%d)", i, i, i));
+ "insert into root.vehicle.d1(timestamp,s1,s2,s3)
values(%d,%d,%d,%s)", i, i, i, i));
statement.execute(
(String.format(
- "insert into root.vehicle.d2(timestamp,s1,s2)
values(%d,%d,%d)", i, i, i)));
+ "insert into root.vehicle.d2(timestamp,s1,s2)
values(%d,%d,%d)", i, i, i, i)));
}
} catch (SQLException throwable) {
fail(throwable.getMessage());
@@ -593,13 +599,11 @@ public class IoTDBNestedQueryIT {
Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
Statement statement = connection.createStatement()) {
String query =
- "SELECT ((CAST(s1, 'type'='TEXT') LIKE '_') REGEXP '[0-9]') IN ('4',
'2', '3') "
- + "FROM root.vehicle.d1";
+ "SELECT s1 FROM root.vehicle.d1 WHERE s3 LIKE '_' && s3 REGEXP
'[0-9]' && s3 IN ('4', '2', '3')";
try (ResultSet rs = statement.executeQuery(query)) {
for (int i = 2; i <= 4; i++) {
Assert.assertTrue(rs.next());
Assert.assertEquals(i, rs.getLong(1));
- Assert.assertEquals(String.valueOf(i), rs.getString(2));
}
Assert.assertFalse(rs.next());
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionAnalyzer.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionAnalyzer.java
index 1b3588971e..14ebea0add 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionAnalyzer.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionAnalyzer.java
@@ -43,7 +43,9 @@ import
org.apache.iotdb.db.mpp.plan.expression.leaf.TimeSeriesOperand;
import org.apache.iotdb.db.mpp.plan.expression.leaf.TimestampOperand;
import org.apache.iotdb.db.mpp.plan.expression.multi.FunctionExpression;
import org.apache.iotdb.db.mpp.plan.expression.unary.InExpression;
+import org.apache.iotdb.db.mpp.plan.expression.unary.LikeExpression;
import org.apache.iotdb.db.mpp.plan.expression.unary.LogicNotExpression;
+import org.apache.iotdb.db.mpp.plan.expression.unary.RegularExpression;
import org.apache.iotdb.db.mpp.plan.expression.unary.UnaryExpression;
import org.apache.iotdb.db.mpp.plan.statement.component.ResultColumn;
import org.apache.iotdb.db.qp.constant.SQLConstant;
@@ -597,6 +599,8 @@ public class ExpressionAnalyzer {
false);
}
return new Pair<>(null, true);
+ } else if (predicate instanceof LikeExpression || predicate instanceof
RegularExpression) {
+ return new Pair<>(null, true);
} else {
throw new IllegalArgumentException(
"unsupported expression type: " + predicate.getExpressionType());
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/InExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/InExpression.java
index 2a23e2237f..70da42ee0f 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/InExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/InExpression.java
@@ -65,11 +65,7 @@ public class InExpression extends UnaryExpression {
@Override
public TSDataType inferTypes(TypeProvider typeProvider) {
- final String expressionString = toString();
- if (!typeProvider.containsTypeInfoOf(expressionString)) {
- typeProvider.setType(expressionString,
expression.inferTypes(typeProvider));
- }
- return typeProvider.getType(expressionString);
+ return TSDataType.BOOLEAN;
}
@Override
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LikeExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LikeExpression.java
index 53b062a092..fbc9383532 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LikeExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LikeExpression.java
@@ -122,13 +122,7 @@ public class LikeExpression extends UnaryExpression {
@Override
public TSDataType inferTypes(TypeProvider typeProvider) throws
SemanticException {
- final String expressionString = toString();
- if (!typeProvider.containsTypeInfoOf(expressionString)) {
- Expression.checkInputExpressionDataType(
- expression.toString(), expression.inferTypes(typeProvider),
TSDataType.TEXT);
- typeProvider.setType(expressionString, TSDataType.TEXT);
- }
- return TSDataType.TEXT;
+ return TSDataType.BOOLEAN;
}
@Override
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/RegularExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/RegularExpression.java
index c0fb3cf6b0..27db1fb519 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/RegularExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/RegularExpression.java
@@ -79,13 +79,7 @@ public class RegularExpression extends UnaryExpression {
@Override
public TSDataType inferTypes(TypeProvider typeProvider) throws
SemanticException {
- final String expressionString = toString();
- if (!typeProvider.containsTypeInfoOf(expressionString)) {
- checkInputExpressionDataType(
- expression.toString(), expression.inferTypes(typeProvider),
TSDataType.TEXT);
- typeProvider.setType(expressionString, TSDataType.TEXT);
- }
- return TSDataType.TEXT;
+ return TSDataType.BOOLEAN;
}
@Override
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/transformer/unary/InTransformer.java
b/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/transformer/unary/InTransformer.java
index 05673d3119..86c7337fd8 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/transformer/unary/InTransformer.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/transformer/unary/InTransformer.java
@@ -88,7 +88,7 @@ public class InTransformer extends UnaryTransformer {
@Override
public TSDataType getDataType() {
- return layerPointReaderDataType;
+ return TSDataType.BOOLEAN;
}
@Override
@@ -97,7 +97,7 @@ public class InTransformer extends UnaryTransformer {
case INT32:
int intValue = layerPointReader.currentInt();
if (satisfy.of(intValue)) {
- cachedInt = intValue;
+ cachedBoolean = true;
} else {
currentNull = true;
}
@@ -105,7 +105,7 @@ public class InTransformer extends UnaryTransformer {
case INT64:
long longValue = layerPointReader.currentLong();
if (satisfy.of(longValue)) {
- cachedLong = longValue;
+ cachedBoolean = true;
} else {
currentNull = true;
}
@@ -113,7 +113,7 @@ public class InTransformer extends UnaryTransformer {
case FLOAT:
float floatValue = layerPointReader.currentFloat();
if (satisfy.of(floatValue)) {
- cachedFloat = floatValue;
+ cachedBoolean = true;
} else {
currentNull = true;
}
@@ -121,7 +121,7 @@ public class InTransformer extends UnaryTransformer {
case DOUBLE:
double doubleValue = layerPointReader.currentDouble();
if (satisfy.of(doubleValue)) {
- cachedDouble = doubleValue;
+ cachedBoolean = true;
} else {
currentNull = true;
}
@@ -129,7 +129,7 @@ public class InTransformer extends UnaryTransformer {
case BOOLEAN:
boolean booleanValue = layerPointReader.currentBoolean();
if (satisfy.of(booleanValue)) {
- cachedBoolean = booleanValue;
+ cachedBoolean = true;
} else {
currentNull = true;
}
@@ -137,7 +137,7 @@ public class InTransformer extends UnaryTransformer {
case TEXT:
Binary binaryValue = layerPointReader.currentBinary();
if (satisfy.of(binaryValue.getStringValue())) {
- cachedBinary = binaryValue;
+ cachedBoolean = true;
} else {
currentNull = true;
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/transformer/unary/RegularTransformer.java
b/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/transformer/unary/RegularTransformer.java
index 862c7fe563..a3a47cb880 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/transformer/unary/RegularTransformer.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/transformer/unary/RegularTransformer.java
@@ -44,14 +44,14 @@ public class RegularTransformer extends UnaryTransformer {
@Override
public TSDataType getDataType() {
- return TSDataType.TEXT;
+ return TSDataType.BOOLEAN;
}
@Override
protected void transformAndCache() throws QueryProcessException, IOException
{
Binary binary = layerPointReader.currentBinary();
if (pattern.matcher(binary.getStringValue()).find()) {
- cachedBinary = binary;
+ cachedBoolean = true;
} else {
currentNull = true;
}