@@ -20,7 +20,12 @@ extension QueryExpression where QueryValue: QueryBindable {
2020 distinct isDistinct: Bool = false ,
2121 filter: ( some QueryExpression < Bool > ) ? = Bool ? . none
2222 ) -> some QueryExpression < Int > {
23- AggregateFunction ( " count " , isDistinct: isDistinct, self , filter: filter)
23+ AggregateFunction (
24+ " count " ,
25+ isDistinct: isDistinct,
26+ [ queryFragment] ,
27+ filter: filter? . queryFragment
28+ )
2429 }
2530}
2631
@@ -46,11 +51,12 @@ where QueryValue: _OptionalPromotable, QueryValue._Optionalized.Wrapped == Strin
4651 order: ( some QueryExpression ) ? = Bool ? . none,
4752 filter: ( some QueryExpression < Bool > ) ? = Bool ? . none
4853 ) -> some QueryExpression < String ? > {
49- if let separator {
50- return AggregateFunction ( " group_concat " , self , separator, order: order, filter: filter)
51- } else {
52- return AggregateFunction ( " group_concat " , self , order: order, filter: filter)
53- }
54+ AggregateFunction (
55+ " group_concat " ,
56+ separator. map { [ queryFragment, $0. queryFragment] } ?? [ queryFragment] ,
57+ order: order? . queryFragment,
58+ filter: filter? . queryFragment
59+ )
5460 }
5561
5662 /// A string concatenation aggregate of this expression.
@@ -68,7 +74,13 @@ where QueryValue: _OptionalPromotable, QueryValue._Optionalized.Wrapped == Strin
6874 order: ( some QueryExpression ) ? = Bool ? . none,
6975 filter: ( some QueryExpression < Bool > ) ? = Bool ? . none
7076 ) -> some QueryExpression < String ? > {
71- AggregateFunction ( " group_concat " , isDistinct: isDistinct, self , order: order, filter: filter)
77+ AggregateFunction (
78+ " group_concat " ,
79+ isDistinct: isDistinct,
80+ [ queryFragment] ,
81+ order: order? . queryFragment,
82+ filter: filter? . queryFragment
83+ )
7284 }
7385}
7486
@@ -85,7 +97,7 @@ extension QueryExpression where QueryValue: QueryBindable {
8597 public func max(
8698 filter: ( some QueryExpression < Bool > ) ? = Bool ? . none
8799 ) -> some QueryExpression < Int ? > {
88- AggregateFunction ( " max " , self , filter: filter)
100+ AggregateFunction ( " max " , [ queryFragment ] , filter: filter? . queryFragment )
89101 }
90102
91103 /// A minimum aggregate of this expression.
@@ -100,7 +112,7 @@ extension QueryExpression where QueryValue: QueryBindable {
100112 public func min(
101113 filter: ( some QueryExpression < Bool > ) ? = Bool ? . none
102114 ) -> some QueryExpression < Int ? > {
103- AggregateFunction ( " min " , self , filter: filter)
115+ AggregateFunction ( " min " , [ queryFragment ] , filter: filter? . queryFragment )
104116 }
105117}
106118
@@ -122,7 +134,7 @@ where QueryValue: _OptionalPromotable, QueryValue._Optionalized.Wrapped: Numeric
122134 distinct isDistinct: Bool = false ,
123135 filter: ( some QueryExpression < Bool > ) ? = Bool ? . none
124136 ) -> some QueryExpression < Double ? > {
125- AggregateFunction ( " avg " , isDistinct: isDistinct, self , filter: filter)
137+ AggregateFunction ( " avg " , isDistinct: isDistinct, [ queryFragment ] , filter: filter? . queryFragment )
126138 }
127139
128140 /// An sum aggregate of this expression.
@@ -145,7 +157,10 @@ where QueryValue: _OptionalPromotable, QueryValue._Optionalized.Wrapped: Numeric
145157 // TODO: Report issue to Swift team.
146158 SQLQueryExpression (
147159 AggregateFunction < QueryValue . _Optionalized > (
148- " sum " , isDistinct: isDistinct, self , filter: filter
160+ " sum " ,
161+ isDistinct: isDistinct,
162+ [ queryFragment] ,
163+ filter: filter? . queryFragment
149164 )
150165 . queryFragment
151166 )
@@ -167,7 +182,12 @@ where QueryValue: _OptionalPromotable, QueryValue._Optionalized.Wrapped: Numeric
167182 distinct isDistinct: Bool = false ,
168183 filter: ( some QueryExpression < Bool > ) ? = Bool ? . none
169184 ) -> some QueryExpression < QueryValue > {
170- AggregateFunction ( " total " , isDistinct: isDistinct, self , filter: filter)
185+ AggregateFunction (
186+ " total " ,
187+ isDistinct: isDistinct,
188+ [ queryFragment] ,
189+ filter: filter? . queryFragment
190+ )
171191 }
172192}
173193
@@ -182,9 +202,9 @@ extension QueryExpression where Self == AggregateFunction<Int> {
182202 /// - Parameter filter: A `FILTER` clause to apply to the aggregation.
183203 /// - Returns: A `count(*)` aggregate.
184204 public static func count(
185- filter: ( some QueryExpression < Bool > ) ? = Bool ? . none
205+ filter: ( any QueryExpression < Bool > ) ? = nil
186206 ) -> Self {
187- AggregateFunction ( " count " , SQLQueryExpression ( " * " ) , filter: filter)
207+ AggregateFunction ( " count " , [ " * " ] , filter: filter? . queryFragment )
188208 }
189209}
190210
@@ -196,18 +216,18 @@ public struct AggregateFunction<QueryValue>: QueryExpression {
196216 var order : QueryFragment ?
197217 var filter : QueryFragment ?
198218
199- init < each Argument : QueryExpression > (
219+ init (
200220 _ name: QueryFragment ,
201221 isDistinct: Bool = false ,
202- _ arguments: repeat each Argument ,
203- order: ( some QueryExpression ) ? = Bool ? . none ,
204- filter: ( some QueryExpression ) ? = Bool ? . none
222+ _ arguments: [ QueryFragment ] = [ ] ,
223+ order: QueryFragment ? = nil ,
224+ filter: QueryFragment ? = nil
205225 ) {
206226 self . name = name
207227 self . isDistinct = isDistinct
208- self . arguments = Array ( repeat each arguments)
209- self . order = order? . queryFragment
210- self . filter = filter? . queryFragment
228+ self . arguments = arguments
229+ self . order = order
230+ self . filter = filter
211231 }
212232
213233 public var queryFragment : QueryFragment {
0 commit comments