You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ro...@apache.org on 2022/05/01 13:43:33 UTC

[iotdb] branch master updated: [IOTDB-3048] Refactor binary transformer (#5744)

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

rong 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 1529577219 [IOTDB-3048] Refactor binary transformer (#5744)
1529577219 is described below

commit 1529577219ca45a79313d40e2a52f584e7f69fc1
Author: flashzxi <39...@users.noreply.github.com>
AuthorDate: Sun May 1 21:43:27 2022 +0800

    [IOTDB-3048] Refactor binary transformer (#5744)
    
    Co-authored-by: Steve Yurong Su <ro...@apache.org>
---
 .../binary/ArithmeticAdditionTransformer.java      |  2 +-
 .../binary/ArithmeticBinaryTransformer.java        | 12 +++-
 .../binary/ArithmeticDivisionTransformer.java      |  2 +-
 .../binary/ArithmeticModuloTransformer.java        |  2 +-
 .../ArithmeticMultiplicationTransformer.java       |  2 +-
 .../binary/ArithmeticSubtractionTransformer.java   |  2 +-
 .../core/transformer/binary/BinaryTransformer.java | 76 +++-------------------
 .../binary/CompareBinaryTransformer.java           | 12 +++-
 .../binary/CompareEqualToTransformer.java          | 22 ++++++-
 .../binary/CompareGreaterEqualTransformer.java     |  2 +-
 .../binary/CompareGreaterThanTransformer.java      |  2 +-
 .../binary/CompareLessEqualTransformer.java        |  2 +-
 .../binary/CompareLessThanTransformer.java         |  2 +-
 .../binary/CompareNonEqualTransformer.java         | 22 ++++++-
 .../transformer/binary/LogicAndTransformer.java    |  3 +-
 .../transformer/binary/LogicBinaryTransformer.java | 18 ++++-
 .../transformer/binary/LogicOrTransformer.java     |  2 +-
 17 files changed, 94 insertions(+), 91 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticAdditionTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticAdditionTransformer.java
index 4d9a2fbba5..439378f39b 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticAdditionTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticAdditionTransformer.java
@@ -29,7 +29,7 @@ public class ArithmeticAdditionTransformer extends ArithmeticBinaryTransformer {
   }
 
   @Override
-  protected double evaluateDouble(double leftOperand, double rightOperand) {
+  protected double evaluate(double leftOperand, double rightOperand) {
     return leftOperand + rightOperand;
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticBinaryTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticBinaryTransformer.java
index 4df0b51acf..1c2c4eb41b 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticBinaryTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticBinaryTransformer.java
@@ -19,9 +19,12 @@
 
 package org.apache.iotdb.db.query.udf.core.transformer.binary;
 
+import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 
+import java.io.IOException;
+
 public abstract class ArithmeticBinaryTransformer extends BinaryTransformer {
 
   protected ArithmeticBinaryTransformer(
@@ -30,12 +33,17 @@ public abstract class ArithmeticBinaryTransformer extends BinaryTransformer {
   }
 
   @Override
-  protected TransformerType getTransformerType() {
-    return TransformerType.Arithmetic;
+  protected void transformAndCache() throws QueryProcessException, IOException {
+    cachedDouble =
+        evaluate(
+            castCurrentValueToDoubleOperand(leftPointReader),
+            castCurrentValueToDoubleOperand(rightPointReader));
   }
 
   @Override
   public TSDataType getDataType() {
     return TSDataType.DOUBLE;
   }
+
+  protected abstract double evaluate(double leftOperand, double rightOperand);
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticDivisionTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticDivisionTransformer.java
index 03acdd89e8..30fb3d248f 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticDivisionTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticDivisionTransformer.java
@@ -29,7 +29,7 @@ public class ArithmeticDivisionTransformer extends ArithmeticBinaryTransformer {
   }
 
   @Override
-  protected double evaluateDouble(double leftOperand, double rightOperand) {
+  protected double evaluate(double leftOperand, double rightOperand) {
     return leftOperand / rightOperand;
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticModuloTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticModuloTransformer.java
index bb6a2ccb17..a22f2d4400 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticModuloTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticModuloTransformer.java
@@ -29,7 +29,7 @@ public class ArithmeticModuloTransformer extends ArithmeticBinaryTransformer {
   }
 
   @Override
-  protected double evaluateDouble(double leftOperand, double rightOperand) {
+  protected double evaluate(double leftOperand, double rightOperand) {
     return leftOperand % rightOperand;
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticMultiplicationTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticMultiplicationTransformer.java
index 33482f63c1..b24522267b 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticMultiplicationTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticMultiplicationTransformer.java
@@ -29,7 +29,7 @@ public class ArithmeticMultiplicationTransformer extends ArithmeticBinaryTransfo
   }
 
   @Override
-  protected double evaluateDouble(double leftOperand, double rightOperand) {
+  protected double evaluate(double leftOperand, double rightOperand) {
     return leftOperand * rightOperand;
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticSubtractionTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticSubtractionTransformer.java
index 4472a40282..6659a40ff0 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticSubtractionTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticSubtractionTransformer.java
@@ -29,7 +29,7 @@ public class ArithmeticSubtractionTransformer extends ArithmeticBinaryTransforme
   }
 
   @Override
-  protected double evaluateDouble(double leftOperand, double rightOperand) {
+  protected double evaluate(double leftOperand, double rightOperand) {
     return leftOperand - rightOperand;
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/BinaryTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/BinaryTransformer.java
index a7b6fc3700..f2e7520fcf 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/BinaryTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/BinaryTransformer.java
@@ -22,23 +22,13 @@ package org.apache.iotdb.db.query.udf.core.transformer.binary;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.db.query.udf.core.transformer.Transformer;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 
 import java.io.IOException;
 
 public abstract class BinaryTransformer extends Transformer {
 
-  private final LayerPointReader leftPointReader;
-  private final LayerPointReader rightPointReader;
-
-  protected enum TransformerType {
-    Arithmetic,
-    Comparative,
-    Logic,
-    EqNeq
-  }
-
-  protected abstract TransformerType getTransformerType();
+  protected final LayerPointReader leftPointReader;
+  protected final LayerPointReader rightPointReader;
 
   protected BinaryTransformer(LayerPointReader leftPointReader, LayerPointReader rightPointReader) {
     this.leftPointReader = leftPointReader;
@@ -55,60 +45,24 @@ public abstract class BinaryTransformer extends Transformer {
     if (!leftPointReader.next() || !rightPointReader.next()) {
       return false;
     }
+
     if (!cacheTime()) {
       return false;
     }
+
     if (leftPointReader.isCurrentNull() || rightPointReader.isCurrentNull()) {
       currentNull = true;
     } else {
-      switch (getTransformerType()) {
-        case Arithmetic:
-          cachedDouble =
-              evaluateDouble(
-                  castCurrentValueToDoubleOperand(leftPointReader),
-                  castCurrentValueToDoubleOperand(rightPointReader));
-          break;
-        case EqNeq:
-          // Although == and != belongs to compare operations,
-          // they can take two boolean as parameters
-          if (leftPointReader.getDataType() == TSDataType.BOOLEAN
-              && rightPointReader.getDataType() == TSDataType.BOOLEAN) {
-            cachedBoolean =
-                evaluateBoolean(
-                    leftPointReader.currentBoolean(), rightPointReader.currentBoolean());
-          } else {
-            cachedBoolean =
-                evaluateBoolean(
-                    castCurrentValueToDoubleOperand(leftPointReader),
-                    castCurrentValueToDoubleOperand(rightPointReader));
-          }
-          break;
-        case Comparative:
-          cachedBoolean =
-              evaluateBoolean(
-                  castCurrentValueToDoubleOperand(leftPointReader),
-                  castCurrentValueToDoubleOperand(rightPointReader));
-          break;
-        case Logic:
-          // Check TSDataType
-          if (leftPointReader.getDataType() != TSDataType.BOOLEAN) {
-            throw new QueryProcessException(
-                "Unsupported data type: " + leftPointReader.getDataType().toString());
-          }
-          if (rightPointReader.getDataType() != TSDataType.BOOLEAN) {
-            throw new QueryProcessException(
-                "Unsupported data type: " + rightPointReader.getDataType().toString());
-          }
-          cachedBoolean =
-              evaluateBoolean(leftPointReader.currentBoolean(), rightPointReader.currentBoolean());
-          break;
-      }
+      transformAndCache();
     }
+
     leftPointReader.readyForNext();
     rightPointReader.readyForNext();
     return true;
   }
 
+  protected abstract void transformAndCache() throws QueryProcessException, IOException;
+
   /**
    * finds the smallest, unconsumed timestamp that exists in both {@code leftPointReader} and {@code
    * rightPointReader} and then caches the timestamp in {@code cachedTime}.
@@ -152,19 +106,7 @@ public abstract class BinaryTransformer extends Transformer {
     return true;
   }
 
-  protected double evaluateDouble(double leftOperand, double rightOperand) {
-    return 0.0;
-  }
-
-  protected boolean evaluateBoolean(double leftOperand, double rightOperand) {
-    return false;
-  }
-
-  protected boolean evaluateBoolean(boolean leftOperand, boolean rightOperand) {
-    return false;
-  }
-
-  private static double castCurrentValueToDoubleOperand(LayerPointReader layerPointReader)
+  protected static double castCurrentValueToDoubleOperand(LayerPointReader layerPointReader)
       throws IOException, QueryProcessException {
     switch (layerPointReader.getDataType()) {
       case INT32:
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareBinaryTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareBinaryTransformer.java
index c14e884a7d..d3b662c397 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareBinaryTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareBinaryTransformer.java
@@ -19,9 +19,12 @@
 
 package org.apache.iotdb.db.query.udf.core.transformer.binary;
 
+import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 
+import java.io.IOException;
+
 public abstract class CompareBinaryTransformer extends BinaryTransformer {
 
   protected CompareBinaryTransformer(
@@ -30,10 +33,15 @@ public abstract class CompareBinaryTransformer extends BinaryTransformer {
   }
 
   @Override
-  protected TransformerType getTransformerType() {
-    return TransformerType.Comparative;
+  protected void transformAndCache() throws QueryProcessException, IOException {
+    cachedBoolean =
+        evaluate(
+            castCurrentValueToDoubleOperand(leftPointReader),
+            castCurrentValueToDoubleOperand(rightPointReader));
   }
 
+  abstract boolean evaluate(double leftOperand, double rightOperand);
+
   @Override
   public TSDataType getDataType() {
     return TSDataType.BOOLEAN;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareEqualToTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareEqualToTransformer.java
index 4370db3f7d..b68dbf85cf 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareEqualToTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareEqualToTransformer.java
@@ -19,7 +19,11 @@
 
 package org.apache.iotdb.db.query.udf.core.transformer.binary;
 
+import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+
+import java.io.IOException;
 
 public class CompareEqualToTransformer extends CompareBinaryTransformer {
 
@@ -29,12 +33,24 @@ public class CompareEqualToTransformer extends CompareBinaryTransformer {
   }
 
   @Override
-  protected TransformerType getTransformerType() {
-    return TransformerType.EqNeq;
+  protected void transformAndCache() throws QueryProcessException, IOException {
+    if (leftPointReader.getDataType() == TSDataType.BOOLEAN
+        && rightPointReader.getDataType() == TSDataType.BOOLEAN) {
+      cachedBoolean = evaluate(leftPointReader.currentBoolean(), rightPointReader.currentBoolean());
+    } else {
+      cachedBoolean =
+          evaluate(
+              castCurrentValueToDoubleOperand(leftPointReader),
+              castCurrentValueToDoubleOperand(rightPointReader));
+    }
   }
 
   @Override
-  protected boolean evaluateBoolean(double leftOperand, double rightOperand) {
+  protected boolean evaluate(double leftOperand, double rightOperand) {
     return Double.compare(leftOperand, rightOperand) == 0;
   }
+
+  protected boolean evaluate(boolean leftOperand, boolean rightOperand) {
+    return leftOperand == rightOperand;
+  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareGreaterEqualTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareGreaterEqualTransformer.java
index e6fa1cdbe2..7854143cff 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareGreaterEqualTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareGreaterEqualTransformer.java
@@ -29,7 +29,7 @@ public class CompareGreaterEqualTransformer extends CompareBinaryTransformer {
   }
 
   @Override
-  protected boolean evaluateBoolean(double leftOperand, double rightOperand) {
+  protected boolean evaluate(double leftOperand, double rightOperand) {
     return Double.compare(leftOperand, rightOperand) >= 0;
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareGreaterThanTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareGreaterThanTransformer.java
index 5cac5cb273..627c4b17bf 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareGreaterThanTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareGreaterThanTransformer.java
@@ -29,7 +29,7 @@ public class CompareGreaterThanTransformer extends CompareBinaryTransformer {
   }
 
   @Override
-  protected boolean evaluateBoolean(double leftOperand, double rightOperand) {
+  protected boolean evaluate(double leftOperand, double rightOperand) {
     return Double.compare(leftOperand, rightOperand) > 0;
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareLessEqualTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareLessEqualTransformer.java
index 6dde245ac9..2b00dca3fb 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareLessEqualTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareLessEqualTransformer.java
@@ -29,7 +29,7 @@ public class CompareLessEqualTransformer extends CompareBinaryTransformer {
   }
 
   @Override
-  protected boolean evaluateBoolean(double leftOperand, double rightOperand) {
+  protected boolean evaluate(double leftOperand, double rightOperand) {
     return Double.compare(leftOperand, rightOperand) <= 0;
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareLessThanTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareLessThanTransformer.java
index d4e91e59ef..ea2ebeded5 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareLessThanTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareLessThanTransformer.java
@@ -29,7 +29,7 @@ public class CompareLessThanTransformer extends CompareBinaryTransformer {
   }
 
   @Override
-  protected boolean evaluateBoolean(double leftOperand, double rightOperand) {
+  protected boolean evaluate(double leftOperand, double rightOperand) {
     return Double.compare(leftOperand, rightOperand) < 0;
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareNonEqualTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareNonEqualTransformer.java
index 203c113f26..feb6a0fd88 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareNonEqualTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareNonEqualTransformer.java
@@ -19,7 +19,11 @@
 
 package org.apache.iotdb.db.query.udf.core.transformer.binary;
 
+import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+
+import java.io.IOException;
 
 public class CompareNonEqualTransformer extends CompareBinaryTransformer {
 
@@ -29,12 +33,24 @@ public class CompareNonEqualTransformer extends CompareBinaryTransformer {
   }
 
   @Override
-  protected TransformerType getTransformerType() {
-    return TransformerType.EqNeq;
+  protected void transformAndCache() throws QueryProcessException, IOException {
+    if (leftPointReader.getDataType() == TSDataType.BOOLEAN
+        && rightPointReader.getDataType() == TSDataType.BOOLEAN) {
+      cachedBoolean = evaluate(leftPointReader.currentBoolean(), rightPointReader.currentBoolean());
+    } else {
+      cachedBoolean =
+          evaluate(
+              castCurrentValueToDoubleOperand(leftPointReader),
+              castCurrentValueToDoubleOperand(rightPointReader));
+    }
+  }
+
+  protected boolean evaluate(boolean leftOperand, boolean rightOperand) {
+    return leftOperand != rightOperand;
   }
 
   @Override
-  protected boolean evaluateBoolean(double leftOperand, double rightOperand) {
+  protected boolean evaluate(double leftOperand, double rightOperand) {
     return Double.compare(leftOperand, rightOperand) != 0;
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicAndTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicAndTransformer.java
index dd44e29408..3dc5c1d240 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicAndTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicAndTransformer.java
@@ -27,8 +27,7 @@ public class LogicAndTransformer extends LogicBinaryTransformer {
     super(leftPointReader, rightPointReader);
   }
 
-  @Override
-  protected boolean evaluateBoolean(boolean leftOperand, boolean rightOperand) {
+  protected boolean evaluate(boolean leftOperand, boolean rightOperand) {
     return leftOperand && rightOperand;
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicBinaryTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicBinaryTransformer.java
index a18549dabb..213efe657b 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicBinaryTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicBinaryTransformer.java
@@ -19,9 +19,12 @@
 
 package org.apache.iotdb.db.query.udf.core.transformer.binary;
 
+import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 
+import java.io.IOException;
+
 public abstract class LogicBinaryTransformer extends BinaryTransformer {
   protected LogicBinaryTransformer(
       LayerPointReader leftPointReader, LayerPointReader rightPointReader) {
@@ -29,10 +32,21 @@ public abstract class LogicBinaryTransformer extends BinaryTransformer {
   }
 
   @Override
-  protected TransformerType getTransformerType() {
-    return TransformerType.Logic;
+  protected void transformAndCache() throws QueryProcessException, IOException {
+    // Check TSDataType
+    if (leftPointReader.getDataType() != TSDataType.BOOLEAN) {
+      throw new QueryProcessException(
+          "Unsupported data type: " + leftPointReader.getDataType().toString());
+    }
+    if (rightPointReader.getDataType() != TSDataType.BOOLEAN) {
+      throw new QueryProcessException(
+          "Unsupported data type: " + rightPointReader.getDataType().toString());
+    }
+    cachedBoolean = evaluate(leftPointReader.currentBoolean(), rightPointReader.currentBoolean());
   }
 
+  protected abstract boolean evaluate(boolean leftOperand, boolean rightOperand);
+
   @Override
   public TSDataType getDataType() {
     return TSDataType.BOOLEAN;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicOrTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicOrTransformer.java
index e9250ea53e..b8ac911a91 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicOrTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicOrTransformer.java
@@ -28,7 +28,7 @@ public class LogicOrTransformer extends LogicBinaryTransformer {
   }
 
   @Override
-  protected boolean evaluateBoolean(boolean leftOperand, boolean rightOperand) {
+  protected boolean evaluate(boolean leftOperand, boolean rightOperand) {
     return leftOperand || rightOperand;
   }
 }