OmniSciDB  72180abbfe
 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 "GpuSharedMemoryContext.h"
#include "GroupByAndAggregate.h"
#include "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 "../Shared/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  WatchdogException
 
class  CompilationRetryNoLazyFetch
 
class  CompilationRetryNewScanLimit
 
class  TooManyLiterals
 
class  CompilationRetryNoCompaction
 
class  QueryMustRunOnCpu
 
class  SringConstInResultSet
 
struct  std::hash< std::vector< int > >
 
struct  std::hash< std::pair< int, int > >
 
class  UpdateLogForFragment
 
struct  FetchResult
 
class  Executor
 
struct  Executor::CompilationResult
 
class  Executor::ExecutionDispatch
 
struct  Executor::JoinHashTableOrError
 
struct  Executor::GroupColLLVMValue
 
class  Executor::FetchCacheAnchor
 

Namespaces

 std
 

Typedefs

using QueryCompilationDescriptorOwned = std::unique_ptr< QueryCompilationDescriptor >
 
using QueryMemoryDescriptorOwned = std::unique_ptr< QueryMemoryDescriptor >
 
using InterruptFlagMap = std::map< std::string, bool >
 
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 75 of file Execute.h.

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

Definition at line 305 of file Execute.h.

Definition at line 72 of file Execute.h.

Definition at line 74 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 200 of file Execute.h.

References CHECK_EQ, INJECT_TIMER, and rows_to_columnar_results().

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

203  {
205  CHECK_EQ(0, frag_id);
206  return rows_to_columnar_results(row_set_mem_owner, result, result->colCount());
207 }
#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:179
#define INJECT_TIMER(DESC)
Definition: measure.h:91
const ColumnarResults * columnarize_result(std::shared_ptr< RowSetMemoryOwner > row_set_mem_owner, const ResultSetPtr &result, const int frag_id)
Definition: Execute.h:200

+ 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 129 of file Execute.h.

References kCAST.

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

129  {
130  const auto cast_expr = dynamic_cast<const Analyzer::UOper*>(expr);
131  if (!cast_expr || cast_expr->get_optype() != kCAST) {
132  return expr;
133  }
134  return cast_expr->get_operand();
135 }
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 94 of file Execute.h.

References CHECK().

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

94  {
95  for (auto& arg : func->args()) {
96  if (arg.getName() == name) {
97  return &arg;
98  }
99  }
100  CHECK(false);
101  return nullptr;
102 }
CHECK(cgen_state)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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

Definition at line 997 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().

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

+ 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 119 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().

122  {
123  CHECK_GT(table_id, 0);
124  const auto col_desc = cat.getMetadataForColumn(table_id, col_id);
125  CHECK(col_desc);
126  return col_desc;
127 }
#define CHECK_GT(x, y)
Definition: Logger.h:209
CHECK(cgen_state)
const ColumnDescriptor * getMetadataForColumn(int tableId, const std::string &colName) const

+ 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 148 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().

151  {
152  CHECK(table_id);
153  return table_id > 0 ? get_column_descriptor(col_id, table_id, cat) : nullptr;
154 }
CHECK(cgen_state)
const ColumnDescriptor * get_column_descriptor(const int col_id, const int table_id, const Catalog_Namespace::Catalog &cat)
Definition: Execute.h:119

+ 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 164 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().

167  {
168  CHECK(cd || temporary_tables);
169  if (cd) {
170  CHECK_EQ(col_id, cd->columnId);
171  CHECK_EQ(table_id, cd->tableId);
172  return cd->columnType;
173  }
174  const auto& temp = get_temporary_table(temporary_tables, table_id);
175  return temp->getColType(col_id);
176 }
#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:156
CHECK(cgen_state)
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 1009 of file Execute.cpp.

References GPU.

Referenced by Executor::executeWorkUnitImpl().

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

+ 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 191 of file Execute.h.

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

192  {
193  std::vector<Analyzer::Expr*> exprs_not_owned;
194  for (const auto& expr : exprs) {
195  exprs_not_owned.push_back(expr.get());
196  }
197  return exprs_not_owned;
198 }

+ 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 1068 of file Execute.h.

References CHECK(), and SQLTypeInfo::get_notnull().

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

1069  {
1070  if (lhs_ti.get_notnull() && rhs_ti.get_notnull()) {
1071  return "";
1072  }
1073  std::string null_check_suffix{"_nullable"};
1074  if (lhs_ti.get_notnull()) {
1075  CHECK(!rhs_ti.get_notnull());
1076  null_check_suffix += "_rhs";
1077  } else if (rhs_ti.get_notnull()) {
1078  CHECK(!lhs_ti.get_notnull());
1079  null_check_suffix += "_lhs";
1080  }
1081  return null_check_suffix;
1082 }
CHECK(cgen_state)
HOST DEVICE bool get_notnull() const
Definition: sqltypes.h:264

+ 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 156 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().

157  {
158  CHECK_LT(table_id, 0);
159  const auto it = temporary_tables->find(table_id);
160  CHECK(it != temporary_tables->end());
161  return it->second;
162 }
CHECK(cgen_state)
#define CHECK_LT(x, y)
Definition: Logger.h:207

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool is_rt_udf_module_present ( bool  cpu_only = false)

Definition at line 1327 of file NativeCodegen.cpp.

1327  {
1328  return (cpu_only || rt_udf_gpu_module != nullptr) && (rt_udf_cpu_module != nullptr);
1329 }
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 1117 of file Execute.cpp.

References CHECK_NE, g_trivial_loop_join_threshold, and RelAlgExecutionUnit::input_descs.

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

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

+ Here is the caller graph for this function:

bool is_udf_module_present ( bool  cpu_only = false)

Definition at line 1323 of file NativeCodegen.cpp.

1323  {
1324  return (cpu_only || udf_gpu_module != nullptr) && (udf_cpu_module != nullptr);
1325 }
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 1084 of file Execute.h.

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

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

1084  {
1085  return dynamic_cast<const Analyzer::UOper*>(expr) &&
1086  static_cast<const Analyzer::UOper*>(expr)->get_optype() == kUNNEST;
1087 }
SQLOps get_optype() const
Definition: Analyzer.h:371

+ 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 104 of file Execute.h.

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

104  {
105  switch (bytes) {
106  case 1:
107  return 0;
108  case 2:
109  return 1;
110  case 4:
111  return 2;
112  case 8:
113  return 3;
114  default:
115  abort();
116  }
117 }

+ Here is the caller graph for this function:

std::string numeric_type_name ( const SQLTypeInfo ti)
inline

Definition at line 137 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().

137  {
138  CHECK(ti.is_integer() || ti.is_decimal() || ti.is_boolean() || ti.is_time() ||
139  ti.is_fp() || (ti.is_string() && ti.get_compression() == kENCODING_DICT) ||
140  ti.is_timeinterval());
141  if (ti.is_integer() || ti.is_decimal() || ti.is_boolean() || ti.is_time() ||
142  ti.is_string() || ti.is_timeinterval()) {
143  return "int" + std::to_string(ti.get_logical_size() * 8) + "_t";
144  }
145  return ti.get_type() == kDOUBLE ? "double" : "float";
146 }
bool is_fp() const
Definition: sqltypes.h:412
HOST DEVICE SQLTypes get_type() const
Definition: sqltypes.h:257
bool is_time() const
Definition: sqltypes.h:414
std::string to_string(char const *&&v)
CHECK(cgen_state)
int get_logical_size() const
Definition: sqltypes.h:268
bool is_integer() const
Definition: sqltypes.h:410
bool is_timeinterval() const
Definition: sqltypes.h:419
bool is_boolean() const
Definition: sqltypes.h:415
HOST DEVICE EncodingType get_compression() const
Definition: sqltypes.h:265
bool is_string() const
Definition: sqltypes.h:408
bool is_decimal() const
Definition: sqltypes.h:411

+ 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 2280 of file Execute.cpp.

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

2280  {
2281  return os << "col_buffers" << shared::printContainer(fetch_result.col_buffers)
2282  << " num_rows" << shared::printContainer(fetch_result.num_rows)
2283  << " frag_offsets" << shared::printContainer(fetch_result.frag_offsets);
2284 }
PrintContainer< CONTAINER > printContainer(CONTAINER &container)
Definition: misc.h:60

+ Here is the call graph for this function:

void read_rt_udf_cpu_module ( const std::string &  udf_ir)

Definition at line 1372 of file NativeCodegen.cpp.

Referenced by DBHandler::register_runtime_extension_functions().

1372  {
1373  llvm::SMDiagnostic parse_error;
1374 
1375  auto buf =
1376  std::make_unique<llvm::MemoryBufferRef>(udf_ir_string, "Runtime UDF for CPU");
1377 
1378  rt_udf_cpu_module = llvm::parseIR(*buf, parse_error, getGlobalLLVMContext());
1379  if (!rt_udf_cpu_module) {
1380  throw_parseIR_error(parse_error);
1381  }
1382 }
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 1360 of file NativeCodegen.cpp.

Referenced by DBHandler::register_runtime_extension_functions().

1360  {
1361  llvm::SMDiagnostic parse_error;
1362 
1363  auto buf =
1364  std::make_unique<llvm::MemoryBufferRef>(udf_ir_string, "Runtime UDF for GPU");
1365 
1366  rt_udf_gpu_module = llvm::parseIR(*buf, parse_error, getGlobalLLVMContext());
1367  if (!rt_udf_gpu_module) {
1368  throw_parseIR_error(parse_error);
1369  }
1370 }
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 1349 of file NativeCodegen.cpp.

Referenced by UdfCompiler::readCpuCompiledModule().

1349  {
1350  llvm::SMDiagnostic parse_error;
1351 
1352  llvm::StringRef file_name_arg(udf_ir_filename);
1353 
1354  udf_cpu_module = llvm::parseIRFile(file_name_arg, parse_error, getGlobalLLVMContext());
1355  if (!udf_cpu_module) {
1356  throw_parseIR_error(parse_error, udf_ir_filename);
1357  }
1358 }
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 1338 of file NativeCodegen.cpp.

Referenced by UdfCompiler::readGpuCompiledModule().

1338  {
1339  llvm::SMDiagnostic parse_error;
1340 
1341  llvm::StringRef file_name_arg(udf_ir_filename);
1342 
1343  udf_gpu_module = llvm::parseIRFile(file_name_arg, parse_error, getGlobalLLVMContext());
1344  if (!udf_gpu_module) {
1345  throw_parseIR_error(parse_error, udf_ir_filename);
1346  }
1347 }
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 202 of file ExtensionsIR.cpp.

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

Definition at line 531 of file ColumnIR.cpp.

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

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

531  {
532  const auto uoper = dynamic_cast<const Analyzer::UOper*>(expr);
533  if (!uoper || uoper->get_optype() != kCAST) {
534  return nullptr;
535  }
536  const auto& target_ti = uoper->get_type_info();
537  if (!target_ti.is_integer()) {
538  return nullptr;
539  }
540  return uoper->get_operand();
541 }
Definition: sqldefs.h:49
const SQLTypeInfo & get_type_info() const
Definition: Analyzer.h:79

+ 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 179 of file Execute.h.

References get_logical_type_info().

Referenced by columnarize_result().

182  {
183  std::vector<SQLTypeInfo> col_types;
184  for (size_t i = 0; i < result->colCount(); ++i) {
185  col_types.push_back(get_logical_type_info(result->getColType(i)));
186  }
187  return new ColumnarResults(row_set_mem_owner, *result, number, col_types);
188 }
SQLTypeInfo get_logical_type_info(const SQLTypeInfo &type_info)
Definition: sqltypes.h:807

+ Here is the call graph for this function:

+ Here is the caller graph for this function: