25#ifndef MYSQL_HARNESS_CONFIG_PARSER_INCLUDED
26#define MYSQL_HARNESS_CONFIG_PARSER_INCLUDED
37#include "harness_export.h"
145 ConfigSection(
const std::string &name_arg,
const std::string &key_arg,
146 const std::shared_ptr<const ConfigSection> &defaults);
149 const std::shared_ptr<const ConfigSection> &defaults);
180 std::string
get(
const std::string &option)
const;
181 void set(
const std::string &option,
182 const std::string &value);
183 void add(
const std::string &option,
const std::string &value);
184 bool has(
const std::string &option)
const;
202 return OptionRange(options_.begin(), options_.end());
212 std::string get_section_name(
const std::string &option)
const;
217 std::string get_section_name()
const;
221 return def == defaults_.
get();
230 std::string do_replace(
const std::string &value,
int depth = 0)
const;
232 const int kMaxInterpolationDepth = 10;
234 std::pair<OptionMap::const_iterator, bool> do_locate(
235 const std::string &option)
const noexcept;
259 std::map<std::string, std::string>>;
264 static constexpr unsigned int allow_keys = 1U;
271 static constexpr const char *DEFAULT_PATTERN =
"*.cfg";
291 template <
class AssocT>
295 for (
auto item : parameters)
296 defaults_->set(item.first, item.second);
315 template <
class AssocT,
class SeqT>
316 explicit Config(
const AssocT ¶meters,
const SeqT &reserved,
320 for (
auto word : reserved) reserved_.push_back(word);
327 template <
class SeqT>
329 reserved_.assign(reserved.begin(), reserved.end());
362 void read(std::istream &input);
372 void read(
const Path &
path,
const std::string &pattern);
398 bool remove(
const SectionKey §ion_key)
noexcept;
405 bool remove(
const std::string §ion,
406 const std::string &
key = std::string()) noexcept;
431 ConstSectionList
get(const
std::
string §ion) const;
434 SectionList
get(const
std::
string §ion);
459 const
std::
string &
key) const;
473 bool has(const
std::
string §ion,
474 const
std::
string &
key =
std::
string()) const;
479 bool has_any(const
std::
string §ion) const;
483 std::
string get_default(const
std::
string &option) const;
484 bool has_default(const
std::
string &option) const;
485 void set_default(const
std::
string &option, const
std::
string &value);
490 decltype(section_names())
result;
491 for (
auto §ion : sections_)
result.push_back(section.first);
498 ConstSectionList sections()
const;
500 bool error_on_unsupported_option{
false};
520 virtual void do_read_file(
const Path &
path);
531 virtual void do_read_stream(std::istream &input);
533 void apply_overwrites();
A helper class for handling file paths.
Definition: path.h:37
Configuration section.
Definition: config_parser.h:140
OptionRange get_options() const
Range for options in section.
Definition: config_parser.h:201
const std::shared_ptr< const ConfigSection > defaults_
Definition: config_parser.h:237
OptionMap options_
Definition: config_parser.h:238
std::string get(const std::string &option) const
Definition: config_parser.cc:157
ConfigSection & operator=(const ConfigSection &)=delete
const std::string key
Definition: config_parser.h:227
bool assert_default(const ConfigSection *def) const
Definition: config_parser.h:220
ConfigSection(const ConfigSection &)=default
std::map< std::string, std::string > OptionMap
Definition: config_parser.h:142
const std::string name
Definition: config_parser.h:226
Configuration.
Definition: config_parser.h:252
std::pair< std::string, std::string > SectionKey
Definition: config_parser.h:254
Config(const AssocT ¶meters, unsigned int flags=0U, const ConfigOverwrites &config_overwrites={})
Construct a configuration.
Definition: config_parser.h:292
std::list< const ConfigSection * > ConstSectionList
Definition: config_parser.h:257
std::map< std::pair< std::string, std::string >, std::map< std::string, std::string > > ConfigOverwrites
Definition: config_parser.h:259
Config(const AssocT ¶meters, const SeqT &reserved, unsigned int flags=0U, const ConfigOverwrites &config_overwrites={})
Construct a configuration.
Definition: config_parser.h:316
std::vector< std::string > ReservedList
Definition: config_parser.h:504
Config & operator=(const Config &)=default
std::list< ConfigSection * > SectionList
Definition: config_parser.h:256
std::map< SectionKey, ConfigSection > SectionMap
Definition: config_parser.h:503
std::shared_ptr< ConfigSection > defaults_
Definition: config_parser.h:537
ConfigSection::OptionMap OptionMap
Definition: config_parser.h:255
void set_reserved(const SeqT &reserved)
Definition: config_parser.h:328
SectionMap sections_
Definition: config_parser.h:535
unsigned int flags_
Definition: config_parser.h:538
Config(const Config &)=default
ConfigOverwrites config_overwrites_
Definition: config_parser.h:539
virtual ~Config()=default
ReservedList reserved_
Definition: config_parser.h:536
Class representing a path in a file system.
Definition: filesystem.h:62
Convenience class for handling iterator range.
Definition: config_parser.h:52
bool empty() const
Check if range is empty.
Definition: config_parser.h:70
typename std::iterator_traits< Iter >::difference_type difference_type
Definition: config_parser.h:58
Iter end_
Definition: config_parser.h:83
difference_type size_type
Definition: config_parser.h:59
Iter end() const
Get iterator to end of range.
Definition: config_parser.h:67
Iter begin_
Definition: config_parser.h:82
size_type size() const
Get size of the range, that is, number of elements in the range.
Definition: config_parser.h:79
iterator const_iterator
Definition: config_parser.h:57
Iter iterator
Definition: config_parser.h:56
typename Iter::value_type value_type
Definition: config_parser.h:54
Range(Iter start, Iter finish)
Definition: config_parser.h:61
typename Iter::reference reference
Definition: config_parser.h:55
Iter begin() const
Get iterator to beginning of range.
Definition: config_parser.h:64
Exception thrown for option value problems.
Definition: config_parser.h:126
bad_option_value(const std::string &msg)
Definition: config_parser.h:128
Exception thrown for option problems.
Definition: config_parser.h:115
bad_option(const std::string &msg)
Definition: config_parser.h:117
Exception thrown for section problems.
Definition: config_parser.h:104
bad_section(const std::string &msg)
Definition: config_parser.h:106
Exception thrown for syntax errors.
Definition: config_parser.h:93
syntax_error(const std::string &msg)
Definition: config_parser.h:95
static int flags[50]
Definition: hp_test1.cc:39
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:176
static uint update
Definition: myisamlog.cc:90
static char * path
Definition: mysqldump.cc:133
uint16_t value_type
Definition: vt100.h:183
bool distance(const dd::Spatial_reference_system *srs, const Geometry *g1, const Geometry *g2, double *distance, bool *is_null) noexcept
Computes the distance between two geometries.
Definition: distance.cc:39
bool HARNESS_EXPORT is_valid_conf_ident_char(const char ch)
Returns true if a character given as a parameter is valid for config identifier (section,...
Definition: config_parser.cc:56
static mysql_service_status_t get(reference_caching_cache cache, unsigned service_name_index, const my_h_service **refs) noexcept
Definition: component.cc:113
static mysql_service_status_t remove(reference_caching_channel channel, const char *implementation_name) noexcept
Definition: component.cc:144
static mysql_service_status_t clear(reference_caching_channel channel) noexcept
Definition: component.cc:153
Definition: varlen_sort.h:183
bool is_reserved(space_id_t space_id)
Check if the space_id is an undo space ID in the reserved range.
Definition: trx0purge.h:166
std::set< Key, Compare, ut::allocator< Key > > set
Specialization of set which uses ut_allocator.
Definition: ut0new.h:2880
std::list< T, ut::allocator< T > > list
Specialization of list which uses ut_allocator.
Definition: ut0new.h:2876
struct result result
Definition: result.h:33
required string key
Definition: replication_asynchronous_connection_failover.proto:59
repeated Source source
Definition: replication_asynchronous_connection_failover.proto:41