1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-21 16:02:15 +03:00

Allow callers to pass a missing_ok flag when opening a relation.

Since the names try_relation_openrv() and try_heap_openrv() don't seem
quite appropriate, rename the functions to relation_openrv_extended()
and heap_openrv_extended().  This is also more general, if we have a
future need for additional parameters that are of interest to only a
few callers.

This is infrastructure for a forthcoming patch to allow
get_object_address() to take a missing_ok argument as well.

Patch by me, review by Noah Misch.
This commit is contained in:
Robert Haas
2011-06-27 15:06:32 -04:00
parent e16954f3d2
commit 9abbed0629
4 changed files with 21 additions and 15 deletions

View File

@ -1004,15 +1004,17 @@ relation_openrv(const RangeVar *relation, LOCKMODE lockmode)
}
/* ----------------
* try_relation_openrv - open any relation specified by a RangeVar
* relation_openrv_extended - open any relation specified by a RangeVar
*
* Same as relation_openrv, but return NULL instead of failing for
* relation-not-found. (Note that some other causes, such as
* permissions problems, will still result in an ereport.)
* Same as relation_openrv, but with an additional missing_ok argument
* allowing a NULL return rather than an error if the relation is not
* found. (Note that some other causes, such as permissions problems,
* will still result in an ereport.)
* ----------------
*/
Relation
try_relation_openrv(const RangeVar *relation, LOCKMODE lockmode)
relation_openrv_extended(const RangeVar *relation, LOCKMODE lockmode,
bool missing_ok)
{
Oid relOid;
@ -1032,7 +1034,7 @@ try_relation_openrv(const RangeVar *relation, LOCKMODE lockmode)
AcceptInvalidationMessages();
/* Look up the appropriate relation using namespace search */
relOid = RangeVarGetRelid(relation, true);
relOid = RangeVarGetRelid(relation, missing_ok);
/* Return NULL on not-found */
if (!OidIsValid(relOid))
@ -1125,18 +1127,20 @@ heap_openrv(const RangeVar *relation, LOCKMODE lockmode)
}
/* ----------------
* try_heap_openrv - open a heap relation specified
* heap_openrv_extended - open a heap relation specified
* by a RangeVar node
*
* As above, but return NULL instead of failing for relation-not-found.
* As above, but optionally return NULL instead of failing for
* relation-not-found.
* ----------------
*/
Relation
try_heap_openrv(const RangeVar *relation, LOCKMODE lockmode)
heap_openrv_extended(const RangeVar *relation, LOCKMODE lockmode,
bool missing_ok)
{
Relation r;
r = try_relation_openrv(relation, lockmode);
r = relation_openrv_extended(relation, lockmode, missing_ok);
if (r)
{