11use crate :: expression:: SelectableExpression ;
22use crate :: pg:: Pg ;
3+ use crate :: query_builder:: order_clause:: { NoOrderClause , OrderClause } ;
34use crate :: query_builder:: { AstPass , QueryFragment , QueryId , SelectQuery , SelectStatement } ;
45use crate :: query_dsl:: methods:: DistinctOnDsl ;
6+ use crate :: query_dsl:: order_dsl:: ValidOrderingForDistinct ;
57use crate :: result:: QueryResult ;
8+ use crate :: sql_types:: SingleValue ;
9+ use crate :: Expression ;
610
711/// Represents `DISTINCT ON (...)`
812#[ derive( Debug , Clone , Copy , QueryId ) ]
913pub struct DistinctOnClause < T > ( pub ( crate ) T ) ;
1014
15+ impl < T > ValidOrderingForDistinct < DistinctOnClause < T > > for NoOrderClause { }
16+ impl < T > ValidOrderingForDistinct < DistinctOnClause < T > > for OrderClause < ( T , ) > { }
17+ impl < T > ValidOrderingForDistinct < DistinctOnClause < T > > for OrderClause < T >
18+ where
19+ T : Expression ,
20+ T :: SqlType : SingleValue ,
21+ {
22+ }
23+
1124impl < T > QueryFragment < Pg > for DistinctOnClause < T >
1225where
1326 T : QueryFragment < Pg > ,
@@ -24,7 +37,9 @@ impl<ST, F, S, D, W, O, LOf, G, Selection> DistinctOnDsl<Selection>
2437 for SelectStatement < F , S , D , W , O , LOf , G >
2538where
2639 Selection : SelectableExpression < F > ,
40+ Selection :: SqlType : SingleValue ,
2741 Self : SelectQuery < SqlType = ST > ,
42+ O : ValidOrderingForDistinct < DistinctOnClause < Selection > > ,
2843 SelectStatement < F , S , DistinctOnClause < Selection > , W , O , LOf , G > : SelectQuery < SqlType = ST > ,
2944{
3045 type Output = SelectStatement < F , S , DistinctOnClause < Selection > , W , O , LOf , G > ;
0 commit comments