Skip to content

Commit b8d6a9c

Browse files
committed
Generics work as expected now
1 parent 9d42763 commit b8d6a9c

File tree

3 files changed

+20
-115
lines changed

3 files changed

+20
-115
lines changed

Sources/SQLite/Foundation.swift

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -68,41 +68,3 @@ public var dateFormatter: DateFormatter = {
6868
formatter.timeZone = TimeZone(secondsFromGMT: 0)
6969
return formatter
7070
}()
71-
72-
// FIXME: rdar://problem/18673897 // subscript<T>…
73-
74-
extension QueryType {
75-
76-
public subscript(column: Expression<Data>) -> Expression<Data> {
77-
return namespace(column)
78-
}
79-
public subscript(column: Expression<Data?>) -> Expression<Data?> {
80-
return namespace(column)
81-
}
82-
83-
public subscript(column: Expression<Date>) -> Expression<Date> {
84-
return namespace(column)
85-
}
86-
public subscript(column: Expression<Date?>) -> Expression<Date?> {
87-
return namespace(column)
88-
}
89-
90-
}
91-
92-
extension Row {
93-
94-
public subscript(column: Expression<Data>) -> Data {
95-
return get(column)
96-
}
97-
public subscript(column: Expression<Data?>) -> Data? {
98-
return get(column)
99-
}
100-
101-
public subscript(column: Expression<Date>) -> Date {
102-
return get(column)
103-
}
104-
public subscript(column: Expression<Date?>) -> Date? {
105-
return get(column)
106-
}
107-
108-
}

Sources/SQLite/Typed/Query.swift

Lines changed: 4 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -726,47 +726,11 @@ extension QueryType {
726726
return Expression(".".join([tableName(), column]).expression)
727727
}
728728

729-
// FIXME: rdar://problem/18673897 // subscript<T>…
730-
731-
public subscript(column: Expression<Blob>) -> Expression<Blob> {
732-
return namespace(column)
733-
}
734-
public subscript(column: Expression<Blob?>) -> Expression<Blob?> {
735-
return namespace(column)
736-
}
737-
738-
public subscript(column: Expression<Bool>) -> Expression<Bool> {
739-
return namespace(column)
740-
}
741-
public subscript(column: Expression<Bool?>) -> Expression<Bool?> {
742-
return namespace(column)
743-
}
744-
745-
public subscript(column: Expression<Double>) -> Expression<Double> {
746-
return namespace(column)
747-
}
748-
public subscript(column: Expression<Double?>) -> Expression<Double?> {
729+
public subscript<T>(column: Expression<T>) -> Expression<T> {
749730
return namespace(column)
750731
}
751732

752-
public subscript(column: Expression<Int>) -> Expression<Int> {
753-
return namespace(column)
754-
}
755-
public subscript(column: Expression<Int?>) -> Expression<Int?> {
756-
return namespace(column)
757-
}
758-
759-
public subscript(column: Expression<Int64>) -> Expression<Int64> {
760-
return namespace(column)
761-
}
762-
public subscript(column: Expression<Int64?>) -> Expression<Int64?> {
763-
return namespace(column)
764-
}
765-
766-
public subscript(column: Expression<String>) -> Expression<String> {
767-
return namespace(column)
768-
}
769-
public subscript(column: Expression<String?>) -> Expression<String?> {
733+
public subscript<T>(column: Expression<T?>) -> Expression<T?> {
770734
return namespace(column)
771735
}
772736

@@ -1102,50 +1066,13 @@ public struct Row {
11021066
return valueAtIndex(idx)
11031067
}
11041068

1105-
// FIXME: rdar://problem/18673897 // subscript<T>…
1106-
1107-
public subscript(column: Expression<Blob>) -> Blob {
1108-
return get(column)
1109-
}
1110-
public subscript(column: Expression<Blob?>) -> Blob? {
1111-
return get(column)
1112-
}
1113-
1114-
public subscript(column: Expression<Bool>) -> Bool {
1115-
return get(column)
1116-
}
1117-
public subscript(column: Expression<Bool?>) -> Bool? {
1069+
public subscript<T : Value>(column: Expression<T>) -> T {
11181070
return get(column)
11191071
}
11201072

1121-
public subscript(column: Expression<Double>) -> Double {
1073+
public subscript<T : Value>(column: Expression<T?>) -> T? {
11221074
return get(column)
11231075
}
1124-
public subscript(column: Expression<Double?>) -> Double? {
1125-
return get(column)
1126-
}
1127-
1128-
public subscript(column: Expression<Int>) -> Int {
1129-
return get(column)
1130-
}
1131-
public subscript(column: Expression<Int?>) -> Int? {
1132-
return get(column)
1133-
}
1134-
1135-
public subscript(column: Expression<Int64>) -> Int64 {
1136-
return get(column)
1137-
}
1138-
public subscript(column: Expression<Int64?>) -> Int64? {
1139-
return get(column)
1140-
}
1141-
1142-
public subscript(column: Expression<String>) -> String {
1143-
return get(column)
1144-
}
1145-
public subscript(column: Expression<String?>) -> String? {
1146-
return get(column)
1147-
}
1148-
11491076
}
11501077

11511078
/// Determines the join operator for a query’s `JOIN` clause.

Tests/SQLiteTests/QueryTests.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,22 @@ class QueryIntegrationTests : SQLiteTestCase {
348348
}
349349
}
350350

351+
func test_select_optional() {
352+
for _ in try! db.prepare(users) {
353+
// FIXME
354+
}
355+
356+
let managerId = Expression<Int64?>("manager_id")
357+
let managers = users.alias("managers")
358+
359+
let alice = try! db.run(users.insert(email <- "[email protected]"))
360+
_ = try! db.run(users.insert(email <- "[email protected]", managerId <- alice))
361+
362+
for user in try! db.prepare(users.join(managers, on: managers[id] == users[managerId])) {
363+
_ = user[users[managerId]]
364+
}
365+
}
366+
351367
func test_scalar() {
352368
XCTAssertEqual(0, try! db.scalar(users.count))
353369
XCTAssertEqual(false, try! db.scalar(users.exists))

0 commit comments

Comments
 (0)