module Opaleye.Window
       (
         
         W.runWindows
         
       , W.Windows
       , W.over
         
       , W.Window
       , W.partitionBy
         
       , W.WindowFunction
         
         
         
         
       , W.noWindowFunction
       , W.aggregatorWindowFunction
       , rowNumber
       , rank
       , denseRank
       , percentRank
       , cumeDist
       , ntile
       , lag
       , lead
       , firstValue
       , lastValue
       , nthValue
       ) where
import qualified Opaleye.Internal.Column as IC
import qualified Opaleye.Internal.HaskellDB.PrimQuery as HPQ
import qualified Opaleye.Internal.Window as W
import qualified Opaleye.Field as F
import qualified Opaleye.SqlTypes as T
rowNumber :: W.WindowFunction a (F.Field T.SqlInt8)
rowNumber :: forall a. WindowFunction a (Field SqlInt8)
rowNumber = forall a (n :: Nullability) b.
WndwOp -> WindowFunction a (Field_ n b)
W.makeWndwAny WndwOp
HPQ.WndwRowNumber
rank :: W.WindowFunction a (F.Field T.SqlInt8)
rank :: forall a. WindowFunction a (Field SqlInt8)
rank = forall a (n :: Nullability) b.
WndwOp -> WindowFunction a (Field_ n b)
W.makeWndwAny WndwOp
HPQ.WndwRank
denseRank :: W.WindowFunction a (F.Field T.SqlInt8)
denseRank :: forall a. WindowFunction a (Field SqlInt8)
denseRank = forall a (n :: Nullability) b.
WndwOp -> WindowFunction a (Field_ n b)
W.makeWndwAny WndwOp
HPQ.WndwDenseRank
percentRank :: W.WindowFunction a (F.Field T.SqlFloat8)
percentRank :: forall a. WindowFunction a (Field SqlFloat8)
percentRank = forall a (n :: Nullability) b.
WndwOp -> WindowFunction a (Field_ n b)
W.makeWndwAny WndwOp
HPQ.WndwPercentRank
cumeDist :: W.WindowFunction a (F.Field T.SqlFloat8)
cumeDist :: forall a. WindowFunction a (Field SqlFloat8)
cumeDist = forall a (n :: Nullability) b.
WndwOp -> WindowFunction a (Field_ n b)
W.makeWndwAny WndwOp
HPQ.WndwCumeDist
ntile :: F.Field T.SqlInt4
      
      -> W.WindowFunction a (F.Field T.SqlInt4)
ntile :: forall a. Field SqlInt4 -> WindowFunction a (Field SqlInt4)
ntile (IC.Column PrimExpr
buckets) = forall a (n :: Nullability) b.
WndwOp -> WindowFunction a (Field_ n b)
W.makeWndwAny forall a b. (a -> b) -> a -> b
$ PrimExpr -> WndwOp
HPQ.WndwNtile PrimExpr
buckets
lag :: F.Field T.SqlInt4
    
    -> F.Field_ n a
    
    -> W.WindowFunction (F.Field_ n a) (F.Field_ n a)
lag :: forall (n :: Nullability) a.
Field SqlInt4
-> Field_ n a -> WindowFunction (Field_ n a) (Field_ n a)
lag (IC.Column PrimExpr
offset) (IC.Column PrimExpr
def) =
  forall (n :: Nullability) a (n' :: Nullability) a'.
(PrimExpr -> WndwOp) -> WindowFunction (Field_ n a) (Field_ n' a')
W.makeWndwField forall a b. (a -> b) -> a -> b
$ \PrimExpr
a -> PrimExpr -> PrimExpr -> PrimExpr -> WndwOp
HPQ.WndwLag PrimExpr
a PrimExpr
offset PrimExpr
def
lead :: F.Field T.SqlInt4
     
     -> F.Field_ n a
     
     -> W.WindowFunction (F.Field_ n a) (F.Field_ n a)
lead :: forall (n :: Nullability) a.
Field SqlInt4
-> Field_ n a -> WindowFunction (Field_ n a) (Field_ n a)
lead (IC.Column PrimExpr
offset) (IC.Column PrimExpr
def) =
  forall (n :: Nullability) a (n' :: Nullability) a'.
(PrimExpr -> WndwOp) -> WindowFunction (Field_ n a) (Field_ n' a')
W.makeWndwField forall a b. (a -> b) -> a -> b
$ \PrimExpr
a -> PrimExpr -> PrimExpr -> PrimExpr -> WndwOp
HPQ.WndwLead PrimExpr
a PrimExpr
offset PrimExpr
def
firstValue :: W.WindowFunction (F.Field_ n a) (F.Field_ n a)
firstValue :: forall (n :: Nullability) a.
WindowFunction (Field_ n a) (Field_ n a)
firstValue = forall (n :: Nullability) a (n' :: Nullability) a'.
(PrimExpr -> WndwOp) -> WindowFunction (Field_ n a) (Field_ n' a')
W.makeWndwField PrimExpr -> WndwOp
HPQ.WndwFirstValue
lastValue :: W.WindowFunction (F.Field_ n a) (F.Field_ n a)
lastValue :: forall (n :: Nullability) a.
WindowFunction (Field_ n a) (Field_ n a)
lastValue = forall (n :: Nullability) a (n' :: Nullability) a'.
(PrimExpr -> WndwOp) -> WindowFunction (Field_ n a) (Field_ n' a')
W.makeWndwField PrimExpr -> WndwOp
HPQ.WndwLastValue
nthValue :: F.Field T.SqlInt4
         
         -> W.WindowFunction (F.Field_ n a) (F.FieldNullable a)
nthValue :: forall (n :: Nullability) a.
Field SqlInt4 -> WindowFunction (Field_ n a) (FieldNullable a)
nthValue (IC.Column PrimExpr
n) = forall (n :: Nullability) a (n' :: Nullability) a'.
(PrimExpr -> WndwOp) -> WindowFunction (Field_ n a) (Field_ n' a')
W.makeWndwField forall a b. (a -> b) -> a -> b
$ \PrimExpr
a -> PrimExpr -> PrimExpr -> WndwOp
HPQ.WndwNthValue PrimExpr
a PrimExpr
n