common/profileprovider.h (40 lines of code) (raw):

#pragma once #include <map> #include <string> #include <vector> #include "table.h" #include "dbconnector.h" #include "converter.h" namespace swss { const std::string DELETED_KEY_SEPARATOR = "_"; class ProfileProvider { public: static ProfileProvider& instance(); bool appendConfigs(const std::string &table, const std::string &key, std::vector<std::pair<std::string, std::string> > &values, DBConnector* cfgDbConnector); std::shared_ptr<std::string> getConfig(const std::string &table, const std::string &key, const std::string &field, DBConnector* cfgDbConnector); std::map<std::string, std::string> getConfigs(const std::string &table, const std::string &key, DBConnector* cfgDbConnector); std::map<std::string, std::map<std::string, std::map<std::string, std::string>>> getConfigs(DBConnector* cfgDbConnector); std::vector<std::string> getKeys(const std::string &table, DBConnector* cfgDbConnector); bool tryRevertItem(const std::string &table, const std::string &key, DBConnector* cfgDbConnector); bool tryDeleteItem(const std::string &table, const std::string &key, DBConnector* cfgDbConnector); std::string getDeletedKeyName(const std::string &table, const std::string &key, DBConnector* dbConnector) { auto itemKey = to_upper(table) + DELETED_KEY_SEPARATOR + key; return getKeyName(PROFILE_DELETE_TABLE, itemKey, dbConnector); } private: ProfileProvider(); ~ProfileProvider(); std::string getKeyName(const std::string &table, const std::string &key, DBConnector* dbConnector) { const auto separator = SonicDBConfig::getSeparator(dbConnector); // Profile DB follow Config DB: table name is case insensetive. return to_upper(table) + separator + key; } bool itemDeleted(const std::string &table, const std::string &key, DBConnector* cfgDbConnector); void deleteItem(const std::string &table, const std::string &key, DBConnector* cfgDbConnector); void revertItem(const std::string &table, const std::string &key, DBConnector* cfgDbConnector); DBConnector& getStaticCfgDBConnector(DBConnector* cfgDbConnector); std::map<std::string, DBConnector> m_staticCfgDBMap; }; }