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

colinlee pushed a commit to branch colin_python_V4_bak
in repository https://gitbox.apache.org/repos/asf/tsfile.git

commit 7f880dfe1cbc7229f8b58cb7217b458086f75f70
Author: ColinLee <[email protected]>
AuthorDate: Thu Feb 27 18:48:18 2025 +0800

    revoer modify on cwrapper.
---
 cpp/src/cwrapper/tsfile_cwrapper.cc | 203 +++++++-----------------------------
 cpp/src/cwrapper/tsfile_cwrapper.h  |  68 +++++++-----
 cpp/test/cwrapper/cwrapper_test.cc  |  99 +++++++++---------
 3 files changed, 129 insertions(+), 241 deletions(-)

diff --git a/cpp/src/cwrapper/tsfile_cwrapper.cc 
b/cpp/src/cwrapper/tsfile_cwrapper.cc
index b7442d5c..dbd85b52 100644
--- a/cpp/src/cwrapper/tsfile_cwrapper.cc
+++ b/cpp/src/cwrapper/tsfile_cwrapper.cc
@@ -35,135 +35,6 @@ extern "C" {
 
 static bool is_init = false;
 
-Tablet tablet_new_with_device(const char *device_id, char **column_name_list,
-                              TSDataType *data_types, ColumnCategory *category,
-                              int column_num, int max_rows) {
-    std::vector<std::string> measurement_list;
-    std::vector<common::TSDataType> data_type_list;
-
-    for (int i = 0; i < column_num; i++) {
-        measurement_list.emplace_back(column_name_list[i]);
-        data_type_list.push_back(
-            static_cast<common::TSDataType>(*(data_types + i)));
-    }
-    storage::Tablet *tablet = nullptr;
-    if (category == nullptr) {
-        tablet = new storage::Tablet(device_id, &measurement_list,
-                                     &data_type_list, max_rows);
-    } else {
-        std::vector<storage::ColumnCategory> column_category_list;
-        column_category_list.reserve(column_num);
-        for (int i = 0; i < column_num; i++) {
-            column_category_list.emplace_back(
-                static_cast<storage::ColumnCategory>(*(category + i)));
-        }
-        tablet =
-            new storage::Tablet(device_id, measurement_list, data_type_list,
-                                column_category_list, max_rows);
-    }
-    tablet->init();
-    return tablet;
-}
-
-Tablet tablet_new(const char **column_name_list, TSDataType *data_types,
-                  uint32_t column_num) {
-    std::vector<std::string> measurement_list;
-    std::vector<common::TSDataType> data_type_list;
-    for (int i = 0; i < column_num; i++) {
-        measurement_list.emplace_back(column_name_list[i]);
-        data_type_list.push_back(
-            static_cast<common::TSDataType>(*(data_types + i)));
-    }
-    auto *tablet = new storage::Tablet("", &measurement_list, &data_type_list);
-    return tablet;
-}
-
-uint32_t tablet_get_cur_row_size(Tablet tablet) {
-    return static_cast<storage::Tablet *>(tablet)->get_cur_row_size();
-}
-
-ERRNO tablet_add_timestamp(Tablet tablet, uint32_t row_index,
-                           timestamp timestamp) {
-    return static_cast<storage::Tablet *>(tablet)->add_timestamp(row_index,
-                                                                 timestamp);
-}
-
-#define TABLET_ADD_VALUE_BY_NAME_DEF(type)                                   \
-    ERRNO tablet_add_value_by_name_##type(Tablet tablet, uint32_t row_index, \
-                                          const char *column_name,           \
-                                          type value) {                      \
-        return static_cast<storage::Tablet *>(tablet)->add_value(            \
-            row_index, column_name, value);                                  \
-    }
-
-TABLET_ADD_VALUE_BY_NAME_DEF(int32_t);
-TABLET_ADD_VALUE_BY_NAME_DEF(int64_t);
-TABLET_ADD_VALUE_BY_NAME_DEF(float);
-TABLET_ADD_VALUE_BY_NAME_DEF(double);
-TABLET_ADD_VALUE_BY_NAME_DEF(bool);
-
-ERRNO tablet_add_value_by_name_string(Tablet tablet, uint32_t row_index,
-                                       const char* column_name, char* value) {
-    common::String str = common::String(value, strlen(value));
-    return static_cast<storage::Tablet *>(tablet)->add_value(
-        row_index, column_name, str);
-}
-
-ERRNO tablet_add_value_by_index_string(Tablet tablet, uint32_t row_index,
-                                       uint32_t column_index, char* value) {
-    common::String str = common::String(value, strlen(value));
-    return static_cast<storage::Tablet *>(tablet)->add_value(
-        row_index, column_index, str);
-}
-
-
-#define TABLE_ADD_VALUE_BY_INDEX_DEF(type)                                    \
-    ERRNO tablet_add_value_by_index_##type(Tablet tablet, uint32_t row_index, \
-                                           uint32_t column_index,             \
-                                           type value) {                      \
-        return static_cast<storage::Tablet *>(tablet)->add_value(             \
-            row_index, column_index, value);                                  \
-    }
-
-TABLE_ADD_VALUE_BY_INDEX_DEF(int32_t);
-TABLE_ADD_VALUE_BY_INDEX_DEF(int64_t);
-TABLE_ADD_VALUE_BY_INDEX_DEF(float);
-TABLE_ADD_VALUE_BY_INDEX_DEF(double);
-TABLE_ADD_VALUE_BY_INDEX_DEF(bool);
-
-void *tablet_get_value(Tablet tablet, uint32_t row_index, uint32_t 
schema_index,
-                       TSDataType *type) {
-    common::TSDataType data_type;
-    void *result = static_cast<storage::Tablet *>(tablet)->get_value(
-        row_index, schema_index, data_type);
-    *type = static_cast<TSDataType>(data_type);
-    return result;
-}
-
-// TsRecord API
-TsRecord ts_record_new(const char *device_id, timestamp timestamp,
-                       int timeseries_num) {
-    auto *record = new storage::TsRecord(timestamp, device_id, timeseries_num);
-    return record;
-}
-
-#define INSERT_DATA_INTO_TS_RECORD_BY_NAME_DEF(type)                     \
-    ERRNO insert_data_into_ts_record_by_name_##type(                     \
-        TsRecord data, const char *measurement_name, const type value) { \
-        auto *record = (storage::TsRecord *)data;                        \
-        storage::DataPoint point(measurement_name, value);               \
-        if (record->points_.size() + 1 > record->points_.capacity())     \
-            return common::E_BUF_NOT_ENOUGH;                             \
-        record->points_.push_back(point);                                \
-        return common::E_OK;                                             \
-    }
-
-INSERT_DATA_INTO_TS_RECORD_BY_NAME_DEF(int32_t);
-INSERT_DATA_INTO_TS_RECORD_BY_NAME_DEF(int64_t);
-INSERT_DATA_INTO_TS_RECORD_BY_NAME_DEF(bool);
-INSERT_DATA_INTO_TS_RECORD_BY_NAME_DEF(float);
-INSERT_DATA_INTO_TS_RECORD_BY_NAME_DEF(double);
-
 void init_tsfile_config() {
     if (!is_init) {
         common::init_config_value();
@@ -421,45 +292,55 @@ ERRNO tsfile_writer_write(TsFileWriter writer, Tablet 
tablet) {
     return w->write_table(*tbl);
 }
 
-ERRNO tsfile_writer_write_table(TsFileWriter writer, Tablet tablet) {
-    auto *w = static_cast<storage::TsFileWriter *>(writer);
-    const auto *tbl = static_cast<storage::Tablet *>(tablet);
-    return w->write_table(*tbl);
-}
-
-ERRNO tsfile_writer_flush_data(TsFileWriter writer) {
-    auto *w = static_cast<storage::TsFileWriter *>(writer);
-    return w->flush();
-}
+// ERRNO tsfile_writer_flush_data(TsFileWriter writer) {
+//     auto *w = static_cast<storage::TsFileWriter *>(writer);
+//     return w->flush();
+// }
 
 // Query
 
-ResultSet tsfile_reader_query_table(TsFileReader reader, const char 
*table_name,
-                                    char **columns, uint32_t column_num,
-                                    timestamp start_time, timestamp end_time) {
-    // TODO: Implement query table with tsfile reader.
-    return nullptr;
-}
-
-ResultSet tsfile_reader_query_device(TsFileReader reader,
-                                     const char *device_name,
-                                     char **sensor_name, uint32_t sensor_num,
-                                     timestamp start_time, timestamp end_time) 
{
+ResultSet tsfile_query_table(TsFileReader reader, const char *table_name,
+                             char **columns, uint32_t column_num,
+                             Timestamp start_time, Timestamp end_time,
+                             ERRNO *err_code) {
     auto *r = static_cast<storage::TsFileReader *>(reader);
-    std::vector<std::string> selected_paths;
-    selected_paths.reserve(sensor_num);
-    for (int i = 0; i < sensor_num; i++) {
-        selected_paths.push_back(std::string(device_name) + "." +
-                                 std::string(sensor_name[i]));
+    storage::ResultSet *table_result_set = nullptr;
+    std::vector<std::string> column_names;
+    for (uint32_t i = 0; i < column_num; i++) {
+        column_names.emplace_back(columns[i]);
     }
     *err_code = r->query(table_name, column_names, start_time, end_time,
                          table_result_set);
     return table_result_set;
 }
 
-bool tsfile_result_set_next(ResultSet result_set) {
-    auto *r = static_cast<storage::QDSWithoutTimeGenerator *>(result_set);
-    return r->next();
+// ResultSet tsfile_reader_query_device(TsFileReader reader,
+//                                      const char *device_name,
+//                                      char **sensor_name, uint32_t 
sensor_num,
+//                                      Timestamp start_time, Timestamp
+//                                      end_time) {
+//     auto *r = static_cast<storage::TsFileReader *>(reader);
+//     std::vector<std::string> selected_paths;
+//     selected_paths.reserve(sensor_num);
+//     for (uint32_t i = 0; i < sensor_num; i++) {
+//         selected_paths.push_back(std::string(device_name) + "." +
+//                                  std::string(sensor_name[i]));
+//     }
+//     storage::ResultSet *qds = nullptr;
+//     r->query(selected_paths, start_time, end_time, qds);
+//     return qds;
+// }
+
+bool tsfile_result_set_next(ResultSet result_set, ERRNO *err_code) {
+    auto *r = static_cast<storage::TableResultSet *>(result_set);
+    bool has_next = true;
+    int ret = common::E_OK;
+    ret = r->next(has_next);
+    *err_code = ret;
+    if (ret != common::E_OK) {
+        return false;
+    }
+    return has_next;
 }
 
 #define TSFILE_RESULT_SET_GET_VALUE_BY_NAME_DEF(type)                          
\
@@ -603,12 +484,6 @@ int 
tsfile_result_set_metadata_get_column_num(ResultSetMetaData result_set) {
 
 TableSchema tsfile_reader_get_table_schema(TsFileReader reader,
                                            const char *table_name) {
-    // TODO: Implement get table schema with tsfile reader.
-    return TableSchema();
-}
-
-DeviceSchema tsfile_reader_get_device_schema(TsFileReader reader,
-                                             const char *device_id) {
     auto *r = static_cast<storage::TsFileReader *>(reader);
     auto table_shcema = r->get_table_schema(table_name);
     TableSchema ret_schema;
diff --git a/cpp/src/cwrapper/tsfile_cwrapper.h 
b/cpp/src/cwrapper/tsfile_cwrapper.h
index 2555db00..af1c9c29 100644
--- a/cpp/src/cwrapper/tsfile_cwrapper.h
+++ b/cpp/src/cwrapper/tsfile_cwrapper.h
@@ -184,9 +184,6 @@ ERRNO tsfile_writer_close(TsFileWriter writer);
 ERRNO tsfile_reader_close(TsFileReader reader);
 
 /*--------------------------Tablet API------------------------ */
-Tablet tablet_new_with_device(const char* device_id, char** column_name_list,
-                              TSDataType* data_types, ColumnCategory* category,
-                              int column_num, int max_rows);
 
 /**
  * @brief Creates a Tablet for batch data.
@@ -241,22 +238,34 @@ TABLET_ADD_VALUE_BY_NAME(float);
 TABLET_ADD_VALUE_BY_NAME(double);
 TABLET_ADD_VALUE_BY_NAME(bool);
 
+/**
+ * @brief Adds a string value to a Tablet row by column name.
+ *
+ * @param value [in] Null-terminated string. Ownership remains with caller.
+ * @return ERRNO.
+ */
 ERRNO tablet_add_value_by_name_string(Tablet tablet, uint32_t row_index,
-                                      const char* column_name, char* value);
+                                      const char* column_name,
+                                      const char* value);
 
-#define TABLET_ADD_VALUE_BY_INDEX(type)                                       \
+/**
+ * @brief Adds a value to a Tablet row by column index (generic types).
+ *
+ * @param column_index [in] Column position (0 ≤ index < column_num).
+ * @return ERRNO - E_OK(0) or check errno_define.h.
+ *
+ * @note Generated for types: int32_t, int64_t, float, double, bool
+ */
+#define TABLE_ADD_VALUE_BY_INDEX(type)                                        \
     ERRNO tablet_add_value_by_index_##type(Tablet tablet, uint32_t row_index, \
                                            uint32_t column_index,             \
                                            const type value);
 
-TABLET_ADD_VALUE_BY_INDEX(int32_t);
-TABLET_ADD_VALUE_BY_INDEX(int64_t);
-TABLET_ADD_VALUE_BY_INDEX(float);
-TABLET_ADD_VALUE_BY_INDEX(double);
-TABLET_ADD_VALUE_BY_INDEX(bool);
-
-ERRNO tablet_add_value_by_index_string(Tablet tablet, uint32_t row_index,
-                                       uint32_t column_index, char* value);
+TABLE_ADD_VALUE_BY_INDEX(int32_t);
+TABLE_ADD_VALUE_BY_INDEX(int64_t);
+TABLE_ADD_VALUE_BY_INDEX(float);
+TABLE_ADD_VALUE_BY_INDEX(double);
+TABLE_ADD_VALUE_BY_INDEX(bool);
 
 /**
  * @brief Adds a string value to a Tablet row by column index.
@@ -273,8 +282,8 @@ TsRecord ts_record_new(const char* device_id, Timestamp 
timestamp,
                       int timeseries_num);
 
 #define INSERT_DATA_INTO_TS_RECORD_BY_NAME(type)     \
-    ERRNO insert_data_into_ts_record_by_name_##type( \
-        TsRecord data, const char* measurement_name, const type value);
+   ERRNO insert_data_into_ts_record_by_name_##type( \
+       TsRecord data, const char* measurement_name, type value);
 
 INSERT_DATA_INTO_TS_RECORD_BY_NAME(int32_t);
 INSERT_DATA_INTO_TS_RECORD_BY_NAME(int64_t);
@@ -293,21 +302,24 @@ ERRNO tsfile_writer_register_device(TsFileWriter writer,
                                    const DeviceSchema* device_schema);
                                    */
 
-/*-------------------TsFile Writer write and flush data------------------ */
-ERRNO tsfile_writer_write_tablet(TsFileWriter writer, Tablet tablet);
-ERRNO tsfile_writer_write_table(TsFileWriter writer, Tablet tablet);
-ERRNO tsfile_writer_write_ts_record(TsFileWriter writer, TsRecord record);
-ERRNO tsfile_writer_flush_data(TsFileWriter writer);
+/*-------------------TsFile Writer write data------------------ */
+
+/**
+ * @brief Writes data from a Tablet to the TsFile.
+ *
+ * @param writer [in] Valid TsFileWriter handle. Must be initialized.
+ * @param tablet [in] Tablet containing data. Should be freed after successful
+ * write.
+ * @return ERRNO - E_OK(0), or check error code in errno_define.h.
+ *
+ */
+
+ERRNO tsfile_writer_write(TsFileWriter writer, Tablet tablet);
+// ERRNO tsfile_writer_write_tablet(TsFileWriter writer, Tablet tablet);
+// ERRNO tsfile_writer_write_ts_record(TsFileWriter writer, TsRecord record);
+// ERRNO tsfile_writer_flush_data(TsFileWriter writer);
 
 /*-------------------TsFile reader query data------------------ */
-ResultSet tsfile_reader_query_table(TsFileReader reader, const char* 
table_name,
-                                    char** columns, uint32_t column_num,
-                                    timestamp start_time, timestamp end_time);
-ResultSet tsfile_reader_query_device(TsFileReader reader,
-                                     const char* device_name,
-                                     char** sensor_name, uint32_t sensor_num,
-                                     timestamp start_time, timestamp end_time);
-bool tsfile_result_set_next(ResultSet result_set);
 
 /**
  * @brief Queries time series data from a specific table within time range.
diff --git a/cpp/test/cwrapper/cwrapper_test.cc 
b/cpp/test/cwrapper/cwrapper_test.cc
index 398e7984..224257e2 100644
--- a/cpp/test/cwrapper/cwrapper_test.cc
+++ b/cpp/test/cwrapper/cwrapper_test.cc
@@ -63,34 +63,53 @@ TEST_F(CWrapperTest, WriterFlushTabletAndReadData) {
                          TS_DATATYPE_STRING, TS_COMPRESSION_UNCOMPRESSED,
                          TS_ENCODING_PLAIN, TAG};
     }
-    int max_rows = 100;
-    for (int i = 0; i < device_num; i++) {
-        char* device_name = strdup(("device" + std::to_string(i)).c_str());
-        char** measurements_name =
-            static_cast<char**>(malloc(measurement_num * sizeof(char*)));
-        TSDataType* data_types = static_cast<TSDataType*>(
-            malloc(sizeof(TSDataType) * measurement_num));
-        for (int j = 0; j < measurement_num; j++) {
-            measurements_name[j] =
-                strdup(("measurement" + std::to_string(j)).c_str());
-            data_types[j] = TS_DATATYPE_INT64;
-        }
-        Tablet tablet =
-            tablet_new_with_device(device_name, measurements_name, data_types,
-                                   nullptr, measurement_num, max_rows);
-        free(device_name);
-        free(data_types);
-        for (int j = 0; j < measurement_num; j++) {
-            free(measurements_name[j]);
-        }
-        free(measurements_name);
-        for (int j = 0; j < measurement_num; j++) {
-            for (int row = 0; row < max_rows; row++) {
-                tablet_add_timestamp(tablet, row, 16225600 + row);
-            }
-            for (int row = 0; row < max_rows; row++) {
-                tablet_add_value_by_index_int64_t(
-                    tablet, row, j, static_cast<int64_t>(row + j));
+    for (int i = 0; i < field_schema_num; i++) {
+        schema.column_schemas[i + id_schema_num] =
+            ColumnSchema{strdup(std::string("s" + std::to_string(i)).c_str()),
+                         TS_DATATYPE_INT64, TS_COMPRESSION_UNCOMPRESSED,
+                         TS_ENCODING_PLAIN, FIELD};
+    }
+    WriteFile file =
+        write_file_new("cwrapper_write_flush_and_read.tsfile", &code);
+    TsFileWriter writer = tsfile_writer_new(file, &schema, &code);
+    ASSERT_EQ(code, RET_OK);
+
+    char** column_names =
+        static_cast<char**>(malloc(column_num * sizeof(char*)));
+    TSDataType* data_types =
+        static_cast<TSDataType*>(malloc(sizeof(TSDataType) * column_num));
+    for (int i = 0; i < id_schema_num; i++) {
+        column_names[i] = strdup(std::string("id" + 
std::to_string(i)).c_str());
+        data_types[i] = TS_DATATYPE_STRING;
+    }
+
+    for (int i = 0; i < field_schema_num; i++) {
+        column_names[i + id_schema_num] =
+            strdup(std::string("s" + std::to_string(i)).c_str());
+        data_types[i + id_schema_num] = TS_DATATYPE_INT64;
+    }
+
+    Tablet tablet = tablet_new(column_names, data_types, column_num, 10);
+
+    int num_timestamp = 10;
+    char* literal = new char[std::strlen("device_id") + 1];
+    std::strcpy(literal, "device_id");
+
+    for (int l = 0; l < num_timestamp; l++) {
+        tablet_add_timestamp(tablet, l, l);
+        for (int i = 0; i < schema.column_num; i++) {
+            switch (schema.column_schemas[i].data_type) {
+                case TS_DATATYPE_STRING:
+                    tablet_add_value_by_name_string(
+                        tablet, l, schema.column_schemas[i].column_name,
+                        literal);
+                    break;
+                case TS_DATATYPE_INT64:
+                    tablet_add_value_by_name_int64_t(
+                        tablet, l, schema.column_schemas[i].column_name, l);
+                    break;
+                default:
+                    break;
             }
         }
     }
@@ -151,27 +170,9 @@ TEST_F(CWrapperTest, WriterFlushTabletAndReadData) {
         }
     }
 
-    ResultSetMetaData metadata = tsfile_result_set_get_metadata(result_set);
-    ASSERT_EQ(metadata.column_num, measurement_num);
-    ASSERT_EQ(std::string(metadata.column_names[4]),
-              std::string("device0.measurement4"));
-    ASSERT_EQ(metadata.data_types[9], TS_DATATYPE_INT64);
-    for (int i = 0; i < measurement_num - 1; i++) {
-        ASSERT_TRUE(tsfile_result_set_next(result_set));
-        ASSERT_FALSE(tsfile_result_set_is_null_by_index(result_set, i));
-        ASSERT_EQ(tsfile_result_set_get_value_by_index_int64_t(result_set, i),
-                  i * 2);
-        ASSERT_EQ(tsfile_result_set_get_value_by_name_int64_t(
-                      result_set,
-                      std::string("measurement" + std::to_string(i)).c_str()),
-                  i * 2);
-    }
-    free_tsfile_result_set(&result_set);
-    free_result_set_meta_data(metadata);
-    for (int i = 0; i < measurement_num; i++) {
-        free(sensor_list[i]);
-    }
-    free(sensor_list);
+    ASSERT_EQ(5, count_int64_t);
+    ASSERT_EQ(5, count_string);
+    free_tablet(&tablet);
     tsfile_reader_close(reader);
     free_tsfile_result_set(&result_set);
     free_table_schema(schema);

Reply via email to