OmniSciDB  340b00dbf6
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Execute.h File Reference
#include "AggregatedColRange.h"
#include "BufferCompaction.h"
#include "CartesianProduct.h"
#include "CgenState.h"
#include "CodeCache.h"
#include "DateTimeUtils.h"
#include "Descriptors/QueryFragmentDescriptor.h"
#include "ExecutionKernel.h"
#include "GpuSharedMemoryContext.h"
#include "GroupByAndAggregate.h"
#include "JoinHashTable/JoinHashTable.h"
#include "LoopControlFlow/JoinLoop.h"
#include "NvidiaKernel.h"
#include "PlanState.h"
#include "RelAlgExecutionUnit.h"
#include "RelAlgTranslator.h"
#include "StringDictionaryGenerations.h"
#include "TableGenerations.h"
#include "TargetMetaInfo.h"
#include "WindowContext.h"
#include "QueryEngine/Descriptors/QueryCompilationDescriptor.h"
#include "../Logger/Logger.h"
#include "../Shared/SystemParameters.h"
#include "../Shared/mapd_shared_mutex.h"
#include "../Shared/measure.h"
#include "../Shared/thread_count.h"
#include "../StringDictionary/LruCache.hpp"
#include "../StringDictionary/StringDictionary.h"
#include "../StringDictionary/StringDictionaryProxy.h"
#include "DataMgr/Chunk/Chunk.h"
#include "ThriftHandler/CommandLineOptions.h"
#include <llvm/IR/Function.h>
#include <llvm/IR/Value.h>
#include <llvm/Linker/Linker.h>
#include <llvm/Transforms/Utils/ValueMapper.h>
#include <rapidjson/document.h>
#include <algorithm>
#include <atomic>
#include <condition_variable>
#include <cstddef>
#include <cstdlib>
#include <deque>
#include <functional>
#include <limits>
#include <map>
#include <mutex>
#include <stack>
#include <unordered_map>
#include <unordered_set>
+ Include dependency graph for Execute.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  QuerySessionStatus
 
class  WatchdogException
 
class  CompilationRetryNoLazyFetch
 
class  CompilationRetryNewScanLimit
 
class  TooManyLiterals
 
class  CompilationRetryNoCompaction
 
class  QueryMustRunOnCpu
 
class  SringConstInResultSet
 
class  UpdateLogForFragment
 
class  Executor
 
struct  Executor::JoinHashTableOrError
 
struct  Executor::GroupColLLVMValue
 
class  Executor::FetchCacheAnchor
 

Typedefs

using QueryCompilationDescriptorOwned = std::unique_ptr< QueryCompilationDescriptor >
 
using QueryMemoryDescriptorOwned = std::unique_ptr< QueryMemoryDescriptor >
 
using InterruptFlagMap = std::map< std::string, bool >
 
using QuerySessionMap = std::map< const std::string, QuerySessionStatus >
 
using RowDataProvider = Fragmenter_Namespace::RowDataProvider
 
using LLVMValueVector = std::vector< llvm::Value * >
 

Functions

void read_udf_gpu_module (const std::string &udf_ir_filename)
 
void read_udf_cpu_module (const std::string &udf_ir_filename)
 
bool is_udf_module_present (bool cpu_only=false)
 
void read_rt_udf_gpu_module (const std::string &udf_ir)
 
void read_rt_udf_cpu_module (const std::string &udf_ir)
 
bool is_rt_udf_module_present (bool cpu_only=false)
 
llvm::Value * get_arg_by_name (llvm::Function *func, const std::string &name)
 
uint32_t log2_bytes (const uint32_t bytes)
 
const ColumnDescriptorget_column_descriptor (const int col_id, const int table_id, const Catalog_Namespace::Catalog &cat)
 
const Analyzer::Exprextract_cast_arg (const Analyzer::Expr *expr)
 
std::string numeric_type_name (const SQLTypeInfo &ti)
 
const ColumnDescriptorget_column_descriptor_maybe (const int col_id, const int table_id, const Catalog_Namespace::Catalog &cat)
 
const ResultSetPtrget_temporary_table (const TemporaryTables *temporary_tables, const int table_id)
 
const SQLTypeInfo get_column_type (const int col_id, const int table_id, const ColumnDescriptor *cd, const TemporaryTables *temporary_tables)
 
template<typename PtrTy >
const ColumnarResultsrows_to_columnar_results (std::shared_ptr< RowSetMemoryOwner > row_set_mem_owner, const PtrTy &result, const int number)
 
std::vector< Analyzer::Expr * > get_exprs_not_owned (const std::vector< std::shared_ptr< Analyzer::Expr >> &exprs)
 
const ColumnarResultscolumnarize_result (std::shared_ptr< RowSetMemoryOwner > row_set_mem_owner, const ResultSetPtr &result, const int frag_id)
 
std::ostream & operator<< (std::ostream &, FetchResult const &)
 
std::string get_null_check_suffix (const SQLTypeInfo &lhs_ti, const SQLTypeInfo &rhs_ti)
 
bool is_unnest (const Analyzer::Expr *expr)
 
bool is_trivial_loop_join (const std::vector< InputTableInfo > &query_infos, const RelAlgExecutionUnit &ra_exe_unit)
 
std::unordered_set< int > get_available_gpus (const Catalog_Namespace::Catalog &cat)
 
size_t get_context_count (const ExecutorDeviceType device_type, const size_t cpu_count, const size_t gpu_count)
 
void register_buffer_with_executor_rsm (int64_t exec, int8_t *buffer)
 
const Analyzer::Exprremove_cast_to_int (const Analyzer::Expr *expr)
 

Typedef Documentation

using InterruptFlagMap = std::map<std::string, bool>

Definition at line 77 of file Execute.h.

using LLVMValueVector = std::vector<llvm::Value*>

Definition at line 323 of file Execute.h.

Definition at line 74 of file Execute.h.

Definition at line 76 of file Execute.h.

using QuerySessionMap = std::map<const std::string, QuerySessionStatus>

Definition at line 112 of file Execute.h.

Function Documentation

const ColumnarResults* columnarize_result ( std::shared_ptr< RowSetMemoryOwner row_set_mem_owner,
const ResultSetPtr result,
const int  frag_id 
)
inline

Definition at line 235 of file Execute.h.

References CHECK_EQ, INJECT_TIMER, and rows_to_columnar_results().

Referenced by ColumnFetcher::getOneColumnFragment(), and ColumnFetcher::getResultSetColumn().

238  {
240  CHECK_EQ(0, frag_id);
241  return rows_to_columnar_results(row_set_mem_owner, result, result->colCount());
242 }
#define CHECK_EQ(x, y)
Definition: Logger.h:205
const ColumnarResults * rows_to_columnar_results(std::shared_ptr< RowSetMemoryOwner > row_set_mem_owner, const PtrTy &result, const int number)
Definition: Execute.h:214
#define INJECT_TIMER(DESC)
Definition: measure.h:93
const ColumnarResults * columnarize_result(std::shared_ptr< RowSetMemoryOwner > row_set_mem_owner, const ResultSetPtr &result, const int frag_id)
Definition: Execute.h:235

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

const Analyzer::Expr* extract_cast_arg ( const Analyzer::Expr expr)
inline

Definition at line 164 of file Execute.h.

References kCAST.

Referenced by CodeGenerator::codegen(), CodeGenerator::createInValuesBitmap(), and anonymous_namespace{ExpressionRewrite.cpp}::OrToInVisitor::visitBinOper().

164  {
165  const auto cast_expr = dynamic_cast<const Analyzer::UOper*>(expr);
166  if (!cast_expr || cast_expr->get_optype() != kCAST) {
167  return expr;
168  }
169  return cast_expr->get_operand();
170 }
Definition: sqldefs.h:49

+ Here is the caller graph for this function:

llvm::Value* get_arg_by_name ( llvm::Function *  func,
const std::string &  name 
)
inline

Definition at line 129 of file Execute.h.

References CHECK, and setup::name.

Referenced by GroupByAndAggregate::codegen(), JoinHashTable::codegenHashTableLoad(), CodeGenerator::codegenHoistedConstantsLoads(), GroupByAndAggregate::codegenOutputSlot(), CodeGenerator::codegenRowId(), GroupByAndAggregate::getAdditionalLiteral(), and Executor::preloadFragOffsets().

129  {
130  for (auto& arg : func->args()) {
131  if (arg.getName() == name) {
132  return &arg;
133  }
134  }
135  CHECK(false);
136  return nullptr;
137 }
#define CHECK(condition)
Definition: Logger.h:197
string name
Definition: setup.py:35

+ Here is the caller graph for this function:

std::unordered_set<int> get_available_gpus ( const Catalog_Namespace::Catalog cat)

Definition at line 996 of file Execute.cpp.

References CHECK_GT, Data_Namespace::DataMgr::getCudaMgr(), Catalog_Namespace::Catalog::getDataMgr(), CudaMgr_Namespace::CudaMgr::getDeviceCount(), and Data_Namespace::DataMgr::gpusPresent().

Referenced by Executor::executeWorkUnitImpl().

996  {
997  std::unordered_set<int> available_gpus;
998  if (cat.getDataMgr().gpusPresent()) {
999  int gpu_count = cat.getDataMgr().getCudaMgr()->getDeviceCount();
1000  CHECK_GT(gpu_count, 0);
1001  for (int gpu_id = 0; gpu_id < gpu_count; ++gpu_id) {
1002  available_gpus.insert(gpu_id);
1003  }
1004  }
1005  return available_gpus;
1006 }
CudaMgr_Namespace::CudaMgr * getCudaMgr() const
Definition: DataMgr.h:206
Data_Namespace::DataMgr & getDataMgr() const
Definition: Catalog.h:211
#define CHECK_GT(x, y)
Definition: Logger.h:209
int getDeviceCount() const
Definition: CudaMgr.h:86

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

const ColumnDescriptor* get_column_descriptor ( const int  col_id,
const int  table_id,
const Catalog_Namespace::Catalog cat 
)
inline

Definition at line 154 of file Execute.h.

References CHECK, CHECK_GT, and Catalog_Namespace::Catalog::getMetadataForColumn().

Referenced by CodeGenerator::codegenColVar(), RelAlgExecutor::executeSimpleInsert(), get_column_descriptor_maybe(), Executor::getColLazyFetchInfo(), ColumnFetcher::getOneTableColumnFragment(), PlanState::isLazyFetchColumn(), RelAlgExecutor::isRowidLookup(), and Executor::skipFragment().

157  {
158  CHECK_GT(table_id, 0);
159  const auto col_desc = cat.getMetadataForColumn(table_id, col_id);
160  CHECK(col_desc);
161  return col_desc;
162 }
#define CHECK_GT(x, y)
Definition: Logger.h:209
const ColumnDescriptor * getMetadataForColumn(int tableId, const std::string &colName) const
#define CHECK(condition)
Definition: Logger.h:197

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

const ColumnDescriptor* get_column_descriptor_maybe ( const int  col_id,
const int  table_id,
const Catalog_Namespace::Catalog cat 
)
inline

Definition at line 183 of file Execute.h.

References CHECK, and get_column_descriptor().

Referenced by anonymous_namespace{GroupByAndAggregate.cpp}::expr_is_rowid(), OverlapsJoinHashTable::fetchColumnsForDevice(), BaselineJoinHashTable::fetchColumnsForDevice(), Executor::getColumnDescriptor(), ColumnFetcher::getOneColumnFragment(), Executor::getPhysicalColumnDescriptor(), needs_dictionary_translation(), normalize_column_pair(), JoinHashTable::reifyOneToManyForDevice(), JoinHashTable::reifyOneToOneForDevice(), anonymous_namespace{QueryMemoryDescriptor.cpp}::target_expr_proj_indices(), and anonymous_namespace{Execute.cpp}::try_get_column_descriptor().

186  {
187  CHECK(table_id);
188  return table_id > 0 ? get_column_descriptor(col_id, table_id, cat) : nullptr;
189 }
#define CHECK(condition)
Definition: Logger.h:197
const ColumnDescriptor * get_column_descriptor(const int col_id, const int table_id, const Catalog_Namespace::Catalog &cat)
Definition: Execute.h:154

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

const SQLTypeInfo get_column_type ( const int  col_id,
const int  table_id,
const ColumnDescriptor cd,
const TemporaryTables temporary_tables 
)
inline

Definition at line 199 of file Execute.h.

References CHECK, CHECK_EQ, ColumnDescriptor::columnId, ColumnDescriptor::columnType, get_temporary_table(), and ColumnDescriptor::tableId.

Referenced by ColumnFetcher::getOneTableColumnFragment(), needs_dictionary_translation(), and normalize_column_pair().

202  {
203  CHECK(cd || temporary_tables);
204  if (cd) {
205  CHECK_EQ(col_id, cd->columnId);
206  CHECK_EQ(table_id, cd->tableId);
207  return cd->columnType;
208  }
209  const auto& temp = get_temporary_table(temporary_tables, table_id);
210  return temp->getColType(col_id);
211 }
#define CHECK_EQ(x, y)
Definition: Logger.h:205
const ResultSetPtr & get_temporary_table(const TemporaryTables *temporary_tables, const int table_id)
Definition: Execute.h:191
#define CHECK(condition)
Definition: Logger.h:197
SQLTypeInfo columnType

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

size_t get_context_count ( const ExecutorDeviceType  device_type,
const size_t  cpu_count,
const size_t  gpu_count 
)

Definition at line 1008 of file Execute.cpp.

References GPU.

Referenced by Executor::executeWorkUnitImpl().

1010  {
1011  return device_type == ExecutorDeviceType::GPU ? gpu_count
1012  : static_cast<size_t>(cpu_count);
1013 }

+ Here is the caller graph for this function:

std::vector<Analyzer::Expr*> get_exprs_not_owned ( const std::vector< std::shared_ptr< Analyzer::Expr >> &  exprs)
inline

Definition at line 226 of file Execute.h.

Referenced by RelAlgExecutor::createFilterWorkUnit(), RelAlgExecutor::createProjectWorkUnit(), RelAlgExecutor::createTableFunctionWorkUnit(), RelAlgExecutor::createUnionWorkUnit(), and anonymous_namespace{RelAlgExecutor.cpp}::get_inputs_meta().

227  {
228  std::vector<Analyzer::Expr*> exprs_not_owned;
229  for (const auto& expr : exprs) {
230  exprs_not_owned.push_back(expr.get());
231  }
232  return exprs_not_owned;
233 }

+ Here is the caller graph for this function:

std::string get_null_check_suffix ( const SQLTypeInfo lhs_ti,
const SQLTypeInfo rhs_ti 
)
inline

Definition at line 1030 of file Execute.h.

References CHECK, and SQLTypeInfo::get_notnull().

Referenced by CodeGenerator::codegenCmp(), CodeGenerator::codegenDeciDiv(), CodeGenerator::codegenFpArith(), CodeGenerator::codegenIntArith(), and CodeGenerator::codegenStrCmp().

1031  {
1032  if (lhs_ti.get_notnull() && rhs_ti.get_notnull()) {
1033  return "";
1034  }
1035  std::string null_check_suffix{"_nullable"};
1036  if (lhs_ti.get_notnull()) {
1037  CHECK(!rhs_ti.get_notnull());
1038  null_check_suffix += "_rhs";
1039  } else if (rhs_ti.get_notnull()) {
1040  CHECK(!lhs_ti.get_notnull());
1041  null_check_suffix += "_lhs";
1042  }
1043  return null_check_suffix;
1044 }
#define CHECK(condition)
Definition: Logger.h:197
HOST DEVICE bool get_notnull() const
Definition: sqltypes.h:337

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

const ResultSetPtr& get_temporary_table ( const TemporaryTables temporary_tables,
const int  table_id 
)
inline

Definition at line 191 of file Execute.h.

References CHECK, and CHECK_LT.

Referenced by anonymous_namespace{ExternalExecutor.cpp}::create_table_schema(), RelAlgExecutor::executeDelete(), RelAlgExecutor::executeProject(), RelAlgExecutor::executeUpdate(), get_column_type(), ColumnFetcher::getOneColumnFragment(), and ColumnFetcher::getResultSetColumn().

192  {
193  CHECK_LT(table_id, 0);
194  const auto it = temporary_tables->find(table_id);
195  CHECK(it != temporary_tables->end());
196  return it->second;
197 }
#define CHECK_LT(x, y)
Definition: Logger.h:207
#define CHECK(condition)
Definition: Logger.h:197

+ Here is the caller graph for this function:

bool is_rt_udf_module_present ( bool  cpu_only = false)

Definition at line 1542 of file NativeCodegen.cpp.

1542  {
1543  return (cpu_only || rt_udf_gpu_module != nullptr) && (rt_udf_cpu_module != nullptr);
1544 }
std::unique_ptr< llvm::Module > rt_udf_cpu_module
std::unique_ptr< llvm::Module > rt_udf_gpu_module
bool is_trivial_loop_join ( const std::vector< InputTableInfo > &  query_infos,
const RelAlgExecutionUnit ra_exe_unit 
)

Definition at line 1116 of file Execute.cpp.

References CHECK, g_trivial_loop_join_threshold, and RelAlgExecutionUnit::input_descs.

Referenced by anonymous_namespace{IRCodegen.cpp}::check_if_loop_join_is_allowed().

1117  {
1118  if (ra_exe_unit.input_descs.size() < 2) {
1119  return false;
1120  }
1121 
1122  // We only support loop join at the end of folded joins
1123  // where ra_exe_unit.input_descs.size() > 2 for now.
1124  const auto inner_table_id = ra_exe_unit.input_descs.back().getTableId();
1125 
1126  std::optional<size_t> inner_table_idx;
1127  for (size_t i = 0; i < query_infos.size(); ++i) {
1128  if (query_infos[i].table_id == inner_table_id) {
1129  inner_table_idx = i;
1130  break;
1131  }
1132  }
1133  CHECK(inner_table_idx);
1134  return query_infos[*inner_table_idx].info.getNumTuples() <=
1136 }
std::vector< InputDescriptor > input_descs
unsigned g_trivial_loop_join_threshold
Definition: Execute.cpp:80
#define CHECK(condition)
Definition: Logger.h:197

+ Here is the caller graph for this function:

bool is_udf_module_present ( bool  cpu_only = false)

Definition at line 1538 of file NativeCodegen.cpp.

1538  {
1539  return (cpu_only || udf_gpu_module != nullptr) && (udf_cpu_module != nullptr);
1540 }
std::unique_ptr< llvm::Module > udf_gpu_module
std::unique_ptr< llvm::Module > udf_cpu_module
bool is_unnest ( const Analyzer::Expr expr)
inline

Definition at line 1046 of file Execute.h.

References Analyzer::UOper::get_optype(), and kUNNEST.

Referenced by CodeGenerator::codegen(), and CodeGenerator::codegenCmp().

1046  {
1047  return dynamic_cast<const Analyzer::UOper*>(expr) &&
1048  static_cast<const Analyzer::UOper*>(expr)->get_optype() == kUNNEST;
1049 }
SQLOps get_optype() const
Definition: Analyzer.h:370

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uint32_t log2_bytes ( const uint32_t  bytes)
inline

Definition at line 139 of file Execute.h.

Referenced by CodeGenerator::codegen(), GroupByAndAggregate::codegenAggArg(), CodeGenerator::codegenFunctionOperCastArgs(), CodeGenerator::codegenGeoArgs(), and Executor::groupByColumnCodegen().

139  {
140  switch (bytes) {
141  case 1:
142  return 0;
143  case 2:
144  return 1;
145  case 4:
146  return 2;
147  case 8:
148  return 3;
149  default:
150  abort();
151  }
152 }

+ Here is the caller graph for this function:

std::string numeric_type_name ( const SQLTypeInfo ti)
inline

Definition at line 172 of file Execute.h.

References CHECK, SQLTypeInfo::get_compression(), SQLTypeInfo::get_logical_size(), SQLTypeInfo::get_type(), SQLTypeInfo::is_boolean(), SQLTypeInfo::is_decimal(), SQLTypeInfo::is_fp(), SQLTypeInfo::is_integer(), SQLTypeInfo::is_string(), SQLTypeInfo::is_time(), SQLTypeInfo::is_timeinterval(), kDOUBLE, kENCODING_DICT, and to_string().

Referenced by TargetExprCodegen::codegenAggregate(), CodeGenerator::codegenCastBetweenIntTypes(), CodeGenerator::codegenCastBetweenIntTypesOverflowChecks(), CodeGenerator::codegenCastFromFp(), CodeGenerator::codegenCastToFp(), CodeGenerator::codegenDiv(), CodeGenerator::codegenFpArith(), CodeGenerator::codegenQualifierCmp(), CodeGenerator::codegenUMinus(), CodeGenerator::codgenAdjustFixedEncNull(), Executor::groupByColumnCodegen(), and anonymous_namespace{ArithmeticIR.cpp}::numeric_or_time_interval_type_name().

172  {
173  CHECK(ti.is_integer() || ti.is_decimal() || ti.is_boolean() || ti.is_time() ||
174  ti.is_fp() || (ti.is_string() && ti.get_compression() == kENCODING_DICT) ||
175  ti.is_timeinterval());
176  if (ti.is_integer() || ti.is_decimal() || ti.is_boolean() || ti.is_time() ||
177  ti.is_string() || ti.is_timeinterval()) {
178  return "int" + std::to_string(ti.get_logical_size() * 8) + "_t";
179  }
180  return ti.get_type() == kDOUBLE ? "double" : "float";
181 }
bool is_fp() const
Definition: sqltypes.h:491
HOST DEVICE SQLTypes get_type() const
Definition: sqltypes.h:330
bool is_time() const
Definition: sqltypes.h:493
std::string to_string(char const *&&v)
int get_logical_size() const
Definition: sqltypes.h:341
bool is_integer() const
Definition: sqltypes.h:489
bool is_timeinterval() const
Definition: sqltypes.h:498
bool is_boolean() const
Definition: sqltypes.h:494
HOST DEVICE EncodingType get_compression() const
Definition: sqltypes.h:338
#define CHECK(condition)
Definition: Logger.h:197
bool is_string() const
Definition: sqltypes.h:487
bool is_decimal() const
Definition: sqltypes.h:490

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

std::ostream& operator<< ( std::ostream &  ,
FetchResult const &   
)

Definition at line 2295 of file Execute.cpp.

References FetchResult::col_buffers, FetchResult::frag_offsets, FetchResult::num_rows, and shared::printContainer().

2295  {
2296  return os << "col_buffers" << shared::printContainer(fetch_result.col_buffers)
2297  << " num_rows" << shared::printContainer(fetch_result.num_rows)
2298  << " frag_offsets" << shared::printContainer(fetch_result.frag_offsets);
2299 }
PrintContainer< CONTAINER > printContainer(CONTAINER &container)
Definition: misc.h:64

+ Here is the call graph for this function:

void read_rt_udf_cpu_module ( const std::string &  udf_ir)

Definition at line 1587 of file NativeCodegen.cpp.

Referenced by DBHandler::register_runtime_extension_functions().

1587  {
1588  llvm::SMDiagnostic parse_error;
1589 
1590  auto buf =
1591  std::make_unique<llvm::MemoryBufferRef>(udf_ir_string, "Runtime UDF for CPU");
1592 
1593  rt_udf_cpu_module = llvm::parseIR(*buf, parse_error, getGlobalLLVMContext());
1594  if (!rt_udf_cpu_module) {
1595  throw_parseIR_error(parse_error);
1596  }
1597 }
std::unique_ptr< llvm::Module > rt_udf_cpu_module
llvm::LLVMContext & getGlobalLLVMContext()
void throw_parseIR_error(const llvm::SMDiagnostic &parse_error, std::string src="")

+ Here is the caller graph for this function:

void read_rt_udf_gpu_module ( const std::string &  udf_ir)

Definition at line 1575 of file NativeCodegen.cpp.

References CHECK.

Referenced by DBHandler::register_runtime_extension_functions().

1575  {
1576  llvm::SMDiagnostic parse_error;
1577 
1578  auto buf =
1579  std::make_unique<llvm::MemoryBufferRef>(udf_ir_string, "Runtime UDF for GPU");
1580 
1581  rt_udf_gpu_module = llvm::parseIR(*buf, parse_error, getGlobalLLVMContext());
1582  if (!rt_udf_gpu_module) {
1583  throw_parseIR_error(parse_error);
1584  }
1585 }
std::unique_ptr< llvm::Module > rt_udf_gpu_module
llvm::LLVMContext & getGlobalLLVMContext()
void throw_parseIR_error(const llvm::SMDiagnostic &parse_error, std::string src="")

+ Here is the caller graph for this function:

void read_udf_cpu_module ( const std::string &  udf_ir_filename)

Definition at line 1564 of file NativeCodegen.cpp.

Referenced by UdfCompiler::readCpuCompiledModule().

1564  {
1565  llvm::SMDiagnostic parse_error;
1566 
1567  llvm::StringRef file_name_arg(udf_ir_filename);
1568 
1569  udf_cpu_module = llvm::parseIRFile(file_name_arg, parse_error, getGlobalLLVMContext());
1570  if (!udf_cpu_module) {
1571  throw_parseIR_error(parse_error, udf_ir_filename);
1572  }
1573 }
std::unique_ptr< llvm::Module > udf_cpu_module
llvm::LLVMContext & getGlobalLLVMContext()
void throw_parseIR_error(const llvm::SMDiagnostic &parse_error, std::string src="")

+ Here is the caller graph for this function:

void read_udf_gpu_module ( const std::string &  udf_ir_filename)

Definition at line 1553 of file NativeCodegen.cpp.

Referenced by UdfCompiler::readGpuCompiledModule().

1553  {
1554  llvm::SMDiagnostic parse_error;
1555 
1556  llvm::StringRef file_name_arg(udf_ir_filename);
1557 
1558  udf_gpu_module = llvm::parseIRFile(file_name_arg, parse_error, getGlobalLLVMContext());
1559  if (!udf_gpu_module) {
1560  throw_parseIR_error(parse_error, udf_ir_filename);
1561  }
1562 }
std::unique_ptr< llvm::Module > udf_gpu_module
llvm::LLVMContext & getGlobalLLVMContext()
void throw_parseIR_error(const llvm::SMDiagnostic &parse_error, std::string src="")

+ Here is the caller graph for this function:

void register_buffer_with_executor_rsm ( int64_t  exec,
int8_t *  buffer 
)

Definition at line 204 of file ExtensionsIR.cpp.

204  {
205  Executor* exec_ptr = reinterpret_cast<Executor*>(exec);
206  if (buffer != nullptr) {
207  exec_ptr->getRowSetMemoryOwner()->addVarlenBuffer(buffer);
208  }
209 }
const Analyzer::Expr* remove_cast_to_int ( const Analyzer::Expr expr)

Definition at line 538 of file ColumnIR.cpp.

References Analyzer::Expr::get_type_info(), and kCAST.

Referenced by anonymous_namespace{DateTimePlusRewrite.cpp}::get_dt_field(), and CodeGenerator::hashJoinLhs().

538  {
539  const auto uoper = dynamic_cast<const Analyzer::UOper*>(expr);
540  if (!uoper || uoper->get_optype() != kCAST) {
541  return nullptr;
542  }
543  const auto& target_ti = uoper->get_type_info();
544  if (!target_ti.is_integer()) {
545  return nullptr;
546  }
547  return uoper->get_operand();
548 }
Definition: sqldefs.h:49
const SQLTypeInfo & get_type_info() const
Definition: Analyzer.h:78

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename PtrTy >
const ColumnarResults* rows_to_columnar_results ( std::shared_ptr< RowSetMemoryOwner row_set_mem_owner,
const PtrTy &  result,
const int  number 
)
inline

Definition at line 214 of file Execute.h.

References get_logical_type_info().

Referenced by columnarize_result().

217  {
218  std::vector<SQLTypeInfo> col_types;
219  for (size_t i = 0; i < result->colCount(); ++i) {
220  col_types.push_back(get_logical_type_info(result->getColType(i)));
221  }
222  return new ColumnarResults(row_set_mem_owner, *result, number, col_types);
223 }
SQLTypeInfo get_logical_type_info(const SQLTypeInfo &type_info)
Definition: sqltypes.h:899

+ Here is the call graph for this function:

+ Here is the caller graph for this function: