{
        size_t rows = src.size();
        ColumnFixedString::Chars & data_to = dst.getChars();
        data_to.resize(n * rows);
        memcpy(data_to.data(), src.getRawData().data, data_to.size());
    }
    bool useDefaultImplementationForConstants() const override { return true; }
    ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t ) const override
    {
        const IColumn & src = *arguments[0].column;
        MutableColumnPtr dst = result_type->createColumn();
        if (ColumnFixedString * dst_concrete = typeid_cast<ColumnFixedString *>(dst.get()))
        {
            if (src.isFixedAndContiguous() && src.sizeOfValueIfFixed() == dst_concrete->getN())
                executeContiguousToFixedString(src, *dst_concrete, dst_concrete->getN());
            else
                executeToFixedString(src, *dst_concrete, dst_concrete->getN());
        }
        else
            throw Exception("Illegal column " + src.getName() + " of argument of function " + getName(), ErrorCodes::ILLEGAL_COLUMN);
        return dst;
    }
};
}
void registerFunctionReinterpretAsFixedString(FunctionFactory & factory)
{
    factory.registerFunction<FunctionReinterpretAsFixedString>();
}
}