in asterix-bad/src/main/java/org/apache/asterix/bad/lang/statement/ChannelUnsubscribeStatement.java [108:154]
public void handle(IHyracksClientConnection hcc, IStatementExecutor statementExecutor,
IRequestParameters requestParameters, MetadataProvider metadataProvider, int resultSetId)
throws HyracksDataException, AlgebricksException {
DataverseName dataverse = statementExecutor.getActiveDataverseName(dataverseName);
MetadataTransactionContext mdTxnCtx = null;
try {
mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
Channel channel = BADLangExtension.getChannel(mdTxnCtx, dataverse, channelName.getValue());
if (channel == null) {
throw new AsterixException("There is no channel with this name " + channelName + ".");
}
String subscriptionsDatasetName = channel.getSubscriptionsDataset();
//Need a condition to say subscription-id = sid
OperatorExpr condition = new OperatorExpr();
FieldAccessor fa = new FieldAccessor(vars, new Identifier(BADConstants.SubscriptionId));
condition.addOperand(fa);
condition.setCurrentop(true);
condition.addOperator("=");
List<Expression> UUIDList = new ArrayList<>();
UUIDList.add(new LiteralExpr(new StringLiteral(subscriptionId)));
FunctionIdentifier function = BuiltinFunctions.UUID_CONSTRUCTOR;
FunctionSignature UUIDfunc = new FunctionSignature(function);
CallExpr UUIDCall = new CallExpr(UUIDfunc, UUIDList);
condition.addOperand(UUIDCall);
DeleteStatement delete =
new DeleteStatement(vars, dataverse, subscriptionsDatasetName, condition, varCounter);
delete.accept(SqlppDeleteRewriteVisitor.INSTANCE, metadataProvider);
MetadataProvider tempMdProvider = MetadataProvider.create(metadataProvider.getApplicationContext(),
metadataProvider.getDefaultDataverse());
tempMdProvider.getConfig().putAll(metadataProvider.getConfig());
((QueryTranslator) statementExecutor).handleDeleteStatement(tempMdProvider, delete, hcc, false, null, null);
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
} catch (Exception e) {
QueryTranslator.abort(e, e, mdTxnCtx);
throw HyracksDataException.create(e);
} finally {
metadataProvider.getLocks().unlock();
}
}