**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.
{
    public:
        explicit BoolState(bool initial_value) : value(initial_value) {}
        bool get() const
        {
            std::lock_guard lock{mutex};
            return value;
        }
        void set(bool new_value)
        {
            std::lock_guard lock{mutex};
            if (value == new_value)
                return;
            value = new_value;
            changed.notify_all();
        }
        void wait(bool wanted_value) const
        {
            std::unique_lock lock{mutex};
            changed.wait(lock, [this, wanted_value]() { return value == wanted_value; });
        }
    private:
        bool value;
        mutable std::mutex mutex;
        mutable std::condition_variable changed;
    };
    
    class Call