

such as
```
create view view1 as 
with t as (select number n from numbers(3))
select n from t
```
[[maybe_unused]] bool done = doCreateTable(create, properties);
        assert(done);
        ast_drop->table = create.table;
        ast_drop->database = create.database;
        ast_drop->kind = ASTDropQuery::Drop;
        created = true;
        if (!create.replace_table)
            return fillTableIfNeeded(create);
        auto ast_rename = std::make_shared<ASTRenameQuery>();
        ASTRenameQuery::Element elem
        {
            ASTRenameQuery::Table{create.database, create.table},
            ASTRenameQuery::Table{create.database, table_to_replace_name}
        };
        ast_rename->elements.push_back(std::move(elem));
        ast_rename->exchange = true;
        InterpreterRenameQuery(ast_rename, getContext()).execute();
        replaced = true;
        InterpreterDropQuery(ast_drop, getContext()).execute();
        create.table = table_to_replace_name;
        return fillTableIfNeeded(create);
    }
    catch (...)
    {
        if (created && create.replace_table && !replaced)
            InterpreterDropQuery(ast_drop, getContext()).execute();
        throw;
    }
}
BlockIO InterpreterCreateQuery::fillTableIfNeeded(const ASTCreateQuery & create)