OmniSciDB  c1a53651b2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RelLeftDeepInnerJoin Class Reference

#include <RelAlgDag.h>

+ Inheritance diagram for RelLeftDeepInnerJoin:
+ Collaboration diagram for RelLeftDeepInnerJoin:

Public Member Functions

 RelLeftDeepInnerJoin ()=default
 
 RelLeftDeepInnerJoin (const std::shared_ptr< RelFilter > &filter, RelAlgInputs inputs, std::vector< std::shared_ptr< const RelJoin >> &original_joins)
 
const RexScalargetInnerCondition () const
 
const RexScalargetOuterCondition (const size_t nesting_level) const
 
const JoinType getJoinType (const size_t nesting_level) const
 
std::string toString (RelRexToStringConfig config=RelRexToStringConfig::defaults()) const override
 
size_t toHash () const override
 
size_t size () const override
 
std::shared_ptr< RelAlgNodedeepCopy () const override
 
bool coversOriginalNode (const RelAlgNode *node) const
 
const RelFiltergetOriginalFilter () const
 
std::vector< std::shared_ptr
< const RelJoin > > 
getOriginalJoins () const
 
- Public Member Functions inherited from RelAlgNode
 RelAlgNode (RelAlgInputs inputs={})
 
virtual ~RelAlgNode ()
 
void resetQueryExecutionState ()
 
void setContextData (const RaExecutionDesc *context_data) const
 
void setOutputMetainfo (std::vector< TargetMetaInfo > targets_metainfo) const
 
void setQueryPlanDag (const std::string &extracted_query_plan_dag) const
 
std::string getQueryPlanDag () const
 
size_t getQueryPlanDagHash () const
 
const std::vector
< TargetMetaInfo > & 
getOutputMetainfo () const
 
unsigned getId () const
 
void setIdInPlanTree (size_t id) const
 
std::optional< size_t > getIdInPlanTree () const
 
bool hasContextData () const
 
const RaExecutionDescgetContextData () const
 
const size_t inputCount () const
 
const RelAlgNodegetInput (const size_t idx) const
 
std::shared_ptr< const RelAlgNodegetAndOwnInput (const size_t idx) const
 
void addManagedInput (std::shared_ptr< const RelAlgNode > input)
 
bool hasInput (const RelAlgNode *needle) const
 
virtual void replaceInput (std::shared_ptr< const RelAlgNode > old_input, std::shared_ptr< const RelAlgNode > input)
 
void setRelNodeDagId (const size_t id) const
 
size_t getRelNodeDagId () const
 
bool isNop () const
 
void markAsNop ()
 
void clearContextData () const
 

Private Attributes

std::unique_ptr< const RexScalarcondition_
 
std::vector< std::unique_ptr
< const RexScalar > > 
outer_conditions_per_level_
 
std::shared_ptr< RelFilteroriginal_filter_
 
std::vector< std::shared_ptr
< const RelJoin > > 
original_joins_
 

Friends

struct RelAlgDagSerializer
 

Additional Inherited Members

- Static Public Member Functions inherited from RelAlgNode
static void resetRelAlgFirstId () noexcept
 
- Protected Attributes inherited from RelAlgNode
RelAlgInputs inputs_
 
unsigned id_
 
std::optional< size_t > id_in_plan_tree_
 
std::optional< size_t > hash_
 

Detailed Description

Definition at line 1751 of file RelAlgDag.h.

Constructor & Destructor Documentation

RelLeftDeepInnerJoin::RelLeftDeepInnerJoin ( )
default

Referenced by toHash().

+ Here is the caller graph for this function:

RelLeftDeepInnerJoin::RelLeftDeepInnerJoin ( const std::shared_ptr< RelFilter > &  filter,
RelAlgInputs  inputs,
std::vector< std::shared_ptr< const RelJoin >> &  original_joins 
)

Member Function Documentation

bool RelLeftDeepInnerJoin::coversOriginalNode ( const RelAlgNode node) const

Definition at line 156 of file RelLeftDeepInnerJoin.cpp.

References original_filter_, and original_joins_.

156  {
157  if (node == original_filter_.get()) {
158  return true;
159  }
160  for (const auto& original_join : original_joins_) {
161  if (original_join.get() == node) {
162  return true;
163  }
164  }
165  return false;
166 }
std::shared_ptr< RelFilter > original_filter_
Definition: RelAlgDag.h:1784
std::vector< std::shared_ptr< const RelJoin > > original_joins_
Definition: RelAlgDag.h:1785
std::shared_ptr< RelAlgNode > RelLeftDeepInnerJoin::deepCopy ( ) const
overridevirtual

Implements RelAlgNode.

Definition at line 151 of file RelLeftDeepInnerJoin.cpp.

References CHECK.

151  {
152  CHECK(false);
153  return nullptr;
154 }
#define CHECK(condition)
Definition: Logger.h:291
const RexScalar * RelLeftDeepInnerJoin::getInnerCondition ( ) const

Definition at line 91 of file RelLeftDeepInnerJoin.cpp.

References condition_.

Referenced by RelAlgExecutor::translateLeftDeepJoinFilter(), RelRexDagVisitor::visit(), and anonymous_namespace{QueryPhysicalInputsCollector.cpp}::RelAlgPhysicalInputsVisitor::visitLeftDeepInnerJoin().

91  {
92  return condition_.get();
93 }
std::unique_ptr< const RexScalar > condition_
Definition: RelAlgDag.h:1782

+ Here is the caller graph for this function:

const JoinType RelLeftDeepInnerJoin::getJoinType ( const size_t  nesting_level) const

Definition at line 105 of file RelLeftDeepInnerJoin.cpp.

References CHECK_LE, and original_joins_.

Referenced by anonymous_namespace{RelAlgExecutor.cpp}::left_deep_join_types().

105  {
106  CHECK_LE(nesting_level, original_joins_.size());
107  return original_joins_[original_joins_.size() - nesting_level]->getJoinType();
108 }
std::vector< std::shared_ptr< const RelJoin > > original_joins_
Definition: RelAlgDag.h:1785
#define CHECK_LE(x, y)
Definition: Logger.h:304

+ Here is the caller graph for this function:

const RelFilter * RelLeftDeepInnerJoin::getOriginalFilter ( ) const

Definition at line 168 of file RelLeftDeepInnerJoin.cpp.

References original_filter_.

168  {
169  return original_filter_.get();
170 }
std::shared_ptr< RelFilter > original_filter_
Definition: RelAlgDag.h:1784
std::vector< std::shared_ptr< const RelJoin > > RelLeftDeepInnerJoin::getOriginalJoins ( ) const

Definition at line 172 of file RelLeftDeepInnerJoin.cpp.

References original_joins_.

173  {
174  std::vector<std::shared_ptr<const RelJoin>> original_joins;
175  original_joins.assign(original_joins_.begin(), original_joins_.end());
176  return original_joins;
177 }
std::vector< std::shared_ptr< const RelJoin > > original_joins_
Definition: RelAlgDag.h:1785
const RexScalar * RelLeftDeepInnerJoin::getOuterCondition ( const size_t  nesting_level) const

Definition at line 95 of file RelLeftDeepInnerJoin.cpp.

References CHECK_GE, CHECK_LE, and outer_conditions_per_level_.

Referenced by QueryPlanDagExtractor::handleLeftDeepJoinTree(), anonymous_namespace{RelAlgExecutor.cpp}::left_deep_join_types(), RelAlgExecutor::translateLeftDeepJoinFilter(), RelRexDagVisitor::visit(), and anonymous_namespace{QueryPhysicalInputsCollector.cpp}::RelAlgPhysicalInputsVisitor::visitLeftDeepInnerJoin().

96  {
97  CHECK_GE(nesting_level, size_t(1));
98  CHECK_LE(nesting_level, outer_conditions_per_level_.size());
99  // Outer join conditions are collected depth-first while the returned condition
100  // must be consistent with the order of the loops (which is reverse depth-first).
101  return outer_conditions_per_level_[outer_conditions_per_level_.size() - nesting_level]
102  .get();
103 }
std::vector< std::unique_ptr< const RexScalar > > outer_conditions_per_level_
Definition: RelAlgDag.h:1783
#define CHECK_GE(x, y)
Definition: Logger.h:306
#define CHECK_LE(x, y)
Definition: Logger.h:304

+ Here is the caller graph for this function:

size_t RelLeftDeepInnerJoin::size ( ) const
overridevirtual

Implements RelAlgNode.

Definition at line 143 of file RelLeftDeepInnerJoin.cpp.

References RelAlgNode::inputs_.

143  {
144  size_t total_size = 0;
145  for (const auto& input : inputs_) {
146  total_size += input->size();
147  }
148  return total_size;
149 }
RelAlgInputs inputs_
Definition: RelAlgDag.h:952
size_t RelLeftDeepInnerJoin::toHash ( ) const
overridevirtual

Implements RelAlgNode.

Definition at line 128 of file RelLeftDeepInnerJoin.cpp.

References condition_, RelAlgNode::hash_, HASH_N, RelAlgNode::inputs_, original_filter_, outer_conditions_per_level_, and RelLeftDeepInnerJoin().

128  {
129  if (!hash_) {
130  hash_ = typeid(RelLeftDeepInnerJoin).hash_code();
131  boost::hash_combine(*hash_, condition_ ? condition_->toHash() : HASH_N);
132  for (auto& expr : outer_conditions_per_level_) {
133  boost::hash_combine(*hash_, expr ? expr->toHash() : HASH_N);
134  }
135  boost::hash_combine(*hash_, original_filter_ ? original_filter_->toHash() : HASH_N);
136  for (auto& node : inputs_) {
137  boost::hash_combine(*hash_, node->toHash());
138  }
139  }
140  return *hash_;
141 }
std::vector< std::unique_ptr< const RexScalar > > outer_conditions_per_level_
Definition: RelAlgDag.h:1783
std::shared_ptr< RelFilter > original_filter_
Definition: RelAlgDag.h:1784
static auto const HASH_N
Definition: RelAlgDag.h:44
RelLeftDeepInnerJoin()=default
std::optional< size_t > hash_
Definition: RelAlgDag.h:955
std::unique_ptr< const RexScalar > condition_
Definition: RelAlgDag.h:1782
RelAlgInputs inputs_
Definition: RelAlgDag.h:952

+ Here is the call graph for this function:

std::string RelLeftDeepInnerJoin::toString ( RelRexToStringConfig  config = RelRexToStringConfig::defaults()) const
overridevirtual

Implements RelAlgNode.

Definition at line 110 of file RelLeftDeepInnerJoin.cpp.

References condition_, RelAlgNode::inputs_, RelRexToStringConfig::skip_input_nodes, to_string(), and typeName().

110  {
111  std::string ret = ::typeName(this) + "(";
112  ret += condition_->toString(config);
113  if (!config.skip_input_nodes) {
114  for (const auto& input : inputs_) {
115  ret += " " + input->toString(config);
116  }
117  } else {
118  ret += ", input node id={";
119  for (auto& input : inputs_) {
120  ret += std::to_string(input->getId()) + " ";
121  }
122  ret += "}";
123  }
124  ret += ")";
125  return ret;
126 }
std::string to_string(char const *&&v)
std::string typeName(const T *v)
Definition: toString.h:103
std::unique_ptr< const RexScalar > condition_
Definition: RelAlgDag.h:1782
RelAlgInputs inputs_
Definition: RelAlgDag.h:952

+ Here is the call graph for this function:

Friends And Related Function Documentation

friend struct RelAlgDagSerializer
friend

Definition at line 1787 of file RelAlgDag.h.

Member Data Documentation

std::unique_ptr<const RexScalar> RelLeftDeepInnerJoin::condition_
private

Definition at line 1782 of file RelAlgDag.h.

Referenced by getInnerCondition(), toHash(), and toString().

std::shared_ptr<RelFilter> RelLeftDeepInnerJoin::original_filter_
private

Definition at line 1784 of file RelAlgDag.h.

Referenced by coversOriginalNode(), getOriginalFilter(), and toHash().

std::vector<std::shared_ptr<const RelJoin> > RelLeftDeepInnerJoin::original_joins_
private

Definition at line 1785 of file RelAlgDag.h.

Referenced by coversOriginalNode(), getJoinType(), and getOriginalJoins().

std::vector<std::unique_ptr<const RexScalar> > RelLeftDeepInnerJoin::outer_conditions_per_level_
private

Definition at line 1783 of file RelAlgDag.h.

Referenced by getOuterCondition(), and toHash().


The documentation for this class was generated from the following files: