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);
 

Reply via email to