@@ -1273,8 +1273,9 @@ std::unordered_map<uint32_t, SafeBCFHdr> TileDBVCFDataset::fetch_vcf_headers(
12731273 do {
12741274 // Always reset buffer to avoid issue with core library and REST not using
12751275 // original buffer sizes
1276- query.set_buffer (" header" , offsets, data);
1277- query.set_buffer (" sample" , sample_data);
1276+ query.set_data_buffer (" header" , data);
1277+ query.set_offsets_buffer (" header" , offsets);
1278+ query.set_data_buffer (" sample" , sample_data);
12781279
12791280 status = query.submit ();
12801281
@@ -1749,11 +1750,13 @@ void TileDBVCFDataset::write_vcf_headers_v4(
17491750
17501751 query.set_layout (TILEDB_UNORDERED);
17511752 auto offsets_and_data = ungroup_var_buffer (headers);
1752- query.set_buffer (" header" , offsets_and_data);
1753+ query.set_data_buffer (" header" , offsets_and_data.second );
1754+ query.set_offsets_buffer (" header" , offsets_and_data.first );
17531755
17541756 auto sample_offsets_and_data = ungroup_var_buffer (samples);
17551757
1756- query.set_buffer (" sample" , sample_offsets_and_data);
1758+ query.set_data_buffer (" sample" , sample_offsets_and_data.second );
1759+ query.set_offsets_buffer (" sample" , sample_offsets_and_data.first );
17571760 auto st = query.submit ();
17581761 if (st != Query::Status::COMPLETE)
17591762 throw std::runtime_error (
@@ -1773,19 +1776,22 @@ void TileDBVCFDataset::write_vcf_headers_v2(
17731776
17741777 // Build data vector and subarray
17751778 std::vector<std::string> headers;
1776- std::vector<uint32_t > subarray = {
1779+ Subarray subarray = Subarray (array.schema ().context (), array);
1780+ std::pair<uint32_t , uint32_t > bounds = {
17771781 std::numeric_limits<uint32_t >::max (),
17781782 std::numeric_limits<uint32_t >::min ()};
17791783 for (const auto & pair : vcf_headers) {
1780- subarray[ 0 ] = std::min (subarray[ 0 ] , pair.first );
1781- subarray[ 1 ] = std::max (subarray[ 1 ] , pair.first );
1784+ bounds. first = std::min (bounds. first , pair.first );
1785+ bounds. second = std::max (bounds. second , pair.first );
17821786 headers.push_back (pair.second );
17831787 }
1788+ subarray.add_range (0 , bounds.first , bounds.second );
17841789
17851790 auto offsets_and_data = ungroup_var_buffer (headers);
17861791 query.set_layout (TILEDB_ROW_MAJOR)
17871792 .set_subarray (subarray)
1788- .set_buffer (" header" , offsets_and_data);
1793+ .set_data_buffer (" header" , offsets_and_data.second )
1794+ .set_offsets_buffer (" header" , offsets_and_data.first );
17891795 auto st = query.submit ();
17901796 if (st != Query::Status::COMPLETE)
17911797 throw std::runtime_error (
@@ -2138,7 +2144,10 @@ std::vector<std::string> TileDBVCFDataset::get_all_samples_from_vcf_headers()
21382144 auto non_empty_domain = vcf_header_array_->non_empty_domain_var (0 );
21392145 if (non_empty_domain.first .empty () && non_empty_domain.second .empty ())
21402146 return {};
2141- query.add_range (0 , non_empty_domain.first , non_empty_domain.second );
2147+ Subarray subarray =
2148+ Subarray (vcf_header_array_->schema ().context (), *vcf_header_array_);
2149+ subarray.add_range (0 , non_empty_domain.first , non_empty_domain.second );
2150+ query.set_subarray (subarray);
21422151 query.set_layout (TILEDB_ROW_MAJOR);
21432152
21442153 uint64_t sample_offset_element = 0 ;
@@ -2168,7 +2177,8 @@ std::vector<std::string> TileDBVCFDataset::get_all_samples_from_vcf_headers()
21682177 do {
21692178 // Always reset buffer to avoid issue with core library and REST not using
21702179 // original buffer sizes
2171- query.set_buffer (" sample" , sample_offsets, sample_data);
2180+ query.set_data_buffer (" sample" , sample_data);
2181+ query.set_offsets_buffer (" sample" , sample_offsets);
21722182
21732183 status = query.submit ();
21742184
0 commit comments