Skip to content

Commit 21d40a6

Browse files
committed
cleanup
1 parent a7caa0d commit 21d40a6

File tree

1 file changed

+15
-20
lines changed

1 file changed

+15
-20
lines changed

Sources/StructuredQueriesCore/SQLite/JSONFunctions.swift

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -94,30 +94,25 @@ extension PrimaryKeyedTableDefinition where QueryValue: Codable & Sendable {
9494

9595
private var jsonObject: some QueryExpression<QueryValue> {
9696
func open<TableColumn: TableColumnExpression>(_ column: TableColumn) -> QueryFragment {
97-
98-
func openCodable<C: Codable & Sendable>(_ codableType: C.Type) -> QueryFragment? {
99-
if TableColumn.QueryValue.self == JSONRepresentation<C>.self {
100-
return "\(quote: column.name, delimiter: .text), json(\(column))"
101-
} else {
102-
return nil
103-
}
104-
}
105-
if
106-
let codableType = TableColumn.QueryValue.QueryOutput.self as? any (Codable & Sendable).Type,
107-
let jsonQueryFragment = openCodable(codableType)
108-
{
109-
return jsonQueryFragment
97+
func isJSONRepresentation<T: Codable & Sendable>(_: T.Type) -> Bool {
98+
TableColumn.QueryValue.self == JSONRepresentation<T>.self
11099
}
111100

112-
switch TableColumn.QueryValue.self {
113-
case is Bool.Type:
114-
return
115-
"\(quote: column.name, delimiter: .text), iif(\(column) = 0, json('false'), iif(\(column) = 1, json('true'), NULL))"
116-
case is Date.UnixTimeRepresentation.Type:
101+
if TableColumn.QueryValue.self == Bool.self {
102+
return """
103+
\(quote: column.name, delimiter: .text), \
104+
json(CASE \(column) WHEN 0 THEN 'false' WHEN 1 THEN 'true' END)
105+
"""
106+
} else if TableColumn.QueryValue.self == Date.UnixTimeRepresentation.self {
117107
return "\(quote: column.name, delimiter: .text), datetime(\(column), 'unixepoch')"
118-
case is Date.JulianDayRepresentation.Type:
108+
} else if TableColumn.QueryValue.self == Date.JulianDayRepresentation.self {
119109
return "\(quote: column.name, delimiter: .text), datetime(\(column), 'julianday')"
120-
default:
110+
} else if let codableType = TableColumn.QueryValue.QueryOutput.self
111+
as? any (Codable & Sendable).Type,
112+
isJSONRepresentation(codableType)
113+
{
114+
return "\(quote: column.name, delimiter: .text), json(\(column))"
115+
} else {
121116
return "\(quote: column.name, delimiter: .text), json_quote(\(column))"
122117
}
123118
}

0 commit comments

Comments
 (0)