public void handle()

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