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