in asterix-bad/src/main/java/org/apache/asterix/bad/rules/InsertBrokerNotifierForChannelRule.java [188:205]
private boolean visitGroupBy(ILogicalOperator currOp, ILogicalOperator brokerAssignOp, LogicalVariable endpointVar,
LogicalVariable typeVar) {
// this method makes sure even the broker information is not projected out
boolean containsBroker = false;
if (currOp == brokerAssignOp) {
return true;
} else {
for (Mutable<ILogicalOperator> input : currOp.getInputs()) {
containsBroker = containsBroker || visitGroupBy(input.getValue(), brokerAssignOp, endpointVar, typeVar);
}
}
if (currOp.getOperatorTag() == LogicalOperatorTag.GROUP && containsBroker) {
GroupByOperator groupByOperator = (GroupByOperator) currOp;
groupByOperator.addDecorExpression(null, new VariableReferenceExpression(endpointVar));
groupByOperator.addDecorExpression(null, new VariableReferenceExpression(typeVar));
}
return containsBroker;
}