CREATE TABLE ... **EMPTY** AS SELECT

**Use case**

Create a table with the same structure as SELECT query returns but don't fill it.

**Describe alternatives you've considered**

CREATE TABLE ... AS DESCRIBE (SELECT ...)

\- more consistent but also more clunky.
{
    if (!elem)
        return;
    if (prefix.empty())
    {
        elem->formatImpl(s, state, frame);
        return;
    }
    s.ostr << (s.hilite ? hilite_keyword : "") << prefix << (s.hilite ? hilite_none : "");
    s.ostr << ' ';
    elem->formatImpl(s, state, frame);
}
ASTPtr ASTColumns::clone() const
{
    auto res = std::make_shared<ASTColumns>();
    if (columns)
        res->set(res->columns, columns->clone());
    if (indices)
        res->set(res->indices, indices->clone());
    if (constraints)
        res->set(res->constraints, constraints->clone());
    if (projections)
        res->set(res->projections, projections->clone());
    if (primary_key)
        res->set(res->primary_key, primary_key->clone());
    return res;
}
void ASTColumns::formatImpl(const FormatSettings & s, FormatState & state, FormatStateStacked frame) const