OmniSciDB  b24e664e58
 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 "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 "../Chunk/Chunk.h"
#include "../Fragmenter/InsertOrderFragmenter.h"
#include "../Planner/Planner.h"
#include "../Shared/Logger.h"
#include "../Shared/MapDParameters.h"
#include "../Shared/measure.h"
#include "../Shared/thread_count.h"
#include "../StringDictionary/LruCache.hpp"
#include "../StringDictionary/StringDictionary.h"
#include "../StringDictionary/StringDictionaryProxy.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 <unistd.h>
#include <algorithm>
#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
 
class  Executor
 
struct  Executor::CompilationResult
 
struct  Executor::FetchResult
 
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 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::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)
 

Variables

bool g_enable_watchdog
 
bool g_enable_dynamic_watchdog
 
unsigned g_dynamic_watchdog_time_limit
 
unsigned g_trivial_loop_join_threshold
 
bool g_from_table_reordering
 
bool g_enable_filter_push_down
 
bool g_allow_cpu_retry
 
bool g_null_div_by_zero
 
bool g_bigint_count
 
bool g_inner_join_fragment_skipping
 
float g_filter_push_down_low_frac
 
float g_filter_push_down_high_frac
 
size_t g_filter_push_down_passing_row_ubound
 
bool g_enable_columnar_output
 
bool g_enable_overlaps_hashjoin
 
size_t g_overlaps_max_table_size_bytes
 
bool g_strip_join_covered_quals
 
size_t g_constrained_by_in_threshold
 
size_t g_big_group_threshold
 
bool g_enable_window_functions
 
bool g_enable_table_functions
 
size_t g_max_memory_allocation_size
 
double g_bump_allocator_step_reduction
 
bool g_enable_direct_columnarization
 

Typedef Documentation

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

Definition at line 326 of file Execute.h.

Definition at line 96 of file Execute.h.

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

References CHECK_EQ, INJECT_TIMER, and rows_to_columnar_results().

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

226  {
228  CHECK_EQ(0, frag_id);
229  return rows_to_columnar_results(row_set_mem_owner, result, result->colCount());
230 }
#define CHECK_EQ(x, y)
Definition: Logger.h:198
const ColumnarResults * rows_to_columnar_results(std::shared_ptr< RowSetMemoryOwner > row_set_mem_owner, const PtrTy &result, const int number)
Definition: Execute.h:202
#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:223

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

References kCAST.

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

152  {
153  const auto cast_expr = dynamic_cast<const Analyzer::UOper*>(expr);
154  if (!cast_expr || cast_expr->get_optype() != kCAST) {
155  return expr;
156  }
157  return cast_expr->get_operand();
158 }
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 117 of file Execute.h.

References CHECK().

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

117  {
118  for (auto& arg : func->args()) {
119  if (arg.getName() == name) {
120  return &arg;
121  }
122  }
123  CHECK(false);
124  return nullptr;
125 }
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 947 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().

947  {
948  std::unordered_set<int> available_gpus;
949  if (cat.getDataMgr().gpusPresent()) {
950  int gpu_count = cat.getDataMgr().getCudaMgr()->getDeviceCount();
951  CHECK_GT(gpu_count, 0);
952  for (int gpu_id = 0; gpu_id < gpu_count; ++gpu_id) {
953  available_gpus.insert(gpu_id);
954  }
955  }
956  return available_gpus;
957 }
CudaMgr_Namespace::CudaMgr * getCudaMgr() const
Definition: DataMgr.h:117
Data_Namespace::DataMgr & getDataMgr() const
Definition: Catalog.h:177
#define CHECK_GT(x, y)
Definition: Logger.h:202
int getDeviceCount() const
Definition: CudaMgr.h:93

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

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

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

145  {
146  CHECK_GT(table_id, 0);
147  const auto col_desc = cat.getMetadataForColumn(table_id, col_id);
148  CHECK(col_desc);
149  return col_desc;
150 }
#define CHECK_GT(x, y)
Definition: Logger.h:202
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 171 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().

174  {
175  CHECK(table_id);
176  return table_id > 0 ? get_column_descriptor(col_id, table_id, cat) : nullptr;
177 }
CHECK(cgen_state)
const int32_t groups_buffer_size return nullptr
const ColumnDescriptor * get_column_descriptor(const int col_id, const int table_id, const Catalog_Namespace::Catalog &cat)
Definition: Execute.h:142

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

190  {
191  CHECK(cd || temporary_tables);
192  if (cd) {
193  CHECK_EQ(col_id, cd->columnId);
194  CHECK_EQ(table_id, cd->tableId);
195  return cd->columnType;
196  }
197  const auto& temp = get_temporary_table(temporary_tables, table_id);
198  return temp->getColType(col_id);
199 }
#define CHECK_EQ(x, y)
Definition: Logger.h:198
const ResultSetPtr & get_temporary_table(const TemporaryTables *temporary_tables, const int table_id)
Definition: Execute.h:179
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 959 of file Execute.cpp.

References GPU.

Referenced by Executor::executeWorkUnitImpl().

961  {
962  return device_type == ExecutorDeviceType::GPU ? gpu_count
963  : static_cast<size_t>(cpu_count);
964 }

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

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

215  {
216  std::vector<Analyzer::Expr*> exprs_not_owned;
217  for (const auto expr : exprs) {
218  exprs_not_owned.push_back(expr.get());
219  }
220  return exprs_not_owned;
221 }

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

References CHECK(), and SQLTypeInfoCore< TYPE_FACET_PACK >::get_notnull().

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

1075  {
1076  if (lhs_ti.get_notnull() && rhs_ti.get_notnull()) {
1077  return "";
1078  }
1079  std::string null_check_suffix{"_nullable"};
1080  if (lhs_ti.get_notnull()) {
1081  CHECK(!rhs_ti.get_notnull());
1082  null_check_suffix += "_rhs";
1083  } else if (rhs_ti.get_notnull()) {
1084  CHECK(!lhs_ti.get_notnull());
1085  null_check_suffix += "_lhs";
1086  }
1087  return null_check_suffix;
1088 }
CHECK(cgen_state)
HOST DEVICE bool get_notnull() const
Definition: sqltypes.h:333

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

References CHECK(), and CHECK_LT.

Referenced by RelAlgExecutor::executeDeleteViaProject(), RelAlgExecutor::executeProject(), RelAlgExecutor::executeUpdateViaProject(), get_column_type(), ColumnFetcher::getOneColumnFragment(), and ColumnFetcher::getResultSetColumn().

180  {
181  CHECK_LT(table_id, 0);
182  const auto it = temporary_tables->find(table_id);
183  CHECK(it != temporary_tables->end());
184  return it->second;
185 }
CHECK(cgen_state)
#define CHECK_LT(x, y)
Definition: Logger.h:200

+ 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 1222 of file NativeCodegen.cpp.

1222  {
1223  return (cpu_only || rt_udf_gpu_module != nullptr) && (rt_udf_cpu_module != nullptr);
1224 }
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 1067 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().

1068  {
1069  if (ra_exe_unit.input_descs.size() < 2) {
1070  return false;
1071  }
1072 
1073  // We only support loop join at the end of folded joins
1074  // where ra_exe_unit.input_descs.size() > 2 for now.
1075  const auto inner_table_id = ra_exe_unit.input_descs.back().getTableId();
1076 
1077  ssize_t inner_table_idx = -1;
1078  for (size_t i = 0; i < query_infos.size(); ++i) {
1079  if (query_infos[i].table_id == inner_table_id) {
1080  inner_table_idx = i;
1081  break;
1082  }
1083  }
1084  CHECK_NE(ssize_t(-1), inner_table_idx);
1085  return query_infos[inner_table_idx].info.getNumTuples() <=
1087 }
unsigned g_trivial_loop_join_threshold
Definition: Execute.cpp:76
const std::vector< InputDescriptor > input_descs
#define CHECK_NE(x, y)
Definition: Logger.h:199

+ Here is the caller graph for this function:

bool is_udf_module_present ( bool  cpu_only = false)

Definition at line 1218 of file NativeCodegen.cpp.

1218  {
1219  return (cpu_only || udf_gpu_module != nullptr) && (udf_cpu_module != nullptr);
1220 }
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 1090 of file Execute.h.

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

Referenced by CodeGenerator::codegen(), CodeGenerator::codegenCmp(), and anonymous_namespace{CalciteAdapter.cpp}::handle_logical_aggregate().

1090  {
1091  return dynamic_cast<const Analyzer::UOper*>(expr) &&
1092  static_cast<const Analyzer::UOper*>(expr)->get_optype() == kUNNEST;
1093 }
SQLOps get_optype() const
Definition: Analyzer.h:364

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

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

127  {
128  switch (bytes) {
129  case 1:
130  return 0;
131  case 2:
132  return 1;
133  case 4:
134  return 2;
135  case 8:
136  return 3;
137  default:
138  abort();
139  }
140 }

+ Here is the caller graph for this function:

std::string numeric_type_name ( const SQLTypeInfo ti)
inline

Definition at line 160 of file Execute.h.

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

Referenced by TargetExprCodegen::codegen(), 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().

160  {
161  CHECK(ti.is_integer() || ti.is_decimal() || ti.is_boolean() || ti.is_time() ||
162  ti.is_fp() || (ti.is_string() && ti.get_compression() == kENCODING_DICT) ||
163  ti.is_timeinterval());
164  if (ti.is_integer() || ti.is_decimal() || ti.is_boolean() || ti.is_time() ||
165  ti.is_string() || ti.is_timeinterval()) {
166  return "int" + std::to_string(ti.get_logical_size() * 8) + "_t";
167  }
168  return ti.get_type() == kDOUBLE ? "double" : "float";
169 }
bool is_fp() const
Definition: sqltypes.h:481
bool is_boolean() const
Definition: sqltypes.h:484
HOST DEVICE EncodingType get_compression() const
Definition: sqltypes.h:334
std::string to_string(char const *&&v)
CHECK(cgen_state)
bool is_time() const
Definition: sqltypes.h:483
int get_logical_size() const
Definition: sqltypes.h:337
HOST DEVICE SQLTypes get_type() const
Definition: sqltypes.h:326
bool is_integer() const
Definition: sqltypes.h:479
bool is_timeinterval() const
Definition: sqltypes.h:488
bool is_string() const
Definition: sqltypes.h:477
bool is_decimal() const
Definition: sqltypes.h:480

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void read_rt_udf_cpu_module ( const std::string &  udf_ir)

Definition at line 1267 of file NativeCodegen.cpp.

Referenced by MapDHandler::register_runtime_extension_functions().

1267  {
1268  llvm::SMDiagnostic parse_error;
1269 
1270  auto buf =
1271  std::make_unique<llvm::MemoryBufferRef>(udf_ir_string, "Runtime UDF for CPU");
1272 
1273  rt_udf_cpu_module = llvm::parseIR(*buf, parse_error, getGlobalLLVMContext());
1274  if (!rt_udf_cpu_module) {
1275  throw_parseIR_error(parse_error);
1276  }
1277 }
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 1255 of file NativeCodegen.cpp.

Referenced by MapDHandler::register_runtime_extension_functions().

1255  {
1256  llvm::SMDiagnostic parse_error;
1257 
1258  auto buf =
1259  std::make_unique<llvm::MemoryBufferRef>(udf_ir_string, "Runtime UDF for GPU");
1260 
1261  rt_udf_gpu_module = llvm::parseIR(*buf, parse_error, getGlobalLLVMContext());
1262  if (!rt_udf_gpu_module) {
1263  throw_parseIR_error(parse_error);
1264  }
1265 }
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 1244 of file NativeCodegen.cpp.

Referenced by UdfCompiler::readCpuCompiledModule().

1244  {
1245  llvm::SMDiagnostic parse_error;
1246 
1247  llvm::StringRef file_name_arg(udf_ir_filename);
1248 
1249  udf_cpu_module = llvm::parseIRFile(file_name_arg, parse_error, getGlobalLLVMContext());
1250  if (!udf_cpu_module) {
1251  throw_parseIR_error(parse_error, udf_ir_filename);
1252  }
1253 }
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 1233 of file NativeCodegen.cpp.

Referenced by UdfCompiler::readGpuCompiledModule().

1233  {
1234  llvm::SMDiagnostic parse_error;
1235 
1236  llvm::StringRef file_name_arg(udf_ir_filename);
1237 
1238  udf_gpu_module = llvm::parseIRFile(file_name_arg, parse_error, getGlobalLLVMContext());
1239  if (!udf_gpu_module) {
1240  throw_parseIR_error(parse_error, udf_ir_filename);
1241  }
1242 }
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 102 of file ExtensionsIR.cpp.

102  {
103  Executor* exec_ptr = reinterpret_cast<Executor*>(exec);
104  if (buffer != nullptr) {
105  exec_ptr->getRowSetMemoryOwner()->addVarlenBuffer(buffer);
106  }
107 }
const Analyzer::Expr* remove_cast_to_int ( const Analyzer::Expr expr)

Definition at line 527 of file ColumnIR.cpp.

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

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

527  {
528  const auto uoper = dynamic_cast<const Analyzer::UOper*>(expr);
529  if (!uoper || uoper->get_optype() != kCAST) {
530  return nullptr;
531  }
532  const auto& target_ti = uoper->get_type_info();
533  if (!target_ti.is_integer()) {
534  return nullptr;
535  }
536  return uoper->get_operand();
537 }
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 202 of file Execute.h.

References get_logical_type_info().

Referenced by columnarize_result().

205  {
206  std::vector<SQLTypeInfo> col_types;
207  for (size_t i = 0; i < result->colCount(); ++i) {
208  col_types.push_back(get_logical_type_info(result->getColType(i)));
209  }
210  return new ColumnarResults(row_set_mem_owner, *result, number, col_types);
211 }
SQLTypeInfo get_logical_type_info(const SQLTypeInfo &type_info)
Definition: sqltypes.h:869

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Variable Documentation

size_t g_big_group_threshold

Definition at line 92 of file Execute.cpp.

Referenced by RelAlgExecutor::executeWorkUnit().

bool g_bigint_count

Definition at line 50 of file GroupByAndAggregate.cpp.

double g_bump_allocator_step_reduction

Definition at line 100 of file Execute.cpp.

size_t g_constrained_by_in_threshold

Definition at line 91 of file Execute.cpp.

Referenced by QueryRewriter::rewriteConstrainedByInImpl().

unsigned g_dynamic_watchdog_time_limit
bool g_enable_columnar_output

Definition at line 86 of file Execute.cpp.

bool g_enable_direct_columnarization
bool g_enable_dynamic_watchdog

Definition at line 72 of file Execute.cpp.

bool g_enable_filter_push_down

Definition at line 82 of file Execute.cpp.

bool g_enable_overlaps_hashjoin
bool g_enable_table_functions

Definition at line 94 of file Execute.cpp.

bool g_enable_window_functions
float g_filter_push_down_high_frac

Definition at line 84 of file Execute.cpp.

float g_filter_push_down_low_frac

Definition at line 83 of file Execute.cpp.

size_t g_filter_push_down_passing_row_ubound

Definition at line 85 of file Execute.cpp.

bool g_inner_join_fragment_skipping

Definition at line 78 of file Execute.cpp.

Referenced by Executor::dispatchFragments(), and MapDProgramOptions::fillOptions().

size_t g_max_memory_allocation_size

Definition at line 95 of file Execute.cpp.

bool g_null_div_by_zero
size_t g_overlaps_max_table_size_bytes
bool g_strip_join_covered_quals
unsigned g_trivial_loop_join_threshold

Definition at line 76 of file Execute.cpp.

Referenced by MapDProgramOptions::fillOptions(), and is_trivial_loop_join().