client: all options from Limits.h could be set in client command line [METR-10801]

This commit is contained in:
Sergey Fedorov 2014-04-10 21:06:58 +04:00
parent edb8b71115
commit 39bdcbc819
2 changed files with 16 additions and 11 deletions

View File

@ -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
};

View File

@ -860,6 +860,7 @@ public:
stopOptionsProcessing();
#define DECLARE_SETTING(TYPE, NAME, DEFAULT) (#NAME, boost::program_options::value<std::string> (), "Settings.h")
#define DECLARE_LIMIT(TYPE, NAME, DEFAULT) (#NAME, boost::program_options::value<std::string> (), "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<std::string> (), "data file or - for stdin")
("name", boost::program_options::value<std::string> ()->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<std::string>());
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<std::string>());
APPLY_FOR_LIMITS(EXTRACT_LIMIT)
#undef EXTRACT_LIMIT
/// Сохраняем полученные данные во внутренний конфиг
if (options.count("config-file"))
config().setString("config-file", options["config-file"].as<std::string>());