From 9084bcec737c77535ec9e7fc39d8cb16ac8bbf68 Mon Sep 17 00:00:00 2001
From: David Li
Date: Fri, 31 Jan 2020 19:24:50 -0500
Subject: [PATCH] ARROW-7734: [C++] check status details for nullptr in
equality
---
cpp/src/arrow/status.h | 8 ++++++--
cpp/src/arrow/status_test.cc | 13 +++++++++++++
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/cpp/src/arrow/status.h b/cpp/src/arrow/status.h
index c44e311b7b2..df3ea6b9af6 100644
--- a/cpp/src/arrow/status.h
+++ b/cpp/src/arrow/status.h
@@ -292,6 +292,7 @@ class ARROW_EXPORT Status : public util::EqualityComparable,
}
bool IsExecutionError() const { return code() == StatusCode::ExecutionError; }
+ bool IsAlreadyExists() const { return code() == StatusCode::AlreadyExists; }
/// \brief Return a string representation of this status suitable for printing.
///
@@ -385,8 +386,11 @@ bool Status::Equals(const Status& s) const {
return false;
}
- if (detail() != s.detail() && !(*detail() == *s.detail())) {
- return false;
+ if (detail() != s.detail()) {
+ if ((detail() && !s.detail()) || (!detail() && s.detail())) {
+ return false;
+ }
+ return *detail() == *s.detail();
}
return code() == s.code() && message() == s.message();
diff --git a/cpp/src/arrow/status_test.cc b/cpp/src/arrow/status_test.cc
index 593ad2194bf..fc5a7ec45cf 100644
--- a/cpp/src/arrow/status_test.cc
+++ b/cpp/src/arrow/status_test.cc
@@ -114,4 +114,17 @@ TEST(StatusTest, TestEquality) {
ASSERT_NE(Status::Invalid("error"), Status::Invalid("other error"));
}
+TEST(StatusTest, TestDetailEquality) {
+ const auto status_with_detail =
+ arrow::Status(StatusCode::IOError, "", std::make_shared());
+ const auto status_with_detail2 =
+ arrow::Status(StatusCode::IOError, "", std::make_shared());
+ const auto status_without_detail = arrow::Status::IOError("");
+
+ ASSERT_EQ(*status_with_detail.detail(), *status_with_detail2.detail());
+ ASSERT_EQ(status_with_detail, status_with_detail2);
+ ASSERT_NE(status_with_detail, status_without_detail);
+ ASSERT_NE(status_without_detail, status_with_detail);
+}
+
} // namespace arrow