26 #include <unordered_set>
54 static void set(
const std::vector<ChunkKey>& key,
const HashType hash_type);
56 static std::pair<HashType, bool>
get(
const std::vector<ChunkKey>& key);
72 static std::shared_ptr<BaselineJoinHashTable>
getInstance(
73 const std::shared_ptr<Analyzer::BinOper> condition,
74 const std::vector<InputTableInfo>& query_infos,
77 const int device_count,
83 const Executor* executor,
84 const std::vector<InnerOuter>& inner_outer_pairs);
87 const int device_id = 0,
88 bool raw =
false)
const override;
91 const int device_id)
const override;
96 const size_t)
override;
119 return []() ->
void {
136 const std::vector<InputTableInfo>& query_infos,
140 const std::vector<InnerOuter>& inner_outer_pairs,
141 const int device_count);
152 const std::vector<Fragmenter_Namespace::FragmentInfo>& fragments,
168 const std::vector<
InnerOuter>& inner_outer_pairs) const;
175 const
size_t entry_count,
176 const
size_t emitted_keys_count,
177 const logger::
ThreadId parent_thread_id);
184 const Data_Namespace::
MemoryLevel effective_memory_level,
185 const
size_t entry_count,
186 const
size_t emitted_keys_count,
187 const
int device_id);
197 const HashTableCacheKey&) const;
Defines data structures for the semantic analysis phase of query processing.
size_t offsetBufferOff() const noexceptoverride
std::set< DecodedJoinHashBufferEntry > toSet(const ExecutorDeviceType device_type, const int device_id) const override
void putHashTableOnCpuToCache(const HashTableCacheKey &, std::shared_ptr< HashTable > &hash_table)
static std::unique_ptr< HashTableCache< HashTableCacheKey, HashTableCacheValue > > hash_table_cache_
std::string toString(const ExecutorDeviceType device_type, const int device_id=0, bool raw=false) const override
std::pair< const Analyzer::ColumnVar *, const Analyzer::Expr * > InnerOuter
Data_Namespace::MemoryLevel getEffectiveMemoryLevel(const std::vector< InnerOuter > &inner_outer_pairs) const
static std::mutex hash_type_cache_mutex_
std::shared_ptr< HashTable > HashTableCacheValue
static std::map< std::vector< ChunkKey >, HashType > hash_type_cache_
HashJoinMatchingSet codegenMatchingSet(const CompilationOptions &, const size_t) override
const size_t num_elements
size_t getKeyBufferSize() const noexcept
size_t getComponentBufferSize() const noexceptoverride
static std::shared_ptr< BaselineJoinHashTable > getInstance(const std::shared_ptr< Analyzer::BinOper > condition, const std::vector< InputTableInfo > &query_infos, const Data_Namespace::MemoryLevel memory_level, const HashType preferred_hash_type, const int device_count, ColumnCacheMap &column_cache, Executor *executor)
Make hash table from an in-flight SQL query's parse tree etc.
int getInnerTableRteIdx() const noexceptoverride
virtual void reifyForDevice(const ColumnsForDevice &columns_for_device, const HashType layout, const int device_id, const size_t entry_count, const size_t emitted_keys_count, const logger::ThreadId parent_thread_id)
virtual ColumnsForDevice fetchColumnsForDevice(const std::vector< Fragmenter_Namespace::FragmentInfo > &fragments, const int device_id, DeviceAllocator *dev_buff_owner)
const std::vector< InputTableInfo > & query_infos_
std::pair< std::optional< size_t >, size_t > getApproximateTupleCountFromCache(const HashTableCacheKey &) const
virtual llvm::Value * codegenKey(const CompilationOptions &)
static auto * getHashTableCache()
size_t payloadBufferOff() const noexceptoverride
std::vector< InnerOuter > inner_outer_pairs_
virtual ~BaselineJoinHashTable()
void reify(const HashType preferred_layout)
HashType getHashType() const noexceptoverride
ColumnCacheMap & column_cache_
BaselineJoinHashTable(const std::shared_ptr< Analyzer::BinOper > condition, const std::vector< InputTableInfo > &query_infos, const Data_Namespace::MemoryLevel memory_level, ColumnCacheMap &column_cache, Executor *executor, const std::vector< InnerOuter > &inner_outer_pairs, const int device_count)
size_t shardCount() const
std::string getHashJoinType() const final
Data_Namespace::MemoryLevel getMemoryLevel() const noexceptoverride
virtual std::pair< size_t, size_t > approximateTupleCount(const std::vector< ColumnsForDevice > &) const
virtual void reifyWithLayout(const HashType layout)
std::unordered_map< int, std::unordered_map< int, std::shared_ptr< const ColumnarResults >>> ColumnCacheMap
int getInnerTableId() const noexceptoverride
std::optional< HashType > layout_override_
const Catalog_Namespace::Catalog * catalog_
std::shared_ptr< HashTable > initHashTableOnCpuFromCache(const HashTableCacheKey &)
const Data_Namespace::MemoryLevel memory_level_
bool operator==(const struct HashTableCacheKey &that) const
llvm::Value * hashPtr(const size_t index)
virtual int initHashTableForDevice(const std::vector< JoinColumn > &join_columns, const std::vector< JoinColumnTypeInfo > &join_column_types, const std::vector< JoinBucketInfo > &join_buckets, const HashType layout, const Data_Namespace::MemoryLevel effective_memory_level, const size_t entry_count, const size_t emitted_keys_count, const int device_id)
llvm::Value * codegenSlot(const CompilationOptions &, const size_t) override
virtual size_t getKeyComponentCount() const
virtual size_t getKeyComponentWidth() const
std::mutex cpu_hash_table_buff_mutex_
Executor(const ExecutorId id, const size_t block_size_x, const size_t grid_size_x, const size_t max_gpu_slab_size, const std::string &debug_dir, const std::string &debug_file)
static size_t getShardCountForCondition(const Analyzer::BinOper *condition, const Executor *executor, const std::vector< InnerOuter > &inner_outer_pairs)
static void set(const std::vector< ChunkKey > &key, const HashType hash_type)
int getDeviceCount() const noexceptoverride
static auto getCacheInvalidator() -> std::function< void()>
const std::shared_ptr< Analyzer::BinOper > condition_
size_t countBufferOff() const noexceptoverride
const std::vector< ChunkKey > chunk_keys