]> granicus.if.org Git - icinga2/blobdiff - lib/remote/objectqueryhandler.cpp
Fix attributes names for joins; update documentation
[icinga2] / lib / remote / objectqueryhandler.cpp
index a7a6084363d0603e6d6a8db5d4d26e09181ee3fb..0da86d6a0b4d6c9e351f0e11130541dc0bf52a8a 100644 (file)
@@ -148,20 +148,27 @@ bool ObjectQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& re
        results->Reserve(objs.size());
 
        std::set<String> joinAttrs;
+       std::set<String> userJoinAttrs;
 
-       if (allJoins) {
-               for (int fid = 0; fid < type->GetFieldCount(); fid++) {
-                       Field field = type->GetFieldInfo(fid);
-                       if (field.Attributes & FANavigation)
-                               joinAttrs.insert(field.Name);
-               }
-       } else if (ujoins) {
+       if (ujoins) {
                ObjectLock olock(ujoins);
                BOOST_FOREACH(const String& ujoin, ujoins) {
-                       joinAttrs.insert(ujoin.SubStr(0, ujoin.FindFirstOf(".")));
+                       userJoinAttrs.insert(ujoin.SubStr(0, ujoin.FindFirstOf(".")));
                }
        }
 
+       for (int fid = 0; fid < type->GetFieldCount(); fid++) {
+               Field field = type->GetFieldInfo(fid);
+
+               if (!(field.Attributes & FANavigation))
+                       continue;
+
+               if (!allJoins && userJoinAttrs.find(field.NavigationName) == userJoinAttrs.end())
+                       continue;
+
+               joinAttrs.insert(field.Name);
+       }
+
        BOOST_FOREACH(const ConfigObject::Ptr& obj, objs) {
                Dictionary::Ptr result1 = new Dictionary();
                results->Add(result1);
@@ -210,8 +217,6 @@ bool ObjectQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& re
 
                BOOST_FOREACH(const String& joinAttr, joinAttrs) {
                        Object::Ptr joinedObj;
-                       String prefix;
-
                        int fid = type->GetFieldId(joinAttr);
 
                        if (fid < 0) {
@@ -231,8 +236,7 @@ bool ObjectQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& re
                        if (!joinedObj)
                                continue;
 
-                       prefix = field.NavigationName;
-                       boost::algorithm::to_lower(prefix);
+                       String prefix = field.NavigationName;
 
                        try {
                                joins->Set(prefix, SerializeObjectAttrs(joinedObj, prefix, ujoins, true, allJoins));