diff --git a/dbms/include/DB/Interpreters/Limits.h b/dbms/include/DB/Interpreters/Limits.h index e893a2f95f2..03b71be6eb2 100644 --- a/dbms/include/DB/Interpreters/Limits.h +++ b/dbms/include/DB/Interpreters/Limits.h @@ -21,7 +21,7 @@ struct Limits * По-умолчанию: всё не ограничено, кроме довольно слабых ограничений на глубину рекурсии и размер выражений. */ -#define APPLY_FOR_SETTINGS(M) \ +#define APPLY_FOR_LIMITS(M) \ /** Ограничения на чтение из самых "глубоких" источников. \ * То есть, только в самом глубоком подзапросе. \ * При чтении с удалённого сервера, проверяется только на удалённом сервере. \ @@ -77,7 +77,7 @@ struct Limits #define DECLARE(TYPE, NAME, DEFAULT) \ TYPE NAME {DEFAULT}; - APPLY_FOR_SETTINGS(DECLARE) + APPLY_FOR_LIMITS(DECLARE) #undef DECLARE @@ -88,7 +88,7 @@ struct Limits else if (name == #NAME) NAME.set(value); if (false) {} - APPLY_FOR_SETTINGS(TRY_SET) + APPLY_FOR_LIMITS(TRY_SET) else return false; @@ -104,7 +104,7 @@ struct Limits else if (name == #NAME) NAME.set(buf); if (false) {} - APPLY_FOR_SETTINGS(TRY_SET) + APPLY_FOR_LIMITS(TRY_SET) else return false; @@ -121,7 +121,7 @@ struct Limits else if (name == #NAME) NAME.set(value); if (false) {} - APPLY_FOR_SETTINGS(TRY_SET) + APPLY_FOR_LIMITS(TRY_SET) else return false; @@ -143,12 +143,10 @@ private: NAME.write(buf); \ } - APPLY_FOR_SETTINGS(WRITE) + APPLY_FOR_LIMITS(WRITE) #undef WRITE } - -#undef APPLY_FOR_SETTINGS }; diff --git a/dbms/src/Client/Client.cpp b/dbms/src/Client/Client.cpp index adcfb7c0d6f..c85fd143248 100644 --- a/dbms/src/Client/Client.cpp +++ b/dbms/src/Client/Client.cpp @@ -860,6 +860,7 @@ public: stopOptionsProcessing(); #define DECLARE_SETTING(TYPE, NAME, DEFAULT) (#NAME, boost::program_options::value (), "Settings.h") +#define DECLARE_LIMIT(TYPE, NAME, DEFAULT) (#NAME, boost::program_options::value (), "Limits.h") /// Перечисляем основные опции командной строки относящиеся к функциональности клиента, /// а так же все параметры из Settings @@ -876,11 +877,13 @@ public: ("multiline,m", "multiline") ("multiquery,n", "multiquery") APPLY_FOR_SETTINGS(DECLARE_SETTING) + APPLY_FOR_LIMITS(DECLARE_LIMIT) ; #undef DECLARE_SETTING +#undef DECLARE_LIMIT /// Перечисляем опции командной строки относящиеся к внешним таблицам - boost::program_options::options_description external_description("Main options"); + boost::program_options::options_description external_description("External tables options"); external_description.add_options() ("file", boost::program_options::value (), "data file or - for stdin") ("name", boost::program_options::value ()->default_value("_data"), "name of the table") @@ -896,7 +899,6 @@ public: if (options.count("help")) { std::cout << main_description << "\n"; - std::cout << "External tables "; std::cout << external_description << "\n"; exit(0); } @@ -947,10 +949,15 @@ public: #define EXTRACT_SETTING(TYPE, NAME, DEFAULT) \ if (options.count(#NAME)) \ settings.set(#NAME, options[#NAME].as()); - APPLY_FOR_SETTINGS(EXTRACT_SETTING) #undef EXTRACT_SETTING +#define EXTRACT_LIMIT(TYPE, NAME, DEFAULT) \ + if (options.count(#NAME)) \ + settings.limits.trySet(#NAME, options[#NAME].as()); + APPLY_FOR_LIMITS(EXTRACT_LIMIT) +#undef EXTRACT_LIMIT + /// Сохраняем полученные данные во внутренний конфиг if (options.count("config-file")) config().setString("config-file", options["config-file"].as());