| 49 | ColumnNumbers getArgumentsThatAreAlwaysConstant() const override { return {0}; } |
| 50 | |
| 51 | ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override |
| 52 | { |
| 53 | auto col_str = ColumnString::create(); |
| 54 | ColumnString::Chars & vec = col_str->getChars(); |
| 55 | WriteBufferFromVector buffer(vec); |
| 56 | ColumnString::Offsets & offsets = col_str->getOffsets(); |
| 57 | offsets.resize(input_rows_count); |
| 58 | Block arg_columns; |
| 59 | for (auto i = 1u; i < arguments.size(); ++i) |
| 60 | arg_columns.insert(arguments[i]); |
| 61 | materializeBlockInplace(arg_columns); |
| 62 | auto out = FormatFactory::instance().getOutputFormat(format_name, buffer, arg_columns, context, [&](const Columns &, size_t row) |
| 63 | { |
| 64 | if constexpr (no_newline) |
| 65 | { |
| 66 | // replace '\n' with '\0' |
| 67 | if (buffer.position() != buffer.buffer().begin() && buffer.position()[-1] == '\n') |
| 68 | buffer.position()[-1] = '\0'; |
| 69 | } |
| 70 | else |
| 71 | writeChar('\0', buffer); |
| 72 | offsets[row] = buffer.count(); |
| 73 | }); |
| 74 | out->write(arg_columns); |
| 75 | return col_str; |
| 76 | } |
| 77 | |
| 78 | private: |
| 79 | String format_name; |
nothing calls this directly
no test coverage detected