19 #include <llvm/IR/Value.h>
20 #include <boost/optional.hpp>
47 std::list<std::shared_ptr<Analyzer::Expr>>
quals;
55 "ST_Contains_Polygon_Point"};
57 "ST_Contains_Polygon_Polygon"};
59 "ST_Contains_MultiPolygon_Point"};
61 "ST_Intersects_Point_Polygon"};
63 "ST_Intersects_Point_MultiPolygon"};
65 "ST_Intersects_Polygon_Point"};
67 "ST_Intersects_Polygon_Polygon"};
69 "ST_Intersects_Polygon_MultiPolygon"};
71 "ST_Intersects_MultiPolygon_MultiPolygon"};
73 "ST_Intersects_MultiPolygon_Polygon"};
75 "ST_Intersects_MultiPolygon_Point"};
77 "ST_Approx_Overlaps_MultiPolygon_Point"};
82 "ST_cContains_MultiPolygon_Point"};
84 "ST_cContains_Polygon_Point"};
86 "ST_cIntersects_Polygon_Point"};
88 "ST_cIntersects_MultiPolygon_Point"};
147 [target_func_name](std::string_view func_name) {
148 return target_func_name == func_name;
155 [target_func_name](std::string_view func_name) {
156 return target_func_name == func_name;
164 [target_func_name](std::string_view func_name) {
165 return target_func_name == func_name;
173 [target_func_name](std::string_view func_name) {
174 return target_func_name == func_name;
182 [target_func_name](std::string_view func_name) {
183 return target_func_name == func_name;
191 [target_func_name](std::string_view func_name) {
192 return target_func_name == func_name;
198 const std::shared_ptr<Analyzer::Expr> expr,
199 const std::vector<InputDescriptor>& input_table_info,
201 const Executor* executor);
204 const std::shared_ptr<Analyzer::Expr> expr,
210 const std::list<std::shared_ptr<Analyzer::Expr>>& quals,
217 const int max_rte_covered);
220 std::unordered_map<int, llvm::Value*>& scan_idx_to_hash_pos);
Defines data structures for the semantic analysis phase of query processing.
Analyzer::ExpressionPtr rewrite_array_elements(Analyzer::Expr const *expr)
static bool is_poly_mpoly_rewrite_target_func(std::string_view target_func_name)
static constexpr std::string_view ST_INTERSECTS_POINT_POLYGON_sv
static constexpr std::array< std::string_view, 2 > POINT_POLY_REWRITE_TARGET_FUNC
bool self_join_not_covered_by_left_deep_tree(const Analyzer::ColumnVar *key_side, const Analyzer::ColumnVar *val_side, const int max_rte_covered)
static constexpr std::array< std::string_view, 9 > POLY_POINT_REWRITE_TARGET_FUNC
boost::optional< OverlapsJoinConjunction > rewrite_overlaps_conjunction(const std::shared_ptr< Analyzer::Expr > expr, const std::vector< InputDescriptor > &input_table_info, const OverlapsJoinRewriteType rewrite_type, const Executor *executor)
static bool is_overlaps_supported_func(std::string_view target_func_name)
std::list< std::shared_ptr< Analyzer::Expr > > quals
static constexpr std::string_view ST_INTERSECTS_POINT_MULTIPOLYGON_sv
static constexpr std::string_view ST_INTERSECTS_MULTIPOLYGON_MULTIPOLYGON_sv
std::shared_ptr< Analyzer::Expr > ExpressionPtr
std::list< std::shared_ptr< Analyzer::Expr > > join_quals
std::vector< JoinCondition > JoinQualsPerNestingLevel
Analyzer::ExpressionPtr rewrite_expr(const Analyzer::Expr *expr)
static constexpr std::string_view ST_DWITHIN_POINT_POINT_sv
std::list< std::shared_ptr< Analyzer::Expr > > strip_join_covered_filter_quals(const std::list< std::shared_ptr< Analyzer::Expr >> &quals, const JoinQualsPerNestingLevel &join_quals)
const int get_max_rte_scan_table(std::unordered_map< int, llvm::Value * > &scan_idx_to_hash_pos)
static constexpr std::string_view ST_OVERLAPS_sv
static constexpr std::string_view ST_DISTANCE_sv
static constexpr std::string_view ST_CONTAINS_POLYGON_POLYGON_sv
static constexpr std::string_view ST_INTERSECTS_POLYGON_POLYGON_sv
static constexpr std::array< std::string_view, 2 > RANGE_JOIN_REWRITE_TARGET_FUNC
static constexpr std::string_view ST_INTERSECTS_MULTIPOLYGON_POINT_sv
static bool is_many_to_many_func(std::string_view target_func_name)
static bool is_range_join_rewrite_target_func(std::string_view target_func_name)
static constexpr std::string_view ST_CINTERSECTS_POLYGON_POINT_sv
static constexpr std::array< std::string_view, 5 > MANY_TO_MANY_OVERLAPS_FUNC
static bool is_poly_point_rewrite_target_func(std::string_view target_func_name)
static constexpr std::string_view ST_CONTAINS_POLYGON_POINT_sv
static constexpr std::string_view ST_APPROX_OVERLAPS_MULTIPOLYGON_POINT_sv
static constexpr std::array< std::string_view, 18 > OVERLAPS_SUPPORTED_FUNC
static constexpr std::string_view ST_INTERSECTS_POLYGON_POINT_sv
static constexpr std::string_view ST_INTERSECTS_MULTIPOLYGON_POLYGON_sv
static constexpr std::string_view ST_INTERSECTS_POLYGON_MULTIPOLYGON_sv
static constexpr std::string_view ST_CONTAINS_MULTIPOLYGON_POINT_sv
boost::optional< OverlapsJoinConjunction > convert_to_range_join_oper(const std::shared_ptr< Analyzer::Expr > expr, const Analyzer::BinOper *range_join_expr, const Analyzer::GeoOperator *lhs, const Analyzer::Constant *rhs)
bool any_of(std::vector< Analyzer::Expr * > const &target_exprs)
Execution unit for relational algebra. It's a low-level description of any relational algebra operati...
static constexpr std::string_view ST_CCONTAINS_POLYGON_POINT_sv
static constexpr std::string_view ST_CINTERSECTS_MULTIPOLYGON_POINT_sv
static constexpr std::array< std::string_view, 5 > POLY_MPOLY_REWRITE_TARGET_FUNC
std::shared_ptr< Analyzer::Expr > fold_expr(const Analyzer::Expr *expr)
static bool is_point_poly_rewrite_target_func(std::string_view target_func_name)
static constexpr std::string_view ST_CCONTAINS_MULTIPOLYGON_POINT_sv