on dev help sign in
functional aliases

functional aliases

commit2cc1ff1b74c50be34a70843709e23e91e64ae95c authorEitan Chatav <eitan.chatav@gmail.com> dateSun 24 Dec 2017, 12:58 (9 years ago) parent44aa842
4 files changed+17−14
squeal-postgresql/exe/Example.hs+5−5 squeal-postgresql/src/Squeal/PostgreSQL/Manipulation.hs+1−1 squeal-postgresql/src/Squeal/PostgreSQL/Query.hs+4−4 squeal-postgresql/src/Squeal/PostgreSQL/Schema.hs+7−4
squeal-postgresql/exe/Example.hs+5−5
@@ -42,14 +42,14 @@ type Schema =
4242setup :: Definition '[] Schema
4343setup =
4444 createTable #users
45− ( serial `As` #id :*
46− (text & notNull) `As` #name :* Nil )
45+ ( #id serial :*
46+ #name (text & notNull) :* Nil )
4747 ( primaryKey (Column #id :* Nil) `As` #pk_id :* Nil )
4848 >>>
4949 createTable #emails
50− ( serial `As` #id :*
51− (int & notNull) `As` #user_id :*
52− text `As` #email :* Nil )
50+ ( #id serial :*
51+ #user_id (int & notNull) :*
52+ #email text :* Nil )
5353 ( primaryKey (Column #id :* Nil) `As` #pk_id :*
5454 foreignKey (Column #user_id :* Nil) #users (Column #id :* Nil)
5555 OnDeleteCascade OnUpdateCascade `As` #fk_user_id :* Nil )
squeal-postgresql/src/Squeal/PostgreSQL/Manipulation.hs+1−1
@@ -264,7 +264,7 @@ renderReturningClause = \case
264264 ReturningStar -> " RETURNING *;"
265265 Returning Nil -> ";"
266266 Returning results -> " RETURNING"
267− <+> renderCommaSeparated (renderAliased renderExpression) results <> ";"
267+ <+> renderCommaSeparated (renderAliasedAs renderExpression) results <> ";"
268268
269269-- | A `ConflictClause` specifies an action to perform upon a constraint
270270-- violation. `OnConflictDoRaise` will raise an error.
squeal-postgresql/src/Squeal/PostgreSQL/Query.hs+4−4
@@ -347,7 +347,7 @@ select
347347 -> Query schema params (column ': columns)
348348select list tabs = UnsafeQuery $
349349 "SELECT"
350− <+> renderCommaSeparated (renderAliased renderExpression) list
350+ <+> renderCommaSeparated (renderAliasedAs renderExpression) list
351351 <+> renderTableExpression tabs
352352
353353-- | After the select list has been processed, the result table can
@@ -361,7 +361,7 @@ selectDistinct
361361 -> Query schema params (column ': columns)
362362selectDistinct list tabs = UnsafeQuery $
363363 "SELECT DISTINCT"
364− <+> renderCommaSeparated (renderAliased renderExpression) list
364+ <+> renderCommaSeparated (renderAliasedAs renderExpression) list
365365 <+> renderTableExpression tabs
366366
367367-- | The simplest kind of query is `selectStar` which emits all columns
@@ -646,8 +646,8 @@ data FromClause schema params tables where
646646-- | Renders a `FromClause`.
647647renderFromClause :: FromClause schema params tables -> ByteString
648648renderFromClause = \case
649− Table table -> renderAliased renderTable table
650− Subquery selection -> renderAliased (parenthesized . renderQuery) selection
649+ Table table -> renderAliasedAs renderTable table
650+ Subquery selection -> renderAliasedAs (parenthesized . renderQuery) selection
651651 CrossJoin right left ->
652652 renderFromClause left <+> "CROSS JOIN" <+> renderFromClause right
653653 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
5252 , Alias (Alias)
5353 , renderAlias
5454 , Aliased (As)
55− , renderAliased
55+ , renderAliasedAs
5656 , IsLabel (..)
5757 , IsTableColumn (..)
5858 -- * Type Families
@@ -223,15 +223,18 @@ deriving instance Eq (expression ty)
223223 => Eq (Aliased expression (alias ::: ty))
224224deriving instance Ord (expression ty)
225225 => 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
226229
227230-- | >>> 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)
229232-- "Just AS an_int"
230−renderAliased
233+renderAliasedAs
231234 :: (forall ty. expression ty -> ByteString)
232235 -> Aliased expression aliased
233236 -> ByteString
234−renderAliased render (expression `As` alias) =
237+renderAliasedAs render (expression `As` alias) =
235238 render expression <> " AS " <> renderAlias alias
236239
237240-- | Analagous to `IsLabel`, the constraint