Skip to content

Commit

Permalink
ARROW-7734: [C++] check status details for nullptr in equality
Browse files Browse the repository at this point in the history
  • Loading branch information
lidavidm committed Feb 1, 2020
1 parent bd08d0e commit 9084bce
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 2 deletions.
8 changes: 6 additions & 2 deletions cpp/src/arrow/status.h
Expand Up @@ -292,6 +292,7 @@ class ARROW_EXPORT Status : public util::EqualityComparable<Status>,
}

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.
///
Expand Down Expand Up @@ -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();
Expand Down
13 changes: 13 additions & 0 deletions cpp/src/arrow/status_test.cc
Expand Up @@ -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<TestStatusDetail>());
const auto status_with_detail2 =
arrow::Status(StatusCode::IOError, "", std::make_shared<TestStatusDetail>());
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

0 comments on commit 9084bce

Please sign in to comment.