From d3a38318ac614f20a9e2e163bba083d15be54f06 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 31 Jul 2023 17:04:47 -0700 Subject: [PATCH] Rename OverrideSearchPath to SearchPathMatcher. The previous commit removed the "override" APIs. Surviving APIs facilitate plancache.c to snapshot search_path and test whether the current value equals a remembered snapshot. Aleksander Alekseev. Reported by Alexander Lakhin and Noah Misch. Discussion: https://postgr.es/m/8ffb4650-52c4-6a81-38fc-8f99be981130@gmail.com --- src/backend/catalog/namespace.c | 24 ++++++++++++------------ src/backend/utils/cache/plancache.c | 12 ++++++------ src/include/catalog/namespace.h | 12 ++++++------ src/include/utils/plancache.h | 2 +- src/tools/pgindent/typedefs.list | 2 +- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c index f51a13aa56..1f76b5d7f7 100644 --- a/src/backend/catalog/namespace.c +++ b/src/backend/catalog/namespace.c @@ -3374,16 +3374,16 @@ SetTempNamespaceState(Oid tempNamespaceId, Oid tempToastNamespaceId) /* - * GetOverrideSearchPath - fetch current search path definition. + * GetSearchPathMatcher - fetch current search path definition. * * The result structure is allocated in the specified memory context * (which might or might not be equal to CurrentMemoryContext); but any * junk created by revalidation calculations will be in CurrentMemoryContext. */ -OverrideSearchPath * -GetOverrideSearchPath(MemoryContext context) +SearchPathMatcher * +GetSearchPathMatcher(MemoryContext context) { - OverrideSearchPath *result; + SearchPathMatcher *result; List *schemas; MemoryContext oldcxt; @@ -3391,7 +3391,7 @@ GetOverrideSearchPath(MemoryContext context) oldcxt = MemoryContextSwitchTo(context); - result = (OverrideSearchPath *) palloc0(sizeof(OverrideSearchPath)); + result = (SearchPathMatcher *) palloc0(sizeof(SearchPathMatcher)); schemas = list_copy(activeSearchPath); while (schemas && linitial_oid(schemas) != activeCreationNamespace) { @@ -3413,16 +3413,16 @@ GetOverrideSearchPath(MemoryContext context) } /* - * CopyOverrideSearchPath - copy the specified OverrideSearchPath. + * CopySearchPathMatcher - copy the specified SearchPathMatcher. * * The result structure is allocated in CurrentMemoryContext. */ -OverrideSearchPath * -CopyOverrideSearchPath(OverrideSearchPath *path) +SearchPathMatcher * +CopySearchPathMatcher(SearchPathMatcher *path) { - OverrideSearchPath *result; + SearchPathMatcher *result; - result = (OverrideSearchPath *) palloc(sizeof(OverrideSearchPath)); + result = (SearchPathMatcher *) palloc(sizeof(SearchPathMatcher)); result->schemas = list_copy(path->schemas); result->addCatalog = path->addCatalog; result->addTemp = path->addTemp; @@ -3432,7 +3432,7 @@ CopyOverrideSearchPath(OverrideSearchPath *path) } /* - * OverrideSearchPathMatchesCurrent - does path match current setting? + * SearchPathMatchesCurrentEnvironment - does path match current environment? * * This is tested over and over in some common code paths, and in the typical * scenario where the active search path seldom changes, it'll always succeed. @@ -3440,7 +3440,7 @@ CopyOverrideSearchPath(OverrideSearchPath *path) * whenever the active search path changes. */ bool -OverrideSearchPathMatchesCurrent(OverrideSearchPath *path) +SearchPathMatchesCurrentEnvironment(SearchPathMatcher *path) { ListCell *lc, *lcp; diff --git a/src/backend/utils/cache/plancache.c b/src/backend/utils/cache/plancache.c index 56c84e1e62..d67cd9a405 100644 --- a/src/backend/utils/cache/plancache.c +++ b/src/backend/utils/cache/plancache.c @@ -407,7 +407,7 @@ CompleteCachedPlan(CachedPlanSource *plansource, * one-shot plans; and we *must* skip this for transaction control * commands, because this could result in catalog accesses. */ - plansource->search_path = GetOverrideSearchPath(querytree_context); + plansource->search_path = GetSearchPathMatcher(querytree_context); } /* @@ -586,7 +586,7 @@ RevalidateCachedQuery(CachedPlanSource *plansource, if (plansource->is_valid) { Assert(plansource->search_path != NULL); - if (!OverrideSearchPathMatchesCurrent(plansource->search_path)) + if (!SearchPathMatchesCurrentEnvironment(plansource->search_path)) { /* Invalidate the querytree and generic plan */ plansource->is_valid = false; @@ -759,7 +759,7 @@ RevalidateCachedQuery(CachedPlanSource *plansource, * not generate much extra cruft either, since almost certainly the path * is already valid.) */ - plansource->search_path = GetOverrideSearchPath(querytree_context); + plansource->search_path = GetSearchPathMatcher(querytree_context); MemoryContextSwitchTo(oldcxt); @@ -1326,7 +1326,7 @@ CachedPlanAllowsSimpleValidityCheck(CachedPlanSource *plansource, Assert(plan->is_valid); Assert(plan == plansource->gplan); Assert(plansource->search_path != NULL); - Assert(OverrideSearchPathMatchesCurrent(plansource->search_path)); + Assert(SearchPathMatchesCurrentEnvironment(plansource->search_path)); /* We don't support oneshot plans here. */ if (plansource->is_oneshot) @@ -1449,7 +1449,7 @@ CachedPlanIsSimplyValid(CachedPlanSource *plansource, CachedPlan *plan, /* Is the search_path still the same as when we made it? */ Assert(plansource->search_path != NULL); - if (!OverrideSearchPathMatchesCurrent(plansource->search_path)) + if (!SearchPathMatchesCurrentEnvironment(plansource->search_path)) return false; /* It's still good. Bump refcount if requested. */ @@ -1565,7 +1565,7 @@ CopyCachedPlan(CachedPlanSource *plansource) newsource->relationOids = copyObject(plansource->relationOids); newsource->invalItems = copyObject(plansource->invalItems); if (plansource->search_path) - newsource->search_path = CopyOverrideSearchPath(plansource->search_path); + newsource->search_path = CopySearchPathMatcher(plansource->search_path); newsource->query_context = querytree_context; newsource->rewriteRoleId = plansource->rewriteRoleId; newsource->rewriteRowSecurity = plansource->rewriteRowSecurity; diff --git a/src/include/catalog/namespace.h b/src/include/catalog/namespace.h index 93e0c12345..49ef619e4b 100644 --- a/src/include/catalog/namespace.h +++ b/src/include/catalog/namespace.h @@ -49,19 +49,19 @@ typedef enum TempNamespaceStatus } TempNamespaceStatus; /* - * Structure for xxxOverrideSearchPath functions + * Structure for xxxSearchPathMatcher functions * * The generation counter is private to namespace.c and shouldn't be touched * by other code. It can be initialized to zero if necessary (that means * "not known equal to the current active path"). */ -typedef struct OverrideSearchPath +typedef struct SearchPathMatcher { List *schemas; /* OIDs of explicitly named schemas */ bool addCatalog; /* implicitly prepend pg_catalog? */ bool addTemp; /* implicitly prepend temp schema? */ uint64 generation; /* for quick detection of equality to active */ -} OverrideSearchPath; +} SearchPathMatcher; /* * Option flag bits for RangeVarGetRelidExtended(). @@ -164,9 +164,9 @@ extern void SetTempNamespaceState(Oid tempNamespaceId, Oid tempToastNamespaceId); extern void ResetTempTableNamespace(void); -extern OverrideSearchPath *GetOverrideSearchPath(MemoryContext context); -extern OverrideSearchPath *CopyOverrideSearchPath(OverrideSearchPath *path); -extern bool OverrideSearchPathMatchesCurrent(OverrideSearchPath *path); +extern SearchPathMatcher *GetSearchPathMatcher(MemoryContext context); +extern SearchPathMatcher *CopySearchPathMatcher(SearchPathMatcher *path); +extern bool SearchPathMatchesCurrentEnvironment(SearchPathMatcher *path); extern Oid get_collation_oid(List *collname, bool missing_ok); extern Oid get_conversion_oid(List *conname, bool missing_ok); diff --git a/src/include/utils/plancache.h b/src/include/utils/plancache.h index a443181d41..916e59d9fe 100644 --- a/src/include/utils/plancache.h +++ b/src/include/utils/plancache.h @@ -111,7 +111,7 @@ typedef struct CachedPlanSource List *query_list; /* list of Query nodes, or NIL if not valid */ List *relationOids; /* OIDs of relations the queries depend on */ List *invalItems; /* other dependencies, as PlanInvalItems */ - struct OverrideSearchPath *search_path; /* search_path used for parsing + struct SearchPathMatcher *search_path; /* search_path used for parsing * and planning */ MemoryContext query_context; /* context holding the above, or NULL */ Oid rewriteRoleId; /* Role ID we did rewriting for */ diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index dc296afb63..66823bc2a7 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -1686,7 +1686,6 @@ OuterJoinClauseInfo OutputPluginCallbacks OutputPluginOptions OutputPluginOutputType -OverrideSearchPath OverridingKind PACE_HEADER PACL @@ -2463,6 +2462,7 @@ ScanState ScanTypeControl ScannerCallbackState SchemaQuery +SearchPathMatcher SecBuffer SecBufferDesc SecLabelItem