diff --git a/cpp/src/arrow/compute/expression.cc b/cpp/src/arrow/compute/expression.cc index 3c2ec100402..2563674a59c 100644 --- a/cpp/src/arrow/compute/expression.cc +++ b/cpp/src/arrow/compute/expression.cc @@ -687,7 +687,8 @@ Result MakeExecBatch(const Schema& full_schema, const Datum& partial, } // wasteful but useful for testing: - if (partial.type()->id() == Type::STRUCT) { + const auto& partial_type = partial.type(); + if (partial_type && partial_type->id() == Type::STRUCT) { if (partial.is_array()) { ARROW_ASSIGN_OR_RAISE(auto partial_batch, RecordBatch::FromStructArray(partial.make_array())); diff --git a/cpp/src/arrow/compute/expression_test.cc b/cpp/src/arrow/compute/expression_test.cc index bbab57feebb..5e1f3c093ee 100644 --- a/cpp/src/arrow/compute/expression_test.cc +++ b/cpp/src/arrow/compute/expression_test.cc @@ -224,6 +224,9 @@ TEST(ExpressionUtils, MakeExecBatch) { auto duplicated_names = RecordBatch::Make(schema({GetField("i32"), GetField("i32")}), kNumRows, {i32, i32}); ASSERT_RAISES(Invalid, MakeExecBatch(*kBoringSchema, duplicated_names)); + + ASSERT_OK_AND_ASSIGN(auto boring_table, Table::MakeEmpty(kBoringSchema)); + ASSERT_RAISES(NotImplemented, MakeExecBatch(*kBoringSchema, boring_table)); } class WidgetifyOptions : public compute::FunctionOptions {