Skip to content

Commit 9491770

Browse files
committed
refactored serialize
1 parent aeb9979 commit 9491770

29 files changed

+1840
-671
lines changed

Sources/SQLiteORM/AST/AssignList.swift

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,22 @@ public struct AssignList {
99
}
1010

1111
extension AssignList: Serializable {
12-
public func serialize(with serializationContext: SerializationContext) throws -> String {
12+
public func serialize(with serializationContext: SerializationContext) -> Result<String, Error> {
1313
var res = "SET"
1414
let assignsCount = self.assigns.count
1515
let newSerializationContext = serializationContext.bySkippingTableName()
1616
for (index, assign) in self.assigns.enumerated() {
17-
res += " \(try assign.serialize(with: newSerializationContext))"
18-
if index < assignsCount - 1 {
19-
res += ","
17+
switch assign.serialize(with: newSerializationContext) {
18+
case .success(let assignString):
19+
res += " \(assignString)"
20+
if index < assignsCount - 1 {
21+
res += ","
22+
}
23+
case .failure(let error):
24+
return .failure(error)
2025
}
2126
}
22-
return res
27+
return .success(res)
2328
}
2429
}
2530

Sources/SQLiteORM/AST/BinaryOperator.swift

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,22 @@ public class BinaryOperator: Expression {
1313
}
1414

1515
extension BinaryOperator: Serializable {
16-
public func serialize(with serializationContext: SerializationContext) throws -> String {
17-
let leftString = try self.lhs.serialize(with: serializationContext)
18-
let rightString = try self.rhs.serialize(with: serializationContext)
19-
let middle = "\(leftString) \(self.operatorType) \(rightString)"
20-
if self.operatorType != .assign {
21-
return "(\(middle))"
22-
} else {
23-
return middle
16+
public func serialize(with serializationContext: SerializationContext) -> Result<String, Error> {
17+
switch self.lhs.serialize(with: serializationContext) {
18+
case .success(let leftString):
19+
switch self.rhs.serialize(with: serializationContext) {
20+
case .success(let rightString):
21+
let middle = "\(leftString) \(self.operatorType) \(rightString)"
22+
if self.operatorType != .assign {
23+
return .success("(\(middle))")
24+
} else {
25+
return .success(middle)
26+
}
27+
case .failure(let error):
28+
return .failure(error)
29+
}
30+
case .failure(let error):
31+
return .failure(error)
2432
}
2533
}
2634
}

Sources/SQLiteORM/AST/BuiltInFunction.swift

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,17 +208,22 @@ public enum BuiltInFunction {
208208
}
209209

210210
extension BuiltInFunction: Serializable {
211-
public func serialize(with serializationContext: SerializationContext) throws -> String {
211+
public func serialize(with serializationContext: SerializationContext) -> Result<String, Error> {
212212
let arguments = self.arguments
213213
var result = "\(self.name)("
214214
for (i, argument) in arguments.enumerated() {
215-
result += try argument.serialize(with: serializationContext)
216-
if i < arguments.count - 1 {
217-
result += ", "
215+
switch argument.serialize(with: serializationContext) {
216+
case .success(let stringValue):
217+
result += stringValue
218+
if i < arguments.count - 1 {
219+
result += ", "
220+
}
221+
case .failure(let error):
222+
return .failure(error)
218223
}
219224
}
220225
result += ")"
221-
return result
226+
return .success(result)
222227
}
223228
}
224229

Sources/SQLiteORM/AST/ConflictClause.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public enum ConflictClause {
99
}
1010

1111
extension ConflictClause: Serializable {
12-
public func serialize(with serializationContext: SerializationContext) -> String {
12+
public func serialize(with serializationContext: SerializationContext) -> Result<String, Error> {
1313
var res = "ON CONFLICT "
1414
switch self {
1515
case .rollback: res += "ROLLBACK"
@@ -18,6 +18,6 @@ extension ConflictClause: Serializable {
1818
case .ignore: res += "IGNORE"
1919
case .replace: res += "REPLACE"
2020
}
21-
return res
21+
return .success(res)
2222
}
2323
}

Sources/SQLiteORM/AST/From.swift

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,13 @@ public func from<T>(_ type: T.Type) -> ASTFrom<T> {
1313
}
1414

1515
extension ASTFrom: Serializable {
16-
public func serialize(with serializationContext: SerializationContext) throws -> String {
17-
let tableName = try serializationContext.schemaProvider.tableName(type: self.type)
18-
return "FROM \(tableName)"
16+
public func serialize(with serializationContext: SerializationContext) -> Result<String, Error> {
17+
switch serializationContext.schemaProvider.tableName(type: self.type) {
18+
case .success(let tableName):
19+
return .success("FROM \(tableName)")
20+
case .failure(let error):
21+
return .failure(error)
22+
}
1923
}
2024
}
2125

Sources/SQLiteORM/AST/Like.swift

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,18 @@ public class ASTLike {
1111
}
1212

1313
extension ASTLike: Serializable {
14-
public func serialize(with serializationContext: SerializationContext) throws -> String {
15-
let leftString = try self.lhs.serialize(with: serializationContext)
16-
let rightString = try self.rhs.serialize(with: serializationContext)
17-
return "\(leftString) LIKE \(rightString)"
14+
public func serialize(with serializationContext: SerializationContext) -> Result<String, Error> {
15+
switch self.lhs.serialize(with: serializationContext) {
16+
case .success(let leftString):
17+
switch self.rhs.serialize(with: serializationContext) {
18+
case .success(let rightString):
19+
return .success("\(leftString) LIKE \(rightString)")
20+
case .failure(let error):
21+
return .failure(error)
22+
}
23+
case .failure(let error):
24+
return .failure(error)
25+
}
1826
}
1927
}
2028

Sources/SQLiteORM/AST/Limit.swift

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,25 @@ public class ASTLimit: SelectConstraint {
1313
}
1414

1515
extension ASTLimit: Serializable {
16-
public func serialize(with serializationContext: SerializationContext) throws -> String {
17-
if let offsetExpression = self.offsetExpression {
18-
if self.hasOffsetLabel {
19-
return "LIMIT \(try self.exression.serialize(with: serializationContext)) OFFSET \(try offsetExpression.serialize(with: serializationContext))"
16+
public func serialize(with serializationContext: SerializationContext) -> Result<String, Error> {
17+
switch self.exression.serialize(with: serializationContext) {
18+
case .success(let exressionString):
19+
if let offsetExpression = self.offsetExpression {
20+
switch offsetExpression.serialize(with: serializationContext) {
21+
case .success(let offsetExpressionString):
22+
if self.hasOffsetLabel {
23+
return .success("LIMIT \(exressionString) OFFSET \(offsetExpressionString)")
24+
} else {
25+
return .success("LIMIT \(exressionString), \(offsetExpressionString)")
26+
}
27+
case .failure(let error):
28+
return .failure(error)
29+
}
2030
} else {
21-
return "LIMIT \(try self.exression.serialize(with: serializationContext)), \(try offsetExpression.serialize(with: serializationContext))"
31+
return .success("LIMIT \(exressionString)")
2232
}
23-
} else {
24-
return "LIMIT \(try self.exression.serialize(with: serializationContext))"
33+
case .failure(let error):
34+
return .failure(error)
2535
}
2636
}
2737
}

Sources/SQLiteORM/AST/Order.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ public enum Order {
66
}
77

88
extension Order: Serializable {
9-
public func serialize(with serializationContext: SerializationContext) -> String {
9+
public func serialize(with serializationContext: SerializationContext) -> Result<String, Error> {
1010
switch self {
11-
case .asc: return "ASC"
12-
case .desc: return "DESC"
11+
case .asc: return .success("ASC")
12+
case .desc: return .success("DESC")
1313
}
1414
}
1515
}

Sources/SQLiteORM/AST/OrderBy.swift

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -41,25 +41,34 @@ public class ASTOrderBy: SelectConstraint {
4141
}
4242

4343
extension ASTOrderBy: Serializable {
44-
public func serialize(with serializationContext: SerializationContext) throws -> String {
45-
let expressionString = try self.expression.serialize(with: serializationContext)
46-
var result = "ORDER BY \(expressionString)"
47-
if let collateName = self.collateName {
48-
result += " COLLATE " + collateName
49-
}
50-
if let order = self.order {
51-
result += " " + order.serialize(with: serializationContext)
52-
}
53-
if let nullsStatus = self.nullsStatus {
54-
result += " NULLS "
55-
switch nullsStatus {
56-
case .first:
57-
result += "FIRST"
58-
case .last:
59-
result += "LAST"
44+
public func serialize(with serializationContext: SerializationContext) -> Result<String, Error> {
45+
switch self.expression.serialize(with: serializationContext) {
46+
case .success(let expressionString):
47+
var result = "ORDER BY \(expressionString)"
48+
if let collateName = self.collateName {
49+
result += " COLLATE " + collateName
50+
}
51+
if let order = self.order {
52+
switch order.serialize(with: serializationContext) {
53+
case .success(let orderString):
54+
result += " " + orderString
55+
case .failure(let error):
56+
return .failure(error)
57+
}
58+
}
59+
if let nullsStatus = self.nullsStatus {
60+
result += " NULLS "
61+
switch nullsStatus {
62+
case .first:
63+
result += "FIRST"
64+
case .last:
65+
result += "LAST"
66+
}
6067
}
68+
return .success(result)
69+
case .failure(let error):
70+
return .failure(error)
6171
}
62-
return result
6372
}
6473
}
6574

Sources/SQLiteORM/AST/UnaryOperator.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,13 @@ public class UnaryOperator: Expression {
1111
}
1212

1313
extension UnaryOperator: Serializable {
14-
public func serialize(with serializationContext: SerializationContext) throws -> String {
15-
return try "\(self.operatorType.description) \(self.expression.serialize(with: serializationContext))"
14+
public func serialize(with serializationContext: SerializationContext) -> Result<String, Error> {
15+
switch self.expression.serialize(with: serializationContext) {
16+
case .success(let expressionString):
17+
return .success("\(self.operatorType.description) \(expressionString)")
18+
case .failure(let error):
19+
return .failure(error)
20+
}
1621
}
1722
}
1823

0 commit comments

Comments
 (0)