public static void handleGraphDrop()

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);
    }