|
PostgreSQL Source Code git master
|
#include "postgres.h"#include "access/htup_details.h"#include "executor/nodeSetOp.h"#include "foreign/fdwapi.h"#include "miscadmin.h"#include "nodes/extensible.h"#include "optimizer/appendinfo.h"#include "optimizer/clauses.h"#include "optimizer/cost.h"#include "optimizer/optimizer.h"#include "optimizer/pathnode.h"#include "optimizer/paths.h"#include "optimizer/planmain.h"#include "optimizer/tlist.h"#include "parser/parsetree.h"#include "utils/memutils.h"#include "utils/selfuncs.h"
Go to the source code of this file.
Macros | |
| #define | STD_FUZZ_FACTOR 1.01 |
| #define | CONSIDER_PATH_STARTUP_COST(p) ((p)->param_info == NULL ? (p)->parent->consider_startup : (p)->parent->consider_param_startup) |
| #define | ADJUST_CHILD_ATTRS(node) |
| #define | REPARAMETERIZE_CHILD_PATH(path) |
| #define | REPARAMETERIZE_CHILD_PATH_LIST(pathlist) |
| #define | REJECT_IF_PATH_NOT_REPARAMETERIZABLE(path) |
| #define | REJECT_IF_PATH_LIST_NOT_REPARAMETERIZABLE(pathlist) |
Enumerations | |
| enum | PathCostComparison { COSTS_EQUAL , COSTS_BETTER1 , COSTS_BETTER2 , COSTS_DIFFERENT } |
| #define ADJUST_CHILD_ATTRS | ( | node | ) |
| #define CONSIDER_PATH_STARTUP_COST | ( | p | ) | ((p)->param_info == NULL ? (p)->parent->consider_startup : (p)->parent->consider_param_startup) |
| #define REJECT_IF_PATH_LIST_NOT_REPARAMETERIZABLE | ( | pathlist | ) |
| #define REJECT_IF_PATH_NOT_REPARAMETERIZABLE | ( | path | ) |
| #define REPARAMETERIZE_CHILD_PATH | ( | path | ) |
| #define REPARAMETERIZE_CHILD_PATH_LIST | ( | pathlist | ) |
| #define STD_FUZZ_FACTOR 1.01 |
Definition at line 47 of file pathnode.c.
| Enumerator | |
|---|---|
| COSTS_EQUAL | |
| COSTS_BETTER1 | |
| COSTS_BETTER2 | |
| COSTS_DIFFERENT | |
Definition at line 34 of file pathnode.c.
| void add_partial_path | ( | RelOptInfo * | parent_rel, |
| Path * | new_path | ||
| ) |
Definition at line 793 of file pathnode.c.
References Assert, CHECK_FOR_INTERRUPTS, compare_pathkeys(), fb(), foreach_current_index, foreach_delete_current, lfirst, list_insert_nth(), PATHKEYS_BETTER1, PATHKEYS_BETTER2, PATHKEYS_DIFFERENT, pfree(), STD_FUZZ_FACTOR, and unlikely.
Referenced by add_paths_to_append_rel(), build_index_paths(), build_setop_child_paths(), create_partial_bitmap_paths(), create_partial_distinct_paths(), create_partial_grouping_paths(), create_partial_unique_paths(), create_plain_partial_paths(), create_tidscan_paths(), generate_grouped_paths(), grouping_planner(), set_subquery_pathlist(), try_partial_hashjoin_path(), try_partial_mergejoin_path(), and try_partial_nestloop_path().
| bool add_partial_path_precheck | ( | RelOptInfo * | parent_rel, |
| int | disabled_nodes, | ||
| Cost | total_cost, | ||
| List * | pathkeys | ||
| ) |
Definition at line 919 of file pathnode.c.
References add_path_precheck(), compare_pathkeys(), fb(), lfirst, PATHKEYS_BETTER1, PATHKEYS_BETTER2, PATHKEYS_DIFFERENT, and STD_FUZZ_FACTOR.
Referenced by try_partial_hashjoin_path(), try_partial_mergejoin_path(), and try_partial_nestloop_path().
| void add_path | ( | RelOptInfo * | parent_rel, |
| Path * | new_path | ||
| ) |
Definition at line 459 of file pathnode.c.
References BMS_EQUAL, BMS_SUBSET1, BMS_SUBSET2, bms_subset_compare(), CHECK_FOR_INTERRUPTS, compare_path_costs_fuzzily(), compare_pathkeys(), COSTS_BETTER1, COSTS_BETTER2, COSTS_DIFFERENT, COSTS_EQUAL, fb(), foreach_current_index, foreach_delete_current, IsA, lfirst, list_insert_nth(), NIL, PATH_REQ_OUTER, PATHKEYS_BETTER1, PATHKEYS_BETTER2, PATHKEYS_DIFFERENT, pfree(), and STD_FUZZ_FACTOR.
Referenced by add_foreign_final_paths(), add_foreign_grouping_paths(), add_foreign_ordered_paths(), add_paths_to_append_rel(), add_paths_to_grouping_rel(), add_paths_with_pathkeys_for_rel(), build_setop_child_paths(), BuildParameterizedTidPaths(), consider_groupingsets_paths(), create_degenerate_grouping_paths(), create_final_distinct_paths(), create_final_unique_paths(), create_index_paths(), create_one_window_path(), create_ordered_paths(), create_partial_grouping_paths(), create_tidscan_paths(), fileGetForeignPaths(), gather_grouping_paths(), generate_gather_paths(), generate_grouped_paths(), generate_nonunion_paths(), generate_orderedappend_paths(), generate_recursion_path(), generate_union_paths(), generate_useful_gather_paths(), get_index_paths(), grouping_planner(), mark_dummy_rel(), postgresGetForeignJoinPaths(), postgresGetForeignPaths(), preprocess_minmax_aggregates(), query_planner(), set_cte_pathlist(), set_dummy_rel_pathlist(), set_function_pathlist(), set_namedtuplestore_pathlist(), set_plain_rel_pathlist(), set_result_pathlist(), set_subquery_pathlist(), set_tablefunc_pathlist(), set_tablesample_rel_pathlist(), set_values_pathlist(), set_worktable_pathlist(), try_hashjoin_path(), try_mergejoin_path(), and try_nestloop_path().
| bool add_path_precheck | ( | RelOptInfo * | parent_rel, |
| int | disabled_nodes, | ||
| Cost | startup_cost, | ||
| Cost | total_cost, | ||
| List * | pathkeys, | ||
| Relids | required_outer | ||
| ) |
Definition at line 686 of file pathnode.c.
References bms_equal(), compare_pathkeys(), fb(), lfirst, NIL, PATH_REQ_OUTER, PATHKEYS_BETTER2, PATHKEYS_EQUAL, STD_FUZZ_FACTOR, and unlikely.
Referenced by add_partial_path_precheck(), try_hashjoin_path(), try_mergejoin_path(), and try_nestloop_path().
| void adjust_limit_rows_costs | ( | double * | rows, |
| Cost * | startup_cost, | ||
| Cost * | total_cost, | ||
| int64 | offset_est, | ||
| int64 | count_est | ||
| ) |
Definition at line 3792 of file pathnode.c.
References clamp_row_est(), and fb().
Referenced by create_limit_path(), and estimate_path_cost_size().
Definition at line 1452 of file pathnode.c.
References a, b, bms_compare(), cmp(), compare_path_costs(), fb(), lfirst, and STARTUP_COST.
Referenced by create_append_path().
Definition at line 1430 of file pathnode.c.
References a, b, bms_compare(), cmp(), compare_path_costs(), fb(), lfirst, and TOTAL_COST.
Referenced by create_append_path().
| Path * apply_projection_to_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | path, | ||
| PathTarget * | target | ||
| ) |
Definition at line 2640 of file pathnode.c.
References PathTarget::cost, create_projection_path(), PathTarget::exprs, fb(), is_parallel_safe(), is_projection_capable_path(), IsA, Path::parallel_safe, QualCost::per_tuple, root, Path::rows, QualCost::startup, Path::startup_cost, and Path::total_cost.
Referenced by adjust_paths_for_srfs(), build_minmax_path(), create_ordered_paths(), and recurse_set_operations().
| Relids calc_nestloop_required_outer | ( | Relids | outerrelids, |
| Relids | outer_paramrels, | ||
| Relids | innerrelids, | ||
| Relids | inner_paramrels | ||
| ) |
Definition at line 2221 of file pathnode.c.
References Assert, bms_copy(), bms_del_members(), bms_overlap(), bms_union(), and fb().
Referenced by try_nestloop_path().
Definition at line 2248 of file pathnode.c.
References Assert, bms_overlap(), bms_union(), fb(), PATH_REQ_OUTER, and PG_USED_FOR_ASSERTS_ONLY.
Referenced by try_hashjoin_path(), and try_mergejoin_path().
Definition at line 123 of file pathnode.c.
References compare_path_costs(), fb(), TOTAL_COST, and unlikely.
Referenced by get_cheapest_fractional_path(), and get_cheapest_fractional_path_for_pathkeys().
| int compare_path_costs | ( | Path * | path1, |
| Path * | path2, | ||
| CostSelector | criterion | ||
| ) |
Definition at line 68 of file pathnode.c.
References fb(), STARTUP_COST, and unlikely.
Referenced by append_startup_cost_compare(), append_total_cost_compare(), compare_fractional_path_costs(), generate_mergejoin_paths(), get_cheapest_parameterized_child_path(), get_cheapest_path_for_pathkeys(), and set_cheapest().
|
static |
Definition at line 181 of file pathnode.c.
References CONSIDER_PATH_STARTUP_COST, COSTS_BETTER1, COSTS_BETTER2, COSTS_DIFFERENT, COSTS_EQUAL, fb(), and unlikely.
Referenced by add_path().
| AggPath * create_agg_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| PathTarget * | target, | ||
| AggStrategy | aggstrategy, | ||
| AggSplit | aggsplit, | ||
| List * | groupClause, | ||
| List * | qual, | ||
| const AggClauseCosts * | aggcosts, | ||
| double | numGroups | ||
| ) |
Definition at line 3001 of file pathnode.c.
References AGG_SORTED, RelOptInfo::consider_parallel, PathTarget::cost, cost_agg(), fb(), list_copy_head(), list_length(), makeNode, NIL, QualCost::per_tuple, root, QualCost::startup, and subpath().
Referenced by add_paths_to_grouping_rel(), create_final_distinct_paths(), create_final_unique_paths(), create_partial_distinct_paths(), create_partial_grouping_paths(), create_partial_unique_paths(), generate_grouped_paths(), and generate_union_paths().
| AppendPath * create_append_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| List * | subpaths, | ||
| List * | partial_subpaths, | ||
| List * | pathkeys, | ||
| Relids | required_outer, | ||
| int | parallel_workers, | ||
| bool | parallel_aware, | ||
| double | rows | ||
| ) |
Definition at line 1299 of file pathnode.c.
References append_startup_cost_compare(), append_total_cost_compare(), Assert, bms_equal(), RelOptInfo::consider_parallel, cost_append(), fb(), get_appendrel_parampathinfo(), get_baserel_parampathinfo(), lfirst, linitial, list_concat(), list_length(), list_sort(), makeNode, NIL, Path::parallel_aware, Path::parallel_safe, PATH_REQ_OUTER, Path::pathkeys, RelOptInfo::relids, RELOPT_BASEREL, RelOptInfo::reloptkind, RelOptInfo::reltarget, root, Path::rows, Path::startup_cost, subpath(), and Path::total_cost.
Referenced by add_paths_to_append_rel(), create_degenerate_grouping_paths(), generate_nonunion_paths(), generate_orderedappend_paths(), generate_union_paths(), mark_dummy_rel(), reparameterize_path(), and set_dummy_rel_pathlist().
| BitmapAndPath * create_bitmap_and_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| List * | bitmapquals | ||
| ) |
Definition at line 1129 of file pathnode.c.
References bms_add_members(), RelOptInfo::consider_parallel, cost_bitmap_and_node(), fb(), get_baserel_parampathinfo(), lfirst, makeNode, NIL, PATH_REQ_OUTER, RelOptInfo::reltarget, and root.
Referenced by bitmap_and_cost_est(), and choose_bitmap_and().
| BitmapHeapPath * create_bitmap_heap_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | bitmapqual, | ||
| Relids | required_outer, | ||
| double | loop_count, | ||
| int | parallel_degree | ||
| ) |
Definition at line 1096 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_bitmap_heap_scan(), fb(), get_baserel_parampathinfo(), makeNode, NIL, RelOptInfo::reltarget, and root.
Referenced by create_index_paths(), create_partial_bitmap_paths(), and reparameterize_path().
| BitmapOrPath * create_bitmap_or_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| List * | bitmapquals | ||
| ) |
Definition at line 1181 of file pathnode.c.
References bms_add_members(), RelOptInfo::consider_parallel, cost_bitmap_or_node(), fb(), get_baserel_parampathinfo(), lfirst, makeNode, NIL, PATH_REQ_OUTER, RelOptInfo::reltarget, and root.
Referenced by generate_bitmap_or_paths().
| Path * create_ctescan_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| List * | pathkeys, | ||
| Relids | required_outer | ||
| ) |
Definition at line 1961 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_ctescan(), fb(), get_baserel_parampathinfo(), makeNode, RelOptInfo::reltarget, and root.
Referenced by set_cte_pathlist().
| ForeignPath * create_foreign_join_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| PathTarget * | target, | ||
| double | rows, | ||
| int | disabled_nodes, | ||
| Cost | startup_cost, | ||
| Cost | total_cost, | ||
| List * | pathkeys, | ||
| Relids | required_outer, | ||
| Path * | fdw_outerpath, | ||
| List * | fdw_restrictinfo, | ||
| List * | fdw_private | ||
| ) |
Definition at line 2120 of file pathnode.c.
References bms_is_empty, RelOptInfo::consider_parallel, elog, ERROR, fb(), RelOptInfo::lateral_relids, makeNode, and RelOptInfo::reltarget.
Referenced by add_paths_with_pathkeys_for_rel(), and postgresGetForeignJoinPaths().
| ForeignPath * create_foreign_upper_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| PathTarget * | target, | ||
| double | rows, | ||
| int | disabled_nodes, | ||
| Cost | startup_cost, | ||
| Cost | total_cost, | ||
| List * | pathkeys, | ||
| Path * | fdw_outerpath, | ||
| List * | fdw_restrictinfo, | ||
| List * | fdw_private | ||
| ) |
Definition at line 2174 of file pathnode.c.
References Assert, bms_is_empty, RelOptInfo::consider_parallel, fb(), RelOptInfo::lateral_relids, makeNode, and RelOptInfo::reltarget.
Referenced by add_foreign_final_paths(), add_foreign_grouping_paths(), and add_foreign_ordered_paths().
| ForeignPath * create_foreignscan_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| PathTarget * | target, | ||
| double | rows, | ||
| int | disabled_nodes, | ||
| Cost | startup_cost, | ||
| Cost | total_cost, | ||
| List * | pathkeys, | ||
| Relids | required_outer, | ||
| Path * | fdw_outerpath, | ||
| List * | fdw_restrictinfo, | ||
| List * | fdw_private | ||
| ) |
Definition at line 2072 of file pathnode.c.
References Assert, RelOptInfo::consider_parallel, fb(), get_baserel_parampathinfo(), IS_SIMPLE_REL, makeNode, RelOptInfo::reltarget, and root.
Referenced by add_paths_with_pathkeys_for_rel(), fileGetForeignPaths(), and postgresGetForeignPaths().
| Path * create_functionscan_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| List * | pathkeys, | ||
| Relids | required_outer | ||
| ) |
Definition at line 1883 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_functionscan(), fb(), get_baserel_parampathinfo(), makeNode, RelOptInfo::reltarget, and root.
Referenced by set_function_pathlist().
| GatherMergePath * create_gather_merge_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| PathTarget * | target, | ||
| List * | pathkeys, | ||
| Relids | required_outer, | ||
| double * | rows | ||
| ) |
Definition at line 1757 of file pathnode.c.
References Assert, cost_gather_merge(), elog, ERROR, fb(), get_baserel_parampathinfo(), makeNode, pathkeys_contained_in(), RelOptInfo::reltarget, root, and subpath().
Referenced by create_ordered_paths(), gather_grouping_paths(), generate_gather_paths(), and generate_useful_gather_paths().
| GatherPath * create_gather_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| PathTarget * | target, | ||
| Relids | required_outer, | ||
| double * | rows | ||
| ) |
Definition at line 1809 of file pathnode.c.
References Assert, cost_gather(), fb(), get_baserel_parampathinfo(), makeNode, NIL, root, and subpath().
Referenced by generate_gather_paths(), and generate_union_paths().
| GroupPath * create_group_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| List * | groupClause, | ||
| List * | qual, | ||
| double | numGroups | ||
| ) |
Definition at line 2892 of file pathnode.c.
References RelOptInfo::consider_parallel, PathTarget::cost, cost_group(), fb(), list_length(), makeNode, QualCost::per_tuple, RelOptInfo::reltarget, root, QualCost::startup, and subpath().
Referenced by add_paths_to_grouping_rel(), and create_partial_grouping_paths().
| GroupResultPath * create_group_result_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| PathTarget * | target, | ||
| List * | havingqual | ||
| ) |
Definition at line 1608 of file pathnode.c.
References RelOptInfo::consider_parallel, PathTarget::cost, cost_qual_eval(), cpu_tuple_cost, fb(), makeNode, NIL, QualCost::per_tuple, root, and QualCost::startup.
Referenced by create_degenerate_grouping_paths(), and query_planner().
| GroupingSetsPath * create_groupingsets_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| List * | having_qual, | ||
| AggStrategy | aggstrategy, | ||
| List * | rollups, | ||
| const AggClauseCosts * | agg_costs | ||
| ) |
Definition at line 3083 of file pathnode.c.
References AGG_HASHED, AGG_MIXED, AGG_PLAIN, AGG_SORTED, Assert, RelOptInfo::consider_parallel, PathTarget::cost, cost_agg(), cost_sort(), fb(), lfirst, linitial, list_length(), makeNode, NIL, QualCost::per_tuple, RelOptInfo::reltarget, root, QualCost::startup, subpath(), and work_mem.
Referenced by consider_groupingsets_paths().
| HashPath * create_hashjoin_path | ( | PlannerInfo * | root, |
| RelOptInfo * | joinrel, | ||
| JoinType | jointype, | ||
| JoinCostWorkspace * | workspace, | ||
| JoinPathExtraData * | extra, | ||
| Path * | outer_path, | ||
| Path * | inner_path, | ||
| bool | parallel_hash, | ||
| List * | restrict_clauses, | ||
| Relids | required_outer, | ||
| List * | hashclauses | ||
| ) |
Definition at line 2465 of file pathnode.c.
References RelOptInfo::consider_parallel, fb(), final_cost_hashjoin(), get_joinrel_parampathinfo(), JoinPathExtraData::inner_unique, makeNode, NIL, RelOptInfo::reltarget, root, and JoinPathExtraData::sjinfo.
Referenced by try_hashjoin_path(), and try_partial_hashjoin_path().
| IncrementalSortPath * create_incremental_sort_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| List * | pathkeys, | ||
| int | presorted_keys, | ||
| double | limit_tuples | ||
| ) |
Definition at line 2799 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_incremental_sort(), fb(), makeNode, SortPath::path, Path::pathtype, root, sort(), subpath(), and work_mem.
Referenced by build_setop_child_paths(), create_final_unique_paths(), create_one_window_path(), create_ordered_paths(), create_partial_unique_paths(), gather_grouping_paths(), generate_grouped_paths(), generate_useful_gather_paths(), and make_ordered_path().
| IndexPath * create_index_path | ( | PlannerInfo * | root, |
| IndexOptInfo * | index, | ||
| List * | indexclauses, | ||
| List * | indexorderbys, | ||
| List * | indexorderbycols, | ||
| List * | pathkeys, | ||
| ScanDirection | indexscandir, | ||
| bool | indexonly, | ||
| Relids | required_outer, | ||
| double | loop_count, | ||
| bool | partial_path | ||
| ) |
Definition at line 1047 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_index(), fb(), get_baserel_parampathinfo(), makeNode, RelOptInfo::reltarget, and root.
Referenced by build_index_paths(), and plan_cluster_use_sort().
| LimitPath * create_limit_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| Node * | limitOffset, | ||
| Node * | limitCount, | ||
| LimitOption | limitOption, | ||
| int64 | offset_est, | ||
| int64 | count_est | ||
| ) |
Definition at line 3736 of file pathnode.c.
References adjust_limit_rows_costs(), RelOptInfo::consider_parallel, fb(), makeNode, and subpath().
Referenced by create_final_distinct_paths(), create_partial_distinct_paths(), and grouping_planner().
| LockRowsPath * create_lockrows_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| List * | rowMarks, | ||
| int | epqParam | ||
| ) |
Definition at line 3574 of file pathnode.c.
References cpu_tuple_cost, fb(), makeNode, NIL, RelOptInfo::rows, and subpath().
Referenced by grouping_planner().
| MaterialPath * create_material_path | ( | RelOptInfo * | rel, |
| Path * | subpath, | ||
| bool | enabled | ||
| ) |
Definition at line 1656 of file pathnode.c.
References Assert, RelOptInfo::consider_parallel, cost_material(), fb(), makeNode, RelOptInfo::reltarget, and subpath().
Referenced by consider_parallel_nestloop(), match_unsorted_outer(), reparameterize_path(), and set_tablesample_rel_pathlist().
| MemoizePath * create_memoize_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| List * | param_exprs, | ||
| List * | hash_operators, | ||
| bool | singlerow, | ||
| bool | binary_mode, | ||
| Cardinality | est_calls | ||
| ) |
Definition at line 1690 of file pathnode.c.
References Assert, clamp_row_est(), RelOptInfo::consider_parallel, cpu_tuple_cost, fb(), makeNode, RelOptInfo::reltarget, and subpath().
Referenced by get_memoize_path(), and reparameterize_path().
| MergeAppendPath * create_merge_append_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| List * | subpaths, | ||
| List * | pathkeys, | ||
| Relids | required_outer | ||
| ) |
Definition at line 1470 of file pathnode.c.
References Assert, bms_equal(), bms_is_empty, RelOptInfo::consider_parallel, cost_incremental_sort(), cost_merge_append(), cost_sort(), enable_incremental_sort, fb(), RelOptInfo::lateral_relids, lfirst, linitial, list_length(), makeNode, PATH_REQ_OUTER, pathkeys_count_contained_in(), RelOptInfo::relids, RelOptInfo::reltarget, root, subpath(), and work_mem.
Referenced by generate_orderedappend_paths(), and generate_union_paths().
| MergePath * create_mergejoin_path | ( | PlannerInfo * | root, |
| RelOptInfo * | joinrel, | ||
| JoinType | jointype, | ||
| JoinCostWorkspace * | workspace, | ||
| JoinPathExtraData * | extra, | ||
| Path * | outer_path, | ||
| Path * | inner_path, | ||
| List * | restrict_clauses, | ||
| List * | pathkeys, | ||
| Relids | required_outer, | ||
| List * | mergeclauses, | ||
| List * | outersortkeys, | ||
| List * | innersortkeys, | ||
| int | outer_presorted_keys | ||
| ) |
Definition at line 2397 of file pathnode.c.
References RelOptInfo::consider_parallel, fb(), final_cost_mergejoin(), get_joinrel_parampathinfo(), JoinPathExtraData::inner_unique, makeNode, RelOptInfo::reltarget, root, and JoinPathExtraData::sjinfo.
Referenced by try_mergejoin_path(), and try_partial_mergejoin_path().
| MinMaxAggPath * create_minmaxagg_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| PathTarget * | target, | ||
| List * | mmaggregates, | ||
| List * | quals | ||
| ) |
Definition at line 3246 of file pathnode.c.
References PathTarget::cost, cost_qual_eval(), cpu_tuple_cost, Path::disabled_nodes, PathTarget::exprs, fb(), is_parallel_safe(), lfirst, makeNode, NIL, MinMaxAggInfo::path, QualCost::per_tuple, root, and QualCost::startup.
Referenced by preprocess_minmax_aggregates().
| ModifyTablePath * create_modifytable_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| CmdType | operation, | ||
| bool | canSetTag, | ||
| Index | nominalRelation, | ||
| Index | rootRelation, | ||
| List * | resultRelations, | ||
| List * | updateColnosLists, | ||
| List * | withCheckOptionLists, | ||
| List * | returningLists, | ||
| List * | rowMarks, | ||
| OnConflictExpr * | onconflict, | ||
| List * | mergeActionLists, | ||
| List * | mergeJoinConditions, | ||
| int | epqParam | ||
| ) |
Definition at line 3636 of file pathnode.c.
References Assert, CMD_MERGE, CMD_UPDATE, fb(), list_length(), makeNode, NIL, RelOptInfo::reltarget, subpath(), and PathTarget::width.
Referenced by grouping_planner().
| Path * create_namedtuplestorescan_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Relids | required_outer | ||
| ) |
Definition at line 1987 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_namedtuplestorescan(), fb(), get_baserel_parampathinfo(), makeNode, NIL, RelOptInfo::reltarget, and root.
Referenced by set_namedtuplestore_pathlist().
| NestPath * create_nestloop_path | ( | PlannerInfo * | root, |
| RelOptInfo * | joinrel, | ||
| JoinType | jointype, | ||
| JoinCostWorkspace * | workspace, | ||
| JoinPathExtraData * | extra, | ||
| Path * | outer_path, | ||
| Path * | inner_path, | ||
| List * | restrict_clauses, | ||
| List * | pathkeys, | ||
| Relids | required_outer | ||
| ) |
Definition at line 2300 of file pathnode.c.
References bms_is_member(), bms_overlap(), RelOptInfo::consider_parallel, fb(), final_cost_nestloop(), get_joinrel_parampathinfo(), get_param_path_clause_serials(), JoinPathExtraData::inner_unique, lappend(), lfirst, makeNode, NIL, PATH_REQ_OUTER, RelOptInfo::reltarget, RestrictInfo::rinfo_serial, root, and JoinPathExtraData::sjinfo.
Referenced by try_nestloop_path(), and try_partial_nestloop_path().
| ProjectionPath * create_projection_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| PathTarget * | target | ||
| ) |
Definition at line 2531 of file pathnode.c.
References Assert, RelOptInfo::consider_parallel, PathTarget::cost, cpu_tuple_cost, equal(), PathTarget::exprs, fb(), is_parallel_safe(), is_projection_capable_path(), IsA, makeNode, QualCost::per_tuple, root, QualCost::startup, and subpath().
Referenced by add_paths_with_pathkeys_for_rel(), adjust_paths_for_srfs(), apply_projection_to_path(), apply_scanjoin_target_to_paths(), create_final_unique_paths(), create_partial_grouping_paths(), create_partial_unique_paths(), generate_grouped_paths(), and recurse_set_operations().
| RecursiveUnionPath * create_recursiveunion_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | leftpath, | ||
| Path * | rightpath, | ||
| PathTarget * | target, | ||
| List * | distinctList, | ||
| int | wtParam, | ||
| double | numGroups | ||
| ) |
Definition at line 3529 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_recursive_union(), fb(), makeNode, NIL, Path::parallel_safe, and Path::parallel_workers.
Referenced by generate_recursion_path().
| Path * create_resultscan_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Relids | required_outer | ||
| ) |
Definition at line 2013 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_resultscan(), fb(), get_baserel_parampathinfo(), makeNode, NIL, RelOptInfo::reltarget, and root.
Referenced by reparameterize_path(), and set_result_pathlist().
| Path * create_samplescan_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Relids | required_outer | ||
| ) |
Definition at line 1006 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_samplescan(), fb(), get_baserel_parampathinfo(), makeNode, NIL, RelOptInfo::reltarget, and root.
Referenced by reparameterize_path(), and set_tablesample_rel_pathlist().
| Path * create_seqscan_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Relids | required_outer, | ||
| int | parallel_workers | ||
| ) |
Definition at line 981 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_seqscan(), fb(), get_baserel_parampathinfo(), makeNode, NIL, RelOptInfo::reltarget, and root.
Referenced by create_plain_partial_paths(), plan_cluster_use_sort(), reparameterize_path(), and set_plain_rel_pathlist().
| ProjectSetPath * create_set_projection_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| PathTarget * | target | ||
| ) |
Definition at line 2729 of file pathnode.c.
References RelOptInfo::consider_parallel, PathTarget::cost, cpu_tuple_cost, expression_returns_set_rows(), PathTarget::exprs, fb(), is_parallel_safe(), lfirst, makeNode, QualCost::per_tuple, root, QualCost::startup, and subpath().
Referenced by adjust_paths_for_srfs().
| SetOpPath * create_setop_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | leftpath, | ||
| Path * | rightpath, | ||
| SetOpCmd | cmd, | ||
| SetOpStrategy | strategy, | ||
| List * | groupList, | ||
| double | numGroups, | ||
| double | outputRows | ||
| ) |
Definition at line 3410 of file pathnode.c.
References RelOptInfo::consider_parallel, cpu_operator_cost, Path::disabled_nodes, enable_hashagg, EstimateSetOpHashTableSpace(), fb(), get_hash_memory_limit(), list_length(), makeNode, NIL, Path::parallel_safe, Path::parallel_workers, Path::pathkeys, RelOptInfo::reltarget, Path::rows, SETOP_SORTED, Path::startup_cost, and Path::total_cost.
Referenced by generate_nonunion_paths().
| SortPath * create_sort_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| List * | pathkeys, | ||
| double | limit_tuples | ||
| ) |
Definition at line 2848 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_sort(), fb(), makeNode, root, subpath(), and work_mem.
Referenced by add_paths_with_pathkeys_for_rel(), build_setop_child_paths(), create_final_unique_paths(), create_one_window_path(), create_ordered_paths(), create_partial_unique_paths(), gather_grouping_paths(), generate_grouped_paths(), generate_nonunion_paths(), generate_union_paths(), generate_useful_gather_paths(), and make_ordered_path().
| SubqueryScanPath * create_subqueryscan_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| bool | trivial_pathtarget, | ||
| List * | pathkeys, | ||
| Relids | required_outer | ||
| ) |
Definition at line 1853 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_subqueryscan(), fb(), get_baserel_parampathinfo(), makeNode, RelOptInfo::reltarget, root, and subpath().
Referenced by build_setop_child_paths(), reparameterize_path(), and set_subquery_pathlist().
| Path * create_tablefuncscan_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Relids | required_outer | ||
| ) |
Definition at line 1909 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_tablefuncscan(), fb(), get_baserel_parampathinfo(), makeNode, NIL, RelOptInfo::reltarget, and root.
Referenced by set_tablefunc_pathlist().
| TidRangePath * create_tidrangescan_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| List * | tidrangequals, | ||
| Relids | required_outer, | ||
| int | parallel_workers | ||
| ) |
Definition at line 1262 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_tidrangescan(), fb(), get_baserel_parampathinfo(), makeNode, NIL, RelOptInfo::reltarget, and root.
Referenced by create_tidscan_paths().
| TidPath * create_tidscan_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| List * | tidquals, | ||
| Relids | required_outer | ||
| ) |
Definition at line 1233 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_tidscan(), fb(), get_baserel_parampathinfo(), makeNode, NIL, RelOptInfo::reltarget, and root.
Referenced by BuildParameterizedTidPaths(), and create_tidscan_paths().
| UniquePath * create_unique_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| int | numCols, | ||
| double | numGroups | ||
| ) |
Definition at line 2949 of file pathnode.c.
References RelOptInfo::consider_parallel, cpu_operator_cost, fb(), makeNode, and subpath().
Referenced by create_final_distinct_paths(), create_final_unique_paths(), create_partial_distinct_paths(), create_partial_unique_paths(), and generate_union_paths().
| Path * create_valuesscan_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Relids | required_outer | ||
| ) |
Definition at line 1935 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_valuesscan(), fb(), get_baserel_parampathinfo(), makeNode, NIL, RelOptInfo::reltarget, and root.
Referenced by set_values_pathlist().
| WindowAggPath * create_windowagg_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Path * | subpath, | ||
| PathTarget * | target, | ||
| List * | windowFuncs, | ||
| List * | runCondition, | ||
| WindowClause * | winclause, | ||
| List * | qual, | ||
| bool | topwindow | ||
| ) |
Definition at line 3337 of file pathnode.c.
References Assert, RelOptInfo::consider_parallel, PathTarget::cost, cost_windowagg(), fb(), makeNode, NIL, QualCost::per_tuple, root, QualCost::startup, and subpath().
Referenced by create_one_window_path().
| Path * create_worktablescan_path | ( | PlannerInfo * | root, |
| RelOptInfo * | rel, | ||
| Relids | required_outer | ||
| ) |
Definition at line 2039 of file pathnode.c.
References RelOptInfo::consider_parallel, cost_ctescan(), fb(), get_baserel_parampathinfo(), makeNode, NIL, RelOptInfo::reltarget, and root.
Referenced by set_worktable_pathlist().
| bool path_is_reparameterizable_by_child | ( | Path * | path, |
| RelOptInfo * | child_rel | ||
| ) |
Definition at line 4325 of file pathnode.c.
References bms_overlap(), fb(), JoinPath::innerjoinpath, nodeTag, JoinPath::outerjoinpath, PATH_REQ_OUTER, REJECT_IF_PATH_LIST_NOT_REPARAMETERIZABLE, and REJECT_IF_PATH_NOT_REPARAMETERIZABLE.
Referenced by pathlist_is_reparameterizable_by_child(), try_nestloop_path(), and try_partial_nestloop_path().
|
static |
Definition at line 4485 of file pathnode.c.
References fb(), lfirst, and path_is_reparameterizable_by_child().
| Path * reparameterize_path | ( | PlannerInfo * | root, |
| Path * | path, | ||
| Relids | required_outer, | ||
| double | loop_count | ||
| ) |
Definition at line 3860 of file pathnode.c.
References bms_is_subset(), cost_index(), create_append_path(), create_bitmap_heap_path(), create_material_path(), create_memoize_path(), create_resultscan_path(), create_samplescan_path(), create_seqscan_path(), create_subqueryscan_path(), Path::disabled_nodes, fb(), get_baserel_parampathinfo(), i, IsA, lappend(), lfirst, makeNode, NIL, SubqueryScanPath::path, PATH_REQ_OUTER, Path::pathkeys, Path::pathtype, reparameterize_path(), root, subpath(), SubqueryScanPath::subpath, and Path::total_cost.
Referenced by get_cheapest_parameterized_child_path(), and reparameterize_path().
| Path * reparameterize_path_by_child | ( | PlannerInfo * | root, |
| Path * | path, | ||
| RelOptInfo * | child_rel | ||
| ) |
Definition at line 4029 of file pathnode.c.
References ADJUST_CHILD_ATTRS, adjust_child_relids_multilevel(), Assert, bms_copy(), bms_free(), bms_overlap(), copy_pathtarget(), fb(), find_param_path_info(), GetMemoryChunkContext(), JoinPath::innerjoinpath, JoinPath::joinrestrictinfo, lappend(), makeNode, MemoryContextSwitchTo(), nodeTag, JoinPath::outerjoinpath, PATH_REQ_OUTER, Path::pathtype, planner_rt_fetch, RelOptInfo::ppilist, REPARAMETERIZE_CHILD_PATH, REPARAMETERIZE_CHILD_PATH_LIST, root, and RTE_RELATION.
Referenced by create_nestloop_plan(), and reparameterize_pathlist_by_child().
|
static |
Definition at line 4456 of file pathnode.c.
References fb(), lappend(), lfirst, list_free(), NIL, reparameterize_path_by_child(), and root.
| void set_cheapest | ( | RelOptInfo * | parent_rel | ) |
Definition at line 268 of file pathnode.c.
References Assert, BMS_DIFFERENT, BMS_EQUAL, BMS_SUBSET1, BMS_SUBSET2, bms_subset_compare(), cmp(), compare_path_costs(), compare_pathkeys(), elog, ERROR, fb(), IsA, lappend(), lcons(), lfirst, NIL, PATH_REQ_OUTER, Path::pathkeys, PATHKEYS_BETTER2, STARTUP_COST, and TOTAL_COST.
Referenced by apply_scanjoin_target_to_paths(), create_distinct_paths(), create_grouping_paths(), create_ordinary_grouping_paths(), create_partial_distinct_paths(), create_partial_unique_paths(), create_partitionwise_grouping_paths(), create_unique_paths(), create_window_paths(), generate_partitionwise_join_paths(), mark_dummy_rel(), merge_clump(), postprocess_setop_rel(), query_planner(), set_dummy_rel_pathlist(), set_grouped_rel_pathlist(), set_rel_pathlist(), standard_join_search(), and subquery_planner().