You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2021/03/12 08:08:36 UTC
[iotdb] 01/07: finish reader work(without UT)
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch TYQuery
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 6389622d3c92eebb0746f4bb802e9bb1d72110cb
Author: JackieTien97 <Ja...@foxmail.com>
AuthorDate: Thu Mar 11 16:50:16 2021 +0800
finish reader work(without UT)
---
.../iotdb/tsfile/encoding/decoder/Decoder.java | 4 +
.../iotdb/tsfile/file/metadata/IChunkMetadata.java | 40 ++++
.../tsfile/file/metadata/ITimeSeriesMetadata.java | 39 +++
.../tsfile/file/metadata/VectorChunkMetadata.java | 58 +++++
.../file/metadata/VectorTimeSeriesMetadata.java | 61 +++++
.../tsfile/file/metadata/enums/TSDataType.java | 2 +-
.../file/metadata/statistics/Statistics.java | 2 +-
.../file/metadata/statistics/TimeStatistics.java | 2 +-
.../apache/iotdb/tsfile/read/common/BatchData.java | 59 +++++
.../tsfile/read/reader/chunk/ChunkReader.java | 6 +-
.../read/reader/chunk/VectorChunkReader.java | 262 +++++++++++++++++++++
.../tsfile/read/reader/page/TimePageReader.java | 93 ++++++++
.../tsfile/read/reader/page/ValuePageReader.java | 160 +++++++++++++
.../tsfile/read/reader/page/VectorChunkReader.java | 21 ++
.../tsfile/read/reader/page/VectorPageReader.java | 116 +++++++++
.../apache/iotdb/tsfile/utils/TsPrimitiveType.java | 4 +-
.../iotdb/tsfile/write/chunk/TimeChunkWriter.java | 4 +-
.../tsfile/write/chunk/VectorChunkWriterImpl.java | 2 +-
.../tsfile/write/writer/TimeChunkWriterTest.java | 4 +-
.../tsfile/write/writer/TimePageWriterTest.java | 2 +-
.../write/writer/VectorChunkWriterImplTest.java | 4 +-
.../write/writer/VectorMeasurementSchemaStub.java | 2 +-
22 files changed, 930 insertions(+), 17 deletions(-)
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/decoder/Decoder.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/decoder/Decoder.java
index fc70f03..d5ac0cb 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/decoder/Decoder.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/decoder/Decoder.java
@@ -56,6 +56,7 @@ public abstract class Decoder {
case INT32:
return new IntRleDecoder();
case INT64:
+ case VECTOR:
return new LongRleDecoder();
case FLOAT:
case DOUBLE:
@@ -68,6 +69,7 @@ public abstract class Decoder {
case INT32:
return new DeltaBinaryDecoder.IntDeltaDecoder();
case INT64:
+ case VECTOR:
return new DeltaBinaryDecoder.LongDeltaDecoder();
case FLOAT:
case DOUBLE:
@@ -89,6 +91,7 @@ public abstract class Decoder {
case INT32:
return new RegularDataDecoder.IntRegularDecoder();
case INT64:
+ case VECTOR:
return new RegularDataDecoder.LongRegularDecoder();
default:
throw new TsFileDecodingException(String.format(ERROR_MSG, encoding, dataType));
@@ -102,6 +105,7 @@ public abstract class Decoder {
case INT32:
return new IntGorillaDecoder();
case INT64:
+ case VECTOR:
return new LongGorillaDecoder();
default:
throw new TsFileDecodingException(String.format(ERROR_MSG, encoding, dataType));
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/IChunkMetadata.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/IChunkMetadata.java
new file mode 100644
index 0000000..b1259a6
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/IChunkMetadata.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.tsfile.file.metadata;
+
+import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
+
+public interface IChunkMetadata {
+
+ Statistics getStatistics();
+
+ boolean isModified();
+
+ void setModified(boolean modified);
+
+ boolean isSeq();
+
+ void setSeq(boolean seq);
+
+ long getVersion();
+
+ void setVersion(long version);
+
+ long getOffsetOfChunkHeader();
+}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java
new file mode 100644
index 0000000..4029965
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.tsfile.file.metadata;
+
+import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
+
+import java.io.IOException;
+import java.util.List;
+
+public interface ITimeSeriesMetadata {
+
+ Statistics getStatistics();
+
+ boolean isModified();
+
+ void setModified(boolean modified);
+
+ boolean isSeq();
+
+ void setSeq(boolean seq);
+
+ List<IChunkMetadata> loadChunkMetadataList() throws IOException;
+}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorChunkMetadata.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorChunkMetadata.java
new file mode 100644
index 0000000..d512495
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorChunkMetadata.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.tsfile.file.metadata;
+
+import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
+
+public class VectorChunkMetadata implements IChunkMetadata {
+
+ @Override
+ public Statistics getStatistics() {
+ return null;
+ }
+
+ @Override
+ public boolean isModified() {
+ return false;
+ }
+
+ @Override
+ public void setModified(boolean modified) {}
+
+ @Override
+ public boolean isSeq() {
+ return false;
+ }
+
+ @Override
+ public void setSeq(boolean seq) {}
+
+ @Override
+ public long getVersion() {
+ return 0;
+ }
+
+ @Override
+ public void setVersion(long version) {}
+
+ @Override
+ public long getOffsetOfChunkHeader() {
+ return 0;
+ }
+}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorTimeSeriesMetadata.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorTimeSeriesMetadata.java
new file mode 100644
index 0000000..49a44aa
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorTimeSeriesMetadata.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.tsfile.file.metadata;
+
+import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
+
+import java.io.IOException;
+import java.util.List;
+
+public class VectorTimeSeriesMetadata implements ITimeSeriesMetadata {
+
+ private TimeseriesMetadata timeseriesMetadata;
+ private List<TimeseriesMetadata> valueTimeseriesMetadataList;
+
+ @Override
+ public Statistics getStatistics() {
+ return timeseriesMetadata.getStatistics();
+ }
+
+ @Override
+ public boolean isModified() {
+ return timeseriesMetadata.isModified();
+ }
+
+ @Override
+ public void setModified(boolean modified) {
+ timeseriesMetadata.setModified(modified);
+ }
+
+ @Override
+ public boolean isSeq() {
+ return timeseriesMetadata.isSeq();
+ }
+
+ @Override
+ public void setSeq(boolean seq) {
+ timeseriesMetadata.setSeq(seq);
+ }
+
+ @Override
+ public List<IChunkMetadata> loadChunkMetadataList() throws IOException {
+ List<ChunkMetadata> timeChunkMetadata = timeseriesMetadata.loadChunkMetadataList();
+ return null;
+ }
+}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSDataType.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSDataType.java
index a2b7eef..2612e03 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSDataType.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSDataType.java
@@ -44,7 +44,7 @@ public enum TSDataType {
TEXT((byte) 5),
/** Vector */
- Vector((byte) 6);
+ VECTOR((byte) 6);
private final byte type;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java
index 1c1ba7f..759a751 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java
@@ -77,7 +77,7 @@ public abstract class Statistics<T> {
return new DoubleStatistics();
case FLOAT:
return new FloatStatistics();
- case Vector:
+ case VECTOR:
return new TimeStatistics();
default:
throw new UnknownColumnTypeException(type.toString());
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/TimeStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/TimeStatistics.java
index 74bd701..e812166 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/TimeStatistics.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/TimeStatistics.java
@@ -32,7 +32,7 @@ public class TimeStatistics extends Statistics {
@Override
public TSDataType getType() {
- return TSDataType.Vector;
+ return TSDataType.VECTOR;
}
@Override
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java
index c2a7d3b..a2c2ce7 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java
@@ -31,6 +31,7 @@ import org.apache.iotdb.tsfile.utils.TsPrimitiveType.TsDouble;
import org.apache.iotdb.tsfile.utils.TsPrimitiveType.TsFloat;
import org.apache.iotdb.tsfile.utils.TsPrimitiveType.TsInt;
import org.apache.iotdb.tsfile.utils.TsPrimitiveType.TsLong;
+import org.apache.iotdb.tsfile.utils.TsPrimitiveType.TsVector;
import java.util.ArrayList;
import java.util.List;
@@ -77,6 +78,7 @@ public class BatchData {
protected List<float[]> floatRet;
protected List<double[]> doubleRet;
protected List<Binary[]> binaryRet;
+ protected List<TsPrimitiveType[][]> vectorRet;
public BatchData() {
dataType = null;
@@ -134,6 +136,8 @@ public class BatchData {
return getBoolean();
case TEXT:
return getBinary();
+ case VECTOR:
+ return getVector();
default:
return null;
}
@@ -153,6 +157,8 @@ public class BatchData {
return new TsBoolean(getBoolean());
case TEXT:
return new TsBinary(getBinary());
+ case VECTOR:
+ return new TsVector(getVector());
default:
return null;
}
@@ -203,6 +209,9 @@ public class BatchData {
binaryRet = new ArrayList<>();
binaryRet.add(new Binary[capacity]);
break;
+ case VECTOR:
+ vectorRet = new ArrayList<>();
+ vectorRet.add(new TsPrimitiveType[capacity][]);
default:
throw new UnSupportedDataTypeException(String.valueOf(dataType));
}
@@ -417,6 +426,41 @@ public class BatchData {
count++;
}
+ /**
+ * put vector data.
+ *
+ * @param t timestamp
+ * @param v vector data.
+ */
+ public void putVector(long t, TsPrimitiveType[] v) {
+ if (writeCurArrayIndex == capacity) {
+ if (capacity >= CAPACITY_THRESHOLD) {
+ timeRet.add(new long[capacity]);
+ vectorRet.add(new TsPrimitiveType[capacity][]);
+ writeCurListIndex++;
+ writeCurArrayIndex = 0;
+ } else {
+ int newCapacity = capacity << 1;
+
+ long[] newTimeData = new long[newCapacity];
+ TsPrimitiveType[][] newValueData = new TsPrimitiveType[newCapacity][];
+
+ System.arraycopy(timeRet.get(0), 0, newTimeData, 0, capacity);
+ System.arraycopy(vectorRet.get(0), 0, newValueData, 0, capacity);
+
+ timeRet.set(0, newTimeData);
+ vectorRet.set(0, newValueData);
+
+ capacity = newCapacity;
+ }
+ }
+ timeRet.get(writeCurListIndex)[writeCurArrayIndex] = t;
+ vectorRet.get(writeCurListIndex)[writeCurArrayIndex] = v;
+
+ writeCurArrayIndex++;
+ count++;
+ }
+
public boolean getBoolean() {
return this.booleanRet.get(readCurListIndex)[readCurArrayIndex];
}
@@ -465,6 +509,14 @@ public class BatchData {
this.binaryRet.get(readCurListIndex)[readCurArrayIndex] = v;
}
+ public TsPrimitiveType[] getVector() {
+ return this.vectorRet.get(readCurListIndex)[readCurArrayIndex];
+ }
+
+ public void setVector(TsPrimitiveType[] v) {
+ this.vectorRet.get(readCurListIndex)[readCurArrayIndex] = v;
+ }
+
public void setTime(long v) {
this.timeRet.get(readCurListIndex)[readCurArrayIndex] = v;
}
@@ -495,6 +547,9 @@ public class BatchData {
case TEXT:
putBinary(t, (Binary) v);
break;
+ case VECTOR:
+ putVector(t, (TsPrimitiveType[]) v);
+ break;
default:
throw new UnSupportedDataTypeException(String.valueOf(dataType));
}
@@ -532,6 +587,10 @@ public class BatchData {
return booleanRet.get(idx / capacity)[idx % capacity];
}
+ public TsPrimitiveType[] getVectorByIndex(int idx) {
+ return vectorRet.get(idx / capacity)[idx % capacity];
+ }
+
public TimeValuePair getLastPairBeforeOrEqualTimestamp(long queryTime) {
TimeValuePair resultPair = new TimeValuePair(Long.MIN_VALUE, null);
resetBatchData();
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReader.java
index 2a4e1f7..8b67dd4 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReader.java
@@ -118,11 +118,11 @@ public class ChunkReader implements IChunkReader {
return pageReaderList.remove(0).getAllSatisfiedPageData();
}
- private void skipBytesInStreamByLength(long length) {
- chunkDataBuffer.position(chunkDataBuffer.position() + (int) length);
+ private void skipBytesInStreamByLength(int length) {
+ chunkDataBuffer.position(chunkDataBuffer.position() + length);
}
- public boolean pageSatisfied(PageHeader pageHeader) {
+ protected boolean pageSatisfied(PageHeader pageHeader) {
if (deleteIntervalList != null) {
for (TimeRange range : deleteIntervalList) {
if (range.contains(pageHeader.getStartTime(), pageHeader.getEndTime())) {
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/VectorChunkReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/VectorChunkReader.java
new file mode 100644
index 0000000..33b256a
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/VectorChunkReader.java
@@ -0,0 +1,262 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.tsfile.read.reader.chunk;
+
+import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
+import org.apache.iotdb.tsfile.compress.IUnCompressor;
+import org.apache.iotdb.tsfile.encoding.decoder.Decoder;
+import org.apache.iotdb.tsfile.file.MetaMarker;
+import org.apache.iotdb.tsfile.file.header.ChunkHeader;
+import org.apache.iotdb.tsfile.file.header.PageHeader;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
+import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
+import org.apache.iotdb.tsfile.read.common.BatchData;
+import org.apache.iotdb.tsfile.read.common.Chunk;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+import org.apache.iotdb.tsfile.read.reader.IChunkReader;
+import org.apache.iotdb.tsfile.read.reader.IPageReader;
+import org.apache.iotdb.tsfile.read.reader.page.VectorPageReader;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+public class VectorChunkReader implements IChunkReader {
+
+ private final ChunkHeader timeChunkHeader;
+ private final List<ChunkHeader> valueChunkHeaderList = new ArrayList<>();
+ private final ByteBuffer timeChunkDataBuffer;
+ private final List<ByteBuffer> valueChunkDataBufferList = new ArrayList<>();
+ private final IUnCompressor unCompressor;
+ private final Decoder timeDecoder =
+ Decoder.getDecoderByType(
+ TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getTimeEncoder()),
+ TSDataType.INT64);
+
+ protected Filter filter;
+
+ private final List<IPageReader> pageReaderList = new LinkedList<>();
+
+ /** A list of deleted intervals. */
+ private final List<List<TimeRange>> valueDeleteIntervalList;
+
+ /**
+ * constructor of ChunkReader.
+ *
+ * @param filter filter
+ */
+ public VectorChunkReader(Chunk timeChunk, List<Chunk> valueChunkList, Filter filter)
+ throws IOException {
+ this.filter = filter;
+ this.timeChunkDataBuffer = timeChunk.getData();
+ this.valueDeleteIntervalList = new ArrayList<>();
+ this.timeChunkHeader = timeChunk.getHeader();
+ this.unCompressor = IUnCompressor.getUnCompressor(timeChunkHeader.getCompressionType());
+ List<Statistics> valueChunkStatisticsList = new ArrayList<>();
+ valueChunkList.forEach(
+ chunk -> {
+ this.valueChunkHeaderList.add(chunk.getHeader());
+ this.valueChunkDataBufferList.add(chunk.getData());
+ valueChunkStatisticsList.add(chunk.getChunkStatistic());
+ valueDeleteIntervalList.add(chunk.getDeleteIntervalList());
+ });
+ initAllPageReaders(timeChunk.getChunkStatistic(), valueChunkStatisticsList);
+ }
+
+ private void initAllPageReaders(
+ Statistics timeChunkStatistics, List<Statistics> valueChunkStatisticsList)
+ throws IOException {
+ // construct next satisfied page header
+ while (timeChunkDataBuffer.remaining() > 0) {
+ // deserialize a PageHeader from chunkDataBuffer
+ PageHeader timePageHeader;
+ List<PageHeader> valuePageHeaderList = new ArrayList<>();
+ if (timeChunkHeader.getChunkType() == MetaMarker.ONLY_ONE_PAGE_CHUNK_HEADER) {
+ timePageHeader = PageHeader.deserializeFrom(timeChunkDataBuffer, timeChunkStatistics);
+ for (int i = 0; i < valueChunkDataBufferList.size(); i++) {
+ valuePageHeaderList.add(
+ PageHeader.deserializeFrom(
+ valueChunkDataBufferList.get(i), valueChunkStatisticsList.get(i)));
+ }
+ } else {
+ timePageHeader =
+ PageHeader.deserializeFrom(timeChunkDataBuffer, timeChunkHeader.getDataType());
+ for (int i = 0; i < valueChunkDataBufferList.size(); i++) {
+ valuePageHeaderList.add(
+ PageHeader.deserializeFrom(
+ valueChunkDataBufferList.get(i), valueChunkHeaderList.get(i).getDataType()));
+ }
+ }
+ // if the current page satisfies
+ if (pageSatisfied(timePageHeader)) {
+ pageReaderList.add(constructPageReaderForNextPage(timePageHeader, valuePageHeaderList));
+ } else {
+ skipBytesInStreamByLength(timePageHeader, valuePageHeaderList);
+ }
+ }
+ }
+
+ private boolean pageSatisfied(PageHeader pageHeader) {
+ return filter == null || filter.satisfy(pageHeader.getStatistics());
+ }
+
+ /** used for value page filter */
+ private boolean pageSatisfied(PageHeader pageHeader, List<TimeRange> valueDeleteInterval) {
+ if (valueDeleteInterval != null) {
+ for (TimeRange range : valueDeleteInterval) {
+ if (range.contains(pageHeader.getStartTime(), pageHeader.getEndTime())) {
+ return false;
+ }
+ if (range.overlaps(new TimeRange(pageHeader.getStartTime(), pageHeader.getEndTime()))) {
+ pageHeader.setModified(true);
+ }
+ }
+ }
+ return filter == null || filter.satisfy(pageHeader.getStatistics());
+ }
+
+ private VectorPageReader constructPageReaderForNextPage(
+ PageHeader timePageHeader, List<PageHeader> valuePageHeader) throws IOException {
+ PageInfo timePageInfo = new PageInfo();
+ getPageInfo(timePageHeader, timeChunkDataBuffer, timeChunkHeader, timePageInfo);
+ PageInfo valuePageInfo = new PageInfo();
+ List<PageHeader> valuePageHeaderList = new ArrayList<>();
+ List<ByteBuffer> valuePageDataList = new ArrayList<>();
+ List<TSDataType> valueDataTypeList = new ArrayList<>();
+ List<Decoder> valueDecoderList = new ArrayList<>();
+ for (int i = 0; i < valuePageHeader.size(); i++) {
+ if (pageSatisfied(valuePageHeader.get(i), valueDeleteIntervalList.get(i))) {
+ getPageInfo(
+ valuePageHeader.get(i),
+ valueChunkDataBufferList.get(i),
+ valueChunkHeaderList.get(i),
+ valuePageInfo);
+ valuePageHeaderList.add(valuePageInfo.pageHeader);
+ valuePageDataList.add(valuePageInfo.pageData);
+ valueDataTypeList.add(valuePageInfo.dataType);
+ valueDecoderList.add(valuePageInfo.decoder);
+ } else {
+ valueChunkDataBufferList
+ .get(i)
+ .position(
+ valueChunkDataBufferList.get(i).position()
+ + valuePageHeader.get(i).getCompressedSize());
+ valuePageHeaderList.add(valuePageHeader.get(i));
+ valuePageDataList.add(null);
+ valueDataTypeList.add(null);
+ valueDecoderList.add(null);
+ }
+ }
+ VectorPageReader vectorPageReader =
+ new VectorPageReader(
+ timePageHeader,
+ timePageInfo.pageData,
+ timeDecoder,
+ valuePageHeaderList,
+ valuePageDataList,
+ valueDataTypeList,
+ valueDecoderList,
+ filter);
+ vectorPageReader.setDeleteIntervalList(valueDeleteIntervalList);
+ return vectorPageReader;
+ }
+
+ private void getPageInfo(
+ PageHeader pageHeader, ByteBuffer chunkBuffer, ChunkHeader chunkHeader, PageInfo pageInfo)
+ throws IOException {
+ pageInfo.pageHeader = pageHeader;
+ pageInfo.dataType = chunkHeader.getDataType();
+ int compressedPageBodyLength = pageHeader.getCompressedSize();
+ byte[] compressedPageBody = new byte[compressedPageBodyLength];
+
+ // doesn't has a complete page body
+ if (compressedPageBodyLength > chunkBuffer.remaining()) {
+ throw new IOException(
+ "do not has a complete page body. Expected:"
+ + compressedPageBodyLength
+ + ". Actual:"
+ + chunkBuffer.remaining());
+ }
+
+ chunkBuffer.get(compressedPageBody);
+ pageInfo.decoder =
+ Decoder.getDecoderByType(chunkHeader.getEncodingType(), chunkHeader.getDataType());
+ byte[] uncompressedPageData = new byte[pageHeader.getUncompressedSize()];
+ try {
+ unCompressor.uncompress(
+ compressedPageBody, 0, compressedPageBodyLength, uncompressedPageData, 0);
+ } catch (Exception e) {
+ throw new IOException(
+ "Uncompress error! uncompress size: "
+ + pageHeader.getUncompressedSize()
+ + "compressed size: "
+ + pageHeader.getCompressedSize()
+ + "page header: "
+ + pageHeader
+ + e.getMessage());
+ }
+ pageInfo.pageData = ByteBuffer.wrap(uncompressedPageData);
+ }
+
+ private static class PageInfo {
+
+ PageHeader pageHeader;
+ ByteBuffer pageData;
+ TSDataType dataType;
+ Decoder decoder;
+ }
+
+ private void skipBytesInStreamByLength(
+ PageHeader timePageHeader, List<PageHeader> valuePageHeader) {
+ timeChunkDataBuffer.position(
+ timeChunkDataBuffer.position() + timePageHeader.getCompressedSize());
+ for (int i = 0; i < valuePageHeader.size(); i++) {
+ valueChunkDataBufferList
+ .get(i)
+ .position(
+ valueChunkDataBufferList.get(i).position()
+ + valuePageHeader.get(i).getCompressedSize());
+ }
+ }
+
+ @Override
+ public boolean hasNextSatisfiedPage() {
+ return !pageReaderList.isEmpty();
+ }
+
+ @Override
+ public BatchData nextPageData() throws IOException {
+ if (pageReaderList.isEmpty()) {
+ throw new IOException("No more page");
+ }
+ return pageReaderList.remove(0).getAllSatisfiedPageData();
+ }
+
+ @Override
+ public void close() throws IOException {}
+
+ @Override
+ public List<IPageReader> loadPageReaderList() {
+ return pageReaderList;
+ }
+}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/TimePageReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/TimePageReader.java
new file mode 100644
index 0000000..6bb7e74
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/TimePageReader.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.tsfile.read.reader.page;
+
+import org.apache.iotdb.tsfile.encoding.decoder.Decoder;
+import org.apache.iotdb.tsfile.file.header.PageHeader;
+import org.apache.iotdb.tsfile.file.metadata.statistics.TimeStatistics;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+
+import com.sun.tools.javac.util.List;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+public class TimePageReader {
+
+ private final PageHeader pageHeader;
+
+ /** decoder for time column */
+ protected Decoder timeDecoder;
+
+ /** time column in memory */
+ protected ByteBuffer timeBuffer;
+
+ /** A list of deleted intervals. */
+ private List<TimeRange> deleteIntervalList;
+
+ private int deleteCursor = 0;
+
+ public TimePageReader(ByteBuffer pageData, Decoder timeDecoder) {
+ this(null, pageData, timeDecoder);
+ }
+
+ public TimePageReader(PageHeader pageHeader, ByteBuffer pageData, Decoder timeDecoder) {
+ this.timeDecoder = timeDecoder;
+ this.pageHeader = pageHeader;
+ this.timeBuffer = pageData;
+ }
+
+ public long[] nexTimeBatch() throws IOException {
+ long[] timeBatch = new long[(int) pageHeader.getStatistics().getCount()];
+ int index = 0;
+ while (timeDecoder.hasNext(timeBuffer)) {
+ timeBatch[index++] = timeDecoder.readLong(timeBuffer);
+ }
+ return timeBatch;
+ }
+
+ public TimeStatistics getStatistics() {
+ return (TimeStatistics) pageHeader.getStatistics();
+ }
+
+ public void setDeleteIntervalList(List<TimeRange> list) {
+ this.deleteIntervalList = list;
+ }
+
+ public List<TimeRange> getDeleteIntervalList() {
+ return deleteIntervalList;
+ }
+
+ public boolean isModified() {
+ return pageHeader.isModified();
+ }
+
+ protected boolean isDeleted(long timestamp) {
+ while (deleteIntervalList != null && deleteCursor < deleteIntervalList.size()) {
+ if (deleteIntervalList.get(deleteCursor).contains(timestamp)) {
+ return true;
+ } else if (deleteIntervalList.get(deleteCursor).getMax() < timestamp) {
+ deleteCursor++;
+ } else {
+ return false;
+ }
+ }
+ return false;
+ }
+}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/ValuePageReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/ValuePageReader.java
new file mode 100644
index 0000000..f972159
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/ValuePageReader.java
@@ -0,0 +1,160 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.tsfile.read.reader.page;
+
+import org.apache.iotdb.tsfile.encoding.decoder.Decoder;
+import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
+import org.apache.iotdb.tsfile.file.header.PageHeader;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.utils.Binary;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
+import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
+
+import java.nio.ByteBuffer;
+import java.util.List;
+
+public class ValuePageReader {
+
+ private static final int MASK = 0x80;
+
+ private final PageHeader pageHeader;
+
+ private final TSDataType dataType;
+
+ /** decoder for value column */
+ private final Decoder valueDecoder;
+
+ private byte[] bitmap;
+
+ private int size;
+
+ /** value column in memory */
+ protected ByteBuffer valueBuffer;
+
+ /** A list of deleted intervals. */
+ private List<TimeRange> deleteIntervalList;
+
+ private int deleteCursor = 0;
+
+ public ValuePageReader(ByteBuffer pageData, TSDataType dataType, Decoder valueDecoder) {
+ this(null, pageData, dataType, valueDecoder);
+ }
+
+ public ValuePageReader(
+ PageHeader pageHeader, ByteBuffer pageData, TSDataType dataType, Decoder valueDecoder) {
+ this.dataType = dataType;
+ this.valueDecoder = valueDecoder;
+ this.pageHeader = pageHeader;
+ if (pageData != null) {
+ splitDataToBitmapAndValue(pageData);
+ }
+ this.valueBuffer = pageData;
+ }
+
+ private void splitDataToBitmapAndValue(ByteBuffer pageData) {
+ this.size = ReadWriteIOUtils.readInt(pageData);
+ this.bitmap = new byte[(size + 7) / 8];
+ pageData.get(bitmap);
+ this.valueBuffer = pageData.slice();
+ }
+
+ public TsPrimitiveType[] nextValueBatch(long[] timeBatch) {
+ TsPrimitiveType[] valueBatch = new TsPrimitiveType[size];
+ if (valueBuffer == null) {
+ return valueBatch;
+ }
+ for (int i = 0; i < size; i++) {
+ if ((bitmap[i / 8] & (MASK >>> (i % 8))) == 0) {
+ continue;
+ }
+ switch (dataType) {
+ case BOOLEAN:
+ boolean aBoolean = valueDecoder.readBoolean(valueBuffer);
+ if (!isDeleted(timeBatch[i])) {
+ valueBatch[i] = new TsPrimitiveType.TsBoolean(aBoolean);
+ }
+ break;
+ case INT32:
+ int anInt = valueDecoder.readInt(valueBuffer);
+ if (!isDeleted(timeBatch[i])) {
+ valueBatch[i] = new TsPrimitiveType.TsInt(anInt);
+ }
+ break;
+ case INT64:
+ long aLong = valueDecoder.readLong(valueBuffer);
+ if (!isDeleted(timeBatch[i])) {
+ valueBatch[i] = new TsPrimitiveType.TsLong(aLong);
+ }
+ break;
+ case FLOAT:
+ float aFloat = valueDecoder.readFloat(valueBuffer);
+ if (!isDeleted(timeBatch[i])) {
+ valueBatch[i] = new TsPrimitiveType.TsFloat(aFloat);
+ }
+ break;
+ case DOUBLE:
+ double aDouble = valueDecoder.readDouble(valueBuffer);
+ if (!isDeleted(timeBatch[i])) {
+ valueBatch[i] = new TsPrimitiveType.TsDouble(aDouble);
+ }
+ break;
+ case TEXT:
+ Binary aBinary = valueDecoder.readBinary(valueBuffer);
+ if (!isDeleted(timeBatch[i])) {
+ valueBatch[i] = new TsPrimitiveType.TsBinary(aBinary);
+ }
+ break;
+ default:
+ throw new UnSupportedDataTypeException(String.valueOf(dataType));
+ }
+ }
+ return valueBatch;
+ }
+
+ public Statistics getStatistics() {
+ return pageHeader.getStatistics();
+ }
+
+ public void setDeleteIntervalList(List<TimeRange> list) {
+ this.deleteIntervalList = list;
+ }
+
+ public List<TimeRange> getDeleteIntervalList() {
+ return deleteIntervalList;
+ }
+
+ public boolean isModified() {
+ return pageHeader.isModified();
+ }
+
+ protected boolean isDeleted(long timestamp) {
+ while (deleteIntervalList != null && deleteCursor < deleteIntervalList.size()) {
+ if (deleteIntervalList.get(deleteCursor).contains(timestamp)) {
+ return true;
+ } else if (deleteIntervalList.get(deleteCursor).getMax() < timestamp) {
+ deleteCursor++;
+ } else {
+ return false;
+ }
+ }
+ return false;
+ }
+}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/VectorChunkReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/VectorChunkReader.java
new file mode 100644
index 0000000..b4665fc
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/VectorChunkReader.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.tsfile.read.reader.page;
+
+public class VectorChunkReader {}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/VectorPageReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/VectorPageReader.java
new file mode 100644
index 0000000..b2059af
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/VectorPageReader.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.tsfile.read.reader.page;
+
+import org.apache.iotdb.tsfile.encoding.decoder.Decoder;
+import org.apache.iotdb.tsfile.file.header.PageHeader;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
+import org.apache.iotdb.tsfile.read.common.BatchData;
+import org.apache.iotdb.tsfile.read.common.BatchDataFactory;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+import org.apache.iotdb.tsfile.read.reader.IPageReader;
+import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+
+public class VectorPageReader implements IPageReader {
+
+ private final TimePageReader timePageReader;
+ private final List<ValuePageReader> valuePageReaderList;
+ private final int valueCount;
+ private Filter filter;
+ private boolean isModified;
+
+ public VectorPageReader(
+ PageHeader timePageHeader,
+ ByteBuffer timePageData,
+ Decoder timeDecoder,
+ List<PageHeader> valuePageHeaderList,
+ List<ByteBuffer> valuePageDataList,
+ List<TSDataType> valueDataTypeList,
+ List<Decoder> valueDecoderList,
+ Filter filter) {
+ timePageReader = new TimePageReader(timePageHeader, timePageData, timeDecoder);
+ isModified = timePageReader.isModified();
+ valuePageReaderList = new ArrayList<>(valuePageHeaderList.size());
+ for (int i = 0; i < valuePageHeaderList.size(); i++) {
+ ValuePageReader valuePageReader =
+ new ValuePageReader(
+ valuePageHeaderList.get(i),
+ valuePageDataList.get(i),
+ valueDataTypeList.get(i),
+ valueDecoderList.get(i));
+ valuePageReaderList.add(valuePageReader);
+ isModified = isModified && valuePageReader.isModified();
+ }
+ this.filter = filter;
+ this.valueCount = valuePageReaderList.size();
+ }
+
+ @Override
+ public BatchData getAllSatisfiedPageData(boolean ascending) throws IOException {
+ long[] timeBatch = timePageReader.nexTimeBatch();
+ List<TsPrimitiveType[]> valueBatchList = new ArrayList<>(valueCount);
+ for (ValuePageReader valuePageReader : valuePageReaderList) {
+ valueBatchList.add(valuePageReader.nextValueBatch(timeBatch));
+ }
+ BatchData pageData = BatchDataFactory.createBatchData(TSDataType.VECTOR, ascending, false);
+ boolean isNull;
+ for (int i = 0; i < timeBatch.length; i++) {
+ isNull = true;
+ TsPrimitiveType[] v = new TsPrimitiveType[valueCount];
+ for (int j = 0; j < v.length; j++) {
+ v[j] = valueBatchList.get(j)[i];
+ if (v[j] != null) {
+ isNull = false;
+ }
+ }
+ if (!isNull && (filter == null || filter.satisfy(timeBatch[i], v))) {
+ pageData.putVector(timeBatch[i], v);
+ }
+ }
+ return pageData;
+ }
+
+ public void setDeleteIntervalList(List<List<TimeRange>> list) {
+ for (int i = 0; i < valueCount; i++) {
+ valuePageReaderList.get(i).setDeleteIntervalList(list.get(i));
+ }
+ }
+
+ @Override
+ public Statistics getStatistics() {
+ return timePageReader.getStatistics();
+ }
+
+ @Override
+ public void setFilter(Filter filter) {
+ this.filter = filter;
+ }
+
+ @Override
+ public boolean isModified() {
+ return isModified;
+ }
+}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/TsPrimitiveType.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/TsPrimitiveType.java
index 6c00f43..b4efd18 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/TsPrimitiveType.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/TsPrimitiveType.java
@@ -45,7 +45,7 @@ public abstract class TsPrimitiveType implements Serializable {
return new TsPrimitiveType.TsDouble((double) v);
case TEXT:
return new TsPrimitiveType.TsBinary((Binary) v);
- case Vector:
+ case VECTOR:
return new TsPrimitiveType.TsVector((TsPrimitiveType[]) v);
default:
throw new UnSupportedDataTypeException("Unsupported data type:" + dataType);
@@ -519,7 +519,7 @@ public abstract class TsPrimitiveType implements Serializable {
@Override
public TSDataType getDataType() {
- return TSDataType.Vector;
+ return TSDataType.VECTOR;
}
}
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/TimeChunkWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/TimeChunkWriter.java
index df9ded9..522eff5 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/TimeChunkWriter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/TimeChunkWriter.java
@@ -205,7 +205,7 @@ public class TimeChunkWriter {
}
public TSDataType getDataType() {
- return TSDataType.Vector;
+ return TSDataType.VECTOR;
}
/**
@@ -223,7 +223,7 @@ public class TimeChunkWriter {
writer.startFlushChunk(
measurementId,
compressionType,
- TSDataType.Vector,
+ TSDataType.VECTOR,
encodingType,
statistics,
pageBuffer.size(),
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/VectorChunkWriterImpl.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/VectorChunkWriterImpl.java
index af71ecd..8f1e907 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/VectorChunkWriterImpl.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/VectorChunkWriterImpl.java
@@ -197,6 +197,6 @@ public class VectorChunkWriterImpl implements IChunkWriter {
@Override
public TSDataType getDataType() {
- return TSDataType.Vector;
+ return TSDataType.VECTOR;
}
}
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimeChunkWriterTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimeChunkWriterTest.java
index 9968815..bdca8d5 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimeChunkWriterTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimeChunkWriterTest.java
@@ -63,7 +63,7 @@ public class TimeChunkWriterTest {
(byte) (0x80 | MetaMarker.ONLY_ONE_PAGE_CHUNK_HEADER), ReadWriteIOUtils.readByte(buffer));
assertEquals("c1", ReadWriteIOUtils.readVarIntString(buffer));
assertEquals(82, ReadWriteForEncodingUtils.readUnsignedVarInt(buffer));
- assertEquals(TSDataType.Vector.serialize(), ReadWriteIOUtils.readByte(buffer));
+ assertEquals(TSDataType.VECTOR.serialize(), ReadWriteIOUtils.readByte(buffer));
assertEquals(CompressionType.UNCOMPRESSED.serialize(), ReadWriteIOUtils.readByte(buffer));
assertEquals(TSEncoding.PLAIN.serialize(), ReadWriteIOUtils.readByte(buffer));
assertEquals(82, buffer.remaining());
@@ -99,7 +99,7 @@ public class TimeChunkWriterTest {
assertEquals((byte) (0x80 | MetaMarker.CHUNK_HEADER), ReadWriteIOUtils.readByte(buffer));
assertEquals("c1", ReadWriteIOUtils.readVarIntString(buffer));
assertEquals(198, ReadWriteForEncodingUtils.readUnsignedVarInt(buffer));
- assertEquals(TSDataType.Vector.serialize(), ReadWriteIOUtils.readByte(buffer));
+ assertEquals(TSDataType.VECTOR.serialize(), ReadWriteIOUtils.readByte(buffer));
assertEquals(CompressionType.UNCOMPRESSED.serialize(), ReadWriteIOUtils.readByte(buffer));
assertEquals(TSEncoding.PLAIN.serialize(), ReadWriteIOUtils.readByte(buffer));
assertEquals(198, buffer.remaining());
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimePageWriterTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimePageWriterTest.java
index 2ec6294..cab975c 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimePageWriterTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimePageWriterTest.java
@@ -119,7 +119,7 @@ public class TimePageWriterTest {
// compressedSize
assertEquals(24, ReadWriteForEncodingUtils.readUnsignedVarInt(buffer));
TimeStatistics testStatistics =
- (TimeStatistics) TimeStatistics.deserialize(buffer, TSDataType.Vector);
+ (TimeStatistics) TimeStatistics.deserialize(buffer, TSDataType.VECTOR);
assertEquals(1L, testStatistics.getStartTime());
assertEquals(3L, testStatistics.getEndTime());
assertEquals(3, testStatistics.getCount());
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorChunkWriterImplTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorChunkWriterImplTest.java
index 93e18bb..3ca81b1 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorChunkWriterImplTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorChunkWriterImplTest.java
@@ -65,7 +65,7 @@ public class VectorChunkWriterImplTest {
(byte) (0x80 | MetaMarker.ONLY_ONE_PAGE_CHUNK_HEADER), ReadWriteIOUtils.readByte(buffer));
assertEquals("s1.time", ReadWriteIOUtils.readVarIntString(buffer));
assertEquals(164, ReadWriteForEncodingUtils.readUnsignedVarInt(buffer));
- assertEquals(TSDataType.Vector.serialize(), ReadWriteIOUtils.readByte(buffer));
+ assertEquals(TSDataType.VECTOR.serialize(), ReadWriteIOUtils.readByte(buffer));
assertEquals(CompressionType.UNCOMPRESSED.serialize(), ReadWriteIOUtils.readByte(buffer));
assertEquals(TSEncoding.PLAIN.serialize(), ReadWriteIOUtils.readByte(buffer));
buffer.position(buffer.position() + 164);
@@ -138,7 +138,7 @@ public class VectorChunkWriterImplTest {
assertEquals((byte) (0x80 | MetaMarker.CHUNK_HEADER), ReadWriteIOUtils.readByte(buffer));
assertEquals("s1.time", ReadWriteIOUtils.readVarIntString(buffer));
assertEquals(362, ReadWriteForEncodingUtils.readUnsignedVarInt(buffer));
- assertEquals(TSDataType.Vector.serialize(), ReadWriteIOUtils.readByte(buffer));
+ assertEquals(TSDataType.VECTOR.serialize(), ReadWriteIOUtils.readByte(buffer));
assertEquals(CompressionType.UNCOMPRESSED.serialize(), ReadWriteIOUtils.readByte(buffer));
assertEquals(TSEncoding.PLAIN.serialize(), ReadWriteIOUtils.readByte(buffer));
buffer.position(buffer.position() + 362);
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorMeasurementSchemaStub.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorMeasurementSchemaStub.java
index 795a0a6..40335f5 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorMeasurementSchemaStub.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorMeasurementSchemaStub.java
@@ -42,7 +42,7 @@ public class VectorMeasurementSchemaStub implements IMeasurementSchema {
@Override
public TSDataType getType() {
- return TSDataType.Vector;
+ return TSDataType.VECTOR;
}
@Override