{"kind": "hook", "major": "18", "item": {"slug": "set_join_pathlist_hook", "name": "set_join_pathlist_hook", "name_zh": "set_join_pathlist_hook", "category": "Query planning", "summary": "Hook for plugins to get control in add_paths_to_joinrel()", "aliases": [], "versions": {"10": {"facts": [{"label": "Interface type", "value": "set_join_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/10/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_10_STABLE", "label": "10", "major": "10", "channel": "historical", "revision": "f4e8f137bfb08a664c8288824c1e36b5143ac875"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/f4e8f137bfb08a664c8288824c1e36b5143ac875/src/include/optimizer/paths.h#L36", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "e92f974fb44e1de3a6c550466b600af972c299c02d8d06c2a343ba339e224ce0"}, {"url": "https://github.com/postgres/postgres/blob/f4e8f137bfb08a664c8288824c1e36b5143ac875/src/backend/optimizer/path/joinpath.c#L27", "path": "src/backend/optimizer/path/joinpath.c", "label": "Core definition", "sha256": "d1880e40332e45959c28ec4d1584d08de24768340aed9953ccccc47f434563ff"}, {"url": "https://github.com/postgres/postgres/blob/f4e8f137bfb08a664c8288824c1e36b5143ac875/src/backend/optimizer/path/joinpath.c#L300", "path": "src/backend/optimizer/path/joinpath.c", "label": "Call sites", "sha256": "d1880e40332e45959c28ec4d1584d08de24768340aed9953ccccc47f434563ff"}], "sections": [{"title": "Core source comments", "paragraphs": ["6. Finally, give extensions a chance to manipulate the path list."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/joinpath.c:300"]}, {"code": "\t\t\t\t\t\t\t\t\t\t\t\t jointype, &extra);\n\n\t/*\n\t * 6. Finally, give extensions a chance to manipulate the path list.\n\t */\n\tif (set_join_pathlist_hook)\n\t\tset_join_pathlist_hook(root, joinrel, outerrel, innerrel,\n\t\t\t\t\t\t\t   jointype, &extra);\n}\n\n/*\n * We override the param_source_rels heuristic to accept nestloop paths in\n * which the outer rel satisfies some but not all of the inner path's\n * parameterization.  This is necessary to get good plans for star-schema\n * scenarios, in which a parameterized path for a large table may require", "title": "Core call context: src/backend/optimizer/path/joinpath.c:294\u2013308", "paragraphs": []}], "signature": "typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, JoinPathExtraData *extra);\nextern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;", "description": ["Hook for plugins to get control in add_paths_to_joinrel()"]}, "11": {"facts": [{"label": "Interface type", "value": "set_join_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/11/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_11_STABLE", "label": "11", "major": "11", "channel": "historical", "revision": "170e416034ec0231d9e9238f2577eeb76ca8d181"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/170e416034ec0231d9e9238f2577eeb76ca8d181/src/include/optimizer/paths.h#L36", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "0a9804f99187ac049c367452e8f0e3a8bad2924a8ba64b20d3957feda7534ccb"}, {"url": "https://github.com/postgres/postgres/blob/170e416034ec0231d9e9238f2577eeb76ca8d181/src/backend/optimizer/path/joinpath.c#L28", "path": "src/backend/optimizer/path/joinpath.c", "label": "Core definition", "sha256": "1560fdfb87dcf49c4b8c2e1bd55b2f52a84a4eb43a6951dbc158992d48b46b80"}, {"url": "https://github.com/postgres/postgres/blob/170e416034ec0231d9e9238f2577eeb76ca8d181/src/backend/optimizer/path/joinpath.c#L344", "path": "src/backend/optimizer/path/joinpath.c", "label": "Call sites", "sha256": "1560fdfb87dcf49c4b8c2e1bd55b2f52a84a4eb43a6951dbc158992d48b46b80"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/joinpath.c:344"]}, {"code": "\t * could add new paths (such as CustomPaths) by calling add_path(), or\n\t * add_partial_path() if parallel aware.  They could also delete or modify\n\t * paths added by the core code.\n\t */\n\tif (set_join_pathlist_hook &&\n\t\tconsider_join_pushdown)\n\t\tset_join_pathlist_hook(root, joinrel, outerrel, innerrel,\n\t\t\t\t\t\t\t   jointype, &extra);\n}\n\n/*\n * We override the param_source_rels heuristic to accept nestloop paths in\n * which the outer rel satisfies some but not all of the inner path's\n * parameterization.  This is necessary to get good plans for star-schema\n * scenarios, in which a parameterized path for a large table may require", "title": "Core call context: src/backend/optimizer/path/joinpath.c:338\u2013352", "paragraphs": []}], "signature": "typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, JoinPathExtraData *extra);\nextern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;", "description": ["Hook for plugins to get control in add_paths_to_joinrel()"]}, "12": {"facts": [{"label": "Interface type", "value": "set_join_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/12/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_12_STABLE", "label": "12", "major": "12", "channel": "historical", "revision": "3f302f0ed06f69c5ebd33d4df95895323a3cbef6"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/3f302f0ed06f69c5ebd33d4df95895323a3cbef6/src/include/optimizer/paths.h#L36", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "5cd4566bfd92117fc9528f43d1a41e923ea751b3f6a435bfefbacee28f2180ac"}, {"url": "https://github.com/postgres/postgres/blob/3f302f0ed06f69c5ebd33d4df95895323a3cbef6/src/backend/optimizer/path/joinpath.c#L28", "path": "src/backend/optimizer/path/joinpath.c", "label": "Core definition", "sha256": "d64fd40a724dda69da40ed89a49d187eafbb9b34c0ca05797c453b9221603982"}, {"url": "https://github.com/postgres/postgres/blob/3f302f0ed06f69c5ebd33d4df95895323a3cbef6/src/backend/optimizer/path/joinpath.c#L344", "path": "src/backend/optimizer/path/joinpath.c", "label": "Call sites", "sha256": "d64fd40a724dda69da40ed89a49d187eafbb9b34c0ca05797c453b9221603982"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/joinpath.c:344"]}, {"code": "\t * could add new paths (such as CustomPaths) by calling add_path(), or\n\t * add_partial_path() if parallel aware.  They could also delete or modify\n\t * paths added by the core code.\n\t */\n\tif (set_join_pathlist_hook &&\n\t\tconsider_join_pushdown)\n\t\tset_join_pathlist_hook(root, joinrel, outerrel, innerrel,\n\t\t\t\t\t\t\t   jointype, &extra);\n}\n\n/*\n * We override the param_source_rels heuristic to accept nestloop paths in\n * which the outer rel satisfies some but not all of the inner path's\n * parameterization.  This is necessary to get good plans for star-schema\n * scenarios, in which a parameterized path for a large table may require", "title": "Core call context: src/backend/optimizer/path/joinpath.c:338\u2013352", "paragraphs": []}], "signature": "typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, JoinPathExtraData *extra);\nextern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;", "description": ["Hook for plugins to get control in add_paths_to_joinrel()"]}, "13": {"facts": [{"label": "Interface type", "value": "set_join_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/13/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_13_STABLE", "label": "13", "major": "13", "channel": "historical", "revision": "05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2/src/include/optimizer/paths.h#L36", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "9cf3e1a9a86500ab3330f6e6ccefc8d0368fe2ee15b521ed11c613f6f69ee487"}, {"url": "https://github.com/postgres/postgres/blob/05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2/src/backend/optimizer/path/joinpath.c#L28", "path": "src/backend/optimizer/path/joinpath.c", "label": "Core definition", "sha256": "cfd4b093003a38bec0f774c3f119f1fd6ef7ae91fc58e948e65c9a713b728c58"}, {"url": "https://github.com/postgres/postgres/blob/05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2/src/backend/optimizer/path/joinpath.c#L344", "path": "src/backend/optimizer/path/joinpath.c", "label": "Call sites", "sha256": "cfd4b093003a38bec0f774c3f119f1fd6ef7ae91fc58e948e65c9a713b728c58"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/joinpath.c:344"]}, {"code": "\t * could add new paths (such as CustomPaths) by calling add_path(), or\n\t * add_partial_path() if parallel aware.  They could also delete or modify\n\t * paths added by the core code.\n\t */\n\tif (set_join_pathlist_hook &&\n\t\tconsider_join_pushdown)\n\t\tset_join_pathlist_hook(root, joinrel, outerrel, innerrel,\n\t\t\t\t\t\t\t   jointype, &extra);\n}\n\n/*\n * We override the param_source_rels heuristic to accept nestloop paths in\n * which the outer rel satisfies some but not all of the inner path's\n * parameterization.  This is necessary to get good plans for star-schema\n * scenarios, in which a parameterized path for a large table may require", "title": "Core call context: src/backend/optimizer/path/joinpath.c:338\u2013352", "paragraphs": []}], "signature": "typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, JoinPathExtraData *extra);\nextern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;", "description": ["Hook for plugins to get control in add_paths_to_joinrel()"]}, "14": {"facts": [{"label": "Interface type", "value": "set_join_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/14/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_14_STABLE", "label": "14", "major": "14", "channel": "stable", "revision": "fba35c7c28a567839faba867db0808564c0a66db"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/fba35c7c28a567839faba867db0808564c0a66db/src/include/optimizer/paths.h#L36", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "6f4a259bd1b518c6378a75766b2ca2285072894cf7645d102e98f15613dfb1c7"}, {"url": "https://github.com/postgres/postgres/blob/fba35c7c28a567839faba867db0808564c0a66db/src/backend/optimizer/path/joinpath.c#L31", "path": "src/backend/optimizer/path/joinpath.c", "label": "Core definition", "sha256": "9841ecd96d3383c4637bc43392f25be072d80e0ba6c894010f80b74bf89e2097"}, {"url": "https://github.com/postgres/postgres/blob/fba35c7c28a567839faba867db0808564c0a66db/src/backend/optimizer/path/joinpath.c#L355", "path": "src/backend/optimizer/path/joinpath.c", "label": "Call sites", "sha256": "9841ecd96d3383c4637bc43392f25be072d80e0ba6c894010f80b74bf89e2097"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/joinpath.c:355"]}, {"code": "\t * could add new paths (such as CustomPaths) by calling add_path(), or\n\t * add_partial_path() if parallel aware.  They could also delete or modify\n\t * paths added by the core code.\n\t */\n\tif (set_join_pathlist_hook &&\n\t\tconsider_join_pushdown)\n\t\tset_join_pathlist_hook(root, joinrel, outerrel, innerrel,\n\t\t\t\t\t\t\t   jointype, &extra);\n}\n\n/*\n * We override the param_source_rels heuristic to accept nestloop paths in\n * which the outer rel satisfies some but not all of the inner path's\n * parameterization.  This is necessary to get good plans for star-schema\n * scenarios, in which a parameterized path for a large table may require", "title": "Core call context: src/backend/optimizer/path/joinpath.c:349\u2013363", "paragraphs": []}], "signature": "typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, JoinPathExtraData *extra);\nextern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;", "description": ["Hook for plugins to get control in add_paths_to_joinrel()"]}, "15": {"facts": [{"label": "Interface type", "value": "set_join_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/15/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_15_STABLE", "label": "15", "major": "15", "channel": "stable", "revision": "0351991b8e7c7b64382e2f30ce581a8f276590a6"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/0351991b8e7c7b64382e2f30ce581a8f276590a6/src/include/optimizer/paths.h#L36", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "26db4ac12a1de0b35a8f64334e4879725ead4060072fe6b105ee8f824c6a6916"}, {"url": "https://github.com/postgres/postgres/blob/0351991b8e7c7b64382e2f30ce581a8f276590a6/src/backend/optimizer/path/joinpath.c#L31", "path": "src/backend/optimizer/path/joinpath.c", "label": "Core definition", "sha256": "77b50f75cf034218b9cb3337c8cd3ed03ba9c9b4f3f97b50eb58399ae7a07188"}, {"url": "https://github.com/postgres/postgres/blob/0351991b8e7c7b64382e2f30ce581a8f276590a6/src/backend/optimizer/path/joinpath.c#L355", "path": "src/backend/optimizer/path/joinpath.c", "label": "Call sites", "sha256": "77b50f75cf034218b9cb3337c8cd3ed03ba9c9b4f3f97b50eb58399ae7a07188"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/joinpath.c:355"]}, {"code": "\t * could add new paths (such as CustomPaths) by calling add_path(), or\n\t * add_partial_path() if parallel aware.  They could also delete or modify\n\t * paths added by the core code.\n\t */\n\tif (set_join_pathlist_hook &&\n\t\tconsider_join_pushdown)\n\t\tset_join_pathlist_hook(root, joinrel, outerrel, innerrel,\n\t\t\t\t\t\t\t   jointype, &extra);\n}\n\n/*\n * We override the param_source_rels heuristic to accept nestloop paths in\n * which the outer rel satisfies some but not all of the inner path's\n * parameterization.  This is necessary to get good plans for star-schema\n * scenarios, in which a parameterized path for a large table may require", "title": "Core call context: src/backend/optimizer/path/joinpath.c:349\u2013363", "paragraphs": []}], "signature": "typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, JoinPathExtraData *extra);\nextern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;", "description": ["Hook for plugins to get control in add_paths_to_joinrel()"]}, "16": {"facts": [{"label": "Interface type", "value": "set_join_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/16/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_16_STABLE", "label": "16", "major": "16", "channel": "stable", "revision": "dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa/src/include/optimizer/paths.h#L36", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "4c5cfcfe85de1611e544d8b832fe9b4fcf0f059a0e8d7ffb4f0f5b7381fd214e"}, {"url": "https://github.com/postgres/postgres/blob/dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa/src/backend/optimizer/path/joinpath.c#L31", "path": "src/backend/optimizer/path/joinpath.c", "label": "Core definition", "sha256": "8c6d5206a9e280e4110d0127ccb0e0a08ddbf68957bcc11fb6c89bd582045522"}, {"url": "https://github.com/postgres/postgres/blob/dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa/src/backend/optimizer/path/joinpath.c#L358", "path": "src/backend/optimizer/path/joinpath.c", "label": "Call sites", "sha256": "8c6d5206a9e280e4110d0127ccb0e0a08ddbf68957bcc11fb6c89bd582045522"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/joinpath.c:358"]}, {"code": "\t * could add new paths (such as CustomPaths) by calling add_path(), or\n\t * add_partial_path() if parallel aware.  They could also delete or modify\n\t * paths added by the core code.\n\t */\n\tif (set_join_pathlist_hook &&\n\t\tconsider_join_pushdown)\n\t\tset_join_pathlist_hook(root, joinrel, outerrel, innerrel,\n\t\t\t\t\t\t\t   jointype, &extra);\n}\n\n/*\n * We override the param_source_rels heuristic to accept nestloop paths in\n * which the outer rel satisfies some but not all of the inner path's\n * parameterization.  This is necessary to get good plans for star-schema\n * scenarios, in which a parameterized path for a large table may require", "title": "Core call context: src/backend/optimizer/path/joinpath.c:352\u2013366", "paragraphs": []}], "signature": "typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, JoinPathExtraData *extra);\nextern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;", "description": ["Hook for plugins to get control in add_paths_to_joinrel()"]}, "17": {"facts": [{"label": "Interface type", "value": "set_join_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/17/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_17_STABLE", "label": "17", "major": "17", "channel": "stable", "revision": "163288afd32a448244c8df75b3c33181aadd7f20"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/163288afd32a448244c8df75b3c33181aadd7f20/src/include/optimizer/paths.h#L37", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "95ee796a45866c5501ecaef58344017d69d2453da5dde588195c991934d35877"}, {"url": "https://github.com/postgres/postgres/blob/163288afd32a448244c8df75b3c33181aadd7f20/src/backend/optimizer/path/joinpath.c#L30", "path": "src/backend/optimizer/path/joinpath.c", "label": "Core definition", "sha256": "ec7c8b804b57e07c960f6ba53830e43b9882a2c2c764fc3948dd3ddd83769b36"}, {"url": "https://github.com/postgres/postgres/blob/163288afd32a448244c8df75b3c33181aadd7f20/src/backend/optimizer/path/joinpath.c#L343", "path": "src/backend/optimizer/path/joinpath.c", "label": "Call sites", "sha256": "ec7c8b804b57e07c960f6ba53830e43b9882a2c2c764fc3948dd3ddd83769b36"}], "sections": [{"title": "Core source comments", "paragraphs": ["6. Finally, give extensions a chance to manipulate the path list. They could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. They could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/joinpath.c:343"]}, {"code": "\t * 6. Finally, give extensions a chance to manipulate the path list.  They\n\t * could add new paths (such as CustomPaths) by calling add_path(), or\n\t * add_partial_path() if parallel aware.  They could also delete or modify\n\t * paths added by the core code.\n\t */\n\tif (set_join_pathlist_hook)\n\t\tset_join_pathlist_hook(root, joinrel, outerrel, innerrel,\n\t\t\t\t\t\t\t   jointype, &extra);\n}\n\n/*\n * We override the param_source_rels heuristic to accept nestloop paths in\n * which the outer rel satisfies some but not all of the inner path's\n * parameterization.  This is necessary to get good plans for star-schema\n * scenarios, in which a parameterized path for a large table may require", "title": "Core call context: src/backend/optimizer/path/joinpath.c:337\u2013351", "paragraphs": []}], "signature": "typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, JoinPathExtraData *extra);\nextern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;", "description": ["Hook for plugins to get control in add_paths_to_joinrel()"]}, "18": {"facts": [{"label": "Interface type", "value": "set_join_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/18/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_18_STABLE", "label": "18", "major": "18", "channel": "stable", "revision": "753057e340da8f22e57c9a409ea7a235fd6a46bd"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/include/optimizer/paths.h#L37", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "bf497b2e5501e7c86250147c9cc779785ccec7bb2a806d3c71571313e890208f"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/optimizer/path/joinpath.c#L33", "path": "src/backend/optimizer/path/joinpath.c", "label": "Core definition", "sha256": "03bf45577e4b5c70a6d9e9d2a0bb595846b0bedd7dde4ad4e7a48e5bc308e4c8"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/optimizer/path/joinpath.c#L343", "path": "src/backend/optimizer/path/joinpath.c", "label": "Call sites", "sha256": "03bf45577e4b5c70a6d9e9d2a0bb595846b0bedd7dde4ad4e7a48e5bc308e4c8"}], "sections": [{"title": "Core source comments", "paragraphs": ["6. Finally, give extensions a chance to manipulate the path list. They could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. They could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/joinpath.c:343"]}, {"code": "\t * 6. Finally, give extensions a chance to manipulate the path list.  They\n\t * could add new paths (such as CustomPaths) by calling add_path(), or\n\t * add_partial_path() if parallel aware.  They could also delete or modify\n\t * paths added by the core code.\n\t */\n\tif (set_join_pathlist_hook)\n\t\tset_join_pathlist_hook(root, joinrel, outerrel, innerrel,\n\t\t\t\t\t\t\t   jointype, &extra);\n}\n\n/*\n * We override the param_source_rels heuristic to accept nestloop paths in\n * which the outer rel satisfies some but not all of the inner path's\n * parameterization.  This is necessary to get good plans for star-schema\n * scenarios, in which a parameterized path for a large table may require", "title": "Core call context: src/backend/optimizer/path/joinpath.c:337\u2013351", "paragraphs": []}], "signature": "typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, JoinPathExtraData *extra);\nextern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;", "description": ["Hook for plugins to get control in add_paths_to_joinrel()"]}, "19": {"facts": [{"label": "Interface type", "value": "set_join_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/19/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_19_BETA4", "label": "19 Beta 4", "major": "19", "channel": "preview", "revision": "b73d13c32c834a2c8e1c60cb92f79530376cedf1"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/include/optimizer/paths.h#L46", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "f1ad3b9072e9a7307836c33477dbb472f36bb3a2c135fa50cd1622d3750310cb"}, {"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/backend/optimizer/path/joinpath.c#L31", "path": "src/backend/optimizer/path/joinpath.c", "label": "Core definition", "sha256": "45ca2faac289f61d393e1e60cfe84725da1c233287b9fe550bd00c4452a32078"}, {"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/backend/optimizer/path/joinpath.c#L380", "path": "src/backend/optimizer/path/joinpath.c", "label": "Call sites", "sha256": "45ca2faac289f61d393e1e60cfe84725da1c233287b9fe550bd00c4452a32078"}], "sections": [{"title": "Core source comments", "paragraphs": ["Hooks for plugins to get control in add_paths_to_joinrel()", "6. Finally, give extensions a chance to manipulate the path list. They could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. In theory, extensions could also use this hook to delete or modify paths added by the core code, but in practice this is difficult to make work, since it's too late to get back any paths that have already been discarded by add_path() or add_partial_path(). If you're trying to suppress paths, consider using join_path_setup_hook instead."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/joinpath.c:380"]}, {"code": "\t * paths added by the core code, but in practice this is difficult to make\n\t * work, since it's too late to get back any paths that have already been\n\t * discarded by add_path() or add_partial_path(). If you're trying to\n\t * suppress paths, consider using join_path_setup_hook instead.\n\t */\n\tif (set_join_pathlist_hook)\n\t\tset_join_pathlist_hook(root, joinrel, outerrel, innerrel,\n\t\t\t\t\t\t\t   save_jointype, &extra);\n}\n\n/*\n * We override the param_source_rels heuristic to accept nestloop paths in\n * which the outer rel satisfies some but not all of the inner path's\n * parameterization.  This is necessary to get good plans for star-schema\n * scenarios, in which a parameterized path for a large table may require", "title": "Core call context: src/backend/optimizer/path/joinpath.c:374\u2013388", "paragraphs": []}], "signature": "typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, JoinPathExtraData *extra);\nextern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;", "description": ["Hook for plugins to get control in add_paths_to_joinrel()"]}, "20": {"facts": [{"label": "Interface type", "value": "set_join_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/devel/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "master", "label": "20 devel", "major": "20", "channel": "devel", "revision": "2c10c2ce4d7bcd57543a49ab402af02a39724e0a"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/include/optimizer/paths.h#L46", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "7d4e6d888e06597a145f6e53f235a90dc70f13db5bab820339f63023003b79e3"}, {"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/optimizer/path/joinpath.c#L31", "path": "src/backend/optimizer/path/joinpath.c", "label": "Core definition", "sha256": "acf82e1a85a0ee004b15ab07db9f72a7729dcea096ffd82e509c0dc2b98b9faf"}, {"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/optimizer/path/joinpath.c#L383", "path": "src/backend/optimizer/path/joinpath.c", "label": "Call sites", "sha256": "acf82e1a85a0ee004b15ab07db9f72a7729dcea096ffd82e509c0dc2b98b9faf"}], "sections": [{"title": "Core source comments", "paragraphs": ["Hooks for plugins to get control in add_paths_to_joinrel()", "6. Finally, give extensions a chance to manipulate the path list. They could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. In theory, extensions could also use this hook to delete or modify paths added by the core code, but in practice this is difficult to make work, since it's too late to get back any paths that have already been discarded by add_path() or add_partial_path(). If you're trying to suppress paths, consider using join_path_setup_hook instead."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/joinpath.c:383"]}, {"code": "\t * paths added by the core code, but in practice this is difficult to make\n\t * work, since it's too late to get back any paths that have already been\n\t * discarded by add_path() or add_partial_path(). If you're trying to\n\t * suppress paths, consider using join_path_setup_hook instead.\n\t */\n\tif (set_join_pathlist_hook)\n\t\tset_join_pathlist_hook(root, joinrel, outerrel, innerrel,\n\t\t\t\t\t\t\t   save_jointype, &extra);\n}\n\n/*\n * We override the param_source_rels heuristic to accept nestloop paths in\n * which the outer rel satisfies some but not all of the inner path's\n * parameterization.  This is necessary to get good plans for star-schema\n * scenarios, in which a parameterized path for a large table may require", "title": "Core call context: src/backend/optimizer/path/joinpath.c:377\u2013391", "paragraphs": []}], "signature": "typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, JoinPathExtraData *extra);\nextern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;", "description": ["Hook for plugins to get control in add_paths_to_joinrel()"]}}, "content_hash": "7e4c49ea976a416e09eb6e8fef1fac0ffa4192068e77e6acbad3871417f5a432", "imported_at": "2026-09-27T09:57:58.886"}, "snapshot": {"facts": [{"label": "Interface type", "value": "set_join_pathlist_hook_type"}, {"label": "Header", "value": "src/include/optimizer/paths.h"}, {"label": "Subsystem", "value": "Query planning"}, {"label": "Initial value", "value": "NULL (no hook installed)"}], "related": [{"url": "/docs/18/planner-optimizer.html", "label": "The Planner/Optimizer"}], "release": {"ref": "REL_18_STABLE", "label": "18", "major": "18", "channel": "stable", "revision": "753057e340da8f22e57c9a409ea7a235fd6a46bd"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/include/optimizer/paths.h#L37", "path": "src/include/optimizer/paths.h", "label": "Interface declaration", "sha256": "bf497b2e5501e7c86250147c9cc779785ccec7bb2a806d3c71571313e890208f"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/optimizer/path/joinpath.c#L33", "path": "src/backend/optimizer/path/joinpath.c", "label": "Core definition", "sha256": "03bf45577e4b5c70a6d9e9d2a0bb595846b0bedd7dde4ad4e7a48e5bc308e4c8"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/optimizer/path/joinpath.c#L343", "path": "src/backend/optimizer/path/joinpath.c", "label": "Call sites", "sha256": "03bf45577e4b5c70a6d9e9d2a0bb595846b0bedd7dde4ad4e7a48e5bc308e4c8"}], "sections": [{"title": "Core source comments", "paragraphs": ["6. Finally, give extensions a chance to manipulate the path list. They could add new paths (such as CustomPaths) by calling add_path(), or add_partial_path() if parallel aware. They could also delete or modify paths added by the core code."]}, {"title": "Call sites", "paragraphs": ["src/backend/optimizer/path/joinpath.c:343"]}, {"code": "\t * 6. Finally, give extensions a chance to manipulate the path list.  They\n\t * could add new paths (such as CustomPaths) by calling add_path(), or\n\t * add_partial_path() if parallel aware.  They could also delete or modify\n\t * paths added by the core code.\n\t */\n\tif (set_join_pathlist_hook)\n\t\tset_join_pathlist_hook(root, joinrel, outerrel, innerrel,\n\t\t\t\t\t\t\t   jointype, &extra);\n}\n\n/*\n * We override the param_source_rels heuristic to accept nestloop paths in\n * which the outer rel satisfies some but not all of the inner path's\n * parameterization.  This is necessary to get good plans for star-schema\n * scenarios, in which a parameterized path for a large table may require", "title": "Core call context: src/backend/optimizer/path/joinpath.c:337\u2013351", "paragraphs": []}], "signature": "typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, JoinType jointype, JoinPathExtraData *extra);\nextern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;", "description": ["Hook for plugins to get control in add_paths_to_joinrel()"]}, "comparison": {"left": "17", "right": "18", "status": "unchanged", "diff": ""}}