in src/afs.cc [1202:1234]
arrow::Status build_may_null(uint64_t iTuple, uint64_t iTupleEnd)
{
bool haveNull = false;
uint64_t n = iTupleEnd - iTuple;
values_.resize(n);
validBytes_.resize(n);
for (uint64_t i = 0; i < n; ++i)
{
bool isNull;
auto datum = SPI_getbinval(SPI_tuptable->vals[iTuple + i],
SPI_tuptable->tupdesc,
iAttribute_ + 1,
&isNull);
if (isNull)
{
haveNull = true;
validBytes_[i] = 0;
}
else
{
validBytes_[i] = 1;
values_[i] = std::string(VARDATA_ANY(datum), VARSIZE_ANY_EXHDR(datum));
}
}
if (haveNull)
{
return builder_->AppendValues(values_, validBytes_.data());
}
else
{
return builder_->AppendValues(values_);
}
}