Skip to content

Commit 8dfc25f

Browse files
committed
added parenthesis for binary operators
1 parent cad9ff4 commit 8dfc25f

File tree

4 files changed

+103
-98
lines changed

4 files changed

+103
-98
lines changed

Sources/SQLiteORM/AST/BinaryOperator.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@ extension BinaryOperator: Serializable {
1616
public func serialize(with serializationContext: SerializationContext) throws -> String {
1717
let leftString = try self.lhs.serialize(with: serializationContext)
1818
let rightString = try self.rhs.serialize(with: serializationContext)
19-
return "\(leftString) \(self.operatorType) \(rightString)"
19+
let middle = "\(leftString) \(self.operatorType) \(rightString)"
20+
if self.operatorType != .assign {
21+
return "(\(middle))"
22+
} else {
23+
return middle
24+
}
2025
}
2126
}
2227

Tests/SQLiteORMTests/SerializeTests.swift

Lines changed: 82 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -132,91 +132,91 @@ class SerializeTests: XCTestCase {
132132
}
133133
let testCases = [
134134
// Int
135-
TestCase(value: equal(lhs: \User.id, rhs: 5), expected: "users.\"id\" == 5"),
136-
TestCase(value: \User.id == 5, expected: "users.\"id\" == 5"),
137-
TestCase(value: notEqual(lhs: \User.id, rhs: 10), expected: "users.\"id\" != 10"),
138-
TestCase(value: \User.id != 10, expected: "users.\"id\" != 10"),
139-
TestCase(value: greaterThan(lhs: \User.id, rhs: 3), expected: "users.\"id\" > 3"),
140-
TestCase(value: \User.id > 3, expected: "users.\"id\" > 3"),
141-
TestCase(value: greaterOrEqual(lhs: \User.id, rhs: 1), expected: "users.\"id\" >= 1"),
142-
TestCase(value: \User.id >= 1, expected: "users.\"id\" >= 1"),
143-
TestCase(value: lesserThan(lhs: \User.id, rhs: 2), expected: "users.\"id\" < 2"),
144-
TestCase(value: \User.id < 2, expected: "users.\"id\" < 2"),
145-
TestCase(value: lesserOrEqual(lhs: \User.id, rhs: 4), expected: "users.\"id\" <= 4"),
146-
TestCase(value: \User.id <= 4, expected: "users.\"id\" <= 4"),
147-
TestCase(value: equal(lhs: 5, rhs: \User.id), expected: "5 == users.\"id\""),
148-
TestCase(value: 5 == \User.id, expected: "5 == users.\"id\""),
149-
TestCase(value: notEqual(lhs: 10, rhs: \User.id), expected: "10 != users.\"id\""),
150-
TestCase(value: 10 != \User.id, expected: "10 != users.\"id\""),
151-
TestCase(value: 3 > \User.id, expected: "3 > users.\"id\""),
152-
TestCase(value: greaterOrEqual(lhs: 1, rhs: \User.id), expected: "1 >= users.\"id\""),
153-
TestCase(value: 1 >= \User.id, expected: "1 >= users.\"id\""),
154-
TestCase(value: lesserThan(lhs: 2, rhs: \User.id), expected: "2 < users.\"id\""),
155-
TestCase(value: 2 < \User.id, expected: "2 < users.\"id\""),
156-
TestCase(value: lesserOrEqual(lhs: 4, rhs: \User.id), expected: "4 <= users.\"id\""),
157-
TestCase(value: 4 <= \User.id, expected: "4 <= users.\"id\""),
135+
TestCase(value: equal(lhs: \User.id, rhs: 5), expected: "(users.\"id\" == 5)"),
136+
TestCase(value: \User.id == 5, expected: "(users.\"id\" == 5)"),
137+
TestCase(value: notEqual(lhs: \User.id, rhs: 10), expected: "(users.\"id\" != 10)"),
138+
TestCase(value: \User.id != 10, expected: "(users.\"id\" != 10)"),
139+
TestCase(value: greaterThan(lhs: \User.id, rhs: 3), expected: "(users.\"id\" > 3)"),
140+
TestCase(value: \User.id > 3, expected: "(users.\"id\" > 3)"),
141+
TestCase(value: greaterOrEqual(lhs: \User.id, rhs: 1), expected: "(users.\"id\" >= 1)"),
142+
TestCase(value: \User.id >= 1, expected: "(users.\"id\" >= 1)"),
143+
TestCase(value: lesserThan(lhs: \User.id, rhs: 2), expected: "(users.\"id\" < 2)"),
144+
TestCase(value: \User.id < 2, expected: "(users.\"id\" < 2)"),
145+
TestCase(value: lesserOrEqual(lhs: \User.id, rhs: 4), expected: "(users.\"id\" <= 4)"),
146+
TestCase(value: \User.id <= 4, expected: "(users.\"id\" <= 4)"),
147+
TestCase(value: equal(lhs: 5, rhs: \User.id), expected: "(5 == users.\"id\")"),
148+
TestCase(value: 5 == \User.id, expected: "(5 == users.\"id\")"),
149+
TestCase(value: notEqual(lhs: 10, rhs: \User.id), expected: "(10 != users.\"id\")"),
150+
TestCase(value: 10 != \User.id, expected: "(10 != users.\"id\")"),
151+
TestCase(value: 3 > \User.id, expected: "(3 > users.\"id\")"),
152+
TestCase(value: greaterOrEqual(lhs: 1, rhs: \User.id), expected: "(1 >= users.\"id\")"),
153+
TestCase(value: 1 >= \User.id, expected: "(1 >= users.\"id\")"),
154+
TestCase(value: lesserThan(lhs: 2, rhs: \User.id), expected: "(2 < users.\"id\")"),
155+
TestCase(value: 2 < \User.id, expected: "(2 < users.\"id\")"),
156+
TestCase(value: lesserOrEqual(lhs: 4, rhs: \User.id), expected: "(4 <= users.\"id\")"),
157+
TestCase(value: 4 <= \User.id, expected: "(4 <= users.\"id\")"),
158158

159-
TestCase(value: conc(\User.id, "Skillet"), expected: "users.\"id\" || 'Skillet'"),
160-
TestCase(value: SQLiteORM.add(\User.id, 5), expected: "users.\"id\" + 5"),
161-
TestCase(value: \User.id + 5, expected: "users.\"id\" + 5"),
162-
TestCase(value: sub(\User.id, 5), expected: "users.\"id\" - 5"),
163-
TestCase(value: \User.id - 5, expected: "users.\"id\" - 5"),
164-
TestCase(value: mul(\User.id, 5), expected: "users.\"id\" * 5"),
165-
TestCase(value: \User.id * 5, expected: "users.\"id\" * 5"),
166-
TestCase(value: div(\User.id, 5), expected: "users.\"id\" / 5"),
167-
TestCase(value: \User.id / 5, expected: "users.\"id\" / 5"),
168-
TestCase(value: mod(\User.id, 5), expected: "users.\"id\" % 5"),
169-
TestCase(value: \User.id % 5, expected: "users.\"id\" % 5"),
170-
TestCase(value: and(\User.id, 5), expected: "users.\"id\" AND 5"),
171-
TestCase(value: \User.id && 5, expected: "users.\"id\" AND 5"),
172-
TestCase(value: (\User.id).and(5), expected: "users.\"id\" AND 5"),
173-
TestCase(value: or(\User.id, 5), expected: "users.\"id\" OR 5"),
174-
TestCase(value: \User.id || 5, expected: "users.\"id\" OR 5"),
175-
TestCase(value: (\User.id).or(5), expected: "users.\"id\" OR 5"),
159+
TestCase(value: conc(\User.id, "Skillet"), expected: "(users.\"id\" || 'Skillet')"),
160+
TestCase(value: SQLiteORM.add(\User.id, 5), expected: "(users.\"id\" + 5)"),
161+
TestCase(value: \User.id + 5, expected: "(users.\"id\" + 5)"),
162+
TestCase(value: sub(\User.id, 5), expected: "(users.\"id\" - 5)"),
163+
TestCase(value: \User.id - 5, expected: "(users.\"id\" - 5)"),
164+
TestCase(value: mul(\User.id, 5), expected: "(users.\"id\" * 5)"),
165+
TestCase(value: \User.id * 5, expected: "(users.\"id\" * 5)"),
166+
TestCase(value: div(\User.id, 5), expected: "(users.\"id\" / 5)"),
167+
TestCase(value: \User.id / 5, expected: "(users.\"id\" / 5)"),
168+
TestCase(value: mod(\User.id, 5), expected: "(users.\"id\" % 5)"),
169+
TestCase(value: \User.id % 5, expected: "(users.\"id\" % 5)"),
170+
TestCase(value: and(\User.id, 5), expected: "(users.\"id\" AND 5)"),
171+
TestCase(value: \User.id && 5, expected: "(users.\"id\" AND 5)"),
172+
TestCase(value: (\User.id).and(5), expected: "(users.\"id\" AND 5)"),
173+
TestCase(value: or(\User.id, 5), expected: "(users.\"id\" OR 5)"),
174+
TestCase(value: \User.id || 5, expected: "(users.\"id\" OR 5)"),
175+
TestCase(value: (\User.id).or(5), expected: "(users.\"id\" OR 5)"),
176176

177-
TestCase(value: conc("Skillet", \User.id), expected: "'Skillet' || users.\"id\""),
178-
TestCase(value: SQLiteORM.add(5, \User.id), expected: "5 + users.\"id\""),
179-
TestCase(value: 5 + \User.id, expected: "5 + users.\"id\""),
180-
TestCase(value: sub(5, \User.id), expected: "5 - users.\"id\""),
181-
TestCase(value: 5 - \User.id, expected: "5 - users.\"id\""),
182-
TestCase(value: mul(5, \User.id), expected: "5 * users.\"id\""),
183-
TestCase(value: 5 * \User.id, expected: "5 * users.\"id\""),
184-
TestCase(value: div(5, \User.id), expected: "5 / users.\"id\""),
185-
TestCase(value: 5 / \User.id, expected: "5 / users.\"id\""),
186-
TestCase(value: mod(5, \User.id), expected: "5 % users.\"id\""),
187-
TestCase(value: 5 % \User.id, expected: "5 % users.\"id\""),
188-
TestCase(value: and(5, \User.id), expected: "5 AND users.\"id\""),
189-
TestCase(value: 5 && \User.id, expected: "5 AND users.\"id\""),
190-
TestCase(value: 5.and(\User.id), expected: "5 AND users.\"id\""),
191-
TestCase(value: or(5, \User.id), expected: "5 OR users.\"id\""),
192-
TestCase(value: 5.or(\User.id), expected: "5 OR users.\"id\""),
177+
TestCase(value: conc("Skillet", \User.id), expected: "('Skillet' || users.\"id\")"),
178+
TestCase(value: SQLiteORM.add(5, \User.id), expected: "(5 + users.\"id\")"),
179+
TestCase(value: 5 + \User.id, expected: "(5 + users.\"id\")"),
180+
TestCase(value: sub(5, \User.id), expected: "(5 - users.\"id\")"),
181+
TestCase(value: 5 - \User.id, expected: "(5 - users.\"id\")"),
182+
TestCase(value: mul(5, \User.id), expected: "(5 * users.\"id\")"),
183+
TestCase(value: 5 * \User.id, expected: "(5 * users.\"id\")"),
184+
TestCase(value: div(5, \User.id), expected: "(5 / users.\"id\")"),
185+
TestCase(value: 5 / \User.id, expected: "(5 / users.\"id\")"),
186+
TestCase(value: mod(5, \User.id), expected: "(5 % users.\"id\")"),
187+
TestCase(value: 5 % \User.id, expected: "(5 % users.\"id\")"),
188+
TestCase(value: and(5, \User.id), expected: "(5 AND users.\"id\")"),
189+
TestCase(value: 5 && \User.id, expected: "(5 AND users.\"id\")"),
190+
TestCase(value: 5.and(\User.id), expected: "(5 AND users.\"id\")"),
191+
TestCase(value: or(5, \User.id), expected: "(5 OR users.\"id\")"),
192+
TestCase(value: 5.or(\User.id), expected: "(5 OR users.\"id\")"),
193193

194194
// String
195-
TestCase(value: equal(lhs: \User.name, rhs: "Nicki"), expected: "users.\"name\" == 'Nicki'"),
196-
TestCase(value: \User.name == "Nicki", expected: "users.\"name\" == 'Nicki'"),
197-
TestCase(value: notEqual(lhs: \User.name, rhs: "Alvaro"), expected: "users.\"name\" != 'Alvaro'"),
198-
TestCase(value: \User.name != "Alvaro", expected: "users.\"name\" != 'Alvaro'"),
199-
TestCase(value: greaterThan(lhs: \User.name, rhs: "Ava Max"), expected: "users.\"name\" > 'Ava Max'"),
200-
TestCase(value: \User.name > "Ava Max", expected: "users.\"name\" > 'Ava Max'"),
201-
TestCase(value: greaterOrEqual(lhs: \User.name, rhs: "Rita Ora"), expected: "users.\"name\" >= 'Rita Ora'"),
202-
TestCase(value: \User.name >= "Rita Ora", expected: "users.\"name\" >= 'Rita Ora'"),
203-
TestCase(value: lesserThan(lhs: \User.name, rhs: "Kesha"), expected: "users.\"name\" < 'Kesha'"),
204-
TestCase(value: \User.name < "Kesha", expected: "users.\"name\" < 'Kesha'"),
205-
TestCase(value: lesserOrEqual(lhs: \User.name, rhs: "Oliver Heldens"), expected: "users.\"name\" <= 'Oliver Heldens'"),
206-
TestCase(value: \User.name <= "Oliver Heldens", expected: "users.\"name\" <= 'Oliver Heldens'"),
207-
TestCase(value: equal(lhs: "Nicki", rhs: \User.name), expected: "'Nicki' == users.\"name\""),
208-
TestCase(value: "Nicki" == \User.name, expected: "'Nicki' == users.\"name\""),
209-
TestCase(value: notEqual(lhs: "Alvaro", rhs: \User.name), expected: "'Alvaro' != users.\"name\""),
210-
TestCase(value: "Alvaro" != \User.name, expected: "'Alvaro' != users.\"name\""),
211-
TestCase(value: greaterThan(lhs: "Ava Max", rhs: \User.name), expected: "'Ava Max' > users.\"name\""),
212-
TestCase(value: "Ava Max" > \User.name, expected: "'Ava Max' > users.\"name\""),
213-
TestCase(value: greaterOrEqual(lhs: "Rita Ora", rhs: \User.name), expected: "'Rita Ora' >= users.\"name\""),
214-
TestCase(value: "Rita Ora" >= \User.name, expected: "'Rita Ora' >= users.\"name\""),
215-
TestCase(value: lesserThan(lhs: "Kesha", rhs: \User.name), expected: "'Kesha' < users.\"name\""),
216-
TestCase(value: "Kesha" < \User.name, expected: "'Kesha' < users.\"name\""),
217-
TestCase(value: lesserOrEqual(lhs: "Oliver Heldens", rhs: \User.name), expected: "'Oliver Heldens' <= users.\"name\""),
218-
TestCase(value: "Oliver Heldens" <= \User.name, expected: "'Oliver Heldens' <= users.\"name\""),
219-
TestCase(value: conc("Skillet", \User.name), expected: "'Skillet' || users.\"name\"")
195+
TestCase(value: equal(lhs: \User.name, rhs: "Nicki"), expected: "(users.\"name\" == 'Nicki')"),
196+
TestCase(value: \User.name == "Nicki", expected: "(users.\"name\" == 'Nicki')"),
197+
TestCase(value: notEqual(lhs: \User.name, rhs: "Alvaro"), expected: "(users.\"name\" != 'Alvaro')"),
198+
TestCase(value: \User.name != "Alvaro", expected: "(users.\"name\" != 'Alvaro')"),
199+
TestCase(value: greaterThan(lhs: \User.name, rhs: "Ava Max"), expected: "(users.\"name\" > 'Ava Max')"),
200+
TestCase(value: \User.name > "Ava Max", expected: "(users.\"name\" > 'Ava Max')"),
201+
TestCase(value: greaterOrEqual(lhs: \User.name, rhs: "Rita Ora"), expected: "(users.\"name\" >= 'Rita Ora')"),
202+
TestCase(value: \User.name >= "Rita Ora", expected: "(users.\"name\" >= 'Rita Ora')"),
203+
TestCase(value: lesserThan(lhs: \User.name, rhs: "Kesha"), expected: "(users.\"name\" < 'Kesha')"),
204+
TestCase(value: \User.name < "Kesha", expected: "(users.\"name\" < 'Kesha')"),
205+
TestCase(value: lesserOrEqual(lhs: \User.name, rhs: "Oliver Heldens"), expected: "(users.\"name\" <= 'Oliver Heldens')"),
206+
TestCase(value: \User.name <= "Oliver Heldens", expected: "(users.\"name\" <= 'Oliver Heldens')"),
207+
TestCase(value: equal(lhs: "Nicki", rhs: \User.name), expected: "('Nicki' == users.\"name\")"),
208+
TestCase(value: "Nicki" == \User.name, expected: "('Nicki' == users.\"name\")"),
209+
TestCase(value: notEqual(lhs: "Alvaro", rhs: \User.name), expected: "('Alvaro' != users.\"name\")"),
210+
TestCase(value: "Alvaro" != \User.name, expected: "('Alvaro' != users.\"name\")"),
211+
TestCase(value: greaterThan(lhs: "Ava Max", rhs: \User.name), expected: "('Ava Max' > users.\"name\")"),
212+
TestCase(value: "Ava Max" > \User.name, expected: "('Ava Max' > users.\"name\")"),
213+
TestCase(value: greaterOrEqual(lhs: "Rita Ora", rhs: \User.name), expected: "('Rita Ora' >= users.\"name\")"),
214+
TestCase(value: "Rita Ora" >= \User.name, expected: "('Rita Ora' >= users.\"name\")"),
215+
TestCase(value: lesserThan(lhs: "Kesha", rhs: \User.name), expected: "('Kesha' < users.\"name\")"),
216+
TestCase(value: "Kesha" < \User.name, expected: "('Kesha' < users.\"name\")"),
217+
TestCase(value: lesserOrEqual(lhs: "Oliver Heldens", rhs: \User.name), expected: "('Oliver Heldens' <= users.\"name\")"),
218+
TestCase(value: "Oliver Heldens" <= \User.name, expected: "('Oliver Heldens' <= users.\"name\")"),
219+
TestCase(value: conc("Skillet", \User.name), expected: "('Skillet' || users.\"name\")")
220220
]
221221
for testCase in testCases {
222222
let storage = try Storage(filename: "",
@@ -295,7 +295,7 @@ class SerializeTests: XCTestCase {
295295
}
296296
let testCases = [
297297
TestCase(expression: where_(true), expected: "WHERE 1"),
298-
TestCase(expression: where_(\User.id > 5), expected: "WHERE users.\"id\" > 5")
298+
TestCase(expression: where_(\User.id > 5), expected: "WHERE (users.\"id\" > 5)")
299299
]
300300
for testCase in testCases {
301301
let storage = try Storage(filename: "",

0 commit comments

Comments
 (0)