On Fri, Aug 22, 2014 at 02:16:12PM +0200, Niklas Hambuechen wrote:
Signed-off-by: Niklas Hambuechen <[email protected]>
---
src/Ganeti/Query/Server.hs | 27 ++++++++++++++++++++-------
1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/src/Ganeti/Query/Server.hs b/src/Ganeti/Query/Server.hs
index d6c942d..2167ad7 100644
--- a/src/Ganeti/Query/Server.hs
+++ b/src/Ganeti/Query/Server.hs
@@ -76,6 +76,25 @@ import Ganeti.Utils.MVarLock
import qualified Ganeti.Version as Version

-- | Helper for classic queries.
+handleQuery :: [Qlang.ItemType -> Qlang.FilterField] -- ^ Fields to put into
+                                                     -- the query
+            -> ConfigData      -- ^ Cluster config
+            -> Qlang.ItemType  -- ^ Query type
+            -> [Either String Integer] -- ^ Requested names
+                                       -- (empty means all)
+            -> [String]        -- ^ Requested fields
+            -> Bool            -- ^ Whether to do sync queries or not
+            -> IO (GenericResult GanetiException JSValue)
+handleQuery _ _ _ _ _ True =
+  return . Bad $ OpPrereqError "Sync queries are not allowed" ECodeInval
+handleQuery filterFields cfg qkind names fields _ = do
+  let simpleNameFilter field = makeSimpleFilter (field qkind) names
+      flt = Qlang.OrFilter $ map simpleNameFilter filterFields
+  qr <- query cfg True (Qlang.Query qkind fields flt)
+  return $ showJSON <$> (qr >>= queryCompat)
+
+-- | Helper for classic queries.
+-- Queries `name` and `uuid` fields.
handleClassicQuery :: ConfigData      -- ^ Cluster config
                   -> Qlang.ItemType  -- ^ Query type
                   -> [Either String Integer] -- ^ Requested names
@@ -83,13 +102,7 @@ handleClassicQuery :: ConfigData      -- ^ Cluster config
                   -> [String]        -- ^ Requested fields
                   -> Bool            -- ^ Whether to do sync queries or not
                   -> IO (GenericResult GanetiException JSValue)
-handleClassicQuery _ _ _ _ True =
-  return . Bad $ OpPrereqError "Sync queries are not allowed" ECodeInval
-handleClassicQuery cfg qkind names fields _ = do
-  let simpleNameFilter field = makeSimpleFilter (field qkind) names
-      flt = Qlang.OrFilter $ map simpleNameFilter [nameField, uuidField]
-  qr <- query cfg True (Qlang.Query qkind fields flt)
-  return $ showJSON <$> (qr >>= queryCompat)
+handleClassicQuery = handleQuery [nameField, uuidField]

-- | Minimal wrapper to handle the missing config case.
handleCallWrapper :: Lock -> JQStatus ->  Result ConfigData
--
2.1.0.rc2.206.gedb03e5


LGTM
(it's fun when a function's type is larges than it's body)

Reply via email to