OmniSciDB  bf83d84833
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ExtensionFunctionsBinding.h File Reference
+ Include dependency graph for ExtensionFunctionsBinding.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  ExtensionFunctionBindingError
 

Namespaces

 Analyzer
 

Functions

ExtensionFunction bind_function (std::string name, Analyzer::ExpressionPtrVector func_args, const bool is_gpu)
 
ExtensionFunction bind_function (std::string name, Analyzer::ExpressionPtrVector func_args)
 
ExtensionFunction bind_function (const Analyzer::FunctionOper *function_oper, const bool is_gpu)
 
const
table_functions::TableFunction 
bind_table_function (std::string name, Analyzer::ExpressionPtrVector input_args, const bool is_gpu)
 
bool is_ext_arg_type_column (const ExtArgumentType ext_arg_type)
 
bool is_ext_arg_type_array (const ExtArgumentType ext_arg_type)
 
bool is_ext_arg_type_geo (const ExtArgumentType ext_arg_type)
 
bool is_ext_arg_type_pointer (const ExtArgumentType ext_arg_type)
 
bool is_ext_arg_type_scalar (const ExtArgumentType ext_arg_type)
 

Function Documentation

ExtensionFunction bind_function ( std::string  name,
Analyzer::ExpressionPtrVector  func_args,
const bool  is_gpu 
)

Definition at line 518 of file ExtensionFunctionsBinding.cpp.

References ExtensionFunctionsWhitelist::get_ext_funcs(), and setup::name.

520  {
521  // used below
522  std::vector<ExtensionFunction> ext_funcs =
524  std::string processor = (is_gpu ? "GPU" : "CPU");
525  return bind_function<ExtensionFunction>(name, func_args, ext_funcs, processor);
526 }
static std::vector< ExtensionFunction > get_ext_funcs(const std::string &name, const bool is_gpu)
string name
Definition: setup.py:35

+ Here is the call graph for this function:

ExtensionFunction bind_function ( std::string  name,
Analyzer::ExpressionPtrVector  func_args 
)

Definition at line 492 of file ExtensionFunctionsBinding.cpp.

References ExtensionFunctionsWhitelist::get_ext_funcs(), and setup::name.

493  {
494  // used in RelAlgTranslator.cpp, first try GPU UDFs, then fall back
495  // to CPU UDFs.
496  bool is_gpu = true;
497  std::string processor = "GPU";
498  auto ext_funcs = ExtensionFunctionsWhitelist::get_ext_funcs(name, is_gpu);
499  if (!ext_funcs.size()) {
500  is_gpu = false;
501  processor = "CPU";
503  }
504  try {
505  return bind_function<ExtensionFunction>(name, func_args, ext_funcs, processor);
506  } catch (ExtensionFunctionBindingError& e) {
507  if (is_gpu) {
508  is_gpu = false;
509  processor = "GPU|CPU";
511  return bind_function<ExtensionFunction>(name, func_args, ext_funcs, processor);
512  } else {
513  throw;
514  }
515  }
516 }
static std::vector< ExtensionFunction > get_ext_funcs(const std::string &name, const bool is_gpu)
string name
Definition: setup.py:35

+ Here is the call graph for this function:

ExtensionFunction bind_function ( const Analyzer::FunctionOper function_oper,
const bool  is_gpu 
)

Definition at line 528 of file ExtensionFunctionsBinding.cpp.

References bind_function(), Analyzer::FunctionOper::getArity(), Analyzer::FunctionOper::getName(), Analyzer::FunctionOper::getOwnArg(), and setup::name.

529  {
530  // used in ExtensionsIR.cpp
531  auto name = function_oper->getName();
532  Analyzer::ExpressionPtrVector func_args = {};
533  for (size_t i = 0; i < function_oper->getArity(); ++i) {
534  func_args.push_back(function_oper->getOwnArg(i));
535  }
536  return bind_function(name, func_args, is_gpu);
537 }
size_t getArity() const
Definition: Analyzer.h:1360
std::shared_ptr< Analyzer::Expr > getOwnArg(const size_t i) const
Definition: Analyzer.h:1367
T bind_function(std::string name, Analyzer::ExpressionPtrVector func_args, const std::vector< T > &ext_funcs, const std::string processor)
std::vector< ExpressionPtr > ExpressionPtrVector
Definition: Analyzer.h:182
std::string getName() const
Definition: Analyzer.h:1358
string name
Definition: setup.py:35

+ Here is the call graph for this function:

const table_functions::TableFunction bind_table_function ( std::string  name,
Analyzer::ExpressionPtrVector  input_args,
const bool  is_gpu 
)

Definition at line 539 of file ExtensionFunctionsBinding.cpp.

References bind_table_function(), and table_functions::TableFunctionsFactory::get_table_funcs().

542  {
543  // used in RelAlgExecutor.cpp
544  std::vector<table_functions::TableFunction> table_funcs =
546  return bind_table_function(name, input_args, table_funcs, is_gpu);
547 }
const table_functions::TableFunction bind_table_function(std::string name, Analyzer::ExpressionPtrVector input_args, const std::vector< table_functions::TableFunction > &table_funcs, const bool is_gpu)
static std::vector< TableFunction > get_table_funcs(const std::string &name, const bool is_gpu)
string name
Definition: setup.py:35

+ Here is the call graph for this function:

bool is_ext_arg_type_array ( const ExtArgumentType  ext_arg_type)

Definition at line 549 of file ExtensionFunctionsBinding.cpp.

References ArrayBool, ArrayDouble, ArrayFloat, ArrayInt16, ArrayInt32, ArrayInt64, and ArrayInt8.

Referenced by CodeGenerator::codegenFunctionOperCastArgs(), ExtensionFunctionsWhitelist::getLLVMDeclarations(), and anonymous_namespace{ExtensionFunctionsBinding.cpp}::match_arguments().

+ Here is the caller graph for this function:

bool is_ext_arg_type_column ( const ExtArgumentType  ext_arg_type)

Definition at line 565 of file ExtensionFunctionsBinding.cpp.

References ColumnBool, ColumnDouble, ColumnFloat, ColumnInt16, ColumnInt32, ColumnInt64, and ColumnInt8.

Referenced by anonymous_namespace{ExtensionFunctionsBinding.cpp}::match_arguments().

+ Here is the caller graph for this function:

bool is_ext_arg_type_geo ( const ExtArgumentType  ext_arg_type)

Definition at line 581 of file ExtensionFunctionsBinding.cpp.

References GeoLineString, GeoMultiPolygon, GeoPoint, and GeoPolygon.

Referenced by CodeGenerator::codegenFunctionOperCastArgs().

581  {
582  switch (ext_arg_type) {
587  return true;
588 
589  default:
590  return false;
591  }
592 }

+ Here is the caller graph for this function:

bool is_ext_arg_type_pointer ( const ExtArgumentType  ext_arg_type)

Definition at line 594 of file ExtensionFunctionsBinding.cpp.

References PBool, PDouble, PFloat, PInt16, PInt32, PInt64, and PInt8.

Referenced by CodeGenerator::codegenFunctionOperCastArgs().

+ Here is the caller graph for this function:

bool is_ext_arg_type_scalar ( const ExtArgumentType  ext_arg_type)

Definition at line 610 of file ExtensionFunctionsBinding.cpp.

References Bool, Double, Float, Int16, Int32, Int64, and Int8.

610  {
611  switch (ext_arg_type) {
619  return true;
620 
621  default:
622  return false;
623  }
624 }