OmniSciDB  eee9fa949c
 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 <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 325 of file Execute.h.

Definition at line 95 of file Execute.h.

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

References CHECK_EQ, INJECT_TIMER, and rows_to_columnar_results().

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

225  {
227  CHECK_EQ(0, frag_id);
228  return rows_to_columnar_results(row_set_mem_owner, result, result->colCount());
229 }
#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:201
#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:222

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

References kCAST.

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

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

References CHECK().

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

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

957  {
958  std::unordered_set<int> available_gpus;
959  if (cat.getDataMgr().gpusPresent()) {
960  int gpu_count = cat.getDataMgr().getCudaMgr()->getDeviceCount();
961  CHECK_GT(gpu_count, 0);
962  for (int gpu_id = 0; gpu_id < gpu_count; ++gpu_id) {
963  available_gpus.insert(gpu_id);
964  }
965  }
966  return available_gpus;
967 }
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:209
int getDeviceCount() const
Definition: CudaMgr.h:88

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

144  {
145  CHECK_GT(table_id, 0);
146  const auto col_desc = cat.getMetadataForColumn(table_id, col_id);
147  CHECK(col_desc);
148  return col_desc;
149 }
#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 170 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().

173  {
174  CHECK(table_id);
175  return table_id > 0 ? get_column_descriptor(col_id, table_id, cat) : nullptr;
176 }
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:141

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

189  {
190  CHECK(cd || temporary_tables);
191  if (cd) {
192  CHECK_EQ(col_id, cd->columnId);
193  CHECK_EQ(table_id, cd->tableId);
194  return cd->columnType;
195  }
196  const auto& temp = get_temporary_table(temporary_tables, table_id);
197  return temp->getColType(col_id);
198 }
#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:178
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 969 of file Execute.cpp.

References GPU.

Referenced by Executor::executeWorkUnitImpl().

971  {
972  return device_type == ExecutorDeviceType::GPU ? gpu_count
973  : static_cast<size_t>(cpu_count);
974 }

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

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

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

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

1015  {
1016  if (lhs_ti.get_notnull() && rhs_ti.get_notnull()) {
1017  return "";
1018  }
1019  std::string null_check_suffix{"_nullable"};
1020  if (lhs_ti.get_notnull()) {
1021  CHECK(!rhs_ti.get_notnull());
1022  null_check_suffix += "_rhs";
1023  } else if (rhs_ti.get_notnull()) {
1024  CHECK(!lhs_ti.get_notnull());
1025  null_check_suffix += "_lhs";
1026  }
1027  return null_check_suffix;
1028 }
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 178 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().

179  {
180  CHECK_LT(table_id, 0);
181  const auto it = temporary_tables->find(table_id);
182  CHECK(it != temporary_tables->end());
183  return it->second;
184 }
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 1212 of file NativeCodegen.cpp.

1212  {
1213  return (cpu_only || rt_udf_gpu_module != nullptr) && (rt_udf_cpu_module != nullptr);
1214 }
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 1077 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().

1078  {
1079  if (ra_exe_unit.input_descs.size() < 2) {
1080  return false;
1081  }
1082 
1083  // We only support loop join at the end of folded joins
1084  // where ra_exe_unit.input_descs.size() > 2 for now.
1085  const auto inner_table_id = ra_exe_unit.input_descs.back().getTableId();
1086 
1087  ssize_t inner_table_idx = -1;
1088  for (size_t i = 0; i < query_infos.size(); ++i) {
1089  if (query_infos[i].table_id == inner_table_id) {
1090  inner_table_idx = i;
1091  break;
1092  }
1093  }
1094  CHECK_NE(ssize_t(-1), inner_table_idx);
1095  return query_infos[inner_table_idx].info.getNumTuples() <=
1097 }
unsigned g_trivial_loop_join_threshold
Definition: Execute.cpp:76
const std::vector< InputDescriptor > input_descs
#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 1208 of file NativeCodegen.cpp.

1208  {
1209  return (cpu_only || udf_gpu_module != nullptr) && (udf_cpu_module != nullptr);
1210 }
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 1030 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().

1030  {
1031  return dynamic_cast<const Analyzer::UOper*>(expr) &&
1032  static_cast<const Analyzer::UOper*>(expr)->get_optype() == kUNNEST;
1033 }
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 126 of file Execute.h.

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

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

+ Here is the caller graph for this function:

std::string numeric_type_name ( const SQLTypeInfo ti)
inline

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

159  {
160  CHECK(ti.is_integer() || ti.is_decimal() || ti.is_boolean() || ti.is_time() ||
161  ti.is_fp() || (ti.is_string() && ti.get_compression() == kENCODING_DICT) ||
162  ti.is_timeinterval());
163  if (ti.is_integer() || ti.is_decimal() || ti.is_boolean() || ti.is_time() ||
164  ti.is_string() || ti.is_timeinterval()) {
165  return "int" + std::to_string(ti.get_logical_size() * 8) + "_t";
166  }
167  return ti.get_type() == kDOUBLE ? "double" : "float";
168 }
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 1257 of file NativeCodegen.cpp.

Referenced by MapDHandler::register_runtime_extension_functions().

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

Referenced by MapDHandler::register_runtime_extension_functions().

1245  {
1246  llvm::SMDiagnostic parse_error;
1247 
1248  auto buf =
1249  std::make_unique<llvm::MemoryBufferRef>(udf_ir_string, "Runtime UDF for GPU");
1250 
1251  rt_udf_gpu_module = llvm::parseIR(*buf, parse_error, getGlobalLLVMContext());
1252  if (!rt_udf_gpu_module) {
1253  throw_parseIR_error(parse_error);
1254  }
1255 }
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 1234 of file NativeCodegen.cpp.

Referenced by UdfCompiler::readCpuCompiledModule().

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

Referenced by UdfCompiler::readGpuCompiledModule().

1223  {
1224  llvm::SMDiagnostic parse_error;
1225 
1226  llvm::StringRef file_name_arg(udf_ir_filename);
1227 
1228  udf_gpu_module = llvm::parseIRFile(file_name_arg, parse_error, getGlobalLLVMContext());
1229  if (!udf_gpu_module) {
1230  throw_parseIR_error(parse_error, udf_ir_filename);
1231  }
1232 }
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 197 of file ExtensionsIR.cpp.

197  {
198  Executor* exec_ptr = reinterpret_cast<Executor*>(exec);
199  if (buffer != nullptr) {
200  exec_ptr->getRowSetMemoryOwner()->addVarlenBuffer(buffer);
201  }
202 }
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 201 of file Execute.h.

References get_logical_type_info().

Referenced by columnarize_result().

204  {
205  std::vector<SQLTypeInfo> col_types;
206  for (size_t i = 0; i < result->colCount(); ++i) {
207  col_types.push_back(get_logical_type_info(result->getColType(i)));
208  }
209  return new ColumnarResults(row_set_mem_owner, *result, number, col_types);
210 }
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().