    {-# LANGUAGE OverloadedStrings
     #-}
    -- | This module contain PostgreSQL-specific functions.
    --
    -- /Since: 2.2.8/
    module Database.Esqueleto.PostgreSQL
      ( arrayAgg
      , stringAgg
      , chr
      ) where

    import Database.Esqueleto.Internal.Language
    import Database.Esqueleto.Internal.Sql

    -- | (@array_agg@) Concatenate input values, including @NULL@s,
    -- into an array.
    --
    -- /Since: 2.2.8/
    arrayAgg :: SqlExpr (Value a) -> SqlExpr (Value [a])
    arrayAgg = unsafeSqlFunction "array_agg"

    -- | (@string_agg@) Concatenate input values separated by a
    -- delimiter.
    --
    -- /Since: 2.2.8/
    stringAgg
      :: SqlString s
      => SqlExpr (Value s) -- ^ Input values.
      -> SqlExpr (Value s) -- ^ Delimiter.
      -> SqlExpr (Value s) -- ^ Concatenation.
    stringAgg expr delim = unsafeSqlFunction "string_agg" (expr, delim)

    -- | (@chr@) Translate the given integer to a character. (Note the result will
    -- depend on the character set of your database.)
    --
    -- /Since: 2.2.11/
    chr :: SqlString s => SqlExpr (Value Int) -> SqlExpr (Value s)
    chr = unsafeSqlFunction "chr"