protected void handleDataverseDropStatement()

in asterix-bad/src/main/java/org/apache/asterix/bad/lang/BADQueryTranslator.java [430:493]


    protected void handleDataverseDropStatement(MetadataProvider metadataProvider, Statement stmt,
            IHyracksClientConnection hcc, IRequestParameters requestParameters) throws Exception {
        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
        metadataProvider.setMetadataTxnContext(mdTxnCtx);
        DataverseName dvId = ((DataverseDropStatement) stmt).getDataverseName();
        MetadataProvider tempMdProvider = MetadataProvider.create(appCtx, metadataProvider.getDefaultDataverse());
        tempMdProvider.getConfig().putAll(metadataProvider.getConfig());
        List<Channel> channels = BADLangExtension.getAllChannels(mdTxnCtx);
        for (Channel channel : channels) {
            if (channel.getChannelId().getDataverseName().equals(dvId)) {
                continue;
            }
            List<List<Triple<DataverseName, String, String>>> dependencies = channel.getDependencies();
            for (List<Triple<DataverseName, String, String>> dependencyList : dependencies) {
                for (Triple<DataverseName, String, String> dependency : dependencyList) {
                    if (dependency.first.equals(dvId)) {
                        throw new CompilationException(
                                "Cannot drop dataverse " + dvId + ". " + channel.getChannelId() + " depends on it!");
                    }
                }
            }
        }
        List<Procedure> procedures = BADLangExtension.getAllProcedures(mdTxnCtx);
        for (Procedure procedure : procedures) {
            if (procedure.getEntityId().getDataverseName().equals(dvId)) {
                continue;
            }
            List<List<Triple<DataverseName, String, String>>> dependencies = procedure.getDependencies();
            for (List<Triple<DataverseName, String, String>> dependencyList : dependencies) {
                for (Triple<DataverseName, String, String> dependency : dependencyList) {
                    if (dependency.first.equals(dvId)) {
                        throw new CompilationException(
                                "Cannot drop dataverse " + dvId + ". " + procedure.getEntityId() + " depends on it!");
                    }
                }
            }
        }
        for (Channel channel : channels) {
            if (!channel.getChannelId().getDataverseName().equals(dvId)) {
                continue;
            }
            tempMdProvider.getLocks().reset();
            ChannelDropStatement drop =
                    new ChannelDropStatement(dvId, new Identifier(channel.getChannelId().getEntityName()), false);
            drop.handle(hcc, this, requestParameters, tempMdProvider, 0);
        }
        for (Procedure procedure : procedures) {
            if (!procedure.getEntityId().getDataverseName().equals(dvId)) {
                continue;
            }
            tempMdProvider.getLocks().reset();
            ProcedureDropStatement drop = new ProcedureDropStatement(
                    new FunctionSignature(dvId, procedure.getEntityId().getEntityName(), procedure.getArity()), false);
            drop.handle(hcc, this, requestParameters, tempMdProvider, 0);
        }
        List<Broker> brokers = BADLangExtension.getBrokers(mdTxnCtx, dvId);
        for (Broker broker : brokers) {
            tempMdProvider.getLocks().reset();
            BrokerDropStatement drop = new BrokerDropStatement(dvId, new Identifier(broker.getBrokerName()), false);
            drop.handle(hcc, this, requestParameters, tempMdProvider, 0);
        }
        MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
        super.handleDataverseDropStatement(metadataProvider, stmt, hcc, requestParameters);
    }