@@ -381,16 +381,35 @@ infix 4 >*
381381
382382data SortExpression params tables grouping where
383383 Asc
384− :: Expression params tables grouping ty
384+ :: Expression params tables grouping ('Required ('NotNull ty))
385385 -> SortExpression params tables grouping
386386 Desc
387− :: Expression params tables grouping ty
387+ :: Expression params tables grouping ('Required ('NotNull ty))
388+ -> SortExpression params tables grouping
389+ AscNullsFirst
390+ :: Expression params tables grouping ('Required ('Null ty))
391+ -> SortExpression params tables grouping
392+ AscNullsLast
393+ :: Expression params tables grouping ('Required ('Null ty))
394+ -> SortExpression params tables grouping
395+ DescNullsFirst
396+ :: Expression params tables grouping ('Required ('Null ty))
397+ -> SortExpression params tables grouping
398+ DescNullsLast
399+ :: Expression params tables grouping ('Required ('Null ty))
388400 -> SortExpression params tables grouping
389401
390402renderSortExpression :: SortExpression params tables grouping -> ByteString
391403renderSortExpression = \case
392404 Asc expression -> renderExpression expression <+> "ASC"
393405 Desc expression -> renderExpression expression <+> "DESC"
406+ AscNullsFirst expression -> renderExpression expression
407+ <+> "ASC NULLS FIRST"
408+ DescNullsFirst expression -> renderExpression expression
409+ <+> "DESC NULLS FIRST"
410+ AscNullsLast expression -> renderExpression expression <+> "ASC NULLS LAST"
411+ DescNullsLast expression -> renderExpression expression <+> "DESC NULLS LAST"
412+
394413
395414{-----------------------------------------
396415aggregation
@@ -597,52 +616,52 @@ instance HasTable table schema columns
597616 => IsLabel table (Table schema columns) where
598617 fromLabel = getTable (Alias @table)
599618
600−data TableReference params schema tables where
619+data FromClause params schema tables where
601620 Table
602621 :: Aliased (Table schema) table
603− -> TableReference params schema '[table]
622+ -> FromClause params schema '[table]
604623 Subquery
605624 :: Aliased (Query schema params) table
606− -> TableReference params schema '[table]
625+ -> FromClause params schema '[table]
607626 CrossJoin
608− :: TableReference params schema right
609− -> TableReference params schema left
610− -> TableReference params schema (Join left right)
627+ :: FromClause params schema right
628+ -> FromClause params schema left
629+ -> FromClause params schema (Join left right)
611630 InnerJoin
612− :: TableReference params schema right
631+ :: FromClause params schema right
613632 -> Condition params (Join left right) 'Ungrouped
614− -> TableReference params schema left
615− -> TableReference params schema (Join left right)
633+ -> FromClause params schema left
634+ -> FromClause params schema (Join left right)
616635 LeftOuterJoin
617− :: TableReference params schema right
636+ :: FromClause params schema right
618637 -> Condition params (Join left right) 'Ungrouped
619− -> TableReference params schema left
620− -> TableReference params schema (Join left (NullifyTables right))
638+ -> FromClause params schema left
639+ -> FromClause params schema (Join left (NullifyTables right))
621640 RightOuterJoin
622− :: TableReference params schema right
641+ :: FromClause params schema right
623642 -> Condition params (Join left right) 'Ungrouped
624− -> TableReference params schema left
625− -> TableReference params schema (Join (NullifyTables left) right)
643+ -> FromClause params schema left
644+ -> FromClause params schema (Join (NullifyTables left) right)
626645 FullOuterJoin
627− :: TableReference params schema right
646+ :: FromClause params schema right
628647 -> Condition params (Join left right) 'Ungrouped
629− -> TableReference params schema left
630− -> TableReference params schema
648+ -> FromClause params schema left
649+ -> FromClause params schema
631650 (Join (NullifyTables left) (NullifyTables right))
632651
633−renderTableReference :: TableReference params schema tables -> ByteString
634−renderTableReference = \case
652+renderFromClause :: FromClause params schema tables -> ByteString
653+renderFromClause = \case
635654 Table table -> renderAliased renderTable table
636655 Subquery selection -> renderAliased renderQuery selection
637656 CrossJoin right left ->
638− renderTableReference left <+> "CROSS JOIN" <+> renderTableReference right
657+ renderFromClause left <+> "CROSS JOIN" <+> renderFromClause right
639658 InnerJoin right on left -> renderJoin "INNER JOIN" right on left
640659 LeftOuterJoin right on left -> renderJoin "LEFT OUTER JOIN" right on left
641660 RightOuterJoin right on left -> renderJoin "RIGHT OUTER JOIN" right on left
642661 FullOuterJoin right on left -> renderJoin "FULL OUTER JOIN" right on left
643662 where
644663 renderJoin op right on left =
645− renderTableReference left <+> op <+> renderTableReference right
664+ renderFromClause left <+> op <+> renderFromClause right
646665 <+> "ON" <+> renderExpression on
647666
648667data TableExpression
@@ -651,7 +670,7 @@ data TableExpression
651670 (tables :: [(Symbol,[(Symbol,ColumnType)])])
652671 (grouping :: Grouping)
653672 = TableExpression
654− { fromClause :: TableReference params schema tables
673+ { fromClause :: FromClause params schema tables
655674 , whereClause :: [Condition params tables 'Ungrouped]
656675 , groupByClause :: GroupByClause tables grouping
657676 , havingClause :: HavingClause params tables grouping
@@ -665,7 +684,7 @@ renderTableExpression
665684 -> ByteString
666685renderTableExpression
667686 (TableExpression tables whs' grps' hvs' srts' lims' offs') = mconcat
668− [ "FROM ", renderTableReference tables
687+ [ "FROM ", renderFromClause tables
669688 , renderWheres whs'
670689 , renderGroupByClause grps'
671690 , renderHavingClause hvs'
@@ -690,7 +709,7 @@ renderTableExpression
690709 offs -> " OFFSET" <+> fromString (show (sum offs))
691710
692711from
693− :: TableReference params schema tables
712+ :: FromClause params schema tables
694713 -> TableExpression params schema tables 'Ungrouped
695714from tables = TableExpression tables [] NoGroups NoHaving [] [] []
696715
@@ -990,7 +1009,7 @@ data TableConstraint
9901009 = UnsafeTableConstraint { renderTableConstraint :: ByteString }
9911010
9921011check
993− :: Condition '[] '[table ::: columns] 'Ungrouped
1012+ :: (forall table. Condition '[] '[table ::: columns] 'Ungrouped)
9941013 -> TableConstraint schema columns
9951014check condition = UnsafeTableConstraint $
9961015 "CHECK" <+> parenthesized (renderExpression condition)