diff --git a/cpp/src/gandiva/to_date_holder.cc b/cpp/src/gandiva/to_date_holder.cc index 27a16d1779960..621a450d3aef0 100644 --- a/cpp/src/gandiva/to_date_holder.cc +++ b/cpp/src/gandiva/to_date_holder.cc @@ -51,7 +51,7 @@ Status ToDateHolder::Make(const FunctionNode& node, if (node.children().size() == 3) { auto literal_suppress_errors = dynamic_cast(node.children().at(2).get()); - if (literal_pattern == nullptr) { + if (literal_suppress_errors == nullptr) { return Status::Invalid( "The (optional) third parameter to 'to_date' function needs to an integer " "literal to indicate whether to suppress the error"); diff --git a/cpp/src/gandiva/to_date_holder_test.cc b/cpp/src/gandiva/to_date_holder_test.cc index 99036817d8e65..f56bab36ef772 100644 --- a/cpp/src/gandiva/to_date_holder_test.cc +++ b/cpp/src/gandiva/to_date_holder_test.cc @@ -30,14 +30,18 @@ namespace gandiva { class TestToDateHolder : public ::testing::Test { public: - FunctionNode BuildToDate(std::string pattern) { + FunctionNode BuildToDate(std::string pattern, + std::shared_ptr suppress_error_node = nullptr) { auto field = std::make_shared(arrow::field("in", arrow::utf8())); auto pattern_node = std::make_shared(arrow::utf8(), LiteralHolder(pattern), false); - auto suppress_error_node = - std::make_shared(arrow::int32(), LiteralHolder(0), false); - return FunctionNode("to_date_utf8_utf8_int32", - {field, pattern_node, suppress_error_node}, arrow::int64()); + if (suppress_error_node == nullptr) { + suppress_error_node = + std::make_shared(arrow::int32(), LiteralHolder(0), false); + } + return {"to_date_utf8_utf8_int32", + {field, pattern_node, std::move(suppress_error_node)}, + arrow::int64()}; } protected: @@ -178,4 +182,16 @@ TEST_F(TestToDateHolder, TestSimpleDateYear) { EXPECT_EQ(millis_since_epoch, 915148800000); } +TEST_F(TestToDateHolder, TestMakeFromFunctionNode) { + std::shared_ptr to_date_holder; + auto to_date_func = BuildToDate("YYYY"); + ASSERT_OK(ToDateHolder::Make(to_date_func, &to_date_holder)); +} + +TEST_F(TestToDateHolder, TestMakeFromInvalidSurpressParamFunctionNode) { + std::shared_ptr to_date_holder; + auto non_literal_param = std::make_shared(arrow::field("in", arrow::utf8())); + auto to_date_func = BuildToDate("YYYY", std::move(non_literal_param)); + ASSERT_RAISES(Invalid, ToDateHolder::Make(to_date_func, &to_date_holder)); +} } // namespace gandiva