This commit is contained in:
vdimir 2024-08-23 12:27:16 +00:00
parent 402218504a
commit 2740320706
No known key found for this signature in database
GPG Key ID: 6EE4CE2BEDC51862

View File

@ -1894,15 +1894,24 @@ void ClientBase::processParsedSingleQuery(const String & full_query, const Strin
{
/// Temporarily apply query settings to context.
std::optional<Settings> old_settings;
/// Since client_context is a global context,
/// create a copy to avoid data race with another thread (e.g. parallel formatting thread) reading global settings
auto old_client_context = client_context;
SCOPE_EXIT_SAFE({
if (old_settings)
client_context->setSettings(*old_settings);
client_context = old_client_context;
});
auto apply_query_settings = [&](const IAST & settings_ast)
{
if (!old_settings)
{
old_settings.emplace(client_context->getSettingsRef());
client_context = Context::createCopy(client_context);
client_context->setSettings(client_context->getSettingsCopy());
}
client_context->applySettingsChanges(settings_ast.as<ASTSetQuery>()->changes);
client_context->resetSettingsToDefaultValue(settings_ast.as<ASTSetQuery>()->default_settings);
};