{-# LANGUAGE OverloadedStrings #-}

module Rel8.Internal.Aggregate.Range (
  rangeAgg,  
) where

-- base
import Prelude

-- rel8
import Rel8.Internal.Aggregate (Aggregator', toAggregator)
import Rel8.Internal.Aggregate.Function (aggregateFunction)
import Rel8.Internal.Data.Range (Multirange, Range)
import Rel8.Internal.Expr (Expr)
import Rel8.Internal.Type.Range (DBRange)


rangeAgg ::
  DBRange a =>
  Aggregator' fold (Expr (Range a)) (Expr (Multirange a))
rangeAgg :: forall a (fold :: Fold).
DBRange a =>
Aggregator' fold (Expr (Range a)) (Expr (Multirange a))
rangeAgg = Expr (Multirange a)
-> Aggregator' 'Semi (Expr (Range a)) (Expr (Multirange a))
-> Aggregator' fold (Expr (Range a)) (Expr (Multirange a))
forall a (fold :: Fold) i (fold' :: Fold).
a -> Aggregator' fold i a -> Aggregator' fold' i a
toAggregator Expr (Multirange a)
forall a. Monoid a => a
mempty (Aggregator' 'Semi (Expr (Range a)) (Expr (Multirange a))
 -> Aggregator' fold (Expr (Range a)) (Expr (Multirange a)))
-> Aggregator' 'Semi (Expr (Range a)) (Expr (Multirange a))
-> Aggregator' fold (Expr (Range a)) (Expr (Multirange a))
forall a b. (a -> b) -> a -> b
$ QualifiedName
-> Aggregator' 'Semi (Expr (Range a)) (Expr (Multirange a))
forall i a.
(Table Expr i, Sql DBType a) =>
QualifiedName -> Aggregator1 i (Expr a)
aggregateFunction QualifiedName
"range_agg"