#include #include namespace DB { namespace ErrorCodes { extern const int LOGICAL_ERROR; } void connect(OutputPort & output, InputPort & input) { if (input.state || output.state) throw Exception("Port is already connected", ErrorCodes::LOGICAL_ERROR); auto out_name = output.getProcessor().getName(); auto in_name = input.getProcessor().getName(); assertBlocksHaveEqualStructure(input.getHeader(), output.getHeader(), " function connect between " + out_name + " and " + in_name); input.output_port = &output; output.input_port = &input; input.state = std::make_shared(); output.state = input.state; } }