When collecting live data for queries, we need to also
collect the fields the filter talks about, not only the
fields the user wants to see. Therefore, we need a function
computing those fields.

Signed-off-by: Klaus Aehlig <[email protected]>
---
 src/Ganeti/Query/Language.hs | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/Ganeti/Query/Language.hs b/src/Ganeti/Query/Language.hs
index 2d23ff4..5a5f5aa 100644
--- a/src/Ganeti/Query/Language.hs
+++ b/src/Ganeti/Query/Language.hs
@@ -36,6 +36,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 module Ganeti.Query.Language
     ( Filter(..)
+    , filterArguments
     , FilterField
     , FilterValue(..)
     , FilterRegex -- note: we don't export the constructor, must use helpers
@@ -191,6 +192,12 @@ data Filter a
     | ContainsFilter a FilterValue  -- ^ @=[]@ /list-field/ /value/
       deriving (Show, Eq)
 
+-- | Get the \"things\" a filter talks about. This is useful, e.g.,
+-- to decide which additional fields to fetch in a query depending
+-- on live data.
+filterArguments :: Filter a -> [a]
+filterArguments = fold . fmap return
+
 -- | Serialiser for the 'Filter' data type.
 showFilter :: (JSON a) => Filter a -> JSValue
 showFilter (EmptyFilter)          = JSNull
-- 
2.5.0.rc2.392.g76e840b

Reply via email to