mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 08:40:50 +00:00
Add hints for SET query and HTTP request param settings
This commit is contained in:
parent
f9b585fcdf
commit
25f88356e4
@ -15,6 +15,7 @@ namespace ErrorCodes
|
|||||||
extern const int READONLY;
|
extern const int READONLY;
|
||||||
extern const int QUERY_IS_PROHIBITED;
|
extern const int QUERY_IS_PROHIBITED;
|
||||||
extern const int SETTING_CONSTRAINT_VIOLATION;
|
extern const int SETTING_CONSTRAINT_VIOLATION;
|
||||||
|
extern const int UNKNOWN_SETTING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -200,7 +201,23 @@ bool SettingsConstraints::checkImpl(const Settings & current_settings, SettingCh
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (reaction == THROW_ON_VIOLATION)
|
if (reaction == THROW_ON_VIOLATION)
|
||||||
access_control->checkSettingNameIsAllowed(setting_name);
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
access_control->checkSettingNameIsAllowed(setting_name);
|
||||||
|
}
|
||||||
|
catch (Exception & e)
|
||||||
|
{
|
||||||
|
if (e.code() == ErrorCodes::UNKNOWN_SETTING)
|
||||||
|
{
|
||||||
|
if (const auto hints = current_settings.getHints(change.name); !hints.empty())
|
||||||
|
{
|
||||||
|
e.addMessage(fmt::format("Maybe you meant {}", toString(hints)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (!access_control->isSettingNameAllowed(setting_name))
|
else if (!access_control->isSettingNameAllowed(setting_name))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -117,6 +117,16 @@ void Settings::checkNoSettingNamesAtTopLevel(const Poco::Util::AbstractConfigura
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<String> Settings::getAllRegisteredNames() const
|
||||||
|
{
|
||||||
|
std::vector<String> all_settings;
|
||||||
|
for (const auto & setting_field : all())
|
||||||
|
{
|
||||||
|
all_settings.push_back(setting_field.getName());
|
||||||
|
}
|
||||||
|
return all_settings;
|
||||||
|
}
|
||||||
|
|
||||||
IMPLEMENT_SETTINGS_TRAITS(FormatFactorySettingsTraits, FORMAT_FACTORY_SETTINGS)
|
IMPLEMENT_SETTINGS_TRAITS(FormatFactorySettingsTraits, FORMAT_FACTORY_SETTINGS)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <Common/NamePrompter.h>
|
||||||
#include <Core/BaseSettings.h>
|
#include <Core/BaseSettings.h>
|
||||||
#include <Core/SettingsEnums.h>
|
#include <Core/SettingsEnums.h>
|
||||||
#include <Core/Defines.h>
|
#include <Core/Defines.h>
|
||||||
@ -675,7 +676,7 @@ DECLARE_SETTINGS_TRAITS_ALLOW_CUSTOM_SETTINGS(SettingsTraits, LIST_OF_SETTINGS)
|
|||||||
/** Settings of query execution.
|
/** Settings of query execution.
|
||||||
* These settings go to users.xml.
|
* These settings go to users.xml.
|
||||||
*/
|
*/
|
||||||
struct Settings : public BaseSettings<SettingsTraits>
|
struct Settings : public BaseSettings<SettingsTraits>, public IHints<2, Settings>
|
||||||
{
|
{
|
||||||
/// For initialization from empty initializer-list to be "value initialization", not "aggregate initialization" in C++14.
|
/// For initialization from empty initializer-list to be "value initialization", not "aggregate initialization" in C++14.
|
||||||
/// http://en.cppreference.com/w/cpp/language/aggregate_initialization
|
/// http://en.cppreference.com/w/cpp/language/aggregate_initialization
|
||||||
@ -699,6 +700,8 @@ struct Settings : public BaseSettings<SettingsTraits>
|
|||||||
/// Check that there is no user-level settings at the top level in config.
|
/// Check that there is no user-level settings at the top level in config.
|
||||||
/// This is a common source of mistake (user don't know where to write user-level setting).
|
/// This is a common source of mistake (user don't know where to write user-level setting).
|
||||||
static void checkNoSettingNamesAtTopLevel(const Poco::Util::AbstractConfiguration & config, const String & config_path);
|
static void checkNoSettingNamesAtTopLevel(const Poco::Util::AbstractConfiguration & config, const String & config_path);
|
||||||
|
|
||||||
|
std::vector<String> getAllRegisteredNames() const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user