opaleye-0.9.0.0: src/Opaleye/Exists.hs
module Opaleye.Exists (exists) where
import Opaleye.Field (Field)
import Opaleye.Internal.Column (Field_(Column))
import Opaleye.Internal.QueryArr (runSimpleQueryArr, productQueryArr)
import Opaleye.Internal.PackMap (run, extractAttr)
import Opaleye.Internal.PrimQuery (PrimQuery' (Exists))
import Opaleye.Internal.Tag (next)
import Opaleye.Select (Select)
import Opaleye.SqlTypes (SqlBool)
-- | True if any rows are returned by the given query, false otherwise.
--
-- This operation is equivalent to Postgres's @EXISTS@ operator.
exists :: Select a -> Select (Field SqlBool)
exists q = productQueryArr (f . runSimpleQueryArr q)
where
f (_, query, tag) = (Column result, Exists binding query, tag')
where
(result, [(binding, ())]) = run (extractAttr "exists" tag ())
tag' = next tag