61 std::vector<const int8_t*>& col_buf_ptrs,
62 std::shared_ptr<RowSetMemoryOwner> row_set_mem_owner,
78 for (
size_t i = 0; i < num_out_columns; i++) {
92 if (std::this_thread::get_id() !=
thread_id_) {
93 throw std::runtime_error(
94 "TableFunctionManager instance accessed from an alien thread!");
111 int64_t output_item_values_total_number) {
125 int64_t output_array_values_total_number) {
140 for (
size_t i = 0; i < num_out_columns; i++) {
143 if (ti.usesFlatBuffer()) {
144 int64_t total_number = -1;
145 switch (ti.get_type()) {
148 UNREACHABLE() <<
"allocate_output_buffers not implemented for "
158 throw std::runtime_error(
"set_output_item_values_total_number(" +
160 ", <total_number>) must be called before "
161 "set_output_row_size(<size>) in " +
170 UNREACHABLE() <<
"allocate_output_buffers not implemented for "
183 const size_t col_width = ti.get_size();
184 query_mem_desc.
addColSlotInfo({std::make_tuple(col_width, col_width)});
207 std::vector<std::vector<uint64_t>>{{0}},
211 if (output_num_rows_ != 0) {
212 auto group_by_buffers_ptr =
query_buffers->getGroupByBuffersPtr();
213 CHECK(group_by_buffers_ptr);
214 auto output_buffers_ptr =
reinterpret_cast<int8_t*
>(group_by_buffers_ptr[0]);
215 for (
size_t i = 0; i < num_out_columns; i++) {
220 col->ptr = output_buffers_ptr;
223 auto ti = exe_unit_.target_exprs[i]->get_type_info();
224 if (ti.usesFlatBuffer()) {
226 int64_t total_number = -1;
227 switch (ti.get_type()) {
230 UNREACHABLE() <<
"allocate_output_buffers not implemented for "
245 UNREACHABLE() <<
"allocate_output_buffers not implemented for "
252 CHECK_EQ(m.getBufferSize(), query_mem_desc.getFlatBufferSize(i));
253 output_buffers_ptr =
align_to_int64(output_buffers_ptr + m.getBufferSize());
255 const size_t col_width = ti.get_size();
257 align_to_int64(output_buffers_ptr + col_width * output_num_rows_);
274 const uint8_t* raw_bytes,
275 const size_t num_bytes,
282 const uint8_t*& raw_bytes,
290 const auto proxy =
executor_->getStringDictionaryProxy(
292 return proxy->getDictKey().db_id;
296 const auto proxy =
executor_->getStringDictionaryProxy(
298 return proxy->getDictKey().dict_id;
302 return reinterpret_cast<int8_t*
>(
306 inline std::string
getString(int32_t db_id, int32_t dict_id, int32_t string_id) {
309 return proxy->getString(string_id);
314 const std::string& str) {
317 return proxy->getOrAddTransient(str);
320 inline int8_t*
makeBuffer(int64_t element_count, int64_t element_size) {
322 reinterpret_cast<int8_t*
>(
checked_malloc((element_count + 1) * element_size));
351 CHECK(instance_ ==
nullptr);
353 CHECK(instance_ !=
nullptr);
356 instance_ = instance;
std::vector< int64_t > output_item_values_total_number_
std::unique_ptr< QueryMemoryInitializer > query_buffers
void set_output_column(int32_t index, int8_t *ptr)
void addColSlotInfoFlatBuffer(const int64_t flatbuffer_size)
std::string getString(int32_t db_id, int32_t dict_id, int32_t string_id)
std::vector< const int8_t * > & col_buf_ptrs_
void set_output_array_values_total_number(int32_t index, int64_t output_array_values_total_number)
TableFunctionManager(const TableFunctionExecutionUnit &exe_unit, Executor *executor, std::vector< const int8_t * > &col_buf_ptrs, std::shared_ptr< RowSetMemoryOwner > row_set_mem_owner, bool is_singleton)
const TableFunctionExecutionUnit & exe_unit_
void check_thread_id() const
void get_metadata(const char *key, const uint8_t *&raw_bytes, size_t &num_bytes, TableFunctionMetadataType &value_type) const
const table_functions::TableFunction table_func
void set_error_message(const char *msg)
DEVICE int64_t size() const
std::vector< int8_t * > output_column_ptrs
void initializeFlatBuffer(FlatBufferManager &m, int64_t items_count, int64_t max_nof_values, const SQLTypeInfo &ti)
Constants for Builtin SQL Types supported by HEAVY.AI.
int8_t * getStringDictionaryProxy(int32_t db_id, int32_t dict_id)
#define TRANSIENT_DICT_ID
std::vector< int64_t * > output_col_buf_ptrs
static TableFunctionManager *& get_singleton_internal()
std::string error_message_
void allocate_output_buffers(int64_t output_num_rows)
void * checked_malloc(const size_t size)
int64_t getFlatBufferSize(int64_t items_count, int64_t max_nof_values, const SQLTypeInfo &ti)
std::mutex TableFunctionManager_singleton_mutex
std::string getName(const bool drop_suffix=false, const bool lower=false) const
int8_t * makeBuffer(int64_t element_count, int64_t element_size)
UserTableFunctionError(const std::string &message)
std::thread::id thread_id_
void set_metadata(const char *key, const uint8_t *raw_bytes, const size_t num_bytes, const TableFunctionMetadataType value_type) const
std::shared_ptr< RowSetMemoryOwner > row_set_mem_owner_
void set_output_item_values_total_number(int32_t index, int64_t output_item_values_total_number)
TableFunctionError(const std::string &message)
std::vector< Analyzer::Expr * > target_exprs
void addColSlotInfo(const std::vector< std::tuple< int8_t, int8_t >> &slots_for_col)
HOST static DEVICE bool isFlatBuffer(const void *buffer)
const int32_t getOrAddTransient(int32_t db_id, int32_t dict_id, const std::string &str)
const char * get_error_message() const
std::string toString() const
FORCE_INLINE HOST DEVICE T align_to_int64(T addr)
static void set_singleton(TableFunctionManager *instance)