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