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;
     }

Reply via email to