166 #define planner_subplan_get_plan(root, subplan) \
167 ((Plan *) list_nth((root)->glob->subplans, (subplan)->plan_id - 1))
187 #ifndef HAVE_PLANNERINFO_TYPEDEF
189 #define HAVE_PLANNERINFO_TYPEDEF 1
555 #define planner_rt_fetch(rti, root) \
556 ((root)->simple_rte_array ? (root)->simple_rte_array[rti] : \
557 rt_fetch(rti, (root)->parse->rtable))
808 #define AMFLAG_HAS_TID_RANGE (1 << 0)
824 #define IS_SIMPLE_REL(rel) \
825 ((rel)->reloptkind == RELOPT_BASEREL || \
826 (rel)->reloptkind == RELOPT_OTHER_MEMBER_REL)
829 #define IS_JOIN_REL(rel) \
830 ((rel)->reloptkind == RELOPT_JOINREL || \
831 (rel)->reloptkind == RELOPT_OTHER_JOINREL)
834 #define IS_UPPER_REL(rel) \
835 ((rel)->reloptkind == RELOPT_UPPER_REL || \
836 (rel)->reloptkind == RELOPT_OTHER_UPPER_REL)
839 #define IS_OTHER_REL(rel) \
840 ((rel)->reloptkind == RELOPT_OTHER_MEMBER_REL || \
841 (rel)->reloptkind == RELOPT_OTHER_JOINREL || \
842 (rel)->reloptkind == RELOPT_OTHER_UPPER_REL)
1041 #define IS_PARTITIONED_REL(rel) \
1042 ((rel)->part_scheme && (rel)->boundinfo && (rel)->nparts > 0 && \
1043 (rel)->part_rels && !IS_DUMMY_REL(rel))
1049 #define REL_HAS_ALL_PART_PROPS(rel) \
1050 ((rel)->part_scheme && (rel)->boundinfo && (rel)->nparts > 0 && \
1051 (rel)->part_rels && (rel)->partexprs && (rel)->nullable_partexprs)
1084 #ifndef HAVE_INDEXOPTINFO_TYPEDEF
1086 #define HAVE_INDEXOPTINFO_TYPEDEF 1
1388 #define EC_MUST_BE_REDUNDANT(eclass) \
1389 ((eclass)->ec_has_const)
1517 #define get_pathtarget_sortgroupref(target, colno) \
1518 ((target)->sortgrouprefs ? (target)->sortgrouprefs[colno] : (Index) 0)
1637 #define PATH_REQ_OUTER(path) \
1638 ((path)->param_info ? (path)->param_info->ppi_req_outer : (Relids) NULL)
1893 #define IS_DUMMY_APPEND(p) \
1894 (IsA((p), AppendPath) && ((AppendPath *) (p))->subpaths == NIL)
1901 #define IS_DUMMY_REL(r) is_dummy_rel(r)
2670 #define RINFO_IS_PUSHED_DOWN(rinfo, joinrelids) \
2671 ((rinfo)->is_pushed_down || \
2672 !bms_is_subset((rinfo)->required_relids, joinrelids))
2830 #ifndef HAVE_SPECIALJOININFO_TYPEDEF
2832 #define HAVE_SPECIALJOININFO_TYPEDEF 1
3199 #define GROUPING_CAN_USE_SORT 0x0001
3200 #define GROUPING_CAN_USE_HASH 0x0002
3201 #define GROUPING_CAN_PARTIAL_AGG 0x0004
struct AggTransInfo AggTransInfo
struct MergeScanSelCache MergeScanSelCache
struct IndexPath IndexPath
struct TidRangePath TidRangePath
struct JoinCostWorkspace JoinCostWorkspace
bool is_dummy_rel(RelOptInfo *rel)
PartitionwiseAggregateType
@ PARTITIONWISE_AGGREGATE_PARTIAL
@ PARTITIONWISE_AGGREGATE_FULL
@ PARTITIONWISE_AGGREGATE_NONE
struct ForeignPath ForeignPath
struct OuterJoinClauseInfo OuterJoinClauseInfo
struct StatisticExtInfo StatisticExtInfo
struct SetOpPath SetOpPath
struct RollupData RollupData
struct BitmapOrPath BitmapOrPath
struct PlannerGlobal PlannerGlobal
struct ParamPathInfo ParamPathInfo
struct SubqueryScanPath SubqueryScanPath
struct UniquePath UniquePath
struct AggClauseCosts AggClauseCosts
struct EquivalenceClass EquivalenceClass
struct RecursiveUnionPath RecursiveUnionPath
struct EquivalenceMember EquivalenceMember
struct MaterialPath MaterialPath
struct AppendRelInfo AppendRelInfo
struct PartitionSchemeData PartitionSchemeData
struct ProjectionPath ProjectionPath
struct CustomPath CustomPath
struct BitmapAndPath BitmapAndPath
struct PartitionSchemeData * PartitionScheme
struct WindowAggPath WindowAggPath
struct MinMaxAggInfo MinMaxAggInfo
struct RelOptInfo RelOptInfo
struct GroupingSetsPath GroupingSetsPath
struct IncrementalSortPath IncrementalSortPath
struct ProjectSetPath ProjectSetPath
struct MergePath MergePath
struct LockRowsPath LockRowsPath
struct MergeAppendPath MergeAppendPath
struct GroupPath GroupPath
struct GroupResultPath GroupResultPath
struct MemoizePath MemoizePath
@ UPPERREL_PARTIAL_GROUP_AGG
@ UPPERREL_PARTIAL_DISTINCT
struct PlaceHolderVar PlaceHolderVar
@ RELOPT_OTHER_MEMBER_REL
struct RestrictInfo RestrictInfo
struct JoinPathExtraData JoinPathExtraData
struct ModifyTablePath ModifyTablePath
struct LimitPath LimitPath
struct GroupingSetData GroupingSetData
struct UpperUniquePath UpperUniquePath
struct MinMaxAggPath MinMaxAggPath
struct PlannerParamItem PlannerParamItem
struct ForeignKeyOptInfo ForeignKeyOptInfo
struct PathTarget PathTarget
struct IndexClause IndexClause
struct PlaceHolderInfo PlaceHolderInfo
struct GatherPath GatherPath
struct SemiAntiJoinFactors SemiAntiJoinFactors
struct JoinDomain JoinDomain
struct RowIdentityVarInfo RowIdentityVarInfo
struct AppendPath AppendPath
struct GatherMergePath GatherMergePath
struct BitmapHeapPath BitmapHeapPath
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
Datum initValue pg_node_attr(read_write_ignore)
pg_node_attr(no_query_jumble) NodeTag type
AttrNumber *parent_colnos pg_node_attr(array_size(num_child_cols))
Selectivity bitmapselectivity
Selectivity bitmapselectivity
const struct CustomPathMethods * methods
pg_node_attr(custom_read_write, no_copy_equal, no_read, no_query_jumble) NodeTag type
struct EquivalenceClass * ec_merged
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
struct EquivalenceMember *em_parent pg_node_attr(read_write_ignore)
AttrNumber confkey[INDEX_MAX_KEYS] pg_node_attr(array_size(nkeys))
struct EquivalenceClass * eclass[INDEX_MAX_KEYS]
AttrNumber conkey[INDEX_MAX_KEYS] pg_node_attr(array_size(nkeys))
Oid conpfeqop[INDEX_MAX_KEYS] pg_node_attr(array_size(nkeys))
pg_node_attr(custom_read_write, no_copy_equal, no_read, no_query_jumble) NodeTag type
List * rinfos[INDEX_MAX_KEYS]
struct EquivalenceMember * fk_eclass_member[INDEX_MAX_KEYS]
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
Cardinality inner_rows_total
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
struct RestrictInfo * rinfo
bool *reverse_sort pg_node_attr(array_size(nkeycolumns))
List *indexprs pg_node_attr(read_write_ignore)
Oid *sortopfamily pg_node_attr(array_size(nkeycolumns))
int *indexkeys pg_node_attr(array_size(ncolumns))
void(* amcostestimate)() pg_node_attr(read_write_ignore)
RelOptInfo *rel pg_node_attr(read_write_ignore)
Oid *opcintype pg_node_attr(array_size(nkeycolumns))
Oid *opfamily pg_node_attr(array_size(nkeycolumns))
bytea **opclassoptions pg_node_attr(read_write_ignore)
bool *nulls_first pg_node_attr(array_size(nkeycolumns))
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
bool *canreturn pg_node_attr(array_size(ncolumns))
Oid *indexcollations pg_node_attr(array_size(nkeycolumns))
ScanDirection indexscandir
Selectivity indexselectivity
Cost inner_rescan_run_cost
Cardinality inner_skip_rows
Cardinality inner_rows_total
Cardinality outer_skip_rows
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
pg_node_attr(abstract) Path path
Selectivity rightstartsel
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
PlannerInfo *subroot pg_node_attr(read_write_ignore)
List * withCheckOptionLists
OnConflictExpr * onconflict
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
struct FmgrInfo * partsupfunc
pg_node_attr(no_read, no_query_jumble) NodeTag type
EquivalenceClass *pk_eclass pg_node_attr(copy_as_scalar, equal_as_scalar)
VolatileFunctionStatus has_volatile_expr
Index *sortgrouprefs pg_node_attr(array_size(exprs))
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
ParamPathInfo *param_info pg_node_attr(write_only_req_outer)
PathTarget *pathtarget pg_node_attr(write_only_nondefault_pathtarget)
RelOptInfo *parent pg_node_attr(write_only_relids)
pg_node_attr(no_read, no_query_jumble) NodeTag type
Relids phrels pg_node_attr(equal_ignore)
pg_node_attr(no_query_jumble) Expr xpr
Expr *phexpr pg_node_attr(equal_ignore)
PartitionDirectory partition_directory pg_node_attr(read_write_ignore)
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
Bitmapset * rewindPlanIDs
List *subroots pg_node_attr(read_write_ignore)
ParamListInfo boundParams pg_node_attr(read_write_ignore)
PlannerInfo *parent_root pg_node_attr(read_write_ignore)
struct RelOptInfo **simple_rel_array pg_node_attr(array_size(simple_rel_array_size))
List *part_schemes pg_node_attr(read_write_ignore)
struct AppendRelInfo **append_rel_array pg_node_attr(read_write_ignore)
int simple_rel_array_size
RangeTblEntry **simple_rte_array pg_node_attr(read_write_ignore)
bool *isUsedSubplan pg_node_attr(read_write_ignore)
Index qual_security_level
struct HTAB *join_rel_hash pg_node_attr(read_write_ignore)
struct Path * non_recursive_path
MemoryContext planner_cxt pg_node_attr(read_write_ignore)
List **join_rel_level pg_node_attr(read_write_ignore)
List * processed_groupClause
bool hasAlternativeSubPlans
List * right_join_clauses
List *initial_rels pg_node_attr(read_write_ignore)
AttrNumber *grouping_map pg_node_attr(read_write_ignore)
List * processed_distinctClause
bool *isAltSubplan pg_node_attr(read_write_ignore)
Cardinality total_table_pages
void *join_search_private pg_node_attr(read_write_ignore)
Selectivity tuple_fraction
List *upper_rels[UPPERREL_FINAL+1] pg_node_attr(read_write_ignore)
int placeholder_array_size pg_node_attr(read_write_ignore)
struct PlaceHolderInfo **placeholder_array pg_node_attr(read_write_ignore, array_size(placeholder_array_size))
bool hasPseudoConstantQuals
struct PathTarget *upper_targets[UPPERREL_FINAL+1] pg_node_attr(read_write_ignore)
Relids leaf_result_relids
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
bool consider_param_startup
struct PathTarget * reltarget
List **nullable_partexprs pg_node_attr(read_write_ignore)
int32 *attr_widths pg_node_attr(read_write_ignore)
List **partexprs pg_node_attr(read_write_ignore)
struct PartitionBoundInfoData *boundinfo pg_node_attr(read_write_ignore)
struct FdwRoutine *fdwroutine pg_node_attr(read_write_ignore)
Relids *attr_needed pg_node_attr(read_write_ignore)
void *fdw_private pg_node_attr(read_write_ignore)
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
PartitionScheme part_scheme pg_node_attr(read_write_ignore)
struct RelOptInfo **part_rels pg_node_attr(read_write_ignore)
List * cheapest_parameterized_paths
struct RelOptInfo *parent pg_node_attr(read_write_ignore)
struct Path * cheapest_unique_path
Relids lateral_referencers
struct Path * cheapest_startup_path
QualCost baserestrictcost
struct Path * cheapest_total_path
List * non_unique_for_rels
Bitmapset * eclass_indexes
struct RelOptInfo *top_parent pg_node_attr(read_write_ignore)
Relids direct_lateral_relids
bool consider_partitionwise_join
Index baserestrict_min_security
EquivalenceClass *left_ec pg_node_attr(copy_as_scalar, equal_ignore, read_write_ignore)
Selectivity norm_selec pg_node_attr(equal_ignore)
bool leakproof pg_node_attr(equal_ignore)
Oid hashjoinoperator pg_node_attr(equal_ignore)
Selectivity outer_selec pg_node_attr(equal_ignore)
EquivalenceClass *parent_ec pg_node_attr(copy_as_scalar, equal_ignore, read_write_ignore)
Selectivity left_mcvfreq pg_node_attr(equal_ignore)
Relids left_relids pg_node_attr(equal_ignore)
List *scansel_cache pg_node_attr(copy_as(NIL), equal_ignore, read_write_ignore)
VolatileFunctionStatus has_volatile pg_node_attr(equal_ignore)
bool can_join pg_node_attr(equal_ignore)
Selectivity right_bucketsize pg_node_attr(equal_ignore)
bool pseudoconstant pg_node_attr(equal_ignore)
Relids incompatible_relids
EquivalenceClass *right_ec pg_node_attr(copy_as_scalar, equal_ignore, read_write_ignore)
int num_base_rels pg_node_attr(equal_ignore)
EquivalenceMember *left_em pg_node_attr(copy_as_scalar, equal_ignore)
Selectivity right_mcvfreq pg_node_attr(equal_ignore)
pg_node_attr(no_read, no_query_jumble) NodeTag type
List *mergeopfamilies pg_node_attr(equal_ignore)
bool outer_is_left pg_node_attr(equal_ignore)
QualCost eval_cost pg_node_attr(equal_ignore)
EquivalenceMember *right_em pg_node_attr(copy_as_scalar, equal_ignore)
Selectivity left_bucketsize pg_node_attr(equal_ignore)
Oid right_hasheqoperator pg_node_attr(equal_ignore)
Oid left_hasheqoperator pg_node_attr(equal_ignore)
Relids clause_relids pg_node_attr(equal_ignore)
Relids right_relids pg_node_attr(equal_ignore)
Expr *orclause pg_node_attr(equal_ignore)
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
Selectivity outer_match_frac
pg_node_attr(no_read, no_query_jumble) NodeTag type
pg_node_attr(no_copy_equal, no_read, no_query_jumble) NodeTag type
RelOptInfo *rel pg_node_attr(read_write_ignore)