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