322 if (consistent_frag_sizes.empty()) {
327 size_t group_buffer_size{0};
328 const size_t num_columns =
query_mem_desc.getBufferColSlotCount();
329 group_buffer_size = num_rows_ * num_columns *
sizeof(int64_t);
330 CHECK_GE(group_buffer_size,
size_t(0));
332 const auto index_buffer_qw =
336 const auto actual_group_buffer_size =
337 group_buffer_size + index_buffer_qw *
sizeof(int64_t);
338 CHECK_GE(actual_group_buffer_size, group_buffer_size);
341 auto group_by_buffer =
345 query_mem_desc, group_by_buffer + index_buffer_qw, init_agg_vals_, executor);
347 group_by_buffers_.push_back(group_by_buffer);
349 const auto column_frag_offsets =
351 const auto column_frag_sizes =
353 result_sets_.emplace_back(
363 executor->getCatalog(),
364 executor->blockSize(),
365 executor->gridSize()));
366 result_sets_.back()->allocateStorage(reinterpret_cast<int8_t*>(group_by_buffer),
std::vector< int64_t > get_consistent_frags_sizes(const std::vector< std::vector< uint64_t >> &frag_offsets)
static QueryMemoryDescriptor fixupQueryMemoryDescriptor(const QueryMemoryDescriptor &)
std::vector< TargetInfo > target_exprs_to_infos(const std::vector< Analyzer::Expr * > &targets, const QueryMemoryDescriptor &query_mem_desc)
int64_t * alloc_group_by_buffer(const size_t numBytes, RenderAllocatorMap *render_allocator_map, RowSetMemoryOwner *mem_owner)
std::vector< std::vector< int64_t > > get_col_frag_offsets(const std::vector< Analyzer::Expr * > &target_exprs, const std::vector< std::vector< uint64_t >> &table_frag_offsets)