OmniSciDB  a5dc49c757
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RelAlgTranslator.cpp File Reference
#include "RelAlgTranslator.h"
#include "Analyzer/Analyzer.h"
#include "CalciteDeserializerUtils.h"
#include "DateTimePlusRewrite.h"
#include "DateTimeTranslator.h"
#include "Descriptors/RelAlgExecutionDescriptor.h"
#include "ExpressionRewrite.h"
#include "ExtensionFunctionsBinding.h"
#include "ExtensionFunctionsWhitelist.h"
#include "Parser/ParserNode.h"
#include "RelAlgDag.h"
#include "ScalarExprVisitor.h"
#include "Shared/SqlTypesLayout.h"
#include "Shared/likely.h"
#include "Shared/scope.h"
#include "Shared/thread_count.h"
#include "WindowContext.h"
#include <future>
#include <sstream>
+ Include dependency graph for RelAlgTranslator.cpp:

Go to the source code of this file.

Classes

struct  anonymous_namespace{RelAlgTranslator.cpp}::ByTypeIndex
 

Namespaces

 anonymous_namespace{RelAlgTranslator.cpp}
 

Typedefs

using anonymous_namespace{RelAlgTranslator.cpp}::Handler = std::shared_ptr< Analyzer::Expr >(RelAlgTranslator::*)(RexScalar const *) const
 
using anonymous_namespace{RelAlgTranslator.cpp}::IndexedHandler = std::pair< std::type_index, Handler >
 

Functions

SQLTypeInfo anonymous_namespace{RelAlgTranslator.cpp}::build_type_info (const SQLTypes sql_type, const int scale, const int precision)
 
std::pair< Datum, bool > anonymous_namespace{RelAlgTranslator.cpp}::datum_from_scalar_tv (const ScalarTargetValue *scalar_tv, const SQLTypeInfo &ti) noexcept
 
template<typename... Ts>
std::array< IndexedHandler,
sizeof...(Ts)> 
anonymous_namespace{RelAlgTranslator.cpp}::makeHandlers ()
 
bool anonymous_namespace{RelAlgTranslator.cpp}::is_agg_supported_for_type (const SQLAgg &agg_kind, const SQLTypeInfo &arg_ti)
 
bool anonymous_namespace{RelAlgTranslator.cpp}::is_distinct_supported (SQLAgg const agg_kind)
 
std::shared_ptr< Analyzer::Expranonymous_namespace{RelAlgTranslator.cpp}::get_in_values_expr (std::shared_ptr< Analyzer::Expr > arg, const ResultSet &val_set)
 
void anonymous_namespace{RelAlgTranslator.cpp}::fill_dictionary_encoded_in_vals (std::vector< int64_t > &in_vals, std::atomic< size_t > &total_in_vals_count, const ResultSet *values_rowset, const std::pair< int64_t, int64_t > values_rowset_slice, const StringDictionaryProxy *source_dict, const StringDictionaryProxy *dest_dict, const int64_t needle_null_val)
 
void anonymous_namespace{RelAlgTranslator.cpp}::fill_integer_in_vals (std::vector< int64_t > &in_vals, std::atomic< size_t > &total_in_vals_count, const ResultSet *values_rowset, const std::pair< int64_t, int64_t > values_rowset_slice)
 
void anonymous_namespace{RelAlgTranslator.cpp}::fill_dictionary_encoded_in_vals (std::vector< int64_t > &in_vals, std::atomic< size_t > &total_in_vals_count, const ResultSet *values_rowset, const std::pair< int64_t, int64_t > values_rowset_slice, const std::vector< LeafHostInfo > &leaf_hosts, const DictRef source_dict_ref, const DictRef dest_dict_ref, const int32_t dest_generation, const int64_t needle_null_val)
 
void anonymous_namespace{RelAlgTranslator.cpp}::validate_datetime_datepart_argument (const std::shared_ptr< Analyzer::Constant > literal_expr)
 
std::shared_ptr
< Analyzer::Constant
anonymous_namespace{RelAlgTranslator.cpp}::makeNumericConstant (const SQLTypeInfo &ti, const long val)
 
std::string anonymous_namespace{RelAlgTranslator.cpp}::get_datetimeplus_rewrite_funcname (const SQLOps &op)
 
std::vector< Analyzer::OrderEntryanonymous_namespace{RelAlgTranslator.cpp}::translate_collation (const std::vector< SortField > &sort_fields)
 
size_t anonymous_namespace{RelAlgTranslator.cpp}::determineTimeValMultiplierForTimeType (const SQLTypes &window_frame_bound_type, const Analyzer::Constant *const_expr)
 
ExtractField anonymous_namespace{RelAlgTranslator.cpp}::determineTimeUnit (const SQLTypes &window_frame_bound_type, const Analyzer::Constant *const_expr)
 
SqlWindowFrameBoundType anonymous_namespace{RelAlgTranslator.cpp}::determine_frame_bound_type (const RexWindowFunctionOperator::RexWindowBound &bound)
 
bool anonymous_namespace{RelAlgTranslator.cpp}::is_negative_framing_bound (const SQLTypes t, const Datum &d, bool is_time_unit=false)
 
QualsConjunctiveForm qual_to_conjunctive_form (const std::shared_ptr< Analyzer::Expr > qual_expr)
 
std::vector< std::shared_ptr
< Analyzer::Expr > > 
qual_to_disjunctive_form (const std::shared_ptr< Analyzer::Expr > &qual_expr)
 

Variables

bool g_enable_watchdog
 
size_t g_watchdog_in_clause_max_num_elem_bitmap
 
size_t g_watchdog_in_clause_max_num_elem_non_bitmap
 
size_t g_watchdog_in_clause_max_num_input_rows
 
size_t g_in_clause_num_elem_skip_bitmap
 
bool g_enable_string_functions {true}
 

Function Documentation

QualsConjunctiveForm qual_to_conjunctive_form ( const std::shared_ptr< Analyzer::Expr qual_expr)

Definition at line 2827 of file RelAlgTranslator.cpp.

References CHECK, kAND, qual_to_conjunctive_form(), rewrite_expr(), and QualsConjunctiveForm::simple_quals.

Referenced by anonymous_namespace{IRCodegen.cpp}::add_qualifier_to_execution_unit(), RelAlgExecutor::makeJoinQuals(), qual_to_conjunctive_form(), anonymous_namespace{RelAlgExecutor.cpp}::reverse_logical_distribution(), Executor::skipFragmentInnerJoins(), and anonymous_namespace{RelAlgExecutor.cpp}::translate_quals().

2828  {
2829  CHECK(qual_expr);
2830  auto bin_oper = std::dynamic_pointer_cast<const Analyzer::BinOper>(qual_expr);
2831  if (!bin_oper) {
2832  const auto rewritten_qual_expr = rewrite_expr(qual_expr.get());
2833  return {{}, {rewritten_qual_expr ? rewritten_qual_expr : qual_expr}};
2834  }
2835 
2836  if (bin_oper->get_optype() == kAND) {
2837  const auto lhs_cf = qual_to_conjunctive_form(bin_oper->get_own_left_operand());
2838  const auto rhs_cf = qual_to_conjunctive_form(bin_oper->get_own_right_operand());
2839  auto simple_quals = lhs_cf.simple_quals;
2840  simple_quals.insert(
2841  simple_quals.end(), rhs_cf.simple_quals.begin(), rhs_cf.simple_quals.end());
2842  auto quals = lhs_cf.quals;
2843  quals.insert(quals.end(), rhs_cf.quals.begin(), rhs_cf.quals.end());
2844  return {simple_quals, quals};
2845  }
2846  int rte_idx{0};
2847  const auto simple_qual = bin_oper->normalize_simple_predicate(rte_idx);
2848  return simple_qual ? QualsConjunctiveForm{{simple_qual}, {}}
2849  : QualsConjunctiveForm{{}, {qual_expr}};
2850 }
Analyzer::ExpressionPtr rewrite_expr(const Analyzer::Expr *expr)
QualsConjunctiveForm qual_to_conjunctive_form(const std::shared_ptr< Analyzer::Expr > qual_expr)
Definition: sqldefs.h:39
#define CHECK(condition)
Definition: Logger.h:291
const std::list< std::shared_ptr< Analyzer::Expr > > simple_quals

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

std::vector<std::shared_ptr<Analyzer::Expr> > qual_to_disjunctive_form ( const std::shared_ptr< Analyzer::Expr > &  qual_expr)

Definition at line 2852 of file RelAlgTranslator.cpp.

References CHECK, kOR, qual_to_disjunctive_form(), and rewrite_expr().

Referenced by qual_to_disjunctive_form(), and anonymous_namespace{RelAlgExecutor.cpp}::reverse_logical_distribution().

2853  {
2854  CHECK(qual_expr);
2855  const auto bin_oper = std::dynamic_pointer_cast<const Analyzer::BinOper>(qual_expr);
2856  if (!bin_oper) {
2857  const auto rewritten_qual_expr = rewrite_expr(qual_expr.get());
2858  return {rewritten_qual_expr ? rewritten_qual_expr : qual_expr};
2859  }
2860  if (bin_oper->get_optype() == kOR) {
2861  const auto lhs_df = qual_to_disjunctive_form(bin_oper->get_own_left_operand());
2862  const auto rhs_df = qual_to_disjunctive_form(bin_oper->get_own_right_operand());
2863  auto quals = lhs_df;
2864  quals.insert(quals.end(), rhs_df.begin(), rhs_df.end());
2865  return quals;
2866  }
2867  return {qual_expr};
2868 }
Definition: sqldefs.h:40
Analyzer::ExpressionPtr rewrite_expr(const Analyzer::Expr *expr)
#define CHECK(condition)
Definition: Logger.h:291
std::vector< std::shared_ptr< Analyzer::Expr > > qual_to_disjunctive_form(const std::shared_ptr< Analyzer::Expr > &qual_expr)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Variable Documentation

bool g_enable_watchdog
size_t g_in_clause_num_elem_skip_bitmap

Definition at line 88 of file Execute.cpp.

size_t g_watchdog_in_clause_max_num_elem_bitmap

Definition at line 86 of file Execute.cpp.

size_t g_watchdog_in_clause_max_num_elem_non_bitmap

Definition at line 85 of file Execute.cpp.

size_t g_watchdog_in_clause_max_num_input_rows

Definition at line 87 of file Execute.cpp.