File tree Expand file tree Collapse file tree 2 files changed +34
-2
lines changed
Sources/StructuredQueriesCore Expand file tree Collapse file tree 2 files changed +34
-2
lines changed Original file line number Diff line number Diff line change @@ -84,7 +84,7 @@ extension QueryExpression where QueryValue: QueryBindable {
8484 /// - Returns: A maximum aggregate of this expression.
8585 public func max(
8686 filter: ( some QueryExpression < Bool > ) ? = Bool ? . none
87- ) -> some QueryExpression < Int ? > {
87+ ) -> some QueryExpression < QueryValue ? > {
8888 AggregateFunction ( " max " , self , filter: filter)
8989 }
9090
@@ -99,7 +99,7 @@ extension QueryExpression where QueryValue: QueryBindable {
9999 /// - Returns: A minimum aggregate of this expression.
100100 public func min(
101101 filter: ( some QueryExpression < Bool > ) ? = Bool ? . none
102- ) -> some QueryExpression < Int ? > {
102+ ) -> some QueryExpression < QueryValue ? > {
103103 AggregateFunction ( " min " , self , filter: filter)
104104 }
105105}
Original file line number Diff line number Diff line change @@ -135,9 +135,41 @@ where Wrapped.TableColumns: PrimaryKeyedTableDefinition {
135135}
136136
137137extension QueryExpression where QueryValue: _OptionalProtocol {
138+ /// Creates and optionalizes a new expression from this one by applying an unwrapped version of
139+ /// this expression to a given closure.
140+ ///
141+ /// ```swift
142+ /// Reminder.where {
143+ /// $0.dueDate.map { $0 > Date() }
144+ /// }
145+ /// // SELECT … FROM "reminders"
146+ /// // WHERE "reminders"."dueDate" > '2018-01-29 00:08:00.000'
147+ /// ```
148+ ///
149+ /// - Parameter transform: A closure that takes an unwrapped version of this expression.
150+ /// - Returns: The result of the transform function, optionalized.
138151 public func map< T> (
139152 _ transform: ( SQLQueryExpression < QueryValue . Wrapped > ) -> some QueryExpression < T >
140153 ) -> some QueryExpression < T ? > {
141154 SQLQueryExpression ( transform ( SQLQueryExpression ( queryFragment) ) . queryFragment)
142155 }
156+
157+ /// Creates a new optional expression from this one by applying an unwrapped version of this
158+ /// expression to a given closure.
159+ ///
160+ /// ```swift
161+ /// Reminder.select {
162+ /// $0.dueDate.flatMap { $0.max() }
163+ /// }
164+ /// // SELECT max("reminders"."dueDate") FROM "reminders"
165+ /// // => [Date?]
166+ /// ```
167+ ///
168+ /// - Parameter transform: A closure that takes an unwrapped version of this expression.
169+ /// - Returns: The result of the transform function.
170+ public func flatMap< T> (
171+ _ transform: ( SQLQueryExpression < QueryValue . Wrapped > ) -> some QueryExpression < T ? >
172+ ) -> some QueryExpression < T ? > {
173+ SQLQueryExpression ( transform ( SQLQueryExpression ( queryFragment) ) . queryFragment)
174+ }
143175}
You can’t perform that action at this time.
0 commit comments