{-# LANGUAGE OverloadedStrings #-}
module Database.Beam.Sqlite.SqliteSpecific
(
sqliteGroupConcat
, sqliteGroupConcatOver
)
where
import Database.Beam
import Database.Beam.Backend.SQL
import Database.Beam.Query.Internal
import Database.Beam.Sqlite.Syntax
#if !MIN_VERSION_base(4, 11, 0)
import Data.Semigroup
#endif
sqliteGroupConcat
:: ( HasSqlValueSyntax SqliteValueSyntax a
, IsSqlExpressionSyntaxStringType SqliteExpressionSyntax str
, IsSqlExpressionSyntaxStringType SqliteExpressionSyntax str2
)
=> QExpr SqliteExpressionSyntax s a
-> QExpr SqliteExpressionSyntax s str
-> QAgg SqliteExpressionSyntax s (Maybe str2)
sqliteGroupConcat v delim = _sqliteGroupConcatOver allInGroup_ v (Just delim)
sqliteGroupConcatOver
:: ( HasSqlValueSyntax SqliteValueSyntax a
, IsSqlExpressionSyntaxStringType SqliteExpressionSyntax str
)
=> Maybe SqliteAggregationSetQuantifierSyntax
-> QExpr SqliteExpressionSyntax s a
-> QAgg SqliteExpressionSyntax s (Maybe str)
sqliteGroupConcatOver quantifier v = _sqliteGroupConcatOver quantifier v Nothing
_sqliteGroupConcatOver
:: ( HasSqlValueSyntax SqliteValueSyntax a
, IsSqlExpressionSyntaxStringType SqliteExpressionSyntax str
)
=> Maybe SqliteAggregationSetQuantifierSyntax
-> QExpr SqliteExpressionSyntax s a
-> Maybe (QExpr SqliteExpressionSyntax s str2)
-> QAgg SqliteExpressionSyntax s (Maybe str)
_sqliteGroupConcatOver quantifier (QExpr v) delim =
QExpr $ \tbl -> SqliteExpressionSyntax $
emit "group_concat" <>
parens ( maybe mempty (\q -> fromSqliteAggregationSetQuantifier q <> emit " ") quantifier <>
fromSqliteExpression (v tbl) <>
maybe mempty (\(QExpr d) -> emit ", " <> fromSqliteExpression (d tbl)) delim)