protected void handleDataverseDropStatement()

in asterix-graphix/src/main/java/org/apache/asterix/graphix/app/translator/GraphixQueryTranslator.java [339:380]


    protected void handleDataverseDropStatement(MetadataProvider metadataProvider, Statement stmt,
            IHyracksClientConnection hcc, IRequestParameters requestParameters) throws Exception {
        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
        metadataProvider.setMetadataTxnContext(mdTxnCtx);

        // Forbid dropping this dataverse if other entities that are outside this dataverse depend on this dataverse.
        DataverseName droppedDataverse = ((DataverseDropStatement) stmt).getDataverseName();
        List<IEntityRequirements> requirementsList = GraphixMetadataExtension.getAllEntityRequirements(mdTxnCtx);
        for (IEntityRequirements requirements : requirementsList) {
            if (requirements.getDataverseName().equals(droppedDataverse)) {
                continue;
            }
            for (DependencyIdentifier dependency : requirements) {
                if (dependency.getDataverseName().equals(droppedDataverse)) {
                    throw new CompilationException(ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS,
                            dependency.getDependencyKind(), dependency.getDisplayName(),
                            requirements.getDependentKind(), requirements.getDisplayName());
                }
            }
        }

        // Perform a drop for all GraphDependency records contained in this dataverse.
        for (IEntityRequirements requirements : requirementsList) {
            if (!requirements.getDataverseName().equals(droppedDataverse)) {
                continue;
            }
            MetadataManager.INSTANCE.deleteEntity(mdTxnCtx, requirements);
        }

        // Perform a drop for all graphs contained in this dataverse.
        MetadataProvider tempMdProvider = MetadataProvider.create(appCtx, metadataProvider.getDefaultDataverse());
        tempMdProvider.getConfig().putAll(metadataProvider.getConfig());
        for (Graph graph : GraphixMetadataExtension.getAllGraphs(mdTxnCtx, droppedDataverse)) {
            tempMdProvider.getLocks().reset();
            GraphDropStatement gds = new GraphDropStatement(droppedDataverse, graph.getGraphName(), false);
            gds.handle(hcc, this, requestParameters, tempMdProvider, 0);
        }

        // Finish this transaction and perform the remainder of the DROP DATAVERSE statement.
        MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
        super.handleDataverseDropStatement(metadataProvider, stmt, hcc, requestParameters);
    }