Пример #1
0
/*
 * GetForeignServerByName - look up the foreign server definition by name.
 */
ForeignServer *
GetForeignServerByName(const char *srvname, bool missing_ok)
{
	Oid			serverid = get_foreign_server_oid(srvname, missing_ok);

	if (!OidIsValid(serverid))
		return NULL;

	return GetForeignServer(serverid);
}
Пример #2
0
/*
 * Find an struct objaddr for a type of object that is identified by an
 * unqualified name.
 */
static struct objaddr
get_objaddr_unqualified(objtype_e objtype, struct list *qualname)
{
	const char *name;
	struct objaddr address;

	/*
	 * The types of names handled by this function are not permitted to be
	 * schema-qualified or catalog-qualified.
	 */
	if (list_length(qualname) != 1) {
		const char *msg;

		switch (objtype) {
		case OBJECT_DATABASE:
			msg = gettext_noop("database name cannot be qualified");
			break;

		case OBJECT_EXTENSION:
			msg = gettext_noop("extension name cannot be qualified");
			break;

		case OBJECT_TABLESPACE:
			msg = gettext_noop("tablespace name cannot be qualified");
			break;

		case OBJECT_ROLE:
			msg = gettext_noop("role name cannot be qualified");
			break;

		case OBJECT_SCHEMA:
			msg = gettext_noop("schema name cannot be qualified");
			break;

		case OBJECT_LANGUAGE:
			msg = gettext_noop("language name cannot be qualified");
			break;

		case OBJECT_FDW:
			msg = gettext_noop("foreign-data wrapper name cannot be qualified");
			break;

		case OBJECT_FOREIGN_SERVER:
			msg = gettext_noop("server name cannot be qualified");
			break;

		default:
			elog(ERROR, "unrecognized objtype: %d", (int) objtype);
			msg = NULL;		/* placate compiler */
		}

		ereport(ERROR, (
		errcode(E_SYNTAX_ERROR),
		errmsg("%s", _(msg))));
	}

	/* Format is valid, extract the actual name. */
	name = str_value(linitial(qualname));

	/* Translate name to OID. */
	switch (objtype) {
	case OBJECT_DATABASE:
		address.classId = DatabaseRelationId;
		address.objectId = get_db_oid(name, false);
		address.objectSubId = 0;
		break;

	case OBJECT_EXTENSION:
		address.classId = ExtensionRelationId;
		address.objectId = get_extension_oid(name, false);
		address.objectSubId = 0;
		break;

	case OBJECT_TABLESPACE:
		address.classId = TableSpaceRelationId;
		address.objectId = tbs_get_oid(name, false);
		address.objectSubId = 0;
		break;

	case OBJECT_ROLE:
		address.classId = AuthIdRelationId;
		address.objectId = get_role_oid(name, false);
		address.objectSubId = 0;
		break;

	case OBJECT_SCHEMA:
		address.classId = NAMESPACE_RELATION_ID;
		address.objectId = get_ns_oid(name, false);
		address.objectSubId = 0;
		break;

	case OBJECT_LANGUAGE:
		address.classId = LanguageRelationId;
		address.objectId = get_lang_oid(name, false);
		address.objectSubId = 0;
		break;

	case OBJECT_FDW:
		address.classId = ForeignDataWrapperRelationId;
		address.objectId = get_fdw_oid(name, false);
		address.objectSubId = 0;
		break;

	case OBJECT_FOREIGN_SERVER:
		address.classId = ForeignServerRelationId;
		address.objectId = get_foreign_server_oid(name, false);
		address.objectSubId = 0;
		break;

	default:
		elog(ERROR, "unrecognized objtype: %d", (int) objtype);
		/* placate compiler, which doesn't know elog won't return */
		address.classId = INVALID_OID;
		address.objectId = INVALID_OID;
		address.objectSubId = 0;
	}

	return address;
}