17 #ifndef QUERYENGINE_HASHJOINKEYHANDLERS_H
18 #define QUERYENGINE_HASHJOINKEYHANDLERS_H
39 const bool should_skip_entries,
44 const void*
const* sd_inner_proxy_per_key,
45 const void*
const* sd_outer_proxy_per_key
53 if (sd_inner_proxy_per_key) {
54 CHECK(sd_outer_proxy_per_key);
65 template <
typename T,
typename KEY_BUFF_HANDLER>
68 KEY_BUFF_HANDLER
f)
const {
69 bool skip_entry =
false;
71 ++key_component_index) {
72 const auto& join_column_iterator = join_column_iterators[key_component_index];
73 int64_t elem = (*join_column_iterator).element;
75 !join_column_iterator.type_info->uses_bw_eq) {
86 if (sd_inner_proxy && elem != join_column_iterator.type_info->null_val) {
87 CHECK(sd_outer_proxy);
88 const auto sd_inner_dict_proxy =
90 const auto sd_outer_dict_proxy =
92 const auto elem_str = sd_inner_dict_proxy->
getString(elem);
93 const auto outer_id = sd_outer_dict_proxy->getIdOfString(elem_str);
101 key_scratch_buff[key_component_index] = elem;
105 return f(join_column_iterators[0].index, key_scratch_buff, key_component_count_);
132 const double* bucket_sizes_for_dimension)
137 template <
typename T,
typename KEY_BUFF_HANDLER>
140 KEY_BUFF_HANDLER
f)
const {
152 for (int64_t x = floor(bounds[0] * x_bucket_sz); x <= floor(bounds[2] * x_bucket_sz);
154 for (int64_t y = floor(bounds[1] * y_bucket_sz);
155 y <= floor(bounds[3] * y_bucket_sz);
157 key_scratch_buff[0] = x;
158 key_scratch_buff[1] = y;
161 f(join_column_iterators[0].index, key_scratch_buff, key_dims_count_);
183 #endif // QUERYENGINE_HASHJOINKEYHANDLERS_H
DEVICE size_t get_key_component_count() const
const JoinColumn * join_column_per_key_
OverlapsKeyHandler(const size_t key_dims_count, const JoinColumn *join_column, const double *bucket_sizes_for_dimension)
DEVICE size_t get_number_of_columns() const
const size_t key_component_count_
const void *const * sd_inner_proxy_per_key_
DEVICE const JoinColumn * get_join_columns() const
const double * bucket_sizes_for_dimension_
std::string getString(int32_t string_id) const
DEVICE const JoinColumnTypeInfo * get_join_column_type_infos() const
const void *const * sd_outer_proxy_per_key_
static constexpr int32_t INVALID_STR_ID
Iterates over the rows of a JoinColumn across multiple fragments/chunks.
DEVICE size_t get_key_component_count() const
DEVICE int operator()(JoinColumnIterator *join_column_iterators, T *key_scratch_buff, KEY_BUFF_HANDLER f) const
const JoinColumnTypeInfo * type_info_per_key_
DEVICE const JoinColumn * get_join_columns() const
DEVICE int operator()(JoinColumnIterator *join_column_iterators, T *key_scratch_buff, KEY_BUFF_HANDLER f) const
DEVICE NEVER_INLINE double SUFFIX() fixed_width_double_decode_noinline(const int8_t *byte_stream, const int64_t pos)
DEVICE FORCE_INLINE const int8_t * ptr() const
GenericKeyHandler(const size_t key_component_count, const bool should_skip_entries, const JoinColumn *join_column_per_key, const JoinColumnTypeInfo *type_info_per_key, const void *const *sd_inner_proxy_per_key, const void *const *sd_outer_proxy_per_key)
const size_t key_dims_count_
DEVICE const JoinColumnTypeInfo * get_join_column_type_infos() const
DEVICE size_t get_number_of_columns() const
const JoinColumn * join_column_
const bool should_skip_entries_