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

haonan pushed a commit to branch iotdb
in repository https://gitbox.apache.org/repos/asf/tsfile.git

commit 3be4c18e0123a9d0493c1880f8236f00533aa561
Author: gzh0806 <[email protected]>
AuthorDate: Tue Jul 2 11:27:05 2024 +0800

    fix rlbe (#143)
---
 .../main/java/org/apache/tsfile/encoding/decoder/Decoder.java |  3 +--
 .../java/org/apache/tsfile/encoding/decoder/FloatDecoder.java | 11 +++++++++++
 .../java/org/apache/tsfile/encoding/encoder/FloatEncoder.java |  9 +++++++++
 .../org/apache/tsfile/encoding/encoder/TSEncodingBuilder.java |  6 ++++--
 4 files changed, 25 insertions(+), 4 deletions(-)

diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/Decoder.java 
b/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/Decoder.java
index 36c3d826..be83a285 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/Decoder.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/Decoder.java
@@ -171,9 +171,8 @@ public abstract class Decoder {
           case TIMESTAMP:
             return new LongRLBEDecoder();
           case FLOAT:
-            return new FloatRLBEDecoder();
           case DOUBLE:
-            return new DoubleRLBEDecoder();
+            return new FloatDecoder(TSEncoding.valueOf(encoding.toString()), 
dataType);
           default:
             throw new TsFileDecodingException(String.format(ERROR_MSG, 
encoding, dataType));
         }
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/FloatDecoder.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/FloatDecoder.java
index 505b8e69..5682e5ec 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/FloatDecoder.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/FloatDecoder.java
@@ -71,6 +71,17 @@ public class FloatDecoder extends Decoder {
         throw new TsFileDecodingException(
             String.format("data type %s is not supported by FloatDecoder", 
dataType));
       }
+    } else if (encodingType == TSEncoding.RLBE) {
+      if (dataType == TSDataType.FLOAT) {
+        decoder = new IntRLBEDecoder();
+        logger.debug("tsfile-encoding FloatDecoder: init decoder using 
int-rlbe and float");
+      } else if (dataType == TSDataType.DOUBLE) {
+        decoder = new LongRLBEDecoder();
+        logger.debug("tsfile-encoding FloatDecoder: init decoder using 
long-rlbe and double");
+      } else {
+        throw new TsFileDecodingException(
+                String.format("data type %s is not supported by FloatDecoder", 
dataType));
+      }
     } else {
       throw new TsFileDecodingException(
           String.format("%s encoding is not supported by FloatDecoder", 
encodingType));
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/FloatEncoder.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/FloatEncoder.java
index 4655d3d6..4a79e3e6 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/FloatEncoder.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/FloatEncoder.java
@@ -72,6 +72,15 @@ public class FloatEncoder extends Encoder {
         throw new TsFileEncodingException(
             String.format("data type %s is not supported by FloatEncoder", 
dataType));
       }
+    } else if (encodingType == TSEncoding.RLBE) {
+      if (dataType == TSDataType.FLOAT) {
+        encoder = new IntRLBE();
+      } else if (dataType == TSDataType.DOUBLE) {
+        encoder = new LongRLBE();
+      } else {
+        throw new TsFileEncodingException(
+                String.format("data type %s is not supported by FloatEncoder", 
dataType));
+      }
     } else {
       throw new TsFileEncodingException(
           String.format("%s encoding is not supported by FloatEncoder", 
encodingType));
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/TSEncodingBuilder.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/TSEncodingBuilder.java
index 232ddd3c..18889438 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/TSEncodingBuilder.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/TSEncodingBuilder.java
@@ -341,6 +341,9 @@ public abstract class TSEncodingBuilder {
   }
 
   public static class RLBE extends TSEncodingBuilder {
+
+    private int maxPointNumber = 0;
+
     @Override
     public Encoder getEncoder(TSDataType type) {
       switch (type) {
@@ -351,9 +354,8 @@ public abstract class TSEncodingBuilder {
         case TIMESTAMP:
           return new LongRLBE();
         case FLOAT:
-          return new FloatRLBE();
         case DOUBLE:
-          return new DoubleRLBE();
+          return new FloatEncoder(TSEncoding.RLBE, type, maxPointNumber);
         default:
           throw new UnSupportedDataTypeException("RLBE doesn't support data 
type: " + type);
       }

Reply via email to