in src/backend/commands/label_commands.c [749:836]
Datum drop_label(PG_FUNCTION_ARGS)
{
Name graph_name;
Name label_name;
bool force;
char *graph_name_str;
graph_cache_data *cache_data;
Oid graph_oid;
Oid nsp_id;
char *label_name_str;
Oid label_relation;
char *schema_name;
char *rel_name;
List *qname;
if (PG_ARGISNULL(0))
{
ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("graph name must not be NULL")));
}
if (PG_ARGISNULL(1))
{
ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("label name must not be NULL")));
}
graph_name = PG_GETARG_NAME(0);
label_name = PG_GETARG_NAME(1);
force = PG_GETARG_BOOL(2);
graph_name_str = NameStr(*graph_name);
cache_data = search_graph_name_cache(graph_name_str);
if (!cache_data)
{
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_SCHEMA),
errmsg("graph \"%s\" does not exist", graph_name_str)));
}
graph_oid = cache_data->oid;
nsp_id = cache_data->namespace;
label_name_str = NameStr(*label_name);
label_relation = get_label_relation(label_name_str, graph_oid);
if (!OidIsValid(label_relation))
{
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_TABLE),
errmsg("label \"%s\" does not exist", label_name_str)));
}
if (force)
{
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("force option is not supported yet")));
}
/* validate schema_name */
schema_name = get_namespace_name(nsp_id);
if (schema_name == NULL)
{
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_TABLE),
errmsg("schema_name not found for namespace id \"%d\"",
nsp_id)));
}
/* validate rel_name */
rel_name = get_rel_name(label_relation);
if (rel_name == NULL)
{
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_TABLE),
errmsg("rel_name not found for label \"%s\"",
label_name_str)));
}
/* build qualified name */
qname = list_make2(makeString(schema_name), makeString(rel_name));
remove_relation(qname);
/* CommandCounterIncrement() is called in performDeletion() */
/* delete_label() will be called in object_access() */
ereport(NOTICE, (errmsg("label \"%s\".\"%s\" has been dropped",
graph_name_str, label_name_str)));
PG_RETURN_VOID();
}