
**Describe the bug**
See the code in `Pipe.cpp`. The logic of `if` not consistent with the logs below.  Can `checkSource` be passed when `source.getOutputs().size() == 2` ? 
```
static void checkSource(const IProcessor & source)
{
    ......
    if (source.getOutputs().size() > 1)
        throw Exception("Source for pipe should have single or two outputs, but " + source.getName() + " has " +
                        toString(source.getOutputs().size()) + " outputs.", ErrorCodes::LOGICAL_ERROR);
}
``` 



{
    Pipes res;
    res.reserve(pipes.size());
    for (auto & pipe : pipes)
    {
        if (!pipe.empty())
            res.emplace_back(std::move(pipe));
    }
    return res;
}
Pipe Pipe::unitePipes(Pipes pipes)
{
    return Pipe::unitePipes(std::move(pipes), nullptr);
}
Pipe Pipe::unitePipes(Pipes pipes, Processors * collected_processors)
{
    Pipe res;
    for (auto & pipe : pipes)
        res.holder = std::move(pipe.holder); 
    pipes = removeEmptyPipes(std::move(pipes));
    if (pipes.empty())
        return res;
    if (pipes.size() == 1)