on dev help sign in
functional aliases
2cc1ff1Eitan Chatav
squeal-postgresql/exe/Example.hs+5−5
@@ -42,14 +42,14 @@ type Schema =
42setup :: Definition '[] Schema
42setup :: Definition '[] Schema
43setup =
43setup =
44 createTable #users
44 createTable #users
45− ( serial `As` #id :*
45+ ( #id serial :*
46− (text & notNull) `As` #name :* Nil )
46+ #name (text & notNull) :* Nil )
47 ( primaryKey (Column #id :* Nil) `As` #pk_id :* Nil )
47 ( primaryKey (Column #id :* Nil) `As` #pk_id :* Nil )
48 >>>
48 >>>
49 createTable #emails
49 createTable #emails
50− ( serial `As` #id :*
50+ ( #id serial :*
51− (int & notNull) `As` #user_id :*
51+ #user_id (int & notNull) :*
52− text `As` #email :* Nil )
52+ #email text :* Nil )
53 ( primaryKey (Column #id :* Nil) `As` #pk_id :*
53 ( primaryKey (Column #id :* Nil) `As` #pk_id :*
54 foreignKey (Column #user_id :* Nil) #users (Column #id :* Nil)
54 foreignKey (Column #user_id :* Nil) #users (Column #id :* Nil)
55 OnDeleteCascade OnUpdateCascade `As` #fk_user_id :* Nil )
55 OnDeleteCascade OnUpdateCascade `As` #fk_user_id :* Nil )
squeal-postgresql/src/Squeal/PostgreSQL/Manipulation.hs+1−1
@@ -264,7 +264,7 @@ renderReturningClause = \case
264 ReturningStar -> " RETURNING *;"
264 ReturningStar -> " RETURNING *;"
265 Returning Nil -> ";"
265 Returning Nil -> ";"
266 Returning results -> " RETURNING"
266 Returning results -> " RETURNING"
267− <+> renderCommaSeparated (renderAliased renderExpression) results <> ";"
267+ <+> renderCommaSeparated (renderAliasedAs renderExpression) results <> ";"
268
268
269-- | A `ConflictClause` specifies an action to perform upon a constraint
269-- | A `ConflictClause` specifies an action to perform upon a constraint
270-- violation. `OnConflictDoRaise` will raise an error.
270-- violation. `OnConflictDoRaise` will raise an error.
squeal-postgresql/src/Squeal/PostgreSQL/Query.hs+4−4
@@ -347,7 +347,7 @@ select
347 -> Query schema params (column ': columns)
347 -> Query schema params (column ': columns)
348select list tabs = UnsafeQuery $
348select list tabs = UnsafeQuery $
349 "SELECT"
349 "SELECT"
350− <+> renderCommaSeparated (renderAliased renderExpression) list
350+ <+> renderCommaSeparated (renderAliasedAs renderExpression) list
351 <+> renderTableExpression tabs
351 <+> renderTableExpression tabs
352
352
353-- | After the select list has been processed, the result table can
353-- | After the select list has been processed, the result table can
@@ -361,7 +361,7 @@ selectDistinct
361 -> Query schema params (column ': columns)
361 -> Query schema params (column ': columns)
362selectDistinct list tabs = UnsafeQuery $
362selectDistinct list tabs = UnsafeQuery $
363 "SELECT DISTINCT"
363 "SELECT DISTINCT"
364− <+> renderCommaSeparated (renderAliased renderExpression) list
364+ <+> renderCommaSeparated (renderAliasedAs renderExpression) list
365 <+> renderTableExpression tabs
365 <+> renderTableExpression tabs
366
366
367-- | The simplest kind of query is `selectStar` which emits all columns
367-- | The simplest kind of query is `selectStar` which emits all columns
@@ -646,8 +646,8 @@ data FromClause schema params tables where
646-- | Renders a `FromClause`.
646-- | Renders a `FromClause`.
647renderFromClause :: FromClause schema params tables -> ByteString
647renderFromClause :: FromClause schema params tables -> ByteString
648renderFromClause = \case
648renderFromClause = \case
649− Table table -> renderAliased renderTable table
649+ Table table -> renderAliasedAs renderTable table
650− Subquery selection -> renderAliased (parenthesized . renderQuery) selection
650+ Subquery selection -> renderAliasedAs (parenthesized . renderQuery) selection
651 CrossJoin right left ->
651 CrossJoin right left ->
652 renderFromClause left <+> "CROSS JOIN" <+> renderFromClause right
652 renderFromClause left <+> "CROSS JOIN" <+> renderFromClause right
653 InnerJoin right on left -> renderJoin "INNER JOIN" right on left
653 InnerJoin right on left -> renderJoin "INNER JOIN" right on left
squeal-postgresql/src/Squeal/PostgreSQL/Schema.hs+7−4
@@ -52,7 +52,7 @@ module Squeal.PostgreSQL.Schema
52 , Alias (Alias)
52 , Alias (Alias)
53 , renderAlias
53 , renderAlias
54 , Aliased (As)
54 , Aliased (As)
55− , renderAliased
55+ , renderAliasedAs
56 , IsLabel (..)
56 , IsLabel (..)
57 , IsTableColumn (..)
57 , IsTableColumn (..)
58 -- * Type Families
58 -- * Type Families
@@ -223,15 +223,18 @@ deriving instance Eq (expression ty)
223 => Eq (Aliased expression (alias ::: ty))
223 => Eq (Aliased expression (alias ::: ty))
224deriving instance Ord (expression ty)
224deriving instance Ord (expression ty)
225 => Ord (Aliased expression (alias ::: ty))
225 => Ord (Aliased expression (alias ::: ty))
226+instance KnownSymbol alias
227+ => IsLabel alias (expression ty -> Aliased expression (alias ::: ty))
228+ where fromLabel = \ expression -> expression `As` Alias @alias
226
229
227-- | >>> let renderMaybe = fromString . maybe "Nothing" (const "Just")
230-- | >>> let renderMaybe = fromString . maybe "Nothing" (const "Just")
228−-- >>> renderAliased renderMaybe (Just (3::Int) `As` #an_int)
231+-- >>> renderAliasedAs renderMaybe (Just (3::Int) `As` #an_int)
229-- "Just AS an_int"
232-- "Just AS an_int"
230−renderAliased
233+renderAliasedAs
231 :: (forall ty. expression ty -> ByteString)
234 :: (forall ty. expression ty -> ByteString)
232 -> Aliased expression aliased
235 -> Aliased expression aliased
233 -> ByteString
236 -> ByteString
234−renderAliased render (expression `As` alias) =
237+renderAliasedAs render (expression `As` alias) =
235 render expression <> " AS " <> renderAlias alias
238 render expression <> " AS " <> renderAlias alias
236
239
237-- | Analagous to `IsLabel`, the constraint
240-- | Analagous to `IsLabel`, the constraint