]> granicus.if.org Git - icinga2/commitdiff
Fix incorrect is_active queries
authorGunnar Beutner <gunnar@beutner.name>
Mon, 11 Jan 2016 13:23:16 +0000 (14:23 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Mon, 11 Jan 2016 13:23:16 +0000 (14:23 +0100)
fixes #10891

lib/db_ido/dbtype.cpp
lib/db_ido/dbtype.hpp

index 8e5284e57f7177bd4898376ad492a0166e223d51..2d0d4e2e2ef05e38647afced097ef5cca309fb31 100644 (file)
 
 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<String> 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;
 }
 
index ee331c5eb9a5e2f1a4adef0eaec739de4a61990c..1488404f8440c0085f4f8c1587910c8ed3db53b3 100644 (file)
@@ -45,14 +45,14 @@ public:
        typedef std::map<String, DbType::Ptr> TypeMap;
        typedef std::map<std::pair<String, String>, intrusive_ptr<DbObject> > 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<String> 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<DbType::Ptr> GetAllTypes(void);
 
 private:
-       std::vector<String> m_Names;
+       String m_Name;
        String m_Table;
        long m_TypeID;
        String m_IDColumn;
@@ -100,8 +100,8 @@ intrusive_ptr<T> 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<type>); \
-                       DbType::RegisterType(#name, dbtype); \
+                       DbType::Ptr dbtype = new DbType(#name, table, tid, idcolumn, DbObjectFactory<type>); \
+                       DbType::RegisterType(dbtype); \
                } \
                INITIALIZE_ONCE(RegisterDbType); \
        } } }