**Use case**

Test one ClickHouse SQL function with libFuzzer in a predefined SQL query.
Example:

```
clickhouse-local --query 'SELECT extractTextFromHTML(getFuzzerData())'
```

**Describe the solution you'd like**

If `clickhouse-local` is compiled with libFuzzer, the fuzzer will execute a query in infinite loop, where the `getFuzzerData` function will return different strings in every iteration, using coverage guided fuzzing.

**Additional context**

What's the reason to have this kind of fuzzing?

Although we can provide very high level entry point for libFuzzer, for example, to generate SQL queries as an input. But that fuzzing method is too broad. By using the method described in this task, we can make fuzzing more targeted and ensure fuzzing for specific functions.

Existing functional tests can be used to guide fuzzing (by replacing arbitrary expressions with `getFuzzerData()`).
std::cerr << std::endl;
    }
    connect();
    if (is_interactive && !delayed_interactive)
    {
        runInteractive();
    }
    else
    {
        runNonInteractive();
        if (delayed_interactive)
            runInteractive();
    }
    cleanup();
    return Application::EXIT_OK;
}
catch (const DB::Exception & e)
{
    cleanup();
    bool need_print_stack_trace = config().getBool("stacktrace", false);
    std::cerr << getExceptionMessage(e, need_print_stack_trace, true) << std::endl;
    return e.code() ? e.code() : -1;
}
catch (...)
{
    cleanup();
    std::cerr << getCurrentExceptionMessage(false) << std::endl;
    return getCurrentExceptionCode();
}
void LocalServer::processConfig()