| 1324 | protected: |
| 1325 | template <typename ArrayType> |
| 1326 | void PutBinaryArray(const ArrayType& array) { |
| 1327 | PARQUET_THROW_NOT_OK(::arrow::VisitArraySpanInline<typename ArrayType::TypeClass>( |
| 1328 | *array.data(), |
| 1329 | [&](::std::string_view view) { |
| 1330 | if (ARROW_PREDICT_FALSE(view.size() > kMaxByteArraySize)) { |
| 1331 | return Status::Invalid( |
| 1332 | "Parquet cannot store strings with size 2GB or more, got: ", view.size()); |
| 1333 | } |
| 1334 | if (ARROW_PREDICT_FALSE( |
| 1335 | view.size() + sink_.length() > |
| 1336 | static_cast<size_t>(std::numeric_limits<int32_t>::max()))) { |
| 1337 | return Status::Invalid("excess expansion in DELTA_LENGTH_BYTE_ARRAY"); |
| 1338 | } |
| 1339 | length_encoder_.Put({static_cast<int32_t>(view.length())}, 1); |
| 1340 | PARQUET_THROW_NOT_OK(sink_.Append(view.data(), view.length())); |
| 1341 | unencoded_byte_array_data_bytes_ += view.size(); |
| 1342 | return Status::OK(); |
| 1343 | }, |
| 1344 | []() { return Status::OK(); })); |
| 1345 | } |
| 1346 | |
| 1347 | ::arrow::BufferBuilder sink_; |
| 1348 | DeltaBitPackEncoder<Int32Type> length_encoder_; |