This is an automated email from the ASF dual-hosted git repository. colinlee pushed a commit to branch colin_example_c_cpp in repository https://gitbox.apache.org/repos/asf/tsfile.git
commit 580fb47f92f713fab3e32ab4974611ace2ce43b0 Author: colin <[email protected]> AuthorDate: Tue Feb 25 23:58:11 2025 +0800 fix some c issues. --- cpp/examples/CMakeLists.txt | 1 + cpp/examples/c_examples/demo_write.c | 18 +++++++++------- cpp/src/cwrapper/tsfile_cwrapper.cc | 40 ++++++++++++++++++++++++++---------- cpp/src/cwrapper/tsfile_cwrapper.h | 22 ++++++++++++++------ 4 files changed, 57 insertions(+), 24 deletions(-) diff --git a/cpp/examples/CMakeLists.txt b/cpp/examples/CMakeLists.txt index fa868671..45b1347a 100644 --- a/cpp/examples/CMakeLists.txt +++ b/cpp/examples/CMakeLists.txt @@ -32,6 +32,7 @@ message("SDK_LIB_DIR_RELEASE: ${SDK_LIB_DIR_RELEASE}") set(SDK_LIB_DIR_DEBUG ${PROJECT_SOURCE_DIR}/../build/Debug/lib) message("SDK_LIB_DIR_DEBUG: ${SDK_LIB_DIR_DEBUG}") +include_directories(${PROJECT_SOURCE_DIR}/../third_party/antlr4-cpp-runtime-4/runtime/src) set(BUILD_TYPE "Release") include_directories(${SDK_INCLUDE_DIR}) diff --git a/cpp/examples/c_examples/demo_write.c b/cpp/examples/c_examples/demo_write.c index 5a6ae015..69d4476c 100644 --- a/cpp/examples/c_examples/demo_write.c +++ b/cpp/examples/c_examples/demo_write.c @@ -33,12 +33,17 @@ ERRNO write_tsfile() { HANDLE_ERROR(code); // Table schema. - TableSchema table_schema = { - .table_name = table_name, - .column_schemas = - (ColumnSchema[]){ColumnSchema{"id1", TS_DATATYPE_TEXT, TAG}, - ColumnSchema{"id2", TS_DATATYPE_TEXT, TAG}, - ColumnSchema{"s1", TS_DATATYPE_INT32, FIELD}}}; + TableSchema table_schema = {.table_name = table_name, + .column_schemas = (ColumnSchema[]){ + (ColumnSchema){.column_name = "id1", + .data_type = TS_DATATYPE_TEXT, + .column_category = TAG}, + (ColumnSchema){.column_name = "id2", + .data_type = TS_DATATYPE_TEXT, + .column_category = TAG}, + (ColumnSchema){.column_name = "s1", + .data_type = TS_DATATYPE_INT32, + .column_category = FIELD}}}; // Register a table with tsfile writer. code = tsfile_writer_register_table(writer, &table_schema); @@ -66,5 +71,4 @@ ERRNO write_tsfile() { // Close writer. HANDLE_ERROR(tsfile_writer_close(writer)); - } \ No newline at end of file diff --git a/cpp/src/cwrapper/tsfile_cwrapper.cc b/cpp/src/cwrapper/tsfile_cwrapper.cc index 2561b808..efe024b6 100644 --- a/cpp/src/cwrapper/tsfile_cwrapper.cc +++ b/cpp/src/cwrapper/tsfile_cwrapper.cc @@ -111,7 +111,7 @@ TsRecord ts_record_new(const char *device_id, Timestamp timestamp, } #define INSERT_DATA_INTO_TS_RECORD_BY_NAME_DEF(type) \ - ERRNO insert_data_into_ts_record_by_name_##type( \ + ERRNO insert_data_into_ts_record_by_name_##type( \ TsRecord data, const char *measurement_name, type value) { \ auto *record = (storage::TsRecord *)data; \ storage::DataPoint point(measurement_name, value); \ @@ -262,20 +262,22 @@ ERRNO tsfile_writer_flush_data(TsFileWriter writer) { // Query ResultSet tsfile_reader_query_table(TsFileReader reader, const char *table_name, -char **columns, uint32_t column_num, + 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_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])); + 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); @@ -295,6 +297,14 @@ bool tsfile_result_set_has_next(ResultSet result_set) { auto *r = static_cast<storage::ResultSet *>(result_set); \ return r->get_value<type>(column_name); \ } + +char *tsfile_result_set_get_value_by_name_string(ResultSet result_set, + const char *column_name) { + auto *r = static_cast<storage::ResultSet *>(result_set); + common::String *ret = r->get_value<common::String *>(column_name); + // Caller should free return's char* 's space. + return strdup(ret->buf_); +} TSFILE_RESULT_SET_GET_VALUE_BY_NAME_DEF(bool); TSFILE_RESULT_SET_GET_VALUE_BY_NAME_DEF(int32_t); TSFILE_RESULT_SET_GET_VALUE_BY_NAME_DEF(int64_t); @@ -313,6 +323,13 @@ TSFILE_RESULT_SET_GET_VALUE_BY_INDEX_DEF(int64_t); TSFILE_RESULT_SET_GET_VALUE_BY_INDEX_DEF(float); TSFILE_RESULT_SET_GET_VALUE_BY_INDEX_DEF(double); TSFILE_RESULT_SET_GET_VALUE_BY_INDEX_DEF(bool); +char *tsfile_result_set_get_value_by_index_string(ResultSet result_set, + uint32_t column_index) { + auto *r = static_cast<storage::ResultSet *>(result_set); + common::String *ret = r->get_value<common::String *>(column_index); + // Caller should free return's char* 's space. + return strdup(ret->buf_); +} bool tsfile_result_set_is_null_by_name(ResultSet result_set, const char *column_name) { @@ -329,7 +346,8 @@ bool tsfile_result_set_is_null_by_index(const ResultSet result_set, ResultSetMetaData tsfile_result_set_get_metadata(ResultSet result_set) { auto *r = static_cast<storage::QDSWithoutTimeGenerator *>(result_set); ResultSetMetaData meta_data; - std::shared_ptr<storage::ResultSetMetadata> result_set_metadata = r->get_metadata(); + std::shared_ptr<storage::ResultSetMetadata> result_set_metadata = + r->get_metadata(); meta_data.column_num = result_set_metadata->get_column_count(); meta_data.column_names = static_cast<char **>(malloc(meta_data.column_num * sizeof(char *))); @@ -365,7 +383,7 @@ TableSchema tsfile_reader_get_table_schema(TsFileReader reader, } DeviceSchema tsfile_reader_get_device_schema(TsFileReader reader, - const char *device_id) { + const char *device_id) { auto *r = static_cast<storage::TsFileReader *>(reader); std::vector<storage::MeasurementSchema> measurement_schemas; r->get_timeseries_schema( @@ -396,21 +414,21 @@ TableSchema *tsfile_reader_get_all_table_schemas(TsFileReader reader, } // delete pointer -void free_tsfile_ts_record(TsRecord* record) { +void free_tsfile_ts_record(TsRecord *record) { if (*record != nullptr) { delete static_cast<storage::TsRecord *>(*record); } *record = nullptr; } -void free_tablet(Tablet* tablet) { +void free_tablet(Tablet *tablet) { if (*tablet != nullptr) { delete static_cast<storage::Tablet *>(*tablet); } *tablet = nullptr; } -void free_tsfile_result_set(ResultSet* result_set) { +void free_tsfile_result_set(ResultSet *result_set) { if (*result_set != nullptr) { delete static_cast<storage::ResultSet *>(*result_set); } diff --git a/cpp/src/cwrapper/tsfile_cwrapper.h b/cpp/src/cwrapper/tsfile_cwrapper.h index 82ac1772..5c1e30fc 100644 --- a/cpp/src/cwrapper/tsfile_cwrapper.h +++ b/cpp/src/cwrapper/tsfile_cwrapper.h @@ -19,8 +19,13 @@ #ifndef SRC_CWRAPPER_TSFILE_CWRAPPER_H_ #define SRC_CWRAPPER_TSFILE_CWRAPPER_H_ +#ifdef __cplusplus +extern "C" { +#endif +#include <stdbool.h> #include <sys/stat.h> +#include <stdint.h> typedef enum { TS_DATATYPE_BOOLEAN = 0, @@ -111,9 +116,7 @@ typedef void* ResultSet; typedef int32_t ERRNO; typedef int64_t Timestamp; -#ifdef __cplusplus -extern "C" { -#endif + /*--------------------------Tablet API------------------------ */ Tablet tablet_new_with_device(const char* device_id, char** column_name_list, @@ -128,7 +131,7 @@ uint32_t tablet_get_cur_row_size(Tablet tablet); ERRNO tablet_add_timestamp(Tablet tablet, uint32_t row_index, Timestamp timestamp); -#define TABLET_ADD_VALUE_BY_NAME(type) \ +#define TABLET_ADD_VALUE_BY_NAME(type) \ ERRNO tablet_add_value_by_name_##type(Tablet tablet, uint32_t row_index, \ char* column_name, type value); @@ -138,7 +141,8 @@ TABLET_ADD_VALUE_BY_NAME(float); TABLET_ADD_VALUE_BY_NAME(double); TABLET_ADD_VALUE_BY_NAME(bool); -ERRNO tablet_add_value_by_name_string(Tablet tablet, uint32_t row_index, char* column_name, char* value); +ERRNO tablet_add_value_by_name_string(Tablet tablet, uint32_t row_index, + char* column_name, char* value); #define TABLE_ADD_VALUE_BY_INDEX(type) \ ERRNO tablet_add_value_by_index_##type(Tablet tablet, uint32_t row_index, \ @@ -150,7 +154,8 @@ TABLE_ADD_VALUE_BY_INDEX(float); TABLE_ADD_VALUE_BY_INDEX(double); TABLE_ADD_VALUE_BY_INDEX(bool); -ERRNO tablet_add_value_by_index_string(Tablet tablet, uint32_t row_index, uint32_t column_index, char* value); +ERRNO tablet_add_value_by_index_string(Tablet tablet, uint32_t row_index, + uint32_t column_index, char* value); void* tablet_get_value(Tablet tablet, uint32_t row_index, uint32_t schema_index, TSDataType* type); @@ -210,6 +215,9 @@ TSFILE_RESULT_SET_GET_VALUE_BY_NAME(int64_t); TSFILE_RESULT_SET_GET_VALUE_BY_NAME(float); TSFILE_RESULT_SET_GET_VALUE_BY_NAME(double); +char* tsfile_result_set_get_value_by_name_string(ResultSet result_set, + const char* column_name); + #define TSFILE_RESULT_SET_GET_VALUE_BY_INDEX(type) \ type tsfile_result_set_get_value_by_index_##type(ResultSet result_set, \ uint32_t column_index); @@ -220,6 +228,8 @@ TSFILE_RESULT_SET_GET_VALUE_BY_INDEX(float); TSFILE_RESULT_SET_GET_VALUE_BY_INDEX(double); TSFILE_RESULT_SET_GET_VALUE_BY_INDEX(bool); +char* tsfile_result_set_get_value_by_name_string(ResultSet result_set, + const char* column_name); bool tsfile_result_set_is_null_by_name(ResultSet result_set, const char* column_name);
