You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ra...@apache.org on 2019/06/14 14:11:25 UTC
[arrow] branch master updated: ARROW-5601: [C++][Gandiva] fail if
the output type is not supported
This is an automated email from the ASF dual-hosted git repository.
ravindra pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new f8cd263 ARROW-5601: [C++][Gandiva] fail if the output type is not supported
f8cd263 is described below
commit f8cd2639b2f36b3d84dceaead8a1d0b3ed493c2c
Author: Pindikura Ravindra <ra...@dremio.com>
AuthorDate: Fri Jun 14 19:41:01 2019 +0530
ARROW-5601: [C++][Gandiva] fail if the output type is not supported
Author: Pindikura Ravindra <ra...@dremio.com>
Closes #4569 from pravindra/arrow-5601 and squashes the following commits:
bee31332 <Pindikura Ravindra> ARROW-5601: fail if the output type is not supported
---
cpp/src/gandiva/llvm_generator.cc | 9 +++++++--
cpp/src/gandiva/tests/utf8_test.cc | 17 +++++++++++++++++
2 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/cpp/src/gandiva/llvm_generator.cc b/cpp/src/gandiva/llvm_generator.cc
index 28887c9..867f07b 100644
--- a/cpp/src/gandiva/llvm_generator.cc
+++ b/cpp/src/gandiva/llvm_generator.cc
@@ -318,11 +318,16 @@ Status LLVMGenerator::CodeGenExprValue(DexPtr value_expr, FieldDescriptorPtr out
// save the value in the output vector.
builder->SetInsertPoint(loop_body_tail);
- if (output->Type()->id() == arrow::Type::BOOL) {
+ auto output_type_id = output->Type()->id();
+ if (output_type_id == arrow::Type::BOOL) {
SetPackedBitValue(output_ref, loop_var, output_value->data());
- } else {
+ } else if (arrow::is_primitive(output_type_id) ||
+ output_type_id == arrow::Type::DECIMAL) {
llvm::Value* slot_offset = builder->CreateGEP(output_ref, loop_var);
builder->CreateStore(output_value->data(), slot_offset);
+ } else {
+ return Status::NotImplemented("output type ", output->Type()->ToString(),
+ " not supported");
}
ADD_TRACE("saving result " + output->Name() + " value %T", output_value->data());
diff --git a/cpp/src/gandiva/tests/utf8_test.cc b/cpp/src/gandiva/tests/utf8_test.cc
index 8129169..6df4da6 100644
--- a/cpp/src/gandiva/tests/utf8_test.cc
+++ b/cpp/src/gandiva/tests/utf8_test.cc
@@ -504,4 +504,21 @@ TEST_F(TestUtf8, TestIsNull) {
outputs[1]); // isnotnull
}
+TEST_F(TestUtf8, TestVarlenOutput) {
+ // schema for input fields
+ auto field_a = field("a", utf8());
+ auto schema = arrow::schema({field_a});
+
+ // build expressions.
+ auto expr = TreeExprBuilder::MakeExpression(TreeExprBuilder::MakeField(field_a),
+ field("res", utf8()));
+
+ // Build a projector for the expressions.
+ std::shared_ptr<Projector> projector;
+
+ // assert that it fails gracefully.
+ ASSERT_RAISES(NotImplemented,
+ Projector::Make(schema, {expr}, TestConfiguration(), &projector));
+}
+
} // namespace gandiva