#include #include #include #include namespace DB { ColumnPtr castColumn(const ColumnWithTypeAndName & arg, const DataTypePtr & type, const Context & context) { Block temporary_block { arg, { DataTypeString().createConstColumn(arg.column->size(), type->getName()), std::make_shared(), "" }, { nullptr, type, "" } }; FunctionPtr func_cast = FunctionFactory::instance().get("CAST", context); { DataTypePtr unused_return_type; ColumnsWithTypeAndName arguments{ temporary_block.getByPosition(0), temporary_block.getByPosition(1) }; std::vector unused_prerequisites; /// Prepares function to execution. TODO It is not obvious. func_cast->getReturnTypeAndPrerequisites(arguments, unused_return_type, unused_prerequisites); } func_cast->execute(temporary_block, {0, 1}, 2); return temporary_block.getByPosition(2).column; } }