]> granicus.if.org Git - icinga2/commitdiff
ido: Add idcolumn to REGISTER_DBTYPE
authorMichael Friedrich <michael.friedrich@netways.de>
Thu, 1 Aug 2013 12:08:02 +0000 (14:08 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Thu, 1 Aug 2013 12:17:06 +0000 (14:17 +0200)
hosts are using host_object_id, commands are using object_id.
That's weird db schema design.

lib/ido/commanddbobject.cpp
lib/ido/dbobject.cpp
lib/ido/dbtype.cpp
lib/ido/dbtype.h
lib/ido/hostdbobject.cpp
lib/ido/hostgroupdbobject.cpp
lib/ido/servicedbobject.cpp
lib/ido/servicegroupdbobject.cpp
lib/ido/timeperioddbobject.cpp
lib/ido/userdbobject.cpp
lib/ido/usergroupdbobject.cpp

index f7adba73756d9d591820cdc0b349a28eae553a6e..9c742aa4114261fcf03cee5d85da21382d4bcaf2 100644 (file)
@@ -27,9 +27,9 @@
 
 using namespace icinga;
 
-REGISTER_DBTYPE(CheckCommand, "command", 12, CommandDbObject);
-REGISTER_DBTYPE(EventCommand, "command", 12, CommandDbObject);
-REGISTER_DBTYPE(NotificationCommand, "command", 12, CommandDbObject);
+REGISTER_DBTYPE(CheckCommand, "command", 12, "object_id", CommandDbObject);
+REGISTER_DBTYPE(EventCommand, "command", 12, "object_id", CommandDbObject);
+REGISTER_DBTYPE(NotificationCommand, "command", 12, "object_id", CommandDbObject);
 
 CommandDbObject::CommandDbObject(const DbType::Ptr& type, const String& name1, const String& name2)
        : DbObject(type, name1, name2)
index c9f4d559a03c90f72dc0879b7c1d5f6a8dac9700..11d27204aa2746248be4a734f464a8077f1f5572 100644 (file)
@@ -83,14 +83,14 @@ void DbObject::SendConfigUpdate(void)
        query1.Table = GetType()->GetTable() + "s";
        query1.Type = DbQueryDelete;
        query1.WhereCriteria = boost::make_shared<Dictionary>();
-       query1.WhereCriteria->Set(GetType()->GetTable() + "_object_id", GetObject());
+       query1.WhereCriteria->Set(GetType()->GetIDColumn(), GetObject());
        OnQuery(query1);
 
        DbQuery query2;
        query2.Table = GetType()->GetTable() + "s";
        query2.Type = DbQueryInsert;
        query2.Fields = fields;
-       query2.Fields->Set(GetType()->GetTable() + "_object_id", GetObject());
+       query2.Fields->Set(GetType()->GetIDColumn(), GetObject());
        query2.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */
        query2.Fields->Set("config_type", 1);
        OnQuery(query2);
@@ -111,14 +111,14 @@ void DbObject::SendStatusUpdate(void)
        query1.Table = GetType()->GetTable() + "status";
        query1.Type = DbQueryDelete;
        query1.WhereCriteria = boost::make_shared<Dictionary>();
-       query1.WhereCriteria->Set(GetType()->GetTable() + "_object_id", GetObject());
+       query1.WhereCriteria->Set(GetType()->GetIDColumn(), GetObject());
        OnQuery(query1);
 
        DbQuery query2;
        query2.Table = GetType()->GetTable() + "status";
        query2.Type = DbQueryInsert;
        query2.Fields = fields;
-       query2.Fields->Set(GetType()->GetTable() + "_object_id", GetObject());
+       query2.Fields->Set(GetType()->GetIDColumn(), GetObject());
        query2.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */
        query2.Fields->Set("status_update_time", DbValue::FromTimestamp(Utility::GetTime()));
        OnQuery(query2);
index 3136f39b20fdccaf6c3e83786faa5c0e1d0a6b0c..835b048dd16f92d373ad423ffc850d516b954b87 100644 (file)
@@ -29,8 +29,8 @@ using namespace icinga;
 
 boost::mutex DbType::m_StaticMutex;
 
-DbType::DbType(const String& name, const String& table, long tid, const DbType::ObjectFactory& factory)
-       : m_Name(name), m_Table(table), m_TypeID(tid), 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)
 { }
 
 String DbType::GetName(void) const
@@ -48,6 +48,11 @@ long DbType::GetTypeID(void) const
        return m_TypeID;
 }
 
+String DbType::GetIDColumn(void) const
+{
+       return m_IDColumn;
+}
+
 void DbType::RegisterType(const DbType::Ptr& type)
 {
        boost::mutex::scoped_lock lock(m_StaticMutex);
index a5cbafd769f2bf89d51ecb5692fae76898093dba..43212deb69ccf495575a1b629b16891cccf96e43 100644 (file)
@@ -43,11 +43,12 @@ public:
        typedef std::map<String, DbType::Ptr, string_iless> TypeMap;
        typedef std::map<std::pair<String, String>, boost::shared_ptr<DbObject>, pair_string_iless> ObjectMap;
 
-       DbType(const String& name, const String& table, long tid, const ObjectFactory& factory);
+       DbType(const String& name, const String& table, long tid, const String& idcolumn, const ObjectFactory& factory);
 
        String GetName(void) const;
        String GetTable(void) const;
        long GetTypeID(void) const;
+       String GetIDColumn(void) const;
 
        static void RegisterType(const DbType::Ptr& type);
 
@@ -60,6 +61,7 @@ private:
        String m_Name;
        String m_Table;
        long m_TypeID;
+       String m_IDColumn;
        ObjectFactory m_ObjectFactory;
 
        static boost::mutex m_StaticMutex;
@@ -84,9 +86,9 @@ class DbTypeRegistry : public Registry<DbType::Ptr>
 class RegisterDbTypeHelper
 {
 public:
-       RegisterDbTypeHelper(const String& name, const String& table, long tid, const DbType::ObjectFactory& factory)
+       RegisterDbTypeHelper(const String& name, const String& table, long tid, const String& idcolumn, const DbType::ObjectFactory& factory)
        {
-               DbType::Ptr dbtype = boost::make_shared<DbType>(name, table, tid, factory);
+               DbType::Ptr dbtype = boost::make_shared<DbType>(name, table, tid, idcolumn, factory);
                DbType::RegisterType(dbtype);
        }
 };
@@ -102,8 +104,8 @@ shared_ptr<T> DbObjectFactory(const DbType::Ptr& type, const String& name1, cons
        return boost::make_shared<T>(type, name1, name2);
 }
 
-#define REGISTER_DBTYPE(name, table, tid, type) \
-       I2_EXPORT icinga::RegisterDbTypeHelper g_RegisterDBT_ ## name(#name, table, tid, DbObjectFactory<type>);
+#define REGISTER_DBTYPE(name, table, tid, idcolumn, type) \
+       I2_EXPORT icinga::RegisterDbTypeHelper g_RegisterDBT_ ## name(#name, table, tid, idcolumn, DbObjectFactory<type>);
 
 }
 
index 636ace0978b137350e24f3239719f286f9cc2034..7699f9922c5e906a5caaa6194b814f685827e462 100644 (file)
@@ -31,7 +31,7 @@
 
 using namespace icinga;
 
-REGISTER_DBTYPE(Host, "host", 1, HostDbObject);
+REGISTER_DBTYPE(Host, "host", 1, "host_object_id", HostDbObject);
 
 HostDbObject::HostDbObject(const DbType::Ptr& type, const String& name1, const String& name2)
        : DbObject(type, name1, name2)
index be52a08a9e1f222f7238b5ce4c7778ed10287751..3e084452f7da4808ef7e49a704474c6a89c6d0d0 100644 (file)
@@ -26,7 +26,7 @@
 
 using namespace icinga;
 
-REGISTER_DBTYPE(HostGroup, "hostgroup", 3, HostGroupDbObject);
+REGISTER_DBTYPE(HostGroup, "hostgroup", 3, "hostgroup_object_id", HostGroupDbObject);
 
 HostGroupDbObject::HostGroupDbObject(const DbType::Ptr& type, const String& name1, const String& name2)
        : DbObject(type, name1, name2)
index a683243521d207e7f7351e024d5edd8968b8f5a2..ca6e036e1f6c420545ddb14fd0df172789c4c0c9 100644 (file)
@@ -29,7 +29,7 @@
 
 using namespace icinga;
 
-REGISTER_DBTYPE(Service, "service", 2, ServiceDbObject);
+REGISTER_DBTYPE(Service, "service", 2, "service_object_id", ServiceDbObject);
 
 ServiceDbObject::ServiceDbObject(const DbType::Ptr& type, const String& name1, const String& name2)
        : DbObject(type, name1, name2)
index 0155d5714294926af871acb70017c7683ac7c806..85a3ef69b7a6827f962600defd047d878373dc72 100644 (file)
@@ -26,7 +26,7 @@
 
 using namespace icinga;
 
-REGISTER_DBTYPE(ServiceGroup, "servicegroup", 4, ServiceGroupDbObject);
+REGISTER_DBTYPE(ServiceGroup, "servicegroup", 4, "servicegroup_object_id", ServiceGroupDbObject);
 
 ServiceGroupDbObject::ServiceGroupDbObject(const DbType::Ptr& type, const String& name1, const String& name2)
        : DbObject(type, name1, name2)
index c5f2beb090506b2d6ee3082d49303db8f9171401..7c27a30aebd6e4c1baa4a51718d77ab3213554f0 100644 (file)
@@ -26,7 +26,7 @@
 
 using namespace icinga;
 
-REGISTER_DBTYPE(TimePeriod, "timeperiod", 9, TimePeriodDbObject);
+REGISTER_DBTYPE(TimePeriod, "timeperiod", 9, "timeperiod_object_id", TimePeriodDbObject);
 
 TimePeriodDbObject::TimePeriodDbObject(const DbType::Ptr& type, const String& name1, const String& name2)
        : DbObject(type, name1, name2)
index 8b5571be6678587e70c840eea600b9983a5b608b..bd158d707b9646ba6b4c0a222256daca80cb3307 100644 (file)
@@ -26,7 +26,7 @@
 
 using namespace icinga;
 
-REGISTER_DBTYPE(User, "contact", 10, UserDbObject);
+REGISTER_DBTYPE(User, "contact", 10, "contact_object_id", UserDbObject);
 
 UserDbObject::UserDbObject(const DbType::Ptr& type, const String& name1, const String& name2)
        : DbObject(type, name1, name2)
index a512944e335522cc937dbeea3faf585602fa63ca..a043eafe14d5fb3919ed1b984beaeb1cf45db206 100644 (file)
@@ -26,7 +26,7 @@
 
 using namespace icinga;
 
-REGISTER_DBTYPE(UserGroup, "contactgroup", 11, UserGroupDbObject);
+REGISTER_DBTYPE(UserGroup, "contactgroup", 11, "contactgroup_object_id", UserGroupDbObject);
 
 UserGroupDbObject::UserGroupDbObject(const DbType::Ptr& type, const String& name1, const String& name2)
        : DbObject(type, name1, name2)