@@ -349,26 +349,29 @@ static void ArrowToDuckDBBlob(Vector &vector, ArrowArray &array, const ArrowScan
349
349
// ! Have to check validity mask before setting this up
350
350
idx_t offset = GetEffectiveOffset (array, parent_offset, scan_state, nested_offset) * fixed_size;
351
351
auto cdata = ArrowBufferData<char >(array, 1 );
352
+ auto blob_len = fixed_size;
353
+ auto result = FlatVector::GetData<string_t >(vector);
352
354
for (idx_t row_idx = 0 ; row_idx < size; row_idx++) {
353
355
if (FlatVector::IsNull (vector, row_idx)) {
356
+ offset += blob_len;
354
357
continue ;
355
358
}
356
359
auto bptr = cdata + offset;
357
- auto blob_len = fixed_size;
358
- FlatVector::GetData<string_t >(vector)[row_idx] = StringVector::AddStringOrBlob (vector, bptr, blob_len);
360
+ result[row_idx] = StringVector::AddStringOrBlob (vector, bptr, blob_len);
359
361
offset += blob_len;
360
362
}
361
363
} else if (size_type == ArrowVariableSizeType::NORMAL) {
362
364
auto offsets =
363
365
ArrowBufferData<uint32_t >(array, 1 ) + GetEffectiveOffset (array, parent_offset, scan_state, nested_offset);
364
366
auto cdata = ArrowBufferData<char >(array, 2 );
367
+ auto result = FlatVector::GetData<string_t >(vector);
365
368
for (idx_t row_idx = 0 ; row_idx < size; row_idx++) {
366
369
if (FlatVector::IsNull (vector, row_idx)) {
367
370
continue ;
368
371
}
369
372
auto bptr = cdata + offsets[row_idx];
370
373
auto blob_len = offsets[row_idx + 1 ] - offsets[row_idx];
371
- FlatVector::GetData< string_t >(vector) [row_idx] = StringVector::AddStringOrBlob (vector, bptr, blob_len);
374
+ result [row_idx] = StringVector::AddStringOrBlob (vector, bptr, blob_len);
372
375
}
373
376
} else {
374
377
// ! Check if last offset is higher than max uint32
@@ -378,13 +381,14 @@ static void ArrowToDuckDBBlob(Vector &vector, ArrowArray &array, const ArrowScan
378
381
auto offsets =
379
382
ArrowBufferData<uint64_t >(array, 1 ) + GetEffectiveOffset (array, parent_offset, scan_state, nested_offset);
380
383
auto cdata = ArrowBufferData<char >(array, 2 );
384
+ auto result = FlatVector::GetData<string_t >(vector);
381
385
for (idx_t row_idx = 0 ; row_idx < size; row_idx++) {
382
386
if (FlatVector::IsNull (vector, row_idx)) {
383
387
continue ;
384
388
}
385
389
auto bptr = cdata + offsets[row_idx];
386
390
auto blob_len = offsets[row_idx + 1 ] - offsets[row_idx];
387
- FlatVector::GetData< string_t >(vector) [row_idx] = StringVector::AddStringOrBlob (vector, bptr, blob_len);
391
+ result [row_idx] = StringVector::AddStringOrBlob (vector, bptr, blob_len);
388
392
}
389
393
}
390
394
}
0 commit comments