mirror of
https://github.com/postgres/postgres.git
synced 2025-12-15 02:22:24 +03:00
Remove PlannerInfo's join_search_private method.
Instead, use the new mechanism that allows planner extensions to store private state inside a PlannerInfo, treating GEQO as an in-core planner extension. This is a useful test of the new facility, and also buys back a few bytes of storage. To make this work, we must remove innerrel_is_unique_ext's hack of testing whether join_search_private is set as a proxy for whether the join search might be retried. Add a flag that extensions can use to explicitly signal their intentions instead. Reviewed-by: Andrei Lepikhov <lepihov@gmail.com> Reviewed-by: Melanie Plageman <melanieplageman@gmail.com> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: http://postgr.es/m/CA+TgmoYWKHU2hKr62Toyzh-kTDEnMDeLw7gkOOnjL-TnOUq0kQ@mail.gmail.com
This commit is contained in:
@@ -1425,17 +1425,14 @@ innerrel_is_unique_ext(PlannerInfo *root,
|
||||
*
|
||||
* However, in normal planning mode, caching this knowledge is totally
|
||||
* pointless; it won't be queried again, because we build up joinrels
|
||||
* from smaller to larger. It is useful in GEQO mode, where the
|
||||
* knowledge can be carried across successive planning attempts; and
|
||||
* it's likely to be useful when using join-search plugins, too. Hence
|
||||
* cache when join_search_private is non-NULL. (Yeah, that's a hack,
|
||||
* but it seems reasonable.)
|
||||
* from smaller to larger. It's only useful when using GEQO or
|
||||
* another planner extension that attempts planning multiple times.
|
||||
*
|
||||
* Also, allow callers to override that heuristic and force caching;
|
||||
* that's useful for reduce_unique_semijoins, which calls here before
|
||||
* the normal join search starts.
|
||||
*/
|
||||
if (force_cache || root->join_search_private)
|
||||
if (force_cache || root->assumeReplanning)
|
||||
{
|
||||
old_context = MemoryContextSwitchTo(root->planner_cxt);
|
||||
innerrel->non_unique_for_rels =
|
||||
|
||||
Reference in New Issue
Block a user