This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch new_vector in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit ae1379e029c40146051b7f0d81887f6811008db9 Author: HTHou <[email protected]> AuthorDate: Fri Nov 5 16:14:43 2021 +0800 optimize query mem data --- .../engine/memtable/AlignedWritableMemChunk.java | 9 +- .../querycontext/AlignedReadOnlyMemChunk.java | 165 +++++++++++++++++++++ .../db/engine/querycontext/ReadOnlyMemChunk.java | 112 +------------- .../db/engine/storagegroup/TsFileProcessor.java | 3 +- .../apache/iotdb/db/metadata/path/AlignedPath.java | 8 +- .../db/utils/datastructure/AlignedTVList.java | 65 +++++--- .../iotdb/db/utils/datastructure/TVList.java | 2 +- 7 files changed, 225 insertions(+), 139 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java index 90875a3..38e6e58 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java @@ -148,9 +148,11 @@ public class AlignedWritableMemChunk implements IWritableMemChunk { } for (int i = 0; i < measurementIdsInInsertPlan.size(); i++) { if (!containsMeasurement(measurementIdsInInsertPlan.get(i))) { - this.schema.addSubMeasurement(measurementIdsInInsertPlan.get(i), dataTypesInInsertPlan.get(i), encodingsInInsertPlan.get(i)); + this.schema.addSubMeasurement( + measurementIdsInInsertPlan.get(i), + dataTypesInInsertPlan.get(i), + encodingsInInsertPlan.get(i)); this.list.extendColumn(dataTypesInInsertPlan.get(i)); - } } return columnIndexArray; @@ -190,8 +192,7 @@ public class AlignedWritableMemChunk implements IWritableMemChunk { list.increaseReferenceCount(); List<Integer> columnIndexList = new ArrayList<>(); for (IMeasurementSchema measurementSchema : schemaList) { - columnIndexList.add( - schema.getSubMeasurementIndex(measurementSchema.getMeasurementId())); + columnIndexList.add(schema.getSubMeasurementIndex(measurementSchema.getMeasurementId())); } return list.getTvListByColumnIndex(columnIndexList); } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/AlignedReadOnlyMemChunk.java b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/AlignedReadOnlyMemChunk.java new file mode 100644 index 0000000..ddc1cc7 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/AlignedReadOnlyMemChunk.java @@ -0,0 +1,165 @@ +/* + * 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.db.engine.querycontext; + +import org.apache.iotdb.db.exception.query.QueryProcessException; +import org.apache.iotdb.db.query.reader.chunk.MemChunkLoader; +import org.apache.iotdb.db.utils.datastructure.AlignedTVList; +import org.apache.iotdb.db.utils.datastructure.TVList; +import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; +import org.apache.iotdb.tsfile.file.metadata.AlignedChunkMetadata; +import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata; +import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata; +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.TimeRange; +import org.apache.iotdb.tsfile.read.reader.IPointReader; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; +import org.apache.iotdb.tsfile.write.schema.VectorMeasurementSchema; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class AlignedReadOnlyMemChunk extends ReadOnlyMemChunk { + + // deletion list for this chunk + private final List<TimeRange> deletionList; + + private String measurementUid; + private TSDataType dataType; + private List<TSEncoding> encodingList; + + private static final Logger logger = LoggerFactory.getLogger(AlignedReadOnlyMemChunk.class); + + private int floatPrecision = TSFileDescriptor.getInstance().getConfig().getFloatPrecision(); + + private AlignedTVList chunkData; + + private int chunkDataSize; + + /** + * The constructor for Aligned type. + * + * @param schema VectorMeasurementSchema + * @param tvList VectorTvList + * @param size The Number of Chunk data points + * @param deletionList The timeRange of deletionList + */ + public AlignedReadOnlyMemChunk( + IMeasurementSchema schema, TVList tvList, int size, List<TimeRange> deletionList) + throws IOException, QueryProcessException { + super(); + this.measurementUid = schema.getMeasurementId(); + this.dataType = schema.getType(); + + this.encodingList = ((VectorMeasurementSchema) schema).getSubMeasurementsTSEncodingList(); + this.chunkData = (AlignedTVList) tvList; + this.chunkDataSize = size; + this.deletionList = deletionList; + + this.chunkPointReader = + (chunkData).getAlignedIterator(floatPrecision, encodingList, chunkDataSize, deletionList); + initAlignedChunkMeta((VectorMeasurementSchema) schema); + } + + private void initAlignedChunkMeta(VectorMeasurementSchema schema) + throws IOException, QueryProcessException { + AlignedTVList alignedChunkData = (AlignedTVList) chunkData; + List<String> measurementList = schema.getSubMeasurementsList(); + List<TSDataType> dataTypeList = schema.getSubMeasurementsTSDataTypeList(); + // time chunk + Statistics timeStatistics = Statistics.getStatsByType(TSDataType.VECTOR); + IChunkMetadata timeChunkMetadata = + new ChunkMetadata(measurementUid, TSDataType.VECTOR, 0, timeStatistics); + List<IChunkMetadata> valueChunkMetadataList = new ArrayList<>(); + // update time chunk + for (int row = 0; row < alignedChunkData.size(); row++) { + timeStatistics.update(alignedChunkData.getTime(row)); + } + timeStatistics.setEmpty(false); + // update value chunk + for (int column = 0; column < measurementList.size(); column++) { + Statistics valueStatistics = Statistics.getStatsByType(dataTypeList.get(column)); + IChunkMetadata valueChunkMetadata = + new ChunkMetadata( + measurementList.get(column), dataTypeList.get(column), 0, valueStatistics); + valueChunkMetadataList.add(valueChunkMetadata); + if (alignedChunkData.getValues().get(column) == null) { + valueStatistics.setEmpty(true); + continue; + } else { + valueStatistics.setEmpty(false); + } + for (int row = 0; row < alignedChunkData.size(); row++) { + long time = alignedChunkData.getTime(row); + int originRowIndex = alignedChunkData.getValueIndex(row); + boolean isNull = alignedChunkData.isValueMarked(originRowIndex, column); + if (isNull) { + continue; + } + switch (dataTypeList.get(column)) { + case BOOLEAN: + valueStatistics.update( + time, alignedChunkData.getBooleanByValueIndex(originRowIndex, column)); + break; + case TEXT: + valueStatistics.update( + time, alignedChunkData.getBinaryByValueIndex(originRowIndex, column)); + break; + case FLOAT: + valueStatistics.update( + time, alignedChunkData.getFloatByValueIndex(originRowIndex, column)); + break; + case INT32: + valueStatistics.update( + time, alignedChunkData.getIntByValueIndex(originRowIndex, column)); + break; + case INT64: + valueStatistics.update( + time, alignedChunkData.getLongByValueIndex(originRowIndex, column)); + break; + case DOUBLE: + valueStatistics.update( + time, alignedChunkData.getDoubleByValueIndex(originRowIndex, column)); + break; + default: + throw new QueryProcessException("Unsupported data type:" + dataType); + } + } + } + IChunkMetadata vectorChunkMetadata = + new AlignedChunkMetadata(timeChunkMetadata, valueChunkMetadataList); + vectorChunkMetadata.setChunkLoader(new MemChunkLoader(this)); + vectorChunkMetadata.setVersion(Long.MAX_VALUE); + cachedMetaData = vectorChunkMetadata; + } + + @Override + public IPointReader getPointReader() { + chunkPointReader = + chunkData.getAlignedIterator(floatPrecision, encodingList, chunkDataSize, deletionList); + return chunkPointReader; + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java index 26492a3..b24313f 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java @@ -23,7 +23,6 @@ import org.apache.iotdb.db.query.reader.chunk.MemChunkLoader; import org.apache.iotdb.db.utils.datastructure.TVList; import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; import org.apache.iotdb.tsfile.encoding.encoder.Encoder; -import org.apache.iotdb.tsfile.file.metadata.AlignedChunkMetadata; import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata; import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -32,14 +31,11 @@ import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics; import org.apache.iotdb.tsfile.read.TimeValuePair; import org.apache.iotdb.tsfile.read.common.TimeRange; import org.apache.iotdb.tsfile.read.reader.IPointReader; -import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; -import org.apache.iotdb.tsfile.write.schema.VectorMeasurementSchema; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -60,14 +56,18 @@ public class ReadOnlyMemChunk { private int floatPrecision = TSFileDescriptor.getInstance().getConfig().getFloatPrecision(); - private IChunkMetadata cachedMetaData; + protected IChunkMetadata cachedMetaData; private TVList chunkData; - private IPointReader chunkPointReader; + protected IPointReader chunkPointReader; private int chunkDataSize; + public ReadOnlyMemChunk() { + this.deletionList = null; + } + public ReadOnlyMemChunk( String measurementUid, TSDataType dataType, @@ -144,106 +144,6 @@ public class ReadOnlyMemChunk { cachedMetaData = metaData; } - /** - * The constructor for Aligned type. - * - * @param schema VectorMeasurementSchema - * @param tvList VectorTvList - * @param size The Number of Chunk data points - * @param deletionList The timeRange of deletionList - */ - public ReadOnlyMemChunk( - IMeasurementSchema schema, TVList tvList, int size, List<TimeRange> deletionList) - throws IOException, QueryProcessException { - this.measurementUid = schema.getMeasurementId(); - this.dataType = schema.getType(); - - this.chunkData = tvList; - this.chunkDataSize = size; - this.deletionList = deletionList; - - this.chunkPointReader = - tvList.getIterator(floatPrecision, encoding, chunkDataSize, deletionList); - initAlignedChunkMeta((VectorMeasurementSchema) schema); - } - - @SuppressWarnings("squid:S3776") // high Cognitive Complexity - private void initAlignedChunkMeta(VectorMeasurementSchema schema) - throws IOException, QueryProcessException { - Statistics timeStatistics = Statistics.getStatsByType(TSDataType.VECTOR); - IChunkMetadata timeChunkMetadata = - new ChunkMetadata(measurementUid, TSDataType.VECTOR, 0, timeStatistics); - List<IChunkMetadata> valueChunkMetadataList = new ArrayList<>(); - Statistics[] valueStatistics = new Statistics[schema.getSubMeasurementsTSDataTypeList().size()]; - for (int i = 0; i < schema.getSubMeasurementsTSDataTypeList().size(); i++) { - valueStatistics[i] = - Statistics.getStatsByType(schema.getSubMeasurementsTSDataTypeList().get(i)); - IChunkMetadata valueChunkMetadata = - new ChunkMetadata( - schema.getSubMeasurementsList().get(i), - schema.getSubMeasurementsTSDataTypeList().get(i), - 0, - valueStatistics[i]); - valueChunkMetadataList.add(valueChunkMetadata); - } - if (!isEmpty()) { - IPointReader iterator = - chunkData.getIterator(floatPrecision, encoding, chunkDataSize, deletionList); - while (iterator.hasNextTimeValuePair()) { - TimeValuePair timeValuePair = iterator.nextTimeValuePair(); - timeStatistics.update(timeValuePair.getTimestamp()); - updateValueStatistics(schema, valueStatistics, timeValuePair); - } - } - timeStatistics.setEmpty(isEmpty()); - for (Statistics valueStatistic : valueStatistics) { - valueStatistic.setEmpty(isEmpty()); - } - IChunkMetadata vectorChunkMetadata = - new AlignedChunkMetadata(timeChunkMetadata, valueChunkMetadataList); - vectorChunkMetadata.setChunkLoader(new MemChunkLoader(this)); - vectorChunkMetadata.setVersion(Long.MAX_VALUE); - cachedMetaData = vectorChunkMetadata; - } - - private void updateValueStatistics( - IMeasurementSchema schema, Statistics[] valueStatistics, TimeValuePair timeValuePair) - throws QueryProcessException { - for (int i = 0; i < schema.getSubMeasurementsTSDataTypeList().size(); i++) { - if (timeValuePair.getValue().getVector() == null || timeValuePair.getValue().getVector()[i] == null) { - continue; - } - switch (schema.getSubMeasurementsTSDataTypeList().get(i)) { - case BOOLEAN: - valueStatistics[i].update( - timeValuePair.getTimestamp(), timeValuePair.getValue().getVector()[i].getBoolean()); - break; - case TEXT: - valueStatistics[i].update( - timeValuePair.getTimestamp(), timeValuePair.getValue().getVector()[i].getBinary()); - break; - case FLOAT: - valueStatistics[i].update( - timeValuePair.getTimestamp(), timeValuePair.getValue().getVector()[i].getFloat()); - break; - case INT32: - valueStatistics[i].update( - timeValuePair.getTimestamp(), timeValuePair.getValue().getVector()[i].getInt()); - break; - case INT64: - valueStatistics[i].update( - timeValuePair.getTimestamp(), timeValuePair.getValue().getVector()[i].getLong()); - break; - case DOUBLE: - valueStatistics[i].update( - timeValuePair.getTimestamp(), timeValuePair.getValue().getVector()[i].getDouble()); - break; - default: - throw new QueryProcessException("Unsupported data type:" + dataType); - } - } - } - public TSDataType getDataType() { return dataType; } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java index 80fb3c3..ef9fb4a 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java @@ -406,7 +406,8 @@ public class TsFileProcessor { continue; } // extending the column of aligned mem chunk - if (vectorMemChunk != null && !vectorMemChunk.containsMeasurement(insertRowPlan.getMeasurements()[i])) { + if (vectorMemChunk != null + && !vectorMemChunk.containsMeasurement(insertRowPlan.getMeasurements()[i])) { memTableIncrement += (vectorMemChunk.alignedListSize() / PrimitiveArrayManager.ARRAY_SIZE + 1) * insertRowPlan.getDataTypes()[i].getDataTypeSize(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java b/server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java index 5a0a68e..bf34e4c 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java @@ -21,6 +21,7 @@ package org.apache.iotdb.db.metadata.path; import org.apache.iotdb.db.engine.memtable.AlignedWritableMemChunk; import org.apache.iotdb.db.engine.memtable.IWritableMemChunk; +import org.apache.iotdb.db.engine.querycontext.AlignedReadOnlyMemChunk; import org.apache.iotdb.db.engine.querycontext.QueryDataSource; import org.apache.iotdb.db.engine.querycontext.ReadOnlyMemChunk; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; @@ -347,8 +348,9 @@ public class AlignedPath extends PartialPath { return null; } // get sorted tv list is synchronized so different query can get right sorted list reference - TVList vectorTvListCopy = alignedMemChunk.getSortedTvListForQuery(schemaList); - int curSize = vectorTvListCopy.size(); - return new ReadOnlyMemChunk(getMeasurementSchema(), vectorTvListCopy, curSize, deletionList); + TVList alignedTvListCopy = alignedMemChunk.getSortedTvListForQuery(schemaList); + int curSize = alignedTvListCopy.size(); + return new AlignedReadOnlyMemChunk( + getMeasurementSchema(), alignedTvListCopy, curSize, deletionList); } } diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java index f2a5d76..c82ab5b 100644 --- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java +++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java @@ -127,22 +127,30 @@ public class AlignedTVList extends TVList { @Override public Object getAlignedValue(int index) { - return getAlignedValue(index, null, null); + return getAlignedValueForQuery(index, null, null); } @Override - public Object getAlignedValue(int index, Integer floatPrecision, TSEncoding encoding) { + protected TimeValuePair getTimeValuePair( + int index, long time, Integer floatPrecision, TSEncoding encoding) { + throw new UnsupportedOperationException(ERR_DATATYPE_NOT_CONSISTENT); + } + + private Object getAlignedValueForQuery( + int index, Integer floatPrecision, List<TSEncoding> encodingList) { if (index >= size) { throw new ArrayIndexOutOfBoundsException(index); } int arrayIndex = index / ARRAY_SIZE; int elementIndex = index % ARRAY_SIZE; int valueIndex = indices.get(arrayIndex)[elementIndex]; - return getAlignedValueByValueIndex(valueIndex, null, floatPrecision, encoding); + return getAlignedValueByValueIndex(valueIndex, null, floatPrecision, encodingList); } public TsPrimitiveType getAlignedValue( - List<Integer> timeDuplicatedIndexList, Integer floatPrecision, TSEncoding encoding) { + List<Integer> timeDuplicatedIndexList, + Integer floatPrecision, + List<TSEncoding> encodingList) { int[] validIndexesForTimeDuplicatedRows = new int[values.size()]; for (int i = 0; i < values.size(); i++) { validIndexesForTimeDuplicatedRows[i] = @@ -152,14 +160,14 @@ public class AlignedTVList extends TVList { timeDuplicatedIndexList.get(timeDuplicatedIndexList.size() - 1), validIndexesForTimeDuplicatedRows, floatPrecision, - encoding); + encodingList); } private TsPrimitiveType getAlignedValueByValueIndex( int valueIndex, int[] validIndexesForTimeDuplicatedRows, Integer floatPrecision, - TSEncoding encoding) { + List<TSEncoding> encodingList) { if (valueIndex >= size) { throw new ArrayIndexOutOfBoundsException(valueIndex); } @@ -170,8 +178,8 @@ public class AlignedTVList extends TVList { List<Object> columnValues = values.get(columnIndex); if (columnValues == null || bitMaps != null - && bitMaps.get(columnIndex) != null - && isValueMarked(valueIndex, columnIndex)) { + && bitMaps.get(columnIndex) != null + && isValueMarked(valueIndex, columnIndex)) { continue; } if (validIndexesForTimeDuplicatedRows != null) { @@ -186,9 +194,10 @@ public class AlignedTVList extends TVList { case FLOAT: float valueF = ((float[]) columnValues.get(arrayIndex))[elementIndex]; if (floatPrecision != null - && encoding != null + && encodingList != null && !Float.isNaN(valueF) - && (encoding == TSEncoding.RLE || encoding == TSEncoding.TS_2DIFF)) { + && (encodingList.get(columnIndex) == TSEncoding.RLE + || encodingList.get(columnIndex) == TSEncoding.TS_2DIFF)) { valueF = MathUtils.roundWithGivenPrecision(valueF, floatPrecision); } vector[columnIndex] = TsPrimitiveType.getByType(TSDataType.FLOAT, valueF); @@ -204,9 +213,10 @@ public class AlignedTVList extends TVList { case DOUBLE: double valueD = ((double[]) columnValues.get(arrayIndex))[elementIndex]; if (floatPrecision != null - && encoding != null + && encodingList != null && !Double.isNaN(valueD) - && (encoding == TSEncoding.RLE || encoding == TSEncoding.TS_2DIFF)) { + && (encodingList.get(columnIndex) == TSEncoding.RLE + || encodingList.get(columnIndex) == TSEncoding.TS_2DIFF)) { valueD = MathUtils.roundWithGivenPrecision(valueD, floatPrecision); } vector[columnIndex] = TsPrimitiveType.getByType(TSDataType.DOUBLE, valueD); @@ -672,20 +682,19 @@ public class AlignedTVList extends TVList { @Override public TimeValuePair getTimeValuePair(int index) { - return new TimeValuePair(getTime(index), (TsPrimitiveType) getAlignedValue(index, null, null)); + return new TimeValuePair( + getTime(index), (TsPrimitiveType) getAlignedValueForQuery(index, null, null)); } - @Override protected TimeValuePair getTimeValuePair( - int index, long time, Integer floatPrecision, TSEncoding encoding) { + int index, long time, Integer floatPrecision, List<TSEncoding> encodingList) { return new TimeValuePair( - time, (TsPrimitiveType) getAlignedValue(index, floatPrecision, encoding)); + time, (TsPrimitiveType) getAlignedValueForQuery(index, floatPrecision, encodingList)); } - @Override public TimeValuePair getTimeValuePairForTimeDuplicatedRows( - List<Integer> indexList, long time, Integer floatPrecision, TSEncoding encoding) { - return new TimeValuePair(time, getAlignedValue(indexList, floatPrecision, encoding)); + List<Integer> indexList, long time, Integer floatPrecision, List<TSEncoding> encodingList) { + return new TimeValuePair(time, getAlignedValue(indexList, floatPrecision, encodingList)); } @Override @@ -865,18 +874,26 @@ public class AlignedTVList extends TVList { @Override public IPointReader getIterator( int floatPrecision, TSEncoding encoding, int size, List<TimeRange> deletionList) { - return new AlignedIte(floatPrecision, encoding, size, deletionList); + throw new UnsupportedOperationException(ERR_DATATYPE_NOT_CONSISTENT); + } + + public IPointReader getAlignedIterator( + int floatPrecision, List<TSEncoding> encodingList, int size, List<TimeRange> deletionList) { + return new AlignedIte(floatPrecision, encodingList, size, deletionList); } private class AlignedIte extends Ite { + private List<TSEncoding> encodingList; + public AlignedIte() { super(); } public AlignedIte( - int floatPrecision, TSEncoding encoding, int size, List<TimeRange> deletionList) { - super(floatPrecision, encoding, size, deletionList); + int floatPrecision, List<TSEncoding> encodingList, int size, List<TimeRange> deletionList) { + super(floatPrecision, null, size, deletionList); + this.encodingList = encodingList; } @Override @@ -901,10 +918,10 @@ public class AlignedTVList extends TVList { if (timeDuplicatedAlignedRowIndexList != null) { tvPair = getTimeValuePairForTimeDuplicatedRows( - timeDuplicatedAlignedRowIndexList, time, floatPrecision, encoding); + timeDuplicatedAlignedRowIndexList, time, floatPrecision, encodingList); timeDuplicatedAlignedRowIndexList = null; } else { - tvPair = getTimeValuePair(cur, time, floatPrecision, encoding); + tvPair = getTimeValuePair(cur, time, floatPrecision, encodingList); } cur++; if (tvPair.getValue() != null) { diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java index 8f1536b..2d895c4 100644 --- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java +++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java @@ -530,7 +530,7 @@ public abstract class TVList { protected boolean hasCachedPair; protected int cur; protected Integer floatPrecision; - protected TSEncoding encoding; + private TSEncoding encoding; private int deleteCursor = 0; /** * because TV list may be share with different query, each iterator has to record it's own size
