From 11dfcd76a3cc60f4a912c9a5cd17a8f7413fe8f6 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Mon, 11 Jan 2016 14:23:16 +0100 Subject: [PATCH] Fix incorrect is_active queries fixes #10891 --- lib/db_ido/dbtype.cpp | 21 +++++++++++++-------- lib/db_ido/dbtype.hpp | 12 ++++++------ 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/lib/db_ido/dbtype.cpp b/lib/db_ido/dbtype.cpp index a8516c722..44c33fb3e 100644 --- a/lib/db_ido/dbtype.cpp +++ b/lib/db_ido/dbtype.cpp @@ -26,14 +26,13 @@ using namespace icinga; -DbType::DbType(const String& table, long tid, const String& idcolumn, const DbType::ObjectFactory& factory) - : m_Table(table), m_TypeID(tid), m_IDColumn(idcolumn), m_ObjectFactory(factory) +DbType::DbType(const String& name, const String& table, long tid, const String& idcolumn, const DbType::ObjectFactory& factory) + : m_Name(name), m_Table(table), m_TypeID(tid), m_IDColumn(idcolumn), m_ObjectFactory(factory) { } -std::vector DbType::GetNames(void) const +String DbType::GetName(void) const { - boost::mutex::scoped_lock lock(GetStaticMutex()); - return m_Names; + return m_Name; } String DbType::GetTable(void) const @@ -51,11 +50,10 @@ String DbType::GetIDColumn(void) const return m_IDColumn; } -void DbType::RegisterType(const String& name, const DbType::Ptr& type) +void DbType::RegisterType(const DbType::Ptr& type) { boost::mutex::scoped_lock lock(GetStaticMutex()); - type->m_Names.push_back(name); - GetTypes()[name] = type; + GetTypes()[type->GetName()] = type; } DbType::Ptr DbType::GetByName(const String& name) @@ -93,6 +91,13 @@ DbObject::Ptr DbType::GetOrCreateObjectByName(const String& name1, const String& DbObject::Ptr dbobj = m_ObjectFactory(this, name1, name2); m_Objects[std::make_pair(name1, name2)] = dbobj; + String objName = name1; + + if (!name2.IsEmpty()) + objName += "!" + name2; + + dbobj->SetObject(ConfigObject::GetObject(m_Name, objName)); + return dbobj; } diff --git a/lib/db_ido/dbtype.hpp b/lib/db_ido/dbtype.hpp index c228a8f14..d160e947b 100644 --- a/lib/db_ido/dbtype.hpp +++ b/lib/db_ido/dbtype.hpp @@ -45,14 +45,14 @@ public: typedef std::map TypeMap; typedef std::map, intrusive_ptr > ObjectMap; - DbType(const String& table, long tid, const String& idcolumn, const ObjectFactory& factory); + DbType(const String& name, const String& table, long tid, const String& idcolumn, const ObjectFactory& factory); - std::vector GetNames(void) const; + String GetName(void) const; String GetTable(void) const; long GetTypeID(void) const; String GetIDColumn(void) const; - static void RegisterType(const String& name, const DbType::Ptr& type); + static void RegisterType(const DbType::Ptr& type); static DbType::Ptr GetByName(const String& name); static DbType::Ptr GetByID(long tid); @@ -62,7 +62,7 @@ public: static std::set GetAllTypes(void); private: - std::vector m_Names; + String m_Name; String m_Table; long m_TypeID; String m_IDColumn; @@ -100,8 +100,8 @@ intrusive_ptr DbObjectFactory(const DbType::Ptr& type, const String& name1, c namespace { namespace UNIQUE_NAME(ido) { namespace ido ## name { \ void RegisterDbType(void) \ { \ - DbType::Ptr dbtype = new DbType(table, tid, idcolumn, DbObjectFactory); \ - DbType::RegisterType(#name, dbtype); \ + DbType::Ptr dbtype = new DbType(#name, table, tid, idcolumn, DbObjectFactory); \ + DbType::RegisterType(dbtype); \ } \ INITIALIZE_ONCE(RegisterDbType); \ } } } -- 2.40.0