PostgreSQL Source Code git master
|
#include "postgres.h"
#include <limits.h>
#include "access/stratnum.h"
#include "catalog/pg_type.h"
#include "common/hashfn.h"
#include "nodes/makefuncs.h"
#include "nodes/nodeFuncs.h"
#include "optimizer/appendinfo.h"
#include "optimizer/clauses.h"
#include "optimizer/optimizer.h"
#include "optimizer/pathnode.h"
#include "optimizer/paths.h"
#include "optimizer/planmain.h"
#include "optimizer/restrictinfo.h"
#include "rewrite/rewriteManip.h"
#include "utils/lsyscache.h"
#include "lib/simplehash.h"
Go to the source code of this file.
Data Structures | |
struct | ECDerivesKey |
struct | ECDerivesEntry |
Macros | |
#define | EC_DERIVES_HASH_THRESHOLD 32 |
#define | SH_PREFIX derives |
#define | SH_ELEMENT_TYPE ECDerivesEntry |
#define | SH_KEY_TYPE ECDerivesKey |
#define | SH_KEY key |
#define | SH_HASH_KEY(tb, key) hash_bytes((const unsigned char *) &(key), sizeof(ECDerivesKey)) |
#define | SH_EQUAL(tb, a, b) ((a).em1 == (b).em1 && (a).em2 == (b).em2 && (a).parent_ec == (b).parent_ec) |
#define | SH_SCOPE static inline |
#define | SH_DECLARE |
#define | SH_DEFINE |
#define EC_DERIVES_HASH_THRESHOLD 32 |
Definition at line 124 of file equivclass.c.
#define SH_DECLARE |
Definition at line 135 of file equivclass.c.
#define SH_DEFINE |
Definition at line 136 of file equivclass.c.
#define SH_ELEMENT_TYPE ECDerivesEntry |
Definition at line 127 of file equivclass.c.
#define SH_EQUAL | ( | tb, | |
a, | |||
b | |||
) | ((a).em1 == (b).em1 && (a).em2 == (b).em2 && (a).parent_ec == (b).parent_ec) |
Definition at line 132 of file equivclass.c.
#define SH_HASH_KEY | ( | tb, | |
key | |||
) | hash_bytes((const unsigned char *) &(key), sizeof(ECDerivesKey)) |
Definition at line 130 of file equivclass.c.
#define SH_KEY key |
Definition at line 129 of file equivclass.c.
#define SH_KEY_TYPE ECDerivesKey |
Definition at line 128 of file equivclass.c.
#define SH_PREFIX derives |
Definition at line 126 of file equivclass.c.
#define SH_SCOPE static inline |
Definition at line 134 of file equivclass.c.
|
static |
Definition at line 661 of file equivclass.c.
References Assert(), bms_add_member(), EquivalenceClass::ec_childmembers, EquivalenceClass::ec_childmembers_size, RelOptInfo::eclass_indexes, lappend(), make_eq_member(), palloc0_array, repalloc0_array, root, and unlikely.
Referenced by add_child_join_rel_equivalences(), add_child_rel_equivalences(), and add_setop_child_rel_equivalences().
void add_child_join_rel_equivalences | ( | PlannerInfo * | root, |
int | nappinfos, | ||
AppendRelInfo ** | appinfos, | ||
RelOptInfo * | parent_joinrel, | ||
RelOptInfo * | child_joinrel | ||
) |
Definition at line 2941 of file equivclass.c.
References add_child_eq_member(), adjust_appendrel_attrs(), adjust_appendrel_attrs_multilevel(), Assert(), bms_add_members(), bms_difference(), bms_membership(), BMS_MULTIPLE, bms_next_member(), bms_overlap(), EquivalenceClass::ec_has_volatile, EquivalenceClass::ec_members, EquivalenceClass::ec_relids, foreach_node, get_eclass_indexes_for_relids(), i, IS_JOIN_REL, list_nth(), MemoryContextSwitchTo(), RelOptInfo::relids, RELOPT_JOINREL, RELOPT_OTHER_JOINREL, RelOptInfo::reloptkind, root, and RelOptInfo::top_parent_relids.
Referenced by build_child_join_rel().
void add_child_rel_equivalences | ( | PlannerInfo * | root, |
AppendRelInfo * | appinfo, | ||
RelOptInfo * | parent_rel, | ||
RelOptInfo * | child_rel | ||
) |
Definition at line 2833 of file equivclass.c.
References add_child_eq_member(), adjust_appendrel_attrs(), adjust_appendrel_attrs_multilevel(), Assert(), bms_add_members(), bms_difference(), bms_is_empty, bms_is_subset(), bms_next_member(), EquivalenceClass::ec_has_volatile, EquivalenceClass::ec_members, EquivalenceClass::ec_relids, RelOptInfo::eclass_indexes, foreach_node, i, IS_SIMPLE_REL, list_nth(), RelOptInfo::relid, RelOptInfo::relids, RELOPT_BASEREL, RelOptInfo::reloptkind, root, and RelOptInfo::top_parent_relids.
Referenced by set_append_rel_size().
|
static |
Definition at line 628 of file equivclass.c.
References bms_add_members(), EquivalenceClass::ec_members, EquivalenceClass::ec_relids, lappend(), and make_eq_member().
Referenced by get_eclass_for_sort_expr(), and process_equivalence().
void add_setop_child_rel_equivalences | ( | PlannerInfo * | root, |
RelOptInfo * | child_rel, | ||
List * | child_tlist, | ||
List * | setop_pathkeys | ||
) |
Definition at line 3084 of file equivclass.c.
References add_child_eq_member(), bms_add_range(), RelOptInfo::eclass_indexes, elog, EquivalenceMember::em_jdomain, ERROR, TargetEntry::expr, exprType(), lfirst_node, linitial, list_head(), list_length(), lnext(), RelOptInfo::relid, RelOptInfo::relids, and root.
Referenced by build_setop_child_paths().
Definition at line 545 of file equivclass.c.
References applyRelabelType(), COERCE_IMPLICIT_CAST, exprCollation(), exprType(), and exprTypmod().
Referenced by convert_subquery_pathkeys(), get_eclass_for_sort_expr(), and process_equivalence().
|
static |
Definition at line 1983 of file equivclass.c.
References bms_add_members(), bms_union(), build_implied_join_equality(), create_join_clause(), ec_add_derived_clause(), EquivalenceClass::ec_collation, EquivalenceClass::ec_min_security, ec_search_clause_for_ems(), EquivalenceMember::em_expr, EquivalenceMember::em_is_child, EquivalenceMember::em_relids, MemoryContextSwitchTo(), RestrictInfo::rinfo_serial, and root.
Referenced by create_join_clause(), generate_implied_equalities_for_column(), and generate_join_implied_equalities_normal().
|
static |
Definition at line 3789 of file equivclass.c.
References Assert(), EquivalenceClass::ec_derives_hash, fill_ec_derives_key(), sort-test::key, and ECDerivesEntry::rinfo.
Referenced by ec_add_derived_clause(), ec_add_derived_clauses(), and ec_build_derives_hash().
|
static |
Definition at line 3703 of file equivclass.c.
References Assert(), ec_add_clause_to_derives_hash(), EquivalenceClass::ec_derives_hash, EquivalenceClass::ec_derives_list, and lappend().
Referenced by create_join_clause(), and generate_base_implied_equalities_const().
|
static |
Definition at line 3733 of file equivclass.c.
References ec_add_clause_to_derives_hash(), EquivalenceClass::ec_derives_hash, EquivalenceClass::ec_derives_list, foreach_node, and list_concat().
Referenced by process_equivalence().
|
static |
Definition at line 3673 of file equivclass.c.
References Assert(), ec_add_clause_to_derives_hash(), EquivalenceClass::ec_derives_hash, EquivalenceClass::ec_derives_list, foreach_node, list_length(), and root.
Referenced by ec_search_derived_clause_for_ems().
void ec_clear_derived_clauses | ( | EquivalenceClass * | ec | ) |
Definition at line 3831 of file equivclass.c.
References EquivalenceClass::ec_derives_hash, EquivalenceClass::ec_derives_list, list_free(), and NIL.
Referenced by process_equivalence(), remove_rel_from_eclass(), and update_eclasses().
|
static |
Definition at line 3855 of file equivclass.c.
References ec_search_derived_clause_for_ems(), EquivalenceClass::ec_sources, foreach_node, and root.
Referenced by create_join_clause().
|
static |
Definition at line 3893 of file equivclass.c.
References Assert(), ec_build_derives_hash(), EquivalenceClass::ec_derives_hash, EC_DERIVES_HASH_THRESHOLD, EquivalenceClass::ec_derives_list, fill_ec_derives_key(), foreach_node, sort-test::key, list_length(), ECDerivesEntry::rinfo, and root.
Referenced by ec_search_clause_for_ems(), and find_derived_clause_for_ec_member().
EquivalenceMember * eclass_member_iterator_next | ( | EquivalenceMemberIterator * | it | ) |
Definition at line 3175 of file equivclass.c.
References bms_next_member(), EquivalenceMemberIterator::child_relids, EquivalenceMemberIterator::current_cell, EquivalenceMemberIterator::current_list, EquivalenceMemberIterator::current_relid, EquivalenceMemberIterator::ec, EquivalenceClass::ec_childmembers, EquivalenceClass::ec_childmembers_size, lfirst_node, list_head(), lnext(), and NIL.
Referenced by find_computable_ec_member(), find_ec_member_matching_expr(), find_em_for_rel(), generate_implied_equalities_for_column(), generate_join_implied_equalities_normal(), get_eclass_for_sort_expr(), and match_pathkeys_to_index().
bool eclass_useful_for_merging | ( | PlannerInfo * | root, |
EquivalenceClass * | eclass, | ||
RelOptInfo * | rel | ||
) |
Definition at line 3490 of file equivclass.c.
References Assert(), bms_is_empty, bms_is_subset(), bms_overlap(), eclass(), EquivalenceMember::em_is_child, EquivalenceMember::em_relids, IS_OTHER_REL, lfirst, list_length(), RelOptInfo::relids, and RelOptInfo::top_parent_relids.
Referenced by get_useful_ecs_for_relation(), and pathkeys_useful_for_merging().
bool exprs_known_equal | ( | PlannerInfo * | root, |
Node * | item1, | ||
Node * | item2, | ||
Oid | opfamily | ||
) |
Definition at line 2648 of file equivclass.c.
References Assert(), EquivalenceClass::ec_has_volatile, EquivalenceClass::ec_members, EquivalenceClass::ec_opfamilies, EquivalenceMember::em_expr, EquivalenceMember::em_is_child, equal(), lfirst, list_member_oid(), OidIsValid, and root.
Referenced by add_unique_group_var(), and have_partkey_equi_join().
|
inlinestatic |
Definition at line 3755 of file equivclass.c.
References Assert(), and sort-test::key.
Referenced by ec_add_clause_to_derives_hash(), and ec_search_derived_clause_for_ems().
EquivalenceMember * find_computable_ec_member | ( | PlannerInfo * | root, |
EquivalenceClass * | ec, | ||
List * | exprs, | ||
Relids | relids, | ||
bool | require_parallel_safe | ||
) |
Definition at line 991 of file equivclass.c.
References bms_is_subset(), eclass_member_iterator_next(), EquivalenceMember::em_expr, EquivalenceMember::em_is_child, EquivalenceMember::em_is_const, EquivalenceMember::em_relids, is_parallel_safe(), lfirst, list_free(), list_member(), pull_var_clause(), PVC_INCLUDE_AGGREGATES, PVC_INCLUDE_CONVERTROWTYPES, PVC_INCLUDE_PLACEHOLDERS, PVC_INCLUDE_WINDOWFUNCS, root, and setup_eclass_member_iterator().
Referenced by prepare_sort_from_pathkeys(), and relation_can_be_sorted_early().
RestrictInfo * find_derived_clause_for_ec_member | ( | PlannerInfo * | root, |
EquivalenceClass * | ec, | ||
EquivalenceMember * | em | ||
) |
Definition at line 2804 of file equivclass.c.
References Assert(), EquivalenceClass::ec_has_const, ec_search_derived_clause_for_ems(), EquivalenceMember::em_is_const, and root.
Referenced by get_foreign_key_join_selectivity().
EquivalenceMember * find_ec_member_matching_expr | ( | EquivalenceClass * | ec, |
Expr * | expr, | ||
Relids | relids | ||
) |
Definition at line 916 of file equivclass.c.
References bms_is_subset(), eclass_member_iterator_next(), EquivalenceMember::em_expr, EquivalenceMember::em_is_child, EquivalenceMember::em_is_const, EquivalenceMember::em_relids, equal(), IsA, and setup_eclass_member_iterator().
Referenced by make_unique_from_pathkeys(), prepare_sort_from_pathkeys(), and relation_can_be_sorted_early().
|
static |
Definition at line 2617 of file equivclass.c.
References bms_is_subset(), elog, ERROR, JoinDomain::jd_relids, lfirst, and root.
Referenced by reconsider_full_join_clause(), and reconsider_outer_join_clause().
void generate_base_implied_equalities | ( | PlannerInfo * | root | ) |
Definition at line 1188 of file equivclass.c.
References Assert(), bms_add_member(), bms_is_member(), bms_membership(), BMS_MULTIPLE, bms_next_member(), EquivalenceClass::ec_broken, EquivalenceClass::ec_has_const, EquivalenceClass::ec_members, EquivalenceClass::ec_merged, EquivalenceClass::ec_relids, RelOptInfo::eclass_indexes, generate_base_implied_equalities_broken(), generate_base_implied_equalities_const(), generate_base_implied_equalities_no_const(), RelOptInfo::has_eclass_joins, i, lfirst, list_length(), RELOPT_BASEREL, RelOptInfo::reloptkind, and root.
Referenced by query_planner().
|
static |
Definition at line 1487 of file equivclass.c.
References bms_membership(), BMS_MULTIPLE, distribute_restrictinfo_to_rels(), EquivalenceClass::ec_has_const, EquivalenceClass::ec_sources, lfirst, RestrictInfo::required_relids, and root.
Referenced by generate_base_implied_equalities().
|
static |
Definition at line 1272 of file equivclass.c.
References Assert(), distribute_restrictinfo_to_rels(), ec_add_derived_clause(), EquivalenceClass::ec_broken, EquivalenceClass::ec_childmembers, EquivalenceClass::ec_collation, EquivalenceClass::ec_members, EquivalenceClass::ec_min_security, EquivalenceClass::ec_sources, EquivalenceMember::em_datatype, EquivalenceMember::em_expr, EquivalenceMember::em_is_child, EquivalenceMember::em_is_const, EquivalenceMember::em_jdomain, IsA, JoinDomain::jd_relids, lfirst, linitial, list_length(), OidIsValid, process_implied_equality(), root, and select_equality_operator().
Referenced by generate_base_implied_equalities().
|
static |
Definition at line 1371 of file equivclass.c.
References add_vars_to_targetlist(), Assert(), bms_get_singleton_member(), EquivalenceClass::ec_broken, EquivalenceClass::ec_childmembers, EquivalenceClass::ec_collation, EquivalenceClass::ec_members, EquivalenceClass::ec_min_security, EquivalenceClass::ec_relids, EquivalenceMember::em_datatype, EquivalenceMember::em_expr, EquivalenceMember::em_is_child, EquivalenceMember::em_relids, lfirst, list_free(), OidIsValid, palloc0(), pfree(), process_implied_equality(), pull_var_clause(), PVC_INCLUDE_PLACEHOLDERS, PVC_RECURSE_AGGREGATES, PVC_RECURSE_WINDOWFUNCS, root, and select_equality_operator().
Referenced by generate_base_implied_equalities().
List * generate_implied_equalities_for_column | ( | PlannerInfo * | root, |
RelOptInfo * | rel, | ||
ec_matches_callback_type | callback, | ||
void * | callback_arg, | ||
Relids | prohibited_rels | ||
) |
Definition at line 3239 of file equivclass.c.
References Assert(), bms_equal(), bms_is_subset(), bms_next_member(), bms_overlap(), callback(), create_join_clause(), EquivalenceClass::ec_has_const, EquivalenceClass::ec_members, EquivalenceClass::ec_relids, RelOptInfo::eclass_indexes, eclass_member_iterator_next(), EquivalenceMember::em_datatype, EquivalenceMember::em_is_child, EquivalenceMember::em_relids, find_childrel_parents(), i, IS_SIMPLE_REL, lappend(), lfirst, list_length(), list_nth(), NIL, OidIsValid, RelOptInfo::relids, RELOPT_OTHER_MEMBER_REL, RelOptInfo::reloptkind, root, select_equality_operator(), and setup_eclass_member_iterator().
Referenced by create_tidscan_paths(), match_eclass_clauses_to_index(), and postgresGetForeignPaths().
List * generate_join_implied_equalities | ( | PlannerInfo * | root, |
Relids | join_relids, | ||
Relids | outer_relids, | ||
RelOptInfo * | inner_rel, | ||
SpecialJoinInfo * | sjinfo | ||
) |
Definition at line 1550 of file equivclass.c.
References add_outer_joins_to_relids(), Assert(), bms_is_empty, bms_next_member(), bms_overlap(), bms_union(), EquivalenceClass::ec_broken, EquivalenceClass::ec_has_const, EquivalenceClass::ec_members, EquivalenceClass::ec_relids, generate_join_implied_equalities_broken(), generate_join_implied_equalities_normal(), get_common_eclass_indexes(), get_eclass_indexes_for_relids(), i, IS_OTHER_REL, list_concat(), list_length(), list_nth(), NIL, SpecialJoinInfo::ojrelid, RelOptInfo::relids, root, and RelOptInfo::top_parent_relids.
Referenced by build_joinrel_restrictlist(), check_index_predicates(), get_baserel_parampathinfo(), get_joinrel_parampathinfo(), reduce_unique_semijoins(), and remove_self_joins_one_group().
|
static |
Definition at line 1899 of file equivclass.c.
References adjust_appendrel_attrs_multilevel(), bms_is_subset(), EquivalenceClass::ec_sources, IS_OTHER_REL, lappend(), lfirst, NIL, RestrictInfo::required_relids, and root.
Referenced by generate_join_implied_equalities(), and generate_join_implied_equalities_for_ecs().
List * generate_join_implied_equalities_for_ecs | ( | PlannerInfo * | root, |
List * | eclasses, | ||
Relids | join_relids, | ||
Relids | outer_relids, | ||
RelOptInfo * | inner_rel | ||
) |
Definition at line 1650 of file equivclass.c.
References Assert(), bms_is_empty, bms_overlap(), bms_union(), EquivalenceClass::ec_broken, EquivalenceClass::ec_has_const, EquivalenceClass::ec_members, EquivalenceClass::ec_relids, generate_join_implied_equalities_broken(), generate_join_implied_equalities_normal(), IS_OTHER_REL, lfirst, list_concat(), list_length(), NIL, RelOptInfo::relids, root, and RelOptInfo::top_parent_relids.
Referenced by get_joinrel_parampathinfo().
|
static |
Definition at line 1721 of file equivclass.c.
References bms_is_subset(), create_join_clause(), EquivalenceClass::ec_broken, eclass_member_iterator_next(), EquivalenceMember::em_datatype, EquivalenceMember::em_expr, EquivalenceMember::em_relids, exprType(), InvalidOid, IsA, lappend(), lfirst, linitial, list_concat(), NIL, OidIsValid, op_hashjoinable(), root, select_equality_operator(), and setup_eclass_member_iterator().
Referenced by generate_join_implied_equalities(), and generate_join_implied_equalities_for_ecs().
|
static |
Definition at line 3647 of file equivclass.c.
References bms_get_singleton_member(), bms_int_members(), get_eclass_indexes_for_relids(), and root.
Referenced by generate_join_implied_equalities(), and have_relevant_eclass_joinclause().
EquivalenceClass * get_eclass_for_sort_expr | ( | PlannerInfo * | root, |
Expr * | expr, | ||
List * | opfamilies, | ||
Oid | opcintype, | ||
Oid | collation, | ||
Index | sortref, | ||
Relids | rel, | ||
bool | create_it | ||
) |
Definition at line 736 of file equivclass.c.
References add_eq_member(), Assert(), bms_add_member(), bms_equal(), bms_is_member(), bms_next_member(), canonicalize_ec_expression(), contain_agg_clause(), contain_volatile_functions(), contain_window_function(), copyObject, EquivalenceClass::ec_broken, EquivalenceClass::ec_childmembers, EquivalenceClass::ec_childmembers_size, EquivalenceClass::ec_collation, EquivalenceClass::ec_derives_hash, EquivalenceClass::ec_derives_list, EquivalenceClass::ec_has_const, EquivalenceClass::ec_has_volatile, EquivalenceClass::ec_max_security, EquivalenceClass::ec_members, EquivalenceClass::ec_merged, EquivalenceClass::ec_min_security, EquivalenceClass::ec_opfamilies, EquivalenceClass::ec_relids, EquivalenceClass::ec_sortref, EquivalenceClass::ec_sources, RelOptInfo::eclass_indexes, eclass_member_iterator_next(), elog, EquivalenceMember::em_datatype, EquivalenceMember::em_expr, EquivalenceMember::em_is_child, EquivalenceMember::em_is_const, EquivalenceMember::em_jdomain, EquivalenceMember::em_relids, equal(), ERROR, expression_returns_set(), i, lappend(), lfirst, linitial_node, list_copy(), list_length(), makeNode, MemoryContextSwitchTo(), NIL, pull_varnos(), RELOPT_BASEREL, RelOptInfo::reloptkind, root, and setup_eclass_member_iterator().
Referenced by convert_subquery_pathkeys(), initialize_mergeclause_eclasses(), and make_pathkey_from_sortinfo().
|
static |
Definition at line 3613 of file equivclass.c.
References Assert(), bms_add_members(), bms_is_member(), bms_next_member(), RelOptInfo::eclass_indexes, i, and root.
Referenced by add_child_join_rel_equivalences(), generate_join_implied_equalities(), get_common_eclass_indexes(), and has_relevant_eclass_joinclause().
bool has_relevant_eclass_joinclause | ( | PlannerInfo * | root, |
RelOptInfo * | rel1 | ||
) |
Definition at line 3446 of file equivclass.c.
References bms_is_subset(), bms_next_member(), EquivalenceClass::ec_members, EquivalenceClass::ec_relids, get_eclass_indexes_for_relids(), i, list_length(), list_nth(), RelOptInfo::relids, and root.
Referenced by build_join_rel().
bool have_relevant_eclass_joinclause | ( | PlannerInfo * | root, |
RelOptInfo * | rel1, | ||
RelOptInfo * | rel2 | ||
) |
Definition at line 3370 of file equivclass.c.
References Assert(), bms_next_member(), bms_overlap(), EquivalenceClass::ec_members, EquivalenceClass::ec_relids, get_common_eclass_indexes(), i, list_length(), list_nth(), RelOptInfo::relids, and root.
Referenced by have_relevant_joinclause().
bool is_redundant_derived_clause | ( | RestrictInfo * | rinfo, |
List * | clauselist | ||
) |
Definition at line 3550 of file equivclass.c.
References lfirst.
Referenced by create_tidscan_plan().
bool is_redundant_with_indexclauses | ( | RestrictInfo * | rinfo, |
List * | indexclauses | ||
) |
Definition at line 3577 of file equivclass.c.
References lfirst_node, IndexClause::lossy, and IndexClause::rinfo.
Referenced by create_indexscan_plan(), extract_nonindex_conditions(), and has_indexed_join_quals().
|
static |
Definition at line 592 of file equivclass.c.
References Assert(), bms_is_empty, EquivalenceClass::ec_has_const, EquivalenceMember::em_datatype, EquivalenceMember::em_expr, EquivalenceMember::em_is_child, EquivalenceMember::em_is_const, EquivalenceMember::em_jdomain, EquivalenceMember::em_relids, and makeNode.
Referenced by add_child_eq_member(), and add_eq_member().
EquivalenceClass * match_eclasses_to_foreign_key_col | ( | PlannerInfo * | root, |
ForeignKeyOptInfo * | fkinfo, | ||
int | colno | ||
) |
Definition at line 2710 of file equivclass.c.
References Assert(), bms_intersect(), bms_next_member(), ForeignKeyOptInfo::con_relid, EquivalenceClass::ec_has_volatile, EquivalenceClass::ec_members, EquivalenceClass::ec_opfamilies, ForeignKeyOptInfo::eclass, RelOptInfo::eclass_indexes, EquivalenceMember::em_expr, EquivalenceMember::em_is_child, equal(), ForeignKeyOptInfo::fk_eclass_member, get_mergejoin_opfamilies(), i, IS_SIMPLE_REL, IsA, lfirst, list_nth(), NIL, ForeignKeyOptInfo::ref_relid, root, Var::varattno, Var::varno, and while().
Referenced by match_foreign_keys_to_quals().
bool process_equivalence | ( | PlannerInfo * | root, |
RestrictInfo ** | p_restrictinfo, | ||
JoinDomain * | jdomain | ||
) |
Definition at line 179 of file equivclass.c.
References add_eq_member(), NullTest::arg, Assert(), bms_join(), canonicalize_ec_expression(), RestrictInfo::clause, ec_add_derived_clauses(), EquivalenceClass::ec_broken, EquivalenceClass::ec_childmembers, EquivalenceClass::ec_childmembers_size, ec_clear_derived_clauses(), EquivalenceClass::ec_collation, EquivalenceClass::ec_derives_hash, EquivalenceClass::ec_derives_list, EquivalenceClass::ec_has_const, EquivalenceClass::ec_has_volatile, EquivalenceClass::ec_max_security, EquivalenceClass::ec_members, EquivalenceClass::ec_merged, EquivalenceClass::ec_min_security, EquivalenceClass::ec_opfamilies, EquivalenceClass::ec_relids, EquivalenceClass::ec_sortref, EquivalenceClass::ec_sources, elog, EquivalenceMember::em_datatype, EquivalenceMember::em_expr, EquivalenceMember::em_is_child, EquivalenceMember::em_is_const, EquivalenceMember::em_jdomain, equal(), ERROR, exprType(), foreach_current_index, func_strict(), get_leftop(), get_rightop(), RestrictInfo::has_clone, RestrictInfo::incompatible_relids, RestrictInfo::is_clone, IS_NOT_NULL, is_opclause(), RestrictInfo::is_pushed_down, lappend(), lfirst, list_concat(), list_delete_nth_cell(), list_make1, NullTest::location, make_restrictinfo(), makeNode, Max, Min, NIL, NullTest::nulltesttype, op_input_types(), RestrictInfo::outer_relids, root, RestrictInfo::security_level, and set_opfuncid().
Referenced by distribute_qual_to_rels(), reconsider_full_join_clause(), and reconsider_outer_join_clause().
void rebuild_eclass_attr_needed | ( | PlannerInfo * | root | ) |
Definition at line 2574 of file equivclass.c.
References add_vars_to_attr_needed(), Assert(), EquivalenceClass::ec_childmembers, EquivalenceClass::ec_has_const, EquivalenceClass::ec_members, EquivalenceClass::ec_relids, EquivalenceMember::em_expr, lfirst, list_free(), list_length(), pull_var_clause(), PVC_INCLUDE_PLACEHOLDERS, PVC_RECURSE_AGGREGATES, PVC_RECURSE_WINDOWFUNCS, and root.
Referenced by remove_leftjoinrel_from_query(), and remove_self_join_rel().
|
static |
Definition at line 2384 of file equivclass.c.
References CoalesceExpr::args, Assert(), bms_copy(), bms_make_singleton(), build_implied_join_equality(), RestrictInfo::clause, EquivalenceClass::ec_childmembers, EquivalenceClass::ec_collation, EquivalenceClass::ec_has_const, EquivalenceClass::ec_has_volatile, EquivalenceClass::ec_members, EquivalenceClass::ec_min_security, EquivalenceClass::ec_opfamilies, EquivalenceMember::em_datatype, EquivalenceMember::em_expr, EquivalenceMember::em_is_child, EquivalenceMember::em_is_const, equal(), find_join_domain(), foreach_current_index, get_leftop(), get_rightop(), if(), is_opclause(), IsA, lfirst, linitial, list_delete_nth_cell(), list_length(), lsecond, OidIsValid, SpecialJoinInfo::ojrelid, op_input_types(), process_equivalence(), remove_nulling_relids(), OuterJoinClauseInfo::rinfo, root, select_equality_operator(), OuterJoinClauseInfo::sjinfo, SpecialJoinInfo::syn_lefthand, and SpecialJoinInfo::syn_righthand.
Referenced by reconsider_outer_join_clauses().
|
static |
Definition at line 2257 of file equivclass.c.
References Assert(), bms_copy(), build_implied_join_equality(), RestrictInfo::clause, EquivalenceClass::ec_childmembers, EquivalenceClass::ec_collation, EquivalenceClass::ec_has_const, EquivalenceClass::ec_has_volatile, EquivalenceClass::ec_members, EquivalenceClass::ec_min_security, EquivalenceClass::ec_opfamilies, EquivalenceMember::em_datatype, EquivalenceMember::em_expr, EquivalenceMember::em_is_child, EquivalenceMember::em_is_const, equal(), find_join_domain(), get_leftop(), get_rightop(), is_opclause(), lfirst, OidIsValid, op_input_types(), process_equivalence(), OuterJoinClauseInfo::rinfo, root, select_equality_operator(), OuterJoinClauseInfo::sjinfo, and SpecialJoinInfo::syn_righthand.
Referenced by reconsider_outer_join_clauses().
void reconsider_outer_join_clauses | ( | PlannerInfo * | root | ) |
Definition at line 2135 of file equivclass.c.
References distribute_restrictinfo_to_rels(), foreach_delete_current, RestrictInfo::has_clone, RestrictInfo::incompatible_relids, RestrictInfo::is_clone, RestrictInfo::is_pushed_down, lfirst, make_restrictinfo(), makeBoolConst(), RestrictInfo::outer_relids, reconsider_full_join_clause(), reconsider_outer_join_clause(), RestrictInfo::required_relids, OuterJoinClauseInfo::rinfo, and root.
Referenced by query_planner().
bool relation_can_be_sorted_early | ( | PlannerInfo * | root, |
RelOptInfo * | rel, | ||
EquivalenceClass * | ec, | ||
bool | require_parallel_safe | ||
) |
Definition at line 1077 of file equivclass.c.
References EquivalenceClass::ec_has_volatile, EquivalenceMember::em_expr, expression_returns_set(), PathTarget::exprs, find_computable_ec_member(), find_ec_member_matching_expr(), is_parallel_safe(), lfirst, RelOptInfo::relids, RelOptInfo::reltarget, and root.
Referenced by get_useful_pathkeys_for_relation().
|
static |
Definition at line 1948 of file equivclass.c.
References COMPARE_EQ, EquivalenceClass::ec_max_security, EquivalenceClass::ec_opfamilies, get_func_leakproof(), get_opcode(), get_opfamily_member_for_cmptype(), InvalidOid, lfirst_oid, and OidIsValid.
Referenced by generate_base_implied_equalities_const(), generate_base_implied_equalities_no_const(), generate_implied_equalities_for_column(), generate_join_implied_equalities_normal(), reconsider_full_join_clause(), and reconsider_outer_join_clause().
void setup_eclass_member_iterator | ( | EquivalenceMemberIterator * | it, |
EquivalenceClass * | ec, | ||
Relids | child_relids | ||
) |
Definition at line 3156 of file equivclass.c.
References EquivalenceMemberIterator::child_relids, EquivalenceMemberIterator::current_cell, EquivalenceMemberIterator::current_list, EquivalenceMemberIterator::current_relid, EquivalenceMemberIterator::ec, EquivalenceClass::ec_childmembers, EquivalenceClass::ec_members, and list_head().
Referenced by find_computable_ec_member(), find_ec_member_matching_expr(), find_em_for_rel(), generate_implied_equalities_for_column(), generate_join_implied_equalities_normal(), get_eclass_for_sort_expr(), and match_pathkeys_to_index().