on dev help sign in
Expression haddocks
be9a7a9Eitan Chatav
squeal-postgresql/src/Squeal/PostgreSQL/Expression.hs+31−13
@@ -88,13 +88,13 @@ module Squeal.PostgreSQL.Expression
88 , upper
88 , upper
89 , charLength
89 , charLength
90 , like
90 , like
91− -- ** Json functions and operators
91+ -- ** Json
92 -- *** Json and Jsonb operators
92 -- *** Json and Jsonb operators
93 , (.->)
93 , (.->)
94 , (.->>)
94 , (.->>)
95 , (.#>)
95 , (.#>)
96 , (.#>>)
96 , (.#>>)
97− -- *** Additional Jsonb operators
97+ -- *** Jsonb operators
98 , (.@>)
98 , (.@>)
99 , (.<@)
99 , (.<@)
100 , (.?)
100 , (.?)
@@ -102,7 +102,7 @@ module Squeal.PostgreSQL.Expression
102 , (.?&)
102 , (.?&)
103 , (.-.)
103 , (.-.)
104 , (#-.)
104 , (#-.)
105− -- *** Json creation functions
105+ -- *** functions
106 , jsonLit
106 , jsonLit
107 , jsonbLit
107 , jsonbLit
108 , toJson
108 , toJson
@@ -443,9 +443,11 @@ array
443array xs = UnsafeExpression $
443array xs = UnsafeExpression $
444 "ARRAY[" <> commaSeparated (renderExpression <$> xs) <> "]"
444 "ARRAY[" <> commaSeparated (renderExpression <$> xs) <> "]"
445
445
446+-- | >>> printSQL $ array [null_, false, true] & index 2
447+-- (ARRAY[NULL, FALSE, TRUE])[2]
446index
448index
447− :: Word64
449+ :: Word64 -- ^ index
448− -> Expression schema from grouping params (nullity ('PGvararray ty))
450+ -> Expression schema from grouping params (nullity ('PGvararray ty)) -- ^ array
449 -> Expression schema from grouping params (NullifyType ty)
451 -> Expression schema from grouping params (NullifyType ty)
450index n expr = UnsafeExpression $
452index n expr = UnsafeExpression $
451 parenthesized (renderExpression expr) <> "[" <> fromString (show n) <> "]"
453 parenthesized (renderExpression expr) <> "[" <> fromString (show n) <> "]"
@@ -467,20 +469,31 @@ instance (KnownSymbol label, label `In` labels) => IsPGlabel label
467-- >>> printSQL i
469-- >>> printSQL i
468-- ROW(0, 1)
470-- ROW(0, 1)
469row
471row
470− :: SListI fields
472+ :: SListI row
471− => NP (Aliased (Expression schema from grouping params)) fields
473+ => NP (Aliased (Expression schema from grouping params)) row
472 -- ^ zero or more expressions for the row field values
474 -- ^ zero or more expressions for the row field values
473− -> Expression schema from grouping params (nullity ('PGcomposite fields))
475+ -> Expression schema from grouping params (nullity ('PGcomposite row))
474row exprs = UnsafeExpression $ "ROW" <> parenthesized
476row exprs = UnsafeExpression $ "ROW" <> parenthesized
475 (renderCommaSeparated (\ (expr `As` _) -> renderExpression expr) exprs)
477 (renderCommaSeparated (\ (expr `As` _) -> renderExpression expr) exprs)
476
478
479+-- | >>> :{
480+-- type Complex = 'PGcomposite
481+-- '[ "real" ::: 'NotNull 'PGfloat8
482+-- , "imaginary" ::: 'NotNull 'PGfloat8 ]
483+-- :}
484+--
485+-- >>> let i = row (0 `as` #real :* 1 `as` #imaginary) :: Expression '["complex" ::: 'Typedef Complex] '[] 'Ungrouped '[] ('NotNull Complex)
486+-- >>> printSQL $ i & field #complex #imaginary
487+-- (ROW(0, 1)::"complex")."imaginary"
477field
488field
478− :: forall field fields ty schema from grouping params. Has field fields ty
489+ :: (Has tydef schema ('Typedef ('PGcomposite row)), Has field row ty)
490+ => Alias tydef -- ^ row type
491+ -> Alias field -- ^ field name
479− => Expression schema from grouping params ('NotNull ('PGcomposite fields))
492+ -> Expression schema from grouping params ('NotNull ('PGcomposite row))
480 -> Expression schema from grouping params ty
493 -> Expression schema from grouping params ty
481−field expr = UnsafeExpression $
494+field td fld expr = UnsafeExpression $
482− parenthesized (renderExpression expr) <> "." <>
495+ parenthesized (renderExpression expr <> "::" <> renderAlias td)
483− renderSymbol @field
496+ <> "." <> renderAlias fld
484
497
485instance Semigroup
498instance Semigroup
486 (Expression schema from grouping params (nullity ('PGvararray ty))) where
499 (Expression schema from grouping params (nullity ('PGvararray ty))) where
@@ -1611,18 +1624,23 @@ newtype TypeExpression (schema :: SchemaType) (ty :: NullityType)
1611 = UnsafeTypeExpression { renderTypeExpression :: ByteString }
1624 = UnsafeTypeExpression { renderTypeExpression :: ByteString }
1612 deriving (GHC.Generic,Show,Eq,Ord,NFData)
1625 deriving (GHC.Generic,Show,Eq,Ord,NFData)
1613
1626
1627+-- | The enum or composite type in a `Typedef` can be expressed by its alias.
1614typedef
1628typedef
1615 :: Has alias schema ('Typedef ty)
1629 :: Has alias schema ('Typedef ty)
1616 => Alias alias
1630 => Alias alias
1617 -> TypeExpression schema (nullity ty)
1631 -> TypeExpression schema (nullity ty)
1618typedef = UnsafeTypeExpression . renderAlias
1632typedef = UnsafeTypeExpression . renderAlias
1619
1633
1634+-- | The composite type corresponding to a `Table` definition can be expressed
1635+-- by its alias.
1620typetable
1636typetable
1621 :: Has alias schema ('Table tab)
1637 :: Has alias schema ('Table tab)
1622 => Alias alias
1638 => Alias alias
1623 -> TypeExpression schema (nullity ('PGcomposite (TableToRow tab)))
1639 -> TypeExpression schema (nullity ('PGcomposite (TableToRow tab)))
1624typetable = UnsafeTypeExpression . renderAlias
1640typetable = UnsafeTypeExpression . renderAlias
1625
1641
1642+-- | The composite type corresponding to a `View` definition can be expressed
1643+-- by its alias.
1626typeview
1644typeview
1627 :: Has alias schema ('View view)
1645 :: Has alias schema ('View view)
1628 => Alias alias
1646 => Alias alias