{
Oid namespaceId;
- namespaceId = LookupExplicitNamespace(relation->schemaname);
+ namespaceId = LookupExplicitNamespace(relation->schemaname, missing_ok);
+ /*
+ * For missing_ok, allow a non-existant schema name
+ * to throw the error below (namespaceId == InvalidOid).
+ */
if (namespaceId != myTempNamespace)
ereport(ERROR,
(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
Oid namespaceId;
/* use exact schema given */
- namespaceId = LookupExplicitNamespace(relation->schemaname);
- relId = get_relname_relid(relation->relname, namespaceId);
+ namespaceId = LookupExplicitNamespace(relation->schemaname, missing_ok);
+ if (missing_ok && !OidIsValid(namespaceId))
+ relId = InvalidOid;
+ else
+ relId = get_relname_relid(relation->relname, namespaceId);
}
else
{
if (schemaname)
{
/* use exact schema given */
- namespaceId = LookupExplicitNamespace(schemaname);
+ namespaceId = LookupExplicitNamespace(schemaname, false);
}
else
{
Oid namespaceId;
HeapTuple opertup;
- namespaceId = LookupExplicitNamespace(schemaname);
+ namespaceId = LookupExplicitNamespace(schemaname, false);
opertup = SearchSysCache4(OPERNAMENSP,
CStringGetDatum(opername),
ObjectIdGetDatum(oprleft),
if (schemaname)
{
/* use exact schema given */
- namespaceId = LookupExplicitNamespace(schemaname);
+ namespaceId = LookupExplicitNamespace(schemaname, false);
}
else
{
if (schemaname)
{
/* use exact schema given */
- namespaceId = LookupExplicitNamespace(schemaname);
- prsoid = GetSysCacheOid2(TSPARSERNAMENSP,
- PointerGetDatum(parser_name),
- ObjectIdGetDatum(namespaceId));
+ namespaceId = LookupExplicitNamespace(schemaname, missing_ok);
+ if (missing_ok && !OidIsValid(namespaceId))
+ prsoid = InvalidOid;
+ else
+ prsoid = GetSysCacheOid2(TSPARSERNAMENSP,
+ PointerGetDatum(parser_name),
+ ObjectIdGetDatum(namespaceId));
}
else
{
if (schemaname)
{
/* use exact schema given */
- namespaceId = LookupExplicitNamespace(schemaname);
- dictoid = GetSysCacheOid2(TSDICTNAMENSP,
- PointerGetDatum(dict_name),
- ObjectIdGetDatum(namespaceId));
+ namespaceId = LookupExplicitNamespace(schemaname, missing_ok);
+ if (missing_ok && !OidIsValid(namespaceId))
+ dictoid = InvalidOid;
+ else
+ dictoid = GetSysCacheOid2(TSDICTNAMENSP,
+ PointerGetDatum(dict_name),
+ ObjectIdGetDatum(namespaceId));
}
else
{
if (schemaname)
{
/* use exact schema given */
- namespaceId = LookupExplicitNamespace(schemaname);
- tmploid = GetSysCacheOid2(TSTEMPLATENAMENSP,
- PointerGetDatum(template_name),
- ObjectIdGetDatum(namespaceId));
+ namespaceId = LookupExplicitNamespace(schemaname, missing_ok);
+ if (missing_ok && !OidIsValid(namespaceId))
+ tmploid = InvalidOid;
+ else
+ tmploid = GetSysCacheOid2(TSTEMPLATENAMENSP,
+ PointerGetDatum(template_name),
+ ObjectIdGetDatum(namespaceId));
}
else
{
if (schemaname)
{
/* use exact schema given */
- namespaceId = LookupExplicitNamespace(schemaname);
- cfgoid = GetSysCacheOid2(TSCONFIGNAMENSP,
- PointerGetDatum(config_name),
- ObjectIdGetDatum(namespaceId));
+ namespaceId = LookupExplicitNamespace(schemaname, missing_ok);
+ if (missing_ok && !OidIsValid(namespaceId))
+ cfgoid = InvalidOid;
+ else
+ cfgoid = GetSysCacheOid2(TSCONFIGNAMENSP,
+ PointerGetDatum(config_name),
+ ObjectIdGetDatum(namespaceId));
}
else
{
* Returns the namespace OID. Raises ereport if any problem.
*/
Oid
-LookupExplicitNamespace(const char *nspname)
+LookupExplicitNamespace(const char *nspname, bool missing_ok)
{
Oid namespaceId;
AclResult aclresult;
*/
}
- namespaceId = get_namespace_oid(nspname, false);
-
+ namespaceId = get_namespace_oid(nspname, missing_ok);
+ if (missing_ok && !OidIsValid(namespaceId))
+ return InvalidOid;
+
aclresult = pg_namespace_aclcheck(namespaceId, GetUserId(), ACL_USAGE);
if (aclresult != ACLCHECK_OK)
aclcheck_error(aclresult, ACL_KIND_NAMESPACE,
if (schemaname)
{
/* use exact schema given */
- namespaceId = LookupExplicitNamespace(schemaname);
+ namespaceId = LookupExplicitNamespace(schemaname, missing_ok);
+ if (missing_ok && !OidIsValid(namespaceId))
+ return InvalidOid;
/* first try for encoding-specific entry, then any-encoding */
colloid = GetSysCacheOid3(COLLNAMEENCNSP,
if (schemaname)
{
/* use exact schema given */
- namespaceId = LookupExplicitNamespace(schemaname);
- conoid = GetSysCacheOid2(CONNAMENSP,
- PointerGetDatum(conversion_name),
- ObjectIdGetDatum(namespaceId));
+ namespaceId = LookupExplicitNamespace(schemaname, missing_ok);
+ if (missing_ok && !OidIsValid(namespaceId))
+ conoid = InvalidOid;
+ else
+ conoid = GetSysCacheOid2(CONNAMENSP,
+ PointerGetDatum(conversion_name),
+ ObjectIdGetDatum(namespaceId));
}
else
{