ConfigInfo.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef ConfigInfo_H
  14. #define ConfigInfo_H
  15. #include <kernel_types.h>
  16. #include <Properties.hpp>
  17. #include <ndb_limits.h>
  18. #include <NdbOut.hpp>
  19. #include "InitConfigFileParser.hpp"
  20. /**
  21.  * A MANDATORY parameters must be specified in the config file
  22.  * An UNDEFINED parameter may or may not be specified in the config file
  23.  */
  24. static const char* MANDATORY = (char*)~(UintPtr)0;// Default value for mandatory params.
  25. static const char* UNDEFINED = 0;                 // Default value for undefined params.
  26. /**
  27.  * @class  ConfigInfo
  28.  * @brief  Metainformation about ALL cluster configuration parameters 
  29.  *
  30.  * Use the getters to find out metainformation about parameters.
  31.  */
  32. class ConfigInfo {
  33. public:
  34.   enum Type        { CI_BOOL, CI_INT, CI_INT64, CI_STRING, CI_SECTION };
  35.   enum Status      { CI_USED,            ///< Active
  36.      CI_DEPRICATED,      ///< Can be, but shouldn't
  37.      CI_NOTIMPLEMENTED,  ///< Is ignored.
  38.      CI_INTERNAL         ///< Not configurable by the user
  39.   };
  40.   /**
  41.    *   Entry for one configuration parameter
  42.    */
  43.   struct ParamInfo {
  44.     Uint32         _paramId;
  45.     const char*    _fname;   
  46.     const char*    _section;
  47.     const char*    _description;
  48.     Status         _status;
  49.     bool           _updateable;    
  50.     Type           _type;          
  51.     const char*    _default;
  52.     const char*    _min;
  53.     const char*    _max;
  54.   };
  55.   struct AliasPair{
  56.     const char * name;
  57.     const char * alias;
  58.   };
  59.   /**
  60.    * Entry for one section rule
  61.    */
  62.   struct SectionRule {
  63.     const char * m_section;
  64.     bool (* m_sectionRule)(struct InitConfigFileParser::Context &, 
  65.    const char * m_ruleData);
  66.     const char * m_ruleData;
  67.   };
  68.   
  69.   /**
  70.    * Entry for config rule
  71.    */
  72.   struct ConfigRuleSection {
  73.     BaseString m_sectionType;
  74.     Properties * m_sectionData;
  75.   };
  76.   struct ConfigRule {
  77.     bool (* m_configRule)(Vector<ConfigRuleSection>&, 
  78.   struct InitConfigFileParser::Context &, 
  79.   const char * m_ruleData);
  80.     const char * m_ruleData;
  81.   };
  82.   
  83.   ConfigInfo();
  84.   /**
  85.    *   Checks if the suggested value is valid for the suggested parameter
  86.    *   (i.e. if it is >= than min and <= than max).
  87.    *
  88.    *   @param  section  Init Config file section name
  89.    *   @param  fname    Name of parameter
  90.    *   @param  value    Value to check
  91.    *   @return true if parameter value is valid.
  92.    * 
  93.    *   @note Result is not defined if section/name are wrong!
  94.    */
  95.   bool verify(const Properties* secti, const char* fname, Uint64 value) const;
  96.   static const char* nameToAlias(const char*);
  97.   static const char* getAlias(const char*);
  98.   bool isSection(const char*) const;
  99.   const char*  getDescription(const Properties * sec, const char* fname) const;
  100.   Type         getType(const Properties * section, const char* fname) const;
  101.   Status       getStatus(const Properties* section, const char* fname) const;
  102.   Uint64       getMin(const Properties * section, const char* fname) const;
  103.   Uint64       getMax(const Properties * section, const char* fname) const;
  104.   Uint64       getDefault(const Properties * section, const char* fname) const;
  105.   
  106.   const Properties * getInfo(const char * section) const;
  107.   const Properties * getDefaults(const char * section) const;
  108.   
  109.   void print() const;
  110.   void print(const char* section) const;
  111.   void print(const Properties * section, const char* parameter) const;
  112. private:
  113.   Properties               m_info;
  114.   Properties               m_systemDefaults;
  115.   static const AliasPair   m_sectionNameAliases[];
  116.   static const char*       m_sectionNames[];
  117.   static const int         m_noOfSectionNames;
  118. public:
  119.   static const ParamInfo   m_ParamInfo[];
  120.   static const int         m_NoOfParams;
  121.   
  122.   static const SectionRule m_SectionRules[];
  123.   static const ConfigRule  m_ConfigRules[];
  124.   static const int         m_NoOfRules;
  125. };
  126. #endif // ConfigInfo_H