**Use case**

`INSERT INTO FUNCTION null() SELECT * FROM ...`

```
Table function 'null' requires 'structure'.
```
{
    const auto * function = ast_function->as<ASTFunction>();
    if (!function || !function->arguments)
        throw Exception("Table function '" + getName() + "' requires 'structure'.", ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
    const auto & arguments = function->arguments->children;
    if (arguments.size() != 1)
        throw Exception("Table function '" + getName() + "' requires 'structure'.", ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
    structure = evaluateConstantExpressionOrIdentifierAsLiteral(arguments[0], context)->as<ASTLiteral>()->value.safeGet<String>();
}
ColumnsDescription TableFunctionNull::getActualTableStructure(ContextPtr context) const
{
    return parseColumnsListFromString(structure, context);
}
StoragePtr TableFunctionNull::executeImpl(const ASTPtr & , ContextPtr context, const std::string & table_name, ColumnsDescription ) const
{
    auto columns = getActualTableStructure(context);
    auto res = StorageNull::create(StorageID(getDatabaseName(), table_name), columns, ConstraintsDescription(), String{});
    res->startup();
    return res;
}
void registerTableFunctionNull(TableFunctionFactory & factory)
{
    factory.registerFunction<TableFunctionNull>();
}
}