This is an automated email from the ASF dual-hosted git repository.
colinlee pushed a commit to branch colin_support_read_tree
in repository https://gitbox.apache.org/repos/asf/tsfile.git
The following commit(s) were added to refs/heads/colin_support_read_tree by
this push:
new 56db8cec fix some code.
56db8cec is described below
commit 56db8cecb933ca783c394947da3f0d3fefc467e2
Author: ColinLee <[email protected]>
AuthorDate: Wed Nov 19 12:43:27 2025 +0800
fix some code.
---
cpp/src/file/tsfile_io_writer.cc | 2 -
cpp/src/reader/tsfile_reader.cc | 5 +-
.../reader/tree_view/tsfile_reader_tree_test.cc | 89 +++++++++++++++++++---
3 files changed, 80 insertions(+), 16 deletions(-)
diff --git a/cpp/src/file/tsfile_io_writer.cc b/cpp/src/file/tsfile_io_writer.cc
index f65aebc2..0bf0d0e6 100644
--- a/cpp/src/file/tsfile_io_writer.cc
+++ b/cpp/src/file/tsfile_io_writer.cc
@@ -352,11 +352,9 @@ int TsFileIOWriter::write_file_index() {
tsm_iter.get_next(device_id, measurement_name, ts_index))) {
break;
}
-#if DEBUG_SE
std::cout << "tsm_iter get next = {device_name=" << device_id
<< ", measurement_name=" << measurement_name
<< ", ts_index=" << ts_index << std::endl;
-#endif
// prepare if it is an entry of a new device
if (prev_device_id == nullptr || prev_device_id != device_id) {
diff --git a/cpp/src/reader/tsfile_reader.cc b/cpp/src/reader/tsfile_reader.cc
index 045dc818..fc416676 100644
--- a/cpp/src/reader/tsfile_reader.cc
+++ b/cpp/src/reader/tsfile_reader.cc
@@ -134,10 +134,11 @@ int TsFileReader::query_table_on_tree(
}
std::vector<std::string> columns_names(max_len);
for (int i = 0; i < max_len; i++) {
- columns_names[i] = "L_" + std::to_string(i);
+ columns_names[i] = "l_" + std::to_string(i);
}
Filter* time_filter = new TimeBetween(star_time, end_time, false);
- ret = table_query_executor_->query_on_tree(device_ids, columns_names,
measurement_names, time_filter, result_set);
+ ret = table_query_executor_->query_on_tree(
+ device_ids, columns_names, measurement_names, time_filter, result_set);
return ret;
}
diff --git a/cpp/test/reader/tree_view/tsfile_reader_tree_test.cc
b/cpp/test/reader/tree_view/tsfile_reader_tree_test.cc
index e7466c7b..9bd1f462 100644
--- a/cpp/test/reader/tree_view/tsfile_reader_tree_test.cc
+++ b/cpp/test/reader/tree_view/tsfile_reader_tree_test.cc
@@ -32,6 +32,7 @@
namespace storage {
class QDSWithoutTimeGenerator;
}
+
using namespace storage;
using namespace common;
@@ -49,7 +50,8 @@ class TsFileTreeReaderTest : public ::testing::Test {
mode_t mode = 0666;
write_file_.create(file_name_, flags, mode);
}
- void TearDown() override { remove(file_name_.c_str()); }
+
+ void TearDown() override {}
std::string file_name_;
WriteFile write_file_;
@@ -78,7 +80,7 @@ TEST_F(TsFileTreeReaderTest, BasicTest) {
TsFileTreeWriter writer(&write_file_);
std::string device_id = "test_device";
std::string measurement_id = "test_measurement";
- auto* measurement = new MeasurementSchema(measurement_id, INT64);
+ auto *measurement = new MeasurementSchema(measurement_id, INT64);
writer.register_timeseries(device_id, measurement);
TsRecord record(device_id, 0);
record.add_point(measurement_id, static_cast<int64_t>(1));
@@ -94,12 +96,12 @@ TEST_F(TsFileTreeReaderTest, BasicTest) {
ASSERT_EQ(device_ids[0], device_id);
std::vector<std::string> measurement_ids{measurement_id};
- ResultSet* result;
+ ResultSet *result;
int ret =
reader.query(device_ids, measurement_ids, INT64_MIN, INT64_MAX,
result);
ASSERT_EQ(ret, E_OK);
auto iter = result->iterator();
- RowRecord* read_record;
+ RowRecord *read_record;
while (iter.hasNext()) {
read_record = iter.next();
EXPECT_EQ(read_record->get_field(1)->type_, INT64);
@@ -108,19 +110,82 @@ TEST_F(TsFileTreeReaderTest, BasicTest) {
reader.close();
}
+TEST_F(TsFileTreeReaderTest, ReadTreeByTable) {
+ TsFileTreeWriter writer(&write_file_);
+ std::vector<std::string> device_ids = {"root.db1.t1", "root.db2.t1",
+ "root.db3.t2.t3", "root.db3.t3",
+ "device", "device.ln"};
+ std::vector<std::string> measurement_ids = {"temperature", "hudi",
"level"};
+ for (auto &device_id : device_ids) {
+ for (auto const &measurement : measurement_ids) {
+ ASSERT_EQ(E_OK,
+ writer.register_timeseries(
+ device_id, new storage::MeasurementSchema(
+ measurement, TSDataType::INT32)));
+ TsRecord record(device_id, 0);
+ record.add_point(measurement, static_cast<int64_t>(1));
+ ASSERT_EQ(E_OK,writer.write(record));
+ }
+ }
+ writer.flush();
+ writer.close();
+
+ TsFileReader reader;
+ reader.open(file_name_);
+ ResultSet *result;
+ int ret = reader.query_table_on_tree({"temperature"}, INT64_MIN, INT64_MAX,
+ result);
+ ASSERT_EQ(ret, E_OK);
+
+ auto *table_result_set = (storage::TableResultSet *)result;
+ bool has_next = false;
+ while (IS_SUCC(table_result_set->next(has_next)) && has_next) {
+ auto t = table_result_set->get_value<int64_t>(1);
+ int num = table_result_set->get_metadata()->get_column_count();
+ for (int i = 1; i < num + 1; ++i) {
+ switch (table_result_set->get_metadata()->get_column_type(i)) {
+ case INT64:
+ std::cout << table_result_set->get_value<int64_t>(i)
+ << std::endl;
+ break;
+ case DOUBLE:
+ std::cout << table_result_set->get_value<double>(i)
+ << std::endl;
+ break;
+ case FLOAT:
+ std::cout << table_result_set->get_value<float>(i)
+ << std::endl;
+ break;
+ case INT32:
+ std::cout << table_result_set->get_value<int32_t>(i)
+ << std::endl;
+ break;
+ case STRING:
+ std::cout
+ << table_result_set->get_value<common::String *>(i)
+ << std::endl;
+ break;
+ }
+ }
+ }
+
+ reader.destroy_query_data_set(result);
+ reader.close();
+}
+
TEST_F(TsFileTreeReaderTest, ExtendedRowsAndColumnsTest) {
TsFileTreeWriter writer(&write_file_);
std::vector<std::string> device_ids = {"device_1", "device_2", "device_3"};
std::vector<std::string> measurement_ids = {"temperature", "humidity",
"pressure", "voltage"};
std::vector<TSDataType> data_types = {INT64, DOUBLE, FLOAT, INT32};
- std::vector<MeasurementSchema*> measurements;
+ std::vector<MeasurementSchema *> measurements;
for (size_t i = 0; i < measurement_ids.size(); ++i) {
- auto* measurement =
+ auto *measurement =
new MeasurementSchema(measurement_ids[i], data_types[i]);
measurements.push_back(measurement);
}
- for (auto& device_id : device_ids) {
+ for (auto &device_id : device_ids) {
for (auto measurement : measurements) {
writer.register_timeseries(device_id, measurement);
}
@@ -128,7 +193,7 @@ TEST_F(TsFileTreeReaderTest, ExtendedRowsAndColumnsTest) {
const int NUM_ROWS = 100;
for (int row = 0; row < NUM_ROWS; ++row) {
- for (const auto& device_id : device_ids) {
+ for (const auto &device_id : device_ids) {
TsRecord record(device_id, row * 1000);
for (size_t i = 0; i < measurement_ids.size(); ++i) {
switch (data_types[i]) {
@@ -168,7 +233,7 @@ TEST_F(TsFileTreeReaderTest, ExtendedRowsAndColumnsTest) {
EXPECT_EQ(read_device_ids[i], device_ids[i]);
}
- ResultSet* result;
+ ResultSet *result;
int ret =
reader.query(device_ids, measurement_ids, 0, NUM_ROWS * 1000, result);
ASSERT_EQ(ret, E_OK);
@@ -177,14 +242,14 @@ TEST_F(TsFileTreeReaderTest, ExtendedRowsAndColumnsTest) {
int row_count = 0;
while (iter.hasNext()) {
- RowRecord* read_record = iter.next();
+ RowRecord *read_record = iter.next();
row_count++;
EXPECT_EQ(read_record->get_fields()->size(),
device_ids.size() * measurement_ids.size() + 1);
// device_id1
for (size_t i = 0; i < measurement_ids.size(); ++i) {
- Field* field = read_record->get_field(i + 1);
+ Field *field = read_record->get_field(i + 1);
ASSERT_NE(field, nullptr);
EXPECT_EQ(field->type_, data_types[i]);
@@ -220,7 +285,7 @@ TEST_F(TsFileTreeReaderTest, ExtendedRowsAndColumnsTest) {
EXPECT_EQ(row_count * device_ids.size(), NUM_ROWS * device_ids.size());
reader.destroy_query_data_set(result);
reader.close();
- for (auto* measurement : measurements) {
+ for (auto *measurement : measurements) {
delete measurement;
}
}