| Copyright | (c) Eitan Chatav 2019 |
|---|---|
| Maintainer | eitan@morphism.tech |
| Stability | experimental |
| Safe Haskell | None |
| Language | Haskell2010 |
Squeal.PostgreSQL.Alias
Contents
Description
This module embeds Postgres's alias system in Haskell in
a typesafe fashion. Thanks to GHC's OverloadedLabels extension,
Squeal can reference aliases by prepending with a #.
Synopsis
- type (:::) (alias :: Symbol) ty = '(alias, ty)
- data Alias (alias :: Symbol) = Alias
- class IsLabel (x :: Symbol) a where
- fromLabel :: a
- data Aliased expression aliased where
- As :: KnownSymbol alias => expression ty -> Alias alias -> Aliased expression (alias ::: ty)
- class KnownSymbol alias => Aliasable alias expression aliased | aliased -> expression, aliased -> alias where
- renderAliased :: (forall ty. expression ty -> ByteString) -> Aliased expression aliased -> ByteString
- class KnownSymbol alias => Has (alias :: Symbol) (fields :: [(Symbol, kind)]) (field :: kind) | alias fields -> field
- type HasUnique alias fields field = fields ~ '[alias ::: field]
- class All KnownSymbol aliases => HasAll (aliases :: [Symbol]) (fields :: [(Symbol, kind)]) (subfields :: [(Symbol, kind)]) | aliases fields -> subfields
- class HasIn fields field
- data QualifiedAlias (qualifier :: Symbol) (alias :: Symbol) = QualifiedAlias
- class IsQualified table column expression where
- data Grouping
- class (KnownSymbol table, KnownSymbol column) => GroupedBy table column bys
Documentation
data Alias (alias :: Symbol) Source #
Aliases are proxies for a type level string or Symbol
and have an IsLabel instance so that with -XOverloadedLabels
>>>:set -XOverloadedLabels>>>#foobar :: Alias "foobar"Alias
Constructors
| Alias |
Instances
| IsQualified table column (Alias table, Alias column) Source # | |
| alias1 ~ alias2 => IsLabel alias1 (Alias alias2) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| (alias0 ~ alias1, alias0 ~ alias2, KnownSymbol alias2) => IsLabel alias0 (Aliased Alias (alias1 ::: alias2)) Source # | |
| aliases ~ (alias ': ([] :: [Symbol])) => IsLabel alias (NP Alias aliases) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| Eq (Alias alias) Source # | |
| Ord (Alias alias) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| Show (Alias alias) Source # | |
| Generic (Alias alias) Source # | |
| NFData (Alias alias) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| KnownSymbol alias => RenderSQL (Alias alias) Source # |
|
Defined in Squeal.PostgreSQL.Alias Methods renderSQL :: Alias alias -> ByteString Source # | |
| All KnownSymbol aliases => RenderSQL (NP Alias aliases) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| type Rep (Alias alias) Source # | |
class IsLabel (x :: Symbol) a where #
Instances
| alias1 ~ alias2 => IsLabel alias1 (Alias alias2) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| (q' ~ "public", a ~ a') => IsLabel a (QualifiedAlias q' a') Source # | |
Defined in Squeal.PostgreSQL.Alias Methods fromLabel :: QualifiedAlias q' a' # | |
| (HasUnique rel rels cols, Has col cols ty, by ~ (,) rel col) => IsLabel col (By rels by) Source # | |
Defined in Squeal.PostgreSQL.Query | |
| (q ~ "public", a0 ~ a1, a1 ~ a2, KnownSymbol a2) => IsLabel a0 (Aliased (QualifiedAlias q) (a1 ::: a2)) Source # | |
Defined in Squeal.PostgreSQL.Alias Methods fromLabel :: Aliased (QualifiedAlias q) (a1 ::: a2) # | |
| (alias0 ~ alias1, alias0 ~ alias2, KnownSymbol alias2) => IsLabel alias0 (Aliased Alias (alias1 ::: alias2)) Source # | |
| aliases ~ (alias ': ([] :: [Symbol])) => IsLabel alias (NP Alias aliases) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| (HasUnique tab (Join outer from) row, Has col row ty, GroupedBy tab col bys, columns ~ ((col ::: ty) ': ([] :: [(Symbol, NullityType)]))) => IsLabel col (NP (Aliased (Expression outer commons (Grouped bys) schemas params from)) columns) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (HasUnique tab (Join outer from) row, Has col row ty, GroupedBy tab col bys, column ~ (col ::: ty)) => IsLabel col (Aliased (Expression outer commons (Grouped bys) schemas params from) column) Source # | |
Defined in Squeal.PostgreSQL.Expression Methods fromLabel :: Aliased (Expression outer commons (Grouped bys) schemas params from) column # | |
| (HasUnique tab (Join outer from) row, Has col row ty, GroupedBy tab col bys, tys ~ (ty ': ([] :: [NullityType]))) => IsLabel col (NP (Expression outer commons (Grouped bys) schemas params from) tys) Source # | |
Defined in Squeal.PostgreSQL.Expression Methods fromLabel :: NP (Expression outer commons (Grouped bys) schemas params from) tys # | |
| (HasUnique tab (Join outer from) row, Has col row ty, columns ~ ((col ::: ty) ': ([] :: [(Symbol, NullityType)]))) => IsLabel col (NP (Aliased (Expression outer commons Ungrouped schemas params from)) columns) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (HasUnique tab (Join outer from) row, Has col row ty, column ~ (col ::: ty)) => IsLabel col (Aliased (Expression outer commons Ungrouped schemas params from) column) Source # | |
Defined in Squeal.PostgreSQL.Expression Methods fromLabel :: Aliased (Expression outer commons Ungrouped schemas params from) column # | |
| (HasUnique tab (Join outer from) row, Has col row ty, tys ~ (ty ': ([] :: [NullityType]))) => IsLabel col (NP (Expression outer commons Ungrouped schemas params from) tys) Source # | |
Defined in Squeal.PostgreSQL.Expression Methods fromLabel :: NP (Expression outer commons Ungrouped schemas params from) tys # | |
| (HasUnique rel rels cols, Has col cols ty, bys ~ ((,) rel col ': ([] :: [(Symbol, Symbol)]))) => IsLabel col (NP (By rels) bys) Source # | |
Defined in Squeal.PostgreSQL.Query | |
| (HasUnique tab (Join outer from) row, Has col row ty, GroupedBy tab col bys) => IsLabel col (Expression outer commons (Grouped bys) schemas params from ty) Source # | |
Defined in Squeal.PostgreSQL.Expression Methods fromLabel :: Expression outer commons (Grouped bys) schemas params from ty # | |
| (HasUnique tab (Join outer from) row, Has col row ty) => IsLabel col (Expression outer commons Ungrouped schemas params from ty) Source # | |
Defined in Squeal.PostgreSQL.Expression Methods fromLabel :: Expression outer commons Ungrouped schemas params from ty # | |
| (HasUnique tab (Join outer from) row0, Has col row0 ty, row1 ~ ((col ::: ty) ': ([] :: [(Symbol, NullityType)])), GroupedBy tab col bys) => IsLabel col (Selection outer commons (Grouped bys) schemas params from row1) Source # | |
Defined in Squeal.PostgreSQL.Query | |
| (HasUnique tab (Join outer from) row0, Has col row0 ty, row1 ~ ((col ::: ty) ': ([] :: [(Symbol, NullityType)]))) => IsLabel col (Selection outer commons Ungrouped schemas params from row1) Source # | |
Defined in Squeal.PostgreSQL.Query | |
data Aliased expression aliased where Source #
The As operator is used to name an expression. As is like a demoted
version of :::.
>>>Just "hello" `As` #hi :: Aliased Maybe ("hi" ::: String)As (Just "hello") Alias
Constructors
| As :: KnownSymbol alias => expression ty -> Alias alias -> Aliased expression (alias ::: ty) |
Instances
| (q0 ~ q1, a0 ~ a1, a1 ~ a2, KnownSymbol a2) => IsQualified q0 a0 (Aliased (QualifiedAlias q1) (a1 ::: a2)) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| (Has tab (Join outer from) row, Has col row ty, GroupedBy tab col bys, columns ~ ((col ::: ty) ': ([] :: [(Symbol, NullityType)]))) => IsQualified tab col (NP (Aliased (Expression outer commons (Grouped bys) schemas params from)) columns) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (Has tab (Join outer from) row, Has col row ty, GroupedBy tab col bys, column ~ (col ::: ty)) => IsQualified tab col (Aliased (Expression outer commons (Grouped bys) schemas params from) column) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (Has tab (Join outer from) row, Has col row ty, columns ~ ((col ::: ty) ': ([] :: [(Symbol, NullityType)]))) => IsQualified tab col (NP (Aliased (Expression outer commons Ungrouped schemas params from)) columns) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (Has tab (Join outer from) row, Has col row ty, column ~ (col ::: ty)) => IsQualified tab col (Aliased (Expression outer commons Ungrouped schemas params from) column) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (KnownSymbol alias, tys ~ ((alias ::: ty) ': ([] :: [(Symbol, k)]))) => Aliasable alias (expression ty) (NP (Aliased expression) tys) Source # | |
| (KnownSymbol alias, aliased ~ (alias ::: ty)) => Aliasable alias (expression ty) (Aliased expression aliased) Source # | |
| (q ~ "public", a0 ~ a1, a1 ~ a2, KnownSymbol a2) => IsLabel a0 (Aliased (QualifiedAlias q) (a1 ::: a2)) Source # | |
Defined in Squeal.PostgreSQL.Alias Methods fromLabel :: Aliased (QualifiedAlias q) (a1 ::: a2) # | |
| (alias0 ~ alias1, alias0 ~ alias2, KnownSymbol alias2) => IsLabel alias0 (Aliased Alias (alias1 ::: alias2)) Source # | |
| (HasUnique tab (Join outer from) row, Has col row ty, GroupedBy tab col bys, columns ~ ((col ::: ty) ': ([] :: [(Symbol, NullityType)]))) => IsLabel col (NP (Aliased (Expression outer commons (Grouped bys) schemas params from)) columns) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (HasUnique tab (Join outer from) row, Has col row ty, GroupedBy tab col bys, column ~ (col ::: ty)) => IsLabel col (Aliased (Expression outer commons (Grouped bys) schemas params from) column) Source # | |
Defined in Squeal.PostgreSQL.Expression Methods fromLabel :: Aliased (Expression outer commons (Grouped bys) schemas params from) column # | |
| (HasUnique tab (Join outer from) row, Has col row ty, columns ~ ((col ::: ty) ': ([] :: [(Symbol, NullityType)]))) => IsLabel col (NP (Aliased (Expression outer commons Ungrouped schemas params from)) columns) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (HasUnique tab (Join outer from) row, Has col row ty, column ~ (col ::: ty)) => IsLabel col (Aliased (Expression outer commons Ungrouped schemas params from) column) Source # | |
Defined in Squeal.PostgreSQL.Expression Methods fromLabel :: Aliased (Expression outer commons Ungrouped schemas params from) column # | |
| Eq (expression ty) => Eq (Aliased expression (alias ::: ty)) Source # | |
| Ord (expression ty) => Ord (Aliased expression (alias ::: ty)) Source # | |
Defined in Squeal.PostgreSQL.Alias Methods compare :: Aliased expression (alias ::: ty) -> Aliased expression (alias ::: ty) -> Ordering # (<) :: Aliased expression (alias ::: ty) -> Aliased expression (alias ::: ty) -> Bool # (<=) :: Aliased expression (alias ::: ty) -> Aliased expression (alias ::: ty) -> Bool # (>) :: Aliased expression (alias ::: ty) -> Aliased expression (alias ::: ty) -> Bool # (>=) :: Aliased expression (alias ::: ty) -> Aliased expression (alias ::: ty) -> Bool # max :: Aliased expression (alias ::: ty) -> Aliased expression (alias ::: ty) -> Aliased expression (alias ::: ty) # min :: Aliased expression (alias ::: ty) -> Aliased expression (alias ::: ty) -> Aliased expression (alias ::: ty) # | |
| Show (expression ty) => Show (Aliased expression (alias ::: ty)) Source # | |
class KnownSymbol alias => Aliasable alias expression aliased | aliased -> expression, aliased -> alias where Source #
Instances
| (KnownSymbol alias, tys ~ ((alias ::: ty) ': ([] :: [(Symbol, k)]))) => Aliasable alias (expression ty) (NP (Aliased expression) tys) Source # | |
| (KnownSymbol alias, aliased ~ (alias ::: ty)) => Aliasable alias (expression ty) (Aliased expression aliased) Source # | |
| (KnownSymbol cte, commons1 ~ ((cte ::: common) ': commons)) => Aliasable cte (statement commons schemas params common) (AlignedList (CommonTableExpression statement schemas params) commons commons1) Source # | |
Defined in Squeal.PostgreSQL.Query Methods as :: statement commons schemas params common -> Alias cte -> AlignedList (CommonTableExpression statement schemas params) commons commons1 Source # | |
| (KnownSymbol cte, commons1 ~ ((cte ::: common) ': commons)) => Aliasable cte (statement commons schemas params common) (CommonTableExpression statement schemas params commons commons1) Source # | |
Defined in Squeal.PostgreSQL.Query Methods as :: statement commons schemas params common -> Alias cte -> CommonTableExpression statement schemas params commons commons1 Source # | |
| (KnownSymbol col, row ~ ((col ::: ty) ': ([] :: [(Symbol, NullityType)]))) => Aliasable col (Expression outer commons grp schemas params from ty) (Selection outer commons grp schemas params from row) Source # | |
Defined in Squeal.PostgreSQL.Query | |
renderAliased :: (forall ty. expression ty -> ByteString) -> Aliased expression aliased -> ByteString Source #
>>>let renderMaybe = fromString . maybe "Nothing" (const "Just")>>>renderAliased renderMaybe (Just (3::Int) `As` #an_int)"Just AS \"an_int\""
class KnownSymbol alias => Has (alias :: Symbol) (fields :: [(Symbol, kind)]) (field :: kind) | alias fields -> field Source #
Has alias fields field is a constraint that proves that
fields has a field of alias ::: field, inferring field
from alias and fields.
Instances
| (KnownSymbol alias, Has alias fields field) => Has alias (field' ': fields :: [(Symbol, kind)]) (field :: kind) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| KnownSymbol alias => Has alias ((alias ::: field) ': fields :: [(Symbol, kind)]) (field :: kind) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
type HasUnique alias fields field = fields ~ '[alias ::: field] Source #
HasUnique alias fields field is a constraint that proves that
fields is a singleton of alias ::: field.
class All KnownSymbol aliases => HasAll (aliases :: [Symbol]) (fields :: [(Symbol, kind)]) (subfields :: [(Symbol, kind)]) | aliases fields -> subfields Source #
Instances
| HasAll ([] :: [Symbol]) (fields :: [(Symbol, kind)]) ([] :: [(Symbol, kind)]) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| (Has alias fields field, HasAll aliases fields subfields) => HasAll (alias ': aliases) (fields :: [(Symbol, k)]) ((alias ::: field) ': subfields :: [(Symbol, k)]) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
class HasIn fields field Source #
HasIn fields (alias ::: field) is a constraint that proves that
fields has a field of alias ::: field. It is used in UPDATEs to
choose which subfields to update.
data QualifiedAlias (qualifier :: Symbol) (alias :: Symbol) Source #
QualifiedAliases enables multi-schema support by allowing a reference
to a Table, Typedef
or View to be qualified by their schemas. By default,
a qualifier of public is provided.
>>>:{let alias1 :: QualifiedAlias "sch" "tab" alias1 = #sch ! #tab alias2 :: QualifiedAlias "public" "vw" alias2 = #vw in printSQL alias1 >> printSQL alias2 :} "sch"."tab" "vw"
Constructors
| QualifiedAlias |
Instances
| (q ~ q', a ~ a') => IsQualified q a (QualifiedAlias q' a') Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| (q0 ~ q1, a0 ~ a1, a1 ~ a2, KnownSymbol a2) => IsQualified q0 a0 (Aliased (QualifiedAlias q1) (a1 ::: a2)) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| (q' ~ "public", a ~ a') => IsLabel a (QualifiedAlias q' a') Source # | |
Defined in Squeal.PostgreSQL.Alias Methods fromLabel :: QualifiedAlias q' a' # | |
| (q ~ "public", a0 ~ a1, a1 ~ a2, KnownSymbol a2) => IsLabel a0 (Aliased (QualifiedAlias q) (a1 ::: a2)) Source # | |
Defined in Squeal.PostgreSQL.Alias Methods fromLabel :: Aliased (QualifiedAlias q) (a1 ::: a2) # | |
| Eq (QualifiedAlias qualifier alias) Source # | |
Defined in Squeal.PostgreSQL.Alias Methods (==) :: QualifiedAlias qualifier alias -> QualifiedAlias qualifier alias -> Bool # (/=) :: QualifiedAlias qualifier alias -> QualifiedAlias qualifier alias -> Bool # | |
| Ord (QualifiedAlias qualifier alias) Source # | |
Defined in Squeal.PostgreSQL.Alias Methods compare :: QualifiedAlias qualifier alias -> QualifiedAlias qualifier alias -> Ordering # (<) :: QualifiedAlias qualifier alias -> QualifiedAlias qualifier alias -> Bool # (<=) :: QualifiedAlias qualifier alias -> QualifiedAlias qualifier alias -> Bool # (>) :: QualifiedAlias qualifier alias -> QualifiedAlias qualifier alias -> Bool # (>=) :: QualifiedAlias qualifier alias -> QualifiedAlias qualifier alias -> Bool # max :: QualifiedAlias qualifier alias -> QualifiedAlias qualifier alias -> QualifiedAlias qualifier alias # min :: QualifiedAlias qualifier alias -> QualifiedAlias qualifier alias -> QualifiedAlias qualifier alias # | |
| Show (QualifiedAlias qualifier alias) Source # | |
Defined in Squeal.PostgreSQL.Alias Methods showsPrec :: Int -> QualifiedAlias qualifier alias -> ShowS # show :: QualifiedAlias qualifier alias -> String # showList :: [QualifiedAlias qualifier alias] -> ShowS # | |
| Generic (QualifiedAlias qualifier alias) Source # | |
Defined in Squeal.PostgreSQL.Alias Associated Types type Rep (QualifiedAlias qualifier alias) :: Type -> Type # Methods from :: QualifiedAlias qualifier alias -> Rep (QualifiedAlias qualifier alias) x # to :: Rep (QualifiedAlias qualifier alias) x -> QualifiedAlias qualifier alias # | |
| NFData (QualifiedAlias qualifier alias) Source # | |
Defined in Squeal.PostgreSQL.Alias Methods rnf :: QualifiedAlias qualifier alias -> () # | |
| (KnownSymbol q, KnownSymbol a) => RenderSQL (QualifiedAlias q a) Source # | |
Defined in Squeal.PostgreSQL.Alias Methods renderSQL :: QualifiedAlias q a -> ByteString Source # | |
| type Rep (QualifiedAlias qualifier alias) Source # | |
class IsQualified table column expression where Source #
Analagous to IsLabel, the constraint
IsQualified defines ! for a column alias qualified
by a table alias.
Instances
| (q ~ q', a ~ a') => IsQualified q a (QualifiedAlias q' a') Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| IsQualified table column (Alias table, Alias column) Source # | |
| (Has rel rels cols, Has col cols ty, by ~ (,) rel col) => IsQualified rel col (By rels by) Source # | |
| (q0 ~ q1, a0 ~ a1, a1 ~ a2, KnownSymbol a2) => IsQualified q0 a0 (Aliased (QualifiedAlias q1) (a1 ::: a2)) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| (Has tab (Join outer from) row, Has col row ty, GroupedBy tab col bys, columns ~ ((col ::: ty) ': ([] :: [(Symbol, NullityType)]))) => IsQualified tab col (NP (Aliased (Expression outer commons (Grouped bys) schemas params from)) columns) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (Has tab (Join outer from) row, Has col row ty, GroupedBy tab col bys, column ~ (col ::: ty)) => IsQualified tab col (Aliased (Expression outer commons (Grouped bys) schemas params from) column) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (Has tab (Join outer from) row, Has col row ty, GroupedBy tab col bys, tys ~ (ty ': ([] :: [NullityType]))) => IsQualified tab col (NP (Expression outer commons (Grouped bys) schemas params from) tys) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (Has tab (Join outer from) row, Has col row ty, columns ~ ((col ::: ty) ': ([] :: [(Symbol, NullityType)]))) => IsQualified tab col (NP (Aliased (Expression outer commons Ungrouped schemas params from)) columns) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (Has tab (Join outer from) row, Has col row ty, column ~ (col ::: ty)) => IsQualified tab col (Aliased (Expression outer commons Ungrouped schemas params from) column) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (Has tab (Join outer from) row, Has col row ty, tys ~ (ty ': ([] :: [NullityType]))) => IsQualified tab col (NP (Expression outer commons Ungrouped schemas params from) tys) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (Has rel rels cols, Has col cols ty, bys ~ ((,) rel col ': ([] :: [(Symbol, Symbol)]))) => IsQualified rel col (NP (By rels) bys) Source # | |
| (Has tab (Join outer from) row, Has col row ty, GroupedBy tab col bys) => IsQualified tab col (Expression outer commons (Grouped bys) schemas params from ty) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (Has tab (Join outer from) row, Has col row ty) => IsQualified tab col (Expression outer commons Ungrouped schemas params from ty) Source # | |
Defined in Squeal.PostgreSQL.Expression | |
| (Has tab (Join outer from) row0, Has col row0 ty, row1 ~ ((col ::: ty) ': ([] :: [(Symbol, NullityType)])), GroupedBy tab col bys) => IsQualified tab col (Selection outer commons (Grouped bys) schemas params from row1) Source # | |
| (Has tab (Join outer from) row0, Has col row0 ty, row1 ~ ((col ::: ty) ': ([] :: [(Symbol, NullityType)]))) => IsQualified tab col (Selection outer commons Ungrouped schemas params from row1) Source # | |
Grouping
class (KnownSymbol table, KnownSymbol column) => GroupedBy table column bys Source #
A GroupedBy constraint indicates that a table qualified column is
a member of the auxiliary namespace created by GROUP BY clauses and thus,
may be called in an output Expression without aggregating.
Instances
| (KnownSymbol table, KnownSymbol column) => GroupedBy table column ((,) table column ': bys :: [(Symbol, Symbol)]) Source # | |
Defined in Squeal.PostgreSQL.Alias | |
| (KnownSymbol table, KnownSymbol column, GroupedBy table column bys) => GroupedBy table column (tabcol ': bys :: [a]) Source # | |
Defined in Squeal.PostgreSQL.Alias | |