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 <[email protected]>
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]);