**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.
void addExtremesToResult(const Block & extremes);
        void addProfileInfoToResult(const ProfileInfo & info);
        void addLogsToResult();
        void sendResult();
        void throwIfFailedToSendResult();
        void sendException(const Exception & exception);
        const CallType call_type;
        std::unique_ptr<BaseResponder> responder;
        IServer & iserver;
        Poco::Logger * log = nullptr;
        std::optional<Session> session;
        ContextMutablePtr query_context;
        std::optional<CurrentThread::QueryScope> query_scope;
        String query_text;
        ASTPtr ast;
        ASTInsertQuery * insert_query = nullptr;
        String input_format;
        String input_data_delimiter;
        CompressionMethod input_compression_method = CompressionMethod::None;
        PODArray<char> output;
        String output_format;
        bool send_output_columns_names_and_types = false;
        CompressionMethod output_compression_method = CompressionMethod::None;
        int output_compression_level = 0;
        uint64_t interactive_delay = 100000;
        bool send_exception_with_stacktrace = true;
        bool input_function_is_used = false;
        BlockIO io;
        Progress progress;
        InternalTextLogsQueuePtr logs_queue;