This is an automated email from the ASF dual-hosted git repository.

jackietien 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 b135ebdeca [IOTDB-4848] fix Bug: TimeSeries cannot be used in logical 
operator
b135ebdeca is described below

commit b135ebdecadfe4db3f0d5519636885e1cf22cbe2
Author: Weihao Li <[email protected]>
AuthorDate: Fri Nov 4 20:09:52 2022 +0800

    [IOTDB-4848] fix Bug: TimeSeries cannot be used in logical operator
---
 .../java/org/apache/iotdb/db/it/IoTDBFilterIT.java | 62 +++++++++++++++++++++-
 .../db/mpp/plan/analyze/ExpressionAnalyzer.java    |  2 +
 2 files changed, 63 insertions(+), 1 deletion(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBFilterIT.java 
b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBFilterIT.java
index d063743635..107a37e99b 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBFilterIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBFilterIT.java
@@ -35,6 +35,9 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 
+import static org.apache.iotdb.db.it.utils.TestUtils.resultSetEqualTest;
+import static org.apache.iotdb.itbase.constant.TestConstant.TIMESTAMP_STR;
+import static org.apache.iotdb.itbase.constant.TestConstant.count;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
@@ -80,6 +83,10 @@ public class IoTDBFilterIT {
           "create TIMESERIES root.vehicle.testNaN.d1 with 
datatype=DOUBLE,encoding=PLAIN");
       statement.execute(
           "create TIMESERIES root.vehicle.testNaN.d2 with 
datatype=DOUBLE,encoding=PLAIN");
+      statement.execute(
+          "create TIMESERIES root.vehicle.testTimeSeries.s1 with 
datatype=BOOLEAN,encoding=PLAIN");
+      statement.execute(
+          "create TIMESERIES root.vehicle.testTimeSeries.s2 with 
datatype=BOOLEAN,encoding=PLAIN");
     } catch (SQLException throwable) {
       fail(throwable.getMessage());
     }
@@ -92,6 +99,27 @@ public class IoTDBFilterIT {
         statement.execute(
             String.format(
                 "insert into root.vehicle.testNaN(timestamp,d1,d2) 
values(%d,%d,%d)", i, i, i));
+
+        switch (i % 3) {
+          case 0:
+            statement.execute(
+                String.format(
+                    "insert into root.vehicle.testTimeSeries(timestamp,s1,s2) 
values(%d,true,true)",
+                    i));
+            break;
+          case 1:
+            statement.execute(
+                String.format(
+                    "insert into root.vehicle.testTimeSeries(timestamp,s1,s2) 
values(%d,true,false)",
+                    i));
+            break;
+          case 2:
+            statement.execute(
+                String.format(
+                    "insert into root.vehicle.testTimeSeries(timestamp,s1,s2) 
values(%d,false,false)",
+                    i));
+            break;
+        }
       }
       statement.execute(
           " insert into root.sg1.d1(time, s1, s2) aligned values (1,1, \"1\"), 
(2,2,\"2\")");
@@ -100,6 +128,38 @@ public class IoTDBFilterIT {
     }
   }
 
+  @Test
+  public void testFilterBooleanSeries() {
+    String[] expectedHeader =
+        new String[] {
+          TIMESTAMP_STR, "root.vehicle.testTimeSeries.s1", 
"root.vehicle.testTimeSeries.s2"
+        };
+    String[] retArray =
+        new String[] {"0,true,true,", "3,true,true,", "6,true,true,", 
"9,true,true,"};
+    resultSetEqualTest(
+        "select s1, s2 from root.vehicle.testTimeSeries " + "Where s2", 
expectedHeader, retArray);
+
+    resultSetEqualTest(
+        "select s1, s2 from root.vehicle.testTimeSeries " + "Where s1 && s2",
+        expectedHeader,
+        retArray);
+
+    retArray =
+        new String[] {
+          "0,true,true,",
+          "1,true,false,",
+          "3,true,true,",
+          "4,true,false,",
+          "6,true,true,",
+          "7,true,false,",
+          "9,true,true,"
+        };
+    resultSetEqualTest(
+        "select s1, s2 from root.vehicle.testTimeSeries " + "Where s1 || s2",
+        expectedHeader,
+        retArray);
+  }
+
   @Test
   public void testFilterNaN() {
     String sqlStr = "select d1 from root.vehicle.testNaN where d1/d2 > 0";
@@ -124,7 +184,7 @@ public class IoTDBFilterIT {
         Statement statement = connection.createStatement();
         ResultSet resultSet =
             statement.executeQuery(
-                "select s2 from root.** where s1 = 1 and s2 >= \"1\" and s2 <= 
\"2\";")) {
+                "select s2 from root.sg1.d1 where s1 = 1 and s2 >= \"1\" and 
s2 <= \"2\";")) {
       int count = 0;
       while (resultSet.next()) {
         ++count;
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 688f881ae9..3446e164e1 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
@@ -898,6 +898,8 @@ public class ExpressionAnalyzer {
             false);
       }
       return new Pair<>(null, true);
+    } else if 
(predicate.getExpressionType().equals(ExpressionType.TIMESERIES)) {
+      return new Pair<>(null, true);
     } else {
       throw new IllegalArgumentException(
           "unsupported expression type: " + predicate.getExpressionType());

Reply via email to