ClickHouse
30 строк · 992.0 Байт
1#include <Processors/Port.h>
2#include <Processors/IProcessor.h>
3
4namespace DB
5{
6namespace ErrorCodes
7{
8extern const int LOGICAL_ERROR;
9}
10
11void connect(OutputPort & output, InputPort & input, bool reconnect)
12{
13if (!reconnect && input.state)
14throw Exception(ErrorCodes::LOGICAL_ERROR, "Port is already connected, (header: [{}])", input.header.dumpStructure());
15
16if (!reconnect && output.state)
17throw Exception(ErrorCodes::LOGICAL_ERROR, "Port is already connected, (header: [{}])", output.header.dumpStructure());
18
19auto out_name = output.processor ? output.getProcessor().getName() : "null";
20auto in_name = input.processor ? input.getProcessor().getName() : "null";
21
22assertCompatibleHeader(output.getHeader(), input.getHeader(), fmt::format("function connect between {} and {}", out_name, in_name));
23
24input.output_port = &output;
25output.input_port = &input;
26input.state = std::make_shared<Port::State>();
27output.state = input.state;
28}
29
30}
31