From 5a3bb9183422016c5c606067b9c9f1077d57d614 Mon Sep 17 00:00:00 2001 From: spapadop Date: Wed, 13 Jul 2016 13:22:15 -0400 Subject: [PATCH 1/2] Bug fix in multi-fragment read. --- core/include/c_api/constants.h | 2 +- core/src/array/array_read_state.cc | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/core/include/c_api/constants.h b/core/include/c_api/constants.h index 7def14b8..9187c1d8 100644 --- a/core/include/c_api/constants.h +++ b/core/include/c_api/constants.h @@ -37,7 +37,7 @@ #include /** Version. */ -#define TILEDB_VERSION "0.3.1" +#define TILEDB_VERSION "0.3.2" /**@{*/ /** Return code. */ diff --git a/core/src/array/array_read_state.cc b/core/src/array/array_read_state.cc index 0e16b8f5..dc423372 100644 --- a/core/src/array/array_read_state.cc +++ b/core/src/array/array_read_state.cc @@ -1514,8 +1514,21 @@ int ArrayReadState::sort_fragment_cell_ranges( if(pq.empty()) { popped->export_to(result); fragment_cell_ranges.push_back(result); + fid = popped->fragment_id_; delete popped; - break; + + if(rid[fid] == rlen[fid]) { + break; + } else { + pq_fragment_cell_range = new PQFragmentCellRange( + array_schema_, + &fragment_read_states_); + pq_fragment_cell_range->import_from( + unsorted_fragment_cell_ranges[fid][rid[fid]]); + pq.push(pq_fragment_cell_range); + ++rid[fid]; + continue; + } } // Mark the second entry (now top) as top From 190b78dca770e3518fbd0bd4000bdcef8571de4a Mon Sep 17 00:00:00 2001 From: spapadop Date: Thu, 14 Jul 2016 13:22:33 -0400 Subject: [PATCH 2/2] Bug fix in reset_subarray --- core/src/array/array_read_state.cc | 3 ++- core/src/fragment/read_state.cc | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/array/array_read_state.cc b/core/src/array/array_read_state.cc index dc423372..4d6b7e01 100644 --- a/core/src/array/array_read_state.cc +++ b/core/src/array/array_read_state.cc @@ -1510,7 +1510,8 @@ int ArrayReadState::sort_fragment_cell_ranges( popped = pq.top(); pq.pop(); - // Last range - just insert it into the results and stop + // Last range - insert it into the results and get the next range + // for that fragment if(pq.empty()) { popped->export_to(result); fragment_cell_ranges.push_back(result); diff --git a/core/src/fragment/read_state.cc b/core/src/fragment/read_state.cc index 7eedf981..183d316d 100644 --- a/core/src/fragment/read_state.cc +++ b/core/src/fragment/read_state.cc @@ -229,6 +229,9 @@ void ReadState::reset() { done_ = false; search_tile_pos_ = -1; compute_tile_search_range(); + + for(int i=0; i