**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.
query_context->setCurrentQueryId(query_info.query_id());
        query_scope.emplace(query_context);
        
        const Settings & settings = query_context->getSettingsRef();
        send_exception_with_stacktrace = settings.calculate_text_stack_trace;
        const auto client_logs_level = settings.send_logs_level;
        if (client_logs_level != LogsLevel::none)
        {
            logs_queue = std::make_shared<InternalTextLogsQueue>();
            logs_queue->max_priority = Poco::Logger::parseLevel(client_logs_level.toString());
            CurrentThread::attachInternalTextLogsQueue(logs_queue, client_logs_level);
            CurrentThread::setFatalErrorCallback([this]{ onFatalError(); });
        }
        
        if (!query_info.database().empty())
            query_context->setCurrentDatabase(query_info.database());
        
        if (auto transport_compression = TransportCompression::fromQueryInfo(query_info))
            responder->setTransportCompression(*transport_compression);
        
        interactive_delay = settings.interactive_delay;
        query_context->setProgressCallback([this](const Progress & value) { return progress.incrementPiecewiseAtomically(value); });
        
        query_text = std::move(*(query_info.mutable_query()));
        const char * begin = query_text.data();
        const char * end = begin + query_text.size();
        ParserQuery parser(end, settings.allow_settings_after_format_in_insert);
        ast = parseQuery(parser, begin, end, "", settings.max_query_size, settings.max_parser_depth);
        
        insert_query = ast->as<ASTInsertQuery>();