You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2021/04/23 14:57:25 UTC
[iotdb] branch query_vector_bug created (now 7dba08a)
This is an automated email from the ASF dual-hosted git repository.
haonan pushed a change to branch query_vector_bug
in repository https://gitbox.apache.org/repos/asf/iotdb.git.
at 7dba08a fix query one sensor in a vector from memtable
This branch includes the following new commits:
new 7dba08a fix query one sensor in a vector from memtable
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[iotdb] 01/01: fix query one sensor in a vector from memtable
Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch query_vector_bug
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 7dba08a8b01cc059dcaf6936cb5ecf6b1642edbb
Author: HTHou <hh...@outlook.com>
AuthorDate: Fri Apr 23 22:56:09 2021 +0800
fix query one sensor in a vector from memtable
---
.../iotdb/db/engine/memtable/AbstractMemTable.java | 11 ---
.../db/engine/querycontext/ReadOnlyMemChunk.java | 109 ++++++++++++++-------
.../tsfile/file/metadata/VectorChunkMetadata.java | 4 +-
3 files changed, 77 insertions(+), 47 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
index 57e0e51..0eb04c8 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
@@ -315,17 +315,6 @@ public abstract class AbstractMemTable implements IMemTable {
// get sorted tv list is synchronized so different query can get right sorted list reference
TVList vectorTvListCopy = vectorMemChunk.getSortedTvListForQuery(columns);
int curSize = vectorTvListCopy.size();
- // return normal ReadOnlyMemChunk for query one measurement in vector
- if (columns.size() == 1) {
- return new ReadOnlyMemChunk(
- measurementIdList.get(0),
- partialVectorSchema.getValueTSDataTypeList().get(0),
- partialVectorSchema.getValueTSEncodingList().get(0),
- vectorTvListCopy,
- null,
- curSize,
- deletionList);
- }
return new ReadOnlyMemChunk(partialVectorSchema, vectorTvListCopy, curSize, deletionList);
} else {
if (!checkPath(deviceId, measurement)) {
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 883fc00..d3b5029 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
@@ -186,41 +186,10 @@ public class ReadOnlyMemChunk {
while (iterator.hasNextTimeValuePair()) {
TimeValuePair timeValuePair = iterator.nextTimeValuePair();
timeStatistics.update(timeValuePair.getTimestamp());
- for (int i = 0; i < schema.getValueTSDataTypeList().size(); i++) {
- if (timeValuePair.getValue().getVector()[i] == null) {
- continue;
- }
- switch (schema.getValueTSDataTypeList().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);
- }
+ if (schema.getValueTSDataTypeList().size() == 1) {
+ updateValueStatisticsForSingleColumn(schema, valueStatistics, timeValuePair);
+ } else {
+ updateValueStatistics(schema, valueStatistics, timeValuePair);
}
}
}
@@ -235,6 +204,76 @@ public class ReadOnlyMemChunk {
cachedMetaData = vectorChunkMetadata;
}
+ // When query one measurement in a Vector, the timeValuePair is not a vector type
+ private void updateValueStatisticsForSingleColumn(
+ IMeasurementSchema schema, Statistics[] valueStatistics, TimeValuePair timeValuePair)
+ throws QueryProcessException {
+ switch (schema.getValueTSDataTypeList().get(0)) {
+ case BOOLEAN:
+ valueStatistics[0].update(
+ timeValuePair.getTimestamp(), timeValuePair.getValue().getBoolean());
+ break;
+ case TEXT:
+ valueStatistics[0].update(
+ timeValuePair.getTimestamp(), timeValuePair.getValue().getBinary());
+ break;
+ case FLOAT:
+ valueStatistics[0].update(
+ timeValuePair.getTimestamp(), timeValuePair.getValue().getFloat());
+ break;
+ case INT32:
+ valueStatistics[0].update(timeValuePair.getTimestamp(), timeValuePair.getValue().getInt());
+ break;
+ case INT64:
+ valueStatistics[0].update(timeValuePair.getTimestamp(), timeValuePair.getValue().getLong());
+ break;
+ case DOUBLE:
+ valueStatistics[0].update(
+ timeValuePair.getTimestamp(), timeValuePair.getValue().getDouble());
+ break;
+ default:
+ throw new QueryProcessException("Unsupported data type:" + dataType);
+ }
+ }
+
+ private void updateValueStatistics(
+ IMeasurementSchema schema, Statistics[] valueStatistics, TimeValuePair timeValuePair)
+ throws QueryProcessException {
+ for (int i = 0; i < schema.getValueTSDataTypeList().size(); i++) {
+ if (timeValuePair.getValue().getVector()[i] == null) {
+ continue;
+ }
+ switch (schema.getValueTSDataTypeList().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/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
index d576180..5766801 100644
--- 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
@@ -128,7 +128,9 @@ public class VectorChunkMetadata implements IChunkMetadata {
@Override
public TSDataType getDataType() {
- return timeChunkMetadata.getDataType();
+ return valueChunkMetadataList.size() == 1
+ ? valueChunkMetadataList.get(0).getDataType()
+ : timeChunkMetadata.getDataType();
}
@Override