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.
|
/// Temporarily apply query settings to context.
|
||||||
std::optional<Settings> old_settings;
|
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({
|
SCOPE_EXIT_SAFE({
|
||||||
if (old_settings)
|
if (old_settings)
|
||||||
client_context->setSettings(*old_settings);
|
client_context = old_client_context;
|
||||||
});
|
});
|
||||||
|
|
||||||
auto apply_query_settings = [&](const IAST & settings_ast)
|
auto apply_query_settings = [&](const IAST & settings_ast)
|
||||||
{
|
{
|
||||||
if (!old_settings)
|
if (!old_settings)
|
||||||
|
{
|
||||||
old_settings.emplace(client_context->getSettingsRef());
|
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->applySettingsChanges(settings_ast.as<ASTSetQuery>()->changes);
|
||||||
client_context->resetSettingsToDefaultValue(settings_ast.as<ASTSetQuery>()->default_settings);
|
client_context->resetSettingsToDefaultValue(settings_ast.as<ASTSetQuery>()->default_settings);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user