Skip to content

Commit 33103bb

Browse files
committed
AllColumnsExcluding tests
1 parent 6b23181 commit 33103bb

11 files changed

+751
-30
lines changed

Tests/GRDBTests/AssociationBelongsToRowScopeTests.swift

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ class AssociationBelongsToRowScopeTests: GRDBTestCase {
6666
XCTAssertEqual(rows[0].scopes["team"]!, ["id":1, "name":"Reds"])
6767
}
6868

69+
func testDefaultScopeIncludingRequiredRestrictedSelection() throws {
70+
let dbQueue = try makeDatabaseQueue()
71+
let request = Player.select(.allColumns(excluding: ["name"])).including(required: Player.defaultTeam)
72+
let rows = try dbQueue.inDatabase { try Row.fetchAll($0, request) }
73+
XCTAssertEqual(rows.count, 1)
74+
XCTAssertEqual(rows[0].unscoped, ["id":1, "teamId":1])
75+
XCTAssertEqual(Set(rows[0].scopes.names), ["team"])
76+
XCTAssertEqual(rows[0].scopes["team"]!, ["id":1, "name":"Reds"])
77+
}
78+
6979
func testDefaultScopeAnnotatedWithRequired() throws {
7080
let dbQueue = try makeDatabaseQueue()
7181
let request = Player.annotated(withRequired: Player.defaultTeam)
@@ -82,6 +92,14 @@ class AssociationBelongsToRowScopeTests: GRDBTestCase {
8292
XCTAssertEqual(rows[0], ["id":1, "teamId":1, "name":"Arthur", "teamName":"Reds"])
8393
}
8494

95+
func testDefaultScopeAnnotatedWithRequiredRestrictedSelection() throws {
96+
let dbQueue = try makeDatabaseQueue()
97+
let request = Player.annotated(withRequired: Player.defaultTeam.select(.allColumns(excluding: ["name"])))
98+
let rows = try dbQueue.inDatabase { try Row.fetchAll($0, request) }
99+
XCTAssertEqual(rows.count, 1)
100+
XCTAssertEqual(rows[0], ["id":1, "teamId":1, "name":"Arthur", "id":1])
101+
}
102+
85103
func testDefaultScopeIncludingOptional() throws {
86104
let dbQueue = try makeDatabaseQueue()
87105
let request = Player.including(optional: Player.defaultTeam)
@@ -113,6 +131,15 @@ class AssociationBelongsToRowScopeTests: GRDBTestCase {
113131
XCTAssertEqual(rows[1], ["id":2, "teamId":nil, "name":"Barbara", "teamName":nil])
114132
}
115133

134+
func testDefaultScopeAnnotatedWithOptionalRestrictedSelection() throws {
135+
let dbQueue = try makeDatabaseQueue()
136+
let request = Player.annotated(withOptional: Player.defaultTeam.select(.allColumns(excluding: ["name"])))
137+
let rows = try dbQueue.inDatabase { try Row.fetchAll($0, request) }
138+
XCTAssertEqual(rows.count, 2)
139+
XCTAssertEqual(rows[0], ["id":1, "teamId":1, "name":"Arthur", "id":1])
140+
XCTAssertEqual(rows[1], ["id":2, "teamId":nil, "name":"Barbara", "id":nil])
141+
}
142+
116143
func testDefaultScopeJoiningRequired() throws {
117144
let dbQueue = try makeDatabaseQueue()
118145
let request = Player.joining(required: Player.defaultTeam)
@@ -153,6 +180,16 @@ class AssociationBelongsToRowScopeTests: GRDBTestCase {
153180
XCTAssertEqual(rows[0].scopes["customTeam"]!, ["id":1, "name":"Reds"])
154181
}
155182

183+
func testCustomScopeIncludingRequiredRestrictedSelection() throws {
184+
let dbQueue = try makeDatabaseQueue()
185+
let request = Player.select(.allColumns(excluding: ["name"])).including(required: Player.customTeam)
186+
let rows = try dbQueue.inDatabase { try Row.fetchAll($0, request) }
187+
XCTAssertEqual(rows.count, 1)
188+
XCTAssertEqual(rows[0].unscoped, ["id":1, "teamId":1])
189+
XCTAssertEqual(Set(rows[0].scopes.names), ["customTeam"])
190+
XCTAssertEqual(rows[0].scopes["customTeam"]!, ["id":1, "name":"Reds"])
191+
}
192+
156193
func testCustomScopeAnnotatedWithRequired() throws {
157194
let dbQueue = try makeDatabaseQueue()
158195
let request = Player.annotated(withRequired: Player.customTeam)
@@ -169,6 +206,14 @@ class AssociationBelongsToRowScopeTests: GRDBTestCase {
169206
XCTAssertEqual(rows[0], ["id":1, "teamId":1, "name":"Arthur", "teamName":"Reds"])
170207
}
171208

209+
func testCustomScopeAnnotatedWithRequiredRestrictedSelection() throws {
210+
let dbQueue = try makeDatabaseQueue()
211+
let request = Player.annotated(withRequired: Player.customTeam.select(.allColumns(excluding: ["name"])))
212+
let rows = try dbQueue.inDatabase { try Row.fetchAll($0, request) }
213+
XCTAssertEqual(rows.count, 1)
214+
XCTAssertEqual(rows[0], ["id":1, "teamId":1, "name":"Arthur", "id":1])
215+
}
216+
172217
func testCustomScopeIncludingOptional() throws {
173218
let dbQueue = try makeDatabaseQueue()
174219
let request = Player.including(optional: Player.customTeam)
@@ -200,6 +245,15 @@ class AssociationBelongsToRowScopeTests: GRDBTestCase {
200245
XCTAssertEqual(rows[1], ["id":2, "teamId":nil, "name":"Barbara", "teamName":nil])
201246
}
202247

248+
func testCustomScopeAnnotatedWithOptionalRestrictedSelection() throws {
249+
let dbQueue = try makeDatabaseQueue()
250+
let request = Player.annotated(withOptional: Player.customTeam.select(.allColumns(excluding: ["name"])))
251+
let rows = try dbQueue.inDatabase { try Row.fetchAll($0, request) }
252+
XCTAssertEqual(rows.count, 2)
253+
XCTAssertEqual(rows[0], ["id":1, "teamId":1, "name":"Arthur", "id":1])
254+
XCTAssertEqual(rows[1], ["id":2, "teamId":nil, "name":"Barbara", "id":nil])
255+
}
256+
203257
func testCustomPluralScopeIncludingRequired() throws {
204258
// Make sure explicit plural keys are preserved
205259
let dbQueue = try makeDatabaseQueue()

Tests/GRDBTests/AssociationBelongsToSQLDerivationTests.swift

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import GRDB
55
private struct A : TableRecord {
66
static let databaseTableName = "a"
77
static let b = belongsTo(B.self)
8-
static let restrictedB = belongsTo(RestrictedB.self)
8+
static let restrictedB1 = belongsTo(RestrictedB1.self)
9+
static let restrictedB2 = belongsTo(RestrictedB2.self)
910
static let extendedB = belongsTo(ExtendedB.self)
1011
}
1112

@@ -14,11 +15,16 @@ private struct B : TableRecord {
1415
static let databaseTableName = "b"
1516
}
1617

17-
private struct RestrictedB : TableRecord {
18+
private struct RestrictedB1 : TableRecord {
1819
static let databaseTableName = "b"
1920
static var databaseSelection: [any SQLSelectable] { [Column("name")] }
2021
}
2122

23+
private struct RestrictedB2 : TableRecord {
24+
static let databaseTableName = "b"
25+
static var databaseSelection: [any SQLSelectable] { [.allColumns(excluding: ["id"])] }
26+
}
27+
2228
private struct ExtendedB : TableRecord {
2329
static let databaseTableName = "b"
2430
static var databaseSelection: [any SQLSelectable] { [.allColumns, .rowID] }
@@ -48,7 +54,12 @@ class AssociationBelongsToSQLDerivationTests: GRDBTestCase {
4854
FROM "a" \
4955
JOIN "b" ON "b"."id" = "a"."bid"
5056
""")
51-
try assertEqualSQL(db, A.including(required: A.restrictedB), """
57+
try assertEqualSQL(db, A.including(required: A.restrictedB1), """
58+
SELECT "a".*, "b"."name" \
59+
FROM "a" \
60+
JOIN "b" ON "b"."id" = "a"."bid"
61+
""")
62+
try assertEqualSQL(db, A.including(required: A.restrictedB2), """
5263
SELECT "a".*, "b"."name" \
5364
FROM "a" \
5465
JOIN "b" ON "b"."id" = "a"."bid"
@@ -89,9 +100,9 @@ class AssociationBelongsToSQLDerivationTests: GRDBTestCase {
89100
let request = A
90101
.aliased(aAlias)
91102
.including(required: A.b
92-
.select(
93-
Column("name"),
94-
(Column("id") + aAlias[Column("id")]).forKey("foo")))
103+
.select(
104+
Column("name"),
105+
(Column("id") + aAlias[Column("id")]).forKey("foo")))
95106
try assertEqualSQL(db, request, """
96107
SELECT "a".*, "b"."name", "b"."id" + "a"."id" AS "foo" \
97108
FROM "a" \

0 commit comments

Comments
 (0)