Add a function computing the filter arguments
authorKlaus Aehlig <aehlig@google.com>
Tue, 4 Aug 2015 13:03:31 +0000 (15:03 +0200)
committerKlaus Aehlig <aehlig@google.com>
Tue, 4 Aug 2015 14:56:25 +0000 (16:56 +0200)
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 <aehlig@google.com>
Reviewed-by: Petr Pudlak <pudlak@google.com>

src/Ganeti/Query/Language.hs

index 2d23ff4..8144084 100644 (file)
@@ -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 = toList
+
 -- | Serialiser for the 'Filter' data type.
 showFilter :: (JSON a) => Filter a -> JSValue
 showFilter (EmptyFilter)          = JSNull