**Use case**

ClickHouse already throws exception if the data for INSERT is empty:

```
Code: 108. DB::Exception: No data to insert
```

Let's introduce a setting, enabled by default, to control this behavior.
The user will be able to disable it to allow empty INSERTs.

This is useful in some batch scripts.
if (const auto * column = elem->as<ASTColumnDeclaration>())
                new_words.push_back(column->name
        }
    }
    suggest->addWords(std::move(new_words)
}
bool ClientBase::isSyncInsertWithData(const ASTInsertQuery & insert_query, const ContextPtr & context)
{
    if (!insert_query.data)
        return false;
    auto settings = context->getSettings(
    if (insert_query.settings_ast)
        settings.applyChanges(insert_query.settings_ast->as<ASTSetQuery>()->changes
    return !settings.async_insert;
}
void ClientBase::processTextAsSingleQuery(const String & full_query)
{
    /// Some parts of a query (result output and formatting) are executed
    /// client-side. Thus we need to parse the query.
    const char * begin = full_query.data(
    auto parsed_query = parseQuery(begin, begin + full_query.size(), false
    if (!parsed_query)
        return;
    String query_to_execute;
    /// Query will be parsed before checking the result because error does not
    /// always means a problem, i.e. if table already exists, and it is no a
    /// huge problem if suggestion will be added even on error, since this is
    /// just suggestion.
    if (auto * y->as<ASTCreateQuery>())
    {