@@ -349,26 +349,29 @@ static void ArrowToDuckDBBlob(Vector &vector, ArrowArray &array, const ArrowScan
349349 // ! Have to check validity mask before setting this up
350350 idx_t offset = GetEffectiveOffset (array, parent_offset, scan_state, nested_offset) * fixed_size;
351351 auto cdata = ArrowBufferData<char >(array, 1 );
352+ auto blob_len = fixed_size;
353+ auto result = FlatVector::GetData<string_t >(vector);
352354 for (idx_t row_idx = 0 ; row_idx < size; row_idx++) {
353355 if (FlatVector::IsNull (vector, row_idx)) {
356+ offset += blob_len;
354357 continue ;
355358 }
356359 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);
359361 offset += blob_len;
360362 }
361363 } else if (size_type == ArrowVariableSizeType::NORMAL) {
362364 auto offsets =
363365 ArrowBufferData<uint32_t >(array, 1 ) + GetEffectiveOffset (array, parent_offset, scan_state, nested_offset);
364366 auto cdata = ArrowBufferData<char >(array, 2 );
367+ auto result = FlatVector::GetData<string_t >(vector);
365368 for (idx_t row_idx = 0 ; row_idx < size; row_idx++) {
366369 if (FlatVector::IsNull (vector, row_idx)) {
367370 continue ;
368371 }
369372 auto bptr = cdata + offsets[row_idx];
370373 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);
372375 }
373376 } else {
374377 // ! Check if last offset is higher than max uint32
@@ -378,13 +381,14 @@ static void ArrowToDuckDBBlob(Vector &vector, ArrowArray &array, const ArrowScan
378381 auto offsets =
379382 ArrowBufferData<uint64_t >(array, 1 ) + GetEffectiveOffset (array, parent_offset, scan_state, nested_offset);
380383 auto cdata = ArrowBufferData<char >(array, 2 );
384+ auto result = FlatVector::GetData<string_t >(vector);
381385 for (idx_t row_idx = 0 ; row_idx < size; row_idx++) {
382386 if (FlatVector::IsNull (vector, row_idx)) {
383387 continue ;
384388 }
385389 auto bptr = cdata + offsets[row_idx];
386390 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);
388392 }
389393 }
390394}
0 commit comments