{-# LANGUAGE
ConstraintKinds
, DeriveGeneric
, DerivingStrategies
, FlexibleContexts
, FlexibleInstances
, GADTs
, GeneralizedNewtypeDeriving
, LambdaCase
, MultiParamTypeClasses
, OverloadedLabels
, OverloadedStrings
, QuantifiedConstraints
, ScopedTypeVariables
, StandaloneDeriving
, TypeApplications
, TypeFamilies
, TypeInType
, TypeOperators
, RankNTypes
, UndecidableInstances
#-}
module Squeal.PostgreSQL.Query.Values
(
values
, values_
) where
import Data.ByteString (ByteString)
import Generics.SOP hiding (from)
import Squeal.PostgreSQL.Type.Alias
import Squeal.PostgreSQL.Expression
import Squeal.PostgreSQL.Query
import Squeal.PostgreSQL.Render
values
:: SListI cols
=> NP (Aliased (Expression 'Ungrouped lat with db params '[] )) cols
-> [NP (Aliased (Expression 'Ungrouped lat with db params '[] )) cols]
-> Query lat with db params cols
values rw rws = UnsafeQuery $ "SELECT * FROM"
<+> parenthesized (
"VALUES"
<+> commaSeparated
( parenthesized
. renderCommaSeparated renderValuePart <$> rw:rws )
) <+> "AS t"
<+> parenthesized (renderCommaSeparated renderAliasPart rw)
where
renderAliasPart, renderValuePart
:: Aliased (Expression 'Ungrouped lat with db params '[] ) ty -> ByteString
renderAliasPart (_ `As` name) = renderSQL name
renderValuePart (value `As` _) = renderSQL value
values_
:: SListI cols
=> NP (Aliased (Expression 'Ungrouped lat with db params '[] )) cols
-> Query lat with db params cols
values_ rw = values rw []