This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/tsfile.git
The following commit(s) were added to refs/heads/develop by this push:
new 128d3918 Fix losing first page and missing time column in result set
metadata (#420)
128d3918 is described below
commit 128d391801d292051fa5333c652ef76452a39d71
Author: Jiang Tian <[email protected]>
AuthorDate: Mon Mar 3 09:31:06 2025 +0800
Fix losing first page and missing time column in result set metadata (#420)
* Fix losing first page and missing time column in result set metadata
* add test
---
cpp/examples/c_examples/demo_read.c | 2 +-
cpp/examples/c_examples/demo_write.c | 6 +-
cpp/examples/cpp_examples/demo_read.cpp | 5 +-
cpp/src/common/tablet.cc | 2 +-
cpp/src/cwrapper/tsfile_cwrapper.cc | 12 +-
cpp/src/reader/result_set.h | 18 ++-
cpp/src/reader/table_result_set.cc | 5 +-
cpp/src/writer/chunk_writer.cc | 11 +-
cpp/src/writer/chunk_writer.h | 8 +-
cpp/src/writer/time_chunk_writer.cc | 11 +-
cpp/src/writer/time_chunk_writer.h | 8 +-
cpp/src/writer/value_chunk_writer.cc | 11 +-
cpp/src/writer/value_chunk_writer.h | 8 +-
.../reader/table_view/tsfile_reader_table_test.cc | 132 +++++++++++----------
cpp/test/reader/tsfile_reader_test.cc | 6 +-
15 files changed, 146 insertions(+), 99 deletions(-)
diff --git a/cpp/examples/c_examples/demo_read.c
b/cpp/examples/c_examples/demo_read.c
index 1636adbd..8e4e7acf 100644
--- a/cpp/examples/c_examples/demo_read.c
+++ b/cpp/examples/c_examples/demo_read.c
@@ -56,7 +56,7 @@ ERRNO read_tsfile() {
Timestamp timestamp =
tsfile_result_set_get_value_by_index_int64_t(ret, 1);
printf("%ld ", timestamp);
- for (int i = 1; i < column_num; i++) {
+ for (int i = 1; i <= column_num; i++) {
if (tsfile_result_set_is_null_by_index(ret, i)) {
printf(" null ");
} else {
diff --git a/cpp/examples/c_examples/demo_write.c
b/cpp/examples/c_examples/demo_write.c
index 78c134dc..fffe3f18 100644
--- a/cpp/examples/c_examples/demo_write.c
+++ b/cpp/examples/c_examples/demo_write.c
@@ -36,19 +36,19 @@ ERRNO write_tsfile() {
table_schema.column_schemas =
(ColumnSchema*)malloc(sizeof(ColumnSchema) * 3);
table_schema.column_schemas[0] =
- ColumnSchema{.column_name = strdup("id1"),
+ (ColumnSchema){.column_name = strdup("id1"),
.data_type = TS_DATATYPE_STRING,
.compression = TS_COMPRESSION_UNCOMPRESSED,
.encoding = TS_ENCODING_PLAIN,
.column_category = TAG};
table_schema.column_schemas[1] =
- ColumnSchema{.column_name = strdup("id2"),
+ (ColumnSchema){.column_name = strdup("id2"),
.data_type = TS_DATATYPE_STRING,
.compression = TS_COMPRESSION_UNCOMPRESSED,
.encoding = TS_ENCODING_PLAIN,
.column_category = TAG};
table_schema.column_schemas[2] =
- ColumnSchema{.column_name = strdup("s1"),
+ (ColumnSchema){.column_name = strdup("s1"),
.data_type = TS_DATATYPE_INT32,
.compression = TS_COMPRESSION_UNCOMPRESSED,
.encoding = TS_ENCODING_PLAIN,
diff --git a/cpp/examples/cpp_examples/demo_read.cpp
b/cpp/examples/cpp_examples/demo_read.cpp
index 4961fb04..4951e8ca 100644
--- a/cpp/examples/cpp_examples/demo_read.cpp
+++ b/cpp/examples/cpp_examples/demo_read.cpp
@@ -51,7 +51,7 @@ int demo_read() {
// Metadata in query handler.
auto metadata = ret->get_metadata();
int column_num = metadata->get_column_count();
- for (int i = 0; i < column_num; i++) {
+ for (int i = 1; i <= column_num; i++) {
std::cout << "column name: " << metadata->get_column_name(i)
<< std::endl;
std::cout << "column type: " << metadata->get_column_type(i)
@@ -63,7 +63,7 @@ int demo_read() {
while ((code = ret->next(has_next)) == common::E_OK && has_next) {
// Timestamp at column 1 and column index begin from 1.
Timestamp timestamp = ret->get_value<Timestamp>(1);
- for (int i = 0; i < column_num; i++) {
+ for (int i = 1; i <= column_num; i++) {
if (ret->is_null(i)) {
std::cout << "null" << std::endl;
} else {
@@ -98,4 +98,5 @@ int demo_read() {
// Close reader.
reader.close();
+ return 0;
}
diff --git a/cpp/src/common/tablet.cc b/cpp/src/common/tablet.cc
index 54f39df5..1a995b43 100644
--- a/cpp/src/common/tablet.cc
+++ b/cpp/src/common/tablet.cc
@@ -275,7 +275,7 @@ template<>
int Tablet::add_value(uint32_t row_index,
const std::string &measurement_name,
const char *val) {
- add_value(row_index, measurement_name, String(val));
+ return add_value(row_index, measurement_name, String(val));
}
template int Tablet::add_value(uint32_t row_index, uint32_t schema_index,
diff --git a/cpp/src/cwrapper/tsfile_cwrapper.cc
b/cpp/src/cwrapper/tsfile_cwrapper.cc
index dbd85b52..ea6d998f 100644
--- a/cpp/src/cwrapper/tsfile_cwrapper.cc
+++ b/cpp/src/cwrapper/tsfile_cwrapper.cc
@@ -422,27 +422,27 @@ ResultSetMetaData
tsfile_result_set_get_metadata(ResultSet result_set) {
malloc(meta_data.column_num * sizeof(TSDataType)));
for (int i = 0; i < meta_data.column_num; i++) {
meta_data.column_names[i] =
- strdup(result_set_metadata->get_column_name(i).c_str());
+ strdup(result_set_metadata->get_column_name(i + 1).c_str());
meta_data.data_types[i] =
- static_cast<TSDataType>(result_set_metadata->get_column_type(i));
+ static_cast<TSDataType>(result_set_metadata->get_column_type(i +
1));
}
return meta_data;
}
char *tsfile_result_set_metadata_get_column_name(ResultSetMetaData result_set,
uint32_t column_index) {
- if (column_index >= result_set.column_num) {
+ if (column_index > result_set.column_num) {
return nullptr;
}
- return result_set.column_names[column_index];
+ return result_set.column_names[column_index - 1];
}
TSDataType tsfile_result_set_metadata_get_data_type(
ResultSetMetaData result_set, uint32_t column_index) {
- if (column_index >= result_set.column_num) {
+ if (column_index > result_set.column_num) {
return TS_DATATYPE_INVALID;
}
- return result_set.data_types[column_index];
+ return result_set.data_types[column_index - 1];
}
int tsfile_result_set_metadata_get_column_num(ResultSetMetaData result_set) {
diff --git a/cpp/src/reader/result_set.h b/cpp/src/reader/result_set.h
index 309af2ce..6f65acb7 100644
--- a/cpp/src/reader/result_set.h
+++ b/cpp/src/reader/result_set.h
@@ -29,15 +29,21 @@ namespace storage {
class ResultSetMetadata {
public:
ResultSetMetadata(const std::vector<std::string>& column_names,
- const std::vector<common::TSDataType>& column_types)
- : column_names_(column_names), column_types_(column_types) {}
+ const std::vector<common::TSDataType>& column_types) {
+ this->column_names_.emplace_back("time");
+ this->column_types_.emplace_back(common::INT64);
+ for (size_t i = 0; i < column_names.size(); ++i) {
+ this->column_names_.emplace_back(column_names[i]);
+ this->column_types_.emplace_back(column_types[i]);
+ }
+ }
common::TSDataType get_column_type(uint32_t column_index) {
- ASSERT(column_index >= 0 && column_index < column_types_.size());
- return column_types_[column_index];
+ ASSERT(column_index >= 1 && column_index <= column_types_.size());
+ return column_types_[column_index - 1];
}
std::string get_column_name(uint32_t column_index) {
- ASSERT(column_index >= 0 && column_index < column_names_.size());
- return column_names_[column_index];
+ ASSERT(column_index >= 1 && column_index <= column_names_.size());
+ return column_names_[column_index - 1];
}
uint32_t get_column_count() { return column_names_.size(); }
diff --git a/cpp/src/reader/table_result_set.cc
b/cpp/src/reader/table_result_set.cc
index 6cf6d7e3..f520a37d 100644
--- a/cpp/src/reader/table_result_set.cc
+++ b/cpp/src/reader/table_result_set.cc
@@ -72,12 +72,13 @@ bool TableResultSet::is_null(const std::string&
column_name) {
if (iter == index_lookup_.end()) {
return true;
} else {
- return is_null(iter->second);
+ return is_null(iter->second + 1);
}
}
bool TableResultSet::is_null(uint32_t column_index) {
- return row_record_->get_field(column_index) == nullptr;
+ ASSERT(1 <= column_index && column_index <= row_record_->get_col_num());
+ return row_record_->get_field(column_index - 1) == nullptr;
}
RowRecord* TableResultSet::get_row_record() {
diff --git a/cpp/src/writer/chunk_writer.cc b/cpp/src/writer/chunk_writer.cc
index ec2f98b7..888692fb 100644
--- a/cpp/src/writer/chunk_writer.cc
+++ b/cpp/src/writer/chunk_writer.cc
@@ -127,9 +127,9 @@ void ChunkWriter::save_first_page_data(PageWriter
&first_page_writer) {
first_page_statistic_->deep_copy_from(first_page_writer.get_statistic());
}
-int ChunkWriter::write_first_page_data(ByteStream &pages_data) {
+int ChunkWriter::write_first_page_data(ByteStream &pages_data, bool
with_statistic) {
int ret = E_OK;
- if (RET_FAIL(first_page_statistic_->serialize_to(pages_data))) {
+ if (with_statistic &&
RET_FAIL(first_page_statistic_->serialize_to(pages_data))) {
} else if (RET_FAIL(
pages_data.write_buf(first_page_data_.compressed_buf_,
first_page_data_.compressed_size_))) {
@@ -145,6 +145,13 @@ int ChunkWriter::end_encode_chunk() {
chunk_header_.data_size_ = chunk_data_.total_size();
chunk_header_.num_of_pages_ = num_of_pages_;
}
+ } else if (first_page_statistic_ != nullptr) {
+ ret = write_first_page_data(chunk_data_, false);
+ if (E_OK == ret) {
+ free_first_writer_data();
+ chunk_header_.data_size_ = chunk_data_.total_size();
+ chunk_header_.num_of_pages_ = num_of_pages_;
+ }
}
#if DEBUG_SE
std::cout << "end_encode_chunk: num_of_pages_=" << num_of_pages_
diff --git a/cpp/src/writer/chunk_writer.h b/cpp/src/writer/chunk_writer.h
index b0f1136b..6d80353f 100644
--- a/cpp/src/writer/chunk_writer.h
+++ b/cpp/src/writer/chunk_writer.h
@@ -119,12 +119,14 @@ class ChunkWriter {
FORCE_INLINE void free_first_writer_data() {
// free memory
first_page_data_.destroy();
- StatisticFactory::free(first_page_statistic_);
- first_page_statistic_ = nullptr;
+ if (first_page_statistic_ != nullptr) {
+ StatisticFactory::free(first_page_statistic_);
+ first_page_statistic_ = nullptr;
+ }
}
int seal_cur_page(bool end_chunk);
void save_first_page_data(PageWriter &first_page_writer);
- int write_first_page_data(common::ByteStream &pages_data);
+ int write_first_page_data(common::ByteStream &pages_data, bool
with_statistic = true);
private:
common::TSDataType data_type_;
diff --git a/cpp/src/writer/time_chunk_writer.cc
b/cpp/src/writer/time_chunk_writer.cc
index 565fbd3b..b65b856b 100644
--- a/cpp/src/writer/time_chunk_writer.cc
+++ b/cpp/src/writer/time_chunk_writer.cc
@@ -130,9 +130,9 @@ void TimeChunkWriter::save_first_page_data(TimePageWriter
&first_page_writer) {
first_page_statistic_->deep_copy_from(first_page_writer.get_statistic());
}
-int TimeChunkWriter::write_first_page_data(ByteStream &pages_data) {
+int TimeChunkWriter::write_first_page_data(ByteStream &pages_data, bool
with_statistic) {
int ret = E_OK;
- if (RET_FAIL(first_page_statistic_->serialize_to(pages_data))) {
+ if (with_statistic &&
RET_FAIL(first_page_statistic_->serialize_to(pages_data))) {
} else if (RET_FAIL(
pages_data.write_buf(first_page_data_.compressed_buf_,
first_page_data_.compressed_size_))) {
@@ -148,6 +148,13 @@ int TimeChunkWriter::end_encode_chunk() {
chunk_header_.data_size_ = chunk_data_.total_size();
chunk_header_.num_of_pages_ = num_of_pages_;
}
+ } else if (first_page_statistic_ != nullptr) {
+ ret = write_first_page_data(chunk_data_, false);
+ if (E_OK == ret) {
+ free_first_writer_data();
+ chunk_header_.data_size_ = chunk_data_.total_size();
+ chunk_header_.num_of_pages_ = num_of_pages_;
+ }
}
#if DEBUG_SE
std::cout << "end_encode_time_chunk: num_of_pages_=" << num_of_pages_
diff --git a/cpp/src/writer/time_chunk_writer.h
b/cpp/src/writer/time_chunk_writer.h
index 672a0fcf..d97a8aa9 100644
--- a/cpp/src/writer/time_chunk_writer.h
+++ b/cpp/src/writer/time_chunk_writer.h
@@ -84,12 +84,14 @@ class TimeChunkWriter {
FORCE_INLINE void free_first_writer_data() {
// free memory
first_page_data_.destroy();
- StatisticFactory::free(first_page_statistic_);
- first_page_statistic_ = nullptr;
+ if (first_page_statistic_ != nullptr) {
+ StatisticFactory::free(first_page_statistic_);
+ first_page_statistic_ = nullptr;
+ }
}
int seal_cur_page(bool end_chunk);
void save_first_page_data(TimePageWriter &first_time_page_writer);
- int write_first_page_data(common::ByteStream &pages_data);
+ int write_first_page_data(common::ByteStream &pages_data, bool
with_statistic = true);
private:
TimePageWriter time_page_writer_;
diff --git a/cpp/src/writer/value_chunk_writer.cc
b/cpp/src/writer/value_chunk_writer.cc
index 5cbdf7e0..6c23cdad 100644
--- a/cpp/src/writer/value_chunk_writer.cc
+++ b/cpp/src/writer/value_chunk_writer.cc
@@ -132,9 +132,9 @@ void ValueChunkWriter::save_first_page_data(
first_page_statistic_->deep_copy_from(first_page_writer.get_statistic());
}
-int ValueChunkWriter::write_first_page_data(ByteStream &pages_data) {
+int ValueChunkWriter::write_first_page_data(ByteStream &pages_data, bool
with_statistic) {
int ret = E_OK;
- if (RET_FAIL(first_page_statistic_->serialize_to(pages_data))) {
+ if (with_statistic &&
RET_FAIL(first_page_statistic_->serialize_to(pages_data))) {
} else if (RET_FAIL(
pages_data.write_buf(first_page_data_.compressed_buf_,
first_page_data_.compressed_size_))) {
@@ -150,6 +150,13 @@ int ValueChunkWriter::end_encode_chunk() {
chunk_header_.data_size_ = chunk_data_.total_size();
chunk_header_.num_of_pages_ = num_of_pages_;
}
+ } else if (first_page_statistic_ != nullptr) {
+ ret = write_first_page_data(chunk_data_, false);
+ if (E_OK == ret) {
+ free_first_writer_data();
+ chunk_header_.data_size_ = chunk_data_.total_size();
+ chunk_header_.num_of_pages_ = num_of_pages_;
+ }
}
#if DEBUG_SE
std::cout << "end_encode_chunk: num_of_pages_=" << num_of_pages_
diff --git a/cpp/src/writer/value_chunk_writer.h
b/cpp/src/writer/value_chunk_writer.h
index 47c1c650..52581a34 100644
--- a/cpp/src/writer/value_chunk_writer.h
+++ b/cpp/src/writer/value_chunk_writer.h
@@ -105,12 +105,14 @@ class ValueChunkWriter {
}
FORCE_INLINE void free_first_writer_data() {
first_page_data_.destroy();
- StatisticFactory::free(first_page_statistic_);
- first_page_statistic_ = nullptr;
+ if (first_page_statistic_ != nullptr) {
+ StatisticFactory::free(first_page_statistic_);
+ first_page_statistic_ = nullptr;
+ }
}
int seal_cur_page(bool end_chunk);
void save_first_page_data(ValuePageWriter &first_page_writer);
- int write_first_page_data(common::ByteStream &pages_data);
+ int write_first_page_data(common::ByteStream &pages_data, bool
with_statistic = true);
private:
common::TSDataType data_type_;
diff --git a/cpp/test/reader/table_view/tsfile_reader_table_test.cc
b/cpp/test/reader/table_view/tsfile_reader_table_test.cc
index f28fdc16..c633b405 100644
--- a/cpp/test/reader/table_view/tsfile_reader_table_test.cc
+++ b/cpp/test/reader/table_view/tsfile_reader_table_test.cc
@@ -97,13 +97,13 @@ class TsFileTableReaderTest : public ::testing::Test {
}
static storage::Tablet gen_tablet(TableSchema* table_schema, int offset,
- int device_num) {
+ int device_num,
+ int num_timestamp_per_device = 10) {
storage::Tablet tablet(table_schema->get_table_name(),
table_schema->get_measurement_names(),
table_schema->get_data_types(),
table_schema->get_column_categories());
- int num_timestamp_per_device = 10;
char* literal = new char[std::strlen("device_id") + 1];
std::strcpy(literal, "device_id");
String literal_str(literal, std::strlen("device_id"));
@@ -133,65 +133,72 @@ class TsFileTableReaderTest : public ::testing::Test {
delete[] literal;
return tablet;
}
-};
-TEST_F(TsFileTableReaderTest, TableModelQuery) {
- auto table_schema = gen_table_schema(0);
- auto tsfile_table_writer_ =
- std::make_shared<TsFileTableWriter>(&write_file_, table_schema);
- auto tablet = gen_tablet(table_schema, 0, 1);
- ASSERT_EQ(tsfile_table_writer_->write_table(tablet), common::E_OK);
- ASSERT_EQ(tsfile_table_writer_->flush(), common::E_OK);
- ASSERT_EQ(tsfile_table_writer_->close(), common::E_OK);
- storage::TsFileReader reader;
- int ret = reader.open(file_name_);
- ASSERT_EQ(ret, common::E_OK);
+ void test_table_model_query(uint32_t points_per_device = 10) {
+ auto table_schema = gen_table_schema(0);
+ auto tsfile_table_writer_ =
+ std::make_shared<TsFileTableWriter>(&write_file_, table_schema);
+ auto tablet = gen_tablet(table_schema, 0, 1, points_per_device);
+ ASSERT_EQ(tsfile_table_writer_->write_table(tablet), common::E_OK);
+ ASSERT_EQ(tsfile_table_writer_->flush(), common::E_OK);
+ ASSERT_EQ(tsfile_table_writer_->close(), common::E_OK);
+ storage::TsFileReader reader;
+ int ret = reader.open(file_name_);
+ ASSERT_EQ(ret, common::E_OK);
- ResultSet* tmp_result_set = nullptr;
- ret = reader.query(table_schema->get_table_name(),
- table_schema->get_measurement_names(), 0, 1000000000000,
- tmp_result_set);
- auto* table_result_set = (TableResultSet*)tmp_result_set;
- char* literal = new char[std::strlen("device_id") + 1];
- std::strcpy(literal, "device_id");
- String literal_str(literal, std::strlen("device_id"));
- bool has_next = false;
- int64_t timestamp = 0;
- while (IS_SUCC(table_result_set->next(has_next)) && has_next) {
- auto column_schemas = table_schema->get_measurement_schemas();
- for (const auto& column_schema : column_schemas) {
- switch (column_schema->data_type_) {
- case TSDataType::INT64:
- ASSERT_EQ(table_result_set->get_value<int64_t>(
- column_schema->measurement_name_),
- 0);
- break;
- case TSDataType::STRING:
- ASSERT_EQ(table_result_set
- ->get_value<common::String*>(
- column_schema->measurement_name_)
- ->compare(literal_str),
- 0);
- break;
- default:
- break;
+ ResultSet* tmp_result_set = nullptr;
+ ret = reader.query(table_schema->get_table_name(),
+ table_schema->get_measurement_names(), 0,
+ 1000000000000, tmp_result_set);
+ auto* table_result_set = (TableResultSet*)tmp_result_set;
+ char* literal = new char[std::strlen("device_id") + 1];
+ std::strcpy(literal, "device_id");
+ String literal_str(literal, std::strlen("device_id"));
+ bool has_next = false;
+ int64_t timestamp = 0;
+ while (IS_SUCC(table_result_set->next(has_next)) && has_next) {
+ auto column_schemas = table_schema->get_measurement_schemas();
+ for (const auto& column_schema : column_schemas) {
+ switch (column_schema->data_type_) {
+ case TSDataType::INT64:
+ ASSERT_EQ(table_result_set->get_value<int64_t>(
+ column_schema->measurement_name_),
+ 0);
+ break;
+ case TSDataType::STRING:
+ ASSERT_EQ(table_result_set
+ ->get_value<common::String*>(
+ column_schema->measurement_name_)
+ ->compare(literal_str),
+ 0);
+ break;
+ default:
+ break;
+ }
}
+ for (int i = 2; i <= 6; i++) {
+ ASSERT_EQ(
+ table_result_set->get_value<common::String*>(i)->compare(
+ literal_str),
+ 0);
+ }
+ for (int i = 7; i <= 11; i++) {
+ ASSERT_EQ(table_result_set->get_value<int64_t>(i), 0);
+ }
+ ASSERT_EQ(table_result_set->get_value<int64_t>(1), timestamp);
+ timestamp++;
}
- for (int i = 2; i <= 6; i++) {
- ASSERT_EQ(table_result_set->get_value<common::String*>(i)->compare(
- literal_str),
- 0);
- }
- for (int i = 7; i <= 11; i++) {
- ASSERT_EQ(table_result_set->get_value<int64_t>(i), 0);
- }
- ASSERT_EQ(table_result_set->get_value<int64_t>(1), timestamp);
- timestamp++;
+ ASSERT_EQ(timestamp, points_per_device);
+ reader.destroy_query_data_set(table_result_set);
+ delete[] literal;
+ ASSERT_EQ(reader.close(), common::E_OK);
}
- ASSERT_EQ(timestamp, 10);
- reader.destroy_query_data_set(table_result_set);
- delete[] literal;
- ASSERT_EQ(reader.close(), common::E_OK);
+};
+
+TEST_F(TsFileTableReaderTest, TableModelQuery) { test_table_model_query(); }
+
+TEST_F(TsFileTableReaderTest, TableModelQueryOnePage) {
+ test_table_model_query(g_config_value_.page_writer_max_point_num_);
}
TEST_F(TsFileTableReaderTest, TableModelResultMetadata) {
@@ -212,14 +219,17 @@ TEST_F(TsFileTableReaderTest, TableModelResultMetadata) {
tmp_result_set);
auto* table_result_set = (TableResultSet*)tmp_result_set;
auto result_set_metadata = table_result_set->get_metadata();
- ASSERT_EQ(result_set_metadata->get_column_count(), 10);
- for (int i = 0; i < 5; i++) {
- ASSERT_EQ(result_set_metadata->get_column_name(i), "id" +
to_string(i));
+ ASSERT_EQ(result_set_metadata->get_column_count(), 11);
+ ASSERT_EQ(result_set_metadata->get_column_name(1), "time");
+ ASSERT_EQ(result_set_metadata->get_column_type(1), INT64);
+ for (int i = 2; i <= 6; i++) {
+ ASSERT_EQ(result_set_metadata->get_column_name(i),
+ "id" + to_string(i - 2));
ASSERT_EQ(result_set_metadata->get_column_type(i), TSDataType::STRING);
}
- for (int i = 5; i < 10; i++) {
+ for (int i = 7; i <= 11; i++) {
ASSERT_EQ(result_set_metadata->get_column_name(i),
- "s" + to_string(i - 5));
+ "s" + to_string(i - 7));
ASSERT_EQ(result_set_metadata->get_column_type(i), TSDataType::INT64);
}
reader.destroy_query_data_set(table_result_set);
diff --git a/cpp/test/reader/tsfile_reader_test.cc
b/cpp/test/reader/tsfile_reader_test.cc
index 9686f4df..c90ebb4e 100644
--- a/cpp/test/reader/tsfile_reader_test.cc
+++ b/cpp/test/reader/tsfile_reader_test.cc
@@ -143,8 +143,10 @@ TEST_F(TsFileReaderTest, ResultSetMetadata) {
auto* qds = (QDSWithoutTimeGenerator*)tmp_qds;
std::shared_ptr<ResultSetMetadata> result_set_metadata =
qds->get_metadata();
- ASSERT_EQ(result_set_metadata->get_column_type(0), data_type);
- ASSERT_EQ(result_set_metadata->get_column_name(0),
+ ASSERT_EQ(result_set_metadata->get_column_type(1), INT64);
+ ASSERT_EQ(result_set_metadata->get_column_name(1), "time");
+ ASSERT_EQ(result_set_metadata->get_column_type(2), data_type);
+ ASSERT_EQ(result_set_metadata->get_column_name(2),
device_path + "." + measurement_name);
reader.destroy_query_data_set(qds);
reader.close();