**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.
auto executor = std::make_shared<PullingAsyncPipelineExecutor>(io.pipeline);
            auto check_for_cancel = [&]
            {
                if (isQueryCancelled())
                {
                    executor->cancel();
                    return false;
                }
                return true;
            };
            addOutputFormatToResult();
            addOutputColumnsNamesAndTypesToResult(header);
            Block block;
            while (check_for_cancel())
            {
                if (!executor->pull(block, interactive_delay / 1000))
                    break;
                throwIfFailedToSendResult();
                if (!check_for_cancel())
                    break;
                if (block && !io.null_format)
                    output_format_processor->write(materializeBlock(block));
                if (after_send_progress.elapsedMicroseconds() >= interactive_delay)
                {
                    addProgressToResult();
                    after_send_progress.restart();
                }
                addLogsToResult();
                if (has_output() || result.has_progress() || result.logs_size())
                    sendResult();