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 b73abd227975f0f3e85601e8655856c02f937167 Author: colin <shuoli...@163.com> AuthorDate: Wed Feb 26 15:03:34 2025 +0800 fix some error. --- cpp/examples/cpp_examples/cpp_examples.h | 1 + cpp/examples/cpp_examples/demo_read.cpp | 5 +- cpp/examples/cpp_examples/demo_write.cpp | 3 +- cpp/src/common/tablet.cc | 120 ++++++++++++++++++------------- cpp/src/cwrapper/tsfile_cwrapper.cc | 25 ++++++- cpp/src/cwrapper/tsfile_cwrapper.h | 10 +-- 6 files changed, 108 insertions(+), 56 deletions(-) diff --git a/cpp/examples/cpp_examples/cpp_examples.h b/cpp/examples/cpp_examples/cpp_examples.h index 7f877453..31ced477 100644 --- a/cpp/examples/cpp_examples/cpp_examples.h +++ b/cpp/examples/cpp_examples/cpp_examples.h @@ -20,6 +20,7 @@ #include "common/db_common.h" #include "common/path.h" #include "common/record.h" +#include "common/tablet.h" #include "common/row_record.h" #include "common/schema.h" #include "reader/expression.h" diff --git a/cpp/examples/cpp_examples/demo_read.cpp b/cpp/examples/cpp_examples/demo_read.cpp index 08424b9b..c5b759a0 100644 --- a/cpp/examples/cpp_examples/demo_read.cpp +++ b/cpp/examples/cpp_examples/demo_read.cpp @@ -82,6 +82,9 @@ int demo_read() { std::cout << "null" << std::endl; } else { switch (metadata->get_column_type(i)) { + case common::BOOLEAN: + std::cout << ret->get_value<bool>(i) << std::endl; + break; case common::INT32: std::cout << ret->get_value<int32_t>(i) << std::endl; break; @@ -95,7 +98,7 @@ int demo_read() { std::cout << ret->get_value<double>(i) << std::endl; break; case common::STRING: - std::cout << ret->get_value<std::string>(i) + std::cout << ret->get_value<common::String*>(i) << std::endl; break; default:; diff --git a/cpp/examples/cpp_examples/demo_write.cpp b/cpp/examples/cpp_examples/demo_write.cpp index 89879e8d..967a84d1 100644 --- a/cpp/examples/cpp_examples/demo_write.cpp +++ b/cpp/examples/cpp_examples/demo_write.cpp @@ -54,7 +54,7 @@ int demo_write() { table_name, {"id1", "id2", "s1"}, {common::STRING, common::STRING, common::INT32}, {common::ColumnCategory::TAG, common::ColumnCategory::TAG, - common::ColumnCategory::FIELD}) + common::ColumnCategory::FIELD}); for (int row = 0; row < 5; row++) { long timestamp = row; @@ -67,4 +67,5 @@ int demo_write() { writer->flush(); writer->close(); delete writer; + return 0; } diff --git a/cpp/src/common/tablet.cc b/cpp/src/common/tablet.cc index 181e9920..54f39df5 100644 --- a/cpp/src/common/tablet.cc +++ b/cpp/src/common/tablet.cc @@ -43,33 +43,40 @@ int Tablet::init() { } } ASSERT(schema_map_.size() == schema_count); - value_matrix_ = (ValueMatrixEntry *)malloc(sizeof(ValueMatrixEntry) * schema_count); + value_matrix_ = + (ValueMatrixEntry *)malloc(sizeof(ValueMatrixEntry) * schema_count); for (size_t c = 0; c < schema_count; ++c) { const MeasurementSchema &schema = schema_vec_->at(c); switch (schema.data_type_) { case BOOLEAN: - value_matrix_[c].bool_data = (bool *)malloc(get_data_type_size(schema.data_type_) * max_row_num_); + value_matrix_[c].bool_data = (bool *)malloc( + get_data_type_size(schema.data_type_) * max_row_num_); break; case INT32: - value_matrix_[c].int32_data = (int32_t *)malloc(get_data_type_size(schema.data_type_) * max_row_num_); + value_matrix_[c].int32_data = (int32_t *)malloc( + get_data_type_size(schema.data_type_) * max_row_num_); break; case INT64: - value_matrix_[c].int64_data = (int64_t *)malloc(get_data_type_size(schema.data_type_) * max_row_num_); + value_matrix_[c].int64_data = (int64_t *)malloc( + get_data_type_size(schema.data_type_) * max_row_num_); break; case FLOAT: - value_matrix_[c].float_data = (float *)malloc(get_data_type_size(schema.data_type_) * max_row_num_); + value_matrix_[c].float_data = (float *)malloc( + get_data_type_size(schema.data_type_) * max_row_num_); break; case DOUBLE: - value_matrix_[c].double_data = (double *)malloc(get_data_type_size(schema.data_type_) * max_row_num_); + value_matrix_[c].double_data = (double *)malloc( + get_data_type_size(schema.data_type_) * max_row_num_); break; case STRING: { - value_matrix_[c].string_data = (common::String *)malloc(sizeof(String) * max_row_num_); + value_matrix_[c].string_data = + (common::String *)malloc(sizeof(String) * max_row_num_); break; } default: ASSERT(false); - return E_INVALID_ARG; + return E_INVALID_ARG; } } @@ -92,24 +99,24 @@ void Tablet::destroy() { switch (schema.data_type_) { case INT32: free(value_matrix_[c].int32_data); - break; + break; case INT64: free(value_matrix_[c].int64_data); - break; + break; case FLOAT: free(value_matrix_[c].float_data); - break; + break; case DOUBLE: free(value_matrix_[c].double_data); - break; + break; case BOOLEAN: free(value_matrix_[c].bool_data); - break; + break; case STRING: free(value_matrix_[c].string_data); - break; + break; default: - break; + break; } } free(value_matrix_); @@ -133,11 +140,12 @@ int Tablet::add_timestamp(uint32_t row_index, int64_t timestamp) { return E_OK; } -void* Tablet::get_value(int row_index, uint32_t schema_index, common::TSDataType& data_type) const { +void *Tablet::get_value(int row_index, uint32_t schema_index, + common::TSDataType &data_type) const { if (UNLIKELY(schema_index >= schema_vec_->size())) { return nullptr; } - const MeasurementSchema& schema = schema_vec_->at(schema_index); + const MeasurementSchema &schema = schema_vec_->at(schema_index); ValueMatrixEntry column_values = value_matrix_[schema_index]; data_type = schema.data_type_; @@ -146,23 +154,23 @@ void* Tablet::get_value(int row_index, uint32_t schema_index, common::TSDataType } switch (schema.data_type_) { case BOOLEAN: { - bool* bool_values = column_values.bool_data; + bool *bool_values = column_values.bool_data; return &bool_values[row_index]; } case INT32: { - int32_t* int32_values = column_values.int32_data; + int32_t *int32_values = column_values.int32_data; return &int32_values[row_index]; } case INT64: { - int64_t* int64_values = column_values.int64_data; + int64_t *int64_values = column_values.int64_data; return &int64_values[row_index]; } case FLOAT: { - float* float_values = column_values.float_data; + float *float_values = column_values.float_data; return &float_values[row_index]; } case DOUBLE: { - double* double_values = column_values.double_data; + double *double_values = column_values.double_data; return &double_values[row_index]; } case STRING: { @@ -175,8 +183,10 @@ void* Tablet::get_value(int row_index, uint32_t schema_index, common::TSDataType } template <> -void Tablet::process_val(uint32_t row_index, uint32_t schema_index, common::String val) { - value_matrix_[schema_index].string_data[row_index].dup_from(val, page_arena_); +void Tablet::process_val(uint32_t row_index, uint32_t schema_index, + common::String val) { + value_matrix_[schema_index].string_data[row_index].dup_from(val, + page_arena_); bitmaps_[schema_index].clear(row_index); /* mark as non-null */ } @@ -184,20 +194,25 @@ template <typename T> void Tablet::process_val(uint32_t row_index, uint32_t schema_index, T val) { switch (schema_vec_->at(schema_index).data_type_) { case common::BOOLEAN: - (value_matrix_[schema_index].bool_data)[row_index] = static_cast<bool>(val); - break; + (value_matrix_[schema_index].bool_data)[row_index] = + static_cast<bool>(val); + break; case common::INT32: - value_matrix_[schema_index].int32_data[row_index] = static_cast<int32_t>(val); - break; + value_matrix_[schema_index].int32_data[row_index] = + static_cast<int32_t>(val); + break; case common::INT64: - value_matrix_[schema_index].int64_data[row_index] = static_cast<int64_t>(val); - break; + value_matrix_[schema_index].int64_data[row_index] = + static_cast<int64_t>(val); + break; case common::FLOAT: - value_matrix_[schema_index].float_data[row_index] = static_cast<float>(val); - break; + value_matrix_[schema_index].float_data[row_index] = + static_cast<float>(val); + break; case common::DOUBLE: - value_matrix_[schema_index].double_data[row_index] = static_cast<double>(val); - break; + value_matrix_[schema_index].double_data[row_index] = + static_cast<double>(val); + break; default: ASSERT(false); } @@ -216,13 +231,13 @@ int Tablet::add_value(uint32_t row_index, uint32_t schema_index, T val) { if (GetDataTypeFromTemplateType<T>() == common::INT32 && schema.data_type_ == common::INT64) { process_val(row_index, schema_index, static_cast<int64_t>(val)); - } else if (GetDataTypeFromTemplateType<T>() == common::FLOAT && - schema.data_type_ == common::DOUBLE) { - process_val(row_index, schema_index, static_cast<double>(val)); - } else { - ASSERT(false); - return E_TYPE_NOT_MATCH; - } + } else if (GetDataTypeFromTemplateType<T>() == common::FLOAT && + schema.data_type_ == common::DOUBLE) { + process_val(row_index, schema_index, static_cast<double>(val)); + } else { + ASSERT(false); + return E_TYPE_NOT_MATCH; + } } else { process_val(row_index, schema_index, val); } @@ -231,7 +246,8 @@ int Tablet::add_value(uint32_t row_index, uint32_t schema_index, T val) { } template <> -int Tablet::add_value(uint32_t row_index, uint32_t schema_index, common::String val) { +int Tablet::add_value(uint32_t row_index, uint32_t schema_index, + common::String val) { int ret = common::E_OK; if (UNLIKELY(schema_index >= schema_vec_->size())) { ASSERT(false); @@ -255,6 +271,13 @@ int Tablet::add_value(uint32_t row_index, const std::string &measurement_name, return ret; } +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)); +} + template int Tablet::add_value(uint32_t row_index, uint32_t schema_index, bool val); template int Tablet::add_value(uint32_t row_index, uint32_t schema_index, @@ -279,10 +302,11 @@ template int Tablet::add_value(uint32_t row_index, template int Tablet::add_value(uint32_t row_index, const std::string &measurement_name, double val); template int Tablet::add_value(uint32_t row_index, - const std::string &measurement_name, - String val); + const std::string &measurement_name, String val); + -void Tablet::set_column_categories(const std::vector<ColumnCategory>& column_categories) { +void Tablet::set_column_categories( + const std::vector<ColumnCategory> &column_categories) { column_categories_ = column_categories; id_column_indexes_.clear(); for (size_t i = 0; i < column_categories_.size(); i++) { @@ -298,15 +322,15 @@ std::shared_ptr<IDeviceID> Tablet::get_device_id(int i) const { id_array.push_back(insert_target_name_); for (auto id_column_idx : id_column_indexes_) { common::TSDataType data_type = INVALID_DATATYPE; - void* value_ptr = get_value(i, id_column_idx, data_type); + void *value_ptr = get_value(i, id_column_idx, data_type); common::String str; switch (data_type) { case STRING: - str = *static_cast<common::String*>(value_ptr); + str = *static_cast<common::String *>(value_ptr); id_array.push_back(str.to_std_string()); break; default: - break ; + break; } } return std::make_shared<StringArrayDeviceID>(id_array); diff --git a/cpp/src/cwrapper/tsfile_cwrapper.cc b/cpp/src/cwrapper/tsfile_cwrapper.cc index efe024b6..50fba728 100644 --- a/cpp/src/cwrapper/tsfile_cwrapper.cc +++ b/cpp/src/cwrapper/tsfile_cwrapper.cc @@ -26,6 +26,10 @@ #include "reader/tsfile_reader.h" #include "writer/tsfile_writer.h" +#ifdef __cplusplus +extern "C" { +#endif + static bool is_init = false; Tablet tablet_new_with_device(const char *device_id, char **column_name_list, @@ -74,6 +78,13 @@ ERRNO tablet_add_timestamp(Tablet tablet, uint32_t row_index, row_index, column_name, value); \ } +ERRNO tablet_add_value_by_name_string(Tablet tablet, uint32_t row_index, + const char* column_name, char* value) { + return static_cast<storage::Tablet *>(tablet)->add_value( + row_index, column_name, common::String(value)); + +} + TABLET_ADD_VALUE_BY_NAME_DEF(int32_t); TABLET_ADD_VALUE_BY_NAME_DEF(int64_t); TABLET_ADD_VALUE_BY_NAME_DEF(float); @@ -88,6 +99,14 @@ TABLET_ADD_VALUE_BY_NAME_DEF(bool); row_index, column_index, value); \ } +ERRNO tablet_add_value_by_index_string(Tablet tablet, uint32_t row_index, + uint32_t column_index, char* value) { + return static_cast<storage::Tablet *>(tablet)->add_value( + row_index, column_index, common::String(value)); + +} + + TABLE_ADD_VALUE_BY_INDEX_DEF(int32_t); TABLE_ADD_VALUE_BY_INDEX_DEF(int64_t); TABLE_ADD_VALUE_BY_INDEX_DEF(float); @@ -460,4 +479,8 @@ void free_table_schema(TableSchema schema) { } free(schema.column_schemas); } -void free_column_schema(ColumnSchema schema) { free(schema.column_name); } \ No newline at end of file +void free_column_schema(ColumnSchema schema) { free(schema.column_name); } + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/cpp/src/cwrapper/tsfile_cwrapper.h b/cpp/src/cwrapper/tsfile_cwrapper.h index 5c1e30fc..f0e4cdc6 100644 --- a/cpp/src/cwrapper/tsfile_cwrapper.h +++ b/cpp/src/cwrapper/tsfile_cwrapper.h @@ -124,7 +124,7 @@ Tablet tablet_new_with_device(const char* device_id, char** column_name_list, int max_rows); Tablet tablet_new(const char** column_name_list, TSDataType* data_types, - int column_num); + uint32_t column_num); uint32_t tablet_get_cur_row_size(Tablet tablet); @@ -133,7 +133,7 @@ ERRNO tablet_add_timestamp(Tablet tablet, uint32_t row_index, #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); + const char* column_name, type value); TABLET_ADD_VALUE_BY_NAME(int32_t); TABLET_ADD_VALUE_BY_NAME(int64_t); @@ -142,7 +142,7 @@ 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); + const 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, \ @@ -228,8 +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); +char* tsfile_result_set_get_value_by_index_string(ResultSet result_set, + uint32_t column_index); bool tsfile_result_set_is_null_by_name(ResultSet result_set, const char* column_name);