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

#include <GeospatialFunctionFinder.h>

+ Inheritance diagram for GeospatialFunctionFinder:
+ Collaboration diagram for GeospatialFunctionFinder:

Public Member Functions

const std::vector< const
Analyzer::ColumnVar * > & 
getGeoArgCvs () const
 
const std::pair
< shared::TableKey,
shared::TableKey
getTableIdsOfGeoExpr () const
 
const std::string & getGeoFunctionName () const
 
- Public Member Functions inherited from ScalarExprVisitor< void * >
void * visit (const Analyzer::Expr *expr) const
 

Protected Member Functions

void * visitGeoExpr (const Analyzer::GeoExpr *geo_expr) const override
 
void * visitFunctionOper (const Analyzer::FunctionOper *func_oper) const override
 
- Protected Member Functions inherited from ScalarExprVisitor< void * >
virtual void * visitVar (const Analyzer::Var *) const
 
virtual void * visitColumnVar (const Analyzer::ColumnVar *) const
 
virtual void * visitColumnVarTuple (const Analyzer::ExpressionTuple *) const
 
virtual void * visitConstant (const Analyzer::Constant *) const
 
virtual void * visitUOper (const Analyzer::UOper *uoper) const
 
virtual void * visitBinOper (const Analyzer::BinOper *bin_oper) const
 
virtual void * visitInValues (const Analyzer::InValues *in_values) const
 
virtual void * visitInIntegerSet (const Analyzer::InIntegerSet *in_integer_set) const
 
virtual void * visitCharLength (const Analyzer::CharLengthExpr *char_length) const
 
virtual void * visitKeyForString (const Analyzer::KeyForStringExpr *key_for_string) const
 
virtual void * visitSampleRatio (const Analyzer::SampleRatioExpr *sample_ratio) const
 
virtual void * visitStringOper (const Analyzer::StringOper *string_oper) const
 
virtual void * visitCardinality (const Analyzer::CardinalityExpr *cardinality) const
 
virtual void * visitLikeExpr (const Analyzer::LikeExpr *like) const
 
virtual void * visitRegexpExpr (const Analyzer::RegexpExpr *regexp) const
 
virtual void * visitWidthBucket (const Analyzer::WidthBucketExpr *width_bucket_expr) const
 
virtual void * visitCaseExpr (const Analyzer::CaseExpr *case_) const
 
virtual void * visitDatetruncExpr (const Analyzer::DatetruncExpr *datetrunc) const
 
virtual void * visitExtractExpr (const Analyzer::ExtractExpr *extract) const
 
virtual void * visitFunctionOperWithCustomTypeHandling (const Analyzer::FunctionOperWithCustomTypeHandling *func_oper) const
 
virtual void * visitArrayOper (Analyzer::ArrayExpr const *array_expr) const
 
virtual void * visitGeoUOper (const Analyzer::GeoUOper *geo_expr) const
 
virtual void * visitGeoBinOper (const Analyzer::GeoBinOper *geo_expr) const
 
virtual void * visitWindowFunction (const Analyzer::WindowFunction *window_func) const
 
virtual void * visitDatediffExpr (const Analyzer::DatediffExpr *datediff) const
 
virtual void * visitDateaddExpr (const Analyzer::DateaddExpr *dateadd) const
 
virtual void * visitLikelihood (const Analyzer::LikelihoodExpr *likelihood) const
 
virtual void * visitOffsetInFragment (const Analyzer::OffsetInFragment *) const
 
virtual void * visitAggExpr (const Analyzer::AggExpr *agg) const
 
virtual void * visitRangeJoinOper (const Analyzer::RangeOper *range_oper) const
 
virtual void * aggregateResult (const void *&aggregate, const void *&next_result) const
 
virtual void visitBegin () const
 
virtual void * defaultResult () const
 

Private Attributes

std::vector< const
Analyzer::ColumnVar * > 
geo_arg_cvs_
 
std::string geo_func_name_ {""}
 

Detailed Description

Definition at line 26 of file GeospatialFunctionFinder.h.

Member Function Documentation

const std::vector< const Analyzer::ColumnVar * > & GeospatialFunctionFinder::getGeoArgCvs ( ) const

Definition at line 21 of file GeospatialFunctionFinder.cpp.

References geo_arg_cvs_.

Referenced by anonymous_namespace{FromTableReordering.cpp}::get_join_qual_cost().

22  {
23  return geo_arg_cvs_;
24 }
std::vector< const Analyzer::ColumnVar * > geo_arg_cvs_

+ Here is the caller graph for this function:

const std::string & GeospatialFunctionFinder::getGeoFunctionName ( ) const

Definition at line 53 of file GeospatialFunctionFinder.cpp.

References geo_func_name_.

Referenced by anonymous_namespace{FromTableReordering.cpp}::get_join_qual_cost().

53  {
54  return geo_func_name_;
55 }

+ Here is the caller graph for this function:

const std::pair< shared::TableKey, shared::TableKey > GeospatialFunctionFinder::getTableIdsOfGeoExpr ( ) const

Definition at line 27 of file GeospatialFunctionFinder.cpp.

References geo_arg_cvs_.

Referenced by anonymous_namespace{FromTableReordering.cpp}::get_join_qual_cost().

27  {
28  // we assume we do not use self geo join and n-ary geo join
29  if (!geo_arg_cvs_.empty()) {
30  std::unordered_set<shared::TableKey> table_keys;
31  std::for_each(geo_arg_cvs_.cbegin(),
32  geo_arg_cvs_.cend(),
33  [&table_keys](const Analyzer::ColumnVar* cv) {
34  table_keys.emplace(cv->getTableKey());
35  });
36  if (table_keys.size() == 2) {
37  const auto inner_table_key = geo_arg_cvs_.front()->getTableKey();
38  shared::TableKey outer_table_key{-1, -1};
39  std::for_each(
40  table_keys.cbegin(),
41  table_keys.cend(),
42  [&inner_table_key, &outer_table_key](const shared::TableKey& table_key) {
43  if (table_key != inner_table_key) {
44  outer_table_key = table_key;
45  }
46  });
47  return std::make_pair(inner_table_key, outer_table_key);
48  }
49  }
50  return std::make_pair(shared::TableKey{-1, -1}, shared::TableKey{-1, -1});
51 }
std::vector< const Analyzer::ColumnVar * > geo_arg_cvs_

+ Here is the caller graph for this function:

void * GeospatialFunctionFinder::visitFunctionOper ( const Analyzer::FunctionOper func_oper) const
overrideprotectedvirtual

Reimplemented from ScalarExprVisitor< void * >.

Definition at line 57 of file GeospatialFunctionFinder.cpp.

References geo_arg_cvs_, geo_func_name_, Analyzer::FunctionOper::getArg(), Analyzer::FunctionOper::getArity(), and Analyzer::FunctionOper::getName().

58  {
59  geo_func_name_ = func_oper->getName();
60  for (size_t i = 0; i < func_oper->getArity(); i++) {
61  if (auto cv = dynamic_cast<const Analyzer::ColumnVar*>(func_oper->getArg(i))) {
62  geo_arg_cvs_.push_back(cv);
63  }
64  }
65  return nullptr;
66 }
size_t getArity() const
Definition: Analyzer.h:2408
std::vector< const Analyzer::ColumnVar * > geo_arg_cvs_
const Analyzer::Expr * getArg(const size_t i) const
Definition: Analyzer.h:2410
std::string getName() const
Definition: Analyzer.h:2406

+ Here is the call graph for this function:

void * GeospatialFunctionFinder::visitGeoExpr ( const Analyzer::GeoExpr geo_expr) const
overrideprotectedvirtual

Reimplemented from ScalarExprVisitor< void * >.

Definition at line 68 of file GeospatialFunctionFinder.cpp.

References geo_arg_cvs_, and Analyzer::GeoExpr::getChildExprs().

68  {
69  for (auto arg : geo_expr->getChildExprs()) {
70  if (auto cv = dynamic_cast<const Analyzer::ColumnVar*>(arg)) {
71  geo_arg_cvs_.push_back(cv);
72  }
73  }
74  return nullptr;
75 }
virtual std::vector< Analyzer::Expr * > getChildExprs() const
Definition: Analyzer.h:2866
std::vector< const Analyzer::ColumnVar * > geo_arg_cvs_

+ Here is the call graph for this function:

Member Data Documentation

std::vector<const Analyzer::ColumnVar*> GeospatialFunctionFinder::geo_arg_cvs_
mutableprivate
std::string GeospatialFunctionFinder::geo_func_name_ {""}
mutableprivate

Definition at line 38 of file GeospatialFunctionFinder.h.

Referenced by getGeoFunctionName(), and visitFunctionOper().


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