@@ -88,13 +88,13 @@ module Squeal.PostgreSQL.Expression
89 , charLength
89 , charLength
91− -- ** Json functions and operators
91+ -- ** Json
92 -- *** Json and Jsonb operators
92 -- *** Json and Jsonb operators
97− -- *** Additional Jsonb operators
97+ -- *** Jsonb operators
@@ -102,7 +102,7 @@ module Squeal.PostgreSQL.Expression
105− -- *** Json creation functions
105+ -- *** functions
106 , jsonLit
106 , jsonLit
107 , jsonbLit
107 , jsonbLit
@@ -443,9 +443,11 @@ array
443array xs = UnsafeExpression $
443array xs = UnsafeExpression $
444 "ARRAY[" <> commaSeparated (renderExpression <$> xs) <> "]"
444 "ARRAY[" <> commaSeparated (renderExpression <$> xs) <> "]"
446+-- | >>> printSQL $ array [null_, false, true] & index 2
447+-- (ARRAY[NULL, FALSE, TRUE])[2]
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)
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)
480+-- type Complex = 'PGcomposite
481+-- '[ "real" ::: 'NotNull 'PGfloat8
482+-- , "imaginary" ::: 'NotNull 'PGfloat8 ]
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"
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
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)
1627+-- | The enum or composite type in a `Typedef` can be expressed by its alias.
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
1634+-- | The composite type corresponding to a `Table` definition can be expressed
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
1642+-- | The composite type corresponding to a `View` definition can be expressed
1627 :: Has alias schema ('View view)
1645 :: Has alias schema ('View view)
1628 => Alias alias
1646 => Alias alias