@Override
public Prel visitExchange(ExchangePrel prel, Void value) throws RuntimeException {
Prel child = ((Prel)prel.getInput()).accept(this, null);
if (!(prel instanceof HashToRandomExchangePrel)) {
return (Prel)prel.copy(prel.getTraitSet(), Collections.singletonList(((RelNode)child)));
}
Prel newPrel = child;
if (isMuxEnabled) {
newPrel = new UnorderedMuxExchangePrel(child.getCluster(), child.getTraitSet(), child);
}
newPrel = new HashToRandomExchangePrel(prel.getCluster(),
prel.getTraitSet(), newPrel, ((HashToRandomExchangePrel) prel).getFields());
if (isDeMuxEnabled) {
HashToRandomExchangePrel hashExchangePrel = (HashToRandomExchangePrel) newPrel;
newPrel = new UnorderedDeMuxExchangePrel(prel.getCluster(), prel.getTraitSet(), hashExchangePrel,
hashExchangePrel.getFields());
}
return newPrel;
}