**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 traceparent = responder->getClientHeader("traceparent");
        if (traceparent)
        {
            String error;
            if (!client_info.client_trace_context.parseTraceparentHeader(traceparent.value(), error))
            {
                throw Exception(ErrorCodes::BAD_REQUEST_PARAMETER,
                    "Failed to parse OpenTelemetry traceparent header '{}': {}",
                    traceparent.value(), error);
            }
            auto tracestate = responder->getClientHeader("tracestate");
            client_info.client_trace_context.tracestate = tracestate.value_or("");
        }
        
        
        if (!query_info.session_id().empty())
        {
            session->makeSessionContext(
                query_info.session_id(), getSessionTimeout(query_info, iserver.config()), query_info.session_check());
        }
        query_context = session->makeQueryContext(std::move(client_info));
        
        SettingsChanges settings_changes;
        for (const auto & [key, value] : query_info.settings())
        {
            settings_changes.push_back({key, value});
        }
        query_context->checkSettingsConstraints(settings_changes);
        query_context->applySettingsChanges(settings_changes);