MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / executeImpl

Method executeImpl

src/Functions/formatRow.cpp:60–105  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

58 ColumnNumbers getArgumentsThatAreAlwaysConstant() const override { return {0}; }
59
60 ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override
61 {
62 auto col_str = ColumnString::create();
63 ColumnString::Chars & vec = col_str->getChars();
64 WriteBufferFromVector<ColumnString::Chars> buffer(vec);
65 ColumnString::Offsets & offsets = col_str->getOffsets();
66 offsets.resize(input_rows_count);
67
68 Block arg_columns;
69
70 size_t arguments_size = arguments.size();
71 for (size_t i = 1; i < arguments_size; ++i)
72 {
73 auto argument_column = arguments[i];
74 argument_column.name = arguments_column_names[i];
75 arg_columns.insert(std::move(argument_column));
76 }
77
78 materializeBlockInplace(arg_columns);
79 auto out = FormatFactory::instance().getOutputFormat(format_name, buffer, arg_columns, context, format_settings);
80
81 /// This function make sense only for row output formats.
82 auto * row_output_format = dynamic_cast<IRowOutputFormat *>(out.get());
83 if (!row_output_format)
84 throw Exception(ErrorCodes::BAD_ARGUMENTS,
85 "Cannot turn rows into a {} format strings. {} function supports only row output formats",
86 format_name, getName());
87
88 auto columns = arg_columns.getColumns();
89 for (size_t i = 0; i != input_rows_count; ++i)
90 {
91 row_output_format->writePrefixIfNeeded();
92 row_output_format->writeRow(columns, i);
93 row_output_format->finalize();
94 if (no_newline)
95 {
96 if (buffer.position() != buffer.buffer().begin() && buffer.position()[-1] == '\n')
97 --buffer.position();
98 }
99
100 offsets[i] = buffer.count();
101 row_output_format->resetFormatter();
102 }
103
104 return col_str;
105 }
106
107private:
108 const char * function_name;

Callers

nothing calls this directly

Calls 15

materializeBlockInplaceFunction · 0.85
writePrefixIfNeededMethod · 0.80
resetFormatterMethod · 0.80
createFunction · 0.70
getNameFunction · 0.70
ExceptionClass · 0.50
getCharsMethod · 0.45
getOffsetsMethod · 0.45
resizeMethod · 0.45
sizeMethod · 0.45
insertMethod · 0.45
getOutputFormatMethod · 0.45

Tested by

no test coverage detected