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

jiangtian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new ea195168a95 Feature/cppclient asan (#16293)
ea195168a95 is described below

commit ea195168a958edd8e6ae17437119c06aa724d423
Author: Hongzhi Gao <761417...@qq.com>
AuthorDate: Thu Aug 28 18:27:38 2025 +0800

    Feature/cppclient asan (#16293)
    
    * implement client-cpp memory check(asan)
    
    * fix ubuntu compilation
    
    * fix compilation error
    
    * fix memory leak
    
    * fix conpilation error on moacos
---
 iotdb-client/client-cpp/src/main/CMakeLists.txt    |  5 +++++
 iotdb-client/client-cpp/src/test/CMakeLists.txt    |  5 +++++
 iotdb-client/client-cpp/src/test/cpp/sessionIT.cpp | 16 ++++++++--------
 3 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/iotdb-client/client-cpp/src/main/CMakeLists.txt 
b/iotdb-client/client-cpp/src/main/CMakeLists.txt
index c6924060ba9..5cf503c4efc 100644
--- a/iotdb-client/client-cpp/src/main/CMakeLists.txt
+++ b/iotdb-client/client-cpp/src/main/CMakeLists.txt
@@ -41,6 +41,11 @@ ELSE()
     SET(THRIFT_STATIC_LIB "${CMAKE_SOURCE_DIR}/../../thrift/lib/libthrift.a")
 ENDIF()
 
+IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" AND NOT MSVC)
+    add_compile_options(-fsanitize=address -fno-omit-frame-pointer)
+    add_link_options(-fsanitize=address)
+ENDIF()
+
 # Add the generated source files to the sources for the library.
 AUX_SOURCE_DIRECTORY(./generated-sources-cpp SESSION_SRCS)
 IF(MSVC)
diff --git a/iotdb-client/client-cpp/src/test/CMakeLists.txt 
b/iotdb-client/client-cpp/src/test/CMakeLists.txt
index 186c08b634d..61fade6bf5c 100644
--- a/iotdb-client/client-cpp/src/test/CMakeLists.txt
+++ b/iotdb-client/client-cpp/src/test/CMakeLists.txt
@@ -47,6 +47,11 @@ ELSE()
     SET(THRIFT_STATIC_LIB "${CMAKE_SOURCE_DIR}/../../thrift/lib/libthrift.a")
 ENDIF()
 
+IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" AND NOT MSVC)
+    add_compile_options(-fsanitize=address -fno-omit-frame-pointer)
+    add_link_options(-fsanitize=address)
+ENDIF()
+
 ADD_EXECUTABLE(${TARGET_NAME} main.cpp cpp/sessionIT.cpp)
 ADD_EXECUTABLE(${TARGET_NAME_RELATIONAL} main_Relational.cpp 
cpp/sessionRelationalIT.cpp)
 
diff --git a/iotdb-client/client-cpp/src/test/cpp/sessionIT.cpp 
b/iotdb-client/client-cpp/src/test/cpp/sessionIT.cpp
index 18ccb2a8393..d08e0c3fbb0 100644
--- a/iotdb-client/client-cpp/src/test/cpp/sessionIT.cpp
+++ b/iotdb-client/client-cpp/src/test/cpp/sessionIT.cpp
@@ -141,7 +141,8 @@ TEST_CASE("Test insertRecord by string", 
"[testInsertRecord]") {
     while (sessionDataSet->hasNext()) {
         long index = 1;
         count++;
-        for (const Field &f: sessionDataSet->next()->fields) {
+        auto fields = sessionDataSet->next()->fields;
+        for (const Field &f: fields) {
             REQUIRE(f.longV.value() == index);
             index++;
         }
@@ -186,7 +187,8 @@ TEST_CASE("Test insertRecords ", "[testInsertRecords]") {
     while (sessionDataSet->hasNext()) {
         long index = 1;
         count++;
-        for (const Field &f: sessionDataSet->next()->fields) {
+        auto fields = sessionDataSet->next()->fields;
+        for (const Field &f: fields) {
             REQUIRE(f.longV.value() == index);
             index++;
         }
@@ -386,7 +388,8 @@ TEST_CASE("Test insertTablet ", "[testInsertTablet]") {
     while (sessionDataSet->hasNext()) {
         long index = 0;
         count++;
-        for (const Field& f: sessionDataSet->next()->fields) {
+        auto fields = sessionDataSet->next()->fields;
+        for (const Field &f: fields) {
             REQUIRE(f.longV.value() == index);
             index++;
         }
@@ -436,7 +439,8 @@ TEST_CASE("Test insertTablets ", "[testInsertTablets]") {
     while (sessionDataSet->hasNext()) {
         long index = 0;
         count++;
-        for (const Field& f: sessionDataSet->next()->fields) {
+        auto fields = sessionDataSet->next()->fields;
+        for (const Field &f: fields) {
             REQUIRE(f.longV.value() == index);
             index++;
         }
@@ -614,10 +618,6 @@ TEST_CASE("Test executeRawDataQuery ", 
"[executeRawDataQuery]") {
     sessionDataSet->setFetchSize(10);
     vector<string> columns = sessionDataSet->getColumnNames();
     columns = sessionDataSet->getColumnNames();
-    for (const string &column : columns) {
-        cout << column << " " ;
-    }
-    cout << endl;
     REQUIRE(columns[0] == "Time");
     REQUIRE(columns[1] == paths[0]);
     REQUIRE(columns[2] == paths[1]);

Reply via email to