**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.
cur_pipeline.addTransform(std::move(sink));
                    cur_pipeline.setSinks([&](const Block & header, Pipe::StreamType)
                    {
                        return std::make_shared<EmptySink>(header);
                    });
                    auto executor = cur_pipeline.execute();
                    executor->execute(1);
                }
            }
            if (!query_info.input_data().empty())
            {
                
                
                break;
            }
            if (!query_info.next_query_info())
                break;
            if (!isInputStreaming(call_type))
                throw Exception("next_query_info is allowed to be set only for streaming input", ErrorCodes::INVALID_GRPC_QUERY_INFO);
            readQueryInfo();
            if (!query_info.query().empty() || !query_info.query_id().empty() || !query_info.settings().empty()
                || !query_info.database().empty() || !query_info.input_data_delimiter().empty()
                || !query_info.output_format().empty() || !query_info.user_name().empty() || !query_info.password().empty()
                || !query_info.quota().empty() || !query_info.session_id().empty())
            {
                throw Exception("Extra query infos can be used only to add more data to input or more external tables. "
                                "Only the following fields can be set: input_data, external_tables, next_query_info, cancel",
                                ErrorCodes::INVALID_GRPC_QUERY_INFO);
            }
            if (isQueryCancelled())