**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.
{
        Packet packet = connection->receivePacket(
        switch (packet.type)
        {
            case Protocol::Server::EndOfStream:
                onEndOfStream(
                return true;
            case Protocol::Server::Exception:
                onReceiveExceptionFromServer(std::move(packet.exception)
                return false;
            case Protocol::Server::Log:
                onLogData(packet.block
                break;
            case Protocol::Server::Progress:
                onProgress(packet.progress
                break;
            default:
                throw NetException(
                    "Unexpected packet from server (expected Exception, EndOfStream or Log, got "
                        + String(Protocol::Server::toString(packet.type)) + ")",
                    ErrorCodes::UNEXPECTED_PACKET_FROM_SERVER
        }
    }
}
void ClientBase::processParsedSingleQuery(const String & full_query, const String & query_to_execute,
        ASTPtr parsed_query, std::optional<bool> echo_query_, bool report_error)
{
    resetOutput(
    have_error = false;
    cancelled = false;