**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.
if (context != query_context)
                throw Exception("Unexpected context in external tables initializer", ErrorCodes::LOGICAL_ERROR);
            createExternalTables();
        });
        
        query_context->setInputInitializer([this] (ContextPtr context, const StoragePtr & input_storage)
        {
            if (context != query_context)
                throw Exception("Unexpected context in Input initializer", ErrorCodes::LOGICAL_ERROR);
            input_function_is_used = true;
            initializeBlockInputStream(input_storage->getInMemoryMetadataPtr()->getSampleBlock());
        });
        query_context->setInputBlocksReaderCallback([this](ContextPtr context) -> Block
        {
            if (context != query_context)
                throw Exception("Unexpected context in InputBlocksReader", ErrorCodes::LOGICAL_ERROR);
            Block block;
            while (!block && pipeline_executor->pull(block));
            return block;
        });
        
        const auto * query_end = end;
        if (insert_query && insert_query->data)
        {
            query_end = insert_query->data;
        }
        String query(begin, query_end);
        io = ::DB::executeQuery(true, query, query_context);
    }
    void Call::processInput()