in asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/util/GraphStatementHandlingUtil.java [223:270]
public static void handleGraphDrop(GraphDropStatement gds, MetadataProvider metadataProvider,
DataverseName activeDataverseName) throws RemoteException, AlgebricksException {
MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
metadataProvider.setMetadataTxnContext(mdTxnCtx);
// Verify that our active dataverse exists.
Dataverse dataverse = MetadataManager.INSTANCE.getDataverse(mdTxnCtx, activeDataverseName);
if (dataverse == null) {
if (gds.getIfExists()) {
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return;
} else {
throw new CompilationException(ErrorCode.UNKNOWN_DATAVERSE, gds.getSourceLocation(),
activeDataverseName);
}
}
// Verify that our graph exists. If it does not, skip.
Graph graph = GraphixMetadataExtension.getGraph(mdTxnCtx, activeDataverseName, gds.getGraphName());
if (graph == null) {
if (gds.getIfExists()) {
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return;
} else {
throw new CompilationException(ErrorCode.COMPILATION_ERROR, gds.getSourceLocation(),
"Graph " + gds.getGraphName() + " does not exist.");
}
}
// Verify that no requirements exist on our graph.
DataverseName dataverseName = (gds.getDataverseName() == null) ? activeDataverseName : gds.getDataverseName();
DependencyIdentifier dependencyIdentifier =
new DependencyIdentifier(dataverseName, gds.getGraphName(), DependencyIdentifier.Kind.GRAPH);
throwIfDependentExists(mdTxnCtx, dependencyIdentifier);
Optional<IEntityRequirements> requirements = GraphixMetadataExtension.getAllEntityRequirements(mdTxnCtx)
.stream().filter(r -> r.getDataverseName().equals(dataverseName))
.filter(r -> r.getEntityName().equals(gds.getGraphName()))
.filter(r -> r.getDependentKind().equals(IEntityRequirements.DependentKind.GRAPH)).findFirst();
if (requirements.isPresent()) {
MetadataManager.INSTANCE.deleteEntity(mdTxnCtx, requirements.get());
}
// Finally, perform the deletion.
MetadataManager.INSTANCE.deleteEntity(mdTxnCtx, graph);
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
}