Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Database.PostgreSQL.PQTypes.SQL.Builder
Description
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 ()
- sqlWithRecursive :: (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)]
- sqlSelectRecursiveWith :: Recursive
- 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)]
- sqlInsertRecursiveWith :: Recursive
- 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)]
- sqlInsertSelectRecursiveWith :: Recursive
- sqlUpdate :: SQL -> State SqlUpdate () -> SqlUpdate
- data SqlUpdate = SqlUpdate {
- sqlUpdateWhat :: SQL
- sqlUpdateFrom :: SQL
- sqlUpdateWhere :: [SqlCondition]
- sqlUpdateSet :: [(SQL, SQL)]
- sqlUpdateResult :: [SQL]
- sqlUpdateWith :: [(SQL, SQL, Materialized)]
- sqlUpdateRecursiveWith :: Recursive
- sqlDelete :: SQL -> State SqlDelete () -> SqlDelete
- data SqlDelete = SqlDelete {
- sqlDeleteFrom :: SQL
- sqlDeleteUsing :: SQL
- sqlDeleteWhere :: [SqlCondition]
- sqlDeleteResult :: [SQL]
- sqlDeleteWith :: [(SQL, SQL, Materialized)]
- sqlDeleteRecursiveWith :: Recursive
- newtype SqlWhereAll = SqlWhereAll {}
- sqlAll :: State SqlWhereAll () -> SQL
- newtype SqlWhereAny = SqlWhereAny {}
- sqlAny :: State SqlWhereAny () -> SQL
- sqlWhereAny :: (MonadState v m, SqlWhere v) => [State SqlWhereAll ()] -> 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 #
Note: sqlWhereIn
will unpack the array using UNNEST
. Using a postgresql function in this way
will interfere with the planner. Use sqlWhereEqualsAny
instead, except if you know that
UNNEST
will optimize better.
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 #
sqlWithRecursive :: (MonadState v m, SqlWith v, Sqlable s) => SQL -> s -> m () Source #
Note: RECURSIVE only powers SELECTs (but the SELECT can feed an UPDATE outside of the recursive query).
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
Constructors
SqlSelect | |
Fields
|
Instances
Constructors
SqlInsert | |
Fields
|
Instances
Show SqlInsert Source # | |
IsSQL SqlInsert Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder | |
SqlResult SqlInsert Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlResult1 :: SqlInsert -> SQL -> SqlInsert | |
SqlSet SqlInsert Source # | |
Sqlable SqlInsert Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods toSQLCommand :: SqlInsert -> SQL Source # |
sqlInsertSelect :: SQL -> SQL -> State SqlInsertSelect () -> SqlInsertSelect Source #
data SqlInsertSelect Source #
Constructors
SqlInsertSelect | |
Fields
|
Instances
Constructors
SqlUpdate | |
Fields
|
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 Methods sqlResult1 :: SqlUpdate -> SQL -> SqlUpdate | |
SqlSet SqlUpdate Source # | |
SqlWhere SqlUpdate Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlWhere1 :: SqlUpdate -> SqlCondition -> SqlUpdate sqlGetWhereConditions :: SqlUpdate -> [SqlCondition] Source # | |
SqlWith SqlUpdate Source # | |
Sqlable SqlUpdate Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods toSQLCommand :: SqlUpdate -> SQL Source # |
Constructors
SqlDelete | |
Fields
|
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 Methods sqlResult1 :: SqlDelete -> SQL -> SqlDelete | |
SqlWhere SqlDelete Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlWhere1 :: SqlDelete -> SqlCondition -> SqlDelete sqlGetWhereConditions :: SqlDelete -> [SqlCondition] Source # | |
SqlWith SqlDelete Source # | |
Sqlable SqlDelete Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods toSQLCommand :: SqlDelete -> SQL Source # |
newtype SqlWhereAll Source #
Type representing a set of conditions that are joined by AND
.
When no conditions are given, the result is TRUE
.
Constructors
SqlWhereAll | |
Fields |
Instances
Show SqlWhereAll Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods showsPrec :: Int -> SqlWhereAll -> ShowS # show :: SqlWhereAll -> String # showList :: [SqlWhereAll] -> ShowS # | |
SqlWhere SqlWhereAll Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlWhere1 :: SqlWhereAll -> SqlCondition -> SqlWhereAll sqlGetWhereConditions :: SqlWhereAll -> [SqlCondition] Source # | |
Sqlable SqlWhereAll Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods toSQLCommand :: SqlWhereAll -> SQL Source # |
newtype SqlWhereAny Source #
Type representing a set of conditions that are joined by OR
.
When no conditions are given, the result is FALSE
.
Constructors
SqlWhereAny | |
Fields |
Instances
Show SqlWhereAny Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods showsPrec :: Int -> SqlWhereAny -> ShowS # show :: SqlWhereAny -> String # showList :: [SqlWhereAny] -> ShowS # | |
SqlWhere SqlWhereAny Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlWhere1 :: SqlWhereAny -> SqlCondition -> SqlWhereAny sqlGetWhereConditions :: SqlWhereAny -> [SqlCondition] Source # | |
Sqlable SqlWhereAny Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods toSQLCommand :: SqlWhereAny -> SQL Source # |
sqlAny :: State SqlWhereAny () -> SQL Source #
Run monad that joins all conditions using OR
operator.
When no conditions are given, the result is FALSE
.
sqlWhereAny :: (MonadState v m, SqlWhere v) => [State SqlWhereAll ()] -> m () Source #
Add a condition in the WHERE statement that holds if any of the given condition holds.
These conditions are joined with OR
operator.
When no conditions are given, the result is FALSE
.
Minimal complete definition
sqlResult1
Instances
SqlResult SqlDelete Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlResult1 :: SqlDelete -> SQL -> SqlDelete | |
SqlResult SqlInsert Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlResult1 :: SqlInsert -> SQL -> SqlInsert | |
SqlResult SqlInsertSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlResult1 :: SqlInsertSelect -> SQL -> SqlInsertSelect | |
SqlResult SqlSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlResult1 :: SqlSelect -> SQL -> SqlSelect | |
SqlResult SqlUpdate Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlResult1 :: SqlUpdate -> SQL -> SqlUpdate |
Minimal complete definition
sqlSet1
Instances
SqlSet SqlInsert Source # | |
SqlSet SqlInsertSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlSet1 :: SqlInsertSelect -> SQL -> SQL -> SqlInsertSelect | |
SqlSet SqlUpdate Source # | |
Minimal complete definition
sqlFrom1
Instances
SqlFrom SqlDelete Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder | |
SqlFrom SqlInsertSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlFrom1 :: SqlInsertSelect -> SQL -> SqlInsertSelect | |
SqlFrom SqlSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder | |
SqlFrom SqlUpdate Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder |
Minimal complete definition
sqlWhere1, sqlGetWhereConditions
Instances
Minimal complete definition
sqlWith1
class SqlOrderBy a Source #
Minimal complete definition
sqlOrderBy1
Instances
SqlOrderBy SqlInsertSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlOrderBy1 :: SqlInsertSelect -> SQL -> SqlInsertSelect | |
SqlOrderBy SqlSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlOrderBy1 :: SqlSelect -> SQL -> SqlSelect |
class SqlGroupByHaving a Source #
Minimal complete definition
sqlGroupBy1, sqlHaving1
Instances
SqlGroupByHaving SqlInsertSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlGroupBy1 :: SqlInsertSelect -> SQL -> SqlInsertSelect sqlHaving1 :: SqlInsertSelect -> SQL -> SqlInsertSelect | |
SqlGroupByHaving SqlSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder |
class SqlOffsetLimit a Source #
Minimal complete definition
sqlOffset1, sqlLimit1
Instances
SqlOffsetLimit SqlInsertSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlOffset1 :: SqlInsertSelect -> Integer -> SqlInsertSelect sqlLimit1 :: SqlInsertSelect -> Integer -> SqlInsertSelect | |
SqlOffsetLimit SqlSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder |
class SqlDistinct a Source #
Minimal complete definition
sqlDistinct1
Instances
SqlDistinct SqlInsertSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods | |
SqlDistinct SqlSelect Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods sqlDistinct1 :: SqlSelect -> SqlSelect |
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.
Constructors
SqlPlainCondition SQL | |
SqlExistsCondition SqlSelect |
Instances
Show SqlCondition Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods showsPrec :: Int -> SqlCondition -> ShowS # show :: SqlCondition -> String # showList :: [SqlCondition] -> ShowS # | |
Sqlable SqlCondition Source # | |
Defined in Database.PostgreSQL.PQTypes.SQL.Builder Methods toSQLCommand :: SqlCondition -> SQL Source # |
sqlGetWhereConditions :: SqlWhere a => a -> [SqlCondition] Source #
class Sqlable a where Source #
Methods
toSQLCommand :: a -> SQL Source #
Instances
sqlConcatComma :: [SQL] -> SQL Source #
sqlConcatAND :: [SQL] -> SQL Source #
sqlConcatOR :: [SQL] -> SQL Source #
parenthesize :: SQL -> SQL Source #