Skip to content

Commit a36fd25

Browse files
committed
refactor: move COALESCE into Conditional namespace
- Renamed CoalesceFunction → Conditional.Coalesce - Maintains all existing functionality: - ?? operator overloads for query expressions - .ifnull() extension methods - Deprecated operator warnings for non-optional types - Follows namespace pattern: COALESCE is a conditional expression (PostgreSQL §9.18) - File renamed: Coalesce.swift → Conditional.Coalesce.swift Pattern: Semantic grouping by PostgreSQL documentation structure
1 parent f669487 commit a36fd25

File tree

1 file changed

+33
-31
lines changed

1 file changed

+33
-31
lines changed

Sources/StructuredQueriesPostgres/Functions/Conditional/Coalesce.swift renamed to Sources/StructuredQueriesPostgres/Functions/Conditional/Conditional.Coalesce.swift

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,35 +8,37 @@ import StructuredQueriesCore
88
//
99
// COALESCE returns the first non-NULL value from its arguments.
1010

11-
/// A query expression of a coalesce function.
12-
///
13-
/// Represents PostgreSQL's `COALESCE` function which returns the first non-NULL value.
14-
/// This is used to implement Swift's `??` operator for query expressions.
15-
///
16-
/// ```swift
17-
/// User.select { $0.nickname ?? $0.name }
18-
/// // SELECT coalesce("users"."nickname", "users"."name") FROM "users"
19-
/// ```
20-
public struct CoalesceFunction<QueryValue>: QueryExpression {
21-
private let arguments: [QueryFragment]
11+
extension Conditional {
12+
/// A query expression of a COALESCE function.
13+
///
14+
/// Represents PostgreSQL's `COALESCE` function which returns the first non-NULL value.
15+
/// This is used to implement Swift's `??` operator for query expressions.
16+
///
17+
/// ```swift
18+
/// User.select { $0.nickname ?? $0.name }
19+
/// // SELECT coalesce("users"."nickname", "users"."name") FROM "users"
20+
/// ```
21+
public struct Coalesce<QueryValue>: QueryExpression {
22+
private let arguments: [QueryFragment]
2223

23-
fileprivate init(_ arguments: [QueryFragment]) {
24-
self.arguments = arguments
25-
}
24+
fileprivate init(_ arguments: [QueryFragment]) {
25+
self.arguments = arguments
26+
}
2627

27-
public var queryFragment: QueryFragment {
28-
"coalesce(\(arguments.joined(separator: ", ")))"
29-
}
28+
public var queryFragment: QueryFragment {
29+
"coalesce(\(arguments.joined(separator: ", ")))"
30+
}
3031

31-
public static func ?? <T: _OptionalProtocol<QueryValue>>(
32-
lhs: some QueryExpression<T>,
33-
rhs: Self
34-
) -> CoalesceFunction<QueryValue> {
35-
Self([lhs.queryFragment] + rhs.arguments)
32+
public static func ?? <T: _OptionalProtocol<QueryValue>>(
33+
lhs: some QueryExpression<T>,
34+
rhs: Self
35+
) -> Coalesce<QueryValue> {
36+
Self([lhs.queryFragment] + rhs.arguments)
37+
}
3638
}
3739
}
3840

39-
extension CoalesceFunction where QueryValue: _OptionalProtocol {
41+
extension Conditional.Coalesce where QueryValue: _OptionalProtocol {
4042
public static func ?? (
4143
lhs: some QueryExpression<QueryValue>,
4244
rhs: Self
@@ -104,8 +106,8 @@ extension QueryExpression where QueryValue: _OptionalProtocol {
104106
public static func ?? (
105107
lhs: Self,
106108
rhs: some QueryExpression<QueryValue.Wrapped>
107-
) -> CoalesceFunction<QueryValue.Wrapped> {
108-
CoalesceFunction([lhs.queryFragment, rhs.queryFragment])
109+
) -> Conditional.Coalesce<QueryValue.Wrapped> {
110+
Conditional.Coalesce([lhs.queryFragment, rhs.queryFragment])
109111
}
110112

111113
/// Applies each side of the operator to the `coalesce` function
@@ -126,8 +128,8 @@ extension QueryExpression where QueryValue: _OptionalProtocol {
126128
public static func ?? (
127129
lhs: Self,
128130
rhs: some QueryExpression<QueryValue>
129-
) -> CoalesceFunction<QueryValue> {
130-
CoalesceFunction([lhs.queryFragment, rhs.queryFragment])
131+
) -> Conditional.Coalesce<QueryValue> {
132+
Conditional.Coalesce([lhs.queryFragment, rhs.queryFragment])
131133
}
132134

133135
@_documentation(visibility: private)
@@ -140,8 +142,8 @@ extension QueryExpression where QueryValue: _OptionalProtocol {
140142
public static func ?? (
141143
lhs: some QueryExpression<QueryValue.Wrapped>,
142144
rhs: Self
143-
) -> CoalesceFunction<QueryValue> {
144-
CoalesceFunction([lhs.queryFragment, rhs.queryFragment])
145+
) -> Conditional.Coalesce<QueryValue> {
146+
Conditional.Coalesce([lhs.queryFragment, rhs.queryFragment])
145147
}
146148
}
147149

@@ -156,7 +158,7 @@ extension QueryExpression {
156158
public static func ?? (
157159
lhs: some QueryExpression<QueryValue>,
158160
rhs: Self
159-
) -> CoalesceFunction<QueryValue> {
160-
CoalesceFunction([lhs.queryFragment, rhs.queryFragment])
161+
) -> Conditional.Coalesce<QueryValue> {
162+
Conditional.Coalesce([lhs.queryFragment, rhs.queryFragment])
161163
}
162164
}

0 commit comments

Comments
 (0)