@@ -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