Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Module Database.PostgreSQL.PQTypes.SQL.Builder offers a nice monadic DSL for building SQL statements on the fly. Some examples:
>>>
:{
sqlSelect "documents" $ do sqlResult "id" sqlResult "title" sqlResult "mtime" sqlOrderBy "documents.mtime DESC" sqlWhereILike "documents.title" "%pattern%" :} SQL " SELECT id, title, mtime FROM documents WHERE (documents.title ILIKE <\"%pattern%\">) ORDER BY documents.mtime DESC "
SQL.Builder
supports SELECT as sqlSelect
and data manipulation using
sqlInsert
, sqlInsertSelect
, sqlDelete
and sqlUpdate
.
>>>
import Data.Time
>>>
let title = "title" :: String
>>>
let ctime = read "2020-01-01 00:00:00 UTC" :: UTCTime
>>>
:{
sqlInsert "documents" $ do sqlSet "title" title sqlSet "ctime" ctime sqlResult "id" :} SQL " INSERT INTO documents (title, ctime) VALUES (<\"title\">, <2020-01-01 00:00:00 UTC>) RETURNING id"
The sqlInsertSelect
is particulary interesting as it supports INSERT
of values taken from a SELECT clause from same or even different
tables.
There is a possibility to do multiple inserts at once. Data given by
sqlSetList
will be inserted multiple times, data given by sqlSet
will be multiplied as many times as needed to cover all inserted rows
(it is common to all rows). If you use multiple sqlSetList
then
lists will be made equal in length by appending DEFAULT
as fill
element.
>>>
:{
sqlInsert "documents" $ do sqlSet "ctime" ctime sqlSetList "title" ["title1", "title2", "title3"] sqlResult "id" :} SQL " INSERT INTO documents (ctime, title) VALUES (<2020-01-01 00:00:00 UTC>, <\"title1\">) , (<2020-01-01 00:00:00 UTC>, <\"title2\">) , (<2020-01-01 00:00:00 UTC>, <\"title3\">) RETURNING id"
The above will insert 3 new documents.
SQL.Builder
provides quite a lot of SQL magic, including ORDER BY
as
sqlOrderBy
, GROUP BY
as sqlGroupBy
.
>>>
:{
sqlSelect "documents" $ do sqlResult "id" sqlResult "title" sqlResult "mtime" sqlOrderBy "documents.mtime DESC" sqlOrderBy "documents.title" sqlGroupBy "documents.status" sqlJoinOn "users" "documents.user_id = users.id" sqlWhere $ mkSQL "documents.title ILIKE" <?> "%pattern%" :} SQL " SELECT id, title, mtime FROM documents JOIN users ON documents.user_id = users.id WHERE (documents.title ILIKE <\"%pattern%\">) GROUP BY documents.status ORDER BY documents.mtime DESC, documents.title "
Joins are done by sqlJoinOn
, sqlLeftJoinOn
, sqlRightJoinOn
,
sqlJoinOn
, sqlFullJoinOn
. If everything fails use sqlJoin
and
sqlFrom
to set join clause as string. Support for a join grammars as
some kind of abstract syntax data type is lacking.
>>>
:{
sqlDelete "mails" $ do sqlWhere "id > 67" :} SQL " DELETE FROM mails WHERE (id > 67) "
>>>
:{
sqlUpdate "document_tags" $ do sqlSet "value" (123 :: Int) sqlWhere "name = 'abc'" :} SQL " UPDATE document_tags SET value=<123> WHERE (name = 'abc') "
Synopsis
- sqlWhere :: (MonadState v m, SqlWhere v) => SQL -> m ()
- sqlWhereEq :: (MonadState v m, SqlWhere v, Show a, ToSQL a) => SQL -> a -> m ()
- sqlWhereEqSql :: (MonadState v m, SqlWhere v, Sqlable sql) => SQL -> sql -> m ()
- sqlWhereNotEq :: (MonadState v m, SqlWhere v, Show a, ToSQL a) => SQL -> a -> m ()
- sqlWhereEqualsAny :: (MonadState v m, SqlWhere v, Show a, ToSQL a) => SQL -> [a] -> m ()
- sqlWhereIn :: (MonadState v m, SqlWhere v, Show a, ToSQL a) => SQL -> [a] -> m ()
- sqlWhereInSql :: (MonadState v m, Sqlable a, SqlWhere v) => SQL -> a -> m ()
- sqlWhereNotIn :: (MonadState v m, SqlWhere v, Show a, ToSQL a) => SQL -> [a] -> m ()
- sqlWhereNotInSql :: (MonadState v m, Sqlable a, SqlWhere v) => SQL -> a -> m ()
- sqlWhereExists :: (MonadState v m, SqlWhere v) => SqlSelect -> m ()
- sqlWhereNotExists :: (MonadState v m, SqlWhere v) => SqlSelect -> m ()
- sqlWhereLike :: (MonadState v m, SqlWhere v, Show a, ToSQL a) => SQL -> a -> m ()
- sqlWhereILike :: (MonadState v m, SqlWhere v, Show a, ToSQL a) => SQL -> a -> m ()
- sqlWhereIsNULL :: (MonadState v m, SqlWhere v) => SQL -> m ()
- sqlWhereIsNotNULL :: (MonadState v m, SqlWhere v) => SQL -> m ()
- sqlFrom :: (MonadState v m, SqlFrom v) => SQL -> m ()
- sqlJoin :: (MonadState v m, SqlFrom v) => SQL -> m ()
- sqlJoinOn :: (MonadState v m, SqlFrom v) => SQL -> SQL -> m ()
- sqlLeftJoinOn :: (MonadState v m, SqlFrom v) => SQL -> SQL -> m ()
- sqlRightJoinOn :: (MonadState v m, SqlFrom v) => SQL -> SQL -> m ()
- sqlFullJoinOn :: (MonadState v m, SqlFrom v) => SQL -> SQL -> m ()
- sqlOnConflictDoNothing :: (MonadState v m, SqlOnConflict v) => m ()
- sqlOnConflictOnColumns :: (MonadState v m, SqlOnConflict v, Sqlable sql) => [SQL] -> sql -> m ()
- sqlOnConflictOnColumnsDoNothing :: (MonadState v m, SqlOnConflict v) => [SQL] -> m ()
- sqlSet :: (MonadState v m, SqlSet v, Show a, ToSQL a) => SQL -> a -> m ()
- sqlSetInc :: (MonadState v m, SqlSet v) => SQL -> m ()
- sqlSetList :: (MonadState SqlInsert m, Show a, ToSQL a) => SQL -> [a] -> m ()
- sqlSetListWithDefaults :: (MonadState SqlInsert m, Show a, ToSQL a) => SQL -> [Maybe a] -> m ()
- sqlSetCmd :: (MonadState v m, SqlSet v) => SQL -> SQL -> m ()
- sqlSetCmdList :: MonadState SqlInsert m => SQL -> [SQL] -> m ()
- sqlCopyColumn :: (MonadState v m, SqlSet v) => SQL -> m ()
- sqlResult :: (MonadState v m, SqlResult v) => SQL -> m ()
- sqlOrderBy :: (MonadState v m, SqlOrderBy v) => SQL -> m ()
- sqlGroupBy :: (MonadState v m, SqlGroupByHaving v) => SQL -> m ()
- sqlHaving :: (MonadState v m, SqlGroupByHaving v) => SQL -> m ()
- sqlOffset :: (MonadState v m, SqlOffsetLimit v, Integral int) => int -> m ()
- sqlLimit :: (MonadState v m, SqlOffsetLimit v, Integral int) => int -> m ()
- sqlDistinct :: (MonadState v m, SqlDistinct v) => m ()
- sqlWith :: (MonadState v m, SqlWith v, Sqlable s) => SQL -> s -> m ()
- sqlWithMaterialized :: (MonadState v m, SqlWith v, Sqlable s) => SQL -> s -> m ()
- sqlUnion :: (MonadState SqlSelect m, Sqlable sql) => [sql] -> m ()
- sqlUnionAll :: (MonadState SqlSelect m, Sqlable sql) => [sql] -> m ()
- checkAndRememberMaterializationSupport :: (MonadDB m, MonadIO m, MonadMask m) => m ()
- sqlSelect :: SQL -> State SqlSelect () -> SqlSelect
- sqlSelect2 :: SQL -> State SqlSelect () -> SqlSelect
- data SqlSelect = SqlSelect {
- sqlSelectFrom :: SQL
- sqlSelectUnion :: [SQL]
- sqlSelectUnionAll :: [SQL]
- sqlSelectDistinct :: Bool
- sqlSelectResult :: [SQL]
- sqlSelectWhere :: [SqlCondition]
- sqlSelectOrderBy :: [SQL]
- sqlSelectGroupBy :: [SQL]
- sqlSelectHaving :: [SQL]
- sqlSelectOffset :: Integer
- sqlSelectLimit :: Integer
- sqlSelectWith :: [(SQL, SQL, Materialized)]
- sqlInsert :: SQL -> State SqlInsert () -> SqlInsert
- data SqlInsert = SqlInsert {
- sqlInsertWhat :: SQL
- sqlInsertOnConflict :: Maybe (SQL, Maybe SQL)
- sqlInsertSet :: [(SQL, Multiplicity SQL)]
- sqlInsertResult :: [SQL]
- sqlInsertWith :: [(SQL, SQL, Materialized)]
- sqlInsertSelect :: SQL -> SQL -> State SqlInsertSelect () -> SqlInsertSelect
- data SqlInsertSelect = SqlInsertSelect {
- sqlInsertSelectWhat :: SQL
- sqlInsertSelectOnConflict :: Maybe (SQL, Maybe SQL)
- sqlInsertSelectDistinct :: Bool
- sqlInsertSelectSet :: [(SQL, SQL)]
- sqlInsertSelectResult :: [SQL]
- sqlInsertSelectFrom :: SQL
- sqlInsertSelectWhere :: [SqlCondition]
- sqlInsertSelectOrderBy :: [SQL]
- sqlInsertSelectGroupBy :: [SQL]
- sqlInsertSelectHaving :: [SQL]
- sqlInsertSelectOffset :: Integer
- sqlInsertSelectLimit :: Integer
- sqlInsertSelectWith :: [(SQL, SQL, Materialized)]
- sqlUpdate :: SQL -> State SqlUpdate () -> SqlUpdate
- data SqlUpdate = SqlUpdate {
- sqlUpdateWhat :: SQL
- sqlUpdateFrom :: SQL
- sqlUpdateWhere :: [SqlCondition]
- sqlUpdateSet :: [(SQL, SQL)]
- sqlUpdateResult :: [SQL]
- sqlUpdateWith :: [(SQL, SQL, Materialized)]
- sqlDelete :: SQL -> State SqlDelete () -> SqlDelete
- data SqlDelete = SqlDelete {
- sqlDeleteFrom :: SQL
- sqlDeleteUsing :: SQL
- sqlDeleteWhere :: [SqlCondition]
- sqlDeleteResult :: [SQL]
- sqlDeleteWith :: [(SQL, SQL, Materialized)]
- sqlWhereAny :: (MonadState v m, SqlWhere v) => [State SqlAll ()] -> m ()
- class SqlResult a
- class SqlSet a
- class SqlFrom a
- class SqlWhere a
- class SqlWith a
- class SqlOrderBy a
- class SqlGroupByHaving a
- class SqlOffsetLimit a
- class SqlDistinct a
- data SqlCondition
- sqlGetWhereConditions :: SqlWhere a => a -> [SqlCondition]
- class Sqlable a where
- toSQLCommand :: a -> SQL
- sqlOR :: SQL -> SQL -> SQL
- sqlConcatComma :: [SQL] -> SQL
- sqlConcatAND :: [SQL] -> SQL
- sqlConcatOR :: [SQL] -> SQL
- parenthesize :: SQL -> SQL
- data AscDesc a
Documentation
sqlWhere :: (MonadState v m, SqlWhere v) => SQL -> m () Source #
The WHERE
part of an SQL query. See above for a usage
example. See also SqlCondition
.
sqlWhereEq :: (MonadState v m, SqlWhere v, Show a, ToSQL a) => SQL -> a -> m () Source #
sqlWhereEqSql :: (MonadState v m, SqlWhere v, Sqlable sql) => SQL -> sql -> m () Source #
sqlWhereNotEq :: (MonadState v m, SqlWhere v, Show a, ToSQL a) => SQL -> a -> m () Source #
sqlWhereEqualsAny :: (MonadState v m, SqlWhere v, Show a, ToSQL a) => SQL -> [a] -> m () Source #
Similar to sqlWhereIn
, but uses ANY
instead of SELECT UNNEST
.
sqlWhereIn :: (MonadState v m, SqlWhere v, Show a, ToSQL a) => SQL -> [a] -> m () Source #
sqlWhereInSql :: (MonadState v m, Sqlable a, SqlWhere v) => SQL -> a -> m () Source #
sqlWhereNotIn :: (MonadState v m, SqlWhere v, Show a, ToSQL a) => SQL -> [a] -> m () Source #
sqlWhereNotInSql :: (MonadState v m, Sqlable a, SqlWhere v) => SQL -> a -> m () Source #
sqlWhereExists :: (MonadState v m, SqlWhere v) => SqlSelect -> m () Source #
sqlWhereNotExists :: (MonadState v m, SqlWhere v) => SqlSelect -> m () Source #
sqlWhereLike :: (MonadState v m, SqlWhere v, Show a, ToSQL a) => SQL -> a -> m () Source #
sqlWhereILike :: (MonadState v m, SqlWhere v, Show a, ToSQL a) => SQL -> a -> m () Source #
sqlWhereIsNULL :: (MonadState v m, SqlWhere v) => SQL -> m () Source #
sqlWhereIsNotNULL :: (MonadState v m, SqlWhere v) => SQL -> m () Source #
sqlLeftJoinOn :: (MonadState v m, SqlFrom v) => SQL -> SQL -> m () Source #
sqlRightJoinOn :: (MonadState v m, SqlFrom v) => SQL -> SQL -> m () Source #
sqlFullJoinOn :: (MonadState v m, SqlFrom v) => SQL -> SQL -> m () Source #
sqlOnConflictDoNothing :: (MonadState v m, SqlOnConflict v) => m () Source #
sqlOnConflictOnColumns :: (MonadState v m, SqlOnConflict v, Sqlable sql) => [SQL] -> sql -> m () Source #
sqlOnConflictOnColumnsDoNothing :: (MonadState v m, SqlOnConflict v) => [SQL] -> m () Source #
sqlSetList :: (MonadState SqlInsert m, Show a, ToSQL a) => SQL -> [a] -> m () Source #
sqlSetListWithDefaults :: (MonadState SqlInsert m, Show a, ToSQL a) => SQL -> [Maybe a] -> m () Source #
sqlSetCmdList :: MonadState SqlInsert m => SQL -> [SQL] -> m () Source #
sqlCopyColumn :: (MonadState v m, SqlSet v) => SQL -> m () Source #
sqlOrderBy :: (MonadState v m, SqlOrderBy v) => SQL -> m () Source #
sqlGroupBy :: (MonadState v m, SqlGroupByHaving v) => SQL -> m () Source #
sqlHaving :: (MonadState v m, SqlGroupByHaving v) => SQL -> m () Source #
sqlOffset :: (MonadState v m, SqlOffsetLimit v, Integral int) => int -> m () Source #
sqlLimit :: (MonadState v m, SqlOffsetLimit v, Integral int) => int -> m () Source #
sqlDistinct :: (MonadState v m, SqlDistinct v) => m () Source #
sqlWithMaterialized :: (MonadState v m, SqlWith v, Sqlable s) => SQL -> s -> m () Source #
sqlUnion :: (MonadState SqlSelect m, Sqlable sql) => [sql] -> m () Source #
Note: WHERE clause of the main SELECT is treated specially, i.e. it only applies to the main SELECT, not the whole union.
sqlUnionAll :: (MonadState SqlSelect m, Sqlable sql) => [sql] -> m () Source #
Note: WHERE clause of the main SELECT is treated specially, i.e. it only applies to the main SELECT, not the whole union.
Since: 1.16.4.0
SqlSelect | |
|
Instances
SqlInsert | |
|
Instances
Show SqlInsert Source # | |
IsSQL SqlInsert Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder | |
SqlResult SqlInsert Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlResult1 :: SqlInsert -> SQL -> SqlInsert | |
SqlSet SqlInsert Source # | |
Sqlable SqlInsert Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder toSQLCommand :: SqlInsert -> SQL Source # |
sqlInsertSelect :: SQL -> SQL -> State SqlInsertSelect () -> SqlInsertSelect Source #
data SqlInsertSelect Source #
SqlInsertSelect | |
|
Instances
SqlUpdate | |
|
Instances
Show SqlUpdate Source # | |
IsSQL SqlUpdate Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder | |
SqlFrom SqlUpdate Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder | |
SqlResult SqlUpdate Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlResult1 :: SqlUpdate -> SQL -> SqlUpdate | |
SqlSet SqlUpdate Source # | |
SqlWhere SqlUpdate Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlWhere1 :: SqlUpdate -> SqlCondition -> SqlUpdate sqlGetWhereConditions :: SqlUpdate -> [SqlCondition] Source # | |
SqlWith SqlUpdate Source # | |
Sqlable SqlUpdate Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder toSQLCommand :: SqlUpdate -> SQL Source # |
SqlDelete | |
|
Instances
Show SqlDelete Source # | |
IsSQL SqlDelete Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder | |
SqlFrom SqlDelete Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder | |
SqlResult SqlDelete Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlResult1 :: SqlDelete -> SQL -> SqlDelete | |
SqlWhere SqlDelete Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlWhere1 :: SqlDelete -> SqlCondition -> SqlDelete sqlGetWhereConditions :: SqlDelete -> [SqlCondition] Source # | |
SqlWith SqlDelete Source # | |
Sqlable SqlDelete Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder toSQLCommand :: SqlDelete -> SQL Source # |
sqlWhereAny :: (MonadState v m, SqlWhere v) => [State SqlAll ()] -> m () Source #
Add a condition in the WHERE statement that holds if any of the given condition holds.
sqlResult1
Instances
SqlResult SqlDelete Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlResult1 :: SqlDelete -> SQL -> SqlDelete | |
SqlResult SqlInsert Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlResult1 :: SqlInsert -> SQL -> SqlInsert | |
SqlResult SqlInsertSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlResult1 :: SqlInsertSelect -> SQL -> SqlInsertSelect | |
SqlResult SqlSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlResult1 :: SqlSelect -> SQL -> SqlSelect | |
SqlResult SqlUpdate Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlResult1 :: SqlUpdate -> SQL -> SqlUpdate |
sqlSet1
Instances
SqlSet SqlInsert Source # | |
SqlSet SqlInsertSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlSet1 :: SqlInsertSelect -> SQL -> SQL -> SqlInsertSelect | |
SqlSet SqlUpdate Source # | |
sqlFrom1
Instances
SqlFrom SqlDelete Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder | |
SqlFrom SqlInsertSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlFrom1 :: SqlInsertSelect -> SQL -> SqlInsertSelect | |
SqlFrom SqlSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder | |
SqlFrom SqlUpdate Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder |
sqlWhere1, sqlGetWhereConditions
Instances
SqlWhere SqlDelete Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlWhere1 :: SqlDelete -> SqlCondition -> SqlDelete sqlGetWhereConditions :: SqlDelete -> [SqlCondition] Source # | |
SqlWhere SqlInsertSelect Source # | |
SqlWhere SqlSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlWhere1 :: SqlSelect -> SqlCondition -> SqlSelect sqlGetWhereConditions :: SqlSelect -> [SqlCondition] Source # | |
SqlWhere SqlUpdate Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlWhere1 :: SqlUpdate -> SqlCondition -> SqlUpdate sqlGetWhereConditions :: SqlUpdate -> [SqlCondition] Source # |
sqlWith1
class SqlOrderBy a Source #
sqlOrderBy1
Instances
SqlOrderBy SqlInsertSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlOrderBy1 :: SqlInsertSelect -> SQL -> SqlInsertSelect | |
SqlOrderBy SqlSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlOrderBy1 :: SqlSelect -> SQL -> SqlSelect |
class SqlGroupByHaving a Source #
sqlGroupBy1, sqlHaving1
Instances
SqlGroupByHaving SqlInsertSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlGroupBy1 :: SqlInsertSelect -> SQL -> SqlInsertSelect sqlHaving1 :: SqlInsertSelect -> SQL -> SqlInsertSelect | |
SqlGroupByHaving SqlSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder sqlGroupBy1 :: SqlSelect -> SQL -> SqlSelect sqlHaving1 :: SqlSelect -> SQL -> SqlSelect |
class SqlOffsetLimit a Source #
sqlOffset1, sqlLimit1
Instances
data SqlCondition Source #
SqlCondition
are clauses that are part of the WHERE block in
SQL statements. Each statement has a list of conditions, all of
them must be fulfilled. Sometimes we need to inspect internal
structure of a condition. For now it seems that the only
interesting case is EXISTS (SELECT ...), because that internal
SELECT can have explainable clauses.
Instances
Show SqlCondition Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder showsPrec :: Int -> SqlCondition -> ShowS # show :: SqlCondition -> String # showList :: [SqlCondition] -> ShowS # | |
Sqlable SqlCondition Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder toSQLCommand :: SqlCondition -> SQL Source # |
sqlGetWhereConditions :: SqlWhere a => a -> [SqlCondition] Source #
class Sqlable a where Source #
toSQLCommand :: a -> SQL Source #
Instances
Sqlable SQL Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder toSQLCommand :: SQL -> SQL Source # | |
Sqlable SqlCondition Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder toSQLCommand :: SqlCondition -> SQL Source # | |
Sqlable SqlDelete Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder toSQLCommand :: SqlDelete -> SQL Source # | |
Sqlable SqlInsert Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder toSQLCommand :: SqlInsert -> SQL Source # | |
Sqlable SqlInsertSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder toSQLCommand :: SqlInsertSelect -> SQL Source # | |
Sqlable SqlSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder toSQLCommand :: SqlSelect -> SQL Source # | |
Sqlable SqlUpdate Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder toSQLCommand :: SqlUpdate -> SQL Source # |
sqlConcatComma :: [SQL] -> SQL Source #
sqlConcatAND :: [SQL] -> SQL Source #
sqlConcatOR :: [SQL] -> SQL Source #
parenthesize :: SQL -> SQL Source #