vivek-kumar-Niel opened a new issue, #43198:
URL: https://github.com/apache/arrow/issues/43198
### Describe the bug, including details regarding any error messages,
version, and platform.
TEST_F(TestIn, TestInDecimal) {
int test = 5;
while(test--) {
int32_t precision = 38;
int32_t scale = 5;
auto decimal_type = std::make_shared<arrow::Decimal128Type>(precision,
scale);
// schema for input fields
auto field0 = field("f0", arrow::decimal(precision, scale));
auto schema = arrow::schema({field0});
// Build In f0 + f1 in (6, 11)
auto node_f0 = TreeExprBuilder::MakeField(field0);
gandiva::DecimalScalar128 d0("6", precision, scale);
gandiva::DecimalScalar128 d1("12", precision, scale);
gandiva::DecimalScalar128 d2("11", precision, scale);
std::unordered_set<gandiva::DecimalScalar128> in_constants({d0, d1, d2});
auto in_expr = TreeExprBuilder::MakeInExpressionDecimal(node_f0,
in_constants);
auto condition = TreeExprBuilder::MakeCondition(in_expr);
std::shared_ptr<Filter> filter;
auto status = Filter::Make(schema, condition, TestConfiguration(),
&filter);
EXPECT_TRUE(status.ok());
// Create a row-batch with some sample data
int num_records = 5;
auto values0 = MakeDecimalVector({"1", "2", "0", "-6", "6"});
auto array0 =
MakeArrowArrayDecimal(decimal_type, values0, {true, true, true, false,
true});
// expected output (indices for which condition matches)
auto exp = MakeArrowArrayUint16({4});
// prepare input record batch
auto in_batch = arrow::RecordBatch::Make(schema, num_records, {array0});
std::shared_ptr<SelectionVector> selection_vector;
status = SelectionVector::MakeInt16(num_records, pool_, &selection_vector);
EXPECT_TRUE(status.ok());
// Evaluate expression
status = filter->Evaluate(*in_batch, selection_vector);
EXPECT_TRUE(status.ok());
// Validate results
EXPECT_ARROW_ARRAY_EQUALS(exp, selection_vector->ToArray());
}
}
**running this test multiple times in a loop segfaults,**
**cause** : in function
bool fn_in_expr_lookup_decimal(int64_t ptr, int64_t value_high, int64_t
value_low,
int32_t precision, int32_t scale, bool
in_validity) {
if (!in_validity) {
return false;
}
bifrost::DecimalScalar128 value(value_high, value_low, precision, scale);
bifrost::InHolder<bifrost::DecimalScalar128>* holder =
reinterpret_cast<bifrost::InHolder<bifrost::DecimalScalar128>*>(ptr);
return **holder**->HasValue(value);
}
here the data value pointed by ptr for InHolder getting corrupted.
### Component(s)
C++
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]