This is an automated email from the ASF dual-hosted git repository.

colinlee 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 14cefc91 fix data lossing when page num exceed 1. (#495)
14cefc91 is described below

commit 14cefc919feb7332defd2fd47a8d5462756482f2
Author: Colin Lee <[email protected]>
AuthorDate: Thu May 15 10:59:29 2025 +0800

    fix data lossing when page num exceed 1. (#495)
    
    * fix data lossing when page num exceed 1.
---
 cpp/src/reader/aligned_chunk_reader.cc             |  4 ++
 .../writer/table_view/tsfile_writer_table_test.cc  | 48 ++++++++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/cpp/src/reader/aligned_chunk_reader.cc 
b/cpp/src/reader/aligned_chunk_reader.cc
index e99973a8..06af8699 100644
--- a/cpp/src/reader/aligned_chunk_reader.cc
+++ b/cpp/src/reader/aligned_chunk_reader.cc
@@ -227,6 +227,10 @@ int AlignedChunkReader::get_next_page(TsBlock *ret_tsblock,
                 break;
             } else if (RET_FAIL(skip_cur_page())) {
             }
+            if (!has_more_data()) {
+                ret = E_NO_MORE_DATA;
+                break;
+            }
         }
         if (IS_SUCC(ret)) {
             ret = decode_cur_time_page_data() || decode_cur_value_page_data();
diff --git a/cpp/test/writer/table_view/tsfile_writer_table_test.cc 
b/cpp/test/writer/table_view/tsfile_writer_table_test.cc
index ac2f4040..85ddcbce 100644
--- a/cpp/test/writer/table_view/tsfile_writer_table_test.cc
+++ b/cpp/test/writer/table_view/tsfile_writer_table_test.cc
@@ -139,6 +139,54 @@ TEST_F(TsFileWriterTableTest, WriteTableTest) {
     delete table_schema;
 }
 
+TEST_F(TsFileWriterTableTest, WithoutTagAndMultiPage) {
+    std::vector<MeasurementSchema*> measurement_schemas;
+    std::vector<ColumnCategory> column_categories;
+    measurement_schemas.resize(1);
+    measurement_schemas[0] = new MeasurementSchema("value", DOUBLE);
+    column_categories.emplace_back(ColumnCategory::FIELD);
+    TableSchema* table_schema =
+        new TableSchema("test_table", measurement_schemas, column_categories);
+    auto tsfile_table_writer =
+        std::make_shared<TsFileTableWriter>(&write_file_, table_schema);
+
+    int cur_line = 0;
+    for (int j = 0; j < 100; j++) {
+        Tablet tablet = Tablet(table_schema->get_measurement_names(),
+                               table_schema->get_data_types(), 10001);
+        tablet.set_table_name("test_table");
+        for (int i = 0; i < 10001; i++) {
+            tablet.add_timestamp(i, static_cast<int64_t>(cur_line++));
+            tablet.add_value(i, "value", i * 1.1);
+        }
+        tsfile_table_writer->write_table(tablet);
+    }
+
+    tsfile_table_writer->flush();
+    tsfile_table_writer->close();
+
+    TsFileReader reader = TsFileReader();
+    reader.open(write_file_.get_file_path());
+    ResultSet* ret = nullptr;
+    int ret_value = reader.query("test_table", {"value"}, 0, 50, ret);
+    ASSERT_EQ(common::E_OK, ret_value);
+    auto* table_result_set = (TableResultSet*)ret;
+    bool has_next = false;
+    cur_line = 0;
+    while (IS_SUCC(table_result_set->next(has_next)) && has_next) {
+        cur_line++;
+        int64_t timestamp = table_result_set->get_value<int64_t>("time");
+        ASSERT_EQ(table_result_set->get_value<double>("value"),
+                  timestamp * 1.1);
+    }
+    ASSERT_EQ(cur_line, 51);
+    table_result_set->close();
+    reader.destroy_query_data_set(table_result_set);
+
+    reader.close();
+    delete table_schema;
+}
+
 TEST_F(TsFileWriterTableTest, WriteTableTestMultiFlush) {
     auto table_schema = gen_table_schema(0);
     auto tsfile_table_writer_ = std::make_shared<TsFileTableWriter>(

Reply via email to