17 #ifndef COLUMNAR_RESULTS_H
18 #define COLUMNAR_RESULTS_H
22 #include "../Shared/checked_alloc.h"
25 #include <unordered_map>
31 "Columnar conversion not supported for variable length types") {}
43 :
bitmaps_(num_banks, std::vector<bool>(num_elements_per_bank,
false)) {}
45 inline bool get(
const size_t index,
const size_t bank_index)
const {
51 inline void set(
const size_t index,
const size_t bank_index,
const bool val) {
63 ColumnarResults(
const std::shared_ptr<RowSetMemoryOwner> row_set_mem_owner,
64 const ResultSet& rows,
65 const size_t num_columns,
66 const std::vector<SQLTypeInfo>& target_types,
67 const size_t thread_idx,
68 const bool is_parallel_execution_enforced =
false);
70 ColumnarResults(
const std::shared_ptr<RowSetMemoryOwner> row_set_mem_owner,
71 const int8_t* one_col_buffer,
72 const size_t num_rows,
74 const size_t thread_idx);
77 const std::shared_ptr<RowSetMemoryOwner> row_set_mem_owner,
78 const std::vector<std::unique_ptr<ColumnarResults>>& sub_results);
96 std::function<int64_t(const ResultSet&, const size_t, const size_t, const size_t)>;
115 const size_t row_idx,
116 const size_t column_idx);
119 const size_t num_columns);
128 const ResultSet& rows,
129 const size_t num_columns);
131 const ResultSet& rows,
132 const size_t num_columns);
136 std::vector<size_t>& non_empty_per_thread,
137 const size_t entry_count,
138 const size_t num_threads,
139 const size_t size_per_thread)
const;
142 const std::vector<size_t>& non_empty_per_thread,
143 const size_t num_columns,
144 const size_t entry_count,
145 const size_t num_threads,
146 const size_t size_per_thread);
148 const ResultSet& rows,
150 const std::vector<size_t>& non_empty_per_thread,
151 const std::vector<size_t>& global_offsets,
152 const std::vector<bool>& targets_to_skip,
153 const std::vector<size_t>& slot_idx_per_target_idx,
154 const size_t num_columns,
155 const size_t entry_count,
156 const size_t num_threads,
157 const size_t size_per_thread);
159 const ResultSet& rows,
161 const std::vector<size_t>& non_empty_per_thread,
162 const std::vector<size_t>& global_offsets,
163 const std::vector<size_t>& slot_idx_per_target_idx,
164 const size_t num_columns,
165 const size_t entry_count,
166 const size_t num_threads,
167 const size_t size_per_thread);
169 template <
typename DATA_TYPE>
171 const size_t input_buffer_entry_idx,
172 const size_t output_buffer_entry_idx,
173 const size_t target_idx,
174 const size_t slot_idx,
178 const ResultSet& rows,
179 const std::vector<bool>& targets_to_skip = {});
181 template <QueryDescriptionType QUERY_TYPE,
bool COLUMNAR_OUTPUT>
183 const ResultSet& rows,
184 const std::vector<size_t>& slot_idx_per_target_idx,
185 const std::vector<bool>& targets_to_skip = {});
187 std::tuple<std::vector<WriteFunction>, std::vector<ReadFunction>>
189 const std::vector<size_t>& slot_idx_per_target_idx,
190 const std::vector<bool>& targets_to_skip = {});
200 std::unordered_map<int,
201 std::unordered_map<int, std::shared_ptr<const ColumnarResults>>>;
203 #endif // COLUMNAR_RESULTS_H
bool isParallelConversion() const
std::vector< int8_t * > column_buffers_
static std::unique_ptr< ColumnarResults > mergeResults(const std::shared_ptr< RowSetMemoryOwner > row_set_mem_owner, const std::vector< std::unique_ptr< ColumnarResults >> &sub_results)
std::vector< ReadFunction > initReadFunctions(const ResultSet &rows, const std::vector< size_t > &slot_idx_per_target_idx, const std::vector< bool > &targets_to_skip={})
void locateAndCountEntries(const ResultSet &rows, ColumnBitmap &bitmap, std::vector< size_t > &non_empty_per_thread, const size_t entry_count, const size_t num_threads, const size_t size_per_thread) const
void set(const size_t index, const size_t bank_index, const bool val)
bool direct_columnar_conversion_
void compactAndCopyEntries(const ResultSet &rows, const ColumnBitmap &bitmap, const std::vector< size_t > &non_empty_per_thread, const size_t num_columns, const size_t entry_count, const size_t num_threads, const size_t size_per_thread)
ColumnarResults(const std::shared_ptr< RowSetMemoryOwner > row_set_mem_owner, const ResultSet &rows, const size_t num_columns, const std::vector< SQLTypeInfo > &target_types, const size_t thread_idx, const bool is_parallel_execution_enforced=false)
std::function< int64_t(const ResultSet &, const size_t, const size_t, const size_t)> ReadFunction
std::function< void(const ResultSet &, const size_t, const size_t, const size_t, const size_t, const ReadFunction &)> WriteFunction
void materializeAllColumnsThroughIteration(const ResultSet &rows, const size_t num_columns)
ColumnarResults(const size_t num_rows, const std::vector< SQLTypeInfo > &target_types)
const size_t size() const
ColumnarConversionNotSupported()
std::vector< WriteFunction > initWriteFunctions(const ResultSet &rows, const std::vector< bool > &targets_to_skip={})
void materializeAllColumnsGroupBy(const ResultSet &rows, const size_t num_columns)
std::tuple< std::vector< WriteFunction >, std::vector< ReadFunction > > initAllConversionFunctions(const ResultSet &rows, const std::vector< size_t > &slot_idx_per_target_idx, const std::vector< bool > &targets_to_skip={})
bool isDirectColumnarConversionPossible() const
std::unordered_map< int, std::unordered_map< int, std::shared_ptr< const ColumnarResults >>> ColumnCacheMap
void materializeAllColumnsDirectly(const ResultSet &rows, const size_t num_columns)
void writeBackCellDirect(const ResultSet &rows, const size_t input_buffer_entry_idx, const size_t output_buffer_entry_idx, const size_t target_idx, const size_t slot_idx, const ReadFunction &read_function)
ColumnBitmap(const size_t num_elements_per_bank, size_t num_banks)
void writeBackCell(const TargetValue &col_val, const size_t row_idx, const size_t column_idx)
void copyAllNonLazyColumns(const std::vector< ColumnLazyFetchInfo > &lazy_fetch_info, const ResultSet &rows, const size_t num_columns)
std::vector< std::vector< bool > > bitmaps_
bool g_enable_watchdog false
void materializeAllColumnsProjection(const ResultSet &rows, const size_t num_columns)
bool parallel_conversion_
Basic constructors and methods of the row set interface.
boost::variant< ScalarTargetValue, ArrayTargetValue, GeoTargetValue, GeoTargetValuePtr > TargetValue
void compactAndCopyEntriesWithTargetSkipping(const ResultSet &rows, const ColumnBitmap &bitmap, const std::vector< size_t > &non_empty_per_thread, const std::vector< size_t > &global_offsets, const std::vector< bool > &targets_to_skip, const std::vector< size_t > &slot_idx_per_target_idx, const size_t num_columns, const size_t entry_count, const size_t num_threads, const size_t size_per_thread)
void compactAndCopyEntriesWithoutTargetSkipping(const ResultSet &rows, const ColumnBitmap &bitmap, const std::vector< size_t > &non_empty_per_thread, const std::vector< size_t > &global_offsets, const std::vector< size_t > &slot_idx_per_target_idx, const size_t num_columns, const size_t entry_count, const size_t num_threads, const size_t size_per_thread)
const std::vector< int8_t * > & getColumnBuffers() const
const std::vector< SQLTypeInfo > target_types_
void materializeAllLazyColumns(const std::vector< ColumnLazyFetchInfo > &lazy_fetch_info, const ResultSet &rows, const size_t num_columns)
const SQLTypeInfo & getColumnType(const int col_id) const