mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 00:30:49 +00:00
att. 2
This commit is contained in:
parent
402218504a
commit
2740320706
@ -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);
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user