38 #include <llvm/IR/Value.h> 55 static std::shared_ptr<PerfectJoinHashTable>
getInstance(
56 const std::shared_ptr<Analyzer::BinOper> qual_bin_oper,
57 const std::vector<InputTableInfo>& query_infos,
60 const int device_count,
65 const int device_id = 0,
66 bool raw =
false)
const override;
69 const int device_id)
const override;
74 const size_t)
override;
77 return col_var_.get()->get_table_id();
81 return col_var_.get()->get_rte_idx();
112 const std::vector<Fragmenter_Namespace::FragmentInfo>& fragments,
127 const int device_id);
130 const std::vector<InnerOuter>& inner_outer_pairs)
const;
137 const std::vector<InputTableInfo>& query_infos,
143 const int device_count)
159 const std::vector<Fragmenter_Namespace::FragmentInfo>& fragments,
165 const size_t num_elements,
168 const size_t num_elements,
180 const int shard_count,
216 static std::unique_ptr<HashTableCache<JoinHashTableCacheKey, HashTableCacheValue>>
222 const Executor* executor);
225 const std::vector<Fragmenter_Namespace::FragmentInfo>& fragments,
227 const int device_count);
230 const int inner_table_id,
231 const std::vector<InputTableInfo>& query_infos);
234 const size_t shard_count,
235 const size_t device_count,
Defines data structures for the semantic analysis phase of query processing.
llvm::Value * codegenHashTableLoad(const size_t table_idx)
void reifyForDevice(const ChunkKey &hash_table_key, const ColumnsForDevice &columns_for_device, const HashType layout, const int device_id, const logger::ThreadId parent_thread_id)
const InputTableInfo & get_inner_query_info(const int inner_table_id, const std::vector< InputTableInfo > &query_infos)
class for a per-database catalog. also includes metadata for the current database and the current use...
HashType getHashType() const noexcept override
std::pair< const Analyzer::ColumnVar *, const Analyzer::Expr * > InnerOuter
const Data_Namespace::MemoryLevel memory_level_
bool operator==(const struct JoinHashTableCacheKey &that) const
std::shared_ptr< Analyzer::BinOper > qual_bin_oper_
std::unordered_map< int, std::unordered_map< int, std::shared_ptr< const ColumnarResults > >> ColumnCacheMap
static auto getCacheInvalidator() -> std::function< void()>
static auto getHashTableCache()
std::vector< std::shared_ptr< HashTable > > hash_tables_for_device_
static std::shared_ptr< PerfectJoinHashTable > getInstance(const std::shared_ptr< Analyzer::BinOper > qual_bin_oper, 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.
ColumnsForDevice fetchColumnsForDevice(const std::vector< Fragmenter_Namespace::FragmentInfo > &fragments, const int device_id, DeviceAllocator *dev_buff_owner)
size_t payloadBufferOff() const noexcept override
ExpressionRangeType getType() const
size_t getComponentBufferSize() const noexcept override
Data_Namespace::MemoryLevel getEffectiveMemoryLevel(const std::vector< InnerOuter > &inner_outer_pairs) const
std::vector< llvm::Value * > getHashJoinArgs(llvm::Value *hash_ptr, const Analyzer::Expr *key_col, const int shard_count, const CompilationOptions &co)
ChunkKey genHashTableKey(const std::vector< Fragmenter_Namespace::FragmentInfo > &fragments, const Analyzer::Expr *outer_col, const Analyzer::ColumnVar *inner_col) const
size_t countBufferOff() const noexcept override
This file contains the class specification and related data structures for Catalog.
int getInnerTableRteIdx() const noexcept override
std::string getHashJoinType() const final
std::shared_ptr< PerfectHashTable > HashTableCacheValue
const size_t num_elements
virtual ~PerfectJoinHashTable()
std::shared_ptr< PerfectHashTable > initHashTableOnCpuFromCache(const ChunkKey &chunk_key, const size_t num_elements, const InnerOuter &cols)
PerfectJoinHashTable(const std::shared_ptr< Analyzer::BinOper > qual_bin_oper, const Analyzer::ColumnVar *col_var, const std::vector< InputTableInfo > &query_infos, const Data_Namespace::MemoryLevel memory_level, const HashType preferred_hash_type, const ExpressionRange &col_range, ColumnCacheMap &column_cache, Executor *executor, const int device_count)
static std::unique_ptr< HashTableCache< JoinHashTableCacheKey, HashTableCacheValue > > hash_table_cache_
std::vector< InnerOuter > inner_outer_pairs_
size_t offsetBufferOff() const noexcept override
size_t get_entries_per_device(const size_t total_entries, const size_t shard_count, const size_t device_count, const Data_Namespace::MemoryLevel memory_level)
const std::vector< InputTableInfo > & query_infos_
ExpressionRange col_range_
std::vector< Fragmenter_Namespace::FragmentInfo > only_shards_for_device(const std::vector< Fragmenter_Namespace::FragmentInfo > &fragments, const int device_id, const int device_count)
std::string toString(const ExecutorDeviceType device_type, const int device_id=0, bool raw=false) const override
ColumnCacheMap & column_cache_
std::shared_ptr< Analyzer::ColumnVar > col_var_
const Analyzer::ColumnVar inner_col
llvm::Value * codegenSlot(const CompilationOptions &, const size_t) override
const InputTableInfo & getInnerQueryInfo(const Analyzer::ColumnVar *inner_col) const
Data_Namespace::MemoryLevel getMemoryLevel() const noexcept override
Catalog_Namespace::Catalog * catalog_
std::vector< int > ChunkKey
std::mutex cpu_hash_table_buff_mutex_
int initHashTableForDevice(const ChunkKey &chunk_key, const JoinColumn &join_column, const InnerOuter &cols, const HashType layout, const Data_Namespace::MemoryLevel effective_memory_level, const int device_id)
HashTable * getHashTableForDevice(const size_t device_id) const
int getInnerTableId() const noexcept override
const Analyzer::ColumnVar outer_col
int getDeviceCount() const noexcept override
std::set< DecodedJoinHashBufferEntry > toSet(const ExecutorDeviceType device_type, const int device_id) const override
const ExpressionRange col_range
void putHashTableOnCpuToCache(const ChunkKey &chunk_key, const size_t num_elements, HashTableCacheValue hash_table, const InnerOuter &cols)
HashJoinMatchingSet codegenMatchingSet(const CompilationOptions &, const size_t) override
size_t shardCount() const
bool needs_dictionary_translation(const Analyzer::ColumnVar *inner_col, const Analyzer::Expr *outer_col, const Executor *executor)